日报:/btw 重构、/insights、/refresh all
/refresh all
新增 /refresh all 命令——硬重启所有非人类 agent。与 /sleep all、/suspend all 同一模式。从已有的 hardRefresh() 中抽取出 hardRefreshDir() 函数。
Doctor 提示改为优先推荐 /refresh 而非 /cpr(suggest_cpr → suggest_revive)。更新了问候语(en/zh/wen)、教程及全部 6 个 i18n 文件。
/btw 问询机制重构
旧版 /btw 很脆弱:写一个 .inquiry 信号文件,靠 agent 心跳检测,无反馈,无结果显示。修复如下:
- IsAlive 检查 — agent 已死则拒绝,提示”请先 /refresh”
.inquiry→.inquiry.taken握手 — 内核接收时重命名,LLM 调用完成后删除。TUI 在.inquiry.taken存在时状态栏显示”思考中…”。- 结果展示 — TUI 监听
soul_inquiry.jsonl,过滤source: "human",以 markdown 渲染在统一的框中(暗色边栏、金色标签、esc 关闭)。 - Source 字段 —
soul_inquiry.jsonl条目标记为human/insight/agent。迁移 m004 为旧条目补充source: "agent"。 - WriteInquiry 防护 —
.inquiry或.inquiry.taken已存在则拒绝写入,防止重复问询。 - 内核线程化 —
_run_inquiry()在守护线程中运行,心跳循环不再被 LLM 调用阻塞(此前会导致 agent 在问询期间显示为”已挂起”)。 - 无工具提示 —
soul_inquiry()系统提示明确声明”无工具,仅纯文本回复”,防止 MiniMax 在回复中生成工具调用 XML。
.inquiry 文件格式
第一行为来源,其余为问题:
human
你还能干啥?
/insights 命令
/insights— 手动一次性触发。写入source: "insight"的.inquiry文件和预设洞察问题。- 自动洞察 — 在
/settings中切换(默认关闭)。每次空闲周期触发一次(active→idle 转换后延迟 5 秒)。.insight.done哨兵文件防止重复触发,直到人类发送新消息。 - 渲染 — 与
/btw相同的框样式,但标签为★ insight而非/btw ›。 - 隐藏 — 按 Esc 从默认视图中隐藏洞察。在 ctrl+o 详细模式中重新出现。
设置描述
每个设置字段选中时显示描述行(en/zh/wen)。“洞察”改名为”自动洞察”。
内核(lingtai-kernel)
- 线程安全的问询处理
_persist_soul_entry接受source参数.inquiry文件格式含来源行- soul_inquiry 的无工具系统提示
- 版本升至 0.5.12,已发布到 PyPI
发版
- TUI: v0.4.32
- 内核: 0.5.12 (PyPI)
关键设计决策
-
问询保留在 agent 进程内 — 曾考虑
lingtai inquiry作为独立 CLI 子进程,但 soul_inquiry 需要活跃 agent 的会话克隆。无法构造第二个 agent 实例(锁机制阻止)。保留在心跳线程中是正确的,只需线程化以不阻塞心跳写入。 -
.inquiry.taken握手 — 提供三态反馈(已发送 → 已接收 → 完成)和崩溃安全。内核原子重命名,线程中处理,完成后删除。无重试逻辑——崩溃则由人类重新触发。 -
基于文件的防护优于内存标志 —
WriteInquiry检查文件是否存在,.insight.done哨兵存于磁盘。能跨 TUI 重启存活,避免了内存状态追踪导致的洞察级联 bug。