@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.
Files changed (2) hide show
  1. package/dist/cli.cjs +18 -3
  2. 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
- // 温柔中断当前轮次:不杀进程,仅发 CC IPC `control_request.subtype=interrupt`
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 runner.sendControlRequest("interrupt");
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 runner.sendControlRequest("interrupt").catch(() => {
23534
+ void this.dispatchInterrupt(runner).catch(() => {
23520
23535
  });
23521
23536
  }
23522
23537
  return { response: { ok: true }, broadcast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawos-dev/clawd",
3
- "version": "0.2.75",
3
+ "version": "0.2.76",
4
4
  "description": "Standalone clawd daemon — Claude Code (and future Codex) session server over WebSocket",
5
5
  "type": "module",
6
6
  "license": "MIT",