@enderfga/claw-orchestrator 7.13.0 → 7.15.0

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 (143) hide show
  1. package/README.md +163 -137
  2. package/configs/autoloop-reviewer-prompt.md +1 -1
  3. package/configs/engines/README.md +45 -5
  4. package/configs/engines/dsh.json +17 -0
  5. package/configs/engines/kimi-code.json +17 -0
  6. package/dist/bin/acp-server.js +7 -12
  7. package/dist/bin/acp-server.js.map +1 -1
  8. package/dist/bin/cli.js +127 -67
  9. package/dist/bin/cli.js.map +1 -1
  10. package/dist/bin/mcp-server.js +2 -54
  11. package/dist/bin/mcp-server.js.map +1 -1
  12. package/dist/src/acp-server.d.ts +17 -9
  13. package/dist/src/acp-server.js +151 -30
  14. package/dist/src/acp-server.js.map +1 -1
  15. package/dist/src/autoloop/agent-tools.d.ts +2 -0
  16. package/dist/src/autoloop/agent-tools.js +7 -0
  17. package/dist/src/autoloop/agent-tools.js.map +1 -1
  18. package/dist/src/autoloop/dispatcher.d.ts +6 -0
  19. package/dist/src/autoloop/dispatcher.js +23 -1
  20. package/dist/src/autoloop/dispatcher.js.map +1 -1
  21. package/dist/src/autoloop/planner-tools.js +2 -0
  22. package/dist/src/autoloop/planner-tools.js.map +1 -1
  23. package/dist/src/council.d.ts +8 -0
  24. package/dist/src/council.js +45 -12
  25. package/dist/src/council.js.map +1 -1
  26. package/dist/src/dashboard/index.html +28 -14
  27. package/dist/src/embedded-server.js +34 -10
  28. package/dist/src/embedded-server.js.map +1 -1
  29. package/dist/src/engine-presets.d.ts +7 -3
  30. package/dist/src/engine-presets.js +39 -6
  31. package/dist/src/engine-presets.js.map +1 -1
  32. package/dist/src/engine-spawn.js +3 -1
  33. package/dist/src/engine-spawn.js.map +1 -1
  34. package/dist/src/fanout.d.ts +13 -3
  35. package/dist/src/fanout.js +10 -0
  36. package/dist/src/fanout.js.map +1 -1
  37. package/dist/src/inbox-manager.d.ts +9 -0
  38. package/dist/src/inbox-manager.js +8 -2
  39. package/dist/src/inbox-manager.js.map +1 -1
  40. package/dist/src/index.d.ts +2 -0
  41. package/dist/src/index.js +136 -52
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/kernel/conditions.d.ts +1 -1
  44. package/dist/src/kernel/conditions.js +1 -1
  45. package/dist/src/kernel/engine.d.ts +28 -8
  46. package/dist/src/kernel/engine.js +93 -19
  47. package/dist/src/kernel/engine.js.map +1 -1
  48. package/dist/src/kernel/nodes/agent.js +2 -0
  49. package/dist/src/kernel/nodes/agent.js.map +1 -1
  50. package/dist/src/kernel/nodes/council.js +9 -4
  51. package/dist/src/kernel/nodes/council.js.map +1 -1
  52. package/dist/src/kernel/nodes/fanout.js +5 -0
  53. package/dist/src/kernel/nodes/fanout.js.map +1 -1
  54. package/dist/src/kernel/nodes/goal.d.ts +8 -1
  55. package/dist/src/kernel/nodes/goal.js +40 -19
  56. package/dist/src/kernel/nodes/goal.js.map +1 -1
  57. package/dist/src/kernel/nodes/subflow.js +9 -1
  58. package/dist/src/kernel/nodes/subflow.js.map +1 -1
  59. package/dist/src/kernel/nodes/ultraapp.d.ts +1 -0
  60. package/dist/src/kernel/nodes/ultraapp.js +1 -0
  61. package/dist/src/kernel/nodes/ultraapp.js.map +1 -1
  62. package/dist/src/kernel/nodes/verifier.js +5 -1
  63. package/dist/src/kernel/nodes/verifier.js.map +1 -1
  64. package/dist/src/kernel/projections.d.ts +1 -0
  65. package/dist/src/kernel/projections.js +7 -1
  66. package/dist/src/kernel/projections.js.map +1 -1
  67. package/dist/src/kernel/templates/index.d.ts +6 -3
  68. package/dist/src/kernel/templates/index.js +8 -3
  69. package/dist/src/kernel/templates/index.js.map +1 -1
  70. package/dist/src/kernel/types.d.ts +30 -10
  71. package/dist/src/kernel/types.js.map +1 -1
  72. package/dist/src/logger.d.ts +6 -0
  73. package/dist/src/logger.js +14 -0
  74. package/dist/src/logger.js.map +1 -1
  75. package/dist/src/mcp-annotations.d.ts +13 -0
  76. package/dist/src/mcp-annotations.js +100 -0
  77. package/dist/src/mcp-annotations.js.map +1 -0
  78. package/dist/src/models.d.ts +7 -0
  79. package/dist/src/models.js +9 -0
  80. package/dist/src/models.js.map +1 -1
  81. package/dist/src/openai-compat.d.ts +11 -5
  82. package/dist/src/openai-compat.js +55 -54
  83. package/dist/src/openai-compat.js.map +1 -1
  84. package/dist/src/persistent-acp-session.d.ts +83 -0
  85. package/dist/src/persistent-acp-session.js +433 -0
  86. package/dist/src/persistent-acp-session.js.map +1 -0
  87. package/dist/src/persistent-codex-app-session.d.ts +2 -0
  88. package/dist/src/persistent-codex-app-session.js +18 -9
  89. package/dist/src/persistent-codex-app-session.js.map +1 -1
  90. package/dist/src/persistent-codex-session.d.ts +14 -3
  91. package/dist/src/persistent-codex-session.js +22 -19
  92. package/dist/src/persistent-codex-session.js.map +1 -1
  93. package/dist/src/persistent-custom-session.d.ts +9 -0
  94. package/dist/src/persistent-custom-session.js +41 -21
  95. package/dist/src/persistent-custom-session.js.map +1 -1
  96. package/dist/src/persistent-grok-session.js +1 -1
  97. package/dist/src/persistent-grok-session.js.map +1 -1
  98. package/dist/src/run-ledger.d.ts +3 -3
  99. package/dist/src/session-manager.d.ts +34 -1
  100. package/dist/src/session-manager.js +169 -30
  101. package/dist/src/session-manager.js.map +1 -1
  102. package/dist/src/types.d.ts +63 -12
  103. package/dist/src/types.js +2 -0
  104. package/dist/src/types.js.map +1 -1
  105. package/dist/src/ultraapp/build.d.ts +5 -11
  106. package/dist/src/ultraapp/build.js +5 -11
  107. package/dist/src/ultraapp/build.js.map +1 -1
  108. package/dist/src/ultraapp/council-adapter.d.ts +5 -2
  109. package/dist/src/ultraapp/council-adapter.js +6 -6
  110. package/dist/src/ultraapp/council-adapter.js.map +1 -1
  111. package/dist/src/ultraapp/files.d.ts +7 -0
  112. package/dist/src/ultraapp/files.js +7 -1
  113. package/dist/src/ultraapp/files.js.map +1 -1
  114. package/dist/src/ultraapp/manager.d.ts +23 -3
  115. package/dist/src/ultraapp/manager.js +170 -72
  116. package/dist/src/ultraapp/manager.js.map +1 -1
  117. package/dist/src/ultraapp/narrator.js +1 -1
  118. package/dist/src/ultraapp/narrator.js.map +1 -1
  119. package/dist/src/ultraapp/versions.d.ts +27 -5
  120. package/dist/src/ultraapp/versions.js +58 -13
  121. package/dist/src/ultraapp/versions.js.map +1 -1
  122. package/openclaw.plugin.json +4 -13
  123. package/package.json +13 -6
  124. package/skills/SKILL.md +52 -24
  125. package/skills/references/acp.md +140 -57
  126. package/skills/references/autoloop.md +141 -35
  127. package/skills/references/claude-cli-tracking.md +9 -6
  128. package/skills/references/cli.md +129 -91
  129. package/skills/references/council.md +44 -22
  130. package/skills/references/dashboard.md +37 -21
  131. package/skills/references/getting-started.md +49 -15
  132. package/skills/references/inbox.md +13 -8
  133. package/skills/references/mcp.md +25 -17
  134. package/skills/references/multi-engine.md +180 -144
  135. package/skills/references/observability.md +90 -58
  136. package/skills/references/openai-compat.md +172 -82
  137. package/skills/references/sessions.md +101 -65
  138. package/skills/references/tools.md +209 -157
  139. package/skills/references/ultra.md +7 -7
  140. package/skills/references/ultraapp.md +101 -56
  141. package/skills/references/verification.md +112 -56
  142. package/skills/references/workflow.md +227 -93
  143. package/assets/banner.jpg +0 -0
@@ -198,7 +198,7 @@ export class PersistentGrokSession extends BaseOneShotSession {
198
198
  const timer = setTimeout(() => {
199
199
  if (!settled) {
200
200
  settled = true;
201
- proc.kill('SIGKILL');
201
+ killEngineTree(proc);
202
202
  reject(new Error('Timeout waiting for Grok response'));
203
203
  }
204
204
  }, timeout);
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-grok-session.js","sourceRoot":"","sources":["../../src/persistent-grok-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistent-grok-session.js","sourceRoot":"","sources":["../../src/persistent-grok-session.ts"],"names":[],"mappings":"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"}
@@ -66,14 +66,14 @@ export interface RunLedgerRow {
66
66
  *
67
67
  * Not written at turn time, and deliberately so: a turn finishes before the
68
68
  * verifier runs, so stamping a verdict there would be inventing one. It is
69
- * filled in by `annotateVerdicts()` at read time from the run record, or
70
- * written directly by a standalone `verify_run`.
69
+ * filled in by `annotateVerdicts()` at read time from the run record. A
70
+ * standalone `verify_run` writes an evidence bundle, not a ledger row.
71
71
  */
72
72
  verified?: boolean;
73
73
  /** Evidence bundle id under the run directory, when a contract ran. */
74
74
  evidenceId?: string;
75
75
  contractId?: string;
76
- /** Kernel node kind this turn belonged to (`agent`, `council`, `verifier`, …). */
76
+ /** The kind of node this turn belonged to, when the caller said. Only fan-out does (`fanout`). */
77
77
  nodeKind?: string;
78
78
  /** Primary language detected from the repo's manifest. Detected, never guessed from prose. */
79
79
  repoLang?: string;
@@ -53,6 +53,12 @@ export declare class SessionManager {
53
53
  /** In-flight proxy startup, so concurrent callers share one server. */
54
54
  private _proxyStartPromise;
55
55
  private _activePids;
56
+ /**
57
+ * Each recorded pid's command line when it was recorded. An orphan is killed
58
+ * only if it is still that process: this is what lets cleanup recognise an
59
+ * ACP agent or a custom engine, whose binary is no fixed name.
60
+ */
61
+ private _pidCommands;
56
62
  private _circuitBreaker;
57
63
  private _inbox;
58
64
  /** cwd → detected language, so the manifest probe runs once per directory. */
@@ -92,6 +98,8 @@ export declare class SessionManager {
92
98
  private _doStartSession;
93
99
  private _startReservedSession;
94
100
  sendMessage(name: string, message: string, options?: SendOptions): Promise<SendResult>;
101
+ /** `onDispatch` fires once the turn has passed every check and is handed to the engine. */
102
+ private _sendTurn;
95
103
  /**
96
104
  * Continue a session's conversation in a new session on another engine.
97
105
  *
@@ -114,6 +122,7 @@ export declare class SessionManager {
114
122
  message?: string;
115
123
  maxChars?: number;
116
124
  customEngine?: SessionConfig['customEngine'];
125
+ acpAgent?: SessionConfig['acpAgent'];
117
126
  }): Promise<{
118
127
  name: string;
119
128
  engine: EngineType;
@@ -514,6 +523,7 @@ export declare class SessionManager {
514
523
  private _savePersisted;
515
524
  private _persistSession;
516
525
  private static PID_FILE;
526
+ private _forgetPid;
517
527
  private _savePids;
518
528
  /**
519
529
  * Verify that a PID belongs to a known coding CLI before killing it.
@@ -548,11 +558,26 @@ export declare class SessionManager {
548
558
  getCouncil(id: string): Council | undefined;
549
559
  /** The live council for a run, or a clear error about why there isn't one. */
550
560
  private _liveCouncil;
551
- councilAbort(id: string): void;
561
+ /**
562
+ * Abort a council running in this process. One that is not — finished, or
563
+ * running elsewhere — is left alone and the result says so: its worktrees are
564
+ * either awaiting accept/reject or in use by the process that runs it.
565
+ */
566
+ councilAbort(id: string): {
567
+ aborted: boolean;
568
+ state?: RunState;
569
+ reason?: string;
570
+ };
552
571
  councilInject(id: string, message: string): void;
553
572
  councilReview(id: string): Promise<CouncilReviewResult>;
554
573
  councilAccept(id: string): Promise<CouncilAcceptResult>;
555
574
  councilReject(id: string, feedback: string): Promise<CouncilRejectResult>;
575
+ /**
576
+ * Write the decision onto the run, which is where `council_status` reads it.
577
+ * The `Council` that took it is usually rebuilt from the record and dropped,
578
+ * so its own status would go nowhere.
579
+ */
580
+ private _recordCouncilDecision;
556
581
  /**
557
582
  * A `Council` for review / accept / reject.
558
583
  *
@@ -572,6 +597,14 @@ export declare class SessionManager {
572
597
  fanoutStatus(id: string): FanoutSession;
573
598
  fanoutAbort(id: string): void;
574
599
  private get _sessionLookup();
600
+ /**
601
+ * An inbox delivery is a turn like any other — capped, written to the run
602
+ * ledger and kept in the handoff record — that its sender does not wait on.
603
+ * Resolves once the turn reaches the engine; a refusal before that (spend cap,
604
+ * session stopped) rejects so the inbox queues the message instead. A failure
605
+ * after it belongs to the turn and is recorded with it.
606
+ */
607
+ private _deliverInboxTurn;
575
608
  sessionSendTo(from: string, to: string, message: string, summary?: string): Promise<{
576
609
  delivered: boolean;
577
610
  queued: boolean;
@@ -115,7 +115,7 @@ import { detectRepoLang } from './kernel/repo.js';
115
115
  import { RunKernel, runDir as kernelRunDir } from './kernel/engine.js';
116
116
  import { registerDefaultExecutors } from './kernel/nodes/index.js';
117
117
  import { autoloopStateFromRecord, makeAutoloopExecutor } from './kernel/nodes/autoloop.js';
118
- import { isValidRunId, loadRun, readNodeOutput } from './kernel/store.js';
118
+ import { isValidRunId, loadRun, readNodeOutput, runExists } from './kernel/store.js';
119
119
  import { LEGACY_NODE, joinFindings, toCouncilSession, toFanoutSession, toUltraplanResult, toUltrareviewResult, } from './kernel/projections.js';
120
120
  import { legacyCouncilWorkflow, legacyFanoutWorkflow, legacyUltraplanWorkflow, splitAgentSecrets, } from './kernel/templates/index.js';
121
121
  import { normalizeContract } from './verify/contract.js';
@@ -136,9 +136,10 @@ import { PersistentGrokSession } from './persistent-grok-session.js';
136
136
  import { PersistentOpencodeSession } from './persistent-opencode-session.js';
137
137
  import { PersistentAgySession } from './persistent-agy-session.js';
138
138
  import { PersistentCustomSession } from './persistent-custom-session.js';
139
+ import { PersistentAcpSession } from './persistent-acp-session.js';
139
140
  import { resolveCustomEngine } from './engine-presets.js';
140
141
  import { EFFORT_LEVELS, ENGINE_TYPES, overrideModelPricing, ENGINE_BINARY_NAMES, } from './types.js';
141
- import { resolveAlias, isClaudeModel, lookupModel } from './models.js';
142
+ import { resolveAlias, isClaudeModel, lookupModel, resolveEngineAndModel } from './models.js';
142
143
  import { isAgyConversationId } from './agy-conversation.js';
143
144
  import { Council } from './council.js';
144
145
  import { AutoloopRunner } from './autoloop/runner.js';
@@ -216,6 +217,15 @@ function readStoredAutoloopResumeContext(workspace, runId, originalSendTimeoutMs
216
217
  }
217
218
  return { effectiveSendTimeoutMs, pendingDispatch };
218
219
  }
220
+ /** A process's command line as `ps` prints it, or undefined when it cannot be read. */
221
+ function processCommand(pid) {
222
+ try {
223
+ return execFileSync('ps', ['-p', String(pid), '-o', 'command='], { encoding: 'utf8', timeout: 3_000 }).trim();
224
+ }
225
+ catch {
226
+ return undefined;
227
+ }
228
+ }
219
229
  function validateSendTimeoutIncrease(value, current) {
220
230
  validateAutoloopTimeoutConfig({ sendTimeoutMs: value });
221
231
  if (value <= current) {
@@ -318,8 +328,24 @@ function validateAutoloopRole(role, engine, customEngine) {
318
328
  throw new Error(`${label} custom engine config is required`);
319
329
  validateAutoloopCustomEngine(role, customEngine);
320
330
  }
331
+ // An Autoloop role is configured by engine name alone and has no field for the
332
+ // agent an `acp` engine starts, so the session could only fail later.
333
+ if (resolved === 'acp')
334
+ throw new Error(`${label} engine 'acp' is not supported by Autoloop`);
321
335
  return resolved;
322
336
  }
337
+ /**
338
+ * The plugin's `defaultModel` for a session on `engine` that names no model, or
339
+ * undefined to let the engine run its own default. Engines do not share a model
340
+ * namespace, so the default goes only to an engine that runs it; the claude
341
+ * engine takes any model, proxying a non-Claude one to the gateway.
342
+ */
343
+ function defaultModelFor(engine, defaultModel) {
344
+ if (!defaultModel || engine === 'claude')
345
+ return defaultModel;
346
+ const owner = resolveEngineAndModel(defaultModel).engine;
347
+ return owner === (engine === 'codex-app' ? 'codex' : engine) ? defaultModel : undefined;
348
+ }
323
349
  function validateAutoloopEffort(role, effort) {
324
350
  if (effort === undefined)
325
351
  return;
@@ -788,6 +814,12 @@ export class SessionManager {
788
814
  /** In-flight proxy startup, so concurrent callers share one server. */
789
815
  _proxyStartPromise = null;
790
816
  _activePids = new Map();
817
+ /**
818
+ * Each recorded pid's command line when it was recorded. An orphan is killed
819
+ * only if it is still that process: this is what lets cleanup recognise an
820
+ * ACP agent or a custom engine, whose binary is no fixed name.
821
+ */
822
+ _pidCommands = new Map();
791
823
  _circuitBreaker = new CircuitBreaker();
792
824
  _inbox = new InboxManager();
793
825
  /** cwd → detected language, so the manifest probe runs once per directory. */
@@ -928,6 +960,7 @@ export class SessionManager {
928
960
  const persisted = skipPersist ? undefined : this.persistedSessions.get(name);
929
961
  // Unified: only use resumeSessionId (claudeResumeId is an internal alias, not exposed)
930
962
  const resumeId = config.resumeSessionId ?? persisted?.claudeSessionId;
963
+ const engine = config.engine || persisted?.engine || 'claude';
931
964
  // ORDER IS LOAD-BEARING — do not "fix" it by moving `...config` up.
932
965
  //
933
966
  // Object spread copies own keys even when their value is `undefined`, so any
@@ -943,7 +976,7 @@ export class SessionManager {
943
976
  cwd: config.cwd || persisted?.cwd || process.cwd(),
944
977
  permissionMode: config.permissionMode || this.pluginConfig.defaultPermissionMode,
945
978
  effort: config.effort || this.pluginConfig.defaultEffort,
946
- model: config.model || persisted?.model || this.pluginConfig.defaultModel,
979
+ model: config.model || persisted?.model || defaultModelFor(engine, this.pluginConfig.defaultModel),
947
980
  sandboxMode: config.sandboxMode ?? persisted?.sandboxMode,
948
981
  autoCompactPercent: config.autoCompactPercent ?? persisted?.autoCompactPercent,
949
982
  chrome: config.chrome ?? persisted?.chrome,
@@ -954,16 +987,15 @@ export class SessionManager {
954
987
  if (fullConfig.model) {
955
988
  fullConfig.resolvedModel = this._resolveModel(fullConfig.model, fullConfig.modelOverrides);
956
989
  }
957
- // Auto-inject proxy baseUrl for non-Claude models on the claude engine.
958
- // Starts a local proxy server that converts Anthropic → OpenAI format
959
- // and forwards to the OpenClaw gateway. Zero config required.
960
- const engine = fullConfig.engine || persisted?.engine || 'claude';
961
990
  // Write the resolved engine back so downstream consumers of the managed
962
991
  // config (agy resume-id lookups, _persistSession's registry entry) see the
963
992
  // real engine even when it came from the persisted registry.
964
993
  fullConfig.engine = engine;
965
994
  // Circuit breaker — reject early if engine is in backoff
966
995
  this._circuitBreaker.check(engine);
996
+ // Auto-inject proxy baseUrl for non-Claude models on the claude engine.
997
+ // Starts a local proxy server that converts Anthropic → OpenAI format
998
+ // and forwards to the OpenClaw gateway. Zero config required.
967
999
  if (engine === 'claude' && fullConfig.resolvedModel && !fullConfig.baseUrl) {
968
1000
  if (!isClaudeModel(fullConfig.resolvedModel)) {
969
1001
  const proxyPort = await this._ensureProxyServer();
@@ -986,6 +1018,9 @@ export class SessionManager {
986
1018
  // Track child process PID for orphan cleanup
987
1019
  if (session.pid) {
988
1020
  this._activePids.set(name, session.pid);
1021
+ const command = processCommand(session.pid);
1022
+ if (command)
1023
+ this._pidCommands.set(session.pid, command);
989
1024
  this._savePids();
990
1025
  }
991
1026
  const managed = {
@@ -1007,6 +1042,10 @@ export class SessionManager {
1007
1042
  return this._toSessionInfo(name, managed);
1008
1043
  }
1009
1044
  async sendMessage(name, message, options = {}) {
1045
+ return this._sendTurn(name, message, options);
1046
+ }
1047
+ /** `onDispatch` fires once the turn has passed every check and is handed to the engine. */
1048
+ async _sendTurn(name, message, options, onDispatch) {
1010
1049
  const managed = this._getSession(name);
1011
1050
  // Per-session serialization. Two concurrent sendMessage() calls on the
1012
1051
  // same session previously raced on PersistentClaudeSession._streamCallbacks
@@ -1102,7 +1141,14 @@ export class SessionManager {
1102
1141
  // A session handed off from another engine carries that conversation in
1103
1142
  // front of its first message; after that the engine holds it itself.
1104
1143
  const outgoing = managed.pendingHandoff ? `${managed.pendingHandoff}\n\n${message}` : message;
1144
+ onDispatch?.();
1105
1145
  const result = await managed.session.send(outgoing, sendOpts);
1146
+ const after = this._statsSnapshot(managed);
1147
+ const usage = {
1148
+ tokensIn: Math.max(0, after.tokensIn - ledgerBefore.tokensIn),
1149
+ tokensOut: Math.max(0, after.tokensOut - ledgerBefore.tokensOut),
1150
+ costUsd: Math.max(0, after.costUsd - ledgerBefore.costUsd),
1151
+ };
1106
1152
  // Update the resume-capable session ID if available (skip disk persist
1107
1153
  // for ephemeral sessions that were started with skipPersistence)
1108
1154
  const resumableId = this._managedResumeId(managed);
@@ -1144,11 +1190,12 @@ export class SessionManager {
1144
1190
  sessionId: this._managedResumeId(managed),
1145
1191
  error: turnError,
1146
1192
  events: [],
1193
+ usage,
1147
1194
  ...(permissionDenials.length ? { permissionDenials } : {}),
1148
1195
  ...(images.length ? { images } : {}),
1149
1196
  };
1150
1197
  }
1151
- return { output: '', sessionId: this._managedResumeId(managed), events: [] };
1198
+ return { output: '', sessionId: this._managedResumeId(managed), events: [], usage };
1152
1199
  }
1153
1200
  catch (err) {
1154
1201
  turnError = err.message;
@@ -1218,6 +1265,7 @@ export class SessionManager {
1218
1265
  engine: opts.engine,
1219
1266
  ...(opts.model ? { model: opts.model } : {}),
1220
1267
  ...(opts.customEngine ? { customEngine: opts.customEngine } : {}),
1268
+ ...(opts.acpAgent ? { acpAgent: opts.acpAgent } : {}),
1221
1269
  });
1222
1270
  const target = this._getSession(targetName);
1223
1271
  // The new session's record starts as the source's, so a second handoff from
@@ -1533,6 +1581,11 @@ export class SessionManager {
1533
1581
  if (!contract)
1534
1582
  throw new Error('verifyRun requires a contract with at least one recognised check');
1535
1583
  const runId = args.label || `verify-${Date.now().toString(36)}`;
1584
+ // The bundle goes under the run store, keyed by the label. A label naming a
1585
+ // workflow run would plant this evidence in that run's directory.
1586
+ if (runExists(runId)) {
1587
+ throw new Error(`verify_run label '${runId}' names an existing workflow run; choose another label`);
1588
+ }
1536
1589
  const dir = kernelRunDir(runId);
1537
1590
  const evidenceId = 'verify-01';
1538
1591
  const { results, rounds } = await runContract(contract, {
@@ -1559,7 +1612,7 @@ export class SessionManager {
1559
1612
  managed.session.stop();
1560
1613
  this.sessions.delete(name);
1561
1614
  // Remove PID tracking
1562
- this._activePids.delete(name);
1615
+ this._forgetPid(name);
1563
1616
  this._savePids();
1564
1617
  if (!opts.keepPersisted) {
1565
1618
  // Explicit stop = user intent to end session — remove from disk too.
@@ -1568,6 +1621,9 @@ export class SessionManager {
1568
1621
  // Claude conversation) pass keepPersisted: true.
1569
1622
  this._forgetPersisted(name);
1570
1623
  this._savePersisted();
1624
+ // Its unread mail was for this conversation; a later session that takes
1625
+ // the name is a different one and must not receive it.
1626
+ this._inbox.clear(name);
1571
1627
  }
1572
1628
  }
1573
1629
  hasSession(name) {
@@ -1960,6 +2016,7 @@ export class SessionManager {
1960
2016
  this.sessions.clear();
1961
2017
  // Clear PID tracking
1962
2018
  this._activePids.clear();
2019
+ this._pidCommands.clear();
1963
2020
  this._savePids();
1964
2021
  // Stop proxy server
1965
2022
  if (this._proxyServer) {
@@ -2435,6 +2492,12 @@ export class SessionManager {
2435
2492
  }
2436
2493
  // ─── PID Tracking ──────────────────────────────────────────────────────
2437
2494
  static PID_FILE = path.join(os.homedir(), '.openclaw', 'session-pids.json');
2495
+ _forgetPid(name) {
2496
+ const pid = this._activePids.get(name);
2497
+ if (pid !== undefined)
2498
+ this._pidCommands.delete(pid);
2499
+ this._activePids.delete(name);
2500
+ }
2438
2501
  _savePids() {
2439
2502
  try {
2440
2503
  const dir = path.dirname(SessionManager.PID_FILE);
@@ -2478,11 +2541,13 @@ export class SessionManager {
2478
2541
  pid: entry.pid,
2479
2542
  ownerPid: entry.ownerPid,
2480
2543
  since: entry.since ?? now,
2544
+ ...(typeof entry.command === 'string' ? { command: entry.command } : {}),
2481
2545
  };
2482
2546
  }
2483
2547
  // Add OUR current entries
2484
2548
  for (const [name, pid] of this._activePids) {
2485
- merged[name] = { pid, ownerPid: process.pid, since: now };
2549
+ const command = this._pidCommands.get(pid);
2550
+ merged[name] = { pid, ownerPid: process.pid, since: now, ...(command ? { command } : {}) };
2486
2551
  }
2487
2552
  fs.writeFileSync(SessionManager.PID_FILE, JSON.stringify(merged));
2488
2553
  }
@@ -2494,7 +2559,7 @@ export class SessionManager {
2494
2559
  * Verify that a PID belongs to a known coding CLI before killing it.
2495
2560
  * Prevents killing unrelated processes if the OS recycled the PID.
2496
2561
  */
2497
- _isKnownCliProcess(pid) {
2562
+ _isKnownCliProcess(pid, recordedCommand) {
2498
2563
  // Match known CLI binaries by basename to avoid false positives
2499
2564
  // (e.g., 'agent' must not match 'ssh-agent' or 'gpg-agent')
2500
2565
  // Anchor each name to executable/path position ((?:^|[/\s])name(?:[\s/]|$))
@@ -2509,16 +2574,14 @@ export class SessionManager {
2509
2574
  ...ENGINE_BINARY_NAMES.map((bin) => new RegExp(`(?:^|[/\\s])${bin}(?:[\\s/]|$)`)),
2510
2575
  /(?:^|\/)agent(?:[\s/]|$)/, // 'agent' only as executable/after a slash (not ssh-agent)
2511
2576
  ];
2512
- try {
2513
- const cmd = execFileSync('ps', ['-p', String(pid), '-o', 'command='], {
2514
- encoding: 'utf8',
2515
- timeout: 3_000,
2516
- }).trim();
2517
- return knownPatterns.some((pattern) => pattern.test(cmd));
2518
- }
2519
- catch {
2577
+ const cmd = processCommand(pid);
2578
+ if (cmd === undefined)
2520
2579
  return false; // ps failed — process likely dead or not accessible
2521
- }
2580
+ // The same command line as when it was recorded: the process itself, not a
2581
+ // recycled pid — whatever binary it runs.
2582
+ if (recordedCommand && cmd === recordedCommand)
2583
+ return true;
2584
+ return knownPatterns.some((pattern) => pattern.test(cmd));
2522
2585
  }
2523
2586
  _cleanupOrphanedPids() {
2524
2587
  try {
@@ -2529,6 +2592,7 @@ export class SessionManager {
2529
2592
  // Resolve entry shape: legacy = number; current = { pid, ownerPid, since }.
2530
2593
  let pid;
2531
2594
  let ownerPid;
2595
+ let recordedCommand;
2532
2596
  if (typeof raw === 'number') {
2533
2597
  pid = raw;
2534
2598
  ownerPid = null; // unknown owner — treat conservatively (skip kill)
@@ -2539,6 +2603,7 @@ export class SessionManager {
2539
2603
  continue;
2540
2604
  pid = e.pid;
2541
2605
  ownerPid = typeof e.ownerPid === 'number' ? e.ownerPid : null;
2606
+ recordedCommand = typeof e.command === 'string' ? e.command : undefined;
2542
2607
  }
2543
2608
  else {
2544
2609
  continue;
@@ -2571,7 +2636,7 @@ export class SessionManager {
2571
2636
  try {
2572
2637
  process.kill(pid, 0); // check if alive
2573
2638
  // Alive — but verify it's actually a coding CLI, not a recycled PID
2574
- if (!this._isKnownCliProcess(pid)) {
2639
+ if (!this._isKnownCliProcess(pid, recordedCommand)) {
2575
2640
  this.logger.info(`PID ${pid} (session: ${name}) is alive but not a known CLI — skipping kill`);
2576
2641
  continue;
2577
2642
  }
@@ -2676,6 +2741,10 @@ export class SessionManager {
2676
2741
  if (engine === 'codex-app') {
2677
2742
  return session.codexThreadId;
2678
2743
  }
2744
+ // Likewise an ACP session's `sessionId` is ours; the agent resumes its own.
2745
+ if (engine === 'acp') {
2746
+ return session.agentSessionId;
2747
+ }
2679
2748
  return session.sessionId;
2680
2749
  }
2681
2750
  _storedResumeId(engine, id) {
@@ -2687,6 +2756,8 @@ export class SessionManager {
2687
2756
  return id && !/^grok-\d+-/.test(id) ? id : undefined;
2688
2757
  if (engine === 'codex-app')
2689
2758
  return id && !id.startsWith('codex-app-') ? id : undefined;
2759
+ if (engine === 'acp')
2760
+ return id && !id.startsWith('acp-') ? id : undefined;
2690
2761
  return id;
2691
2762
  }
2692
2763
  _listMdFiles(dir) {
@@ -2728,6 +2799,8 @@ export class SessionManager {
2728
2799
  if (!config.customEngine)
2729
2800
  throw new Error('customEngine config is required for engine type "custom"');
2730
2801
  return new PersistentCustomSession(config);
2802
+ case 'acp':
2803
+ return new PersistentAcpSession(config);
2731
2804
  case 'claude':
2732
2805
  default:
2733
2806
  return new PersistentClaudeSession(config, this.pluginConfig.claudeBin);
@@ -2795,12 +2868,26 @@ export class SessionManager {
2795
2868
  throw new Error(`Council '${id}' not found`);
2796
2869
  throw new Error(`Council '${id}' is ${record.state} and not running in this process — its record is readable, but there is no live round to act on`);
2797
2870
  }
2871
+ /**
2872
+ * Abort a council running in this process. One that is not — finished, or
2873
+ * running elsewhere — is left alone and the result says so: its worktrees are
2874
+ * either awaiting accept/reject or in use by the process that runs it.
2875
+ */
2798
2876
  councilAbort(id) {
2799
2877
  // Cancel the run first so the kernel stops advancing, then abort the engine
2800
2878
  // so the current round tears down its worktrees.
2801
- if (!this.kernel.cancel(id) && !loadRun(id))
2879
+ if (this.kernel.cancel(id)) {
2880
+ this.kernel.handle(id, LEGACY_NODE)?.abort();
2881
+ return { aborted: true };
2882
+ }
2883
+ const record = loadRun(id);
2884
+ if (!record)
2802
2885
  throw new Error(`Council '${id}' not found`);
2803
- this.kernel.handle(id, LEGACY_NODE)?.abort();
2886
+ return {
2887
+ aborted: false,
2888
+ state: record.state,
2889
+ reason: `Council '${id}' is ${record.state} and not running in this process — nothing was aborted`,
2890
+ };
2804
2891
  }
2805
2892
  councilInject(id, message) {
2806
2893
  this._liveCouncil(id).injectMessage(message);
@@ -2809,10 +2896,34 @@ export class SessionManager {
2809
2896
  return this._councilForPostProcessing(id).review();
2810
2897
  }
2811
2898
  async councilAccept(id) {
2812
- return this._councilForPostProcessing(id).accept();
2899
+ const result = await this._councilForPostProcessing(id).accept();
2900
+ this._recordCouncilDecision(id, 'accepted');
2901
+ return result;
2813
2902
  }
2814
2903
  async councilReject(id, feedback) {
2815
- return this._councilForPostProcessing(id).reject(feedback);
2904
+ const result = await this._councilForPostProcessing(id).reject(feedback);
2905
+ this._recordCouncilDecision(id, 'rejected');
2906
+ return result;
2907
+ }
2908
+ /**
2909
+ * Write the decision onto the run, which is where `council_status` reads it.
2910
+ * The `Council` that took it is usually rebuilt from the record and dropped,
2911
+ * so its own status would go nowhere.
2912
+ */
2913
+ _recordCouncilDecision(id, status) {
2914
+ // A council live in this process carries the status on its own session.
2915
+ if (this.kernel.handle(id, LEGACY_NODE))
2916
+ return;
2917
+ let recorded = false;
2918
+ let why = 'the run has not finished';
2919
+ try {
2920
+ recorded = this.kernel.amendFinishedNode(id, LEGACY_NODE, { councilStatus: status }, `council ${status}`);
2921
+ }
2922
+ catch (err) {
2923
+ why = err.message;
2924
+ }
2925
+ if (!recorded)
2926
+ this.logger.warn(`[council] ${id}: ${status}, but the status could not be recorded (${why})`);
2816
2927
  }
2817
2928
  /**
2818
2929
  * A `Council` for review / accept / reject.
@@ -2861,6 +2972,7 @@ export class SessionManager {
2861
2972
  synthesize: config.synthesize,
2862
2973
  synthesisEngine: config.synthesisEngine,
2863
2974
  synthesisModel: config.synthesisModel,
2975
+ synthesisAcpAgent: config.synthesisAcpAgent,
2864
2976
  synthesisPermissionMode: config.synthesisPermissionMode,
2865
2977
  maxTurnsPerAgent: config.maxTurnsPerAgent,
2866
2978
  maxBudgetUsd: config.maxBudgetUsd,
@@ -2886,8 +2998,30 @@ export class SessionManager {
2886
2998
  getSession: (name) => this.sessions.get(name),
2887
2999
  exists: (name) => this.sessions.has(name),
2888
3000
  allNames: () => this.sessions.keys(),
3001
+ deliver: (name, text) => this._deliverInboxTurn(name, text),
2889
3002
  };
2890
3003
  }
3004
+ /**
3005
+ * An inbox delivery is a turn like any other — capped, written to the run
3006
+ * ledger and kept in the handoff record — that its sender does not wait on.
3007
+ * Resolves once the turn reaches the engine; a refusal before that (spend cap,
3008
+ * session stopped) rejects so the inbox queues the message instead. A failure
3009
+ * after it belongs to the turn and is recorded with it.
3010
+ */
3011
+ _deliverInboxTurn(name, text) {
3012
+ return new Promise((resolve, reject) => {
3013
+ let dispatched = false;
3014
+ this._sendTurn(name, text, {}, () => {
3015
+ dispatched = true;
3016
+ resolve();
3017
+ }).then(() => resolve(), (err) => {
3018
+ if (!dispatched)
3019
+ reject(err);
3020
+ else
3021
+ this.logger.warn(`[SessionManager] inbox turn on '${name}' failed: ${err.message}`);
3022
+ });
3023
+ });
3024
+ }
2891
3025
  async sessionSendTo(from, to, message, summary) {
2892
3026
  return this._inbox.sendTo(from, to, message, this._sessionLookup, summary, (name, err) => {
2893
3027
  this.logger.error(`Broadcast delivery to '${name}' failed:`, err.message);
@@ -2963,10 +3097,14 @@ export class SessionManager {
2963
3097
  // Every reviewer runs read-only (see below). A custom reviewer has no config
2964
3098
  // to start from, so it is turned away here instead of failing one reviewer
2965
3099
  // at a time. (grok was turned away too until its read-only mode moved onto
2966
- // grok's OS sandbox.)
3100
+ // grok's OS sandbox.) An ACP agent cannot be held read-only at all: its tools
3101
+ // run inside the agent, so the session would refuse to start.
2967
3102
  if ((opts?.engines ?? []).includes('custom')) {
2968
3103
  throw new Error('ultrareview cannot use custom: reviewers run read-only, which a custom engine cannot be configured for here');
2969
3104
  }
3105
+ if ((opts?.engines ?? []).includes('acp')) {
3106
+ throw new Error('ultrareview cannot use acp: reviewers run read-only, which an ACP agent cannot be held to');
3107
+ }
2970
3108
  const id = `ultrareview-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
2971
3109
  const agentCount = Math.min(20, Math.max(1, opts?.agentCount || 5));
2972
3110
  const result = {
@@ -3095,9 +3233,10 @@ export class SessionManager {
3095
3233
  // Review is read-only: reviewers analyse and report without modifying the
3096
3234
  // very code they review. Unlike council, fan-out shares the project dir —
3097
3235
  // there is no worktree to contain an edit — so this has to hold on every
3098
- // engine. `plan` constrains Claude only; `sandboxMode: 'read-only'` is the
3099
- // engine-agnostic setting, which codex, agy and opencode map to their own
3100
- // read-only modes. Before it was set, a codex reviewer ran workspace-write.
3236
+ // engine. `plan` reaches only the engines with a plan mode (Claude, Grok);
3237
+ // `sandboxMode: 'read-only'` is the engine-agnostic setting, which codex,
3238
+ // agy and opencode map to their own read-only modes. Before it was set, a
3239
+ // codex reviewer ran workspace-write.
3101
3240
  permissionMode: 'plan',
3102
3241
  sandboxMode: 'read-only',
3103
3242
  }));
@@ -3858,7 +3997,7 @@ export class SessionManager {
3858
3997
  // owner. After an unclean exit `_cleanupOrphanedPids()` reads them back
3859
3998
  // and probes each one; a PID the OS has since recycled to a
3860
3999
  // coding-CLI-shaped process gets killed.
3861
- this._activePids.delete(name);
4000
+ this._forgetPid(name);
3862
4001
  pidsChanged = true;
3863
4002
  // NOTE: do NOT delete from persistedSessions — idle cleanup is
3864
4003
  // in-memory only. Persisted entries survive for PERSIST_DISK_TTL_MS