linkshell-cli 0.10.92 → 0.10.94

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 (108) hide show
  1. package/README.md +4 -4
  2. package/dist/cli/src/commands/desktop.d.ts +3 -0
  3. package/dist/cli/src/commands/desktop.js +2 -46
  4. package/dist/cli/src/commands/desktop.js.map +1 -1
  5. package/dist/cli/src/commands/host.d.ts +2 -2
  6. package/dist/cli/src/commands/host.js +3 -3
  7. package/dist/cli/src/commands/host.js.map +1 -1
  8. package/dist/cli/src/commands/login.js +1 -1
  9. package/dist/cli/src/commands/login.js.map +1 -1
  10. package/dist/cli/src/commands/setup.js +1 -1
  11. package/dist/cli/src/commands/setup.js.map +1 -1
  12. package/dist/cli/src/commands/sign-in.d.ts +2 -0
  13. package/dist/cli/src/commands/sign-in.js +4 -6
  14. package/dist/cli/src/commands/sign-in.js.map +1 -1
  15. package/dist/cli/src/pro-membership.d.ts +8 -8
  16. package/dist/cli/src/pro-membership.js +21 -27
  17. package/dist/cli/src/pro-membership.js.map +1 -1
  18. package/dist/cli/tsconfig.tsbuildinfo +1 -1
  19. package/dist/client-core/src/pro-membership.d.ts +37 -9
  20. package/dist/client-core/src/pro-membership.js +98 -70
  21. package/dist/client-core/src/pro-membership.js.map +1 -1
  22. package/dist/gateway/src/relay.js +17 -17
  23. package/dist/gateway/src/relay.js.map +1 -1
  24. package/dist/gateway/src/subscription.d.ts +4 -1
  25. package/dist/gateway/src/subscription.js +25 -13
  26. package/dist/gateway/src/subscription.js.map +1 -1
  27. package/dist/host/src/children.d.ts +43 -0
  28. package/dist/host/src/children.js +213 -0
  29. package/dist/host/src/children.js.map +1 -0
  30. package/dist/host/src/drivers/acp/antigravity.js +1 -1
  31. package/dist/host/src/drivers/acp/antigravity.js.map +1 -1
  32. package/dist/host/src/drivers/acp/client-services.js +2 -0
  33. package/dist/host/src/drivers/acp/client-services.js.map +1 -1
  34. package/dist/host/src/drivers/acp/connection.js +8 -2
  35. package/dist/host/src/drivers/acp/connection.js.map +1 -1
  36. package/dist/host/src/drivers/acp/driver.d.ts +1 -5
  37. package/dist/host/src/drivers/acp/driver.js +11 -16
  38. package/dist/host/src/drivers/acp/driver.js.map +1 -1
  39. package/dist/host/src/drivers/acp/mcp.js +2 -0
  40. package/dist/host/src/drivers/acp/mcp.js.map +1 -1
  41. package/dist/host/src/drivers/claude/activity.js +13 -0
  42. package/dist/host/src/drivers/claude/activity.js.map +1 -1
  43. package/dist/host/src/drivers/claude/driver.d.ts +15 -0
  44. package/dist/host/src/drivers/claude/driver.js +44 -2
  45. package/dist/host/src/drivers/claude/driver.js.map +1 -1
  46. package/dist/host/src/drivers/claude/mcp-apps.d.ts +70 -0
  47. package/dist/host/src/drivers/claude/mcp-apps.js +399 -0
  48. package/dist/host/src/drivers/claude/mcp-apps.js.map +1 -0
  49. package/dist/host/src/drivers/claude/task-process.d.ts +23 -0
  50. package/dist/host/src/drivers/claude/task-process.js +121 -0
  51. package/dist/host/src/drivers/claude/task-process.js.map +1 -0
  52. package/dist/host/src/drivers/claude/tasks.d.ts +8 -1
  53. package/dist/host/src/drivers/claude/tasks.js +34 -6
  54. package/dist/host/src/drivers/claude/tasks.js.map +1 -1
  55. package/dist/host/src/drivers/codex/driver.d.ts +21 -0
  56. package/dist/host/src/drivers/codex/driver.js +99 -12
  57. package/dist/host/src/drivers/codex/driver.js.map +1 -1
  58. package/dist/host/src/drivers/queue.d.ts +4 -0
  59. package/dist/host/src/drivers/queue.js +9 -0
  60. package/dist/host/src/drivers/queue.js.map +1 -0
  61. package/dist/host/src/drivers/types.d.ts +1 -1
  62. package/dist/host/src/fs.js +8 -8
  63. package/dist/host/src/fs.js.map +1 -1
  64. package/dist/host/src/gateway.js +3 -3
  65. package/dist/host/src/gateway.js.map +1 -1
  66. package/dist/host/src/host.js +6 -0
  67. package/dist/host/src/host.js.map +1 -1
  68. package/dist/host/src/hub.js +28 -14
  69. package/dist/host/src/hub.js.map +1 -1
  70. package/dist/host/src/ports.js +3 -3
  71. package/dist/host/src/ports.js.map +1 -1
  72. package/dist/host/src/process.d.ts +8 -2
  73. package/dist/host/src/process.js +37 -2
  74. package/dist/host/src/process.js.map +1 -1
  75. package/dist/host/src/rpc/mcp.d.ts +1 -1
  76. package/dist/host/src/rpc/mcp.js +2 -2
  77. package/dist/host/src/rpc/mcp.js.map +1 -1
  78. package/dist/host/src/rpc/server.js +5 -5
  79. package/dist/host/src/rpc/server.js.map +1 -1
  80. package/dist/host/src/screen-viewer.js +7 -7
  81. package/dist/host/src/screen.js +3 -3
  82. package/dist/host/src/screen.js.map +1 -1
  83. package/dist/host/src/slim.js +16 -4
  84. package/dist/host/src/slim.js.map +1 -1
  85. package/dist/host/src/store.js +8 -4
  86. package/dist/host/src/store.js.map +1 -1
  87. package/dist/host/src/terminals.js +15 -8
  88. package/dist/host/src/terminals.js.map +1 -1
  89. package/dist/wire/src/model.d.ts +4 -0
  90. package/dist/wire/src/model.js +4 -0
  91. package/dist/wire/src/model.js.map +1 -1
  92. package/dist/wire/src/peer.js +4 -4
  93. package/dist/wire/src/peer.js.map +1 -1
  94. package/dist/wire/src/relay-client.js +9 -9
  95. package/dist/wire/src/relay-client.js.map +1 -1
  96. package/dist/wire/src/relay.js +2 -2
  97. package/dist/wire/src/relay.js.map +1 -1
  98. package/dist/wire/src/rpc-mcp.js +5 -4
  99. package/dist/wire/src/rpc-mcp.js.map +1 -1
  100. package/dist/wire/src/rpc.d.ts +5 -0
  101. package/dist/wire/src/updates.js +1 -1
  102. package/package.json +4 -4
  103. package/src/commands/desktop.ts +2 -40
  104. package/src/commands/host.ts +3 -3
  105. package/src/commands/login.ts +1 -1
  106. package/src/commands/setup.ts +1 -1
  107. package/src/commands/sign-in.ts +6 -6
  108. package/src/pro-membership.ts +23 -23
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-process.js","sourceRoot":"","sources":["../../../../../../host/src/drivers/claude/task-process.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { BackgroundTask } from "@linkshell/wire";
2
2
  /** Shell tasks are separate from Agent/Workflow runs, even when Claude repeats their notifications. */
3
3
  export declare class ClaudeTasks {
4
4
  private readonly emit;
5
+ private readonly stoppable;
5
6
  readonly records: Map<string, {
6
7
  id: string;
7
8
  kind: "shell" | "monitor";
@@ -20,11 +21,17 @@ export declare class ClaudeTasks {
20
21
  private launches;
21
22
  private paths;
22
23
  private pending;
23
- constructor(emit: (task: BackgroundTask) => void);
24
+ /** Tasks LinkShell stopped: Claude then reports the shell as failed, which it wasn't. */
25
+ private stoppedHere;
26
+ constructor(emit: (task: BackgroundTask) => void, stoppable?: boolean);
24
27
  observe(raw: string): void;
25
28
  private notification;
26
29
  private change;
27
30
  lostHolder(): void;
31
+ /** A stop LinkShell made: the shell's exit Claude reports next doesn't change how it ended. */
32
+ stopped(id: string): void;
33
+ /** The task's output file, only where Claude keeps the session's own tasks, resolved. */
34
+ file(nativeId: string, taskId: string): string | undefined;
28
35
  output(nativeId: string, taskId: string, before: number | undefined, limit: number): {
29
36
  start: number;
30
37
  size: number;
@@ -1,17 +1,22 @@
1
1
  import { constants, openSync, closeSync, fstatSync, readSync, realpathSync } from "node:fs";
2
2
  import { outputRange } from "../../task-output.js";
3
+ import { canFindTaskProcesses } from "./task-process.js";
3
4
  const obj = (v) => v && typeof v === "object" ? v : {};
4
5
  const str = (v) => typeof v === "string" ? v : undefined;
5
6
  const tag = (text, name) => new RegExp(`<${name}>\\s*([\\s\\S]*?)\\s*</${name}>`).exec(text)?.[1];
6
7
  /** Shell tasks are separate from Agent/Workflow runs, even when Claude repeats their notifications. */
7
8
  export class ClaudeTasks {
8
9
  emit;
10
+ stoppable;
9
11
  records = new Map();
10
12
  launches = new Map();
11
13
  paths = new Map();
12
14
  pending = new Map();
13
- constructor(emit) {
15
+ /** Tasks LinkShell stopped: Claude then reports the shell as failed, which it wasn't. */
16
+ stoppedHere = new Set();
17
+ constructor(emit, stoppable = canFindTaskProcesses) {
14
18
  this.emit = emit;
19
+ this.stoppable = stoppable;
15
20
  }
16
21
  observe(raw) {
17
22
  let line;
@@ -44,7 +49,7 @@ export class ClaudeTasks {
44
49
  this.paths.set(id, path);
45
50
  // Fold a completion that arrived first into the initial snapshot.
46
51
  const { ts: startedAt, ...description } = launch;
47
- this.records.set(id, { id, ...description, startedAt, toolCallId: call, state: "running", output: !!path });
52
+ this.records.set(id, { id, ...description, startedAt, toolCallId: call, state: "running", output: !!path, canStop: !!path && this.stoppable });
48
53
  const pending = this.pending.get(id) ?? this.pending.get(call);
49
54
  if (pending) {
50
55
  this.notification(pending.text, pending.ts);
@@ -91,7 +96,13 @@ export class ClaudeTasks {
91
96
  }
92
97
  change(id, patch) {
93
98
  const old = this.records.get(id);
99
+ if (this.stoppedHere.has(id)) {
100
+ const { state: _state, exitCode: _code, ...rest } = patch;
101
+ patch = rest;
102
+ }
94
103
  const next = { ...old, ...patch };
104
+ // Stopping needs the output file: it is how the shell's process is found.
105
+ next.canStop = next.state === "running" && this.paths.has(id) && this.stoppable;
95
106
  if (JSON.stringify(old) === JSON.stringify(next))
96
107
  return;
97
108
  this.records.set(id, next);
@@ -102,18 +113,35 @@ export class ClaudeTasks {
102
113
  if (task.state === "running")
103
114
  this.change(id, { state: "unknown", endedAt: Date.now() });
104
115
  }
105
- output(nativeId, taskId, before, limit) {
116
+ /** A stop LinkShell made: the shell's exit Claude reports next doesn't change how it ended. */
117
+ stopped(id) {
118
+ if (!this.records.has(id))
119
+ return;
120
+ this.change(id, { state: "stopped", endedAt: Date.now() });
121
+ this.stoppedHere.add(id);
122
+ }
123
+ /** The task's output file, only where Claude keeps the session's own tasks, resolved. */
124
+ file(nativeId, taskId) {
106
125
  const path = this.paths.get(taskId);
107
126
  if (!path || !/^[\w-]+$/.test(nativeId) || !/^[\w-]+$/.test(taskId))
108
127
  return undefined;
109
128
  const valid = (value) => value.includes("/claude-") && new RegExp(`/claude-\\d+/[^/]+/${nativeId}/tasks/${taskId}\\.output$`).test(value);
110
- let fd;
111
129
  try {
112
130
  if (!valid(path))
113
131
  return undefined;
114
132
  const resolved = realpathSync(path);
115
- if (!valid(resolved))
116
- return undefined;
133
+ return valid(resolved) ? resolved : undefined;
134
+ }
135
+ catch {
136
+ return undefined;
137
+ }
138
+ }
139
+ output(nativeId, taskId, before, limit) {
140
+ const resolved = this.file(nativeId, taskId);
141
+ if (!resolved)
142
+ return undefined;
143
+ let fd;
144
+ try {
117
145
  fd = openSync(resolved, constants.O_RDONLY | constants.O_NOFOLLOW);
118
146
  const stat = fstatSync(fd);
119
147
  if (!stat.isFile())
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../../../../host/src/drivers/claude/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../../../../host/src/drivers/claude/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAO,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,MAAM,GAAG,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,0BAA0B,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElH,uGAAuG;AACvG,MAAM,OAAO,WAAW;IAOO;IAAuD;IAN3E,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC7C,QAAQ,GAAG,IAAI,GAAG,EAAsF,CAAC;IACzG,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClC,OAAO,GAAG,IAAI,GAAG,EAAwC,CAAC;IAClE,yFAAyF;IACjF,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,YAA6B,IAAoC,EAAmB,YAAY,oBAAoB;QAAvF,SAAI,GAAJ,IAAI,CAAgC;QAAmB,cAAS,GAAT,SAAS,CAAuB;IAAG,CAAC;IAExH,OAAO,CAAC,GAAW;QACjB,IAAI,IAAS,CAAC;QACd,IAAI,CAAC;YAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QACtD,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAClH,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,SAAS;YAC/G,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5M,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtH,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzG,IAAI,EAAE,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;YACvG,MAAM,IAAI,GAAG,yDAAyD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvF,IAAI,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnC,kEAAkE;YAClE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/I,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/D,IAAI,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;;gBAC5G,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACvI,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrH,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjH,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,EAAU;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7I,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;QAC9H,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI;oBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;YACvF,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACxC,IAAI,MAAM;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3I,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpM,CAAC;IAEO,MAAM,CAAC,EAAU,EAAE,KAA8B;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;YAC1D,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAClC,0EAA0E;QAC1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;QAChF,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,UAAU;QACR,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClI,CAAC;IAED,+FAA+F;IAC/F,OAAO,CAAC,EAAU;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,yFAAyF;IACzF,IAAI,CAAC,QAAgB,EAAE,MAAc;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QACtF,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,sBAAsB,QAAQ,UAAU,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClJ,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,QAAgB,EAAE,MAAc,EAAE,MAA0B,EAAE,KAAa;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,EAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,SAAS,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;gBACrB,CAAC;YAAC,IAAI,EAAE,KAAK,SAAS;gBAAE,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC;CACF"}
@@ -84,6 +84,8 @@ export declare class CodexDriver implements AgentDriver {
84
84
  private readonly fullAccessTurns;
85
85
  /** Sub-agent thread → the parent thread and the spawnAgent call its work nests under. */
86
86
  private readonly children;
87
+ /** Each spawnAgent call's card detail, so the sub-agent's running state can be added to it without losing the rest. */
88
+ private readonly spawnDetails;
87
89
  /** Threads Codex reported as sub-agents (parentThreadId set); never shown as sessions. */
88
90
  private readonly subThreads;
89
91
  /** Each thread's working directory: where its skills are looked up. */
@@ -182,6 +184,12 @@ export declare class CodexDriver implements AgentDriver {
182
184
  private syncWaiting;
183
185
  private setWaiting;
184
186
  unqueue(nativeId: string, clientMessageId: string): boolean;
187
+ /**
188
+ * Puts what waits in Codex's own queue in the order the user set: Codex
189
+ * starts its queue in order, so that is the order they are sent. Where
190
+ * Codex can't reorder (an older build), its own order is shown again.
191
+ */
192
+ reorderQueue(nativeId: string, clientMessageIds: string[]): void;
185
193
  /**
186
194
  * A message waiting in Codex's queue goes into the turn another Codex is
187
195
  * running, by asking that Codex's app: what its own "Steer" on the waiting
@@ -291,6 +299,19 @@ export declare class CodexDriver implements AgentDriver {
291
299
  private scheduleRestart;
292
300
  private stateOf;
293
301
  private onNotification;
302
+ /** Keeps a spawn card's detail; a later report of the call keeps the running state already said on it. */
303
+ private rememberSpawn;
304
+ /**
305
+ * A sub-agent's turn started or ended: its spawn card says whether it is
306
+ * running, and while it is, that it can be stopped on its own
307
+ * (`turn/interrupt` on its thread). Only for a turn seen starting here, so
308
+ * the button never outlives what this host can see.
309
+ */
310
+ private subagentTurn;
311
+ /** A sub-agent said to be running when this host last saw it: what its thread says now. */
312
+ private settleSubagent;
313
+ /** Stops one sub-agent's running turn, leaving the session's own turn and the other agents alone. */
314
+ cancelSubagent(nativeId: string, childId: string): Promise<void>;
294
315
  /** Remembers which spawnAgent call each new sub-agent thread belongs to. */
295
316
  private noteSpawns;
296
317
  private onServerRequest;
@@ -12,6 +12,7 @@ import { behaviorCapabilities } from "../behavior.js";
12
12
  import { CodexAppServer, CodexSharedServer, findCodex, sharedServerSocket } from "./app-server.js";
13
13
  import { APPROVAL_METHODS, QUESTION_METHODS, mapApprovalRequest, mapQuestionRequest, mapNotification, threadStateOf, threadToDiscovered, spawnedThreads, subagentHistory, threadToHistory, toCodexInput, toolStart, turnUnderWay, } from "./mapper.js";
14
14
  import { nestHistory, nestUnder } from "../nesting.js";
15
+ import { inOrder } from "../queue.js";
15
16
  import { configOptions, effective, newThreadModels, settingsFrom, settingsFromConfig, settingsFromTurnContext, turnOverrides } from "./settings.js";
16
17
  import { COMMANDS, INIT_PROMPT, commandOf } from "./commands.js";
17
18
  import { DesktopUnconfirmed, desktopBusSocket, interruptThroughDesktop, startThroughDesktop, steerThroughDesktop, updateSettingsThroughDesktop } from "./desktop-ipc.js";
@@ -160,6 +161,8 @@ export class CodexDriver {
160
161
  fullAccessTurns = new Set();
161
162
  /** Sub-agent thread → the parent thread and the spawnAgent call its work nests under. */
162
163
  children = new Map();
164
+ /** Each spawnAgent call's card detail, so the sub-agent's running state can be added to it without losing the rest. */
165
+ spawnDetails = new Map();
163
166
  /** Threads Codex reported as sub-agents (parentThreadId set); never shown as sessions. */
164
167
  subThreads = new Set();
165
168
  /** Each thread's working directory: where its skills are looked up. */
@@ -411,7 +414,7 @@ export class CodexDriver {
411
414
  if (error instanceof Error && /no rollout/i.test(error.message)) {
412
415
  // Opened in another client but no turn yet, so not on disk. A turn can
413
416
  // still be started on it; after that it can be joined.
414
- throw RpcError.app("not_ready", "this Codex session has no messages yet");
417
+ throw RpcError.app("not_ready", "这个 Codex 会话还没有消息");
415
418
  }
416
419
  if (!heldElsewhere(error))
417
420
  throw error;
@@ -473,7 +476,7 @@ export class CodexDriver {
473
476
  try {
474
477
  const server = home === "shared" ? this.shared : this.server;
475
478
  if (!server)
476
- throw RpcError.app("agent_unavailable", "Codex is not running");
479
+ throw RpcError.app("agent_unavailable", "Codex 没有在运行");
477
480
  const resumed = await server.request("thread/resume", { threadId });
478
481
  if (home === "shared")
479
482
  this.inShared.add(threadId);
@@ -749,6 +752,24 @@ export class CodexDriver {
749
752
  void this.rpc("thread/queue/delete", { threadId: nativeId, queuedSubmissionId: entry.submissionId }).catch(() => { });
750
753
  return true;
751
754
  }
755
+ /**
756
+ * Puts what waits in Codex's own queue in the order the user set: Codex
757
+ * starts its queue in order, so that is the order they are sent. Where
758
+ * Codex can't reorder (an older build), its own order is shown again.
759
+ */
760
+ reorderQueue(nativeId, clientMessageIds) {
761
+ const waiting = this.waiting.get(nativeId);
762
+ if (!waiting || waiting.length < 2)
763
+ return;
764
+ const ordered = inOrder(waiting, clientMessageIds);
765
+ if (ordered.every((entry, index) => entry === waiting[index]))
766
+ return;
767
+ this.setWaiting(nativeId, ordered);
768
+ void this.rpc("thread/queue/reorder", { threadId: nativeId, queuedSubmissionIds: ordered.map((entry) => entry.submissionId) }).catch((error) => {
769
+ this.host?.log(`[codex] couldn't reorder the queue of ${nativeId}: ${error instanceof Error ? error.message : String(error)}`);
770
+ void this.syncWaiting(nativeId);
771
+ });
772
+ }
752
773
  /**
753
774
  * A message waiting in Codex's queue goes into the turn another Codex is
754
775
  * running, by asking that Codex's app: what its own "Steer" on the waiting
@@ -1049,6 +1070,9 @@ export class CodexDriver {
1049
1070
  const result = await this.rpcFor(threadId, "thread/read", { threadId: child, includeTurns: true });
1050
1071
  known.path = result.thread.path ?? undefined;
1051
1072
  known.stamp = stamp;
1073
+ const spawn = history.find((item) => item.itemId === `tool:${callId}` || item.itemId === callId)?.updates
1074
+ .find((update) => update.sessionUpdate === "tool_call" && update.detail?.type === "subagent");
1075
+ this.settleSubagent(threadId, callId, result.thread, spawn?.sessionUpdate === "tool_call" && spawn.detail?.type === "subagent" ? spawn.detail : undefined);
1052
1076
  return nestHistory(subagentHistory(result.thread, this.mcpApps.lookup(child)), callId);
1053
1077
  }
1054
1078
  catch {
@@ -1181,7 +1205,7 @@ export class CodexDriver {
1181
1205
  }
1182
1206
  async send(nativeId, input, clientMessageId) {
1183
1207
  if (input.length === 0)
1184
- throw RpcError.app("invalid_params", "nothing to send");
1208
+ throw RpcError.app("invalid_params", "没有可发送的内容");
1185
1209
  const watch = this.observed.get(nativeId);
1186
1210
  if (watch?.running && questionReplies(textOf(input))) {
1187
1211
  try {
@@ -1268,7 +1292,7 @@ export class CodexDriver {
1268
1292
  const next = { ...this.overridesOf(nativeId) };
1269
1293
  if (optionId === "model") {
1270
1294
  if (!models.some((m) => m.model === value) && value !== current.model) {
1271
- throw RpcError.app("invalid_params", `unknown model ${value}`);
1295
+ throw RpcError.app("invalid_params", `未知模型:${value}`);
1272
1296
  }
1273
1297
  next.model = value;
1274
1298
  // Keep the effort only if the new model supports it.
@@ -1279,14 +1303,14 @@ export class CodexDriver {
1279
1303
  }
1280
1304
  else if (optionId === "effort") {
1281
1305
  if (current.info?.supportedReasoningEfforts && !current.info.supportedReasoningEfforts.some((e) => e.reasoningEffort === value)) {
1282
- throw RpcError.app("invalid_params", `unsupported reasoning effort ${value}`);
1306
+ throw RpcError.app("invalid_params", `不支持的思考强度:${value}`);
1283
1307
  }
1284
1308
  next.effort = value;
1285
1309
  }
1286
1310
  else if (optionId === "permissions") {
1287
1311
  const option = configOptions(base, this.overridesOf(nativeId), models).find((entry) => entry.id === "permissions");
1288
1312
  if (!option?.values.some((entry) => entry.value === value))
1289
- throw RpcError.app("invalid_params", `unknown permission mode ${value}`);
1313
+ throw RpcError.app("invalid_params", `未知的权限模式:${value}`);
1290
1314
  if (value === "custom")
1291
1315
  delete next.permissions;
1292
1316
  else
@@ -1296,7 +1320,7 @@ export class CodexDriver {
1296
1320
  next.plan = value === "on";
1297
1321
  }
1298
1322
  else {
1299
- throw RpcError.app("not_supported", `Codex has no setting ${optionId}`);
1323
+ throw RpcError.app("not_supported", `Codex 没有设置项 ${optionId}`);
1300
1324
  }
1301
1325
  const running = this.stateOf(nativeId).activeTurnId ?? this.observed.get(nativeId)?.turnId;
1302
1326
  if (optionId === "permissions" && running && value !== (current.permissions ?? "custom")) {
@@ -1722,7 +1746,7 @@ export class CodexDriver {
1722
1746
  async respondPermission(nativeId, requestId, optionId) {
1723
1747
  const pending = this.approvals.get(requestId);
1724
1748
  if (!pending || pending.threadId !== nativeId) {
1725
- throw RpcError.app("not_found", "this permission request is no longer pending");
1749
+ throw RpcError.app("not_found", "这个请求已经处理过或已失效");
1726
1750
  }
1727
1751
  if (optionId === "cancel" && pending.request.cancel)
1728
1752
  return this.cancel(nativeId);
@@ -1784,7 +1808,7 @@ export class CodexDriver {
1784
1808
  this.current = {
1785
1809
  installed: true,
1786
1810
  version: this.current.version,
1787
- problem: `Codex app-server failed to start: ${error instanceof Error ? error.message : String(error)}`,
1811
+ problem: `Codex app-server 启动失败:${error instanceof Error ? error.message : String(error)}`,
1788
1812
  };
1789
1813
  this.scheduleRestart();
1790
1814
  }
@@ -1854,7 +1878,7 @@ export class CodexDriver {
1854
1878
  this.startedHere.clear();
1855
1879
  this.fresh.clear();
1856
1880
  this.kept.clear();
1857
- this.current = { installed: true, version: this.current.version, problem: "Codex app-server restarting" };
1881
+ this.current = { installed: true, version: this.current.version, problem: "Codex app-server 正在重启" };
1858
1882
  this.scheduleRestart();
1859
1883
  }
1860
1884
  scheduleRestart() {
@@ -1969,7 +1993,7 @@ export class CodexDriver {
1969
1993
  this.host?.preview?.(this.id, threadId, frame);
1970
1994
  }
1971
1995
  for (const mapped of mapNotification(method, params, (id) => this.stateOf(id), (id) => this.mcpApps.lookup(id))) {
1972
- const update = from === "shared" && mapped.update.sessionUpdate === "ls_permission_resolved"
1996
+ let update = from === "shared" && mapped.update.sessionUpdate === "ls_permission_resolved"
1973
1997
  ? { ...mapped.update, requestId: sharedRequestId(mapped.update.requestId) }
1974
1998
  : mapped.update;
1975
1999
  if (update.sessionUpdate === "ls_goal" && !this.isNews(`goal:${mapped.threadId}`, update.goal))
@@ -1984,12 +2008,15 @@ export class CodexDriver {
1984
2008
  pending.abandon();
1985
2009
  }
1986
2010
  }
2011
+ update = this.rememberSpawn(update);
1987
2012
  const parent = this.children.get(mapped.threadId);
1988
2013
  if (parent) {
1989
2014
  const nested = nestUnder(update, parent.toolCallId);
1990
2015
  if (nested && this.attached.has(parent.threadId)) {
1991
2016
  this.host?.update(this.id, parent.threadId, nested, mapped.itemId && `sub:${parent.toolCallId}:${mapped.itemId}`);
1992
2017
  }
2018
+ if (update.sessionUpdate === "ls_turn")
2019
+ this.subagentTurn(mapped.threadId, parent, update);
1993
2020
  continue;
1994
2021
  }
1995
2022
  if (!this.attached.has(mapped.threadId))
@@ -2008,6 +2035,66 @@ export class CodexDriver {
2008
2035
  }
2009
2036
  }
2010
2037
  }
2038
+ /** Keeps a spawn card's detail; a later report of the call keeps the running state already said on it. */
2039
+ rememberSpawn(update) {
2040
+ if (update.sessionUpdate !== "tool_call" && update.sessionUpdate !== "tool_call_update")
2041
+ return update;
2042
+ if (update.detail?.type !== "subagent" || update.detail.action !== "spawn")
2043
+ return update;
2044
+ const known = this.spawnDetails.get(update.toolCallId);
2045
+ const detail = { ...update.detail, ...(known?.state ? { state: known.state, nativeSessionId: known.nativeSessionId, canCancel: known.canCancel } : {}) };
2046
+ this.spawnDetails.delete(update.toolCallId);
2047
+ this.spawnDetails.set(update.toolCallId, detail);
2048
+ if (this.spawnDetails.size > 200)
2049
+ this.spawnDetails.delete(this.spawnDetails.keys().next().value);
2050
+ return { ...update, detail };
2051
+ }
2052
+ /**
2053
+ * A sub-agent's turn started or ended: its spawn card says whether it is
2054
+ * running, and while it is, that it can be stopped on its own
2055
+ * (`turn/interrupt` on its thread). Only for a turn seen starting here, so
2056
+ * the button never outlives what this host can see.
2057
+ */
2058
+ subagentTurn(childId, parent, update) {
2059
+ const detail = this.spawnDetails.get(parent.toolCallId);
2060
+ // Several agents under one call can't be told apart on its card.
2061
+ const siblings = [...this.children.values()].filter((child) => child.toolCallId === parent.toolCallId).length;
2062
+ if (!detail || siblings !== 1 || !this.attached.has(parent.threadId))
2063
+ return;
2064
+ const running = update.state === "started";
2065
+ const state = running ? "running" : update.stopReason === "cancelled" ? "stopped" : update.stopReason === "error" ? "failed" : "completed";
2066
+ const next = { ...detail, nativeSessionId: childId, canCancel: running && !this.observed.has(parent.threadId), state };
2067
+ this.spawnDetails.set(parent.toolCallId, next);
2068
+ // Said running, it must be said ended too, even after a restart (see `settleSubagents`).
2069
+ this.host?.state(this.id, parent.threadId).set(`subagent:${parent.toolCallId}`, running ? childId : "");
2070
+ this.host?.update(this.id, parent.threadId, { sessionUpdate: "tool_call_update", toolCallId: parent.toolCallId, detail: next });
2071
+ }
2072
+ /** A sub-agent said to be running when this host last saw it: what its thread says now. */
2073
+ settleSubagent(threadId, callId, child, detail) {
2074
+ const memory = this.host?.state(this.id, threadId);
2075
+ const childId = memory?.get(`subagent:${callId}`);
2076
+ if (!childId || childId !== child.id || turnUnderWay(child.turns?.at(-1)))
2077
+ return;
2078
+ memory.set(`subagent:${callId}`, "");
2079
+ const last = child.turns?.at(-1);
2080
+ const state = last?.status === "interrupted" ? "stopped" : last?.status === "failed" ? "failed" : "completed";
2081
+ const next = { type: "subagent", action: "spawn", ...detail, nativeSessionId: childId, canCancel: false, state };
2082
+ this.spawnDetails.set(callId, next);
2083
+ this.host?.update(this.id, threadId, { sessionUpdate: "tool_call_update", toolCallId: callId, detail: next });
2084
+ }
2085
+ /** Stops one sub-agent's running turn, leaving the session's own turn and the other agents alone. */
2086
+ async cancelSubagent(nativeId, childId) {
2087
+ const child = this.children.get(childId);
2088
+ if (!child || child.threadId !== nativeId)
2089
+ throw RpcError.app("not_found", "这个子代理不在这个会话里");
2090
+ if (this.observed.has(nativeId))
2091
+ throw this.refused(nativeId, "会话开在电脑的另一个 Codex 里 · 子代理要在那边停止", HELD_COMMAND);
2092
+ const turnId = this.stateOf(childId).activeTurnId;
2093
+ if (!turnId)
2094
+ throw RpcError.app("busy", "这个子代理现在没有在运行");
2095
+ // A sub-agent's thread lives in the server its parent is in.
2096
+ await this.rpcFor(nativeId, "turn/interrupt", { threadId: childId, turnId });
2097
+ }
2011
2098
  /** Remembers which spawnAgent call each new sub-agent thread belongs to. */
2012
2099
  noteSpawns(params) {
2013
2100
  const record = params;
@@ -2081,7 +2168,7 @@ export class CodexDriver {
2081
2168
  }
2082
2169
  rpc(method, params) {
2083
2170
  if (!this.server)
2084
- return Promise.reject(RpcError.app("agent_unavailable", "Codex is not running"));
2171
+ return Promise.reject(RpcError.app("agent_unavailable", "Codex 没有在运行"));
2085
2172
  return this.server.request(method, params);
2086
2173
  }
2087
2174
  /** A request about a thread, to the server it is loaded in. */