@provos/ironcurtain 0.10.0 → 0.12.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 (660) hide show
  1. package/README.md +68 -14
  2. package/dist/auth/oauth-provider.js +1 -4
  3. package/dist/auth/oauth-provider.js.map +1 -1
  4. package/dist/cli-help.d.ts +12 -0
  5. package/dist/cli-help.js +21 -0
  6. package/dist/cli-help.js.map +1 -1
  7. package/dist/cli.js +46 -6
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/agent-model-guard.d.ts +14 -0
  10. package/dist/config/agent-model-guard.js +24 -0
  11. package/dist/config/agent-model-guard.js.map +1 -0
  12. package/dist/config/config-command.js +277 -7
  13. package/dist/config/config-command.js.map +1 -1
  14. package/dist/config/first-start.js +62 -7
  15. package/dist/config/first-start.js.map +1 -1
  16. package/dist/config/generated/compiled-policy.json +528 -161
  17. package/dist/config/generated/test-scenarios.json +4810 -170
  18. package/dist/config/generated/tool-annotations.json +34 -47
  19. package/dist/config/index.d.ts +58 -0
  20. package/dist/config/index.js +97 -15
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/mcp-servers.json +2 -2
  23. package/dist/config/model-provider.d.ts +9 -0
  24. package/dist/config/model-provider.js +13 -0
  25. package/dist/config/model-provider.js.map +1 -1
  26. package/dist/config/paths.d.ts +217 -0
  27. package/dist/config/paths.js +363 -14
  28. package/dist/config/paths.js.map +1 -1
  29. package/dist/config/types.d.ts +7 -1
  30. package/dist/config/user-config.d.ts +101 -6
  31. package/dist/config/user-config.js +145 -31
  32. package/dist/config/user-config.js.map +1 -1
  33. package/dist/config/validate-policy-dir.d.ts +10 -0
  34. package/dist/config/validate-policy-dir.js +59 -0
  35. package/dist/config/validate-policy-dir.js.map +1 -0
  36. package/dist/cron/job-commands.js +22 -2
  37. package/dist/cron/job-commands.js.map +1 -1
  38. package/dist/cron/types.d.ts +16 -2
  39. package/dist/cron/types.js +1 -3
  40. package/dist/cron/types.js.map +1 -1
  41. package/dist/daemon/daemon-command.js +30 -7
  42. package/dist/daemon/daemon-command.js.map +1 -1
  43. package/dist/daemon/ironcurtain-daemon.d.ts +62 -1
  44. package/dist/daemon/ironcurtain-daemon.js +231 -8
  45. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  46. package/dist/daemon-client/daemon-client.d.ts +123 -0
  47. package/dist/daemon-client/daemon-client.js +324 -0
  48. package/dist/daemon-client/daemon-client.js.map +1 -0
  49. package/dist/docker/adapters/claude-code.js +194 -20
  50. package/dist/docker/adapters/claude-code.js.map +1 -1
  51. package/dist/docker/adapters/codex.d.ts +9 -0
  52. package/dist/docker/adapters/codex.js +297 -0
  53. package/dist/docker/adapters/codex.js.map +1 -0
  54. package/dist/docker/adapters/goose.d.ts +12 -11
  55. package/dist/docker/adapters/goose.js +80 -27
  56. package/dist/docker/adapters/goose.js.map +1 -1
  57. package/dist/docker/agent-adapter.d.ts +183 -5
  58. package/dist/docker/agent-adapter.js +16 -0
  59. package/dist/docker/agent-adapter.js.map +1 -1
  60. package/dist/docker/agent-registry.js +5 -0
  61. package/dist/docker/agent-registry.js.map +1 -1
  62. package/dist/docker/apple-container-manager.d.ts +49 -0
  63. package/dist/docker/apple-container-manager.js +464 -0
  64. package/dist/docker/apple-container-manager.js.map +1 -0
  65. package/dist/docker/code-mode-proxy.d.ts +38 -0
  66. package/dist/docker/code-mode-proxy.js +6 -1
  67. package/dist/docker/code-mode-proxy.js.map +1 -1
  68. package/dist/docker/container-lifecycle.d.ts +2 -2
  69. package/dist/docker/container-lifecycle.js.map +1 -1
  70. package/dist/docker/container-runtime.d.ts +29 -0
  71. package/dist/docker/container-runtime.js +76 -0
  72. package/dist/docker/container-runtime.js.map +1 -0
  73. package/dist/docker/docker-agent-session.d.ts +113 -62
  74. package/dist/docker/docker-agent-session.js +271 -294
  75. package/dist/docker/docker-agent-session.js.map +1 -1
  76. package/dist/docker/docker-infrastructure.d.ts +428 -26
  77. package/dist/docker/docker-infrastructure.js +1005 -70
  78. package/dist/docker/docker-infrastructure.js.map +1 -1
  79. package/dist/docker/docker-manager.d.ts +58 -3
  80. package/dist/docker/docker-manager.js +378 -33
  81. package/dist/docker/docker-manager.js.map +1 -1
  82. package/dist/docker/docker-probe.d.ts +45 -0
  83. package/dist/docker/docker-probe.js +86 -0
  84. package/dist/docker/docker-probe.js.map +1 -0
  85. package/dist/docker/docker-progress-sink.d.ts +43 -0
  86. package/dist/docker/docker-progress-sink.js +299 -0
  87. package/dist/docker/docker-progress-sink.js.map +1 -0
  88. package/dist/docker/mitm-proxy.d.ts +135 -1
  89. package/dist/docker/mitm-proxy.js +611 -25
  90. package/dist/docker/mitm-proxy.js.map +1 -1
  91. package/dist/docker/network-topology.d.ts +81 -0
  92. package/dist/docker/network-topology.js +160 -0
  93. package/dist/docker/network-topology.js.map +1 -0
  94. package/dist/docker/oauth-credentials.d.ts +59 -3
  95. package/dist/docker/oauth-credentials.js +181 -14
  96. package/dist/docker/oauth-credentials.js.map +1 -1
  97. package/dist/docker/oauth-token-manager.js +2 -2
  98. package/dist/docker/oauth-token-manager.js.map +1 -1
  99. package/dist/docker/orientation.d.ts +1 -1
  100. package/dist/docker/package-types.d.ts +1 -1
  101. package/dist/docker/provider-config.d.ts +78 -3
  102. package/dist/docker/provider-config.js +295 -31
  103. package/dist/docker/provider-config.js.map +1 -1
  104. package/dist/docker/provision-lock.d.ts +46 -0
  105. package/dist/docker/provision-lock.js +152 -0
  106. package/dist/docker/provision-lock.js.map +1 -0
  107. package/dist/docker/proxy-tools.d.ts +0 -2
  108. package/dist/docker/proxy-tools.js +2 -7
  109. package/dist/docker/proxy-tools.js.map +1 -1
  110. package/dist/docker/pty-session.d.ts +64 -1
  111. package/dist/docker/pty-session.js +306 -104
  112. package/dist/docker/pty-session.js.map +1 -1
  113. package/dist/docker/pty-types.d.ts +0 -2
  114. package/dist/docker/pty-types.js +0 -2
  115. package/dist/docker/pty-types.js.map +1 -1
  116. package/dist/docker/registry-proxy.d.ts +46 -0
  117. package/dist/docker/registry-proxy.js +255 -1
  118. package/dist/docker/registry-proxy.js.map +1 -1
  119. package/dist/docker/resource-limits.d.ts +134 -0
  120. package/dist/docker/resource-limits.js +203 -0
  121. package/dist/docker/resource-limits.js.map +1 -0
  122. package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
  123. package/dist/docker/spawn-with-idle-timeout.js +152 -0
  124. package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
  125. package/dist/docker/sse-extractor.d.ts +51 -0
  126. package/dist/docker/sse-extractor.js +303 -0
  127. package/dist/docker/sse-extractor.js.map +1 -0
  128. package/dist/docker/token-stream-bus.d.ts +83 -0
  129. package/dist/docker/token-stream-bus.js +98 -0
  130. package/dist/docker/token-stream-bus.js.map +1 -0
  131. package/dist/docker/token-stream-types.d.ts +71 -0
  132. package/dist/docker/token-stream-types.js +8 -0
  133. package/dist/docker/token-stream-types.js.map +1 -0
  134. package/dist/docker/trajectory-capture.d.ts +79 -0
  135. package/dist/docker/trajectory-capture.js +521 -0
  136. package/dist/docker/trajectory-capture.js.map +1 -0
  137. package/dist/docker/trajectory-reassembler.d.ts +286 -0
  138. package/dist/docker/trajectory-reassembler.js +990 -0
  139. package/dist/docker/trajectory-reassembler.js.map +1 -0
  140. package/dist/docker/trajectory-tap.d.ts +100 -0
  141. package/dist/docker/trajectory-tap.js +410 -0
  142. package/dist/docker/trajectory-tap.js.map +1 -0
  143. package/dist/docker/trajectory-types.d.ts +187 -0
  144. package/dist/docker/trajectory-types.js +43 -0
  145. package/dist/docker/trajectory-types.js.map +1 -0
  146. package/dist/docker/types.d.ts +105 -12
  147. package/dist/doctor/checks.d.ts +171 -0
  148. package/dist/doctor/checks.js +598 -0
  149. package/dist/doctor/checks.js.map +1 -0
  150. package/dist/doctor/doctor-command.d.ts +29 -0
  151. package/dist/doctor/doctor-command.js +190 -0
  152. package/dist/doctor/doctor-command.js.map +1 -0
  153. package/dist/doctor/mcp-liveness.d.ts +28 -0
  154. package/dist/doctor/mcp-liveness.js +92 -0
  155. package/dist/doctor/mcp-liveness.js.map +1 -0
  156. package/dist/doctor/oauth-checks.d.ts +23 -0
  157. package/dist/doctor/oauth-checks.js +157 -0
  158. package/dist/doctor/oauth-checks.js.map +1 -0
  159. package/dist/doctor/output.d.ts +26 -0
  160. package/dist/doctor/output.js +82 -0
  161. package/dist/doctor/output.js.map +1 -0
  162. package/dist/escalation/listener-command.js +0 -3
  163. package/dist/escalation/listener-command.js.map +1 -1
  164. package/dist/event-bus/typed-event-bus.d.ts +26 -0
  165. package/dist/event-bus/typed-event-bus.js +35 -0
  166. package/dist/event-bus/typed-event-bus.js.map +1 -0
  167. package/dist/index.js +54 -21
  168. package/dist/index.js.map +1 -1
  169. package/dist/logger.js +31 -2
  170. package/dist/logger.js.map +1 -1
  171. package/dist/memory/auto-save.d.ts +18 -4
  172. package/dist/memory/auto-save.js +46 -6
  173. package/dist/memory/auto-save.js.map +1 -1
  174. package/dist/memory/memory-policy.d.ts +41 -0
  175. package/dist/memory/memory-policy.js +36 -0
  176. package/dist/memory/memory-policy.js.map +1 -0
  177. package/dist/mux/mux-app.d.ts +2 -0
  178. package/dist/mux/mux-app.js +1 -0
  179. package/dist/mux/mux-app.js.map +1 -1
  180. package/dist/mux/mux-command.d.ts +10 -1
  181. package/dist/mux/mux-command.js +74 -40
  182. package/dist/mux/mux-command.js.map +1 -1
  183. package/dist/mux/mux-renderer.js +2 -12
  184. package/dist/mux/mux-renderer.js.map +1 -1
  185. package/dist/mux/pty-bridge.d.ts +2 -0
  186. package/dist/mux/pty-bridge.js +3 -0
  187. package/dist/mux/pty-bridge.js.map +1 -1
  188. package/dist/mux/session-scanner.js +1 -2
  189. package/dist/mux/session-scanner.js.map +1 -1
  190. package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
  191. package/dist/{pipeline → observability}/llm-logger.js +8 -3
  192. package/dist/observability/llm-logger.js.map +1 -0
  193. package/dist/observe/observe-command.d.ts +12 -0
  194. package/dist/observe/observe-command.js +285 -0
  195. package/dist/observe/observe-command.js.map +1 -0
  196. package/dist/observe/observe-renderer.d.ts +24 -0
  197. package/dist/observe/observe-renderer.js +87 -0
  198. package/dist/observe/observe-renderer.js.map +1 -0
  199. package/dist/observe/observe-tui-rain.d.ts +42 -0
  200. package/dist/observe/observe-tui-rain.js +531 -0
  201. package/dist/observe/observe-tui-rain.js.map +1 -0
  202. package/dist/observe/observe-tui-text-panel.d.ts +46 -0
  203. package/dist/observe/observe-tui-text-panel.js +525 -0
  204. package/dist/observe/observe-tui-text-panel.js.map +1 -0
  205. package/dist/observe/observe-tui-types.d.ts +270 -0
  206. package/dist/observe/observe-tui-types.js +200 -0
  207. package/dist/observe/observe-tui-types.js.map +1 -0
  208. package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
  209. package/dist/observe/observe-tui-word-scorer.js +572 -0
  210. package/dist/observe/observe-tui-word-scorer.js.map +1 -0
  211. package/dist/observe/observe-tui.d.ts +59 -0
  212. package/dist/observe/observe-tui.js +592 -0
  213. package/dist/observe/observe-tui.js.map +1 -0
  214. package/dist/persona/broad-policy-validator.d.ts +95 -0
  215. package/dist/persona/broad-policy-validator.js +171 -0
  216. package/dist/persona/broad-policy-validator.js.map +1 -0
  217. package/dist/persona/compile-persona-policy.d.ts +54 -2
  218. package/dist/persona/compile-persona-policy.js +29 -4
  219. package/dist/persona/compile-persona-policy.js.map +1 -1
  220. package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
  221. package/dist/persona/event-bus-progress-reporter.js +66 -0
  222. package/dist/persona/event-bus-progress-reporter.js.map +1 -0
  223. package/dist/persona/memory-gate.d.ts +19 -0
  224. package/dist/persona/memory-gate.js +33 -0
  225. package/dist/persona/memory-gate.js.map +1 -0
  226. package/dist/persona/persona-command.js +77 -72
  227. package/dist/persona/persona-command.js.map +1 -1
  228. package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
  229. package/dist/persona/persona-compile-orchestrator.js +504 -0
  230. package/dist/persona/persona-compile-orchestrator.js.map +1 -0
  231. package/dist/persona/persona-service.d.ts +137 -0
  232. package/dist/persona/persona-service.js +263 -0
  233. package/dist/persona/persona-service.js.map +1 -0
  234. package/dist/persona/policy-mutation-audit.d.ts +109 -0
  235. package/dist/persona/policy-mutation-audit.js +179 -0
  236. package/dist/persona/policy-mutation-audit.js.map +1 -0
  237. package/dist/persona/resolve.d.ts +22 -0
  238. package/dist/persona/resolve.js +45 -2
  239. package/dist/persona/resolve.js.map +1 -1
  240. package/dist/persona/rule-delta.d.ts +30 -0
  241. package/dist/persona/rule-delta.js +82 -0
  242. package/dist/persona/rule-delta.js.map +1 -0
  243. package/dist/persona/types.d.ts +28 -0
  244. package/dist/pipeline/annotate.js +10 -2
  245. package/dist/pipeline/annotate.js.map +1 -1
  246. package/dist/pipeline/compile.js +14 -2
  247. package/dist/pipeline/compile.js.map +1 -1
  248. package/dist/pipeline/constitution-compiler.d.ts +25 -14
  249. package/dist/pipeline/constitution-compiler.js +107 -38
  250. package/dist/pipeline/constitution-compiler.js.map +1 -1
  251. package/dist/pipeline/dynamic-list-types.d.ts +3 -6
  252. package/dist/pipeline/dynamic-list-types.js +3 -16
  253. package/dist/pipeline/dynamic-list-types.js.map +1 -1
  254. package/dist/pipeline/pipeline-runner.d.ts +63 -4
  255. package/dist/pipeline/pipeline-runner.js +242 -94
  256. package/dist/pipeline/pipeline-runner.js.map +1 -1
  257. package/dist/pipeline/pipeline-shared.d.ts +33 -4
  258. package/dist/pipeline/pipeline-shared.js +79 -19
  259. package/dist/pipeline/pipeline-shared.js.map +1 -1
  260. package/dist/pipeline/policy-verifier.js +16 -3
  261. package/dist/pipeline/policy-verifier.js.map +1 -1
  262. package/dist/pipeline/proxy-mcp-connections.js +17 -2
  263. package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
  264. package/dist/pipeline/refresh-lists.js +3 -5
  265. package/dist/pipeline/refresh-lists.js.map +1 -1
  266. package/dist/pipeline/scenario-generator.d.ts +4 -8
  267. package/dist/pipeline/scenario-generator.js +13 -46
  268. package/dist/pipeline/scenario-generator.js.map +1 -1
  269. package/dist/sandbox/index.d.ts +29 -0
  270. package/dist/sandbox/index.js +351 -119
  271. package/dist/sandbox/index.js.map +1 -1
  272. package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
  273. package/dist/sandbox/ironcurtain-protocol.js +185 -0
  274. package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
  275. package/dist/session/agent-session.d.ts +6 -0
  276. package/dist/session/agent-session.js +16 -5
  277. package/dist/session/agent-session.js.map +1 -1
  278. package/dist/session/cli-transport.js +0 -6
  279. package/dist/session/cli-transport.js.map +1 -1
  280. package/dist/session/index.d.ts +35 -14
  281. package/dist/session/index.js +333 -130
  282. package/dist/session/index.js.map +1 -1
  283. package/dist/session/preflight.d.ts +21 -13
  284. package/dist/session/preflight.js +227 -88
  285. package/dist/session/preflight.js.map +1 -1
  286. package/dist/session/prompts.d.ts +2 -5
  287. package/dist/session/prompts.js.map +1 -1
  288. package/dist/session/session-manager.d.ts +61 -6
  289. package/dist/session/session-manager.js +72 -10
  290. package/dist/session/session-manager.js.map +1 -1
  291. package/dist/session/session-metadata.d.ts +21 -5
  292. package/dist/session/session-metadata.js +34 -12
  293. package/dist/session/session-metadata.js.map +1 -1
  294. package/dist/session/types.d.ts +320 -5
  295. package/dist/session/types.js +57 -1
  296. package/dist/session/types.js.map +1 -1
  297. package/dist/signal/bot-command.js +6 -1
  298. package/dist/signal/bot-command.js.map +1 -1
  299. package/dist/signal/setup-signal.js +13 -21
  300. package/dist/signal/setup-signal.js.map +1 -1
  301. package/dist/signal/signal-bot-daemon.d.ts +16 -1
  302. package/dist/signal/signal-bot-daemon.js +39 -27
  303. package/dist/signal/signal-bot-daemon.js.map +1 -1
  304. package/dist/signal/signal-container.d.ts +3 -3
  305. package/dist/signal/signal-container.js +9 -3
  306. package/dist/signal/signal-container.js.map +1 -1
  307. package/dist/skills/discovery.d.ts +77 -0
  308. package/dist/skills/discovery.js +206 -0
  309. package/dist/skills/discovery.js.map +1 -0
  310. package/dist/skills/index.d.ts +4 -0
  311. package/dist/skills/index.js +3 -0
  312. package/dist/skills/index.js.map +1 -0
  313. package/dist/skills/staging.d.ts +28 -0
  314. package/dist/skills/staging.js +68 -0
  315. package/dist/skills/staging.js.map +1 -0
  316. package/dist/skills/types.d.ts +46 -0
  317. package/dist/skills/types.js +2 -0
  318. package/dist/skills/types.js.map +1 -0
  319. package/dist/trusted-process/approval-whitelist.d.ts +0 -2
  320. package/dist/trusted-process/approval-whitelist.js +17 -17
  321. package/dist/trusted-process/approval-whitelist.js.map +1 -1
  322. package/dist/trusted-process/async-mutex.d.ts +32 -0
  323. package/dist/trusted-process/async-mutex.js +50 -0
  324. package/dist/trusted-process/async-mutex.js.map +1 -0
  325. package/dist/trusted-process/audit-log.d.ts +38 -1
  326. package/dist/trusted-process/audit-log.js +82 -13
  327. package/dist/trusted-process/audit-log.js.map +1 -1
  328. package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
  329. package/dist/trusted-process/call-circuit-breaker.js +23 -3
  330. package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
  331. package/dist/trusted-process/container-command.d.ts +35 -0
  332. package/dist/trusted-process/container-command.js +49 -0
  333. package/dist/trusted-process/container-command.js.map +1 -0
  334. package/dist/trusted-process/control-server.d.ts +101 -0
  335. package/dist/trusted-process/control-server.js +282 -0
  336. package/dist/trusted-process/control-server.js.map +1 -0
  337. package/dist/trusted-process/domain-utils.d.ts +6 -6
  338. package/dist/trusted-process/domain-utils.js +7 -23
  339. package/dist/trusted-process/domain-utils.js.map +1 -1
  340. package/dist/trusted-process/error-prefixes.d.ts +16 -0
  341. package/dist/trusted-process/error-prefixes.js +17 -0
  342. package/dist/trusted-process/error-prefixes.js.map +1 -0
  343. package/dist/trusted-process/index.d.ts +40 -23
  344. package/dist/trusted-process/index.js +131 -225
  345. package/dist/trusted-process/index.js.map +1 -1
  346. package/dist/trusted-process/list-matcher.d.ts +17 -0
  347. package/dist/trusted-process/list-matcher.js +31 -0
  348. package/dist/trusted-process/list-matcher.js.map +1 -0
  349. package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
  350. package/dist/trusted-process/mcp-client-manager.js +40 -45
  351. package/dist/trusted-process/mcp-client-manager.js.map +1 -1
  352. package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
  353. package/dist/trusted-process/mcp-proxy-server.js +201 -660
  354. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  355. package/dist/trusted-process/policy-engine.d.ts +16 -4
  356. package/dist/trusted-process/policy-engine.js +103 -47
  357. package/dist/trusted-process/policy-engine.js.map +1 -1
  358. package/dist/trusted-process/policy-roots.d.ts +6 -0
  359. package/dist/trusted-process/policy-roots.js +20 -0
  360. package/dist/trusted-process/policy-roots.js.map +1 -1
  361. package/dist/trusted-process/sandbox-integration.d.ts +12 -0
  362. package/dist/trusted-process/sandbox-integration.js +18 -0
  363. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  364. package/dist/trusted-process/tcp-server-transport.d.ts +12 -1
  365. package/dist/trusted-process/tcp-server-transport.js +9 -1
  366. package/dist/trusted-process/tcp-server-transport.js.map +1 -1
  367. package/dist/trusted-process/tool-call-coordinator.d.ts +283 -0
  368. package/dist/trusted-process/tool-call-coordinator.js +592 -0
  369. package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
  370. package/dist/trusted-process/tool-call-pipeline.d.ts +213 -0
  371. package/dist/trusted-process/tool-call-pipeline.js +832 -0
  372. package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
  373. package/dist/trusted-process/tool-description-hints.d.ts +1 -1
  374. package/dist/types/argument-roles.d.ts +1 -1
  375. package/dist/types/argument-roles.js +14 -1
  376. package/dist/types/argument-roles.js.map +1 -1
  377. package/dist/types/audit.d.ts +9 -0
  378. package/dist/{session → types}/errors.d.ts +8 -2
  379. package/dist/{session → types}/errors.js +8 -2
  380. package/dist/types/errors.js.map +1 -0
  381. package/dist/types/reserved-servers.d.ts +11 -0
  382. package/dist/types/reserved-servers.js +12 -0
  383. package/dist/types/reserved-servers.js.map +1 -0
  384. package/dist/types/server-listing.d.ts +14 -0
  385. package/dist/types/server-listing.js +2 -0
  386. package/dist/types/server-listing.js.map +1 -0
  387. package/dist/types/slug.d.ts +2 -0
  388. package/dist/types/slug.js +2 -0
  389. package/dist/types/slug.js.map +1 -1
  390. package/dist/types/url-normalize.d.ts +16 -0
  391. package/dist/types/url-normalize.js +33 -0
  392. package/dist/types/url-normalize.js.map +1 -0
  393. package/dist/util/atomic-write.d.ts +31 -0
  394. package/dist/util/atomic-write.js +43 -0
  395. package/dist/util/atomic-write.js.map +1 -0
  396. package/dist/utils/error-message.d.ts +8 -0
  397. package/dist/utils/error-message.js +11 -0
  398. package/dist/utils/error-message.js.map +1 -0
  399. package/dist/utils/exec-error.d.ts +19 -0
  400. package/dist/utils/exec-error.js +16 -0
  401. package/dist/utils/exec-error.js.map +1 -0
  402. package/dist/utils/is-plain-object.d.ts +7 -0
  403. package/dist/utils/is-plain-object.js +12 -0
  404. package/dist/utils/is-plain-object.js.map +1 -0
  405. package/dist/utils/preflight-checks.d.ts +16 -0
  406. package/dist/utils/preflight-checks.js +178 -0
  407. package/dist/utils/preflight-checks.js.map +1 -0
  408. package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
  409. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
  410. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
  411. package/dist/web-ui/conn-registry.d.ts +14 -0
  412. package/dist/web-ui/conn-registry.js +25 -0
  413. package/dist/web-ui/conn-registry.js.map +1 -0
  414. package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
  415. package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
  416. package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
  417. package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
  418. package/dist/web-ui/dispatch/job-dispatch.js +83 -0
  419. package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
  420. package/dist/web-ui/dispatch/persona-dispatch.d.ts +50 -0
  421. package/dist/web-ui/dispatch/persona-dispatch.js +269 -0
  422. package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
  423. package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
  424. package/dist/web-ui/dispatch/session-dispatch.js +219 -0
  425. package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
  426. package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
  427. package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
  428. package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
  429. package/dist/web-ui/dispatch/types.d.ts +54 -0
  430. package/dist/web-ui/dispatch/types.js +72 -0
  431. package/dist/web-ui/dispatch/types.js.map +1 -0
  432. package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
  433. package/dist/web-ui/dispatch/workflow-dispatch.js +1036 -0
  434. package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
  435. package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
  436. package/dist/web-ui/json-rpc-dispatch.js +34 -0
  437. package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
  438. package/dist/web-ui/state-graph.d.ts +13 -0
  439. package/dist/web-ui/state-graph.js +82 -0
  440. package/dist/web-ui/state-graph.js.map +1 -0
  441. package/dist/web-ui/token-stream-bridge.d.ts +76 -0
  442. package/dist/web-ui/token-stream-bridge.js +265 -0
  443. package/dist/web-ui/token-stream-bridge.js.map +1 -0
  444. package/dist/web-ui/web-event-bus.d.ts +176 -0
  445. package/dist/web-ui/web-event-bus.js +19 -0
  446. package/dist/web-ui/web-event-bus.js.map +1 -0
  447. package/dist/web-ui/web-session-transport.d.ts +31 -0
  448. package/dist/web-ui/web-session-transport.js +109 -0
  449. package/dist/web-ui/web-session-transport.js.map +1 -0
  450. package/dist/web-ui/web-ui-server.d.ts +90 -0
  451. package/dist/web-ui/web-ui-server.js +477 -0
  452. package/dist/web-ui/web-ui-server.js.map +1 -0
  453. package/dist/web-ui/web-ui-types.d.ts +418 -0
  454. package/dist/web-ui/web-ui-types.js +32 -0
  455. package/dist/web-ui/web-ui-types.js.map +1 -0
  456. package/dist/web-ui/ws-utils.d.ts +5 -0
  457. package/dist/web-ui/ws-utils.js +12 -0
  458. package/dist/web-ui/ws-utils.js.map +1 -0
  459. package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
  460. package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -0
  461. package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
  462. package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
  463. package/dist/web-ui-static/index.html +14 -0
  464. package/dist/workflow/artifacts.d.ts +59 -0
  465. package/dist/workflow/artifacts.js +188 -0
  466. package/dist/workflow/artifacts.js.map +1 -0
  467. package/dist/workflow/checkpoint-selection.d.ts +34 -0
  468. package/dist/workflow/checkpoint-selection.js +48 -0
  469. package/dist/workflow/checkpoint-selection.js.map +1 -0
  470. package/dist/workflow/checkpoint.d.ts +35 -0
  471. package/dist/workflow/checkpoint.js +84 -0
  472. package/dist/workflow/checkpoint.js.map +1 -0
  473. package/dist/workflow/cli-shared.d.ts +62 -0
  474. package/dist/workflow/cli-shared.js +117 -0
  475. package/dist/workflow/cli-shared.js.map +1 -0
  476. package/dist/workflow/cli-support.d.ts +92 -0
  477. package/dist/workflow/cli-support.js +421 -0
  478. package/dist/workflow/cli-support.js.map +1 -0
  479. package/dist/workflow/container-snapshots.d.ts +29 -0
  480. package/dist/workflow/container-snapshots.js +137 -0
  481. package/dist/workflow/container-snapshots.js.map +1 -0
  482. package/dist/workflow/daemon-gate-commands.d.ts +21 -0
  483. package/dist/workflow/daemon-gate-commands.js +599 -0
  484. package/dist/workflow/daemon-gate-commands.js.map +1 -0
  485. package/dist/workflow/definition-loader.d.ts +32 -0
  486. package/dist/workflow/definition-loader.js +56 -0
  487. package/dist/workflow/definition-loader.js.map +1 -0
  488. package/dist/workflow/discovery.d.ts +107 -0
  489. package/dist/workflow/discovery.js +263 -0
  490. package/dist/workflow/discovery.js.map +1 -0
  491. package/dist/workflow/errors.d.ts +66 -0
  492. package/dist/workflow/errors.js +49 -0
  493. package/dist/workflow/errors.js.map +1 -0
  494. package/dist/workflow/guards.d.ts +8 -0
  495. package/dist/workflow/guards.js +38 -0
  496. package/dist/workflow/guards.js.map +1 -0
  497. package/dist/workflow/lane-template.d.ts +89 -0
  498. package/dist/workflow/lane-template.js +141 -0
  499. package/dist/workflow/lane-template.js.map +1 -0
  500. package/dist/workflow/lint-integration.d.ts +64 -0
  501. package/dist/workflow/lint-integration.js +56 -0
  502. package/dist/workflow/lint-integration.js.map +1 -0
  503. package/dist/workflow/lint.d.ts +72 -0
  504. package/dist/workflow/lint.js +593 -0
  505. package/dist/workflow/lint.js.map +1 -0
  506. package/dist/workflow/machine-builder.d.ts +178 -0
  507. package/dist/workflow/machine-builder.js +678 -0
  508. package/dist/workflow/machine-builder.js.map +1 -0
  509. package/dist/workflow/message-log.d.ts +99 -0
  510. package/dist/workflow/message-log.js +40 -0
  511. package/dist/workflow/message-log.js.map +1 -0
  512. package/dist/workflow/orchestrator.d.ts +954 -0
  513. package/dist/workflow/orchestrator.js +3594 -0
  514. package/dist/workflow/orchestrator.js.map +1 -0
  515. package/dist/workflow/prompt-builder.d.ts +39 -0
  516. package/dist/workflow/prompt-builder.js +243 -0
  517. package/dist/workflow/prompt-builder.js.map +1 -0
  518. package/dist/workflow/run-state-command.d.ts +9 -0
  519. package/dist/workflow/run-state-command.js +414 -0
  520. package/dist/workflow/run-state-command.js.map +1 -0
  521. package/dist/workflow/run-state-debug-capture.d.ts +40 -0
  522. package/dist/workflow/run-state-debug-capture.js +101 -0
  523. package/dist/workflow/run-state-debug-capture.js.map +1 -0
  524. package/dist/workflow/status-parser.d.ts +68 -0
  525. package/dist/workflow/status-parser.js +274 -0
  526. package/dist/workflow/status-parser.js.map +1 -0
  527. package/dist/workflow/types.d.ts +598 -0
  528. package/dist/workflow/types.js +85 -0
  529. package/dist/workflow/types.js.map +1 -0
  530. package/dist/workflow/validate.d.ts +80 -0
  531. package/dist/workflow/validate.js +788 -0
  532. package/dist/workflow/validate.js.map +1 -0
  533. package/dist/workflow/workflow-command.d.ts +9 -0
  534. package/dist/workflow/workflow-command.js +670 -0
  535. package/dist/workflow/workflow-command.js.map +1 -0
  536. package/dist/workflow/workflow-discovery.d.ts +27 -0
  537. package/dist/workflow/workflow-discovery.js +121 -0
  538. package/dist/workflow/workflow-discovery.js.map +1 -0
  539. package/dist/workflow/workflow-manager.d.ts +156 -0
  540. package/dist/workflow/workflow-manager.js +359 -0
  541. package/dist/workflow/workflow-manager.js.map +1 -0
  542. package/dist/workflow/workflows/design-and-code/README.md +50 -0
  543. package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
  544. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  545. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  546. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  547. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  548. package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  549. package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  550. package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  551. package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
  552. package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
  553. package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  554. package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  555. package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
  556. package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  557. package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
  558. package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  559. package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  560. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  561. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  562. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  563. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  564. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  565. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  566. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  567. package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  568. package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  569. package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  570. package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  571. package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  572. package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  573. package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  574. package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  575. package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  576. package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  577. package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  578. package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  579. package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  580. package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
  581. package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  582. package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  583. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  584. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  585. package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  586. package/dist/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  587. package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  588. package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  589. package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  590. package/dist/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  591. package/dist/workflow/worktree.d.ts +43 -0
  592. package/dist/workflow/worktree.js +106 -0
  593. package/dist/workflow/worktree.js.map +1 -0
  594. package/docker/Dockerfile.base +31 -0
  595. package/docker/Dockerfile.base.arm64 +27 -0
  596. package/docker/Dockerfile.claude-code +3 -1
  597. package/docker/Dockerfile.codex +17 -0
  598. package/docker/Dockerfile.goose +3 -1
  599. package/docker/entrypoint-claude-code.sh +7 -0
  600. package/docker/entrypoint-codex.sh +42 -0
  601. package/docker/entrypoint-goose.sh +6 -0
  602. package/docker/entrypoint-uid-remap.sh +93 -0
  603. package/package.json +27 -11
  604. package/packages/web-ui/README.md +113 -0
  605. package/packages/web-ui/docs/workflow-state-machine.png +0 -0
  606. package/src/config/generated/compiled-policy.json +528 -161
  607. package/src/config/generated/test-scenarios.json +4810 -170
  608. package/src/config/generated/tool-annotations.json +34 -47
  609. package/src/config/mcp-servers.json +2 -2
  610. package/src/workflow/workflows/design-and-code/README.md +50 -0
  611. package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
  612. package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  613. package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  614. package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  615. package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  616. package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  617. package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  618. package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  619. package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
  620. package/src/workflow/workflows/evolve/scripts/README.md +314 -0
  621. package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  622. package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  623. package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
  624. package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  625. package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
  626. package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  627. package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  628. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  629. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  630. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  631. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  632. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  633. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  634. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  635. package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  636. package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  637. package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  638. package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  639. package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  640. package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  641. package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  642. package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  643. package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  644. package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  645. package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  646. package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  647. package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  648. package/src/workflow/workflows/evolve/workflow.yaml +646 -0
  649. package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  650. package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  651. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  652. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  653. package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  654. package/src/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  655. package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  656. package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  657. package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  658. package/src/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  659. package/dist/pipeline/llm-logger.js.map +0 -1
  660. package/dist/session/errors.js.map +0 -1
@@ -0,0 +1,521 @@
1
+ /**
2
+ * Trajectory capture dispatcher and JSONL writer.
3
+ *
4
+ * Owns the per-bundle records queue and per-session file handles. The
5
+ * MITM proxy hands `ExchangeRecord` instances to `write()`; the
6
+ * dispatcher fans them out to per-session `{sessionId}.jsonl` files and
7
+ * maintains a shared `manifest.jsonl`. See
8
+ * docs/designs/mitm-token-trajectory-capture.md §9 for the lifecycle.
9
+ *
10
+ * Design priorities (in order):
11
+ * 1. Never block the proxy thread. `write()` is O(1) synchronous.
12
+ * 2. Binary session model — sessions are complete-and-usable or
13
+ * poisoned wholesale. Individual records are never dropped from a
14
+ * healthy session.
15
+ * 3. Crash safety — append-only JSONL, write-time counters, synthetic
16
+ * session-end on infrastructure teardown.
17
+ */
18
+ import { appendFile as fsAppendFile, mkdir as fsMkdir, writeFile as fsWriteFile } from 'node:fs/promises';
19
+ import { resolve } from 'node:path';
20
+ import { getCaptureManifestFile, getSessionCaptureFile } from '../config/paths.js';
21
+ import * as logger from '../logger.js';
22
+ /** High watermark on the records queue. See §9 step 2. */
23
+ const HIGH_WATERMARK = 1024;
24
+ /** Low watermark after queue-overflow poisoning, before new sessions are accepted. */
25
+ const LOW_WATERMARK = 256;
26
+ /**
27
+ * Upper bound on how long `endSession` waits for a session's in-flight
28
+ * reassemblies to settle before forcibly poisoning them as
29
+ * `mid-stream-abort`. A never-terminating stream that also never aborts
30
+ * would otherwise hang teardown forever. `endSession` is only called
31
+ * after the agent process (and its client socket) has terminated, so a
32
+ * still-pending tap at that point is genuinely stuck.
33
+ */
34
+ const DEFAULT_TEARDOWN_TIMEOUT_MS = 30_000;
35
+ /**
36
+ * Create a new trajectory capture writer rooted at `capturesDir`. The
37
+ * directory is created lazily on first write to avoid an extra mkdir
38
+ * on every session start when capture is disabled.
39
+ */
40
+ export function createTrajectoryCaptureWriter(options) {
41
+ const capturesDir = options.capturesDir;
42
+ const fs = options.fs ?? {
43
+ appendFile: (p, d) => fsAppendFile(p, d),
44
+ mkdir: (p, o) => fsMkdir(p, o),
45
+ writeFile: (p, d) => fsWriteFile(p, d),
46
+ };
47
+ const teardownTimeoutMs = options.teardownTimeoutMs ?? DEFAULT_TEARDOWN_TIMEOUT_MS;
48
+ const manifestPath = getCaptureManifestFile(capturesDir);
49
+ const poisonMarkerPath = resolve(capturesDir, 'manifest.poisoned');
50
+ const sessions = new Map();
51
+ /** Records queue (unbounded; watermark-defended). */
52
+ const recordsQueue = [];
53
+ /** Manifest queue (unbounded; small worst-case). */
54
+ const manifestQueue = [];
55
+ /** Per-session in-flight reassembly promises. */
56
+ const inFlight = new Map();
57
+ /** Sessions currently waiting in Phase B of endSession. */
58
+ const endResolvers = new Map();
59
+ let directoryReady = false;
60
+ let directoryPoisoned = false;
61
+ /** When false, beginSession is rejected (queue overflow throttle). */
62
+ let acceptingNewSessions = true;
63
+ let seqCounter = 0;
64
+ let totalWritten = 0;
65
+ let totalDropped = 0;
66
+ let totalBytes = 0;
67
+ let closed = false;
68
+ let closing = false;
69
+ /** Single-flight drain handle. While set, additional scheduleDrain calls share this promise. */
70
+ let drainInflight = null;
71
+ /** Set when scheduleDrain was called while a drain was in flight; triggers a follow-up pass. */
72
+ let drainRequeued = false;
73
+ /** Currently active persona; stamped onto subsequent records. */
74
+ let activePersona;
75
+ function ensureDirectory() {
76
+ if (directoryReady)
77
+ return Promise.resolve();
78
+ return fs.mkdir(capturesDir, { recursive: true }).then(() => {
79
+ directoryReady = true;
80
+ });
81
+ }
82
+ /**
83
+ * Single-flight drain. Concurrent callers share the in-flight promise.
84
+ * If scheduleDrain is invoked while a drain is running, a follow-up
85
+ * pass is scheduled after the current one settles — preserving the
86
+ * "every enqueue eventually drains" property without spawning parallel
87
+ * drains that race over the queues.
88
+ */
89
+ function scheduleDrain() {
90
+ if (drainInflight) {
91
+ drainRequeued = true;
92
+ return drainInflight;
93
+ }
94
+ drainInflight = (async () => {
95
+ try {
96
+ await drain();
97
+ }
98
+ finally {
99
+ drainInflight = null;
100
+ if (drainRequeued) {
101
+ drainRequeued = false;
102
+ // Chain a follow-up pass so callers awaiting the first
103
+ // promise still see queues drained on resumption paths.
104
+ void scheduleDrain();
105
+ }
106
+ }
107
+ })();
108
+ return drainInflight;
109
+ }
110
+ /**
111
+ * Bundle-wide disk-failure teardown. Poisons every open session,
112
+ * fires `onFlushed` on every queued manifest entry (plus an optional
113
+ * already-shifted `firstEntry`), clears the queues, and resolves every
114
+ * pending `endSession` so no caller hangs on an unwritable directory.
115
+ * Shared by the dir-create failure and manifest-append failure paths.
116
+ */
117
+ async function failBundleDisk(opts) {
118
+ if (opts.writeMarker)
119
+ await writePoisonMarker();
120
+ directoryPoisoned = true;
121
+ acceptingNewSessions = false;
122
+ poisonAllOpenSessions('disk-error');
123
+ if (opts.clearRecords)
124
+ recordsQueue.length = 0;
125
+ opts.firstEntry?.onFlushed?.();
126
+ for (const remaining of manifestQueue) {
127
+ remaining.onFlushed?.();
128
+ }
129
+ manifestQueue.length = 0;
130
+ for (const [sid, resolver] of endResolvers) {
131
+ endResolvers.delete(sid);
132
+ sessions.delete(sid);
133
+ resolver();
134
+ }
135
+ }
136
+ /**
137
+ * Append every queued manifest entry to disk in order, firing each
138
+ * entry's `onFlushed` once durable. Returns `false` (and tears the
139
+ * bundle down via `failBundleDisk`) if an append fails; `true` when the
140
+ * queue drains cleanly.
141
+ */
142
+ async function flushManifestQueue() {
143
+ while (manifestQueue.length > 0) {
144
+ const entry = manifestQueue.shift();
145
+ if (!entry)
146
+ break;
147
+ try {
148
+ await fs.appendFile(manifestPath, entry.line);
149
+ // The end-marker is now durable on disk; resolve the public
150
+ // endSession Promise if one was attached to this entry.
151
+ entry.onFlushed?.();
152
+ }
153
+ catch (err) {
154
+ logger.warn(`[trajectory-capture] manifest appendFile failed: ${errorMessage(err)}`);
155
+ await failBundleDisk({ writeMarker: true, firstEntry: entry });
156
+ return false;
157
+ }
158
+ }
159
+ return true;
160
+ }
161
+ async function drain() {
162
+ try {
163
+ await ensureDirectory();
164
+ }
165
+ catch (err) {
166
+ logger.warn(`[trajectory-capture] failed to create captures dir: ${errorMessage(err)}`);
167
+ // Treat as bundle-wide disk failure. No poison marker — the
168
+ // directory itself is unreachable, so there is nowhere to write it.
169
+ await failBundleDisk({ writeMarker: false, clearRecords: true });
170
+ return;
171
+ }
172
+ // Drain manifest entries first so session-start / session-end markers
173
+ // appear in order with respect to records that already flushed.
174
+ // (Per-session counters are bumped on record writes, so a session-end
175
+ // enqueued AFTER its records is guaranteed to observe the full count.)
176
+ if (!(await flushManifestQueue()))
177
+ return;
178
+ while (recordsQueue.length > 0) {
179
+ const item = recordsQueue.shift();
180
+ if (!item)
181
+ break;
182
+ const session = sessions.get(item.sessionId);
183
+ if (!session) {
184
+ totalDropped++;
185
+ continue;
186
+ }
187
+ if (session.poisoned) {
188
+ // Already poisoned — counters frozen.
189
+ totalDropped++;
190
+ continue;
191
+ }
192
+ try {
193
+ await fs.appendFile(session.filePath, item.line);
194
+ session.exchanges += 1;
195
+ session.bytesWritten += item.byteLength;
196
+ totalWritten += 1;
197
+ totalBytes += item.byteLength;
198
+ }
199
+ catch (err) {
200
+ logger.warn(`[trajectory-capture] appendFile failed for ${session.sessionId}: ${errorMessage(err)}`);
201
+ markSessionPoisonedInternal(session, 'disk-error');
202
+ }
203
+ // Check if this record was the last enqueued one for a pending
204
+ // endSession — if so, enqueue the session-end manifest entry now.
205
+ maybeEnqueueEnd(session.sessionId);
206
+ }
207
+ // Recheck high/low watermark for re-enabling new sessions.
208
+ if (!acceptingNewSessions && !directoryPoisoned && recordsQueue.length < LOW_WATERMARK) {
209
+ acceptingNewSessions = true;
210
+ }
211
+ // Any session whose `endRequested` is true and queue is empty
212
+ // should get its end-marker enqueued.
213
+ for (const [sid] of endResolvers) {
214
+ maybeEnqueueEnd(sid);
215
+ }
216
+ // If maybeEnqueueEnd just appended one or more manifest entries,
217
+ // drain them this pass so the end-marker is on disk before the
218
+ // single-flight loop unwinds.
219
+ if (manifestQueue.length > 0) {
220
+ await flushManifestQueue();
221
+ }
222
+ }
223
+ /**
224
+ * Enqueue a `session-end` manifest entry iff the session is fully
225
+ * drained (no queued records, no in-flight reassembly). Attaches the
226
+ * stored endResolver to the entry so `endSession` resolves only after
227
+ * the entry has been durably appended to the manifest.
228
+ */
229
+ function maybeEnqueueEnd(sessionId) {
230
+ const session = sessions.get(sessionId);
231
+ if (!session) {
232
+ // Session already cleaned up — resolve any orphan resolver
233
+ // defensively.
234
+ const r = endResolvers.get(sessionId);
235
+ if (r) {
236
+ endResolvers.delete(sessionId);
237
+ r();
238
+ }
239
+ return;
240
+ }
241
+ if (!session.endRequested || session.ended)
242
+ return;
243
+ const hasQueued = recordsQueue.some((it) => it.sessionId === sessionId);
244
+ const hasInFlight = (inFlight.get(sessionId)?.size ?? 0) > 0;
245
+ if (hasQueued || hasInFlight)
246
+ return;
247
+ session.ended = true;
248
+ const entry = buildSessionEndEntry(session);
249
+ const resolver = endResolvers.get(sessionId);
250
+ endResolvers.delete(sessionId);
251
+ manifestQueue.push({
252
+ line: serializeJsonl(entry),
253
+ onFlushed: () => {
254
+ sessions.delete(sessionId);
255
+ resolver?.();
256
+ },
257
+ });
258
+ }
259
+ /**
260
+ * Build a `session-end` manifest entry from the session's current
261
+ * counters and poison state. Shared by the two-phase `maybeEnqueueEnd`
262
+ * path and the synthetic teardown emitted by `close()`. Pass
263
+ * `closedReason` only for the teardown path.
264
+ */
265
+ function buildSessionEndEntry(session, opts) {
266
+ return {
267
+ schemaVersion: 1,
268
+ event: 'session-end',
269
+ seq: session.seq,
270
+ sessionId: session.sessionId,
271
+ ...(session.persona !== undefined ? { persona: session.persona } : {}),
272
+ ...(session.fsmState !== undefined ? { fsmState: session.fsmState } : {}),
273
+ ts: new Date().toISOString(),
274
+ exchanges: session.exchanges,
275
+ bytesWritten: session.bytesWritten,
276
+ poisoned: session.poisoned,
277
+ ...(session.poisonReason !== undefined ? { poisonReason: session.poisonReason } : {}),
278
+ ...(opts?.closedReason !== undefined ? { closedReason: opts.closedReason } : {}),
279
+ };
280
+ }
281
+ function markSessionPoisonedInternal(session, reason) {
282
+ if (session.poisoned)
283
+ return;
284
+ session.poisoned = true;
285
+ session.poisonReason = reason;
286
+ }
287
+ function poisonAllOpenSessions(reason) {
288
+ for (const session of sessions.values()) {
289
+ markSessionPoisonedInternal(session, reason);
290
+ }
291
+ }
292
+ async function writePoisonMarker() {
293
+ try {
294
+ await fs.writeFile(poisonMarkerPath, '');
295
+ }
296
+ catch (err) {
297
+ logger.warn(`[trajectory-capture] failed to write poison marker: ${errorMessage(err)}`);
298
+ }
299
+ }
300
+ function serializeJsonl(value) {
301
+ return JSON.stringify(value) + '\n';
302
+ }
303
+ function trackInFlightInternal(sessionId, promise) {
304
+ let set = inFlight.get(sessionId);
305
+ if (!set) {
306
+ set = new Set();
307
+ inFlight.set(sessionId, set);
308
+ }
309
+ set.add(promise);
310
+ const cleanup = () => {
311
+ const s = inFlight.get(sessionId);
312
+ if (!s)
313
+ return;
314
+ s.delete(promise);
315
+ if (s.size === 0)
316
+ inFlight.delete(sessionId);
317
+ // A settled in-flight promise may have been the last gate on a
318
+ // pending endSession — nudge the drain.
319
+ void scheduleDrain();
320
+ };
321
+ promise.then(cleanup, cleanup);
322
+ }
323
+ /**
324
+ * Forcibly drop a session's in-flight gate so a hung tap cannot block
325
+ * `endSession` past the teardown timeout. The promises' own
326
+ * `then(cleanup)` may still fire later; `cleanup` tolerates a missing
327
+ * set, so this is safe to race with settlement.
328
+ */
329
+ function forceClearInFlight(sessionId) {
330
+ inFlight.delete(sessionId);
331
+ }
332
+ return {
333
+ beginSession(opts) {
334
+ if (closed || closing)
335
+ return;
336
+ if (!acceptingNewSessions || directoryPoisoned) {
337
+ logger.warn(`[trajectory-capture] beginSession refused (overflow/poison): sessionId=${opts.sessionId}`);
338
+ return;
339
+ }
340
+ const existing = sessions.get(opts.sessionId);
341
+ if (existing) {
342
+ // Idempotent: first begin wins; the manifest `session-start` entry
343
+ // for this sessionId is already written and is NOT rewritten here.
344
+ // A duplicate begin carrying persona/fsmState that the first call
345
+ // lacked is almost always a lifecycle bug (e.g. two call sites both
346
+ // driving capture for the same session). Warn loudly so it isn't
347
+ // silently swallowed — the richer data would otherwise be lost.
348
+ const incomingPersona = opts.persona ?? activePersona;
349
+ const personaConflict = incomingPersona !== undefined && incomingPersona !== existing.persona;
350
+ const fsmConflict = opts.fsmState !== undefined && opts.fsmState !== existing.fsmState;
351
+ if (personaConflict || fsmConflict) {
352
+ logger.warn(`[trajectory-capture] duplicate beginSession for sessionId=${opts.sessionId} ` +
353
+ `carries different metadata (persona=${String(incomingPersona)} fsmState=${String(opts.fsmState)}) ` +
354
+ `than the first begin (persona=${String(existing.persona)} fsmState=${String(existing.fsmState)}); ` +
355
+ `first begin wins, incoming metadata ignored.`);
356
+ }
357
+ return;
358
+ }
359
+ seqCounter += 1;
360
+ const filePath = getSessionCaptureFile(capturesDir, opts.sessionId);
361
+ const state = {
362
+ sessionId: opts.sessionId,
363
+ filePath,
364
+ persona: opts.persona ?? activePersona,
365
+ fsmState: opts.fsmState,
366
+ seq: seqCounter,
367
+ startedAt: new Date().toISOString(),
368
+ endRequested: false,
369
+ ended: false,
370
+ exchanges: 0,
371
+ bytesWritten: 0,
372
+ poisoned: false,
373
+ };
374
+ sessions.set(opts.sessionId, state);
375
+ const entry = {
376
+ schemaVersion: 1,
377
+ event: 'session-start',
378
+ seq: state.seq,
379
+ sessionId: state.sessionId,
380
+ ...(state.persona !== undefined ? { persona: state.persona } : {}),
381
+ ...(state.fsmState !== undefined ? { fsmState: state.fsmState } : {}),
382
+ ts: state.startedAt,
383
+ };
384
+ manifestQueue.push({ line: serializeJsonl(entry) });
385
+ void scheduleDrain();
386
+ },
387
+ write(record) {
388
+ if (closed || closing)
389
+ return;
390
+ const sid = record.sessionId;
391
+ const session = sessions.get(sid);
392
+ if (!session) {
393
+ // beginSession was not called — a programming error. We can't
394
+ // poison a session that doesn't exist; just drop and log.
395
+ totalDropped += 1;
396
+ logger.warn(`[trajectory-capture] write() before beginSession for ${sid}`);
397
+ return;
398
+ }
399
+ if (session.endRequested || session.poisoned) {
400
+ totalDropped += 1;
401
+ return;
402
+ }
403
+ const line = serializeJsonl(record);
404
+ const byteLength = Buffer.byteLength(line, 'utf-8');
405
+ recordsQueue.push({ sessionId: sid, line, byteLength });
406
+ // High-watermark tripwire: poison every open session, refuse new
407
+ // sessions until the queue drains below LOW_WATERMARK.
408
+ if (recordsQueue.length >= HIGH_WATERMARK && acceptingNewSessions) {
409
+ logger.warn(`[trajectory-capture] high watermark reached (${recordsQueue.length}) — poisoning open sessions`);
410
+ poisonAllOpenSessions('queue-overflow');
411
+ acceptingNewSessions = false;
412
+ }
413
+ void scheduleDrain();
414
+ },
415
+ setPersona(persona) {
416
+ activePersona = persona;
417
+ },
418
+ async endSession(sessionId) {
419
+ const session = sessions.get(sessionId);
420
+ if (!session)
421
+ return;
422
+ // Phase A: flip endRequested (synchronous).
423
+ session.endRequested = true;
424
+ // Phase B: install a resolver fired when this session's
425
+ // `session-end` manifest entry is durable on disk.
426
+ const promise = new Promise((resolveOuter) => {
427
+ endResolvers.set(sessionId, resolveOuter);
428
+ });
429
+ void scheduleDrain();
430
+ // Wait for inflight reassemblies to settle (Phase B condition 2),
431
+ // but bound the wait: a never-terminating stream that also never
432
+ // aborts would otherwise hang teardown forever. On timeout, poison
433
+ // the session `mid-stream-abort` and force the still-pending taps
434
+ // to settle so the drain can emit the session-end marker.
435
+ const inflightSet = inFlight.get(sessionId);
436
+ if (inflightSet && inflightSet.size > 0) {
437
+ let timer;
438
+ const timeout = new Promise((res) => {
439
+ timer = setTimeout(() => res('timeout'), teardownTimeoutMs);
440
+ });
441
+ const settled = Promise.allSettled([...inflightSet]).then(() => 'settled');
442
+ const outcome = await Promise.race([settled, timeout]);
443
+ if (timer)
444
+ clearTimeout(timer);
445
+ if (outcome === 'timeout') {
446
+ const session2 = sessions.get(sessionId);
447
+ if (session2 && !session2.poisoned) {
448
+ markSessionPoisonedInternal(session2, 'mid-stream-abort');
449
+ }
450
+ // Release the in-flight gate so the drain can emit session-end;
451
+ // the hung tap's promise may settle later but no longer blocks.
452
+ forceClearInFlight(sessionId);
453
+ }
454
+ }
455
+ // Nudge the drain so the just-settled in-flights are picked up.
456
+ void scheduleDrain();
457
+ // The promise resolves only after the session-end manifest entry
458
+ // has actually been appended to disk (or after a disk-failure
459
+ // path explicitly fires the resolver). Callers that immediately
460
+ // tear down infrastructure see the manifest entry already
461
+ // durable.
462
+ await promise;
463
+ },
464
+ async close() {
465
+ if (closed)
466
+ return;
467
+ closing = true;
468
+ // Emit synthetic session-end for any sessions still open.
469
+ for (const session of [...sessions.values()]) {
470
+ if (!session.endRequested) {
471
+ session.endRequested = true;
472
+ }
473
+ if (!session.poisoned) {
474
+ markSessionPoisonedInternal(session, 'infrastructure-teardown');
475
+ }
476
+ // Synthesize the session-end now (skip the two-phase wait;
477
+ // teardown is best-effort). The session was just poisoned above,
478
+ // so `buildSessionEndEntry` records poisoned:true with the reason.
479
+ if (!session.ended) {
480
+ session.ended = true;
481
+ const entry = buildSessionEndEntry(session, { closedReason: 'infrastructure-teardown' });
482
+ manifestQueue.push({ line: serializeJsonl(entry) });
483
+ }
484
+ }
485
+ sessions.clear();
486
+ // Drain whatever is queued — single-flight will chain follow-up
487
+ // passes if more enqueues happened mid-drain (drainRequeued
488
+ // mechanism).
489
+ await scheduleDrain();
490
+ // If the drain is itself rescheduled internally, the chained
491
+ // follow-up will have run; wait for that too if it exists.
492
+ if (drainInflight) {
493
+ await drainInflight;
494
+ }
495
+ closed = true;
496
+ closing = false;
497
+ },
498
+ stats() {
499
+ return {
500
+ written: totalWritten,
501
+ dropped: totalDropped,
502
+ queued: recordsQueue.length + manifestQueue.length,
503
+ bytesWritten: totalBytes,
504
+ openSessions: sessions.size,
505
+ };
506
+ },
507
+ markSessionPoisoned(sessionId, reason) {
508
+ const session = sessions.get(sessionId);
509
+ if (!session)
510
+ return;
511
+ markSessionPoisonedInternal(session, reason);
512
+ },
513
+ trackInFlight(sessionId, promise) {
514
+ trackInFlightInternal(sessionId, promise);
515
+ },
516
+ };
517
+ }
518
+ function errorMessage(err) {
519
+ return err instanceof Error ? err.message : String(err);
520
+ }
521
+ //# sourceMappingURL=trajectory-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory-capture.js","sourceRoot":"","sources":["../../src/docker/trajectory-capture.ts"],"names":[],"mappings":"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"}