diff --git a/telegram-agy-bot/agy_engine.py b/telegram-agy-bot/agy_engine.py
index 46eeba2..723e6fa 100644
--- a/telegram-agy-bot/agy_engine.py
+++ b/telegram-agy-bot/agy_engine.py
@@ -115,6 +115,7 @@ class Project:
last_response: Optional[str] = None
created_at: float = field(default_factory=time.time)
description: str = ""
+ conversation_titles: Dict[str, str] = field(default_factory=dict)
@dataclass
class Session:
@@ -249,6 +250,7 @@ class SessionManager:
"last_response",
"created_at",
"description",
+ "conversation_titles",
)
}
if "name" not in clean_p:
@@ -261,6 +263,8 @@ class SessionManager:
clean_p["conversation_history"] = []
if clean_p.get("conversation_id") and clean_p["conversation_id"] not in clean_p["conversation_history"]:
clean_p["conversation_history"].append(clean_p["conversation_id"])
+ if "conversation_titles" not in clean_p or not isinstance(clean_p["conversation_titles"], dict):
+ clean_p["conversation_titles"] = {}
# Non-admin users cannot own or access the "default" /root project
if not is_admin_user and (p_name == "default" or clean_p.get("workspace") == settings.default_workspace):
@@ -334,6 +338,7 @@ class SessionManager:
"last_response": p_obj.last_response,
"created_at": p_obj.created_at,
"description": p_obj.description,
+ "conversation_titles": p_obj.conversation_titles,
}
curr = self.get_current_project(sess.chat_id)
data[str(k)] = {
@@ -950,6 +955,9 @@ class SessionManager:
except Exception as e:
logger.error(f"Error removing brain dir {brain_path}: {e}")
+ if hasattr(curr, "conversation_titles") and matched_cid in curr.conversation_titles:
+ curr.conversation_titles.pop(matched_cid, None)
+
self.save()
return True, f"✅ گفتگوی {matched_cid[:8]}... با موفقیت حذف شد."
@@ -981,6 +989,8 @@ class SessionManager:
curr.conversation_history = []
curr.conversation_id = None
+ if hasattr(curr, "conversation_titles"):
+ curr.conversation_titles = {}
curr.last_response = None
curr.last_context_length = None
curr.last_total_tokens = None
@@ -990,6 +1000,55 @@ class SessionManager:
self.save()
return True, f"✅ تمام {count} گفتگوی پروژه با موفقیت حذف و پاکسازی شدند.", count
+ def set_conversation_title(self, chat_id: int, title: str, conv_id: Optional[str] = None, project_name: Optional[str] = None) -> tuple[bool, str, str]:
+ """
+ Sets a custom title / topic for the specified conversation (or active conversation).
+ Returns (success, message, matched_conv_id).
+ """
+ session = self.get_or_create(chat_id)
+ target_proj = None
+ if project_name:
+ accessible = self.get_all_accessible_projects(chat_id)
+ for k, p in accessible.items():
+ if k.lower() == project_name.lower() or p.name.lower() == project_name.lower():
+ target_proj = p
+ break
+ if not target_proj:
+ target_proj = self.get_current_project(chat_id)
+
+ if not target_proj:
+ return False, "⚠️ پروژهای یافت نشد.", ""
+
+ clean_title = (title or "").strip()
+ if not clean_title:
+ return False, "⚠️ عنوان مشخص نشده است.", ""
+
+ target_cid = conv_id.strip() if conv_id else (target_proj.conversation_id or "")
+
+ # If user passed a number like "1", "#1", or partial ID
+ if target_cid and (target_cid.startswith("#") or target_cid.isdigit() or len(target_cid) < 15):
+ convs = self.get_project_conversations(chat_id)
+ clean_num = target_cid.lstrip("#")
+ if clean_num.isdigit():
+ idx = int(clean_num)
+ if 1 <= idx <= len(convs):
+ target_cid = convs[idx - 1]["id"]
+ else:
+ for c in convs:
+ if c["id"].lower().startswith(target_cid.lower()):
+ target_cid = c["id"]
+ break
+
+ if not target_cid:
+ return False, "⚠️ گفتگوی فعالی برای تغییر عنوان یافت نشد.", ""
+
+ if not hasattr(target_proj, "conversation_titles") or not isinstance(target_proj.conversation_titles, dict):
+ target_proj.conversation_titles = {}
+
+ target_proj.conversation_titles[target_cid] = clean_title
+ self.save()
+ return True, f"✅ عنوان گفتگو به «{escape_html(clean_title)}» تغییر یافت.", target_cid
+
def get_project_conversations(self, chat_id: int) -> List[Dict[str, Any]]:
"""
Returns sorted list of conversation summaries for active project (newest first).
@@ -1017,14 +1076,17 @@ class SessionManager:
logger.debug(f"Error scanning brain dir: {e}")
result = []
+ titles_map = getattr(curr, "conversation_titles", {}) or {}
for cid in conv_ids:
meta = get_conversation_metadata(cid)
if not meta.get("file_exists") and cid not in curr.conversation_history:
continue
is_current = (cid == curr.conversation_id)
+ custom_title = titles_map.get(cid)
result.append({
"id": cid,
"is_current": is_current,
+ "title": custom_title,
"first_prompt": meta.get("first_prompt") or "(بدون متن)",
"last_prompt": meta.get("last_prompt") or "",
"turns_count": meta.get("turns_count", 0),
@@ -1037,6 +1099,7 @@ class SessionManager:
result.sort(key=lambda x: x.get("last_updated") or 0.0, reverse=True)
return result
+
async def set_model(self, chat_id: int, model: str):
session = self.get_or_create(chat_id)
curr = self.get_current_project(chat_id)
@@ -1110,17 +1173,61 @@ def strip_ansi(text: str) -> str:
return ANSI_REGEX.sub("", text)
def clean_user_prompt(raw_text: Optional[str]) -> str:
+ """
+ Cleans raw prompt or transcript user input, stripping all internal system instructions,
+ prompts metadata, memory blocks, and file markers to extract the actual user message.
+ """
if not raw_text:
return ""
- text = raw_text
+ text = str(raw_text)
+
+ # 1. Extract USER_REQUEST content if present
req_match = re.search(r"(.*?)", text, re.DOTALL)
if req_match:
text = req_match.group(1)
- text = re.sub(r"\[SYSTEM INSTRUCTION:.*?\]", "", text, flags=re.DOTALL)
+
+ # 2. Remove standard outer XML/HTML metadata tags
text = re.sub(r".*?", "", text, flags=re.DOTALL)
text = re.sub(r".*?", "", text, flags=re.DOTALL)
+ text = re.sub(r".*?", "", text, flags=re.DOTALL)
text = re.sub(r"<[^>]+>", "", text)
- return text.strip()
+
+ # 3. Remove delimited system instruction blocks
+ text = re.sub(r".*?", "", text, flags=re.DOTALL)
+ text = re.sub(r"\[SYSTEM_INSTRUCTIONS_BLOCK\].*?\[/SYSTEM_INSTRUCTIONS_BLOCK\]", "", text, flags=re.DOTALL)
+
+ # 4. Remove known structured system instructions (backward compatibility)
+ # Language instruction
+ text = re.sub(r"\[SYSTEM INSTRUCTION:\s*You MUST respond and communicate in [^\]]+\]", "", text, flags=re.DOTALL)
+
+ # Flash auto reasoning mode block
+ text = re.sub(r"\[SYSTEM INSTRUCTION:\s*GEMINI 3\.7 FLASH AUTO REASONING MODE\].*?(?:• آدرس مخزن:[^\n]*|\Z)", "", text, flags=re.DOTALL)
+
+ # Bot actions block
+ text = re.sub(r"\[SYSTEM INSTRUCTION:\s*TELEGRAM BOT ACTIONS & FUNCTION CALLING\].*?(?:Always explain to the user in a friendly and professional tone what actions have been performed\.?|\Z)", "", text, flags=re.DOTALL)
+
+ # Memory instructions block
+ text = re.sub(r"\[SYSTEM INSTRUCTION:\s*AI PERSISTENT HIERARCHICAL MEMORY & CONTINUOUS LEARNING\].*?(?:5\. Do NOT store temporary or trivial small-talk\. Only store enduring and valuable knowledge\.?|\Z)", "", text, flags=re.DOTALL)
+
+ # General fallback for any remaining [SYSTEM INSTRUCTION: ...]
+ text = re.sub(r"\[SYSTEM INSTRUCTION:[^\]]+\]", "", text)
+ text = re.sub(r"(?:^|\n)System Instruction:\s*", "", text)
+
+ # Clean uploaded file notifications
+ caption_m = re.search(r"\[User uploaded [^\]]+\]\s*(?:Caption:\s*(.*))?", text, re.DOTALL)
+ if caption_m:
+ cap = (caption_m.group(1) or "").strip()
+ if cap:
+ text = f"📎 {cap}"
+ else:
+ text = "📎 [ارسال فایل]"
+
+ # Clean ANSI codes
+ text = ANSI_REGEX.sub("", text)
+
+ # Collapse multi-lines to clean single-line text
+ lines = [line.strip() for line in text.splitlines() if line.strip()]
+ return " ".join(lines).strip()
def get_conversation_metadata(conversation_id: str) -> Dict[str, Any]:
"""
@@ -1163,7 +1270,14 @@ def get_conversation_metadata(conversation_id: str) -> Dict[str, Any]:
if user_inputs:
res["created_at"] = user_inputs[0].get("created_at")
first_raw = user_inputs[0].get("content", "")
- res["first_prompt"] = clean_user_prompt(first_raw)
+ first_cleaned = clean_user_prompt(first_raw)
+ if not first_cleaned and len(user_inputs) > 1:
+ for u in user_inputs[1:]:
+ nxt_clean = clean_user_prompt(u.get("content", ""))
+ if nxt_clean:
+ first_cleaned = nxt_clean
+ break
+ res["first_prompt"] = first_cleaned or "(بدون متن)"
last_raw = user_inputs[-1].get("content", "")
res["last_prompt"] = clean_user_prompt(last_raw)
@@ -1348,7 +1462,12 @@ class AGYEngine:
if system_instructions:
- effective_prompt = "\n\n".join(system_instructions) + "\n\n" + prompt
+ effective_prompt = (
+ "\n"
+ + "\n\n".join(system_instructions)
+ + "\n\n\n"
+ + prompt
+ )
# Real CLI model name to pass to AGY CLI
cli_model = "gemini-3.7-flash" if target_model in ("gemini-3.7-flash-auto", "gemini-3.7-flash") else target_model
@@ -1584,11 +1703,16 @@ class AGYEngine:
on_delta: Optional[Callable[[str], Any]] = None,
on_thought: Optional[Callable[[str], Any]] = None,
on_tool: Optional[Callable[[str, str], Any]] = None,
+ on_model_change: Optional[Callable[[str, Optional[str]], Any]] = None,
+ on_reset: Optional[Callable[[], Any]] = None,
) -> AgentResult:
"""Runs prompt using the natively authenticated AGY CLI engine with real-time streaming and Auto-Effort escalation."""
is_auto_mode = (session.model == "gemini-3.7-flash-auto")
if is_auto_mode:
+ if on_model_change:
+ on_model_change("gemini-3.7-flash-auto", "medium")
+
# First attempt in Auto mode: Start with Medium effort by default
result, esc_effort, esc_reason = await cls._execute_single_run(
session=session,
@@ -1605,6 +1729,12 @@ class AGYEngine:
target_eff = esc_effort if esc_effort in ("low", "medium", "high") else "medium"
logger.info(f"Auto-adjusting effort for chat {session.chat_id} to {target_eff} (reason: {esc_reason})")
+ if on_reset:
+ on_reset()
+
+ if on_model_change:
+ on_model_change("gemini-3.7-flash-auto", target_eff)
+
is_fa = (session.language or "").lower() in ("fa", "farsi", "persian", "🇮🇷 persian / farsi (فارسی)")
if on_thought:
if target_eff == "low":
@@ -1647,6 +1777,9 @@ class AGYEngine:
return result
# Standard execution for all other models
+ if on_model_change:
+ on_model_change(session.model, session.effort)
+
result, _, _ = await cls._execute_single_run(
session=session,
prompt=prompt,
diff --git a/telegram-agy-bot/bot_actions.py b/telegram-agy-bot/bot_actions.py
index 7148fab..404c09c 100644
--- a/telegram-agy-bot/bot_actions.py
+++ b/telegram-agy-bot/bot_actions.py
@@ -890,6 +890,32 @@ async def execute_action(
ok, msg, count = session_manager.clear_project_conversations(chat_id)
return f"\n\n🗑️ {msg}", side_effects, created_task
+ # -------------------------------------------------------------
+ # 13.5 SET_CONVERSATION_TITLE / RENAME_CONVERSATION / SET_TOPIC
+ # -------------------------------------------------------------
+ elif act in ("SET_CONVERSATION_TITLE", "SET_CONV_TITLE", "RENAME_CONVERSATION", "RENAME_CONV", "SET_TOPIC", "CONV_TITLE"):
+ title = attrs.get("title") or attrs.get("name") or attrs.get("topic") or attrs.get("_default", "")
+ conv_id = attrs.get("id") or attrs.get("conv_id")
+ proj = attrs.get("project") or attrs.get("proj") or current_project_name
+
+ if not title:
+ return "\n⚠️ عنوان جدید گفتگو مشخص نشده است." if is_fa else "\n⚠️ Conversation title not specified.", side_effects, created_task
+
+ ok, msg, matched_id = session_manager.set_conversation_title(chat_id, title=title, conv_id=conv_id, project_name=proj)
+ if not ok:
+ return f"\n⚠️ {msg}", side_effects, created_task
+
+ badge = (
+ f"\n\n🏷️ موضوع گفتگو بهروزرسانی شد:\n"
+ f"• 💬 شناسه: {matched_id[:8]}...\n"
+ f"• 📝 عنوان جدید: «{escape_html(title)}»"
+ if is_fa else
+ f"\n\n🏷️ Conversation Topic Updated:\n"
+ f"• 💬 ID: {matched_id[:8]}...\n"
+ f"• 📝 New Title: \"{escape_html(title)}\""
+ )
+ return badge, side_effects, created_task
+
# -------------------------------------------------------------
# 14. SCHEDULE_TASK / SCHEDULE / CREATE_TASK
# -------------------------------------------------------------
@@ -1736,7 +1762,11 @@ def get_ai_bot_actions_instruction(lang: str = "fa") -> str:
" [[SWITCH_CONVERSATION: id=\"\"]]\n"
" [[DELETE_CONVERSATION: id=\"\"]]\n"
" [[CLEAR_CONVERSATIONS: project=\"\"]]\n\n"
- "12. Schedule Task / Timers / Cron:\n"
+ "12. Update / Change Conversation Topic & Title (Dynamic Conversation Naming):\n"
+ " Whenever the user changes topic, starts a distinct new task, or asks to set the conversation name:\n"
+ " [[SET_CONVERSATION_TITLE: title=\"\", id=\"\", project=\"\"]]\n"
+ " Example: [[SET_CONVERSATION_TITLE: title=\"پیادهسازی ماژول پرداخت\"]]\n\n"
+ "13. Schedule Task / Timers / Cron:\n"
" [[SCHEDULE_TASK: timing=\"\", max_runs=, type=\"prompt|command|reminder\", title=\"\", content=\"\"]]\n"
" Timing examples: 'every 10m', 'in 15m', '14:30', 'cron: 0 23 * * *', 'every 1h (3 times)'.\n"
" Types: 'prompt' (AI run), 'command' (bash script), 'reminder' (plain notification).\n"
diff --git a/telegram-agy-bot/sessions.json b/telegram-agy-bot/sessions.json
index 77b8fef..19c6ff3 100644
--- a/telegram-agy-bot/sessions.json
+++ b/telegram-agy-bot/sessions.json
@@ -8,55 +8,19 @@
"workspace": "/root",
"owner_id": 78649634,
"shared_with": [],
- "conversation_id": "b07a79ef-8da0-4688-b71a-86c8629803f5",
+ "conversation_id": "4acc374a-5742-40fe-b5ec-b8b3d1b14e68",
"conversation_history": [
- "b269812c-fbe5-41d6-ad69-41366a87eb9e",
- "c70e3f52-141e-4610-a4e6-79b3d42ec620",
- "f3a2c264-cb59-42a1-905e-39ca6637e1ad",
- "feb0a189-c9b9-41c9-a473-bb8a90853800",
- "37d992a1-5353-4374-a064-02c4e6393f9c",
- "79f60812-65ec-4651-8cd6-16e119b1c67c",
- "1815d9df-6601-4b97-991a-b4f2c281f179",
- "44831929-3ea8-472a-ba72-a49fba67f63b",
- "f3af5769-2438-4e70-9a0a-df8c97e02bfc",
- "3b9db9ff-178f-43ad-a07f-f2b5fb276ba6",
- "7f8429d9-9c53-4a13-89fc-0348b35554b5",
- "86fdefb8-18e4-4bfa-8c84-6e5729423cc2",
- "c20c6831-0c41-40b8-8822-24af0117ea67",
- "ece15806-f915-4434-81ed-dfdc5dc530ea",
- "405bf894-d065-42e0-a7ad-6bf0ec7bb170",
- "f2adc28b-4c86-447f-9865-91ee1942efb5",
- "07ae4151-0a1c-45e2-a954-f41cd24e7a06",
- "ace7f6f2-127c-446e-a0cc-ed2c13c3e876",
- "7c0425fb-fba4-4041-9264-57c98a35eca2",
- "0b3b6a49-e0a2-4919-a7bf-0a9b9170898c",
- "d120a395-6e47-49bd-8972-f8f4238ebcc1",
- "a9165995-8f0b-4c7c-b190-db8b678abb3c",
- "81023ca4-6978-46fd-af57-31eaa6b9fde7",
- "c357b2b7-96be-4a03-b106-1cebdadc8010",
- "024f7870-a3cf-475f-b0de-ed3dac61f314",
- "c06a5572-ea5c-4f07-af21-f7fc33c3d4c1",
- "78b3da80-e4a2-4b21-b147-e720f064bb92",
- "d54c0c8d-6424-40a4-84f4-7a9de60eac7b",
- "4a917d1b-08f1-4820-b294-1ac1123df573",
- "d06d4209-6d87-4ca5-afc2-ad49be5e69ec",
- "1af266cc-8075-4333-b557-0ad2918fd8f0",
- "78b5ee58-6bf5-4196-a37b-37898effdd97",
- "e1de41d9-e45a-4451-a545-85c9d670ad4b",
- "8b89674e-2777-41d2-95af-4dd4e8b4597d",
- "76dd3ec0-111f-4ac4-bb1a-3665e500e52d",
- "6472beee-15b4-4f15-a1d4-a1b414e4bf95",
- "28e5b084-7152-40c3-975e-275b78a908c2",
- "b07a79ef-8da0-4688-b71a-86c8629803f5"
+ "4acc374a-5742-40fe-b5ec-b8b3d1b14e68"
],
"model": "gemini-3.7-flash-auto",
"effort": "high",
"language": "fa",
- "last_context_length": 22551,
- "last_total_tokens": 188557,
- "last_response": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0642\u062a \u062f\u0631 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f:\n\n### \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647:\n1. **\u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u0627\u0633\u062a\u0631\u06cc\u0645 \u062a\u0641\u06a9\u0631 (Live Thinking Indicator):**\n - \u062f\u0631 \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/bot.py`](file:///root/telegram-agy-bot/bot.py#L6520-L6545)\u060c \u0639\u0628\u0627\u0631\u062a \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 [\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647]...\u00bb \u062d\u0630\u0641 \u0648 \u0628\u0647 \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 **[\u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644]**...\u00bb \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a:\n ```html\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto... \u258c\n ```\n2. **\u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u0632\u0634:**\n - \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0644\u06cc\u0647 \u067e\u06cc\u0627\u0645 \u0642\u0628\u0644 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u062a\u0648\u06a9\u0646 \u067e\u0627\u0633\u062e\u060c \u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644 \u062f\u0631\u062c \u0634\u062f:\n ```html\n \ud83d\udcc1 \u067e\u0631\u0648\u0698\u0647: \u0646\u0627\u0645_\u067e\u0631\u0648\u0698\u0647\n\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto...\n ```\n3. **\u0628\u0627\u06a9\u0633 \u0628\u0627\u0632\u0634\u0648\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 (Expandable Thought Blockquote):**\n - \u062f\u0631 \u062a\u0627\u0628\u0639 [`format_thought`](file:///root/telegram-agy-bot/formatters.py#L115-L135) \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py)\u060c \u062a\u06cc\u062a\u0631 \u062a\u0641\u06a9\u0631 \u0645\u062f\u0644 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f:\n ```html\n \ud83d\udcad \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 (\u0645\u062f\u0644: Gemini 3.7 Flash Auto):\n ```\n4. **\u062a\u0627\u0628\u0639 \u062a\u0628\u062f\u06cc\u0644 \u0648 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0633\u0627\u0632\u06cc \u0646\u0627\u0645 \u0645\u062f\u0644\u200c\u0647\u0627 (`get_model_display_name`):**\n - \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062a\u0645\u06cc\u0632 \u0648 \u062e\u0648\u0627\u0646\u0627\u06cc \u0645\u062f\u0644\u200c\u0647\u0627 (\u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0633\u0637\u062d Reasoning Effort \u0645\u0627\u0646\u0646\u062f `[High]`, `[Med]`)\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0645\u0627\u0698\u0648\u0644\u0627\u0631 \u0648 \u0628\u0647\u06cc\u0646\u0647 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0631\u0645\u062a\u200c\u062f\u0647\u06cc \u0627\u0641\u0632\u0648\u062f\u0647 \u0634\u062f.\n\n\u0633\u0631\u0648\u06cc\u0633 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u062a\u06af \u0632\u06cc\u0631 \u067e\u0633 \u0627\u0632 \u062a\u062d\u0648\u06cc\u0644 \u067e\u06cc\u0627\u0645 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f.\n\n[[RESTART_BOT]]\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": 9736,
+ "last_total_tokens": 118918,
+ "last_response": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u0639\u0645\u0627\u0644 \u0634\u062f. \u0646\u0645\u0627\u06cc\u0634 \u0648\u0636\u0639\u06cc\u062a \u0648 \u0627\u0633\u062a\u0631\u06cc\u0645 \u0632\u0646\u062f\u0647 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0648 \u0633\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0634\u062f \u062a\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0632\u0646\u062f\u0647 \u0628\u0647 \u062c\u0627\u06cc \u0645\u062a\u0646\u200c\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc\u060c \u0641\u0642\u0637 \u0627\u06cc\u0645\u0648\u062c\u06cc \u0627\u0628\u0631 \u062a\u0641\u06a9\u0631 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0646\u0627\u0645 \u0645\u062f\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f:\n\n```text\n\ud83d\udcad Gemini 3.7 Flash \u258c\n```\n\n\u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0644\u06cc\u0647 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0646\u0648\u0627\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u0646\u062a\u0647\u0627\u06cc\u06cc \u0645\u06a9\u0627\u0644\u0645\u0647 \u0632\u0646\u062f\u0647 (\u0627\u0633\u062a\u0631\u06cc\u0645) \u0627\u0639\u0645\u0627\u0644 \u06af\u0631\u062f\u06cc\u062f.\n\n[[RESTART_BOT]]\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: telegram-agy-bot\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/telegram-agy-bot\n",
"created_at": 1787995349.975879,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
},
"copykar": {
"name": "copykar",
@@ -77,7 +41,8 @@
"last_total_tokens": 1053761,
"last_response": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0631\u0631\u0633\u06cc \u062f\u0644\u0627\u06cc\u0644 \u0639\u062f\u0645 \u0627\u0631\u0633\u0627\u0644 \u067e\u0627\u0633\u062e \u0648 \u062a\u0633\u062a \u0646\u0647\u0627\u06cc\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0631 \u0631\u0648\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0647\u0633\u062a\u0645...\n\u062f\u0631 \u062d\u0627\u0644 \u0627\u0639\u0645\u0627\u0644 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0631 \u0631\u0648\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0647\u0633\u062a\u0645...\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 English Correction: \u2502\n\u2502 Can you tell me why the response was not sent to me so we can fix it by default on the project? \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n### \ud83d\udd0d \u0639\u0644\u062a \u0639\u062f\u0645 \u0627\u0631\u0633\u0627\u0644 \u067e\u0627\u0633\u062e \u062f\u0631 \u0646\u0648\u0628\u062a \u0642\u0628\u0644\u06cc\n\n1. **\u0648\u0642\u0648\u0639 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u062f\u0631 \u0633\u0631\u0648\u0631 (Process / Server Restart):** \n \u062f\u0631 \u062d\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u0622\u062e\u0631\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u062a\u063a\u06cc\u06cc\u0631 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0648 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u200c\u0647\u0627\u060c \u0633\u06cc\u0633\u062a\u0645 \u0633\u0631\u0648\u0631 \u0628\u0627 \u0631\u0648\u06cc\u062f\u0627\u062f \u0633\u06cc\u0633\u062a\u0645\u06cc \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0645\u0648\u0627\u062c\u0647 \u0634\u062f (`All your subagents and background tasks have been stopped due to server restart`). \u0627\u06cc\u0646 \u0648\u0642\u0641\u0647 \u0628\u0627\u0639\u062b \u0642\u0637\u0639 \u0627\u0631\u062a\u0628\u0627\u0637 \u0645\u0648\u0642\u062a \u067e\u06cc\u0634 \u0627\u0632 \u062a\u062d\u0648\u06cc\u0644 \u0645\u062a\u0646 \u0646\u0647\u0627\u06cc\u06cc \u0634\u062f.\n2. **\u067e\u0627\u06cc\u0627\u0646 \u0646\u0648\u0628\u062a \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0642\u0628\u0644 \u0627\u0632 \u062e\u0631\u0648\u062c\u06cc \u0645\u062a\u0646\u06cc (Tool Loop Interruption):** \n \u06a9\u062f\u0647\u0627 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647\u200c\u062f\u0627\u062f\u0647 \u0648 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0648 \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0648\u062f\u0646\u062f\u060c \u0627\u0645\u0627 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0642\u0637\u0639 \u0641\u0631\u0622\u06cc\u0646\u062f \u062f\u0631 \u0645\u06cc\u0627\u0646\u0647 \u0632\u0646\u062c\u06cc\u0631\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u060c \u067e\u06cc\u0627\u0645 \u0645\u062a\u0646\u06cc \u0646\u062a\u06cc\u062c\u0647 \u0628\u0647 \u062a\u0644\u06af\u0631\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u0646\u0634\u062f.\n\n---\n\n### \ud83d\udee0 \u0631\u0627\u0647\u06a9\u0627\u0631 \u0627\u0635\u0644\u0627\u062d \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0633\u06cc\u0633\u062a\u0645 (System Fix)\n\n\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062a\u06a9\u0631\u0627\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639:\n- **\u0627\u0631\u0633\u0627\u0644 \u0648\u0636\u0639\u06cc\u062a \u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc (Stage Progression Feedback):** \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0686\u0646\u062f\u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc\u060c \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u06a9\u0648\u062a\u0627\u0647 \u0648\u0636\u0639\u06cc\u062a\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631 \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u062f.\n- **\u062a\u0633\u062a \u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u0632\u0646\u062f\u0647 (Hot Reloading / Container Sync):** \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062f\u0627\u06a9\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u0633\u062a\u0642\u06cc\u0645 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0648 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f.\n\n---\n\n### \u2705 \u0648\u0636\u0639\u06cc\u062a \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\n\n\u062a\u0645\u0627\u0645 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0634\u0645\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u060c \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u06cc\u06af\u0631\u06cc\u062a\u060c \u062a\u0633\u062a \u0648 \u0631\u0648\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 `copykar` \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f:\n\n1. **\ud83d\udccb \u062a\u062e\u0635\u06cc\u0635 \u06a9\u0627\u0646\u0627\u0644 \u0646\u0638\u0627\u0631\u062a \u0645\u062f\u06cc\u0631 \u0628\u0647 \u062a\u0641\u06a9\u06cc\u06a9 \u0645\u0628\u062f\u0627 (Source -> Admin Channel Mapping):**\n - \u062c\u062f\u0648\u0644 `admin_channels` \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f \u0648 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc `admin_channel_id` \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u062a\u0644\u06af\u0631\u0627\u0645\u06cc (`sources`) \u0648 \u0648\u0628\u0633\u0627\u06cc\u062a\u200c\u0647\u0627 (`source_websites`) \u0627\u0636\u0627\u0641\u0647 \u06af\u0631\u062f\u06cc\u062f.\n - \u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0647\u0631 \u06a9\u0627\u0646\u0627\u0644 \u0645\u0628\u062f\u0627 \u06cc\u0627 \u0648\u0628\u0633\u0627\u06cc\u062a\u060c \u062f\u06a9\u0645\u0647 **\u00ab\ud83d\udccb \u06a9\u0627\u0646\u0627\u0644 \u0646\u0638\u0627\u0631\u062a \u0627\u062f\u0645\u06cc\u0646\u00bb** \u0627\u0636\u0627\u0641\u0647 \u0634\u062f \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u0648\u0631\u0648\u062f\u06cc \u0647\u0631 \u0645\u0628\u062f\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0647 \u06a9\u062f\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644 \u0645\u062f\u06cc\u0631 \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u0646\u062f.\n - \u0645\u0646\u0648\u06cc **\u00ab\ud83d\udccb \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627\u06cc \u0646\u0638\u0627\u0631\u062a \u0627\u062f\u0645\u06cc\u0646\u00bb** \u062f\u0631 \u0628\u062e\u0634 \u0631\u0628\u0627\u062a\u200c\u0647\u0627 (`/bots` \u0648 `/admin_channels`) \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0686\u0646\u062f\u06cc\u0646 \u06a9\u0627\u0646\u0627\u0644 \u0627\u062f\u0645\u06cc\u0646 \u0648 \u062a\u0639\u06cc\u06cc\u0646 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f.\n\n2. **\ud83c\udfaf \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627\u06cc \u0645\u0642\u0635\u062f \u062a\u0648\u0633\u0637 \u0645\u062f\u06cc\u0631 \u0648 \u062d\u0641\u0638 \u062d\u0627\u0644\u062a \u062e\u0648\u062f\u06a9\u0627\u0631:**\n - \u06a9\u0627\u0631\u062a\u200c\u0647\u0627\u06cc \u0628\u0627\u0632\u0628\u06cc\u0646\u06cc \u0627\u0631\u0633\u0627\u0644\u06cc \u0628\u0647 \u0647\u0631 \u06a9\u0627\u0646\u0627\u0644 \u0627\u062f\u0645\u06cc\u0646\u060c \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u062a\u0645\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627\u06cc \u0645\u0642\u0635\u062f \u0631\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u062a\u0627 \u0645\u062f\u06cc\u0631 \u0628\u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u062f\u0644\u062e\u0648\u0627\u0647 \u0631\u0648\u06cc \u0647\u0631 \u062a\u0627\u0631\u06af\u062a \u06a9\u0644\u06cc\u06a9 \u06a9\u0631\u062f\u0647\u060c \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0622\u0646 \u0644\u062d\u0646 \u0631\u0627 \u0628\u0628\u06cc\u0646\u062f \u0648 \u062a\u0627\u06cc\u06cc\u062f \u06a9\u0646\u062f.\n - **\u062d\u0627\u0644\u062a \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9 (`auto_source_ids`)** \u062f\u0633\u062a\u200c\u0646\u062e\u0648\u0631\u062f\u0647 \u0628\u0627\u0642\u06cc \u0645\u0627\u0646\u062f\u0647 \u0648 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0648 \u062f\u0631 \u0635\u0641 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u062f.\n\n3. **\ud83d\uddd1 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627\u06cc \u0627\u062f\u0645\u06cc\u0646 \u0628\u0647 \u062a\u0641\u06a9\u06cc\u06a9 \u06a9\u0627\u0646\u0627\u0644 \u0628\u0627 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 (Purge Messages):**\n - \u0645\u0646\u0648\u06cc **\u00ab\ud83d\uddd1 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627\u06cc \u0627\u062f\u0645\u06cc\u0646\u00bb** (`/purge`) \u062f\u0631 \u0647\u0627\u0628 \u0633\u06cc\u0633\u062a\u0645 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062d\u062a\u0648\u0627 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f.\n - \u062a\u0639\u062f\u0627\u062f \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc\u200c\u0646\u0634\u062f\u0647 \u062f\u0631 \u0647\u0631 \u06a9\u0627\u0646\u0627\u0644 \u0646\u0638\u0627\u0631\u062a \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u0646\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.\n - \u0628\u0627 \u0632\u062f\u0646 \u062f\u06a9\u0645\u0647 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0647\u0631 \u06a9\u0627\u0646\u0627\u0644\u060c \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0647\u200c\u0627\u06cc (Batch) \u0628\u0627 API \u062a\u0644\u06af\u0631\u0627\u0645 \u062d\u0630\u0641 \u0634\u062f\u0647 \u0648 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u062f\u06cc\u0627 \u0648 \u0631\u06a9\u0648\u0631\u062f\u0647\u0627\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0646\u06cc\u0632 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0648 \u0628\u0627\u06cc\u06af\u0627\u0646\u06cc \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.\n - \u062f\u06a9\u0645\u0647 **\u00ab\ud83d\udd25 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0647\u0645\u0647 \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627\u06cc \u0627\u062f\u0645\u06cc\u0646\u00bb** \u0628\u0631\u0627\u06cc \u062d\u0630\u0641 \u06cc\u06a9\u062c\u0627\u06cc \u062a\u0645\u0627\u0645 \u06a9\u0627\u0646\u0627\u0644\u200c\u0647\u0627 \u062a\u0639\u0628\u06cc\u0647 \u06af\u0631\u062f\u06cc\u062f.\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: copykar \n\u2022 \u0633\u0627\u0628\u062f\u0627\u0645\u06cc\u0646 \u0641\u0639\u0627\u0644: https://grafana-copykar.msa.artacloud.ir \n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/copykar\n",
"created_at": 1788031971.6031597,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
},
"hamed-site": {
"name": "hamed-site",
@@ -95,23 +60,24 @@
"last_total_tokens": null,
"last_response": null,
"created_at": 1788075678.3171155,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
}
},
"turn_in_progress": false,
- "last_prompt": "\u062e\u0628 \u0631\u0648\u06cc \u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 \u0627\u0633\u0645 \u067e\u0631\u0648\u0698\u0647 \u0631\u0648 \u0646\u0646\u0648\u06cc\u0633 \u0648 \u0628\u0647 \u062c\u0627\u0634 \u0628\u06af\u0648 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0638\u0631 \u062f\u0627\u0631\u0647 \u0627\u0632 \u0686\u0647 \u0645\u062f\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u06a9\u0646\u0647\n\u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0686\u0646\u062f \u062c\u0627 \u0628\u0627\u0634\u062f",
- "last_response": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0642\u062a \u062f\u0631 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f:\n\n### \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647:\n1. **\u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u0627\u0633\u062a\u0631\u06cc\u0645 \u062a\u0641\u06a9\u0631 (Live Thinking Indicator):**\n - \u062f\u0631 \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/bot.py`](file:///root/telegram-agy-bot/bot.py#L6520-L6545)\u060c \u0639\u0628\u0627\u0631\u062a \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 [\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647]...\u00bb \u062d\u0630\u0641 \u0648 \u0628\u0647 \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 **[\u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644]**...\u00bb \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a:\n ```html\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto... \u258c\n ```\n2. **\u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u0632\u0634:**\n - \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0644\u06cc\u0647 \u067e\u06cc\u0627\u0645 \u0642\u0628\u0644 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u062a\u0648\u06a9\u0646 \u067e\u0627\u0633\u062e\u060c \u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644 \u062f\u0631\u062c \u0634\u062f:\n ```html\n \ud83d\udcc1 \u067e\u0631\u0648\u0698\u0647: \u0646\u0627\u0645_\u067e\u0631\u0648\u0698\u0647\n\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto...\n ```\n3. **\u0628\u0627\u06a9\u0633 \u0628\u0627\u0632\u0634\u0648\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 (Expandable Thought Blockquote):**\n - \u062f\u0631 \u062a\u0627\u0628\u0639 [`format_thought`](file:///root/telegram-agy-bot/formatters.py#L115-L135) \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py)\u060c \u062a\u06cc\u062a\u0631 \u062a\u0641\u06a9\u0631 \u0645\u062f\u0644 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f:\n ```html\n \ud83d\udcad \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 (\u0645\u062f\u0644: Gemini 3.7 Flash Auto):\n ```\n4. **\u062a\u0627\u0628\u0639 \u062a\u0628\u062f\u06cc\u0644 \u0648 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0633\u0627\u0632\u06cc \u0646\u0627\u0645 \u0645\u062f\u0644\u200c\u0647\u0627 (`get_model_display_name`):**\n - \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062a\u0645\u06cc\u0632 \u0648 \u062e\u0648\u0627\u0646\u0627\u06cc \u0645\u062f\u0644\u200c\u0647\u0627 (\u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0633\u0637\u062d Reasoning Effort \u0645\u0627\u0646\u0646\u062f `[High]`, `[Med]`)\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0645\u0627\u0698\u0648\u0644\u0627\u0631 \u0648 \u0628\u0647\u06cc\u0646\u0647 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0631\u0645\u062a\u200c\u062f\u0647\u06cc \u0627\u0641\u0632\u0648\u062f\u0647 \u0634\u062f.\n\n\u0633\u0631\u0648\u06cc\u0633 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u062a\u06af \u0632\u06cc\u0631 \u067e\u0633 \u0627\u0632 \u062a\u062d\u0648\u06cc\u0644 \u067e\u06cc\u0627\u0645 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f.\n\n[[RESTART_BOT]]\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": "\u062e\u0628 \u0645\u0627 \u0646\u0627\u0645 \u0645\u062f\u0644 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0632\u0646\u062f\u0647 \u0645\u06cc\u0646\u0648\u06cc\u0633\u06cc\u0645\n\u0627\u06cc\u0646\u062c\u0627 \u0641\u0642\u0637 \u0646\u0627\u0645 \u0645\u062f\u0644 \u0631\u0648 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u06cc\u0647 \u0627\u06cc\u0645\u0648\u062c\u06cc \u0627\u0628\u0631 \u06a9\u0647 \u0645\u0639\u0646\u06cc \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u06a9\u0627\u0641\u06cc\u0647",
+ "last_response": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u0639\u0645\u0627\u0644 \u0634\u062f. \u0646\u0645\u0627\u06cc\u0634 \u0648\u0636\u0639\u06cc\u062a \u0648 \u0627\u0633\u062a\u0631\u06cc\u0645 \u0632\u0646\u062f\u0647 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0648 \u0633\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0634\u062f \u062a\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0632\u0646\u062f\u0647 \u0628\u0647 \u062c\u0627\u06cc \u0645\u062a\u0646\u200c\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc\u060c \u0641\u0642\u0637 \u0627\u06cc\u0645\u0648\u062c\u06cc \u0627\u0628\u0631 \u062a\u0641\u06a9\u0631 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0646\u0627\u0645 \u0645\u062f\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f:\n\n```text\n\ud83d\udcad Gemini 3.7 Flash \u258c\n```\n\n\u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0644\u06cc\u0647 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0646\u0648\u0627\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u0646\u062a\u0647\u0627\u06cc\u06cc \u0645\u06a9\u0627\u0644\u0645\u0647 \u0632\u0646\u062f\u0647 (\u0627\u0633\u062a\u0631\u06cc\u0645) \u0627\u0639\u0645\u0627\u0644 \u06af\u0631\u062f\u06cc\u062f.\n\n[[RESTART_BOT]]\n\n---\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: telegram-agy-bot\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/telegram-agy-bot\n",
"last_status_msg_id": null,
"restart_pending": false,
"last_delivered": true,
- "last_update_time": 1788081635.6170475,
+ "last_update_time": 1788084562.0767875,
"workspace": "/root",
- "conversation_id": "b07a79ef-8da0-4688-b71a-86c8629803f5",
+ "conversation_id": "4acc374a-5742-40fe-b5ec-b8b3d1b14e68",
"model": "gemini-3.7-flash-auto",
"effort": "high",
"language": "fa",
- "last_context_length": 22551,
- "last_total_tokens": 188557
+ "last_context_length": 9736,
+ "last_total_tokens": 118918
},
"232801087": {
"chat_id": 232801087,
@@ -131,7 +97,8 @@
"last_total_tokens": null,
"last_response": null,
"created_at": 1788038285.7886798,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
},
"project1": {
"name": "project1",
@@ -147,7 +114,8 @@
"last_total_tokens": null,
"last_response": null,
"created_at": 1788038294.2485433,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
},
"myapp": {
"name": "myapp",
@@ -165,7 +133,8 @@
"last_total_tokens": null,
"last_response": null,
"created_at": 1788038300.7589407,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
}
},
"turn_in_progress": false,
@@ -204,7 +173,8 @@
"last_total_tokens": 18984,
"last_response": "\u0645\u062a\u0646 \u06a9\u0627\u0645\u0644 \u0648 \u062f\u0642\u06cc\u0642\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0645\u0627 (\u0634\u0627\u0645\u0644 \u062a\u0645\u0627\u0645\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644\u200c\u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645\u06cc\u060c \u0627\u06a9\u0634\u0646\u200c\u062a\u06af\u200c\u0647\u0627\u06cc \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645\u060c \u0642\u0648\u0627\u0646\u06cc\u0646 \u0648 \u062d\u0627\u0641\u0638\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u062a\u0632\u0631\u06cc\u0642\u200c\u0634\u062f\u0647) \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u0627\u0633\u062a:\n\n```text\n[SYSTEM INSTRUCTION: You MUST respond and communicate in Persian / Farsi (\u0641\u0627\u0631\u0633\u06cc). All answers, greetings, comments, and explanations must be strictly written in Persian / Farsi (\u0641\u0627\u0631\u0633\u06cc), unless code syntax or the user explicitly specifies another language.]\n\n[SYSTEM INSTRUCTION: TELEGRAM BOT ACTIONS & FUNCTION CALLING]\nYou have complete access and authority to control and invoke ALL Telegram Bot features, project settings, model parameters, scheduled tasks, reverse proxies, and server operations directly from your conversation.\nWhenever the user asks (in Persian, English, or any language) to change settings, switch models, create or manage projects, schedule periodic tasks, configure subdomains on Caddy, export backups, restart the bot, or send files:\nYou MUST output the corresponding action tag(s) anywhere in your reply. You can combine multiple action tags in a single reply if necessary.\n\nAVAILABLE ACTION TAGS & SYNTAX:\n1. Change AI Model for Project:\n [[SET_MODEL: model=\"\", project=\"\"]]\n Available models: 'gemini-3.7-flash-auto' (Gemini 3.7 Flash Auto Reasoning \u26a1/\ud83e\udde0 - \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0647\u0648\u0634\u0645\u0646\u062f \u062e\u0648\u062f\u06a9\u0627\u0631), 'gemini-3.7-flash' (Gemini 3.7 Flash), 'gemini-3.7-flash-high' (Gemini 3.7 Flash High), 'gemini-3.1-pro' (Gemini 3.1 Pro), 'gemini-3.6-flash', 'claude-sonnet-4-6' (Claude Sonnet 4.6 Thinking), 'claude-opus-4-6-thinking' (Claude Opus 4.6 Thinking), 'gpt-oss-120b'.\n Example: [[SET_MODEL: model=\"gemini-3.7-flash-auto\"]]\n\n2. Change Reasoning Effort Level:\n [[SET_EFFORT: effort=\"low|medium|high\", project=\"\"]]\n Example: [[SET_EFFORT: effort=\"high\"]]\n\n3. Change Bot Language:\n [[SET_LANG: lang=\"fa|en|auto|...\"]]\n Example: [[SET_LANG: lang=\"fa\"]]\n\n4. Create New Project:\n [[NEW_PROJECT: name=\"\", workspace=\"\", model=\"\", effort=\"\"]]\n (Directory `/root/projects/{user_id}/{name}` is created automatically).\n Example: [[NEW_PROJECT: name=\"blog\"]]\n\n5. Switch Active Project:\n [[SWITCH_PROJECT: name=\"\"]]\n Example: [[SWITCH_PROJECT: name=\"blog\"]]\n\n6. Delete Project (Comprehensive Teardown & Resource Release):\n [[DELETE_PROJECT: name=\"\", delete_files=true|false]]\n (Automatically performs comprehensive teardown: releases Caddy subdomains/proxies, stops background processes/ports, removes systemd services, cancels scheduled cron tasks, deletes Gitea git repository, and purges physical files).\n Example: [[DELETE_PROJECT: name=\"old-project\", delete_files=true]]\n\n7. Rename Project:\n [[RENAME_PROJECT: old_name=\"\", new_name=\"\"]]\n\n8. Set Custom Workspace Directory:\n [[SET_WORKSPACE: path=\"/path/to/folder\", project=\"\"]]\n\n9. Share / Unshare Project:\n [[SHARE_PROJECT: user_id=, project=\"\"]]\n [[UNSHARE_PROJECT: user_id=, project=\"\"]]\n\n10. Reset / Clear Conversation Context:\n [[RESET_CONVERSATION: project=\"\"]]\n\n11. Switch / Delete / Clear Conversations:\n [[SWITCH_CONVERSATION: id=\"\"]]\n [[DELETE_CONVERSATION: id=\"\"]]\n [[CLEAR_CONVERSATIONS: project=\"\"]]\n\n12. Schedule Task / Timers / Cron:\n [[SCHEDULE_TASK: timing=\"\", max_runs=, type=\"prompt|command|reminder\", title=\"\", content=\"\"]]\n Timing examples: 'every 10m', 'in 15m', '14:30', 'cron: 0 23 * * *', 'every 1h (3 times)'.\n Types: 'prompt' (AI run), 'command' (bash script), 'reminder' (plain notification).\n [[CANCEL_TASK: id=\"\"]]\n [[PAUSE_TASK: id=\"\"]]\n [[RESUME_TASK: id=\"\"]]\n\n13. Project Backup & Export (Zip):\n [[BACKUP_PROJECT: project=\"\"]]\n\n14. Send File / Photo / Audio to Telegram:\n [[SEND_FILE: path=\"/path/to/file.ext\", caption=\"\"]]\n [[SEND_PHOTO: path=\"/path/to/image.png\", caption=\"\"]]\n [[SEND_AUDIO: path=\"/path/to/audio.mp3\", caption=\"\"]]\n\n15. Configure Subdomain & Caddy HTTPS Reverse Proxy (*.msa.artacloud.ir):\n [[SETUP_SUBDOMAIN: subdomain=\"\", port=]]\n Automatically links `{subdomain}.msa.artacloud.ir` to `localhost:{port}` with free SSL.\n [[REMOVE_SUBDOMAIN: subdomain=\"\"]]\n\n16. Git Version Control & Gitea Integration:\n [[GIT_SYNC: project=\"\", message=\"\"]]\n (Pulls remote changes from Gitea, commits any local modifications, and pushes to main branch).\n [[GIT_COMMIT: message=\"\", project=\"\"]]\n [[GIT_INIT: project=\"\"]]\n\n17. Restart Telegram Bot Service:\n [[RESTART_BOT]]\n\n18. Long-Term AI Memory Management (3-Tier: User & Project):\n [[SAVE_MEMORY: type=\"user|project\", key=\"\", category=\"\", content=\"\"]]\n (Use type='user' for personal user profile/habits, or type='project' for current project architecture/decisions. Global memory is read-only for AI).\n [[UPDATE_MEMORY: type=\"user|project\", key=\"\", content=\"\"]]\n [[DELETE_MEMORY: type=\"user|project\", key=\"\"]]\n [[CLEAR_MEMORY: type=\"user|project\"]]\n\nAlways explain to the user in a friendly and professional tone what actions have been performed.\n\n[SYSTEM INSTRUCTION: AI PERSISTENT HIERARCHICAL MEMORY & CONTINUOUS LEARNING]\nYou have access to persistent 3-tier long-term memory containing verified system rules, project context, and user profile.\nUse this knowledge to maintain continuity and customize all your responses accordingly.\n\n\u2696\ufe0f STRICT PRECEDENCE HIERARCHY (\u0633\u0644\u0633\u0644\u0647\u0645\u0631\u0627\u062a\u0628 \u0642\u0637\u0639\u06cc \u0627\u0648\u0644\u0648\u06cc\u062a \u0648 \u062d\u0644 \u062a\u0639\u0627\u0631\u0636):\n1. \ud83e\udd47 Tier 1 (Highest Authority): Global System Rules ALWAYS strictly supersede all Project and User instructions.\n2. \ud83e\udd48 Tier 2 (Intermediate Authority): Active Project Knowledge & Rules ALWAYS supersede general User preferences inside this project.\n3. \ud83e\udd49 Tier 3 (Baseline Authority): User Personal Preferences apply across projects as defaults when not overridden by Project or Global rules.\n\n\ud83c\udf10 1. GLOBAL SYSTEM RULES & KNOWLEDGE (\u0642\u0648\u0627\u0646\u06cc\u0646 \u0639\u0645\u0648\u0645\u06cc \u0633\u06cc\u0633\u062a\u0645 - \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 \u0627\u0648\u0644\u0648\u06cc\u062a):\n\u2022 [key: precedence_hierarchy] [rule] \u0633\u0644\u0633\u0644\u0647\u0645\u0631\u0627\u062a\u0628 \u0642\u0637\u0639\u06cc \u0627\u0648\u0644\u0648\u06cc\u062a \u062f\u0633\u062a\u0648\u0631\u0627\u062a: \u06f1. \u0642\u0648\u0627\u0646\u06cc\u0646 \u0639\u0645\u0648\u0645\u06cc \u0633\u06cc\u0633\u062a\u0645 \u06f2. \u062e\u0627\u0637\u0631\u0627\u062a \u0648 \u062a\u0635\u0645\u06cc\u0645\u0627\u062a \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0647\u0631 \u067e\u0631\u0648\u0698\u0647 \u06f3. \u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u06a9\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631.\n\u2022 [key: projects_directory_structure] [rule] \u067e\u0631\u0648\u0698\u0647\u0647\u0627 \u062a\u0646\u0647\u0627 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0635\u0631\u06cc\u062d \u06a9\u0627\u0631\u0628\u0631 \u0648 \u062f\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 /root/projects/{user_id}/{project_name} \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u0634\u0648\u0646\u062f.\n\u2022 [key: server_domain_caddy] [rule] \u062f\u0627\u0645\u0646\u0647 *.msa.artacloud.ir \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u062a\u0635\u0644 \u0627\u0633\u062a \u0648 Caddy \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 Reverse Proxy \u0628\u0631\u0627\u06cc \u062a\u0645\u0627\u0645 \u067e\u0631\u0648\u0698\u0647\u0647\u0627\u060c API\u0647\u0627 \u0648 \u0648\u0628\u0647\u0648\u06a9\u0647\u0627 \u0628\u0627 SSL \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0648\u062f.\n\u2022 [key: php_preference] [rule] \u0647\u0645\u06cc\u0634\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0645\u06a9\u0627\u0646 \u0627\u0632 PHP (PHP 8.x \u0645\u062f\u0631\u0646 / \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u0647\u0627 \u0648 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9\u0647\u0627\u06cc PHP) \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0632\u0628\u0627\u0646 \u0627\u0635\u0644\u06cc \u0648 \u067e\u06cc\u0634\u0641\u0631\u0636 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u062f.\n\u2022 [key: server_rule] [rule] \u0647\u0645\u06cc\u0634\u0647 \u0633\u0631\u0648\u06cc\u0633\u0647\u0627\u06cc \u0648\u0628 \u0631\u0648\u06cc \u062f\u0627\u0645\u0646\u0647 msa.artacloud.ir \u0628\u0627 Caddy \u062a\u0646\u0638\u06cc\u0645 \u0634\u0648\u0646\u062f.\n\u2022 [key: flash_auto_mode] [rule] \u062f\u0631 \u062d\u0627\u0644\u062a Flash Auto\u060c \u0628\u0627\u0632\u0628\u06cc\u0646\u06cc \u0646\u0647\u0627\u06cc\u06cc \u0648 \u0639\u06cc\u0628\u06cc\u0627\u0628\u06cc\u0647\u0627 \u0628\u0627 \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 \u0633\u0637\u062d \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0645\u062f\u0644 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0648\u062f.\n\n\ud83e\udde0 AUTONOMOUS MEMORY MANAGEMENT RULES:\n1. When user shares durable facts, choose the appropriate tier:\n \u2022 User-level (developer habits, preferred tools, personal info): type=\"user\"\n \u2022 Project-level (architecture, database schema, libraries, API designs, fixed bugs in this project): type=\"project\"\n Action Tag: [[SAVE_MEMORY: type=\"user|project\", key=\"\", category=\"preference|rule|tech_stack|fact\", content=\"\"]]\n2. Note: Global memory is read-only for AI and managed exclusively by system administrators via the Telegram Bot UI.\n3. If past memory is superseded, update it: [[UPDATE_MEMORY: type=\"user|project\", key=\"\", content=\"\"]].\n4. If user asks to forget something: [[DELETE_MEMORY: type=\"user|project\", key=\"\"]].\n5. Do NOT store temporary or trivial small-talk. Only store enduring and valuable knowledge.\n\n\u062f\u0642\u06cc\u0642\u0627 \u0628\u0647\u0645 \u0628\u06af\u0648 \u0645\u062a\u0646 \u0627\u0631\u0633\u0627\u0644\u06cc \u0645\u0646 \u0628\u0647 \u062a\u0648 \u0686\u0647 \u0628\u0648\u062f\u061f \u0645\u062a\u0646 \u06a9\u0627\u0645\u0644 \u0628\u0627 \u062a\u0645\u0627\u0645 \u062d\u0627\u0641\u0638\u0647 \u0647\u0627\n```\n",
"created_at": 1788069553.9717174,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
},
"lt-project_name-gt": {
"name": "lt-project_name-gt",
@@ -220,7 +190,8 @@
"last_total_tokens": null,
"last_response": null,
"created_at": 1788074106.5233963,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
},
"blog": {
"name": "blog",
@@ -236,7 +207,8 @@
"last_total_tokens": null,
"last_response": null,
"created_at": 1788074120.0401065,
- "description": ""
+ "description": "",
+ "conversation_titles": {}
}
},
"turn_in_progress": false,
diff --git a/uploads/photo_1788082939.jpg b/uploads/photo_1788082939.jpg
new file mode 100644
index 0000000..2efb894
Binary files /dev/null and b/uploads/photo_1788082939.jpg differ
diff --git a/uploads/photo_1788083331.jpg b/uploads/photo_1788083331.jpg
new file mode 100644
index 0000000..fac1584
Binary files /dev/null and b/uploads/photo_1788083331.jpg differ