@clawos-dev/clawd 0.2.167-beta.343.8f9056e → 0.2.168-beta.344.b5025a9
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 +61 -8
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -12369,11 +12369,15 @@ var init_claude = __esm({
|
|
|
12369
12369
|
label: "Effort",
|
|
12370
12370
|
description: "Reasoning effort level",
|
|
12371
12371
|
scope: "tool-specific",
|
|
12372
|
+
// CC `--effort` 值域(claude --help, 2.1.187):low / medium / high / xhigh / max。
|
|
12373
|
+
// '' = 不传 --effort,用 CLI 默认。
|
|
12372
12374
|
options: [
|
|
12373
12375
|
{ value: "", label: "Default" },
|
|
12374
12376
|
{ value: "low", label: "Low" },
|
|
12375
12377
|
{ value: "medium", label: "Medium" },
|
|
12376
|
-
{ value: "high", label: "High" }
|
|
12378
|
+
{ value: "high", label: "High" },
|
|
12379
|
+
{ value: "xhigh", label: "Extra high" },
|
|
12380
|
+
{ value: "max", label: "Max" }
|
|
12377
12381
|
],
|
|
12378
12382
|
default: ""
|
|
12379
12383
|
}
|
|
@@ -34810,7 +34814,21 @@ var SessionManager = class {
|
|
|
34810
34814
|
}
|
|
34811
34815
|
}
|
|
34812
34816
|
this.lastObserverEventAt.set(sessionId, (this.deps.now ?? Date.now)());
|
|
34813
|
-
|
|
34817
|
+
let feedEvents = outEvents;
|
|
34818
|
+
if (outEvents.some((e) => e.kind === "turn_end")) {
|
|
34819
|
+
const ev = this.peekTurnEvidence(runner);
|
|
34820
|
+
if (!ev.turnHasContent) {
|
|
34821
|
+
feedEvents = outEvents.filter((e) => e.kind !== "turn_end");
|
|
34822
|
+
this.deps.logger?.info("[TE-PROBE] drop spurious observer turn_end", {
|
|
34823
|
+
sessionId,
|
|
34824
|
+
src: "observer",
|
|
34825
|
+
...ev,
|
|
34826
|
+
batchKinds: outEvents.map((e) => e.kind)
|
|
34827
|
+
});
|
|
34828
|
+
}
|
|
34829
|
+
}
|
|
34830
|
+
if (feedEvents.length === 0) return;
|
|
34831
|
+
runner.feedObserverEvents(feedEvents);
|
|
34814
34832
|
}
|
|
34815
34833
|
// AskUserQuestion 表单回写(plan: clawd-ask-user-question):UI 答完所有 question 后调用。
|
|
34816
34834
|
// - session 不存在 / 无 runner → noop 幂等返回 ok(first-decider-wins)
|
|
@@ -35071,20 +35089,55 @@ var SessionManager = class {
|
|
|
35071
35089
|
runner.input({ kind: "ready-detected" });
|
|
35072
35090
|
}
|
|
35073
35091
|
/**
|
|
35074
|
-
* ClaudeTuiAdapter onTurnIdle callback
|
|
35075
|
-
*
|
|
35076
|
-
*
|
|
35077
|
-
*
|
|
35078
|
-
*
|
|
35079
|
-
*
|
|
35092
|
+
* ClaudeTuiAdapter onTurnIdle callback:屏幕内容静止时**复发**本轮已出现过的权威 turn_end。
|
|
35093
|
+
* 本意:turn_duration 写盘早于尾段正文 → observer 把尾随 text 推进 buffer 盖掉 lastEventKind →
|
|
35094
|
+
* spinner 不熄;屏幕静止时再补一条 turn_end 排到尾随 text 之后。
|
|
35095
|
+
*
|
|
35096
|
+
* Fix A(修 bug1 "UI 还在变却显示结束" / bug2 "发消息后无 spinner"):补偿**只复发不 originate**——
|
|
35097
|
+
* 仅当本轮已出现过 turn_end(turnEndSeenThisTurn,即真有过尾随 text 覆盖场景)才补。turnEndSeenThisTurn
|
|
35098
|
+
* ===false 说明本轮 CC 从未结束过(仍在工作 / 刚发消息没产出 / 漏检弹框等用户),屏幕静止 ≠ turn 结束,
|
|
35099
|
+
* 凭空 inject turn_end 会误灭 spinner——故跳过,让真正的 turn_duration 来时再正常收。
|
|
35100
|
+
* 仅 tui 模式;runner 缺失 noop。turn_end 无 uuid 不参与 dedup。
|
|
35080
35101
|
*/
|
|
35081
35102
|
dispatchTurnIdle(toolSessionId) {
|
|
35082
35103
|
if (this.deps.mode !== "tui") return;
|
|
35083
35104
|
const sid = this.sessionIdByToolSid(toolSessionId);
|
|
35084
35105
|
const runner = sid ? this.runners.get(sid) : void 0;
|
|
35085
35106
|
if (!runner) return;
|
|
35107
|
+
const ev = this.peekTurnEvidence(runner);
|
|
35108
|
+
const willInject = ev.turnEndSeenThisTurn;
|
|
35109
|
+
this.deps.logger?.info("[TE-PROBE] screen-idle compensation", {
|
|
35110
|
+
sessionId: sid,
|
|
35111
|
+
src: "screen-idle",
|
|
35112
|
+
willInject,
|
|
35113
|
+
...ev
|
|
35114
|
+
});
|
|
35115
|
+
if (!willInject) return;
|
|
35086
35116
|
runner.input({ kind: "inject-events", events: [{ kind: "turn_end" }] });
|
|
35087
35117
|
}
|
|
35118
|
+
/**
|
|
35119
|
+
* 读 runner 当前 turn 态快照,供两个 turn_end 注入源(屏幕静止补偿 / observer turn_duration)
|
|
35120
|
+
* 判断误发 + 打 [TE-PROBE] 日志。
|
|
35121
|
+
* turnEndSeenThisTurn:从 buffer 末尾回扫到最近 user_text 期间是否已出现过 turn_end
|
|
35122
|
+
* (已出现=本轮真结束过、合法尾随;未出现=本轮还没结束过)→ Fix A 复发闸。
|
|
35123
|
+
* turnHasContent:末条是否 assistant 产出(非 user_text/turn_end/空)→ Fix B 空 turn 守卫闸。
|
|
35124
|
+
*/
|
|
35125
|
+
peekTurnEvidence(runner) {
|
|
35126
|
+
const st = runner.getState();
|
|
35127
|
+
const buf = st.buffer;
|
|
35128
|
+
const lastEventKindBefore = buf.length > 0 ? buf[buf.length - 1].event.kind : null;
|
|
35129
|
+
let turnEndSeenThisTurn = false;
|
|
35130
|
+
for (let i = buf.length - 1; i >= 0; i--) {
|
|
35131
|
+
const k2 = buf[i].event.kind;
|
|
35132
|
+
if (k2 === "user_text") break;
|
|
35133
|
+
if (k2 === "turn_end") {
|
|
35134
|
+
turnEndSeenThisTurn = true;
|
|
35135
|
+
break;
|
|
35136
|
+
}
|
|
35137
|
+
}
|
|
35138
|
+
const turnHasContent = lastEventKindBefore !== null && lastEventKindBefore !== "user_text" && lastEventKindBefore !== "turn_end";
|
|
35139
|
+
return { turnOpenBefore: st.turnOpen, lastEventKindBefore, turnEndSeenThisTurn, turnHasContent };
|
|
35140
|
+
}
|
|
35088
35141
|
/**
|
|
35089
35142
|
* observer 还需静止多久(ms)才满 idleMs,0 = 已满。observeScreenIdle 复合条件闸:屏幕静止后
|
|
35090
35143
|
* 精确等这段剩余再补 turn_end —— turn_duration 写盘早于尾段正文,observer 把尾随 text poll 落盘
|
package/package.json
CHANGED