diff --git a/telegram-agy-bot/formatters.py b/telegram-agy-bot/formatters.py index 90a611a..14873df 100644 --- a/telegram-agy-bot/formatters.py +++ b/telegram-agy-bot/formatters.py @@ -218,86 +218,79 @@ def format_tool_call(tool_name: str, tool_args: Any, lang: str = "fa") -> str: # Tool specific highlights if tool_name == "run_command": cmd = params.get("CommandLine", "") - target = f"💻 {escape_html(cmd[:120])}" if cmd else "" - elif tool_name == "write_to_file": + target = escape_html(cmd[:120]) if cmd else "" + elif tool_name in ("write_to_file", "replace_file_content"): file_p = params.get("TargetFile", "") instr = params.get("Instruction", "") if file_p: - target = f"📝 {escape_html(Path(file_p).name if '/' in file_p else file_p)}" - if instr and not action: - action = instr[:100] - elif tool_name == "replace_file_content": - file_p = params.get("TargetFile", "") - instr = params.get("Instruction", "") - if file_p: - target = f"✏️ {escape_html(Path(file_p).name if '/' in file_p else file_p)}" + target = escape_html(Path(file_p).name if "/" in file_p else file_p) if instr and not action: action = instr[:100] elif tool_name in ("view_file", "view_image"): file_p = params.get("AbsolutePath", "") if file_p: - target = f"👁️ {escape_html(Path(file_p).name if '/' in file_p else file_p)}" + target = escape_html(Path(file_p).name if "/" in file_p else file_p) elif tool_name == "list_dir": dir_p = params.get("DirectoryPath", "") if dir_p: - target = f"📂 {escape_html(dir_p[:80])}" + target = escape_html(dir_p[:80]) elif tool_name == "grep_search": q = params.get("Query", "") if q: - target = f"🔍 {escape_html(q[:80])}" + target = escape_html(q[:80]) elif tool_name == "find_by_name": pat = params.get("Pattern", "") if pat: - target = f"📁 {escape_html(pat[:80])}" + target = escape_html(pat[:80]) elif tool_name == "search_web": q = params.get("query", "") if q: - target = f"🌐 {escape_html(q[:80])}" + target = escape_html(q[:80]) elif tool_name == "read_url_content": u = params.get("Url", "") if u: - target = f"🔗 {escape_html(u[:80])}" + target = escape_html(u[:80]) elif tool_name == "generate_image": p = params.get("Prompt", "") if p: - target = f"🎨 {escape_html(p[:80])}" + target = escape_html(p[:80]) elif tool_name == "schedule": timing = params.get("CronExpression") or (f"{params.get('DurationSeconds')}s" if params.get("DurationSeconds") else "") or params.get("Prompt", "") if timing: - target = f"⏰ {escape_html(str(timing)[:80])}" + target = escape_html(str(timing)[:80]) elif tool_name == "manage_task": act = params.get("Action", "") tid = params.get("TaskId", "") - target = f"⚙️ {escape_html(act)} {escape_html(tid)}" + target = f"{escape_html(act)} {escape_html(tid)}".strip() elif tool_name == "invoke_subagent": subagents = params.get("Subagents", []) roles = [s.get("Role", s.get("TypeName", "Agent")) for s in subagents if isinstance(s, dict)] if roles: - target = f"🤖 {escape_html(', '.join(roles)[:80])}" + target = escape_html(", ".join(roles)[:80]) elif tool_name == "define_subagent": name = params.get("name", "") if name: - target = f"🧠 {escape_html(name[:80])}" + target = escape_html(name[:80]) elif tool_name == "manage_subagents": act = params.get("Action", "") - target = f"👥 {escape_html(act)}" if act else "" + target = escape_html(act) if act else "" elif tool_name == "send_message": msg = params.get("Message", "") - target = f"💬 {escape_html(msg[:80])}" if msg else "" + target = escape_html(msg[:80]) if msg else "" elif tool_name == "ask_question": - target = "❓ درخواست تایید / سوال" + target = "درخواست تایید / سوال" if not action and not target and isinstance(tool_args, str) and tool_args.strip(): # Fallback short string preview short_args = tool_args.strip().replace("\n", " ") if len(short_args) > 100: short_args = short_args[:100] + "..." - target = f"{escape_html(short_args)}" + target = escape_html(short_args) action_text = f" ({escape_html(action)})" if action else "" - out = f"{tool_emoji} {label}: {escape_html(tool_name)}{action_text}" + out = f"{label}: {escape_html(tool_name)} {tool_emoji}{action_text}" if target: - out += f"\n ↳ {target}" + out += f"\n ↳ {target}" return out + "\n" def markdown_to_telegram_html(text: str) -> str: diff --git a/telegram-agy-bot/sessions.json b/telegram-agy-bot/sessions.json index 6ee6fe2..92f4739 100644 --- a/telegram-agy-bot/sessions.json +++ b/telegram-agy-bot/sessions.json @@ -16,9 +16,9 @@ "model": "gemini-3.7-flash-auto", "effort": "high", "language": "fa", - "last_context_length": 12547, - "last_total_tokens": 138536, - "last_response": "\u0642\u0627\u0644\u0628 \u0648 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0632\u0646\u062f\u0647 \u0627\u062c\u0631\u0627\u06cc \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u062f\u0631 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0627\u0633\u062a:\n\n---\n\n### \ud83e\udde9 \u0627\u062c\u0632\u0627 \u0648 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u0628\u0632\u0627\u0631:\n1. `{tool_emoji}` : \u0627\u06cc\u0645\u0648\u062c\u06cc \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0627\u0628\u0632\u0627\u0631 (\u0645\u062b\u0644\u0627\u064b \ud83d\udcbb \u06cc\u0627 \ud83d\udc41\ufe0f)\n2. `{label}` : \u0628\u0631\u0686\u0633\u0628 \u06a9\u0644\u0645\u0647 \u0627\u0628\u0632\u0627\u0631 (\u062f\u0631 \u0632\u0628\u0627\u0646 \u0641\u0627\u0631\u0633\u06cc: `\u0627\u0628\u0632\u0627\u0631` / \u062f\u0631 \u0632\u0628\u0627\u0646 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc: `Tool`)\n3. `{tool_name}` : \u0646\u0627\u0645 \u0633\u06cc\u0633\u062a\u0645\u06cc \u0627\u0628\u0632\u0627\u0631 (\u0645\u062b\u0644\u0627\u064b `run_command` \u06cc\u0627 `view_file`)\n4. `{action}` : \u062a\u0648\u0636\u06cc\u062d \u062e\u0644\u0627\u0635\u0647 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u0627\u0633\u062a (\u0645\u062b\u0644\u0627\u064b: `\u0628\u0631\u0631\u0633\u06cc \u0641\u0627\u06cc\u0644 \u06a9\u0627\u0646\u0641\u06cc\u06af`)\n5. `{target}` : \u0645\u0642\u062f\u0627\u0631 \u0627\u0635\u0644\u06cc \u0648\u0631\u0648\u062f\u06cc \u0627\u0628\u0632\u0627\u0631 \u0645\u0627\u0646\u0646\u062f \u0646\u0627\u0645 \u0641\u0627\u06cc\u0644\u060c \u06a9\u0627\u0645\u0646\u062f \u06cc\u0627 \u06a9\u0648\u0626\u0631\u06cc (\u0645\u062b\u0644\u0627\u064b: `formatters.py`)\n\n---\n\n### \ud83d\udcd0 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0639\u0644\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0634\u062f\u0647 (\u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0645\u062b\u0627\u0644 \u062e\u0631\u0648\u062c\u06cc \u062a\u0644\u06af\u0631\u0627\u0645):\n\n**\u0642\u0627\u0644\u0628 \u0645\u062a\u0646\u06cc (Template):**\n```text\n{tool_emoji} {label}: {tool_name} ({action})\n \u21b3 {tool_emoji} {target}\n```\n\n**\u0646\u0645\u0648\u0646\u0647 \u062e\u0631\u0648\u062c\u06cc \u0648\u0627\u0642\u0639\u06cc \u062f\u0631 \u062a\u0644\u06af\u0631\u0627\u0645:**\n> \ud83d\udcbb **\u0627\u0628\u0632\u0627\u0631:** `run_command` (\u0628\u0631\u0631\u0633\u06cc \u067e\u0631\u062f\u0627\u0632\u0634\u200c\u0647\u0627\u06cc \u0633\u0631\u0648\u0631) \n>   \u21b3 \ud83d\udcbb `ps aux | grep bot` \n> \n> \ud83d\udc41\ufe0f **\u0627\u0628\u0632\u0627\u0631:** `view_file` (\u0645\u0634\u0627\u0647\u062f\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0628\u0627\u062a) \n>   \u21b3 \ud83d\udc41\ufe0f `formatters.py` \n> \n> \ud83d\udcdd **\u0627\u0628\u0632\u0627\u0631:** `write_to_file` (\u0633\u0627\u062e\u062a \u06a9\u0646\u062a\u0631\u0644\u0631 \u062c\u062f\u06cc\u062f) \n>   \u21b3 \ud83d\udcdd `index.php` \n\n---\n\n### \u270d\ufe0f \u0642\u0627\u0644\u0628 \u062e\u0627\u0645 \u062c\u0647\u062a \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u0627\u0631\u0633\u0627\u0644 \u062a\u0648\u0633\u0637 \u0634\u0645\u0627:\n\n\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0627\u0632 \u062e\u0637\u200c\u0647\u0627\u060c \u0686\u06cc\u062f\u0645\u0627\u0646\u060c \u067e\u0631\u0627\u0646\u062a\u0632\u0647\u0627\u060c \u0627\u06cc\u0645\u0648\u062c\u06cc\u200c\u0647\u0627\u060c \u0628\u0648\u0644\u062f \u06cc\u0627 \u06a9\u062f \u0628\u0648\u062f\u0646\u060c \u06cc\u0627 \u062d\u062a\u06cc \u062a\u06a9\u200c\u062e\u0637\u06cc/\u062f\u0648\u062e\u0637\u06cc \u0628\u0648\u062f\u0646 \u0631\u0627 \u0637\u0628\u0642 \u0633\u0644\u06cc\u0642\u0647 \u062e\u0648\u062f \u062f\u0631 \u0628\u0627\u06a9\u0633 \u0632\u06cc\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f:\n\n```text\n\u0642\u0627\u0644\u0628 \u062e\u0637 \u0627\u0648\u0644:\n{tool_emoji} {label}: {tool_name} ({action})\n\n\u0642\u0627\u0644\u0628 \u062e\u0637 \u062f\u0648\u0645 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f \u062a\u0627\u0631\u06af\u062a/\u0641\u0627\u06cc\u0644/\u06a9\u0627\u0645\u0646\u062f):\n \u21b3 {tool_emoji} {target}\n```\n\n*(\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u0627\u06af\u0631 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc\u062f \u0628\u062f\u0648\u0646 \u06a9\u0644\u0645\u0647 \u00ab\u0627\u0628\u0632\u0627\u0631:\u00bb \u0628\u0627\u0634\u062f\u060c \u06cc\u0627 \u062f\u0631 \u06cc\u06a9 \u062e\u0637 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f\u060c \u06cc\u0627 \u0634\u06a9\u0644 \u0641\u0644\u0634 \u21b3 \u0639\u0648\u0636 \u0634\u0648\u062f\u060c \u06a9\u0627\u0641\u06cc\u0633\u062a \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0644\u062e\u0648\u0627\u0647\u062a\u0627\u0646 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u062a\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u0645).*\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: default\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/default\n", + "last_context_length": 16995, + "last_total_tokens": 229565, + "last_response": "\u0642\u0627\u0644\u0628 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0634\u0645\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u0631\u0648\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0641\u0631\u0645\u062a\u200c\u062f\u0647\u06cc \u0632\u0646\u062f\u0647 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f:\n\n### \ud83d\udcd0 \u0633\u0627\u062e\u062a\u0627\u0631 \u062c\u062f\u06cc\u062f:\n> **\u0627\u0628\u0632\u0627\u0631:** `run_command \ud83d\udcbb` (\u062a\u0648\u0636\u06cc\u062d \u0639\u0645\u0644\u06a9\u0631\u062f) \n>   \u21b3 `ls -la` \n> \n> **\u0627\u0628\u0632\u0627\u0631:** `view_file \ud83d\udc41\ufe0f` \n>   \u21b3 `formatters.py` \n\n\u062a\u06af \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0631\u0628\u0627\u062a \u0627\u0631\u0633\u0627\u0644 \u0634\u062f \u062a\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0641\u0639\u0627\u0644 \u0634\u0648\u0646\u062f.\n\n[[RESTART_BOT]]\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: default\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/default\n", "created_at": 1787995349.975879, "description": "", "conversation_titles": { @@ -87,19 +87,19 @@ } }, "turn_in_progress": false, - "last_prompt": "\u062d\u0627\u0644\u0627 \u06cc\u0647 \u0641\u0631\u0645\u062a \u0628\u0631\u0627\u0645 \u0628\u0641\u0631\u0633\u062a \u06a9\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0645\u0648\u062c\u06cc \u0647\u0631 \u0627\u0628\u0632\u0627\u0631 \u06a9\u062c\u0627\u0633\u062a \u0627\u0633\u0645\u0634 \u06a9\u062c\u0627\u0633\u062a \u0648 \u063a\u06cc\u0631\u0647 \u062a\u0627 \u0645\u0646 \u0648\u06cc\u0631\u0627\u06cc\u0634\u0634 \u06a9\u0646\u0645 \u0648 \u062a\u0648 \u062f\u0642\u06cc\u0642\u0627 \u0647\u0645\u0648\u0646 \u0642\u0627\u0644\u0628 \u0631\u0648 \u067e\u06cc\u0627\u062f\u0647 \u06a9\u0646\u06cc", - "last_response": "\u0642\u0627\u0644\u0628 \u0648 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0632\u0646\u062f\u0647 \u0627\u062c\u0631\u0627\u06cc \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u062f\u0631 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0627\u0633\u062a:\n\n---\n\n### \ud83e\udde9 \u0627\u062c\u0632\u0627 \u0648 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u0628\u0632\u0627\u0631:\n1. `{tool_emoji}` : \u0627\u06cc\u0645\u0648\u062c\u06cc \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0627\u0628\u0632\u0627\u0631 (\u0645\u062b\u0644\u0627\u064b \ud83d\udcbb \u06cc\u0627 \ud83d\udc41\ufe0f)\n2. `{label}` : \u0628\u0631\u0686\u0633\u0628 \u06a9\u0644\u0645\u0647 \u0627\u0628\u0632\u0627\u0631 (\u062f\u0631 \u0632\u0628\u0627\u0646 \u0641\u0627\u0631\u0633\u06cc: `\u0627\u0628\u0632\u0627\u0631` / \u062f\u0631 \u0632\u0628\u0627\u0646 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc: `Tool`)\n3. `{tool_name}` : \u0646\u0627\u0645 \u0633\u06cc\u0633\u062a\u0645\u06cc \u0627\u0628\u0632\u0627\u0631 (\u0645\u062b\u0644\u0627\u064b `run_command` \u06cc\u0627 `view_file`)\n4. `{action}` : \u062a\u0648\u0636\u06cc\u062d \u062e\u0644\u0627\u0635\u0647 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u0627\u0633\u062a (\u0645\u062b\u0644\u0627\u064b: `\u0628\u0631\u0631\u0633\u06cc \u0641\u0627\u06cc\u0644 \u06a9\u0627\u0646\u0641\u06cc\u06af`)\n5. `{target}` : \u0645\u0642\u062f\u0627\u0631 \u0627\u0635\u0644\u06cc \u0648\u0631\u0648\u062f\u06cc \u0627\u0628\u0632\u0627\u0631 \u0645\u0627\u0646\u0646\u062f \u0646\u0627\u0645 \u0641\u0627\u06cc\u0644\u060c \u06a9\u0627\u0645\u0646\u062f \u06cc\u0627 \u06a9\u0648\u0626\u0631\u06cc (\u0645\u062b\u0644\u0627\u064b: `formatters.py`)\n\n---\n\n### \ud83d\udcd0 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0639\u0644\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u200c\u0634\u062f\u0647 (\u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0645\u062b\u0627\u0644 \u062e\u0631\u0648\u062c\u06cc \u062a\u0644\u06af\u0631\u0627\u0645):\n\n**\u0642\u0627\u0644\u0628 \u0645\u062a\u0646\u06cc (Template):**\n```text\n{tool_emoji} {label}: {tool_name} ({action})\n \u21b3 {tool_emoji} {target}\n```\n\n**\u0646\u0645\u0648\u0646\u0647 \u062e\u0631\u0648\u062c\u06cc \u0648\u0627\u0642\u0639\u06cc \u062f\u0631 \u062a\u0644\u06af\u0631\u0627\u0645:**\n> \ud83d\udcbb **\u0627\u0628\u0632\u0627\u0631:** `run_command` (\u0628\u0631\u0631\u0633\u06cc \u067e\u0631\u062f\u0627\u0632\u0634\u200c\u0647\u0627\u06cc \u0633\u0631\u0648\u0631) \n>   \u21b3 \ud83d\udcbb `ps aux | grep bot` \n> \n> \ud83d\udc41\ufe0f **\u0627\u0628\u0632\u0627\u0631:** `view_file` (\u0645\u0634\u0627\u0647\u062f\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0628\u0627\u062a) \n>   \u21b3 \ud83d\udc41\ufe0f `formatters.py` \n> \n> \ud83d\udcdd **\u0627\u0628\u0632\u0627\u0631:** `write_to_file` (\u0633\u0627\u062e\u062a \u06a9\u0646\u062a\u0631\u0644\u0631 \u062c\u062f\u06cc\u062f) \n>   \u21b3 \ud83d\udcdd `index.php` \n\n---\n\n### \u270d\ufe0f \u0642\u0627\u0644\u0628 \u062e\u0627\u0645 \u062c\u0647\u062a \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u0627\u0631\u0633\u0627\u0644 \u062a\u0648\u0633\u0637 \u0634\u0645\u0627:\n\n\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0627\u0632 \u062e\u0637\u200c\u0647\u0627\u060c \u0686\u06cc\u062f\u0645\u0627\u0646\u060c \u067e\u0631\u0627\u0646\u062a\u0632\u0647\u0627\u060c \u0627\u06cc\u0645\u0648\u062c\u06cc\u200c\u0647\u0627\u060c \u0628\u0648\u0644\u062f \u06cc\u0627 \u06a9\u062f \u0628\u0648\u062f\u0646\u060c \u06cc\u0627 \u062d\u062a\u06cc \u062a\u06a9\u200c\u062e\u0637\u06cc/\u062f\u0648\u062e\u0637\u06cc \u0628\u0648\u062f\u0646 \u0631\u0627 \u0637\u0628\u0642 \u0633\u0644\u06cc\u0642\u0647 \u062e\u0648\u062f \u062f\u0631 \u0628\u0627\u06a9\u0633 \u0632\u06cc\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f:\n\n```text\n\u0642\u0627\u0644\u0628 \u062e\u0637 \u0627\u0648\u0644:\n{tool_emoji} {label}: {tool_name} ({action})\n\n\u0642\u0627\u0644\u0628 \u062e\u0637 \u062f\u0648\u0645 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f \u062a\u0627\u0631\u06af\u062a/\u0641\u0627\u06cc\u0644/\u06a9\u0627\u0645\u0646\u062f):\n \u21b3 {tool_emoji} {target}\n```\n\n*(\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u0627\u06af\u0631 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc\u062f \u0628\u062f\u0648\u0646 \u06a9\u0644\u0645\u0647 \u00ab\u0627\u0628\u0632\u0627\u0631:\u00bb \u0628\u0627\u0634\u062f\u060c \u06cc\u0627 \u062f\u0631 \u06cc\u06a9 \u062e\u0637 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f\u060c \u06cc\u0627 \u0634\u06a9\u0644 \u0641\u0644\u0634 \u21b3 \u0639\u0648\u0636 \u0634\u0648\u062f\u060c \u06a9\u0627\u0641\u06cc\u0633\u062a \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0644\u062e\u0648\u0627\u0647\u062a\u0627\u0646 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u062a\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u0645).*\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: default\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/default\n", + "last_prompt": "{label}: {tool_name} {tool_emoji} ({action})\n\u00a0 \u21b3 {target}", + "last_response": "\u0642\u0627\u0644\u0628 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0634\u0645\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u0631\u0648\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0641\u0631\u0645\u062a\u200c\u062f\u0647\u06cc \u0632\u0646\u062f\u0647 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f:\n\n### \ud83d\udcd0 \u0633\u0627\u062e\u062a\u0627\u0631 \u062c\u062f\u06cc\u062f:\n> **\u0627\u0628\u0632\u0627\u0631:** `run_command \ud83d\udcbb` (\u062a\u0648\u0636\u06cc\u062d \u0639\u0645\u0644\u06a9\u0631\u062f) \n>   \u21b3 `ls -la` \n> \n> **\u0627\u0628\u0632\u0627\u0631:** `view_file \ud83d\udc41\ufe0f` \n>   \u21b3 `formatters.py` \n\n\u062a\u06af \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0631\u0628\u0627\u062a \u0627\u0631\u0633\u0627\u0644 \u0634\u062f \u062a\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0641\u0639\u0627\u0644 \u0634\u0648\u0646\u062f.\n\n[[RESTART_BOT]]\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: default\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/default\n", "last_status_msg_id": null, "restart_pending": false, "last_delivered": true, - "last_update_time": 1788096166.3349664, + "last_update_time": 1788096268.3567042, "workspace": "/root", "conversation_id": "fe6e374f-2ba1-41ca-9176-60a724029cfe", "model": "gemini-3.7-flash-auto", "effort": "high", "language": "fa", - "last_context_length": 12547, - "last_total_tokens": 138536 + "last_context_length": 16995, + "last_total_tokens": 229565 }, "232801087": { "chat_id": 232801087,