- الرئيسية
- Documentation
- TUI
- مرجع أمر `/tree`
مرجع أمر `/tree`
يفتح /tree متصفح شجرة الجلسة التفاعلي. يتيح لك الانتقال إلى أي إدخال في ملف الجلسة الحالي والمتابعة من تلك النقطة.
هذه عملية انتقال داخلي إلى ورقة في الملف، وليست تصدير جلسة جديدة.
ما يفعله /tree
Section titled “ما يفعله /tree”- يبني شجرة من إدخالات الجلسة الحالية (
SessionManager.getTree()) - يفتح
TreeSelectorComponentمع التنقل بلوحة المفاتيح والفلاتر والبحث - عند الاختيار، يستدعي
AgentSession.navigateTree(targetId, { summarize, customInstructions }) - يعيد بناء المحادثة المرئية من مسار الورقة الجديدة
- يملأ مسبقاً نص المحرر اختيارياً عند اختيار رسالة مستخدم/مخصصة
التنفيذ الأساسي:
src/modes/controllers/input-controller.ts(/tree، تشغيل اختصارات لوحة المفاتيح، سلوك الضغط المزدوج على Escape)src/modes/controllers/selector-controller.ts(تشغيل واجهة الشجرة + تدفق مطالبة الملخص)src/modes/components/tree-selector.ts(التنقل، الفلاتر، البحث، التسميات، العرض)src/session/agent-session.ts(تبديل الورقة فيnavigateTree+ الملخص الاختياري)src/session/session-manager.ts(getTree،branch،branchWithSummary،resetLeaf، استمرارية التسمية)
كيفية فتحه
Section titled “كيفية فتحه”أي من الطرق التالية يفتح نفس المحدد:
/tree- إجراء اختصار لوحة المفاتيح المُكوَّن
tree - الضغط المزدوج على Escape عند محرر فارغ عندما يكون
doubleEscapeAction = "tree"(الافتراضي) /branchعندما يكونdoubleEscapeAction = "tree"(يوجه إلى محدد الشجرة بدلاً من منتقي الفروع للمستخدم فقط)
نموذج واجهة مستخدم الشجرة
Section titled “نموذج واجهة مستخدم الشجرة”يتم عرض الشجرة من مؤشرات العناصر الأم لإدخالات الجلسة (id / parentId).
- يتم ترتيب العناصر الأبناء تصاعدياً حسب الطابع الزمني (الأقدم أولاً، الأحدث في الأسفل)
- يُشار إلى الفرع النشط (المسار من الجذر إلى الورقة الحالية) بنقطة
- تُعرض التسميات (إن وُجدت) بالشكل
[label]قبل نص العقدة - إذا وُجدت جذور متعددة (سلاسل أصل مقطوعة/معطلة)، تُعرض تحت جذر تفرع افتراضي
مثال على عرض الشجرة (المسار النشط مُشار إليه بـ•):
├─ user: "Start task"│ └─ assistant: "Plan"│ ├─ • user: "Try approach A"│ │ └─ • assistant: "A result"│ │ └─ • [milestone] user: "Continue A"│ └─ user: "Try approach B"│ └─ assistant: "B result"يُعيد المحدد التمركز حول الاختيار الحالي ويُظهر ما يصل إلى:
max(5, floor(terminalHeight / 2))صفاً
اختصارات لوحة المفاتيح داخل محدد الشجرة
Section titled “اختصارات لوحة المفاتيح داخل محدد الشجرة”Up/Down: تحريك الاختيار (مع التفاف)Left/Right: الصفحة السابقة / التاليةEnter: اختيار العقدةEsc: مسح البحث إذا كان نشطاً؛ وإلا إغلاق المحددCtrl+C: إغلاق المحددType: إلحاق محرف بعبارة البحثBackspace: حذف محرف بحثShift+L: تعديل/مسح تسمية الإدخال المحددCtrl+O: تدوير الفلتر للأمامShift+Ctrl+O: تدوير الفلتر للخلفAlt+D/T/U/L/A: الانتقال مباشرة إلى وضع فلتر محدد
الفلاتر ودلالات البحث
Section titled “الفلاتر ودلالات البحث”أوضاع الفلتر (TreeList):
defaultno-toolsuser-onlylabeled-onlyall
default
Section titled “default”يُظهر معظم العقد التحاورية، لكنه يُخفي أنواع إدخالات المحاسبة:
labelcustommodel_changethinking_level_change
no-tools
Section titled “no-tools”مثل default، بالإضافة إلى إخفاء رسائل toolResult.
user-only
Section titled “user-only”إدخالات message التي دورها user فقط.
labeled-only
Section titled “labeled-only”الإدخالات التي تحل حالياً إلى تسمية فقط.
كل شيء في شجرة الجلسة، بما في ذلك إدخالات المحاسبة/المخصصة.
سلوك عقدة المساعد للأدوات فقط
Section titled “سلوك عقدة المساعد للأدوات فقط”تُخفى رسائل المساعد التي تحتوي على استدعاءات أدوات فقط (بلا نص) افتراضياً في جميع طرق العرض المُصفّاة إلا في حالتين:
- الرسالة بها خطأ/أُجهضت (
stopReasonليسstop/toolUse)، أو - هي الورقة الحالية (تبقى مرئية دائماً)
سلوك البحث
Section titled “سلوك البحث”- تُقسَّم عبارة الاستعلام بالمسافات
- المطابقة غير حساسة لحالة الأحرف
- يجب أن تتطابق جميع الرموز (دلالات AND)
- يشمل النص القابل للبحث التسمية والدور والمحتوى المحدد بالنوع (نص الرسالة، نص ملخص الفرع، النوع المخصص، مقتطفات أوامر الأدوات، إلخ.)
نتائج الاختيار (مهم)
Section titled “نتائج الاختيار (مهم)”يحسب navigateTree سلوك الورقة الجديدة من نوع الإدخال المحدد:
اختيار رسالة user
Section titled “اختيار رسالة user”- تصبح الورقة الجديدة هي
parentIdالإدخال المحدد - إذا كان الأصل
null(رسالة مستخدم جذرية)، تُعاد تهيئة الورقة إلى الجذر (resetLeaf()) - يُنسخ نص الرسالة المحددة إلى المحرر للتعديل/إعادة الإرسال
اختيار custom_message
Section titled “اختيار custom_message”- نفس قاعدة الورقة كرسائل المستخدم (
parentId) - يُستخرج محتوى النص ويُنسخ إلى المحرر
اختيار عقدة غير مستخدم (مساعد/أداة/ملخص/ضغط/محاسبة مخصصة/إلخ.)
Section titled “اختيار عقدة غير مستخدم (مساعد/أداة/ملخص/ضغط/محاسبة مخصصة/إلخ.)”- تصبح الورقة الجديدة هي معرف العقدة المحددة
- لا يُملأ المحرر مسبقاً
اختيار الورقة الحالية
Section titled “اختيار الورقة الحالية”- لا إجراء؛ يُغلق المحدد مع “موجود بالفعل في هذه النقطة”
قرار الاختيار (مبسط):
selected node │ ├─ is current leaf? ── yes ──> close selector (no-op) │ ├─ is user/custom_message? ── yes ──> leaf := parentId (or resetLeaf for root) │ + prefill editor text │ └─ otherwise ──> leaf := selected node id + no editor prefillتدفق الملخص عند التبديل
Section titled “تدفق الملخص عند التبديل”يتحكم في مطالبة الملخص الإعداد branchSummary.enabled (الافتراضي: false).
عند التفعيل، بعد اختيار عقدة تسأل الواجهة:
No summarySummarizeSummarize with custom prompt
تفاصيل التدفق:
- الضغط على Escape في مطالبة الملخص يعيد فتح محدد الشجرة
- إلغاء المطالبة المخصصة يعود إلى حلقة اختيار الملخص
- أثناء إنشاء الملخص، تُظهر الواجهة مؤشر تحميل وتربط
EscبـabortBranchSummary() - إذا أُجهض إنشاء الملخص، يُعاد فتح محدد الشجرة ولا يُطبق أي انتقال
دواخل navigateTree:
- يجمع إدخالات الفرع المهجور من الورقة القديمة إلى السلف المشترك
- يُصدر
session_before_tree(يمكن للإضافات الإلغاء أو حقن الملخص) - يستخدم جهاز التلخيص الافتراضي فقط إذا طُلب وكان ضرورياً
- يطبق الانتقال بـ:
branchWithSummary(...)عند وجود ملخصbranch(newLeafId)للانتقال غير الجذري بدون ملخصresetLeaf()للانتقال الجذري بدون ملخص
- يستبدل محادثة الوكيل بسياق جلسة معاد بناؤه
- يُصدر
session_tree
ملاحظة: إذا طلب المستخدم ملخصاً ولكن لا يوجد شيء للتلخيص، يستمر التنقل دون إنشاء إدخال ملخص.
التسميات
Section titled “التسميات”تستدعي تعديلات التسمية في واجهة الشجرة appendLabelChange(targetId, label).
- تسمية غير فارغة تضبط/تحدث التسمية المحلولة
- تسمية فارغة تمسحها
- تُخزَّن التسميات كإدخالات
labelللإلحاق فقط - تعرض عقد الشجرة حالة التسمية المحلولة، وليس سجل إدخالات التسمية الخام
/tree مقابل العمليات المجاورة
Section titled “/tree مقابل العمليات المجاورة”| العملية | النطاق | النتيجة |
|---|---|---|
/tree | ملف الجلسة الحالي | ينقل الورقة إلى النقطة المحددة (نفس الملف) |
/branch | عادةً ملف الجلسة الحالي -> ملف جلسة جديد | افتراضياً يتفرع من رسالة مستخدم محددة إلى ملف جلسة جديد؛ إذا كان doubleEscapeAction = "tree"، يفتح /branch واجهة تنقل الشجرة بدلاً من ذلك |
/fork | جلسة الجلسة الحالية بالكامل | يكرر الجلسة إلى ملف جلسة جديد محفوظ |
/resume | قائمة الجلسات | يتبدل إلى ملف جلسة آخر |
التمييز الرئيسي: /tree هو أداة تنقل/إعادة تموضع داخل ملف جلسة واحد. كل من /branch و/fork و/resume تغير سياق ملف الجلسة.
سير عمل المشغل
Section titled “سير عمل المشغل”إعادة التشغيل من مطالبة مستخدم سابقة دون فقدان الفرع الحالي
Section titled “إعادة التشغيل من مطالبة مستخدم سابقة دون فقدان الفرع الحالي”/tree- البحث عن رسالة مستخدم سابقة واختيارها
- اختيار
No summary(أو التلخيص إذا لزم) - تعديل النص المملوء مسبقاً في المحرر
- الإرسال
الأثر: ينمو فرع جديد من النقطة المحددة داخل نفس ملف الجلسة.
مغادرة الفرع الحالي مع علامة تمييز سياقية
Section titled “مغادرة الفرع الحالي مع علامة تمييز سياقية”- تفعيل
branchSummary.enabled /treeواختيار العقدة المستهدفة- اختيار
Summarize(أو مطالبة مخصصة)
الأثر: يُلحق إدخال branch_summary عند الموضع المستهدف قبل المتابعة.
فحص إدخالات المحاسبة المخفية
Section titled “فحص إدخالات المحاسبة المخفية”/tree- الضغط على
Alt+A(الكل) - البحث عن
model،thinking،custom، أو التسميات
الأثر: فحص الجدول الزمني الداخلي الكامل، وليس فقط العقد التحاورية.
وضع علامات على نقاط التحول للرجوع إليها لاحقاً
Section titled “وضع علامات على نقاط التحول للرجوع إليها لاحقاً”/tree- الانتقال إلى الإدخال
Shift+Lوضبط تسمية- لاحقاً استخدام
Alt+L(labeled-only) للانتقال بسرعة
الأثر: تنقل سريع بين معالم الفروع الدائمة.