Archived
fix(desk): 保存那一拍对话区也别出声 —— 「在办事」不亮、say 落工作日志不上对话区
用户:「每次保存的时候右边也会出现 ai 推进中,然后会说一句话,能不能把这个也取消掉」 两处,同一个根:件上按保存会 wake 这一单(「保存即铺格」),runtime 被拨成 running。 ① 右边那条办事条:`TaskChat` 的 `working` 只看 runtime === 'running'。它自己的注释 早写着「等人、等外部、已收尾都不算 —— 那时亮『工作中』就是撒谎:环没在转,是在等」—— save-wake 恰恰把「在等人」的单拨成了 running,把这条原则架空了。加 `!awaitingHuman(...)` 是**恢复**那句注释说的语义:有未办结工单 / 未回的卡就是在等人,哪怕 runtime 写着 running。 判断与工作区那一侧同一个函数。 ② 那句话:quiet 拍只跑 project 与 say,于是人按几次保存,同一句交代往对话区说几遍。 对话区的纪律是**一轮一句,不是一拍一句**(2026-08-01):只有交出控制权那一拍的交代 摆到人面前;而 quiet 拍压根没交出控制权(人正对着卡填),算不上新一轮。 改:quiet 拍的 say 标 `internal`。压下去不是丢掉 —— `internal` 是两个投影共用的一个旗 (终审 I5/F2):`chat-projection` 据此挡住对话区,`task-log.machinery()` 对 `detail.auto` 开了例外,这一笔在工作日志里照旧看得见(话有插值时值的变化也查得到)。 测:quiet 的 say 标 internal 且工作日志仍在(3 条变异各红一条 —— 退回原样 / 反过来连 非 quiet 也标 / 连 auto 一起去掉;其中「反过来标」红的是既有那条「非 quiet 不标」, 两条互为护栏)。后一半(标了 internal 就进不了对话区)由 chat-projection 既有测钉着, projectChat 没出模块边界,两半各钉在自己模块里、注释互指。 pnpm gates 退出码 0(2494 测)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -14,6 +14,7 @@ import { call } from '@web-shared/typed-fetch.ts';
|
||||
import { Ico } from '@web-shared/Ico.tsx';
|
||||
import { EmptyState } from '@web-shared/desk/module-kit.tsx';
|
||||
import { ChatStream, WorkingStrip } from './chat-bubbles.tsx';
|
||||
import { awaitingHuman, pendingCardsOf } from './pending-cards.ts';
|
||||
import { Btn } from '@web-shared/Btn.tsx';
|
||||
|
||||
export function TaskChat({
|
||||
@@ -43,8 +44,20 @@ export function TaskChat({
|
||||
* AI 正在办这单 = Loop 在自己转(runtime running)。
|
||||
* 等人(awaiting-human)、等外部(awaiting-event)、已收尾都不算 ——
|
||||
* 那时亮「工作中」就是撒谎:环没在转,是在等。
|
||||
*
|
||||
* **`&& !awaitingHuman(...)` 是 2026-08-31 补的**(用户:「每次保存的时候右边也会
|
||||
* 出现 ai 推进中」):件上按保存会 `wake` 这一单(「保存即铺格」,不叫醒参数格永远
|
||||
* 不出现)—— runtime 就此被拨成 `running`,而人其实正对着卡在填。上面这三句话说的
|
||||
* 原则没变,变的是「等人」这件事从此不只看 runtime:**有未办结的工单 / 未回的卡,
|
||||
* 就是在等人**,哪怕 runtime 写着 running。工作区那一侧同一个判断、同一个函数。
|
||||
*/
|
||||
const working = detail.card.terminal === undefined && detail.card.runtime === 'running';
|
||||
const working =
|
||||
detail.card.terminal === undefined &&
|
||||
detail.card.runtime === 'running' &&
|
||||
!awaitingHuman({
|
||||
openOrders: detail.workOrders.filter((o) => o.done === undefined).length,
|
||||
cards: pendingCardsOf(detail.chat),
|
||||
});
|
||||
|
||||
/** 回传后一律重取任务投影 —— 卡与工单的状态由服务端说,前端不自行推演 */
|
||||
const refresh = () => {
|
||||
|
||||
Reference in New Issue
Block a user