- หน้าแรก
- Documentation
- TUI
- คู่มืออ้างอิงคำสั่ง `/tree`
คู่มืออ้างอิงคำสั่ง `/tree`
/tree เปิดตัวนำทาง Session Tree แบบโต้ตอบ ซึ่งช่วยให้คุณข้ามไปยังรายการใดก็ได้ในไฟล์เซสชันปัจจุบันและดำเนินการต่อจากจุดนั้น
นี่คือการย้าย leaf ภายในไฟล์เดียวกัน ไม่ใช่การส่งออกเซสชันใหม่
สิ่งที่ /tree ทำ
หัวข้อที่มีชื่อว่า “สิ่งที่ /tree ทำ”- สร้างต้นไม้จากรายการเซสชันปัจจุบัน (
SessionManager.getTree()) - เปิด
TreeSelectorComponentพร้อมการนำทางด้วยแป้นพิมพ์ ตัวกรอง และการค้นหา - เมื่อเลือก จะเรียก
AgentSession.navigateTree(targetId, { summarize, customInstructions }) - สร้างการแชทที่มองเห็นได้ใหม่จาก leaf path ใหม่
- เติมข้อความในตัวแก้ไขล่วงหน้าเมื่อเลือกข้อความของผู้ใช้/ข้อความกำหนดเอง (เป็นตัวเลือก)
การนำไปใช้งานหลัก:
src/modes/controllers/input-controller.ts(การเชื่อมสาย/tree, keybinding, พฤติกรรม double-escape)src/modes/controllers/selector-controller.ts(การเปิด UI ต้นไม้ + กระบวนการแจ้งสรุป)src/modes/components/tree-selector.ts(การนำทาง, ตัวกรอง, การค้นหา, ป้ายกำกับ, การแสดงผล)src/session/agent-session.ts(การสลับ leafnavigateTree+ สรุปเป็นตัวเลือก)src/session/session-manager.ts(getTree,branch,branchWithSummary,resetLeaf, การคงไว้ซึ่งป้ายกำกับ)
วิธีเปิด
หัวข้อที่มีชื่อว่า “วิธีเปิด”สิ่งใดสิ่งหนึ่งต่อไปนี้จะเปิดตัวเลือกเดียวกัน:
/tree- การกระทำ keybinding ที่กำหนดค่า
tree - double-escape บนตัวแก้ไขว่างเมื่อ
doubleEscapeAction = "tree"(ค่าเริ่มต้น) /branchเมื่อdoubleEscapeAction = "tree"(นำไปยังตัวเลือกต้นไม้แทนตัวเลือกสาขาเฉพาะผู้ใช้)
โมเดล UI ของต้นไม้
หัวข้อที่มีชื่อว่า “โมเดล UI ของต้นไม้”ต้นไม้จะถูกแสดงผลจากพอยน์เตอร์ parent ของรายการเซสชัน (id / parentId)
- ลูกจะถูกเรียงลำดับตามเวลาประทับจากน้อยไปมาก (เก่ากว่าก่อน ใหม่กว่าต่ำกว่า)
- สาขาที่ใช้งานอยู่ (เส้นทางจาก root ถึง leaf ปัจจุบัน) จะถูกทำเครื่องหมายด้วยจุด
- ป้ายกำกับ (ถ้ามี) จะแสดงเป็น
[label]ก่อนข้อความของโหนด - หากมี root หลายตัว (parent chain ที่ถูกตัดขาด/เสีย) จะแสดงภายใต้ virtual branching root
ตัวอย่างมุมมองต้นไม้ (เส้นทางที่ใช้งานอยู่ทำเครื่องหมายด้วย •):
├─ 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))แถว
Keybinding ภายในตัวเลือกต้นไม้
หัวข้อที่มีชื่อว่า “Keybinding ภายในตัวเลือกต้นไม้”Up/Down: ย้ายการเลือก (วนรอบ)Left/Right: เลื่อนหน้าขึ้น / เลื่อนหน้าลงEnter: เลือกโหนดEsc: ล้างการค้นหาหากใช้งานอยู่ มิฉะนั้นปิดตัวเลือกCtrl+C: ปิดตัวเลือกType: ต่อท้ายคำค้นหาBackspace: ลบอักขระค้นหาShift+L: แก้ไข/ล้างป้ายกำกับบนรายการที่เลือกCtrl+O: วนรอบตัวกรองไปข้างหน้าShift+Ctrl+O: วนรอบตัวกรองไปข้างหลังAlt+D/T/U/L/A: ข้ามไปยังโหมดตัวกรองเฉพาะโดยตรง
ตัวกรองและความหมายการค้นหา
หัวข้อที่มีชื่อว่า “ตัวกรองและความหมายการค้นหา”โหมดตัวกรอง (TreeList):
defaultno-toolsuser-onlylabeled-onlyall
default
หัวข้อที่มีชื่อว่า “default”แสดงโหนดการสนทนาส่วนใหญ่ แต่ซ่อนประเภทรายการจัดเก็บบัญชี:
labelcustommodel_changethinking_level_change
no-tools
หัวข้อที่มีชื่อว่า “no-tools”เหมือนกับ default แต่ซ่อนข้อความ toolResult เพิ่มเติม
user-only
หัวข้อที่มีชื่อว่า “user-only”เฉพาะรายการ message ที่ role เป็น user
labeled-only
หัวข้อที่มีชื่อว่า “labeled-only”เฉพาะรายการที่ปัจจุบันแก้ไขเป็นป้ายกำกับ
ทุกอย่างในต้นไม้เซสชัน รวมถึงรายการจัดเก็บบัญชี/กำหนดเอง
พฤติกรรมโหนด assistant เฉพาะเครื่องมือ
หัวข้อที่มีชื่อว่า “พฤติกรรมโหนด assistant เฉพาะเครื่องมือ”ข้อความ assistant ที่มี เฉพาะการเรียกเครื่องมือ (ไม่มีข้อความ) จะถูกซ่อนโดยค่าเริ่มต้นในมุมมองที่ถูกกรองทั้งหมด เว้นแต่:
- ข้อความเป็น error/aborted (
stopReasonไม่ใช่stop/toolUse) หรือ - เป็น leaf ปัจจุบัน (แสดงให้เห็นอยู่เสมอ)
พฤติกรรมการค้นหา
หัวข้อที่มีชื่อว่า “พฤติกรรมการค้นหา”- คำค้นหาจะถูกแบ่งโดยเว้นวรรค
- การจับคู่ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก
- token ทั้งหมดต้องตรงกัน (ความหมาย AND)
- ข้อความที่ค้นหาได้รวมถึงป้ายกำกับ role และเนื้อหาเฉพาะประเภท (ข้อความข้อความ, ข้อความสรุปสาขา, ประเภทกำหนดเอง, ข้อมูลโค้ดคำสั่งเครื่องมือ ฯลฯ)
ผลลัพธ์การเลือก (สำคัญ)
หัวข้อที่มีชื่อว่า “ผลลัพธ์การเลือก (สำคัญ)”navigateTree คำนวณพฤติกรรม leaf ใหม่จากประเภทรายการที่เลือก:
การเลือกข้อความ user
หัวข้อที่มีชื่อว่า “การเลือกข้อความ user”- leaf ใหม่จะกลายเป็น
parentIdของรายการที่เลือก - หาก parent เป็น
null(ข้อความผู้ใช้ root) leaf จะรีเซ็ตเป็น root (resetLeaf()) - ข้อความที่เลือกจะถูกคัดลอกไปยังตัวแก้ไขสำหรับการแก้ไข/ส่งใหม่
การเลือก custom_message
หัวข้อที่มีชื่อว่า “การเลือก custom_message”- กฎ leaf เดียวกับข้อความผู้ใช้ (
parentId) - เนื้อหาข้อความจะถูกดึงออกและคัดลอกไปยังตัวแก้ไข
การเลือกโหนดที่ไม่ใช่ผู้ใช้ (assistant/tool/summary/compaction/custom bookkeeping/ฯลฯ)
หัวข้อที่มีชื่อว่า “การเลือกโหนดที่ไม่ใช่ผู้ใช้ (assistant/tool/summary/compaction/custom bookkeeping/ฯลฯ)”- leaf ใหม่จะกลายเป็น id ของโหนดที่เลือก
- ตัวแก้ไขจะไม่ถูกเติมข้อมูลล่วงหน้า
การเลือก leaf ปัจจุบัน
หัวข้อที่มีชื่อว่า “การเลือก leaf ปัจจุบัน”- ไม่มีการดำเนินการ; ตัวเลือกจะปิดพร้อมข้อความ “Already at this point”
การตัดสินใจเลือก (แบบง่าย):
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กระบวนการสรุปเมื่อสลับ
หัวข้อที่มีชื่อว่า “กระบวนการสรุปเมื่อสลับ”การแจ้งสรุปถูกควบคุมโดย branchSummary.enabled (ค่าเริ่มต้น: false)
เมื่อเปิดใช้งาน หลังจากเลือกโหนด UI จะถาม:
No summarySummarizeSummarize with custom prompt
รายละเอียดกระบวนการ:
- Escape ในการแจ้งสรุปจะเปิดตัวเลือกต้นไม้อีกครั้ง
- การยกเลิกการแจ้งกำหนดเองจะกลับไปที่วงจรการเลือกสรุป
- ระหว่างการสรุป UI จะแสดง loader และผูก
EscกับabortBranchSummary() - หากการสรุปถูกยกเลิก ตัวเลือกต้นไม้จะเปิดใหม่และไม่มีการย้ายถูกนำไปใช้
ภายใน navigateTree:
- รวบรวมรายการสาขาที่ถูกละทิ้งจาก leaf เก่าไปยัง common ancestor
- ส่ง
session_before_tree(ส่วนขยายสามารถยกเลิกหรือแทรกสรุปได้) - ใช้ตัวสรุปเริ่มต้นเฉพาะเมื่อร้องขอและจำเป็น
- ใช้การย้ายด้วย:
branchWithSummary(...)เมื่อมีสรุปอยู่branch(newLeafId)สำหรับการย้ายที่ไม่ใช่ root โดยไม่มีสรุปresetLeaf()สำหรับการย้าย root โดยไม่มีสรุป
- แทนที่การสนทนาของ agent ด้วย session context ที่สร้างใหม่
- ส่ง
session_tree
หมายเหตุ: หากผู้ใช้ร้องขอสรุปแต่ไม่มีอะไรให้สรุป การนำทางจะดำเนินต่อโดยไม่สร้างรายการสรุป
ป้ายกำกับ
หัวข้อที่มีชื่อว่า “ป้ายกำกับ”การแก้ไขป้ายกำกับใน UI ต้นไม้จะเรียก appendLabelChange(targetId, label)
- ป้ายกำกับที่ไม่ว่างเปล่าจะตั้งค่า/อัปเดตป้ายกำกับที่แก้ไขแล้ว
- ป้ายกำกับว่างจะล้างมัน
- ป้ายกำกับถูกจัดเก็บเป็นรายการ
labelแบบ append-only - โหนดต้นไม้จะแสดงสถานะป้ายกำกับที่แก้ไขแล้ว ไม่ใช่ประวัติรายการป้ายกำกับดิบ
/tree เทียบกับการดำเนินการที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “/tree เทียบกับการดำเนินการที่เกี่ยวข้อง”| การดำเนินการ | ขอบเขต | ผลลัพธ์ |
|---|---|---|
/tree | ไฟล์เซสชันปัจจุบัน | ย้าย leaf ไปยังจุดที่เลือก (ไฟล์เดียวกัน) |
/branch | โดยปกติไฟล์เซสชันปัจจุบัน -> ไฟล์เซสชันใหม่ | โดยค่าเริ่มต้นจะแตกสาขาจากข้อความ user ที่เลือกไปเป็นไฟล์เซสชันใหม่; หาก doubleEscapeAction = "tree" /branch จะเปิด UI การนำทางต้นไม้แทน |
/fork | เซสชันปัจจุบันทั้งหมด | ทำสำเนาเซสชันไปเป็นไฟล์เซสชันใหม่ที่คงอยู่ |
/resume | รายการเซสชัน | สลับไปยังไฟล์เซสชันอื่น |
ความแตกต่างหลัก: /tree เป็นเครื่องมือนำทาง/จัดตำแหน่งใหม่ภายในไฟล์เซสชันเดียว /branch, /fork และ /resume ทั้งหมดเปลี่ยน session-file context
เวิร์กโฟลว์ของผู้ปฏิบัติงาน
หัวข้อที่มีชื่อว่า “เวิร์กโฟลว์ของผู้ปฏิบัติงาน”เรียกใช้ใหม่จากการแจ้งผู้ใช้ก่อนหน้าโดยไม่สูญเสียสาขาปัจจุบัน
หัวข้อที่มีชื่อว่า “เรียกใช้ใหม่จากการแจ้งผู้ใช้ก่อนหน้าโดยไม่สูญเสียสาขาปัจจุบัน”/tree- ค้นหา/เลือกข้อความผู้ใช้ก่อนหน้า
- เลือก
No summary(หรือสรุปหากจำเป็น) - แก้ไขข้อความที่เติมล่วงหน้าในตัวแก้ไข
- ส่ง
ผลลัพธ์: สาขาใหม่เติบโตจากจุดที่เลือกภายในไฟล์เซสชันเดียวกัน
ออกจากสาขาปัจจุบันพร้อม breadcrumb บริบท
หัวข้อที่มีชื่อว่า “ออกจากสาขาปัจจุบันพร้อม breadcrumb บริบท”- เปิดใช้งาน
branchSummary.enabled /treeและเลือกโหนดเป้าหมาย- เลือก
Summarize(หรือการแจ้งกำหนดเอง)
ผลลัพธ์: รายการ branch_summary จะถูกต่อท้ายที่ตำแหน่งเป้าหมายก่อนดำเนินการต่อ
ตรวจสอบรายการจัดเก็บบัญชีที่ซ่อนอยู่
หัวข้อที่มีชื่อว่า “ตรวจสอบรายการจัดเก็บบัญชีที่ซ่อนอยู่”/tree- กด
Alt+A(all) - ค้นหา
model,thinking,customหรือป้ายกำกับ
ผลลัพธ์: ตรวจสอบไทม์ไลน์ภายในทั้งหมด ไม่ใช่เฉพาะโหนดการสนทนา
บุ๊กมาร์กจุดหมุนสำหรับการข้ามในภายหลัง
หัวข้อที่มีชื่อว่า “บุ๊กมาร์กจุดหมุนสำหรับการข้ามในภายหลัง”/tree- ย้ายไปยังรายการ
Shift+Lและตั้งป้ายกำกับ- ใช้
Alt+L(labeled-only) ในภายหลังเพื่อข้ามอย่างรวดเร็ว
ผลลัพธ์: การนำทางอย่างรวดเร็วในหมู่ branch landmark ที่ยั่งยืน