@clawos-dev/clawd 0.2.75 → 0.2.76
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 +18 -3
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -22954,7 +22954,11 @@ var SessionManager = class {
|
|
|
22954
22954
|
await runner.waitUntilStopped();
|
|
22955
22955
|
return { response: { ok: true }, broadcast };
|
|
22956
22956
|
}
|
|
22957
|
-
//
|
|
22957
|
+
// 温柔中断当前轮次:不杀进程
|
|
22958
|
+
// - SDK 模式:发 CC IPC `control_request.subtype=interrupt`(走 stdin stream-json 通道)
|
|
22959
|
+
// - TUI 模式:proc.stdin 是 PtyChildProcess→pty.write,CC TUI 把任何 stdin 当键盘输入;
|
|
22960
|
+
// control_request JSON 会被 ink 当文本贴进输入框(用户报"输入框多了一段 JSON 但没中止")。
|
|
22961
|
+
// 必须改写 ESC(\x1b)到 pty,让 ink TUI 走它自己的中断路径。
|
|
22958
22962
|
// 失败情况(session 不存在 / 没活进程 / 超时 / 进程半路退出)都 throw ClawdError
|
|
22959
22963
|
async interrupt(args) {
|
|
22960
22964
|
this.getFile(args.sessionId);
|
|
@@ -22966,12 +22970,23 @@ var SessionManager = class {
|
|
|
22966
22970
|
);
|
|
22967
22971
|
}
|
|
22968
22972
|
try {
|
|
22969
|
-
await
|
|
22973
|
+
await this.dispatchInterrupt(runner);
|
|
22970
22974
|
} catch (err) {
|
|
22971
22975
|
throw new ClawdError(ERROR_CODES.INTERNAL, err.message);
|
|
22972
22976
|
}
|
|
22973
22977
|
return { response: { ok: true }, broadcast: [] };
|
|
22974
22978
|
}
|
|
22979
|
+
// 同时被 interrupt / cancelQuestion 调用:按模式选 interrupt 通道。TUI 优先 pty,
|
|
22980
|
+
// 否则 fallback 到 SDK 的 control_request(包括 mode='tui' 但 pty 未 register 的边角场景)。
|
|
22981
|
+
async dispatchInterrupt(runner) {
|
|
22982
|
+
const tsid = runner.getState().file.toolSessionId;
|
|
22983
|
+
const pty = tsid ? this.ptyTransports.get(tsid) : void 0;
|
|
22984
|
+
if (pty) {
|
|
22985
|
+
pty.write("\x1B");
|
|
22986
|
+
return;
|
|
22987
|
+
}
|
|
22988
|
+
await runner.sendControlRequest("interrupt");
|
|
22989
|
+
}
|
|
22975
22990
|
// 批量版本:UI 打开 session 时一次性拿到"磁盘和快照有差异"的 user message id 集合,
|
|
22976
22991
|
// 用来在消息流里精准控制 rewind 按钮的显示。session 没 toolSessionId 时返回空
|
|
22977
22992
|
rewindableMessageIds(args) {
|
|
@@ -23516,7 +23531,7 @@ var SessionManager = class {
|
|
|
23516
23531
|
runner.input({ kind: "cancel-question", toolUseId: args.toolUseId });
|
|
23517
23532
|
});
|
|
23518
23533
|
if (runner.getState().procAlive) {
|
|
23519
|
-
void
|
|
23534
|
+
void this.dispatchInterrupt(runner).catch(() => {
|
|
23520
23535
|
});
|
|
23521
23536
|
}
|
|
23522
23537
|
return { response: { ok: true }, broadcast };
|