@acpus/runtime 0.8.0 → 0.9.0-alpha.1

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 -103
  200. package/dist/executors/agent.d.ts.map +0 -1
  201. package/dist/executors/agent.js +0 -516
  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 -382
  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
package/README.md DELETED
@@ -1,7 +0,0 @@
1
- # @acpus/runtime
2
-
3
- `@acpus/runtime` contains the local durable execution engine for Acpus: the interpreter, Run Supervisor, state store, executors, artifacts, replay, and Run controls.
4
-
5
- Most users should install the `acpus` CLI package.
6
-
7
- See the repository README for full usage: https://github.com/kelvinschen/acpus
@@ -1,56 +0,0 @@
1
- import type { AgentAttemptTelemetry, AgentAttemptTelemetryState, AgentContextUsage, AgentTelemetry } from "./types.js";
2
- export interface AgentTelemetryAccumulatorOptions {
3
- attempt: number;
4
- inputText: string;
5
- inputArtifactRef?: string;
6
- acpxRecordId?: string;
7
- cwd?: string;
8
- startedAt?: string;
9
- now?: () => number;
10
- previewEdgeBytes?: number;
11
- maxToolCalls?: number;
12
- flushIntervalMs?: number;
13
- onTelemetry?: (attempt: AgentAttemptTelemetry) => void;
14
- }
15
- export declare class AgentTelemetryAccumulator {
16
- private readonly attempt;
17
- private readonly now;
18
- private readonly previewEdgeBytes;
19
- private readonly maxToolCalls;
20
- private readonly flushIntervalMs;
21
- private readonly onTelemetry?;
22
- private readonly startedAt;
23
- private readonly seenToolIds;
24
- private readonly tools;
25
- private partialLine;
26
- private response;
27
- private stopReason;
28
- private latestContext;
29
- private tokenUsage;
30
- private outputArtifactRef;
31
- private acpxRecordId;
32
- private cwd;
33
- private lastPublishedAt;
34
- private toolSeq;
35
- private totalToolCallCount;
36
- constructor(options: AgentTelemetryAccumulatorOptions);
37
- private readonly input;
38
- append(chunk: string): void;
39
- flush(): void;
40
- responseText(): string;
41
- setResponseText(text: string): void;
42
- finalStopReason(): string | undefined;
43
- context(): AgentContextUsage | undefined;
44
- setOutputArtifactRef(ref: string | undefined): void;
45
- setAcpxRecordId(id: string): void;
46
- setCwd(dir: string): void;
47
- snapshot(state?: AgentAttemptTelemetryState, completedAt?: string): AgentAttemptTelemetry;
48
- private parseLine;
49
- private captureResult;
50
- private captureTool;
51
- private trimRecentTools;
52
- private publish;
53
- }
54
- export declare function upsertAgentAttemptTelemetry(current: AgentTelemetry | undefined, attempt: AgentAttemptTelemetry): AgentTelemetry;
55
- export declare function latestAgentAttemptTelemetry(telemetry: AgentTelemetry | undefined): AgentAttemptTelemetry | undefined;
56
- //# sourceMappingURL=agent-telemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-telemetry.d.ts","sourceRoot":"","sources":["../src/agent-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EAEjB,cAAc,EAGf,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACxD;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,kBAAkB,CAAK;IAE/B,YAAY,OAAO,EAAE,gCAAgC,EAWpD;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IAEvC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM1B;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,YAAY,IAAI,MAAM,CAErB;IAED,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAElC;IAED,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,OAAO,IAAI,iBAAiB,GAAG,SAAS,CAEvC;IAED,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAElD;IAED,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEhC;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,QAAQ,CAAC,KAAK,GAAE,0BAAsC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,qBAAqB,CA2BnG;IAED,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,OAAO;CAOhB;AAMD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,OAAO,EAAE,qBAAqB,GAC7B,cAAc,CAMhB;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,GAAG,qBAAqB,GAAG,SAAS,CAIpH"}
@@ -1,304 +0,0 @@
1
- const DEFAULT_PREVIEW_EDGE_BYTES = 8 * 1024;
2
- const DEFAULT_MAX_TOOL_CALLS = 200;
3
- const DEFAULT_FLUSH_INTERVAL_MS = 1_000;
4
- const FINAL_TOOL_STATUSES = new Set(["completed", "failed", "cancelled"]);
5
- export class AgentTelemetryAccumulator {
6
- attempt;
7
- now;
8
- previewEdgeBytes;
9
- maxToolCalls;
10
- flushIntervalMs;
11
- onTelemetry;
12
- startedAt;
13
- seenToolIds = new Set();
14
- tools = new Map();
15
- partialLine = "";
16
- response = "";
17
- stopReason;
18
- latestContext;
19
- tokenUsage;
20
- outputArtifactRef;
21
- acpxRecordId;
22
- cwd;
23
- lastPublishedAt = 0;
24
- toolSeq = 0;
25
- totalToolCallCount = 0;
26
- constructor(options) {
27
- this.attempt = options.attempt;
28
- this.now = options.now ?? Date.now;
29
- this.previewEdgeBytes = options.previewEdgeBytes ?? DEFAULT_PREVIEW_EDGE_BYTES;
30
- this.maxToolCalls = options.maxToolCalls ?? DEFAULT_MAX_TOOL_CALLS;
31
- this.flushIntervalMs = options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;
32
- this.onTelemetry = options.onTelemetry;
33
- this.startedAt = options.startedAt ?? new Date(this.now()).toISOString();
34
- this.acpxRecordId = options.acpxRecordId;
35
- this.cwd = options.cwd;
36
- this.input = buildPreview(options.inputText, this.previewEdgeBytes, options.inputArtifactRef);
37
- }
38
- input;
39
- append(chunk) {
40
- if (chunk.length === 0)
41
- return;
42
- const text = this.partialLine + chunk;
43
- const lines = text.split("\n");
44
- this.partialLine = lines.pop() ?? "";
45
- for (const line of lines)
46
- this.parseLine(line);
47
- }
48
- flush() {
49
- if (this.partialLine.trim().length > 0)
50
- this.parseLine(this.partialLine);
51
- this.partialLine = "";
52
- this.publish("running", true);
53
- }
54
- responseText() {
55
- return this.response;
56
- }
57
- setResponseText(text) {
58
- this.response = text;
59
- }
60
- finalStopReason() {
61
- return this.stopReason;
62
- }
63
- context() {
64
- return this.latestContext;
65
- }
66
- setOutputArtifactRef(ref) {
67
- this.outputArtifactRef = ref;
68
- }
69
- setAcpxRecordId(id) {
70
- this.acpxRecordId = id;
71
- }
72
- setCwd(dir) {
73
- this.cwd = dir;
74
- }
75
- snapshot(state = "running", completedAt) {
76
- const updatedAt = completedAt ?? new Date(this.now()).toISOString();
77
- const recentCalls = [...this.tools.values()]
78
- .sort((a, b) => b.lastSeq - a.lastSeq)
79
- .map(({ lastSeq: _lastSeq, ...tool }) => tool);
80
- return {
81
- attempt: this.attempt,
82
- state,
83
- startedAt: this.startedAt,
84
- updatedAt,
85
- completedAt,
86
- context: this.latestContext,
87
- tokenUsage: this.tokenUsage,
88
- input: this.input,
89
- output: this.response.length > 0
90
- ? buildPreview(this.response, this.previewEdgeBytes, this.outputArtifactRef)
91
- : this.outputArtifactRef
92
- ? buildPreview("", this.previewEdgeBytes, this.outputArtifactRef)
93
- : undefined,
94
- tools: {
95
- totalToolCallCount: this.totalToolCallCount,
96
- droppedToolCallCount: Math.max(0, this.totalToolCallCount - recentCalls.length),
97
- recentCalls
98
- },
99
- ...(this.acpxRecordId ? { acpxRecordId: this.acpxRecordId } : {}),
100
- ...(this.cwd ? { cwd: this.cwd } : {})
101
- };
102
- }
103
- parseLine(line) {
104
- const trimmed = line.trim();
105
- if (!trimmed)
106
- return;
107
- const parsed = parseObject(trimmed);
108
- if (!parsed)
109
- return;
110
- this.captureResult(parsed);
111
- const update = extractUpdate(parsed);
112
- if (!update)
113
- return;
114
- const kind = update.sessionUpdate;
115
- if (kind === "agent_message_chunk") {
116
- const text = readContentText(update.content);
117
- if (text) {
118
- this.response += text;
119
- this.publish("running", false);
120
- }
121
- return;
122
- }
123
- if (kind === "usage_update") {
124
- const used = readNonNegativeNumber(update.used);
125
- const size = readNonNegativeNumber(update.size);
126
- if (used !== undefined && size !== undefined) {
127
- // acpx sends used=0 at the start of every LLM API call before the
128
- // response arrives with real token counts. Overwriting a known
129
- // non-zero measurement with 0 would produce misleading telemetry
130
- // (e.g. "context=0/200k") when a failed attempt's last update was
131
- // an initial allocation. Preserve the previous `used` if the new
132
- // one is 0 and we already have a real measurement.
133
- if (used === 0 && this.latestContext && this.latestContext.used > 0) {
134
- this.latestContext = { used: this.latestContext.used, size, updatedAt: new Date(this.now()).toISOString() };
135
- }
136
- else {
137
- this.latestContext = { used, size, updatedAt: new Date(this.now()).toISOString() };
138
- }
139
- this.publish("running", false);
140
- }
141
- return;
142
- }
143
- if (isToolUpdate(update)) {
144
- const changed = this.captureTool(update);
145
- this.publish("running", changed);
146
- }
147
- }
148
- captureResult(obj) {
149
- if (!Object.hasOwn(obj, "id") || !Object.hasOwn(obj, "result"))
150
- return;
151
- const result = readRecord(obj.result);
152
- if (typeof result?.stopReason === "string")
153
- this.stopReason = result.stopReason;
154
- this.tokenUsage = readTokenUsage(readRecord(result?.usage)) ?? this.tokenUsage;
155
- }
156
- captureTool(update) {
157
- const toolCallId = readString(update.toolCallId);
158
- if (!toolCallId)
159
- return false;
160
- const now = new Date(this.now()).toISOString();
161
- const wasSeen = this.seenToolIds.has(toolCallId);
162
- if (!wasSeen) {
163
- this.seenToolIds.add(toolCallId);
164
- this.totalToolCallCount += 1;
165
- }
166
- const previous = this.tools.get(toolCallId);
167
- const status = readString(update.status);
168
- const current = previous ?? {
169
- toolCallId,
170
- startedAt: now,
171
- updatedAt: now,
172
- lastSeq: 0
173
- };
174
- const statusChanged = status !== undefined && status !== previous?.status;
175
- current.updatedAt = now;
176
- current.lastSeq = ++this.toolSeq;
177
- const title = readString(update.title);
178
- const kind = readString(update.kind);
179
- const toolName = readString(readRecord(readRecord(update._meta)?.claudeCode)?.toolName);
180
- if (title)
181
- current.title = title;
182
- if (kind)
183
- current.kind = kind;
184
- if (toolName)
185
- current.toolName = toolName;
186
- if (status) {
187
- current.status = status;
188
- if (FINAL_TOOL_STATUSES.has(status))
189
- current.completedAt = now;
190
- }
191
- this.tools.set(toolCallId, current);
192
- this.trimRecentTools();
193
- return !wasSeen || statusChanged || (status !== undefined && FINAL_TOOL_STATUSES.has(status));
194
- }
195
- trimRecentTools() {
196
- if (this.tools.size <= this.maxToolCalls)
197
- return;
198
- const ordered = [...this.tools.entries()].sort((a, b) => b[1].lastSeq - a[1].lastSeq);
199
- const keep = new Set(ordered.slice(0, this.maxToolCalls).map(([id]) => id));
200
- for (const id of this.tools.keys()) {
201
- if (!keep.has(id))
202
- this.tools.delete(id);
203
- }
204
- }
205
- publish(state, force) {
206
- if (!this.onTelemetry)
207
- return;
208
- const now = this.now();
209
- if (!force && now - this.lastPublishedAt < this.flushIntervalMs)
210
- return;
211
- this.lastPublishedAt = now;
212
- this.onTelemetry(this.snapshot(state));
213
- }
214
- }
215
- export function upsertAgentAttemptTelemetry(current, attempt) {
216
- const previous = current?.attempts.filter((item) => item.attempt !== attempt.attempt) ?? [];
217
- return {
218
- currentAttempt: attempt.attempt,
219
- attempts: [...previous, attempt].sort((a, b) => a.attempt - b.attempt)
220
- };
221
- }
222
- export function latestAgentAttemptTelemetry(telemetry) {
223
- if (!telemetry)
224
- return undefined;
225
- return telemetry.attempts.find((attempt) => attempt.attempt === telemetry.currentAttempt)
226
- ?? telemetry.attempts[telemetry.attempts.length - 1];
227
- }
228
- function buildPreview(text, edgeBytes, artifactRef) {
229
- const originalBytes = Buffer.byteLength(text);
230
- const maxBytes = edgeBytes * 2;
231
- if (originalBytes <= maxBytes) {
232
- return { preview: text, truncated: false, originalBytes, headBytes: originalBytes, artifactRef };
233
- }
234
- const bytes = Buffer.from(text);
235
- const head = bytes.subarray(0, edgeBytes).toString("utf8");
236
- const tail = bytes.subarray(Math.max(edgeBytes, bytes.length - edgeBytes)).toString("utf8");
237
- return {
238
- preview: `${head}\n[acpus truncated: originalBytes=${originalBytes}]\n${tail}`,
239
- truncated: true,
240
- originalBytes,
241
- headBytes: edgeBytes,
242
- tailBytes: edgeBytes,
243
- artifactRef
244
- };
245
- }
246
- function parseObject(line) {
247
- try {
248
- return readRecord(JSON.parse(line));
249
- }
250
- catch {
251
- return undefined;
252
- }
253
- }
254
- function extractUpdate(obj) {
255
- return readRecord(readRecord(obj.params)?.update);
256
- }
257
- function isToolUpdate(update) {
258
- const kind = update.sessionUpdate;
259
- return kind === "tool_call" || kind === "tool_call_update";
260
- }
261
- function readContentText(value) {
262
- if (typeof value === "string")
263
- return value;
264
- const record = readRecord(value);
265
- if (!record)
266
- return undefined;
267
- if (typeof record.text === "string")
268
- return record.text;
269
- const nested = readRecord(record.content);
270
- return typeof nested?.text === "string" ? nested.text : undefined;
271
- }
272
- function readString(value) {
273
- return typeof value === "string" && value.trim().length > 0 ? value : undefined;
274
- }
275
- function readNonNegativeNumber(value) {
276
- return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
277
- }
278
- function readTokenUsage(usage) {
279
- if (!usage)
280
- return undefined;
281
- const out = { source: "prompt_response" };
282
- assignTokenField(out, "inputTokens", usage, ["inputTokens", "input_tokens"]);
283
- assignTokenField(out, "outputTokens", usage, ["outputTokens", "output_tokens"]);
284
- assignTokenField(out, "cachedReadTokens", usage, ["cachedReadTokens", "cacheReadInputTokens", "cache_read_input_tokens"]);
285
- assignTokenField(out, "cachedWriteTokens", usage, ["cachedWriteTokens", "cacheCreationInputTokens", "cache_creation_input_tokens"]);
286
- assignTokenField(out, "thoughtTokens", usage, ["thoughtTokens", "thought_tokens"]);
287
- assignTokenField(out, "totalTokens", usage, ["totalTokens", "total_tokens"]);
288
- return Object.keys(out).length > 1 ? out : undefined;
289
- }
290
- function assignTokenField(out, key, source, names) {
291
- for (const name of names) {
292
- const value = readNonNegativeNumber(source[name]);
293
- if (value !== undefined) {
294
- out[key] = value;
295
- return;
296
- }
297
- }
298
- }
299
- function readRecord(value) {
300
- return value !== null && typeof value === "object" && !Array.isArray(value)
301
- ? value
302
- : undefined;
303
- }
304
- //# sourceMappingURL=agent-telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-telemetry.js","sourceRoot":"","sources":["../src/agent-telemetry.ts"],"names":[],"mappings":"AAUA,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,CAAC;AAC5C,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAgB1E,MAAM,OAAO,yBAAyB;IACnB,OAAO,CAAS;IAChB,GAAG,CAAe;IAClB,gBAAgB,CAAS;IACzB,YAAY,CAAS;IACrB,eAAe,CAAS;IACxB,WAAW,CAA4C;IACvD,SAAS,CAAS;IAClB,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,WAAW,GAAG,EAAE,CAAC;IACjB,QAAQ,GAAG,EAAE,CAAC;IACd,UAAU,CAAqB;IAC/B,aAAa,CAAgC;IAC7C,UAAU,CAA8B;IACxC,iBAAiB,CAAqB;IACtC,YAAY,CAAqB;IACjC,GAAG,CAAqB;IACxB,eAAe,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC,CAAC;IACZ,kBAAkB,GAAG,CAAC,CAAC;IAE/B,YAAY,OAAyC;QACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;QAC/E,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;QACnE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,yBAAyB,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChG,CAAC;IAEgB,KAAK,CAAiB;IAEvC,MAAM,CAAC,KAAa;QAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,oBAAoB,CAAC,GAAuB;QAC1C,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAC/B,CAAC;IAED,eAAe,CAAC,EAAU;QACxB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,KAAK,GAA+B,SAAS,EAAE,WAAoB;QAC1E,MAAM,SAAS,GAAG,WAAW,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;aACrC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS;YACT,WAAW;YACX,OAAO,EAAE,IAAI,CAAC,aAAa;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAC9B,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAC5E,CAAC,CAAC,IAAI,CAAC,iBAAiB;oBACtB,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC;oBACjE,CAAC,CAAC,SAAS;YACf,KAAK,EAAE;gBACL,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC;gBAC/E,WAAW;aACZ;YACD,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;QAClC,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7C,kEAAkE;gBAClE,gEAAgE;gBAChE,iEAAiE;gBACjE,kEAAkE;gBAClE,kEAAkE;gBAClE,mDAAmD;gBACnD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACpE,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC9G,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrF,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,GAA4B;QAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;YAAE,OAAO;QACvE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,OAAO,MAAM,EAAE,UAAU,KAAK,QAAQ;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;IACjF,CAAC;IAEO,WAAW,CAAC,MAA+B;QACjD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,OAAO,GAAoB,QAAQ,IAAI;YAC3C,UAAU;YACV,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC;SACX,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,MAAM,CAAC;QAE1E,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QACxB,OAAO,CAAC,OAAO,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxF,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,IAAI,QAAQ;YAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,CAAC,OAAO,IAAI,aAAa,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QACjD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,KAAiC,EAAE,KAAc;QAC/D,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;YAAE,OAAO;QACxE,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;CACF;AAMD,MAAM,UAAU,2BAA2B,CACzC,OAAmC,EACnC,OAA8B;IAE9B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5F,OAAO;QACL,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,SAAqC;IAC/E,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,cAAc,CAAC;WACpF,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,SAAiB,EAAE,WAAoB;IACzE,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;IAC/B,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5F,OAAO;QACL,OAAO,EAAE,GAAG,IAAI,qCAAqC,aAAa,MAAM,IAAI,EAAE;QAC9E,SAAS,EAAE,IAAI;QACf,aAAa;QACb,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAA4B;IACjD,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;IAClC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,kBAAkB,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC;AAED,SAAS,cAAc,CAAC,KAA0C;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,GAAG,GAAoB,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC3D,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7E,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;IAChF,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC1H,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,6BAA6B,CAAC,CAAC,CAAC;IACpI,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnF,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAoB,EACpB,GAA0C,EAC1C,MAA+B,EAC/B,KAAe;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -1,45 +0,0 @@
1
- import type { ArtifactRef } from "./types.js";
2
- export interface ParsedArtifactReference {
3
- uri: string;
4
- runId: string;
5
- /** URI-encoded resolved Node Key as it appears in the artifact URI. */
6
- encodedNodeKey: string;
7
- /** Decoded (resolved) Node Key with slashes (e.g. "workflow/step-a"). */
8
- nodeKey: string;
9
- filename: string;
10
- }
11
- export declare const ArtifactReferences: {
12
- make(runId: string, nodeKey: string, filename: string): ArtifactRef;
13
- parse(uri: string): ParsedArtifactReference;
14
- tryParse(uri: string): ParsedArtifactReference | undefined;
15
- rewriteRunId(uri: string, fromRunId: string, toRunId: string): string;
16
- resolvePath(baseDir: string, uri: string, isUnsafeRunId: (runId: string) => boolean): string | undefined;
17
- };
18
- /**
19
- * Local filesystem artifact store under .acpus/state/runs/<run_id>/artifacts/.
20
- * Artifact URIs follow the format: artifact://runs/<runId>/nodes/<nodeKey>/<filename>
21
- */
22
- export declare class ArtifactStore {
23
- private readonly baseDir;
24
- constructor(baseDir?: string);
25
- /**
26
- * Write an artifact file. Uses atomic write (temp + rename) for crash safety.
27
- * Returns the ArtifactRef for the written file.
28
- */
29
- write(runId: string, nodeKey: string, filename: string, content: string | Buffer): ArtifactRef;
30
- /**
31
- * Create or truncate an artifact file and return its reference.
32
- * Used for artifacts that will be appended while an execution is still live.
33
- */
34
- create(runId: string, nodeKey: string, filename: string): ArtifactRef;
35
- /** Append content to an existing artifact, creating it if needed. */
36
- append(runId: string, nodeKey: string, filename: string, content: string | Buffer): ArtifactRef;
37
- /** Read an artifact file content. */
38
- read(runId: string, nodeKey: string, filename: string): Buffer;
39
- /** List all artifact refs for a node. */
40
- list(runId: string, nodeKey: string): ArtifactRef[];
41
- /** Parse an artifact URI into its components. */
42
- parseArtifactRef(uri: string): ArtifactRef;
43
- private nodeDir;
44
- }
45
- //# sourceMappingURL=artifacts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB;IAC7B,IAAI,QAAQ,MAAM,WAAW,MAAM,YAAY,MAAM,GAAG,WAAW;IAQnE,KAAK,MAAM,MAAM,GAAG,uBAAuB;IA2B3C,QAAQ,MAAM,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAQ1D,YAAY,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,GAAG,MAAM;IAMrE,WAAW,UAAU,MAAM,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS;CAmBzG,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YAAY,OAAO,CAAC,EAAE,MAAM,EAE3B;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAW7F;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAMpE;IAED,qEAAqE;IACrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAM9F;IAED,qCAAqC;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI7D;IAED,yCAAyC;IACzC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAOlD;IAED,iDAAiD;IACjD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAGzC;IAID,OAAO,CAAC,OAAO;CAKhB"}
package/dist/artifacts.js DELETED
@@ -1,163 +0,0 @@
1
- import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
- import { join, resolve } from "node:path";
3
- import { nodeKeyToStorageKey } from "./keys.js";
4
- import { validateRunId } from "./run-id.js";
5
- const ARTIFACT_URI_PREFIX = "artifact://runs/";
6
- export const ArtifactReferences = {
7
- make(runId, nodeKey, filename) {
8
- validateRunId(runId);
9
- validateArtifactFilename(filename);
10
- const encodedNodeKey = encodeURIComponent(nodeKey);
11
- const uri = `${ARTIFACT_URI_PREFIX}${runId}/nodes/${encodedNodeKey}/${filename}`;
12
- return { uri, runId, nodeKey, filename };
13
- },
14
- parse(uri) {
15
- if (!uri.startsWith(ARTIFACT_URI_PREFIX)) {
16
- throw new Error(`Invalid artifact URI: ${uri}`);
17
- }
18
- const parts = uri.slice(ARTIFACT_URI_PREFIX.length).split("/");
19
- if (parts.length !== 4 || parts[1] !== "nodes") {
20
- throw new Error(`Invalid artifact URI format: ${uri}`);
21
- }
22
- const runId = parts[0];
23
- const encodedNodeKey = parts[2];
24
- const filename = parts[3];
25
- if (!runId || !encodedNodeKey || !filename) {
26
- throw new Error(`Invalid artifact URI format: ${uri}`);
27
- }
28
- let nodeKey;
29
- try {
30
- nodeKey = decodeURIComponent(encodedNodeKey);
31
- }
32
- catch {
33
- throw new Error(`Invalid artifact URI format: ${uri}`);
34
- }
35
- return { uri, runId, encodedNodeKey, nodeKey, filename };
36
- },
37
- tryParse(uri) {
38
- try {
39
- return this.parse(uri);
40
- }
41
- catch {
42
- return undefined;
43
- }
44
- },
45
- rewriteRunId(uri, fromRunId, toRunId) {
46
- const ref = this.tryParse(uri);
47
- if (!ref || ref.runId !== fromRunId)
48
- return uri;
49
- return `${ARTIFACT_URI_PREFIX}${toRunId}/nodes/${ref.encodedNodeKey}/${ref.filename}`;
50
- },
51
- resolvePath(baseDir, uri, isUnsafeRunId) {
52
- const ref = this.tryParse(uri);
53
- if (!ref || isUnsafeRunId(ref.runId))
54
- return undefined;
55
- if (!isSafeEncodedNodeKey(ref.encodedNodeKey) || !isSafeUriPathSegment(ref.filename))
56
- return undefined;
57
- try {
58
- validateArtifactFilename(ref.filename);
59
- }
60
- catch {
61
- return undefined;
62
- }
63
- const safeNodeDir = nodeKeyToStorageKey(ref.nodeKey);
64
- if (!isSafeUriPathSegment(safeNodeDir))
65
- return undefined;
66
- const runDir = join(baseDir, ref.runId);
67
- const resolved = resolve(join(runDir, "artifacts", safeNodeDir, ref.filename));
68
- if (!isPathAtOrBelow(resolved, runDir))
69
- return undefined;
70
- return resolved;
71
- }
72
- };
73
- /**
74
- * Local filesystem artifact store under .acpus/state/runs/<run_id>/artifacts/.
75
- * Artifact URIs follow the format: artifact://runs/<runId>/nodes/<nodeKey>/<filename>
76
- */
77
- export class ArtifactStore {
78
- baseDir;
79
- constructor(baseDir) {
80
- this.baseDir = baseDir ?? join(process.cwd(), ".acpus", "state", "runs");
81
- }
82
- /**
83
- * Write an artifact file. Uses atomic write (temp + rename) for crash safety.
84
- * Returns the ArtifactRef for the written file.
85
- */
86
- write(runId, nodeKey, filename, content) {
87
- const ref = ArtifactReferences.make(runId, nodeKey, filename);
88
- const dir = this.nodeDir(runId, nodeKey);
89
- mkdirSync(dir, { recursive: true });
90
- const filePath = join(dir, filename);
91
- const tmpPath = filePath + ".tmp";
92
- writeFileSync(tmpPath, content);
93
- renameSync(tmpPath, filePath);
94
- return ref;
95
- }
96
- /**
97
- * Create or truncate an artifact file and return its reference.
98
- * Used for artifacts that will be appended while an execution is still live.
99
- */
100
- create(runId, nodeKey, filename) {
101
- const ref = ArtifactReferences.make(runId, nodeKey, filename);
102
- const dir = this.nodeDir(runId, nodeKey);
103
- mkdirSync(dir, { recursive: true });
104
- writeFileSync(join(dir, filename), "");
105
- return ref;
106
- }
107
- /** Append content to an existing artifact, creating it if needed. */
108
- append(runId, nodeKey, filename, content) {
109
- const ref = ArtifactReferences.make(runId, nodeKey, filename);
110
- const dir = this.nodeDir(runId, nodeKey);
111
- mkdirSync(dir, { recursive: true });
112
- appendFileSync(join(dir, filename), content);
113
- return ref;
114
- }
115
- /** Read an artifact file content. */
116
- read(runId, nodeKey, filename) {
117
- validateArtifactFilename(filename);
118
- const filePath = join(this.nodeDir(runId, nodeKey), filename);
119
- return readFileSync(filePath);
120
- }
121
- /** List all artifact refs for a node. */
122
- list(runId, nodeKey) {
123
- const dir = this.nodeDir(runId, nodeKey);
124
- if (!existsSync(dir))
125
- return [];
126
- return readdirSync(dir)
127
- .filter((f) => !f.endsWith(".tmp"))
128
- .map((filename) => ArtifactReferences.make(runId, nodeKey, filename));
129
- }
130
- /** Parse an artifact URI into its components. */
131
- parseArtifactRef(uri) {
132
- const ref = ArtifactReferences.parse(uri);
133
- return { uri: ref.uri, runId: ref.runId, nodeKey: ref.nodeKey, filename: ref.filename };
134
- }
135
- // ─── Internal helpers ──────────────────────────────────────────
136
- nodeDir(runId, nodeKey) {
137
- validateRunId(runId);
138
- const safeKey = nodeKeyToStorageKey(nodeKey);
139
- return join(this.baseDir, runId, "artifacts", safeKey);
140
- }
141
- }
142
- /** Validate that an artifact filename has no path traversal or separator characters. */
143
- function validateArtifactFilename(filename) {
144
- if (filename.includes("/") || filename.includes("\\") || filename.includes("..")) {
145
- throw new Error(`Invalid artifact filename: ${filename}`);
146
- }
147
- }
148
- function isSafeUriPathSegment(segment) {
149
- return Boolean(segment) && !segment.split(/[/:]/).some((part) => part === "" || part === "." || part === "..");
150
- }
151
- function isSafeEncodedNodeKey(encodedNodeKey) {
152
- return (Boolean(encodedNodeKey) &&
153
- !encodedNodeKey.includes("/") &&
154
- !encodedNodeKey.includes("\\") &&
155
- !encodedNodeKey.includes(":") &&
156
- encodedNodeKey !== "." &&
157
- encodedNodeKey !== "..");
158
- }
159
- function isPathAtOrBelow(path, basePath) {
160
- const normalizedBase = resolve(basePath);
161
- return path === normalizedBase || path.startsWith(`${normalizedBase}/`);
162
- }
163
- //# sourceMappingURL=artifacts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { ArtifactStore } from "./artifacts.js";
2
- import type { AgentAttemptTelemetry } from "./types.js";
3
- export interface AgentAttemptFinalArtifacts {
4
- responseText?: string;
5
- stderr?: string;
6
- diagnostics?: string[];
7
- }
8
- export interface AgentAttemptStartArtifacts {
9
- artifactRefs: string[];
10
- promptRef: string;
11
- rawAcpDebugRef?: string;
12
- }
13
- export interface AgentAttemptFinalArtifactRefs {
14
- artifactRefs: string[];
15
- responseRef?: string;
16
- stderrRef?: string;
17
- }
18
- /**
19
- * Owns runtime artifact naming and lifecycle rules for executable node attempts.
20
- */
21
- export declare class AttemptArtifactRecorder {
22
- private readonly artifactStore;
23
- constructor(artifactStore: ArtifactStore);
24
- startAgentAttempt(runId: string, nodeKey: string, attemptNo: number, prompt: string, options?: {
25
- rawAcpDebug?: boolean;
26
- }): AgentAttemptStartArtifacts;
27
- appendAgentRawAcpDebug(runId: string, nodeKey: string, attemptNo: number, chunk: string): void;
28
- finalizeAgentAttempt(runId: string, nodeKey: string, attemptNo: number, content: AgentAttemptFinalArtifacts): AgentAttemptFinalArtifactRefs;
29
- writeAgentTelemetry(runId: string, nodeKey: string, attemptNo: number, telemetry: AgentAttemptTelemetry): string;
30
- writeProgramArtifacts(runId: string, nodeKey: string, stdout: string, stderr: string): string[];
31
- mergeAttemptRefs(target: string[], refs: string[] | undefined): void;
32
- private mergeStderrDiagnostics;
33
- private agentAttemptPrefix;
34
- }
35
- //# sourceMappingURL=attempt-artifacts.d.ts.map