diff --git a/telegram-agy-bot/bot.py b/telegram-agy-bot/bot.py
index fdeed06..b9d2be9 100644
--- a/telegram-agy-bot/bot.py
+++ b/telegram-agy-bot/bot.py
@@ -614,15 +614,18 @@ def build_projects_menu(chat_id: int) -> tuple[str, InlineKeyboardMarkup]:
InlineKeyboardButton("🤝 اشتراکگذاری", callback_data="proj_share_menu"),
])
keyboard.append([
+ InlineKeyboardButton("🧠 حافظه پروژه", callback_data="mem_tab:project:0"),
InlineKeyboardButton("📂 مسیر کاری", callback_data="proj_ws_info"),
- InlineKeyboardButton("🗑️ حذف پروژه", callback_data="proj_del_menu"),
])
keyboard.append([
- InlineKeyboardButton("🔄 ریاستارت گفتگو", callback_data="btn_restart"),
+ InlineKeyboardButton("🗑️ حذف پروژه", callback_data="proj_del_menu"),
InlineKeyboardButton("🧠 انتخاب مدل", callback_data="proj_model_menu"),
])
keyboard.append([
+ InlineKeyboardButton("🔄 ریاستارت گفتگو", callback_data="btn_restart"),
InlineKeyboardButton("🏠 منوی اصلی", callback_data="btn_dashboard"),
+ ])
+ keyboard.append([
InlineKeyboardButton("🔙 بستن منو", callback_data="proj_close"),
])
else:
@@ -635,15 +638,18 @@ def build_projects_menu(chat_id: int) -> tuple[str, InlineKeyboardMarkup]:
InlineKeyboardButton("🤝 Share Project", callback_data="proj_share_menu"),
])
keyboard.append([
+ InlineKeyboardButton("🧠 Project Memory", callback_data="mem_tab:project:0"),
InlineKeyboardButton("📂 Workspace Info", callback_data="proj_ws_info"),
- InlineKeyboardButton("🗑️ Delete Project", callback_data="proj_del_menu"),
])
keyboard.append([
- InlineKeyboardButton("🔄 Reset Chat", callback_data="btn_restart"),
+ InlineKeyboardButton("🗑️ Delete Project", callback_data="proj_del_menu"),
InlineKeyboardButton("🧠 Switch Model", callback_data="proj_model_menu"),
])
keyboard.append([
+ InlineKeyboardButton("🔄 Reset Chat", callback_data="btn_restart"),
InlineKeyboardButton("🏠 Main Dashboard", callback_data="btn_dashboard"),
+ ])
+ keyboard.append([
InlineKeyboardButton("🔙 Close", callback_data="proj_close"),
])
@@ -1253,15 +1259,16 @@ def build_memory_menu(chat_id: int, view_type: str = "project", page: int = 0) -
pag_row.append(InlineKeyboardButton("بعدی ➡️" if is_fa else "Next ➡️", callback_data=f"mem_tab:{view_type}:{page + 1}"))
keyboard.append(pag_row)
- # 4. Clear memory button
- action_row = []
+ # 4. Action buttons (Add, Clear, Refresh)
+ action_row = [
+ InlineKeyboardButton("➕ افزودن خاطره" if is_fa else "➕ Add Memory", callback_data=f"mem_add_menu:{view_type}"),
+ ]
if can_delete_current and total_cnt > 0:
clear_label = "🧹 پاکسازی این بخش" if is_fa else "🧹 Clear this section"
action_row.append(InlineKeyboardButton(clear_label, callback_data=f"mem_clear_conf:{view_type}"))
action_row.append(InlineKeyboardButton("🔄 تازهسازی" if is_fa else "🔄 Refresh", callback_data=f"mem_tab:{view_type}:{page}"))
- if action_row:
- keyboard.append(action_row)
+ keyboard.append(action_row)
# 5. Main menu button
keyboard.append([
@@ -1272,6 +1279,229 @@ def build_memory_menu(chat_id: int, view_type: str = "project", page: int = 0) -
return text, InlineKeyboardMarkup(keyboard)
+MEMORY_PRESETS = {
+ "project": {
+ "php_caddy": {
+ "key": "php_caddy_stack",
+ "category": "tech_stack",
+ "content": "همیشه از PHP 8.x مدرن به عنوان زبان اصلی بکاند و سرور Caddy برای Reverse Proxy و مدیریت خودکار SSL دامنه msa.artacloud.ir استفاده شود.",
+ "content_en": "Always use modern PHP 8.x as backend and Caddy reverse proxy for msa.artacloud.ir domains with automatic SSL.",
+ },
+ "qa_tests": {
+ "key": "qa_and_verification",
+ "category": "rule",
+ "content": "قبل از اتمام کار، تمام کدها، مسیرها، سینتکس و سرویسها باید به طور کامل تست، عیبیابی و اعتبارسنجی شوند.",
+ "content_en": "Always test, verify syntax, and perform QA audit before marking tasks complete.",
+ },
+ "clean_code": {
+ "key": "clean_code_standards",
+ "category": "rule",
+ "content": "ساختار تمیز دایرکتوریها، تفکیک فایلها، کامنتهای معنادار و الگوهای خوانا رعایت شوند.",
+ "content_en": "Follow clean code architecture, proper folder structure, and meaningful documentation.",
+ },
+ },
+ "user": {
+ "lang_fa": {
+ "key": "preferred_language",
+ "category": "preference",
+ "content": "همیشه تمام مکالمات، توضیحات، و پیامها به زبان فارسی روان و دقیق ارائه شوند.",
+ "content_en": "Always communicate and explain in fluent Persian.",
+ },
+ "concise_style": {
+ "key": "response_style",
+ "category": "preference",
+ "content": "پاسخها خلاصه، سریع، دقیق، ساختاریافته و با بولتپوینتهای خوانا ارسال شوند.",
+ "content_en": "Responses should be concise, well-structured, and easy to read.",
+ },
+ "tz_tehran": {
+ "key": "preferred_timezone",
+ "category": "preference",
+ "content": "منطقه زمانی کاربر Asia/Tehran (ایران) است و زمانبندیها بر اساس این منطقه انجام شوند.",
+ "content_en": "User timezone is Asia/Tehran.",
+ },
+ "php_pref": {
+ "key": "preferred_tech_stack",
+ "category": "preference",
+ "content": "ترجیح زبان برنامهنویسی و پشته توسعه دهنده PHP مدرن (PHP 8.x) است.",
+ "content_en": "Developer prefers modern PHP 8.x tech stack.",
+ },
+ },
+ "global": {
+ "user_isolation": {
+ "key": "user_isolation_security",
+ "category": "rule",
+ "content": "کاربران عادی به جز مدیر فقط حق کار درون دایرکتوری اختصاصی پروژه خود (/root/projects/{user_id}/...) را دارند و هرگز نباید پرامپتها یا دادههای سیستمی به آنها افشا شود.",
+ "content_en": "Non-admin users are strictly isolated to their own project directories.",
+ },
+ "caddy_ssl": {
+ "key": "server_domain_caddy",
+ "category": "rule",
+ "content": "تمام سرویسهای وب و سابدامینهای *.msa.artacloud.ir باید با Caddy با SSL خودکار تنظیم و فعال شوند.",
+ "content_en": "All web services and subdomains are routed through Caddy with automatic SSL.",
+ },
+ "hierarchy_rule": {
+ "key": "precedence_hierarchy",
+ "category": "rule",
+ "content": "سلسلهمراتب قطعی اولویت: ۱. قوانین عمومی سیستم ۲. خاطرات و تصمیمات اختصاصی پروژه ۳. ترجیحات کلی کاربر.",
+ "content_en": "Strict precedence: 1. Global rules, 2. Project memory, 3. User preferences.",
+ },
+ },
+}
+
+
+def build_memory_add_menu(chat_id: int, view_type: str = "project") -> tuple[str, InlineKeyboardMarkup]:
+ """Builds interactive memory creation / template guide menu with quick presets and copyable command."""
+ from memory_manager import memory_manager
+ session = session_manager.get_or_create(chat_id)
+ curr_proj = session_manager.get_current_project(chat_id)
+ is_fa = (session.language or "").lower() in ("fa", "farsi", "persian", "🇮🇷 persian / farsi (فارسی)")
+ is_admin_user = settings.is_admin(chat_id)
+
+ proj_name = curr_proj.name if curr_proj else "default"
+
+ if view_type == "global" and not is_admin_user:
+ view_type = "project" if curr_proj else "user"
+ if view_type not in ("project", "user", "global"):
+ view_type = "project" if curr_proj else "user"
+
+ if is_fa:
+ type_labels = {
+ "project": f"📁 پروژه اختصاصی ({escape_html(proj_name)})",
+ "user": "👤 ترجیحات و مشخصات شخصی من (سراسری)",
+ "global": "🌐 قوانین عمومی سیستم (کل سرور)",
+ }
+ text = (
+ f"🧠 افزودن خاطره به حافظه هوش مصنوعی (Add Memory)\n\n"
+ f"• 🎯 بخش انتخابی: {type_labels.get(view_type, view_type)}\n\n"
+ f"💡 روشهای ثبت خاطره:\n\n"
+ f"📌 ۱. ثبت سریع با الگوهای آماده (با یک کلیک):\n"
+ f"با لمس هر یک از دکمههای زیر، خاطره استاندارد بلافاصله در این بخش ذخیره میشود.\n\n"
+ f"📌 ۲. ثبت دستی با دستور مستقیم (کپی و ویرایش):\n"
+ f"/memory add {view_type} <کلید> | <متن خاطره یا قانون>\n\n"
+ f"مثال:\n"
+ f"• /memory add {view_type} code_style | کدهای پایتون و PHP به صورت ماژولار و تمیز نوشته شوند\n\n"
+ f"📌 ۳. آموزش مستقیم در چت با هوش مصنوعی:\n"
+ f"در حین گفتگو بنویسید: «این نکته رو در حافظه ثبت کن: پورت دیتابیس ۵۴۳۲ است» تا خودکار به خاطر بسپارد."
+ )
+ else:
+ type_labels = {
+ "project": f"📁 Active Project ({escape_html(proj_name)})",
+ "user": "👤 Personal Profile / Preferences",
+ "global": "🌐 Global System Rules",
+ }
+ text = (
+ f"🧠 Add AI Long-Term Memory\n\n"
+ f"• 🎯 Target Tier: {type_labels.get(view_type, view_type)}\n\n"
+ f"💡 Methods to Add Memory:\n\n"
+ f"📌 1. One-Click Quick Presets:\n"
+ f"Click any button below to instantly save standard rules or preferences.\n\n"
+ f"📌 2. Manual Command:\n"
+ f"/memory add {view_type} <key> | <content>\n\n"
+ f"Example:\n"
+ f"• /memory add {view_type} code_style | Write clean modular code\n\n"
+ f"📌 3. Direct Chat with AI:\n"
+ f"Simply tell AI in chat: 'Remember that PostgreSQL port is 5432'."
+ )
+
+ keyboard = []
+
+ # 1. Tier selection tabs
+ t_proj = f"📁 پروژه ({proj_name[:10]}) ✓" if view_type == "project" else f"📁 پروژه ({proj_name[:10]})"
+ t_user = "👤 کاربر (من) ✓" if view_type == "user" else "👤 کاربر (من)"
+ t_glob = "🌐 عمومی ✓" if view_type == "global" else "🌐 عمومی"
+ if not is_fa:
+ t_proj = "📁 Project ✓" if view_type == "project" else "📁 Project"
+ t_user = "👤 User ✓" if view_type == "user" else "👤 User"
+ t_glob = "🌐 Global ✓" if view_type == "global" else "🌐 Global"
+
+ tab_row = [
+ InlineKeyboardButton(t_proj, callback_data="mem_add_tab:project"),
+ InlineKeyboardButton(t_user, callback_data="mem_add_tab:user"),
+ ]
+ if is_admin_user:
+ tab_row.append(InlineKeyboardButton(t_glob, callback_data="mem_add_tab:global"))
+ keyboard.append(tab_row)
+
+ # 2. Preset buttons based on view_type
+ if view_type == "project":
+ if is_fa:
+ keyboard.append([
+ InlineKeyboardButton("🐘 اولویت با PHP مدرن و Caddy", callback_data="mem_add_preset:project:php_caddy"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("🛡️ اجرای تست و اعتبارسنجی کامل", callback_data="mem_add_preset:project:qa_tests"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("📁 تمیزی و سازماندهی کدها", callback_data="mem_add_preset:project:clean_code"),
+ ])
+ else:
+ keyboard.append([
+ InlineKeyboardButton("🐘 Prefer Modern PHP & Caddy", callback_data="mem_add_preset:project:php_caddy"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("🛡️ Strict QA Testing & Audit", callback_data="mem_add_preset:project:qa_tests"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("📁 Clean Code & Standards", callback_data="mem_add_preset:project:clean_code"),
+ ])
+ elif view_type == "user":
+ if is_fa:
+ keyboard.append([
+ InlineKeyboardButton("🇮🇷 پاسخها همیشه فارسی روان باشد", callback_data="mem_add_preset:user:lang_fa"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("📝 پاسخهای فشرده و ساختاریافته", callback_data="mem_add_preset:user:concise_style"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("⏰ منطقه زمانی Asia/Tehran", callback_data="mem_add_preset:user:tz_tehran"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("🐘 ترجیح اولویت توسعه با PHP", callback_data="mem_add_preset:user:php_pref"),
+ ])
+ else:
+ keyboard.append([
+ InlineKeyboardButton("🇮🇷 Always Respond in Persian", callback_data="mem_add_preset:user:lang_fa"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("📝 Concise & Structured Style", callback_data="mem_add_preset:user:concise_style"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("⏰ Timezone Asia/Tehran", callback_data="mem_add_preset:user:tz_tehran"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("🐘 Prefer PHP Stack", callback_data="mem_add_preset:user:php_pref"),
+ ])
+ elif view_type == "global" and is_admin_user:
+ if is_fa:
+ keyboard.append([
+ InlineKeyboardButton("🔒 قرنطینه و تفکیک امنیتی کاربران", callback_data="mem_add_preset:global:user_isolation"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("🌐 رورسپروکسی Caddy و SSL خودکار", callback_data="mem_add_preset:global:caddy_ssl"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("⚖️ رعایت سلسلهمراتب ۳ سطحی حافظه", callback_data="mem_add_preset:global:hierarchy_rule"),
+ ])
+ else:
+ keyboard.append([
+ InlineKeyboardButton("🔒 User Isolation & Security", callback_data="mem_add_preset:global:user_isolation"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("🌐 Caddy SSL Reverse Proxy", callback_data="mem_add_preset:global:caddy_ssl"),
+ ])
+ keyboard.append([
+ InlineKeyboardButton("⚖️ Strict Memory Precedence", callback_data="mem_add_preset:global:hierarchy_rule"),
+ ])
+
+ # 3. Navigation row
+ keyboard.append([
+ InlineKeyboardButton("🔙 لیست خاطرات" if is_fa else "🔙 Memory List", callback_data=f"mem_tab:{view_type}:0"),
+ InlineKeyboardButton("🏠 منوی اصلی" if is_fa else "🏠 Main Dashboard", callback_data="btn_dashboard"),
+ ])
+
+ return text, InlineKeyboardMarkup(keyboard)
+
+
def build_tasks_menu(chat_id: int, page: int = 0) -> tuple[str, InlineKeyboardMarkup]:
"""Builds interactive Scheduled Tasks manager dashboard with pagination and status buttons."""
session = session_manager.get_or_create(chat_id)
@@ -1895,11 +2125,12 @@ async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
f"• /lang [زبان] - تغییر زبان پاسخدهی (مثلاً /lang fa)\n"
f"• /effort [low|med|high] - تنظیم عمق تفکر استدلالی\n"
f"🧠 حافظه بلندمدت هوش مصنوعی (AI Memory):\n"
- f"• /memory - کنترلپنل تعاملی حافظه هوشمند، مشاهده و پاکسازی خاطرات\n"
+ f"• /memory - کنترلپنل تعاملی حافظه هوشمند، دکمههای افزودن، مشاهده و پاکسازی خاطرات\n"
+ f"• /memory add [project|user|global] کلید | متن - افزودن مستقیم خاطره جدید\n"
f"• /memory global - مشاهده قوانین و خاطرات عمومی کل سیستم\n"
f"• /memory private - مشاهده خاطرات اختصاصی و شخصی شما\n"
f"• /memory clear - پاکسازی خاطرات اختصاصی شما\n"
- f"• هوش مصنوعی در طول مکالمات، نکات کلیدی و ترجیحات شما را به صورت خودکار به خاطر میسپارد!\n\n"
+ f"• امکان افزودن با ۱ کلیک از طریق دکمه «➕ افزودن خاطره» در پنل حافظه و منوی پروژهها فراهم است.\n\n"
f"👑 مدیریت کاربران و دعوتها (ویژه مدیر):\n"
f"• /users - پنل تعاملی مدیریت کاربران و لیست مجاز\n"
f"• /invite <user_id> - دعوت و اعطای مستقیم دسترسی به کاربر\n"
@@ -5340,6 +5571,55 @@ async def callback_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
except Exception:
await query.message.reply_html(text, reply_markup=markup)
+ elif data.startswith("mem_add_menu:") or data.startswith("mem_add_tab:"):
+ parts = data.split(":")
+ v_type = parts[1] if len(parts) > 1 else "project"
+ if v_type == "global" and not is_admin_user:
+ await query.answer("🚫 افزودن حافظه عمومی فقط مختص مدیر سیستم است." if is_fa else "🚫 Global memory restricted to administrators.", show_alert=True)
+ v_type = "project" if session_manager.get_current_project(chat_id) else "user"
+ text, markup = build_memory_add_menu(chat_id, view_type=v_type)
+ try:
+ await query.edit_message_text(text, parse_mode=constants.ParseMode.HTML, reply_markup=markup)
+ except Exception:
+ await query.message.reply_html(text, reply_markup=markup)
+
+ elif data.startswith("mem_add_preset:"):
+ _, target_type, preset_name = data.split(":", 2)
+ if target_type == "global" and not is_admin_user:
+ await query.answer("🚫 دسترسی غیرمجاز!" if is_fa else "🚫 Permission denied!", show_alert=True)
+ return
+
+ from memory_manager import memory_manager
+ curr_p = session_manager.get_current_project(chat_id)
+ p_name = curr_p.name if curr_p else "default"
+
+ preset_data = MEMORY_PRESETS.get(target_type, {}).get(preset_name)
+ if not preset_data:
+ await query.answer("❌ الگوی مورد نظر یافت نشد." if is_fa else "❌ Preset not found.", show_alert=True)
+ return
+
+ try:
+ item, is_created = memory_manager.save_or_update(
+ type_=target_type,
+ key=preset_data["key"],
+ content=preset_data["content"] if is_fa else preset_data.get("content_en", preset_data["content"]),
+ user_id=chat_id,
+ project_name=p_name if target_type == "project" else None,
+ category=preset_data.get("category", "general"),
+ importance=5 if target_type == "global" else 3,
+ created_by=chat_id,
+ )
+ action_str = "ثبت شد" if is_created else "بهروزرسانی شد"
+ await query.answer(f"✅ خاطره «{item.key}» با موفقیت {action_str}!" if is_fa else f"✅ Memory '{item.key}' saved!", show_alert=True)
+ except Exception as e:
+ await query.answer(f"⚠️ خطا در ثبت خاطره: {e}", show_alert=True)
+
+ text, markup = build_memory_menu(chat_id, view_type=target_type, page=0)
+ try:
+ await query.edit_message_text(text, parse_mode=constants.ParseMode.HTML, reply_markup=markup)
+ except Exception:
+ await query.message.reply_html(text, reply_markup=markup)
+
elif data == "btn_tasks_menu":
text, markup = build_tasks_menu(chat_id, page=0)
try:
diff --git a/telegram-agy-bot/sessions.json b/telegram-agy-bot/sessions.json
index 6ab9a04..909b914 100644
--- a/telegram-agy-bot/sessions.json
+++ b/telegram-agy-bot/sessions.json
@@ -8,7 +8,7 @@
"workspace": "/root",
"owner_id": 78649634,
"shared_with": [],
- "conversation_id": null,
+ "conversation_id": "78b5ee58-6bf5-4196-a37b-37898effdd97",
"conversation_history": [
"b269812c-fbe5-41d6-ad69-41366a87eb9e",
"c70e3f52-141e-4610-a4e6-79b3d42ec620",
@@ -40,14 +40,15 @@
"d54c0c8d-6424-40a4-84f4-7a9de60eac7b",
"4a917d1b-08f1-4820-b294-1ac1123df573",
"d06d4209-6d87-4ca5-afc2-ad49be5e69ec",
- "1af266cc-8075-4333-b557-0ad2918fd8f0"
+ "1af266cc-8075-4333-b557-0ad2918fd8f0",
+ "78b5ee58-6bf5-4196-a37b-37898effdd97"
],
"model": "gemini-3.7-flash-auto",
"effort": "high",
"language": "fa",
- "last_context_length": null,
- "last_total_tokens": null,
- "last_response": "\u06a9\u0627\u0646\u062a\u06a9\u0633\u062a \u0648 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u06af\u0641\u062a\u06af\u0648\u06cc \u0641\u0639\u0627\u0644 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u067e\u0627\u06a9\u200c\u0633\u0627\u0632\u06cc \u0648 \u0631\u06cc\u0633\u062a \u0634\u062f. \u06cc\u06a9 \u0646\u0634\u0633\u062a \u06af\u0641\u062a\u06af\u0648\u06cc \u062a\u0627\u0632\u0647 \u0648 \u062a\u0645\u06cc\u0632 \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u06a9\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u06af\u0631\u062f\u06cc\u062f.\n\n[[RESET_CONVERSATION]]\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": 31543,
+ "last_total_tokens": 259869,
+ "last_response": "\u0642\u0627\u0628\u0644\u06cc\u062a **\u0627\u0641\u0632\u0648\u062f\u0646 \u0648 \u062b\u0628\u062a \u062e\u0627\u0637\u0631\u0647 (AI Memory)** \u0628\u0627 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u062a\u0639\u0627\u0645\u0644\u06cc \u06a9\u0627\u0645\u0644 \u0628\u0647 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u0634\u06cc\u0634\u0647\u200c\u0627\u06cc \u0648 \u0645\u0646\u0648\u0647\u0627\u06cc \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f.\n\n---\n\n### \ud83c\udf1f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0648 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0634\u062f\u0647:\n\n1. **\u062f\u06a9\u0645\u0647 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u00ab\u2795 \u0627\u0641\u0632\u0648\u062f\u0646 \u062e\u0627\u0637\u0631\u0647\u00bb \u062f\u0631 \u06a9\u0646\u062a\u0631\u0644\u200c\u067e\u0646\u0644 \u062d\u0627\u0641\u0638\u0647 (`build_memory_menu`):**\n - \u062f\u0631 \u06a9\u0646\u0627\u0631 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0648 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc\u060c \u062f\u06a9\u0645\u0647 \u0634\u06cc\u0634\u0647\u200c\u0627\u06cc `\u2795 \u0627\u0641\u0632\u0648\u062f\u0646 \u062e\u0627\u0637\u0631\u0647` \u0627\u0636\u0627\u0641\u0647 \u0634\u062f.\n \n2. **\u0645\u0646\u0648\u06cc \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u0647\u0648\u0634\u0645\u0646\u062f \u062b\u0628\u062a \u062e\u0627\u0637\u0631\u0647 (`build_memory_add_menu`):**\n - **\u062a\u0628\u200c\u0647\u0627\u06cc \u062a\u0641\u06a9\u06cc\u06a9\u200c\u0634\u062f\u0647 \u0633\u0637\u0648\u062d \u0633\u0647\u200c\u06af\u0627\u0646\u0647 \u062d\u0627\u0641\u0638\u0647:** \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0633\u0627\u0646 \u0645\u06cc\u0627\u0646 \ud83d\udcc1 *\u062e\u0627\u0637\u0631\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0641\u0639\u0627\u0644*\u060c \ud83d\udc64 *\u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u0634\u062e\u0635\u06cc \u06a9\u0627\u0631\u0628\u0631* \u0648 \ud83c\udf10 *\u0642\u0648\u0627\u0646\u06cc\u0646 \u0639\u0645\u0648\u0645\u06cc \u0633\u06cc\u0633\u062a\u0645 (\u0645\u062e\u062a\u0635 \u0645\u062f\u06cc\u0631)*.\n - **\u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u0633\u0631\u06cc\u0639 (Quick Presets \u0628\u0627 \u06cc\u06a9 \u06a9\u0644\u06cc\u06a9):**\n - **\u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647:** \u062b\u0628\u062a \u0641\u0648\u0631\u06cc \u0627\u0648\u0644\u0648\u06cc\u062a PHP \u0645\u062f\u0631\u0646 \u0648 Caddy\u060c \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc \u062a\u0633\u062a \u0648 QA\u060c \u0633\u0627\u062e\u062a\u0627\u0631 \u062a\u0645\u06cc\u0632 \u06a9\u062f.\n - **\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631:** \u0627\u0648\u0644\u0648\u06cc\u062a \u067e\u0627\u0633\u062e\u200c\u062f\u0647\u06cc \u0628\u0647 \u0632\u0628\u0627\u0646 \u0641\u0627\u0631\u0633\u06cc\u060c \u0627\u0633\u062a\u0627\u06cc\u0644 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u062e\u0644\u0627\u0635\u0647 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u0627\u0641\u062a\u0647\u060c \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0637\u0642\u0647 \u0632\u0645\u0627\u0646\u06cc \u062a\u0647\u0631\u0627\u0646\u060c \u0627\u0648\u0644\u0648\u06cc\u062a \u067e\u0634\u062a\u0647 \u062a\u0648\u0633\u0639\u0647 PHP.\n - **\u0628\u0631\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc (\u0645\u062f\u06cc\u0631):** \u0627\u0645\u0646\u06cc\u062a \u0648 \u0642\u0631\u0646\u0637\u06cc\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u060c \u0631\u0648\u0631\u0633\u200c\u067e\u0631\u0648\u06a9\u0633\u06cc \u062f\u0627\u0645\u0646\u0647 \u0648 SSL \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 Caddy\u060c \u0633\u0644\u0633\u0644\u0647\u0645\u0631\u0627\u062a\u0628 \u0627\u0648\u0644\u0648\u06cc\u062a \u062d\u0627\u0641\u0638\u0647.\n - **\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0633\u0631\u06cc\u0639 \u0628\u0627 \u06a9\u062f\u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u06a9\u067e\u06cc:** \u0646\u0645\u0627\u06cc\u0634 \u0641\u0631\u0645\u062a \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f `/memory add ...` \u062c\u0647\u062a \u062b\u0628\u062a \u062f\u0633\u062a\u06cc \u0622\u0633\u0627\u0646 \u0628\u0627 \u06a9\u0644\u06cc\u062f \u0648 \u0645\u062d\u062a\u0648\u0627\u06cc \u062f\u0644\u062e\u0648\u0627\u0647.\n\n3. **\u062f\u06a9\u0645\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u00ab\ud83e\udde0 \u062d\u0627\u0641\u0638\u0647 \u067e\u0631\u0648\u0698\u0647\u00bb \u062f\u0631 \u0645\u0646\u0648\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 (`build_projects_menu`):**\n - \u0627\u0645\u06a9\u0627\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0633\u062a\u0642\u06cc\u0645 \u062d\u0627\u0641\u0638\u0647 \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0645\u0646\u0648\u06cc \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627.\n\n4. **\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0631\u0627\u0647\u0646\u0645\u0627 (`/help`):**\n - \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0648 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0648 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u062d\u0627\u0641\u0638\u0647 \u062f\u0631 \u0628\u062e\u0634 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f\u0646\u062f.\n\n[[RESTART_BOT]]\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\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062a\u0627\u06cc\u06cc\u062f \u0648 \u062a\u0633\u062a \u0634\u062f\u0646\u062f. \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u062b\u0628\u062a \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0641\u0638\u0647 \u0647\u0645\u200c\u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f.\n\n[[RESTART_BOT]]\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": ""
},
@@ -74,19 +75,19 @@
}
},
"turn_in_progress": false,
- "last_prompt": null,
- "last_response": "\u06a9\u0627\u0646\u062a\u06a9\u0633\u062a \u0648 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u06af\u0641\u062a\u06af\u0648\u06cc \u0641\u0639\u0627\u0644 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u067e\u0627\u06a9\u200c\u0633\u0627\u0632\u06cc \u0648 \u0631\u06cc\u0633\u062a \u0634\u062f. \u06cc\u06a9 \u0646\u0634\u0633\u062a \u06af\u0641\u062a\u06af\u0648\u06cc \u062a\u0627\u0632\u0647 \u0648 \u062a\u0645\u06cc\u0632 \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u06a9\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u06af\u0631\u062f\u06cc\u062f.\n\n[[RESET_CONVERSATION]]\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": "\u0627\u0645\u06a9\u0627\u0646 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062d\u0627\u0641\u0638\u0647 \u0631\u0627 \u0628\u0647 \u062f\u06a9\u0645\u0647 \u0647\u0627\u06cc \u0631\u0628\u0627\u062a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646",
+ "last_response": "\u0642\u0627\u0628\u0644\u06cc\u062a **\u0627\u0641\u0632\u0648\u062f\u0646 \u0648 \u062b\u0628\u062a \u062e\u0627\u0637\u0631\u0647 (AI Memory)** \u0628\u0627 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u062a\u0639\u0627\u0645\u0644\u06cc \u06a9\u0627\u0645\u0644 \u0628\u0647 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u0634\u06cc\u0634\u0647\u200c\u0627\u06cc \u0648 \u0645\u0646\u0648\u0647\u0627\u06cc \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f.\n\n---\n\n### \ud83c\udf1f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0648 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0634\u062f\u0647:\n\n1. **\u062f\u06a9\u0645\u0647 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u00ab\u2795 \u0627\u0641\u0632\u0648\u062f\u0646 \u062e\u0627\u0637\u0631\u0647\u00bb \u062f\u0631 \u06a9\u0646\u062a\u0631\u0644\u200c\u067e\u0646\u0644 \u062d\u0627\u0641\u0638\u0647 (`build_memory_menu`):**\n - \u062f\u0631 \u06a9\u0646\u0627\u0631 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0648 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc\u060c \u062f\u06a9\u0645\u0647 \u0634\u06cc\u0634\u0647\u200c\u0627\u06cc `\u2795 \u0627\u0641\u0632\u0648\u062f\u0646 \u062e\u0627\u0637\u0631\u0647` \u0627\u0636\u0627\u0641\u0647 \u0634\u062f.\n \n2. **\u0645\u0646\u0648\u06cc \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u0647\u0648\u0634\u0645\u0646\u062f \u062b\u0628\u062a \u062e\u0627\u0637\u0631\u0647 (`build_memory_add_menu`):**\n - **\u062a\u0628\u200c\u0647\u0627\u06cc \u062a\u0641\u06a9\u06cc\u06a9\u200c\u0634\u062f\u0647 \u0633\u0637\u0648\u062d \u0633\u0647\u200c\u06af\u0627\u0646\u0647 \u062d\u0627\u0641\u0638\u0647:** \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u0633\u0627\u0646 \u0645\u06cc\u0627\u0646 \ud83d\udcc1 *\u062e\u0627\u0637\u0631\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0641\u0639\u0627\u0644*\u060c \ud83d\udc64 *\u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u0634\u062e\u0635\u06cc \u06a9\u0627\u0631\u0628\u0631* \u0648 \ud83c\udf10 *\u0642\u0648\u0627\u0646\u06cc\u0646 \u0639\u0645\u0648\u0645\u06cc \u0633\u06cc\u0633\u062a\u0645 (\u0645\u062e\u062a\u0635 \u0645\u062f\u06cc\u0631)*.\n - **\u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u0633\u0631\u06cc\u0639 (Quick Presets \u0628\u0627 \u06cc\u06a9 \u06a9\u0644\u06cc\u06a9):**\n - **\u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647:** \u062b\u0628\u062a \u0641\u0648\u0631\u06cc \u0627\u0648\u0644\u0648\u06cc\u062a PHP \u0645\u062f\u0631\u0646 \u0648 Caddy\u060c \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc \u062a\u0633\u062a \u0648 QA\u060c \u0633\u0627\u062e\u062a\u0627\u0631 \u062a\u0645\u06cc\u0632 \u06a9\u062f.\n - **\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631:** \u0627\u0648\u0644\u0648\u06cc\u062a \u067e\u0627\u0633\u062e\u200c\u062f\u0647\u06cc \u0628\u0647 \u0632\u0628\u0627\u0646 \u0641\u0627\u0631\u0633\u06cc\u060c \u0627\u0633\u062a\u0627\u06cc\u0644 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u062e\u0644\u0627\u0635\u0647 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u0627\u0641\u062a\u0647\u060c \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0637\u0642\u0647 \u0632\u0645\u0627\u0646\u06cc \u062a\u0647\u0631\u0627\u0646\u060c \u0627\u0648\u0644\u0648\u06cc\u062a \u067e\u0634\u062a\u0647 \u062a\u0648\u0633\u0639\u0647 PHP.\n - **\u0628\u0631\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc (\u0645\u062f\u06cc\u0631):** \u0627\u0645\u0646\u06cc\u062a \u0648 \u0642\u0631\u0646\u0637\u06cc\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u060c \u0631\u0648\u0631\u0633\u200c\u067e\u0631\u0648\u06a9\u0633\u06cc \u062f\u0627\u0645\u0646\u0647 \u0648 SSL \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 Caddy\u060c \u0633\u0644\u0633\u0644\u0647\u0645\u0631\u0627\u062a\u0628 \u0627\u0648\u0644\u0648\u06cc\u062a \u062d\u0627\u0641\u0638\u0647.\n - **\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0633\u0631\u06cc\u0639 \u0628\u0627 \u06a9\u062f\u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u06a9\u067e\u06cc:** \u0646\u0645\u0627\u06cc\u0634 \u0641\u0631\u0645\u062a \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f `/memory add ...` \u062c\u0647\u062a \u062b\u0628\u062a \u062f\u0633\u062a\u06cc \u0622\u0633\u0627\u0646 \u0628\u0627 \u06a9\u0644\u06cc\u062f \u0648 \u0645\u062d\u062a\u0648\u0627\u06cc \u062f\u0644\u062e\u0648\u0627\u0647.\n\n3. **\u062f\u06a9\u0645\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u00ab\ud83e\udde0 \u062d\u0627\u0641\u0638\u0647 \u067e\u0631\u0648\u0698\u0647\u00bb \u062f\u0631 \u0645\u0646\u0648\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 (`build_projects_menu`):**\n - \u0627\u0645\u06a9\u0627\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0633\u062a\u0642\u06cc\u0645 \u062d\u0627\u0641\u0638\u0647 \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0645\u0646\u0648\u06cc \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627.\n\n4. **\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0631\u0627\u0647\u0646\u0645\u0627 (`/help`):**\n - \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0648 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0648 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u062d\u0627\u0641\u0638\u0647 \u062f\u0631 \u0628\u062e\u0634 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f\u0646\u062f.\n\n[[RESTART_BOT]]\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\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062a\u0627\u06cc\u06cc\u062f \u0648 \u062a\u0633\u062a \u0634\u062f\u0646\u062f. \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u062b\u0628\u062a \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0641\u0638\u0647 \u0647\u0645\u200c\u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f.\n\n[[RESTART_BOT]]\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": 1788074664.3490796,
+ "last_update_time": 1788074855.6819587,
"workspace": "/root",
- "conversation_id": null,
+ "conversation_id": "78b5ee58-6bf5-4196-a37b-37898effdd97",
"model": "gemini-3.7-flash-auto",
"effort": "high",
"language": "fa",
- "last_context_length": null,
- "last_total_tokens": null
+ "last_context_length": 31543,
+ "last_total_tokens": 259869
},
"232801087": {
"chat_id": 232801087,