@acpus/runtime 0.7.1 → 0.9.0-alpha.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 (289) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/admission/input.d.ts +5 -0
  3. package/dist/admission/input.d.ts.map +1 -0
  4. package/dist/admission/input.js +17 -0
  5. package/dist/admission/input.js.map +1 -0
  6. package/dist/artifacts/rewrite.d.ts +7 -0
  7. package/dist/artifacts/rewrite.d.ts.map +1 -0
  8. package/dist/artifacts/rewrite.js +28 -0
  9. package/dist/artifacts/rewrite.js.map +1 -0
  10. package/dist/control/agent-overrides.d.ts +4 -0
  11. package/dist/control/agent-overrides.d.ts.map +1 -0
  12. package/dist/control/agent-overrides.js +40 -0
  13. package/dist/control/agent-overrides.js.map +1 -0
  14. package/dist/daemon/loop.d.ts +16 -0
  15. package/dist/daemon/loop.d.ts.map +1 -0
  16. package/dist/daemon/loop.js +191 -0
  17. package/dist/daemon/loop.js.map +1 -0
  18. package/dist/daemon/sessions.d.ts +23 -0
  19. package/dist/daemon/sessions.d.ts.map +1 -0
  20. package/dist/daemon/sessions.js +190 -0
  21. package/dist/daemon/sessions.js.map +1 -0
  22. package/dist/daemon/socket.d.ts +82 -0
  23. package/dist/daemon/socket.d.ts.map +1 -0
  24. package/dist/daemon/socket.js +341 -0
  25. package/dist/daemon/socket.js.map +1 -0
  26. package/dist/daemon/tick.d.ts +9 -0
  27. package/dist/daemon/tick.d.ts.map +1 -0
  28. package/dist/daemon/tick.js +18 -0
  29. package/dist/daemon/tick.js.map +1 -0
  30. package/dist/evaluation/admissible.d.ts +2 -0
  31. package/dist/evaluation/admissible.d.ts.map +1 -0
  32. package/dist/evaluation/admissible.js +50 -0
  33. package/dist/evaluation/admissible.js.map +1 -0
  34. package/dist/evaluation/evaluator.d.ts +14 -0
  35. package/dist/evaluation/evaluator.d.ts.map +1 -0
  36. package/dist/evaluation/evaluator.js +34 -0
  37. package/dist/evaluation/evaluator.js.map +1 -0
  38. package/dist/evaluation/loop-limit.d.ts +4 -0
  39. package/dist/evaluation/loop-limit.d.ts.map +1 -0
  40. package/dist/evaluation/loop-limit.js +9 -0
  41. package/dist/evaluation/loop-limit.js.map +1 -0
  42. package/dist/evaluation/schema.d.ts +4 -0
  43. package/dist/evaluation/schema.d.ts.map +1 -0
  44. package/dist/evaluation/schema.js +92 -0
  45. package/dist/evaluation/schema.js.map +1 -0
  46. package/dist/execution/advance.d.ts +18 -0
  47. package/dist/execution/advance.d.ts.map +1 -0
  48. package/dist/execution/advance.js +57 -0
  49. package/dist/execution/advance.js.map +1 -0
  50. package/dist/execution/agent-node.d.ts +23 -0
  51. package/dist/execution/agent-node.d.ts.map +1 -0
  52. package/dist/execution/agent-node.js +512 -0
  53. package/dist/execution/agent-node.js.map +1 -0
  54. package/dist/execution/duration.d.ts +2 -0
  55. package/dist/execution/duration.d.ts.map +1 -0
  56. package/dist/execution/duration.js +15 -0
  57. package/dist/execution/duration.js.map +1 -0
  58. package/dist/execution/ir.d.ts +3 -0
  59. package/dist/execution/ir.d.ts.map +1 -0
  60. package/dist/execution/ir.js +46 -0
  61. package/dist/execution/ir.js.map +1 -0
  62. package/dist/execution/scheduler.d.ts +59 -0
  63. package/dist/execution/scheduler.d.ts.map +1 -0
  64. package/dist/execution/scheduler.js +306 -0
  65. package/dist/execution/scheduler.js.map +1 -0
  66. package/dist/execution/task-executor.d.ts +14 -0
  67. package/dist/execution/task-executor.d.ts.map +1 -0
  68. package/dist/execution/task-executor.js +186 -0
  69. package/dist/execution/task-executor.js.map +1 -0
  70. package/dist/hooks/config.d.ts +32 -0
  71. package/dist/hooks/config.d.ts.map +1 -0
  72. package/dist/hooks/config.js +112 -0
  73. package/dist/hooks/config.js.map +1 -0
  74. package/dist/hooks/context.d.ts +50 -0
  75. package/dist/hooks/context.d.ts.map +1 -0
  76. package/dist/hooks/context.js +116 -0
  77. package/dist/hooks/context.js.map +1 -0
  78. package/dist/hooks/events.d.ts +22 -0
  79. package/dist/hooks/events.d.ts.map +1 -0
  80. package/dist/hooks/events.js +41 -0
  81. package/dist/hooks/events.js.map +1 -0
  82. package/dist/hooks/journal.d.ts +21 -19
  83. package/dist/hooks/journal.d.ts.map +1 -1
  84. package/dist/hooks/journal.js +1 -48
  85. package/dist/hooks/journal.js.map +1 -1
  86. package/dist/hooks/loader.d.ts +33 -39
  87. package/dist/hooks/loader.d.ts.map +1 -1
  88. package/dist/hooks/loader.js +79 -95
  89. package/dist/hooks/loader.js.map +1 -1
  90. package/dist/hooks/runner.d.ts +14 -41
  91. package/dist/hooks/runner.d.ts.map +1 -1
  92. package/dist/hooks/runner.js +177 -145
  93. package/dist/hooks/runner.js.map +1 -1
  94. package/dist/index.d.ts +13 -28
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +13 -33
  97. package/dist/index.js.map +1 -1
  98. package/dist/runs/advance-runtime.d.ts +50 -0
  99. package/dist/runs/advance-runtime.d.ts.map +1 -0
  100. package/dist/runs/advance-runtime.js +82 -0
  101. package/dist/runs/advance-runtime.js.map +1 -0
  102. package/dist/runs/use-cases.d.ts +111 -0
  103. package/dist/runs/use-cases.d.ts.map +1 -0
  104. package/dist/runs/use-cases.js +539 -0
  105. package/dist/runs/use-cases.js.map +1 -0
  106. package/dist/scheduler/advance.d.ts +65 -0
  107. package/dist/scheduler/advance.d.ts.map +1 -0
  108. package/dist/scheduler/advance.js +435 -0
  109. package/dist/scheduler/advance.js.map +1 -0
  110. package/dist/scheduler/control.d.ts +49 -0
  111. package/dist/scheduler/control.d.ts.map +1 -0
  112. package/dist/scheduler/control.js +212 -0
  113. package/dist/scheduler/control.js.map +1 -0
  114. package/dist/scheduler/event-codec.d.ts +4 -0
  115. package/dist/scheduler/event-codec.d.ts.map +1 -0
  116. package/dist/scheduler/event-codec.js +57 -0
  117. package/dist/scheduler/event-codec.js.map +1 -0
  118. package/dist/scheduler/events.d.ts +193 -0
  119. package/dist/scheduler/events.d.ts.map +1 -0
  120. package/dist/scheduler/events.js +13 -0
  121. package/dist/scheduler/events.js.map +1 -0
  122. package/dist/scheduler/fork-seed.d.ts +38 -0
  123. package/dist/scheduler/fork-seed.d.ts.map +1 -0
  124. package/dist/scheduler/fork-seed.js +590 -0
  125. package/dist/scheduler/fork-seed.js.map +1 -0
  126. package/dist/scheduler/identity.d.ts +8 -0
  127. package/dist/scheduler/identity.d.ts.map +1 -0
  128. package/dist/scheduler/identity.js +49 -0
  129. package/dist/scheduler/identity.js.map +1 -0
  130. package/dist/scheduler/ir-walk.d.ts +3 -0
  131. package/dist/scheduler/ir-walk.d.ts.map +1 -0
  132. package/dist/scheduler/ir-walk.js +25 -0
  133. package/dist/scheduler/ir-walk.js.map +1 -0
  134. package/dist/scheduler/limiter.d.ts +7 -0
  135. package/dist/scheduler/limiter.d.ts.map +1 -0
  136. package/dist/scheduler/limiter.js +10 -0
  137. package/dist/scheduler/limiter.js.map +1 -0
  138. package/dist/scheduler/materialize.d.ts +7 -0
  139. package/dist/scheduler/materialize.d.ts.map +1 -0
  140. package/dist/scheduler/materialize.js +756 -0
  141. package/dist/scheduler/materialize.js.map +1 -0
  142. package/dist/scheduler/membership.d.ts +12 -0
  143. package/dist/scheduler/membership.d.ts.map +1 -0
  144. package/dist/scheduler/membership.js +74 -0
  145. package/dist/scheduler/membership.js.map +1 -0
  146. package/dist/scheduler/node-executor.d.ts +15 -0
  147. package/dist/scheduler/node-executor.d.ts.map +1 -0
  148. package/dist/scheduler/node-executor.js +69 -0
  149. package/dist/scheduler/node-executor.js.map +1 -0
  150. package/dist/scheduler/runtime-runner.d.ts +44 -0
  151. package/dist/scheduler/runtime-runner.d.ts.map +1 -0
  152. package/dist/scheduler/runtime-runner.js +155 -0
  153. package/dist/scheduler/runtime-runner.js.map +1 -0
  154. package/dist/scheduler/scope.d.ts +6 -0
  155. package/dist/scheduler/scope.d.ts.map +1 -0
  156. package/dist/scheduler/scope.js +56 -0
  157. package/dist/scheduler/scope.js.map +1 -0
  158. package/dist/scheduler/store-port.d.ts +211 -0
  159. package/dist/scheduler/store-port.d.ts.map +1 -0
  160. package/dist/scheduler/store-port.js +28 -0
  161. package/dist/scheduler/store-port.js.map +1 -0
  162. package/dist/scheduler/transitions.d.ts +89 -0
  163. package/dist/scheduler/transitions.d.ts.map +1 -0
  164. package/dist/scheduler/transitions.js +967 -0
  165. package/dist/scheduler/transitions.js.map +1 -0
  166. package/dist/scheduler/types.d.ts +146 -0
  167. package/dist/scheduler/types.d.ts.map +1 -0
  168. package/dist/{executors → scheduler}/types.js.map +1 -1
  169. package/dist/store/store.d.ts +390 -0
  170. package/dist/store/store.d.ts.map +1 -0
  171. package/dist/store/store.js +3053 -0
  172. package/dist/store/store.js.map +1 -0
  173. package/dist/visualization/overlay.d.ts +86 -0
  174. package/dist/visualization/overlay.d.ts.map +1 -0
  175. package/dist/visualization/overlay.js +161 -0
  176. package/dist/visualization/overlay.js.map +1 -0
  177. package/package.json +19 -37
  178. package/README.md +0 -7
  179. package/dist/agent-telemetry.d.ts +0 -56
  180. package/dist/agent-telemetry.d.ts.map +0 -1
  181. package/dist/agent-telemetry.js +0 -304
  182. package/dist/agent-telemetry.js.map +0 -1
  183. package/dist/artifacts.d.ts +0 -45
  184. package/dist/artifacts.d.ts.map +0 -1
  185. package/dist/artifacts.js +0 -163
  186. package/dist/artifacts.js.map +0 -1
  187. package/dist/attempt-artifacts.d.ts +0 -35
  188. package/dist/attempt-artifacts.d.ts.map +0 -1
  189. package/dist/attempt-artifacts.js +0 -90
  190. package/dist/attempt-artifacts.js.map +0 -1
  191. package/dist/client.d.ts +0 -82
  192. package/dist/client.d.ts.map +0 -1
  193. package/dist/client.js +0 -200
  194. package/dist/client.js.map +0 -1
  195. package/dist/evaluator.d.ts +0 -36
  196. package/dist/evaluator.d.ts.map +0 -1
  197. package/dist/evaluator.js +0 -101
  198. package/dist/evaluator.js.map +0 -1
  199. package/dist/executors/agent.d.ts +0 -101
  200. package/dist/executors/agent.d.ts.map +0 -1
  201. package/dist/executors/agent.js +0 -508
  202. package/dist/executors/agent.js.map +0 -1
  203. package/dist/executors/mock-program.d.ts +0 -26
  204. package/dist/executors/mock-program.d.ts.map +0 -1
  205. package/dist/executors/mock-program.js +0 -100
  206. package/dist/executors/mock-program.js.map +0 -1
  207. package/dist/executors/output-preview.d.ts +0 -2
  208. package/dist/executors/output-preview.d.ts.map +0 -1
  209. package/dist/executors/output-preview.js +0 -20
  210. package/dist/executors/output-preview.js.map +0 -1
  211. package/dist/executors/program.d.ts +0 -30
  212. package/dist/executors/program.d.ts.map +0 -1
  213. package/dist/executors/program.js +0 -230
  214. package/dist/executors/program.js.map +0 -1
  215. package/dist/executors/types.d.ts +0 -32
  216. package/dist/executors/types.d.ts.map +0 -1
  217. package/dist/fork.d.ts +0 -74
  218. package/dist/fork.d.ts.map +0 -1
  219. package/dist/fork.js +0 -278
  220. package/dist/fork.js.map +0 -1
  221. package/dist/hooks/payload.d.ts +0 -17
  222. package/dist/hooks/payload.d.ts.map +0 -1
  223. package/dist/hooks/payload.js +0 -45
  224. package/dist/hooks/payload.js.map +0 -1
  225. package/dist/interpreter.d.ts +0 -168
  226. package/dist/interpreter.d.ts.map +0 -1
  227. package/dist/interpreter.js +0 -1747
  228. package/dist/interpreter.js.map +0 -1
  229. package/dist/keys.d.ts +0 -77
  230. package/dist/keys.d.ts.map +0 -1
  231. package/dist/keys.js +0 -375
  232. package/dist/keys.js.map +0 -1
  233. package/dist/run-control.d.ts +0 -45
  234. package/dist/run-control.d.ts.map +0 -1
  235. package/dist/run-control.js +0 -255
  236. package/dist/run-control.js.map +0 -1
  237. package/dist/run-id.d.ts +0 -3
  238. package/dist/run-id.d.ts.map +0 -1
  239. package/dist/run-id.js +0 -10
  240. package/dist/run-id.js.map +0 -1
  241. package/dist/state-machine.d.ts +0 -31
  242. package/dist/state-machine.d.ts.map +0 -1
  243. package/dist/state-machine.js +0 -102
  244. package/dist/state-machine.js.map +0 -1
  245. package/dist/store.d.ts +0 -92
  246. package/dist/store.d.ts.map +0 -1
  247. package/dist/store.js +0 -420
  248. package/dist/store.js.map +0 -1
  249. package/dist/supervisor-app.d.ts +0 -27
  250. package/dist/supervisor-app.d.ts.map +0 -1
  251. package/dist/supervisor-app.js +0 -694
  252. package/dist/supervisor-app.js.map +0 -1
  253. package/dist/supervisor-discovery.d.ts +0 -18
  254. package/dist/supervisor-discovery.d.ts.map +0 -1
  255. package/dist/supervisor-discovery.js +0 -180
  256. package/dist/supervisor-discovery.js.map +0 -1
  257. package/dist/supervisor-entry.d.ts +0 -11
  258. package/dist/supervisor-entry.d.ts.map +0 -1
  259. package/dist/supervisor-entry.js +0 -50
  260. package/dist/supervisor-entry.js.map +0 -1
  261. package/dist/supervisor-lock.d.ts +0 -26
  262. package/dist/supervisor-lock.d.ts.map +0 -1
  263. package/dist/supervisor-lock.js +0 -49
  264. package/dist/supervisor-lock.js.map +0 -1
  265. package/dist/supervisor-runner.d.ts +0 -11
  266. package/dist/supervisor-runner.d.ts.map +0 -1
  267. package/dist/supervisor-runner.js +0 -128
  268. package/dist/supervisor-runner.js.map +0 -1
  269. package/dist/types.d.ts +0 -375
  270. package/dist/types.d.ts.map +0 -1
  271. package/dist/types.js +0 -7
  272. package/dist/types.js.map +0 -1
  273. package/dist/validate-input.d.ts +0 -27
  274. package/dist/validate-input.d.ts.map +0 -1
  275. package/dist/validate-input.js +0 -56
  276. package/dist/validate-input.js.map +0 -1
  277. package/dist/validate-signal.d.ts +0 -14
  278. package/dist/validate-signal.d.ts.map +0 -1
  279. package/dist/validate-signal.js +0 -31
  280. package/dist/validate-signal.js.map +0 -1
  281. package/dist/workflow-context.d.ts +0 -4
  282. package/dist/workflow-context.d.ts.map +0 -1
  283. package/dist/workflow-context.js +0 -11
  284. package/dist/workflow-context.js.map +0 -1
  285. package/dist/workflow-outputs.d.ts +0 -9
  286. package/dist/workflow-outputs.d.ts.map +0 -1
  287. package/dist/workflow-outputs.js +0 -60
  288. package/dist/workflow-outputs.js.map +0 -1
  289. /package/dist/{executors → scheduler}/types.js +0 -0
@@ -1,101 +0,0 @@
1
- import type { ExpressionContext, ExecutorResult } from "../types.js";
2
- import type { AgentExecutionRequest, ExecutorAdapter } from "./types.js";
3
- import { ExpressionEvaluator } from "../evaluator.js";
4
- /**
5
- * Drives an ACP agent through the `acpx` CLI. Acpus owns scheduling/state;
6
- * acpx owns the ACP saved-session lifecycle and dead-pid recovery.
7
- *
8
- * - Session name is derived from the resolved node key (stable, unique per
9
- * loop round / fanout lane / subworkflow nesting).
10
- * - First run: `sessions ensure` then `prompt -s <session>` with the rendered
11
- * prompt; continuation: same session with a fixed continuation prompt.
12
- * - Cancel is cooperative: on abort we run `acpx cancel -s <session>` and wait
13
- * for the in-flight prompt to settle (SIGKILL only as a last resort).
14
- * - Output is the concatenation of `agent_message_chunk` text from the ACP
15
- * NDJSON stream; stdout buffering is disabled so the full stream is not
16
- * retained in memory.
17
- */
18
- export declare class AgentExecutor implements ExecutorAdapter<AgentExecutionRequest> {
19
- private readonly evaluator;
20
- private readonly ajv;
21
- private readonly acpxPath?;
22
- private readonly cancelGraceMs;
23
- constructor(options?: {
24
- acpxPath?: string;
25
- evaluator?: ExpressionEvaluator;
26
- cancelGraceMs?: number;
27
- });
28
- execute({ node, context, signal, nodeKey, prompt: preparedPrompt, sessionKey: preparedSessionKey, continuation, retry, onStream }: AgentExecutionRequest): Promise<ExecutorResult>;
29
- /**
30
- * On abort, request a cooperative `session/cancel` via acpx and schedule a
31
- * SIGKILL fallback if the in-flight prompt does not settle within the grace
32
- * period. Returns a handle exposing whether cancel fired and a cleanup fn.
33
- */
34
- private wireCooperativeCancel;
35
- /**
36
- * Build acpx arg lists for a subcommand. Global flags (--cwd, --model,
37
- * --format, policy flags) precede the command. For `command` agents the
38
- * custom ACP server is selected via the `--agent` escape hatch; for
39
- * `builtin` agents the adapter name is the command prefix.
40
- *
41
- * Policy flag mapping:
42
- * full → --approve-all --non-interactive-permissions deny
43
- * read → --approve-reads --non-interactive-permissions fail
44
- */
45
- private argsBuilder;
46
- /** Resolve how to invoke acpx: an explicit path, or the resolved package bin via node. */
47
- private resolveInvoker;
48
- private sessionName;
49
- private resolveCwd;
50
- private resolveEffectivePolicy;
51
- private resolveTimeoutSeconds;
52
- private stringEnv;
53
- }
54
- /**
55
- * Decide the prompt text for an agent turn:
56
- * - first run → rendered task template
57
- * - continuation → fixed continuation prompt
58
- * - parse/schema retry→ fixed continuation prompt
59
- * When an output schema is declared it is appended as a `# OUTPUT SCHEMA`
60
- * section on the first run and on retries, but NOT on a plain continuation
61
- * (the original task is still live in the acpx session there).
62
- */
63
- export declare function buildAgentPrompt(renderedTask: string, outputSchema: Record<string, unknown> | undefined, continuation: boolean, retry: boolean): string;
64
- /** Render the exact Agent request prompt that will be sent to acpx. */
65
- export declare function renderAgentRequestPrompt(node: {
66
- metadata: Record<string, unknown>;
67
- }, context: ExpressionContext, evaluator: ExpressionEvaluator, continuation: boolean, retry: boolean): string;
68
- /** Render the optional Agent Step session key using the workflow evaluator. */
69
- export declare function renderAgentSessionKey(node: {
70
- metadata: Record<string, unknown>;
71
- }, context: ExpressionContext, evaluator: ExpressionEvaluator): string | undefined;
72
- /**
73
- * Extract a JSON value from an agent reply that may wrap JSON in prose and/or
74
- * Markdown code fences. Three tiers, strictest first:
75
- * 1. Strict fast path: parse the whole trimmed reply (pure-JSON response).
76
- * 2. Independent balanced scan: try every `{...}`/`[...]` candidate from each
77
- * opening brace/bracket so unbalanced prose/code cannot block later JSON.
78
- * 3. Candidate-local jsonrepair fallback: for each later candidate, try strict
79
- * parse first, then repair that same candidate before moving earlier.
80
- * Returns `undefined` when no JSON can be recovered (→ retryable parse failure).
81
- */
82
- export declare function extractJson(text: string): unknown | undefined;
83
- /**
84
- * Extract a human-readable error message from acpx JSON-RPC error output.
85
- * acpx writes errors on stdout as JSON-RPC `{"jsonrpc":"2.0","error":{"message":"..."}}`.
86
- * Returns the `error.message` field, or undefined if the input is not a valid
87
- * JSON-RPC error.
88
- */
89
- export declare function extractAcpxError(stdout: string): string | undefined;
90
- /**
91
- * Filter a raw stdout buffer to lines that are NOT ACP NDJSON protocol
92
- * messages. NDJSON lines start with '{' and contain "jsonrpc" — these are
93
- * agent protocol events, not error messages. The remaining lines are
94
- * likely acpx error output (plain text or JSON-RPC error objects).
95
- *
96
- * This is best-effort: when acpx fails, NDJSON is minimal or absent, and
97
- * the error text dominates. The filter just prevents accidental mixing when
98
- * a few NDJSON lines happen to be in the buffer tail.
99
- */
100
- export declare function nonNdjsonLines(raw: string): string;
101
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/executors/agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAWtD;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,eAAe,CAAC,qBAAqB,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,YAAY,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAKnG;IAEK,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6KvL;IAED;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAkBnB,0FAA0F;IAC1F,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,SAAS;CAMlB;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjD,YAAY,EAAE,OAAO,EACrB,KAAK,EAAE,OAAO,GACb,MAAM,CAQR;AAED,uEAAuE;AACvE,wBAAgB,wBAAwB,CACtC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAC3C,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,mBAAmB,EAC9B,YAAY,EAAE,OAAO,EACrB,KAAK,EAAE,OAAO,GACb,MAAM,CAIR;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CACnC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAC3C,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,mBAAmB,GAC7B,MAAM,GAAG,SAAS,CAQpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CA4B7D;AAmFD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYlD"}
@@ -1,508 +0,0 @@
1
- import { execa } from "execa";
2
- import { createRequire } from "node:module";
3
- import { readFileSync } from "node:fs";
4
- import { dirname, resolve } from "node:path";
5
- import { parseDurationMs } from "@acpus/core";
6
- import { ExpressionEvaluator } from "../evaluator.js";
7
- import { Ajv } from "ajv";
8
- import { jsonrepair } from "jsonrepair";
9
- import { AgentTelemetryAccumulator } from "../agent-telemetry.js";
10
- /** Fixed runtime prompt used when continuing an existing agent session. */
11
- const CONTINUATION_PROMPT = "Continue the previous task from where you left off.";
12
- /** Grace period (ms) to wait for a cooperative cancel before SIGKILL. */
13
- const DEFAULT_CANCEL_GRACE_MS = 5000;
14
- /**
15
- * Drives an ACP agent through the `acpx` CLI. Acpus owns scheduling/state;
16
- * acpx owns the ACP saved-session lifecycle and dead-pid recovery.
17
- *
18
- * - Session name is derived from the resolved node key (stable, unique per
19
- * loop round / fanout lane / subworkflow nesting).
20
- * - First run: `sessions ensure` then `prompt -s <session>` with the rendered
21
- * prompt; continuation: same session with a fixed continuation prompt.
22
- * - Cancel is cooperative: on abort we run `acpx cancel -s <session>` and wait
23
- * for the in-flight prompt to settle (SIGKILL only as a last resort).
24
- * - Output is the concatenation of `agent_message_chunk` text from the ACP
25
- * NDJSON stream; stdout buffering is disabled so the full stream is not
26
- * retained in memory.
27
- */
28
- export class AgentExecutor {
29
- evaluator;
30
- ajv;
31
- acpxPath;
32
- cancelGraceMs;
33
- constructor(options) {
34
- this.evaluator = options?.evaluator ?? new ExpressionEvaluator();
35
- this.ajv = new Ajv({ allErrors: true, strict: false });
36
- this.acpxPath = options?.acpxPath;
37
- this.cancelGraceMs = options?.cancelGraceMs ?? DEFAULT_CANCEL_GRACE_MS;
38
- }
39
- async execute({ node, context, signal, nodeKey, prompt: preparedPrompt, sessionKey: preparedSessionKey, continuation, retry, onStream }) {
40
- const agent = node.metadata.agent;
41
- if (!agent) {
42
- return { failureKind: "spawn", error: `Agent step '${node.id}' has no resolved agent definition` };
43
- }
44
- const outputSchema = node.metadata.output;
45
- const timeoutSeconds = this.resolveTimeoutSeconds(node.metadata.timeout);
46
- // Evaluate local templates before touching acpx. These are deterministic
47
- // config errors and must not consume output-retry attempts.
48
- let cwd;
49
- let env;
50
- let prompt;
51
- let sessionName;
52
- try {
53
- // Step-level cwd overrides the agent definition's default cwd.
54
- cwd = this.resolveCwd(node.metadata.cwd ?? agent.cwd, context);
55
- env = { ...process.env, ...this.stringEnv(agent.env, context) };
56
- prompt = preparedPrompt ?? renderAgentRequestPrompt(node, context, this.evaluator, Boolean(continuation), Boolean(retry));
57
- const sessionKey = preparedSessionKey ?? renderAgentSessionKey(node, context, this.evaluator);
58
- sessionName = this.sessionName(context.run_id, nodeKey, sessionKey);
59
- }
60
- catch (error) {
61
- return {
62
- failureKind: "config",
63
- error: `Failed to evaluate agent configuration template: ${error instanceof Error ? error.message : String(error)}`
64
- };
65
- }
66
- if (signal.aborted) {
67
- return { partial: true, error: "Aborted before execution", prompt, responseText: "" };
68
- }
69
- const invoker = this.resolveInvoker();
70
- const effectivePolicy = this.resolveEffectivePolicy(node.metadata.policy, agent.policy);
71
- const build = this.argsBuilder(agent, cwd, effectivePolicy);
72
- let acpxRecordId;
73
- try {
74
- // Ensure a saved session exists (idempotent). acpx requires a session
75
- // record before prompt commands route to it.
76
- const ensureResult = await execa(invoker.command, [...invoker.prefixArgs, ...build(["--format", "json"], ["sessions", "ensure", "--name", sessionName])], {
77
- reject: false,
78
- env
79
- });
80
- if (ensureResult.failed) {
81
- const exitCode = ensureResult.exitCode ?? 1;
82
- const stderr = ensureResult.stderr ?? "";
83
- const stdout = ensureResult.stdout ?? "";
84
- // acpx may write errors to stdout (e.g. model rejection) as JSON-RPC
85
- // or plain text. Prefer stderr, then extract the message from JSON-RPC
86
- // stdout, fall back to raw stdout, then the generic shortMessage.
87
- const detail = stderr || extractAcpxError(stdout) || stdout || ensureResult.shortMessage || `acpx sessions ensure exited with code ${exitCode}`;
88
- return { failureKind: "exit", exitCode, error: detail, prompt, responseText: "", stdout, stderr };
89
- }
90
- if (ensureResult.stdout) {
91
- try {
92
- acpxRecordId = JSON.parse(ensureResult.stdout).acpxRecordId;
93
- }
94
- catch { /* non-JSON output; record ID stays undefined */ }
95
- }
96
- if (signal.aborted) {
97
- return { partial: true, error: "Aborted before prompt", prompt, responseText: "", acpxRecordId, cwd };
98
- }
99
- // Run the prompt, streaming the ACP protocol as NDJSON. Stdout buffering
100
- // is disabled so execa does not retain the full stream in memory.
101
- const promptGlobalArgs = [...(timeoutSeconds ? ["--timeout", timeoutSeconds] : []), "--format", "json"];
102
- const promptArgs = [...invoker.prefixArgs, ...build(promptGlobalArgs, ["prompt", "-s", sessionName, prompt])];
103
- const accumulator = new AgentTelemetryAccumulator({ attempt: 1, inputText: prompt, acpxRecordId, cwd });
104
- const proc = execa(invoker.command, promptArgs, {
105
- reject: false,
106
- env,
107
- buffer: { stdout: false }
108
- });
109
- let stderrText = "";
110
- // Capture raw non-NDJSON stdout lines in a bounded buffer for error
111
- // reporting. The accumulator only extracts agent_message_chunk NDJSON,
112
- // but acpx writes errors (e.g. model rejection, ACP errors) to stdout
113
- // as plain text or JSON-RPC. We filter out NDJSON lines so the tail
114
- // doesn't mix agent response content with error text. The buffer is
115
- // line-aware at the tail boundary to avoid mid-line truncation.
116
- let rawErrorTail = "";
117
- const MAX_RAW_ERROR_TAIL = 2048;
118
- proc.stdout?.on("data", (chunk) => {
119
- const text = String(chunk);
120
- onStream?.("stdout", text);
121
- accumulator.append(text);
122
- // Filter NDJSON lines: skip lines that start with '{' and contain
123
- // "jsonrpc" (ACP protocol). Keep everything else as error candidates.
124
- // Use line-aware append: only keep complete trailing lines so the
125
- // buffer doesn't leave a mid-line fragment at the end.
126
- rawErrorTail += text;
127
- // Trim to last MAX_RAW_ERROR_TAIL bytes, then drop any leading
128
- // partial line (first \n is our boundary).
129
- if (rawErrorTail.length > MAX_RAW_ERROR_TAIL) {
130
- rawErrorTail = rawErrorTail.slice(-MAX_RAW_ERROR_TAIL);
131
- const nl = rawErrorTail.indexOf("\n");
132
- if (nl > -1)
133
- rawErrorTail = rawErrorTail.slice(nl + 1);
134
- }
135
- });
136
- proc.stderr?.on("data", (chunk) => {
137
- const text = String(chunk);
138
- stderrText += text;
139
- onStream?.("stderr", text);
140
- });
141
- const cancellation = this.wireCooperativeCancel(proc, signal, invoker, build, sessionName, env);
142
- const result = await proc;
143
- cancellation.cleanup();
144
- const stderr = result.stderr ?? stderrText;
145
- accumulator.flush();
146
- const text = accumulator.responseText();
147
- const stopReason = accumulator.finalStopReason();
148
- // Cooperative cancel (or any cancelled turn) → paused with partial response.
149
- if (cancellation.cancelled || stopReason === "cancelled") {
150
- return { partial: true, output: { text }, prompt, responseText: text, stderr, error: "Aborted", acpxRecordId, cwd };
151
- }
152
- // Spawn failure (no exit code) → non-recoverable.
153
- if (result.failed && (result.exitCode === undefined || result.exitCode === null)) {
154
- return { failureKind: "spawn", error: result.shortMessage || "Failed to spawn acpx", prompt, responseText: text, stderr, acpxRecordId, cwd };
155
- }
156
- // Non-zero exit (and not cancelled) → non-recoverable agent failure.
157
- if (result.exitCode !== 0) {
158
- // acpx writes errors to stdout (e.g. model rejection, ACP errors),
159
- // while stderr typically contains session lifecycle messages.
160
- // When the agent produced no response text, the stdout error stream
161
- // is likely the cause; surface it in the error message.
162
- //
163
- // Priority: extracted error lines (plain text / JSON-RPC, but not
164
- // agent NDJSON), then stderr, then response text, then generic.
165
- const exitError = nonNdjsonLines(rawErrorTail).trim() || stderr || text || `acpx exited with code ${result.exitCode}`;
166
- return { failureKind: "exit", exitCode: result.exitCode ?? 1, error: exitError, prompt, responseText: text, stderr, acpxRecordId, cwd };
167
- }
168
- // Assemble structured output. When a schema is declared, extract a JSON
169
- // object from the (possibly prose-wrapped) reply; failure to extract is a
170
- // retryable parse failure. Otherwise wrap as { text }.
171
- let output;
172
- if (outputSchema) {
173
- if (text.trim().length === 0) {
174
- // Agent produced no output at all — likely an infrastructure failure
175
- // (acpx couldn't reach the agent, model rejected, etc.). This is not
176
- // a parse failure; classify as spawn (no usable response) so it is
177
- // not retried as parse. exitCode is left undefined to avoid the
178
- // semantic contradiction of exitCode:0 + failureKind:'exit'.
179
- const noOutputError = nonNdjsonLines(rawErrorTail).trim() || stderr || `acpx exited with code ${result.exitCode} but produced no output`;
180
- return { failureKind: "spawn", error: noOutputError, output: { text }, prompt, responseText: text, stderr, acpxRecordId, cwd };
181
- }
182
- const parsed = extractJson(text);
183
- if (parsed === undefined) {
184
- return { failureKind: "parse", error: "Failed to parse agent output as JSON", output: { text }, prompt, responseText: text, stderr, acpxRecordId, cwd };
185
- }
186
- const validate = this.ajv.compile(outputSchema);
187
- if (!validate(parsed)) {
188
- return { failureKind: "schema", error: `Output validation failed: ${this.ajv.errorsText(validate.errors)}`, output: parsed, prompt, responseText: text, stderr, acpxRecordId, cwd };
189
- }
190
- output = parsed;
191
- }
192
- else {
193
- output = { text };
194
- }
195
- return { exitCode: 0, output, prompt, responseText: text, stderr, acpxRecordId, cwd };
196
- }
197
- catch (error) {
198
- return { failureKind: "spawn", error: error instanceof Error ? error.message : String(error), prompt, responseText: "", acpxRecordId, cwd };
199
- }
200
- }
201
- /**
202
- * On abort, request a cooperative `session/cancel` via acpx and schedule a
203
- * SIGKILL fallback if the in-flight prompt does not settle within the grace
204
- * period. Returns a handle exposing whether cancel fired and a cleanup fn.
205
- */
206
- wireCooperativeCancel(proc, signal, invoker, build, sessionName, env) {
207
- const handle = { cancelled: false, cleanup: () => undefined };
208
- let killTimer;
209
- const onAbort = () => {
210
- handle.cancelled = true;
211
- // Fire-and-forget cooperative cancel; failures are non-fatal.
212
- void execa(invoker.command, [...invoker.prefixArgs, ...build([], ["cancel", "-s", sessionName])], { reject: false, env }).catch(() => undefined);
213
- // Last-resort kill if the prompt process refuses to settle.
214
- killTimer = setTimeout(() => { proc.kill("SIGKILL"); }, this.cancelGraceMs);
215
- };
216
- signal.addEventListener("abort", onAbort, { once: true });
217
- if (signal.aborted)
218
- onAbort();
219
- handle.cleanup = () => {
220
- if (killTimer)
221
- clearTimeout(killTimer);
222
- signal.removeEventListener("abort", onAbort);
223
- };
224
- return handle;
225
- }
226
- /**
227
- * Build acpx arg lists for a subcommand. Global flags (--cwd, --model,
228
- * --format, policy flags) precede the command. For `command` agents the
229
- * custom ACP server is selected via the `--agent` escape hatch; for
230
- * `builtin` agents the adapter name is the command prefix.
231
- *
232
- * Policy flag mapping:
233
- * full → --approve-all --non-interactive-permissions deny
234
- * read → --approve-reads --non-interactive-permissions fail
235
- */
236
- argsBuilder(agent, cwd, policy) {
237
- const globalBase = [
238
- "--cwd",
239
- cwd,
240
- ...(agent.model ? ["--model", agent.model] : []),
241
- ...(policy === "full"
242
- ? ["--approve-all", "--non-interactive-permissions", "deny"]
243
- : ["--approve-reads", "--non-interactive-permissions", "fail"])
244
- ];
245
- if (agent.type === "command") {
246
- const command = agent.use ?? "";
247
- return (global, sub) => ["--agent", command, ...globalBase, ...global, ...sub];
248
- }
249
- // builtin (default): adapter name from `use`.
250
- const adapter = agent.use ?? "";
251
- return (global, sub) => [...globalBase, ...global, adapter, ...sub];
252
- }
253
- /** Resolve how to invoke acpx: an explicit path, or the resolved package bin via node. */
254
- resolveInvoker() {
255
- if (this.acpxPath)
256
- return { command: this.acpxPath, prefixArgs: [] };
257
- const req = createRequire(import.meta.url);
258
- const pkgJsonPath = req.resolve("acpx/package.json");
259
- const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
260
- const bin = typeof pkg.bin === "string" ? pkg.bin : pkg.bin?.acpx ?? "dist/cli.js";
261
- return { command: process.execPath, prefixArgs: [resolve(dirname(pkgJsonPath), bin)] };
262
- }
263
- sessionName(runId, nodeKey, sessionKey) {
264
- const key = sessionKey === undefined ? sanitizeNodeKeySession(nodeKey) : encodeSessionKey(sessionKey);
265
- return `acpus-${runId}-${key}`;
266
- }
267
- resolveCwd(cwd, context) {
268
- if (typeof cwd === "string" && cwd.length > 0) {
269
- return resolve(this.evaluator.evaluateTemplate(cwd, context));
270
- }
271
- return process.cwd();
272
- }
273
- resolveEffectivePolicy(stepPolicy, agentPolicy) {
274
- if (stepPolicy === "read" || stepPolicy === "full")
275
- return stepPolicy;
276
- if (agentPolicy === "read" || agentPolicy === "full")
277
- return agentPolicy;
278
- return "full";
279
- }
280
- resolveTimeoutSeconds(timeout) {
281
- const milliseconds = typeof timeout === "number"
282
- ? timeout
283
- : typeof timeout === "string"
284
- ? parseDurationMs(timeout)
285
- : undefined;
286
- if (milliseconds === undefined || milliseconds <= 0)
287
- return undefined;
288
- return String(milliseconds / 1000);
289
- }
290
- stringEnv(env, context) {
291
- if (!env)
292
- return {};
293
- const out = {};
294
- for (const [k, v] of Object.entries(env))
295
- out[k] = typeof v === "string" ? this.evaluator.evaluateTemplate(v, context) : String(v);
296
- return out;
297
- }
298
- }
299
- /** Replace characters not safe for an acpx `-s <name>` value in generated node keys. */
300
- function sanitizeNodeKeySession(nodeKey) {
301
- return nodeKey.replace(/\//g, "__").replace(/:/g, "-");
302
- }
303
- /** Encode author-controlled session keys without collisions from normalization. */
304
- function encodeSessionKey(sessionKey) {
305
- if (sessionKey.trim().length === 0) {
306
- throw new Error("session_key must render to a non-empty string");
307
- }
308
- return `key-${Buffer.from(sessionKey, "utf8").toString("base64url")}`;
309
- }
310
- /** Render the declared output schema as an explicit contract section appended to the prompt. */
311
- function schemaSection(outputSchema) {
312
- return `\n\n# OUTPUT SCHEMA\n**After completing the task, your final response MUST be exactly one JSON object that conforms to this schema, with no Markdown or prose. Extra keys are accepted but are not available to later workflow expressions.**\n${JSON.stringify(outputSchema, null, 2)}`;
313
- }
314
- /**
315
- * Decide the prompt text for an agent turn:
316
- * - first run → rendered task template
317
- * - continuation → fixed continuation prompt
318
- * - parse/schema retry→ fixed continuation prompt
319
- * When an output schema is declared it is appended as a `# OUTPUT SCHEMA`
320
- * section on the first run and on retries, but NOT on a plain continuation
321
- * (the original task is still live in the acpx session there).
322
- */
323
- export function buildAgentPrompt(renderedTask, outputSchema, continuation, retry) {
324
- if (retry) {
325
- return outputSchema ? CONTINUATION_PROMPT + schemaSection(outputSchema) : CONTINUATION_PROMPT;
326
- }
327
- if (continuation) {
328
- return CONTINUATION_PROMPT;
329
- }
330
- return outputSchema ? renderedTask + schemaSection(outputSchema) : renderedTask;
331
- }
332
- /** Render the exact Agent request prompt that will be sent to acpx. */
333
- export function renderAgentRequestPrompt(node, context, evaluator, continuation, retry) {
334
- const renderedTask = evaluator.evaluateTemplate(node.metadata.prompt ?? "", context);
335
- const outputSchema = node.metadata.output;
336
- return buildAgentPrompt(renderedTask, outputSchema, continuation, retry);
337
- }
338
- /** Render the optional Agent Step session key using the workflow evaluator. */
339
- export function renderAgentSessionKey(node, context, evaluator) {
340
- const sessionKey = node.metadata.session_key;
341
- if (typeof sessionKey !== "string")
342
- return undefined;
343
- const rendered = evaluator.evaluateTemplate(sessionKey, context);
344
- if (rendered.trim().length === 0) {
345
- throw new Error("session_key must render to a non-empty string");
346
- }
347
- return rendered;
348
- }
349
- /**
350
- * Extract a JSON value from an agent reply that may wrap JSON in prose and/or
351
- * Markdown code fences. Three tiers, strictest first:
352
- * 1. Strict fast path: parse the whole trimmed reply (pure-JSON response).
353
- * 2. Independent balanced scan: try every `{...}`/`[...]` candidate from each
354
- * opening brace/bracket so unbalanced prose/code cannot block later JSON.
355
- * 3. Candidate-local jsonrepair fallback: for each later candidate, try strict
356
- * parse first, then repair that same candidate before moving earlier.
357
- * Returns `undefined` when no JSON can be recovered (→ retryable parse failure).
358
- */
359
- export function extractJson(text) {
360
- const trimmed = text.trim();
361
- if (!trimmed)
362
- return undefined;
363
- // Tier 1: strict fast path.
364
- try {
365
- return JSON.parse(trimmed);
366
- }
367
- catch {
368
- // fall through
369
- }
370
- // Tier 2/3: latest balanced candidate wins; repair is candidate-local so a
371
- // malformed final answer is preferred over an earlier strict-JSON draft.
372
- const candidates = balancedJsonCandidates(text);
373
- for (let i = candidates.length - 1; i >= 0; i--) {
374
- const candidate = candidates[i];
375
- try {
376
- return JSON.parse(candidate);
377
- }
378
- catch {
379
- // try jsonrepair for this same candidate before moving earlier
380
- }
381
- const repaired = repairJsonCandidate(candidate);
382
- if (repaired !== undefined) {
383
- return repaired;
384
- }
385
- }
386
- return undefined;
387
- }
388
- /**
389
- * Collect independently balanced `{...}` / `[...]` substrings from `text`.
390
- * Each opening brace/bracket is treated as a potential candidate start, so a
391
- * stray prose/code `{` cannot keep depth open and hide a later final JSON block.
392
- */
393
- function balancedJsonCandidates(text) {
394
- const out = [];
395
- for (let i = 0; i < text.length; i++) {
396
- if (text[i] !== "{" && text[i] !== "[")
397
- continue;
398
- const end = balancedCandidateEnd(text, i);
399
- if (end !== undefined) {
400
- out.push({ start: i, end, value: text.slice(i, end) });
401
- }
402
- }
403
- const outer = out.filter((candidate) => !out.some((other) => other !== candidate && other.start < candidate.start && candidate.end < other.end));
404
- // Source order here is by candidate end position, not start position. This
405
- // keeps an outer final JSON object ahead of its nested children when iterated
406
- // backwards, and still lets later independent JSON blocks supersede drafts.
407
- outer.sort((a, b) => a.end - b.end || a.start - b.start);
408
- return outer.map((candidate) => candidate.value);
409
- }
410
- function balancedCandidateEnd(text, start) {
411
- const stack = [text[start] === "{" ? "}" : "]"];
412
- let inString = false;
413
- let escaped = false;
414
- for (let i = start + 1; i < text.length; i++) {
415
- const ch = text[i];
416
- if (inString) {
417
- if (escaped)
418
- escaped = false;
419
- else if (ch === "\\")
420
- escaped = true;
421
- else if (ch === '"')
422
- inString = false;
423
- continue;
424
- }
425
- if (ch === '"') {
426
- inString = true;
427
- continue;
428
- }
429
- if (ch === "{" || ch === "[") {
430
- stack.push(ch === "{" ? "}" : "]");
431
- }
432
- else if (ch === "}" || ch === "]") {
433
- if (stack.length === 0 || ch !== stack[stack.length - 1]) {
434
- return undefined;
435
- }
436
- stack.pop();
437
- if (stack.length === 0)
438
- return i + 1;
439
- }
440
- }
441
- return undefined;
442
- }
443
- function repairJsonCandidate(candidate) {
444
- if (!isRepairableJsonCandidate(candidate))
445
- return undefined;
446
- try {
447
- const repaired = JSON.parse(jsonrepair(candidate));
448
- if (typeof repaired === "object" && repaired !== null)
449
- return repaired;
450
- }
451
- catch {
452
- // fall through
453
- }
454
- return undefined;
455
- }
456
- function isRepairableJsonCandidate(candidate) {
457
- const trimmed = candidate.trim();
458
- // Keep repair intentionally narrow. jsonrepair can turn prose snippets like
459
- // `[1-9]` into `["1-9"]`; in this runtime, malformed final outputs we want to
460
- // save are object-shaped contracts with key/value separators.
461
- return trimmed.startsWith("{") && trimmed.includes(":");
462
- }
463
- /**
464
- * Extract a human-readable error message from acpx JSON-RPC error output.
465
- * acpx writes errors on stdout as JSON-RPC `{"jsonrpc":"2.0","error":{"message":"..."}}`.
466
- * Returns the `error.message` field, or undefined if the input is not a valid
467
- * JSON-RPC error.
468
- */
469
- export function extractAcpxError(stdout) {
470
- if (!stdout)
471
- return undefined;
472
- try {
473
- const parsed = JSON.parse(stdout);
474
- return typeof parsed?.error?.message === "string" && parsed.error.message.length > 0
475
- ? parsed.error.message
476
- : undefined;
477
- }
478
- catch {
479
- return undefined;
480
- }
481
- }
482
- /**
483
- * Filter a raw stdout buffer to lines that are NOT ACP NDJSON protocol
484
- * messages. NDJSON lines start with '{' and contain "jsonrpc" — these are
485
- * agent protocol events, not error messages. The remaining lines are
486
- * likely acpx error output (plain text or JSON-RPC error objects).
487
- *
488
- * This is best-effort: when acpx fails, NDJSON is minimal or absent, and
489
- * the error text dominates. The filter just prevents accidental mixing when
490
- * a few NDJSON lines happen to be in the buffer tail.
491
- */
492
- export function nonNdjsonLines(raw) {
493
- if (!raw)
494
- return "";
495
- return raw
496
- .split("\n")
497
- .filter((line) => {
498
- const trimmed = line.trim();
499
- if (!trimmed)
500
- return false;
501
- // NDJSON lines start with '{' and contain "jsonrpc" as a protocol marker.
502
- if (trimmed.startsWith("{") && trimmed.includes('"jsonrpc"'))
503
- return false;
504
- return true;
505
- })
506
- .join("\n");
507
- }
508
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/executors/agent.ts"],"names":[],"mappings":"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"}