入口
你在输入框按下回车
模块 · zh-CN
跟着一个回合的事件流,看思考面板、子代理、页脚计数器、DCP 压缩和提问面板如何接力协作。
把一次回合想象成餐厅里的一道菜:你下单(回车),厨师边做边亮出小灯牌(思考/工具面板),忙不过来就喊帮厨(子代理),墙上黑板实时记着用量(页脚),仓库快满了就按规矩清货架(DCP),缺关键配料时服务员会回来问你(提问面板)。
用户提交后,主代理会话带着创建时缓存好的 APPEND_SYSTEM.md 系统段发出请求;流式推理与工具调用在输入框上方的固定面板中原位刷新,委派类工具不产生工具块而是生成带 origin:'subagent'+delegationDepth 预算的子会话;页脚七个数据段读取 O(1) 维护的计数器,上下文百分比按最近一次请求的计费输入输出加后续消息估算定价;达到轮次上限时注入一条可见的 ⚡ 收尾指令而不强制停止;DCP 在空闲边界确定性修剪上下文;ask_user_question 把工具调用挂起为输入框上方的停靠面板,答案作为普通工具结果返回。
类比会在多处失真:子代理不是可杀死进程——maxRounds 永不强制停止,只靠模型服从收尾指令;面板不可回滚,内容被覆盖后屏幕上无处可寻;DCP 按规则而非语义重要性修剪,被剪掉的细节模型可能真的拿不回来;APPEND_SYSTEM.md 在会话创建时读取并缓存,编辑只对下一个会话生效;CH% 是全会话累计值,切换 provider/model 不会归零。
你在输入框按下回车
最终回答渲染进记录
答案回流为工具结果
拒答信封回落
/Users/fliu56/github/dsh-tui-pi/src/session.ts/Users/fliu56/github/dsh-tui-pi/src/footer.ts/Users/fliu56/github/dsh-tui-pi/src/session.ts/Users/fliu56/github/dsh-tui-pi/src/activity.ts/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.md/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.ts/Users/fliu56/github/dsh-dcp/README.md/Users/fliu56/github/dsh-tui-pi/README.md/Users/fliu56/github/dsh-tui-pi/src/session.ts/Users/fliu56/github/dsh-tui-pi/README.md准备开始追踪。
主代理会话创建时读取一次 APPEND_SYSTEM.md 并缓存;用户按下回车后请求才真正出发。
参与者
回合的唯一入口:这条消息连同系统提示一起发往当前 provider/model 路由。
ev-footer-stats存储
主代理会话创建时读取一次并缓存;缺失则首次从模板播种,已有文件永不被整体覆盖。编辑只对下一个会话生效。
ev-append-read-onceev-append-seed决策
该文件注册在主 agent 自己的 prompt 层,子代理的作用域从不合并它——『只派活不动手』这类规则不会传染给孩子。
ev-append-scope事件
消息进入模型路由,流式响应开始返回,事件流点亮后续各块界面。
ev-footer-stats默认显示本节依据;播放时会聚焦当前步骤对应的来源。
核心依据src/session.ts:40-46 及 commit 44cd112:非逐请求热加载,编辑对下一会话生效。
支持结论~/.dsh/APPEND_SYSTEM.md(已缓存)
/Users/fliu56/github/dsh-tui-pi/src/session.ts核心依据src/append-system.ts:99-114:缺失时自模板播种;标记块幂等维护。
支持结论~/.dsh/APPEND_SYSTEM.md(已缓存)
/Users/fliu56/github/dsh-tui-pi/src/append-system.ts核心依据src/session.ts:34-46 installAppendSystem 注册于主 agent scoped context,子代理不合并。
支持结论作用域:仅主代理
/Users/fliu56/github/dsh-tui-pi/src/session.ts核心依据ARCHITECTURE.md:245-246 启动时迁移剥离,避免重复投递。
/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.md核心依据仅建立直觉:子代理≈帮厨、页脚≈黑板记账。不代表实现结构。
这是教学类比或跨来源归纳,没有外部定位链接。
查看完整证据记录核心依据AGENTS.md 铁律 1 与 src/session.ts 统计维护:O(1) 读计数器,渲染不重扫日志。
支持结论你在输入框按下回车请求发出
/Users/fliu56/github/dsh-tui-pi/src/session.ts流式思考和工具调用各占一个固定面板,事件覆盖式刷新;聊天记录保持干净。
处理
整个运行期只有一个思考面板,新事件原地覆盖旧内容;没有活动时占零行、自动隐藏。
ev-panel-one处理
工具调用同理:一个面板原位刷新,完成后消失而不是堆进聊天记录。
ev-panel-one决策
默认 1:一行无边框;5/7/10 画盒子且正文只有 N−1 行;all 打全文——流式思考留 200 行尾巴,落定工具结果最多 2000 行。
ev-panel-heightev-tail-limits决策
use_agent / subagent / workflow / ralph 这四个委派工具从不打开工具块——它们的可见产物是孩子,显示在编辑器下方的运行行里。
ev-spawn-tools默认显示本节依据;播放时会聚焦当前步骤对应的来源。
核心依据src/activity.ts:397-403 单 ThinkPanel/ToolPanel 原位更新,空面板零行隐藏。
支持结论ThinkPanel(唯一一个)ToolPanel(唯一一个)
/Users/fliu56/github/dsh-tui-pi/src/activity.ts核心依据src/activity.ts:358 盒子总高含标题行。
支持结论dsh-tui.panelHeight
/Users/fliu56/github/dsh-tui-pi/src/activity.ts核心依据src/activity.ts:63 与 :69 分别定义两类尾部行数上限。
支持结论dsh-tui.panelHeight
/Users/fliu56/github/dsh-tui-pi/src/activity.ts核心依据src/subagent-policy.ts:41 委派类工具被排除在工具块渲染外。
支持结论委派工具绕行
/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.tsspawn 与 fork 产生的委派子会话被统一追踪,折叠成一行行状态条,可用 Ctrl+G 深入查看甚至中途改指令。
处理
显式 spawn 和进程内 fork 都经同一入口创建,写入 origin:'subagent' + delegationDepth 预算,头部发现靠这对标记认领。
ev-child-meta决策
jsonl 恢复会给每个头部补上 delegationDepth:0,所以门槛是预算 >0;Session.fork 的普通对话分支没有预算,不上板、仍可经 /resume 恢复。
ev-value-gateev-fork-resume存储
每行:转圈+名字、重试 ↻N≤M、当前上下文占用 X/Y(不是累计花费!)、轮次 round N/M、耗时,以及策略注入时的 ⚡ 标记。
ev-viewerev-maxrounds参与者
80% 宽选择器(运行中优先,再列最近结束的 5 个);Enter 进入约每秒刷新 3 次的实况转录,可发 steer:运行中→下一步边界注入,空闲→排队为下一回合,已结束→拒绝。
ev-viewerev-steer决策
超 maxAgents 大致拒新(并发突发可短暂超出,有兜底清理);到 maxRounds 只注入一条可见的 ⚡ 收尾指令,永不强制停止——是否收工取决于模型听话。
ev-maxagentsev-maxrounds默认显示本节依据;播放时会聚焦当前步骤对应的来源。
核心依据ARCHITECTURE.md:272-274 spawn 与 fork 均写 origin:'subagent' + delegationDepth 预算。
支持结论childSessionMeta 打标
/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.md核心依据持久化恢复会补 materialise delegationDepth:0,故门槛须为预算 >0(ARCHITECTURE.md §Bridge 及对应实现)。
支持结论按值把关,不看字段有无
/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.md核心依据src/sessions.ts:609-611 isResumableSessionHeader 过滤恰排除委派子会话。
支持结论按值把关,不看字段有无
/Users/fliu56/github/dsh-tui-pi/src/sessions.ts核心依据src/subagent-viewer.ts:57-59,850:80% 宽、5 个已落定上限、约 3 次/秒刷新。
支持结论编辑器下方状态行Ctrl+G 查看器
/Users/fliu56/github/dsh-tui-pi/src/subagent-viewer.ts核心依据test/subagent-viewer.test.mjs:268-275:running→步骤边界、idle→排队、ended→拒绝。
支持结论Ctrl+G 查看器
/Users/fliu56/github/dsh-tui-pi/test/subagent-viewer.test.mjs核心依据src/subagent-policy.ts:250-261 并发突发可短暂超出,backstop 于 subagent/start 清理。
支持结论两顶帽子:maxAgents=4 · maxRounds=75
/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.ts核心依据src/subagent-policy.ts:286-324 到顶注入一条 wrap-up,运行中下一步边界送达、空闲作下一回合。
支持结论编辑器下方状态行两顶帽子:maxAgents=4 · maxRounds=75
/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.ts页脚七段读 O(1) 计数器实时反映用量;DCP 插件按确定性规则在空闲边界修剪上下文,让数字回落。
存储
七个数据段读持续维护的计数器,渲染从不去扫会话日志——读多长会话都一样快。时钟独立于数据段单独走秒。
ev-footer-statsev-clock-seganalogy-odometer处理
=最近一次请求的计费输入+输出,加上其后消息的 CJK 估算,除以上下文窗口;不是累计花费,封顶 100%。
ev-ctx-priceev-pct-capinference-cjk存储
全会话累计:总缓存读 ÷ 总计费输入流量;切换 provider/model 不归零、不重置。
ev-ch-cumulativeev-ch-test处理
零 LLM 调用的压缩插件,需手动挂载:dsh plugin --profile tui add @aiwayds/dsh-dcp。按 roundInterval 数 assistant/message 事件或按 thresholdRatio 压力触发,在空闲边界剪上下文。
ev-dcp-zeroev-dcp-mountev-dcp-trigger事件
子代理日志中每次压缩追加一行 notice,Ctrl+G 转录用 🧹 标记渲染,选择器行带 🧹 N× 计数。
ev-dcp-notice默认显示本节依据;播放时会聚焦当前步骤对应的来源。
核心依据AGENTS.md 铁律 1 与 src/session.ts 统计维护:O(1) 读计数器,渲染不重扫日志。
支持结论页脚 O(1) 计数器
/Users/fliu56/github/dsh-tui-pi/src/session.ts核心依据src/footer.ts:198-239 时钟单独走秒;七个数据段之外独立渲染。
支持结论页脚 O(1) 计数器
/Users/fliu56/github/dsh-tui-pi/src/footer.ts核心依据src/footer.ts:221 对百分比做 cap 100 处理,窗口是硬天花板。
支持结论Context 百分比怎么算
/Users/fliu56/github/dsh-tui-pi/src/footer.ts核心依据README.md:121,162:最近请求计费输入输出 + 后续消息 CJK 估算 ÷ 窗口,非累计花费。
支持结论Context 百分比怎么算
/Users/fliu56/github/dsh-tui-pi/README.md核心依据src/session.ts:821-830 缓存命中率为会话级累计计算,provider/model 变更不重置。
支持结论CHxx% 缓存命中率
/Users/fliu56/github/dsh-tui-pi/src/session.ts核心依据test/session-ch-cache.test.mjs:107 固化了换路由不归零的行为。
支持结论CHxx% 缓存命中率
/Users/fliu56/github/dsh-tui-pi/test/session-ch-cache.test.mjs核心依据dsh-dcp README:3,61 明示 zero-LLM、规则驱动修剪。
支持结论DCP 确定性修剪
/Users/fliu56/github/dsh-dcp/README.md核心依据dsh-tui-pi README.md:154-160:列为依赖但不自动挂载,需 dsh plugin --profile tui add。
支持结论DCP 确定性修剪
/Users/fliu56/github/dsh-tui-pi/README.md核心依据dsh-dcp README:93,103:轮次计数触发 + 独立的压力比触发。
支持结论DCP 确定性修剪
/Users/fliu56/github/dsh-dcp/README.md核心依据dsh-tui-pi README.md:164:子日志 notice 行、Ctrl+G 🧹 标记与 N× 计数。
支持结论🧹 可见痕迹
/Users/fliu56/github/dsh-tui-pi/README.md核心依据计数器像里程表逐格累加、即读即得;但 Context 百分比可在压缩后回落,这点与里程表相反。
支持结论页脚 O(1) 计数器
这是教学类比或跨来源归纳,没有外部定位链接。
查看完整证据记录核心依据『宽度感知估算』是对源码行为的通俗概括,具体算法细节未在本故事展开。
支持结论Context 百分比怎么算
/Users/fliu56/github/dsh-tui-pi/src/session.tsask_user_question 把工具调用挂起为输入框上方的停靠表单;你的回答作为普通工具结果送回,回合继续。
事件
模型回合中途调用提问工具,工具调用保持 pending;TUI 接管应答侧——面板钉在 Todos 槽位,不开浮窗,打开期间独占键盘。
ev-ask-dock决策
[1] · 2✓ · 3:方括号是焦点、✓ 是已答;单选答完自动跳下一题,多选只切换不自动前进;≥2 题先进确认复查页。
ev-ask-tabs决策
200ms 内两次 Esc 返回拒答信封(模型读到『未作答』的正常回复);按住不放的自动重复会被过滤。
ev-ask-esc事件
提交的回答作为普通 tool result 交还模型,挂起的调用落定,回合继续推进。
ev-ask-dock事件
拒绝同样以正常回复落定:模型得知没有答案,可以自行调整计划而不是报错中断。
ev-ask-esc参与者
回合结束时聊天记录里只有干净的对话与通知——中间机器痕迹早被面板自我擦除了。
ev-panel-oneanalogy-dialog默认显示本节依据;播放时会聚焦当前步骤对应的来源。
核心依据dsh-tui-pi README.md:204:Todos 槽位停靠、pending 工具调用、答案作为普通工具结果返回。
支持结论ask_user_question 调用答案回流为工具结果
/Users/fliu56/github/dsh-tui-pi/README.md核心依据test/ask-user.test.mjs:824:[1]·2✓·3 标签、单选自动前进、多选不前进。
支持结论一题一屏 + 标签条
/Users/fliu56/github/dsh-tui-pi/test/ask-user.test.mjs核心依据src/ask-user.ts:62-68,113 DOUBLE_ESC_WINDOW_MS=200。
支持结论双 Esc = 拒答拒答信封回落
/Users/fliu56/github/dsh-tui-pi/src/ask-user.ts核心依据dsh-tui-pi README.md 提问节:系统提示引导 1–3 题、每题 2–4 选项。
/Users/fliu56/github/dsh-tui-pi/README.md核心依据提问面板形似模态框,但只有那个工具调用在等待,面板还能 Ctrl+T 折叠;且何时弹窗由模型决定。
支持结论最终回答渲染进记录
这是教学类比或跨来源归纳,没有外部定位链接。
查看完整证据记录核心依据src/activity.ts:397-403 单 ThinkPanel/ToolPanel 原位更新,空面板零行隐藏。
支持结论最终回答渲染进记录
/Users/fliu56/github/dsh-tui-pi/src/activity.tssrc/footer.ts:198-239 时钟单独走秒;七个数据段之外独立渲染。
/Users/fliu56/github/dsh-tui-pi/src/footer.tssrc/footer.ts:221 对百分比做 cap 100 处理,窗口是硬天花板。
/Users/fliu56/github/dsh-tui-pi/src/footer.tsREADME.md:121,162:最近请求计费输入输出 + 后续消息 CJK 估算 ÷ 窗口,非累计花费。
/Users/fliu56/github/dsh-tui-pi/README.mdsrc/session.ts:821-830 缓存命中率为会话级累计计算,provider/model 变更不重置。
/Users/fliu56/github/dsh-tui-pi/src/session.tstest/session-ch-cache.test.mjs:107 固化了换路由不归零的行为。
/Users/fliu56/github/dsh-tui-pi/test/session-ch-cache.test.mjssrc/activity.ts:397-403 单 ThinkPanel/ToolPanel 原位更新,空面板零行隐藏。
/Users/fliu56/github/dsh-tui-pi/src/activity.tssrc/activity.ts:358 盒子总高含标题行。
/Users/fliu56/github/dsh-tui-pi/src/activity.tssrc/activity.ts:63 与 :69 分别定义两类尾部行数上限。
/Users/fliu56/github/dsh-tui-pi/src/activity.tssrc/subagent-policy.ts:41 委派类工具被排除在工具块渲染外。
/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.tsARCHITECTURE.md:272-274 spawn 与 fork 均写 origin:'subagent' + delegationDepth 预算。
/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.md持久化恢复会补 materialise delegationDepth:0,故门槛须为预算 >0(ARCHITECTURE.md §Bridge 及对应实现)。
/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.mdsrc/sessions.ts:609-611 isResumableSessionHeader 过滤恰排除委派子会话。
/Users/fliu56/github/dsh-tui-pi/src/sessions.tssrc/subagent-viewer.ts:57-59,850:80% 宽、5 个已落定上限、约 3 次/秒刷新。
/Users/fliu56/github/dsh-tui-pi/src/subagent-viewer.tstest/subagent-viewer.test.mjs:268-275:running→步骤边界、idle→排队、ended→拒绝。
/Users/fliu56/github/dsh-tui-pi/test/subagent-viewer.test.mjssrc/subagent-policy.ts:250-261 并发突发可短暂超出,backstop 于 subagent/start 清理。
/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.tssrc/subagent-policy.ts:286-324 到顶注入一条 wrap-up,运行中下一步边界送达、空闲作下一回合。
/Users/fliu56/github/dsh-tui-pi/src/subagent-policy.tsdsh-dcp README:3,61 明示 zero-LLM、规则驱动修剪。
/Users/fliu56/github/dsh-dcp/README.mddsh-tui-pi README.md:154-160:列为依赖但不自动挂载,需 dsh plugin --profile tui add。
/Users/fliu56/github/dsh-tui-pi/README.mddsh-dcp README:93,103:轮次计数触发 + 独立的压力比触发。
/Users/fliu56/github/dsh-dcp/README.mddsh-tui-pi README.md:164:子日志 notice 行、Ctrl+G 🧹 标记与 N× 计数。
/Users/fliu56/github/dsh-tui-pi/README.mdsrc/session.ts:40-46 及 commit 44cd112:非逐请求热加载,编辑对下一会话生效。
/Users/fliu56/github/dsh-tui-pi/src/session.tssrc/append-system.ts:99-114:缺失时自模板播种;标记块幂等维护。
/Users/fliu56/github/dsh-tui-pi/src/append-system.tssrc/session.ts:34-46 installAppendSystem 注册于主 agent scoped context,子代理不合并。
/Users/fliu56/github/dsh-tui-pi/src/session.tsARCHITECTURE.md:245-246 启动时迁移剥离,避免重复投递。
/Users/fliu56/github/dsh-tui-pi/ARCHITECTURE.mddsh-tui-pi README.md:204:Todos 槽位停靠、pending 工具调用、答案作为普通工具结果返回。
/Users/fliu56/github/dsh-tui-pi/README.mdtest/ask-user.test.mjs:824:[1]·2✓·3 标签、单选自动前进、多选不前进。
/Users/fliu56/github/dsh-tui-pi/test/ask-user.test.mjssrc/ask-user.ts:62-68,113 DOUBLE_ESC_WINDOW_MS=200。
/Users/fliu56/github/dsh-tui-pi/src/ask-user.tsdsh-tui-pi README.md 提问节:系统提示引导 1–3 题、每题 2–4 选项。
/Users/fliu56/github/dsh-tui-pi/README.md『宽度感知估算』是对源码行为的通俗概括,具体算法细节未在本故事展开。
/Users/fliu56/github/dsh-tui-pi/src/session.ts仅建立直觉:子代理≈帮厨、页脚≈黑板记账。不代表实现结构。
计数器像里程表逐格累加、即读即得;但 Context 百分比可在压缩后回落,这点与里程表相反。
提问面板形似模态框,但只有那个工具调用在等待,面板还能 Ctrl+T 折叠;且何时弹窗由模型决定。
都是『当前占用』口径:最近一次请求的计费输入输出加后续消息估算,除以各自窗口。两者都不是累计花费——累计数只增不减,显示在其他地方。
不会。TUI 只注入一条可见的 ⚡ 收尾指令(运行中的孩子在下一个步骤边界收到,空闲的孩子作为下一回合收到),是否停止取决于模型服从;这也是为什么不能把孩子当可杀死进程。
文件在主代理会话创建时读取一次并缓存,编辑只对之后新建的会话生效(/new 或重启)。而且它只作用于主 agent,已派出的子代理既看不到也不合并它。