@clawos-dev/clawd 0.2.166 → 0.2.167-beta.343.8f9056e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +10 -59
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -32153,11 +32153,11 @@ tool \u4F1A\u963B\u585E\u6302\u8D77\u7B49\u5BF9\u65B9\u4EBA\u683C\u5E72\u5B8C\uF
|
|
|
32153
32153
|
|
|
32154
32154
|
### \u8DE8\u8BBE\u5907\u59D4\u6D3E\uFF08remote persona\uFF09
|
|
32155
32155
|
|
|
32156
|
-
\u5F53 @ token \u5F62\u5982 \`@persona/<id
|
|
32156
|
+
\u5F53 @ token \u5F62\u5982 \`@persona/<id>@<deviceId>\`\uFF08\u7B2C\u4E8C\u6BB5\u662F\u8054\u7CFB\u4EBA**\u8BBE\u5907\u7684 deviceId**\uFF0CUI \u9009\u8054\u7CFB\u4EBA\u65F6\u5DF2\u89E3\u6790\u597D\u586B\u5165\uFF09\u65F6\uFF0C\u662F\u628A\u4EFB\u52A1\u59D4\u6D3E\u7ED9\u90A3\u53F0\u8BBE\u5907\u4E0A\u7684 persona\u3002\u9664 targetPersona / prompt \u5916\u518D\u5E26\u4E00\u4E2A\u53C2\u6570\uFF1A
|
|
32157
32157
|
|
|
32158
|
-
- \`targetDeviceId =
|
|
32158
|
+
- \`targetDeviceId = <token \u7B2C\u4E8C\u6BB5\u7684 deviceId\uFF0C\u539F\u6837\u586B>\`
|
|
32159
32159
|
|
|
32160
|
-
|
|
32160
|
+
deviceId \u76F4\u63A5\u53D6\u81EA token\uFF0C\u4E0D\u8981\u6539\u5199\u6216\u731C\u6D4B\u3002\u5BF9\u65B9\u4E0D\u53EF\u8FBE / \u76EE\u6807 persona \u672A\u516C\u5F00\u4F1A\u8FD4\u56DE\u660E\u786E\u9519\u8BEF\uFF0C\u7167\u5E38\u628A\u9519\u8BEF\u8F6C\u8FF0\u7ED9\u7528\u6237\u5373\u53EF\u3002\u5176\u4F59\u884C\u4E3A\uFF08\u963B\u585E\u7B49\u7ED3\u679C\u3001\u5931\u8D25\u4E0D\u91CD\u8BD5\uFF09\u4E0E\u672C\u5730\u59D4\u6D3E\u4E00\u81F4\u3002
|
|
32161
32161
|
|
|
32162
32162
|
## \u88AB dispatch \u63A5\u5230\u4EFB\u52A1
|
|
32163
32163
|
|
|
@@ -34810,21 +34810,7 @@ var SessionManager = class {
|
|
|
34810
34810
|
}
|
|
34811
34811
|
}
|
|
34812
34812
|
this.lastObserverEventAt.set(sessionId, (this.deps.now ?? Date.now)());
|
|
34813
|
-
|
|
34814
|
-
if (outEvents.some((e) => e.kind === "turn_end")) {
|
|
34815
|
-
const ev = this.peekTurnEvidence(runner);
|
|
34816
|
-
if (!ev.turnHasContent) {
|
|
34817
|
-
feedEvents = outEvents.filter((e) => e.kind !== "turn_end");
|
|
34818
|
-
this.deps.logger?.info("[TE-PROBE] drop spurious observer turn_end", {
|
|
34819
|
-
sessionId,
|
|
34820
|
-
src: "observer",
|
|
34821
|
-
...ev,
|
|
34822
|
-
batchKinds: outEvents.map((e) => e.kind)
|
|
34823
|
-
});
|
|
34824
|
-
}
|
|
34825
|
-
}
|
|
34826
|
-
if (feedEvents.length === 0) return;
|
|
34827
|
-
runner.feedObserverEvents(feedEvents);
|
|
34813
|
+
runner.feedObserverEvents(outEvents);
|
|
34828
34814
|
}
|
|
34829
34815
|
// AskUserQuestion 表单回写(plan: clawd-ask-user-question):UI 答完所有 question 后调用。
|
|
34830
34816
|
// - session 不存在 / 无 runner → noop 幂等返回 ok(first-decider-wins)
|
|
@@ -35085,55 +35071,20 @@ var SessionManager = class {
|
|
|
35085
35071
|
runner.input({ kind: "ready-detected" });
|
|
35086
35072
|
}
|
|
35087
35073
|
/**
|
|
35088
|
-
* ClaudeTuiAdapter onTurnIdle callback
|
|
35089
|
-
*
|
|
35090
|
-
*
|
|
35091
|
-
*
|
|
35092
|
-
*
|
|
35093
|
-
*
|
|
35094
|
-
* ===false 说明本轮 CC 从未结束过(仍在工作 / 刚发消息没产出 / 漏检弹框等用户),屏幕静止 ≠ turn 结束,
|
|
35095
|
-
* 凭空 inject turn_end 会误灭 spinner——故跳过,让真正的 turn_duration 来时再正常收。
|
|
35096
|
-
* 仅 tui 模式;runner 缺失 noop。turn_end 无 uuid 不参与 dedup。
|
|
35074
|
+
* ClaudeTuiAdapter onTurnIdle callback:屏幕内容静止(turn 结束)时 inject 一个权威 turn_end。
|
|
35075
|
+
* 修 turn_duration 写盘早于尾段正文 → observer 尾随 text 覆盖 lastEventKind → spinner 不熄。
|
|
35076
|
+
* 静止触发(~1.2s)远晚于 observer poll(200ms),故此 turn_end 必排在尾随 text 之后 = buffer 最后一个。
|
|
35077
|
+
* 仅 tui 模式;runner 缺失 noop。turn_end 无 uuid 不参与 dedup(放行)。
|
|
35078
|
+
* 注:重复 inject(屏幕静止边缘多 fire)不产生错误状态——turnOpen 已 false、idle-kill 有
|
|
35079
|
+
* running-idle guard——但仍 append buffer + 刷 updatedAt + 广播 session:info(非真 no-op,churn 可接受)。
|
|
35097
35080
|
*/
|
|
35098
35081
|
dispatchTurnIdle(toolSessionId) {
|
|
35099
35082
|
if (this.deps.mode !== "tui") return;
|
|
35100
35083
|
const sid = this.sessionIdByToolSid(toolSessionId);
|
|
35101
35084
|
const runner = sid ? this.runners.get(sid) : void 0;
|
|
35102
35085
|
if (!runner) return;
|
|
35103
|
-
const ev = this.peekTurnEvidence(runner);
|
|
35104
|
-
const willInject = ev.turnEndSeenThisTurn;
|
|
35105
|
-
this.deps.logger?.info("[TE-PROBE] screen-idle compensation", {
|
|
35106
|
-
sessionId: sid,
|
|
35107
|
-
src: "screen-idle",
|
|
35108
|
-
willInject,
|
|
35109
|
-
...ev
|
|
35110
|
-
});
|
|
35111
|
-
if (!willInject) return;
|
|
35112
35086
|
runner.input({ kind: "inject-events", events: [{ kind: "turn_end" }] });
|
|
35113
35087
|
}
|
|
35114
|
-
/**
|
|
35115
|
-
* 读 runner 当前 turn 态快照,供两个 turn_end 注入源(屏幕静止补偿 / observer turn_duration)
|
|
35116
|
-
* 判断误发 + 打 [TE-PROBE] 日志。
|
|
35117
|
-
* turnEndSeenThisTurn:从 buffer 末尾回扫到最近 user_text 期间是否已出现过 turn_end
|
|
35118
|
-
* (已出现=本轮真结束过、合法尾随;未出现=本轮还没结束过)→ Fix A 复发闸。
|
|
35119
|
-
* turnHasContent:末条是否 assistant 产出(非 user_text/turn_end/空)→ Fix B 空 turn 守卫闸。
|
|
35120
|
-
*/
|
|
35121
|
-
peekTurnEvidence(runner) {
|
|
35122
|
-
const st = runner.getState();
|
|
35123
|
-
const buf = st.buffer;
|
|
35124
|
-
const lastEventKindBefore = buf.length > 0 ? buf[buf.length - 1].event.kind : null;
|
|
35125
|
-
let turnEndSeenThisTurn = false;
|
|
35126
|
-
for (let i = buf.length - 1; i >= 0; i--) {
|
|
35127
|
-
const k2 = buf[i].event.kind;
|
|
35128
|
-
if (k2 === "user_text") break;
|
|
35129
|
-
if (k2 === "turn_end") {
|
|
35130
|
-
turnEndSeenThisTurn = true;
|
|
35131
|
-
break;
|
|
35132
|
-
}
|
|
35133
|
-
}
|
|
35134
|
-
const turnHasContent = lastEventKindBefore !== null && lastEventKindBefore !== "user_text" && lastEventKindBefore !== "turn_end";
|
|
35135
|
-
return { turnOpenBefore: st.turnOpen, lastEventKindBefore, turnEndSeenThisTurn, turnHasContent };
|
|
35136
|
-
}
|
|
35137
35088
|
/**
|
|
35138
35089
|
* observer 还需静止多久(ms)才满 idleMs,0 = 已满。observeScreenIdle 复合条件闸:屏幕静止后
|
|
35139
35090
|
* 精确等这段剩余再补 turn_end —— turn_duration 写盘早于尾段正文,observer 把尾随 text poll 落盘
|
package/package.json
CHANGED