@provos/ironcurtain 0.11.0 → 0.13.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 (472) hide show
  1. package/README.md +23 -19
  2. package/dist/cli-help.d.ts +12 -0
  3. package/dist/cli-help.js +21 -0
  4. package/dist/cli-help.js.map +1 -1
  5. package/dist/cli.js +14 -6
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config/agent-model-guard.d.ts +14 -0
  8. package/dist/config/agent-model-guard.js +24 -0
  9. package/dist/config/agent-model-guard.js.map +1 -0
  10. package/dist/config/config-command.d.ts +33 -1
  11. package/dist/config/config-command.js +723 -11
  12. package/dist/config/config-command.js.map +1 -1
  13. package/dist/config/first-start.js +2 -8
  14. package/dist/config/first-start.js.map +1 -1
  15. package/dist/config/model-provider.d.ts +9 -0
  16. package/dist/config/model-provider.js +13 -0
  17. package/dist/config/model-provider.js.map +1 -1
  18. package/dist/config/openrouter-catalog.d.ts +46 -0
  19. package/dist/config/openrouter-catalog.js +111 -0
  20. package/dist/config/openrouter-catalog.js.map +1 -0
  21. package/dist/config/openrouter-models-fallback.d.ts +15 -0
  22. package/dist/config/openrouter-models-fallback.js +49 -0
  23. package/dist/config/openrouter-models-fallback.js.map +1 -0
  24. package/dist/config/paths.d.ts +48 -6
  25. package/dist/config/paths.js +63 -8
  26. package/dist/config/paths.js.map +1 -1
  27. package/dist/config/types.d.ts +8 -0
  28. package/dist/config/user-config.d.ts +179 -6
  29. package/dist/config/user-config.js +282 -5
  30. package/dist/config/user-config.js.map +1 -1
  31. package/dist/daemon/daemon-command.js +14 -5
  32. package/dist/daemon/daemon-command.js.map +1 -1
  33. package/dist/daemon/ironcurtain-daemon.d.ts +18 -0
  34. package/dist/daemon/ironcurtain-daemon.js +28 -1
  35. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  36. package/dist/daemon-client/daemon-client.d.ts +123 -0
  37. package/dist/daemon-client/daemon-client.js +324 -0
  38. package/dist/daemon-client/daemon-client.js.map +1 -0
  39. package/dist/docker/adapters/claude-code.js +109 -1
  40. package/dist/docker/adapters/claude-code.js.map +1 -1
  41. package/dist/docker/adapters/codex.d.ts +18 -0
  42. package/dist/docker/adapters/codex.js +376 -0
  43. package/dist/docker/adapters/codex.js.map +1 -0
  44. package/dist/docker/adapters/goose.js +38 -2
  45. package/dist/docker/adapters/goose.js.map +1 -1
  46. package/dist/docker/agent-adapter.d.ts +34 -6
  47. package/dist/docker/agent-adapter.js +2 -0
  48. package/dist/docker/agent-adapter.js.map +1 -1
  49. package/dist/docker/agent-registry.js +5 -0
  50. package/dist/docker/agent-registry.js.map +1 -1
  51. package/dist/docker/apple-container-manager.d.ts +49 -0
  52. package/dist/docker/apple-container-manager.js +486 -0
  53. package/dist/docker/apple-container-manager.js.map +1 -0
  54. package/dist/docker/ca.js +9 -2
  55. package/dist/docker/ca.js.map +1 -1
  56. package/dist/docker/code-mode-proxy.d.ts +11 -0
  57. package/dist/docker/code-mode-proxy.js +3 -1
  58. package/dist/docker/code-mode-proxy.js.map +1 -1
  59. package/dist/docker/container-lifecycle.d.ts +2 -2
  60. package/dist/docker/container-lifecycle.js +9 -0
  61. package/dist/docker/container-lifecycle.js.map +1 -1
  62. package/dist/docker/container-runtime.d.ts +29 -0
  63. package/dist/docker/container-runtime.js +76 -0
  64. package/dist/docker/container-runtime.js.map +1 -0
  65. package/dist/docker/docker-agent-session.d.ts +31 -0
  66. package/dist/docker/docker-agent-session.js +97 -7
  67. package/dist/docker/docker-agent-session.js.map +1 -1
  68. package/dist/docker/docker-infrastructure.d.ts +232 -15
  69. package/dist/docker/docker-infrastructure.js +762 -118
  70. package/dist/docker/docker-infrastructure.js.map +1 -1
  71. package/dist/docker/docker-manager.d.ts +25 -5
  72. package/dist/docker/docker-manager.js +388 -21
  73. package/dist/docker/docker-manager.js.map +1 -1
  74. package/dist/docker/docker-probe.d.ts +45 -0
  75. package/dist/docker/docker-probe.js +86 -0
  76. package/dist/docker/docker-probe.js.map +1 -0
  77. package/dist/docker/docker-progress-sink.d.ts +1 -1
  78. package/dist/docker/docker-resource-lifecycle.d.ts +71 -0
  79. package/dist/docker/docker-resource-lifecycle.js +454 -0
  80. package/dist/docker/docker-resource-lifecycle.js.map +1 -0
  81. package/dist/docker/gc-command.d.ts +2 -0
  82. package/dist/docker/gc-command.js +37 -0
  83. package/dist/docker/gc-command.js.map +1 -0
  84. package/dist/docker/mitm-proxy.d.ts +58 -5
  85. package/dist/docker/mitm-proxy.js +338 -26
  86. package/dist/docker/mitm-proxy.js.map +1 -1
  87. package/dist/docker/network-topology.d.ts +88 -0
  88. package/dist/docker/network-topology.js +167 -0
  89. package/dist/docker/network-topology.js.map +1 -0
  90. package/dist/docker/oauth-credentials.d.ts +13 -0
  91. package/dist/docker/oauth-credentials.js +125 -0
  92. package/dist/docker/oauth-credentials.js.map +1 -1
  93. package/dist/docker/openrouter.d.ts +107 -0
  94. package/dist/docker/openrouter.js +236 -0
  95. package/dist/docker/openrouter.js.map +1 -0
  96. package/dist/docker/orientation.js +1 -1
  97. package/dist/docker/orientation.js.map +1 -1
  98. package/dist/docker/package-types.d.ts +1 -1
  99. package/dist/docker/platform.d.ts +3 -1
  100. package/dist/docker/platform.js +3 -1
  101. package/dist/docker/platform.js.map +1 -1
  102. package/dist/docker/provider-config.d.ts +35 -1
  103. package/dist/docker/provider-config.js +93 -3
  104. package/dist/docker/provider-config.js.map +1 -1
  105. package/dist/docker/provision-lock.d.ts +46 -0
  106. package/dist/docker/provision-lock.js +152 -0
  107. package/dist/docker/provision-lock.js.map +1 -0
  108. package/dist/docker/pty-session.d.ts +22 -0
  109. package/dist/docker/pty-session.js +238 -84
  110. package/dist/docker/pty-session.js.map +1 -1
  111. package/dist/docker/pty-types.d.ts +15 -0
  112. package/dist/docker/pty-types.js +8 -0
  113. package/dist/docker/pty-types.js.map +1 -1
  114. package/dist/docker/registry-proxy.d.ts +46 -0
  115. package/dist/docker/registry-proxy.js +255 -1
  116. package/dist/docker/registry-proxy.js.map +1 -1
  117. package/dist/docker/resource-limits.d.ts +14 -5
  118. package/dist/docker/resource-limits.js +11 -8
  119. package/dist/docker/resource-limits.js.map +1 -1
  120. package/dist/docker/sse-extractor.js +55 -5
  121. package/dist/docker/sse-extractor.js.map +1 -1
  122. package/dist/docker/stream-delay.d.ts +86 -0
  123. package/dist/docker/stream-delay.js +218 -0
  124. package/dist/docker/stream-delay.js.map +1 -0
  125. package/dist/docker/token-stream-types.d.ts +15 -0
  126. package/dist/docker/trajectory-capture.d.ts +79 -0
  127. package/dist/docker/trajectory-capture.js +521 -0
  128. package/dist/docker/trajectory-capture.js.map +1 -0
  129. package/dist/docker/trajectory-reassembler.d.ts +286 -0
  130. package/dist/docker/trajectory-reassembler.js +1010 -0
  131. package/dist/docker/trajectory-reassembler.js.map +1 -0
  132. package/dist/docker/trajectory-tap.d.ts +100 -0
  133. package/dist/docker/trajectory-tap.js +410 -0
  134. package/dist/docker/trajectory-tap.js.map +1 -0
  135. package/dist/docker/trajectory-types.d.ts +187 -0
  136. package/dist/docker/trajectory-types.js +43 -0
  137. package/dist/docker/trajectory-types.js.map +1 -0
  138. package/dist/docker/types.d.ts +116 -12
  139. package/dist/doctor/checks.d.ts +39 -6
  140. package/dist/doctor/checks.js +129 -25
  141. package/dist/doctor/checks.js.map +1 -1
  142. package/dist/doctor/doctor-command.js +39 -9
  143. package/dist/doctor/doctor-command.js.map +1 -1
  144. package/dist/doctor/mcp-liveness.d.ts +1 -1
  145. package/dist/doctor/mcp-liveness.js +12 -4
  146. package/dist/doctor/mcp-liveness.js.map +1 -1
  147. package/dist/escalation/escalation-watcher.js +6 -0
  148. package/dist/escalation/escalation-watcher.js.map +1 -1
  149. package/dist/{mux → escalation}/trusted-input.d.ts +7 -4
  150. package/dist/{mux → escalation}/trusted-input.js +8 -5
  151. package/dist/escalation/trusted-input.js.map +1 -0
  152. package/dist/hash.js.map +1 -1
  153. package/dist/index.js +65 -16
  154. package/dist/index.js.map +1 -1
  155. package/dist/mux/mux-app.d.ts +9 -0
  156. package/dist/mux/mux-app.js +18 -16
  157. package/dist/mux/mux-app.js.map +1 -1
  158. package/dist/mux/mux-command.js +26 -8
  159. package/dist/mux/mux-command.js.map +1 -1
  160. package/dist/mux/mux-input-handler.d.ts +26 -2
  161. package/dist/mux/mux-input-handler.js +93 -11
  162. package/dist/mux/mux-input-handler.js.map +1 -1
  163. package/dist/mux/mux-renderer.d.ts +2 -1
  164. package/dist/mux/mux-renderer.js +67 -0
  165. package/dist/mux/mux-renderer.js.map +1 -1
  166. package/dist/mux/provider-profile-snapshot.d.ts +44 -0
  167. package/dist/mux/provider-profile-snapshot.js +56 -0
  168. package/dist/mux/provider-profile-snapshot.js.map +1 -0
  169. package/dist/mux/types.d.ts +3 -2
  170. package/dist/mux/types.js +6 -2
  171. package/dist/mux/types.js.map +1 -1
  172. package/dist/observe/observe-command.js +112 -125
  173. package/dist/observe/observe-command.js.map +1 -1
  174. package/dist/persona/broad-policy-validator.d.ts +95 -0
  175. package/dist/persona/broad-policy-validator.js +171 -0
  176. package/dist/persona/broad-policy-validator.js.map +1 -0
  177. package/dist/persona/compile-persona-policy.d.ts +54 -2
  178. package/dist/persona/compile-persona-policy.js +29 -4
  179. package/dist/persona/compile-persona-policy.js.map +1 -1
  180. package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
  181. package/dist/persona/event-bus-progress-reporter.js +66 -0
  182. package/dist/persona/event-bus-progress-reporter.js.map +1 -0
  183. package/dist/persona/persona-command.js +46 -76
  184. package/dist/persona/persona-command.js.map +1 -1
  185. package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
  186. package/dist/persona/persona-compile-orchestrator.js +504 -0
  187. package/dist/persona/persona-compile-orchestrator.js.map +1 -0
  188. package/dist/persona/persona-service.d.ts +137 -0
  189. package/dist/persona/persona-service.js +263 -0
  190. package/dist/persona/persona-service.js.map +1 -0
  191. package/dist/persona/policy-mutation-audit.d.ts +109 -0
  192. package/dist/persona/policy-mutation-audit.js +179 -0
  193. package/dist/persona/policy-mutation-audit.js.map +1 -0
  194. package/dist/persona/rule-delta.d.ts +30 -0
  195. package/dist/persona/rule-delta.js +82 -0
  196. package/dist/persona/rule-delta.js.map +1 -0
  197. package/dist/persona/types.d.ts +12 -0
  198. package/dist/pipeline/annotate.js +10 -2
  199. package/dist/pipeline/annotate.js.map +1 -1
  200. package/dist/pipeline/compile.js +14 -2
  201. package/dist/pipeline/compile.js.map +1 -1
  202. package/dist/pipeline/constitution-compiler.js.map +1 -1
  203. package/dist/pipeline/generate-with-repair.js.map +1 -1
  204. package/dist/pipeline/pipeline-runner.d.ts +63 -4
  205. package/dist/pipeline/pipeline-runner.js +159 -50
  206. package/dist/pipeline/pipeline-runner.js.map +1 -1
  207. package/dist/pipeline/pipeline-shared.d.ts +32 -3
  208. package/dist/pipeline/pipeline-shared.js +76 -8
  209. package/dist/pipeline/pipeline-shared.js.map +1 -1
  210. package/dist/pipeline/refresh-lists.js +3 -5
  211. package/dist/pipeline/refresh-lists.js.map +1 -1
  212. package/dist/pipeline/scenario-schema-validator.js.map +1 -1
  213. package/dist/{mux → pty}/pty-bridge.d.ts +41 -3
  214. package/dist/{mux → pty}/pty-bridge.js +71 -18
  215. package/dist/pty/pty-bridge.js.map +1 -0
  216. package/dist/pty/resolve-ironcurtain-bin.d.ts +17 -0
  217. package/dist/pty/resolve-ironcurtain-bin.js +22 -0
  218. package/dist/pty/resolve-ironcurtain-bin.js.map +1 -0
  219. package/dist/sandbox/index.d.ts +19 -4
  220. package/dist/sandbox/index.js +31 -18
  221. package/dist/sandbox/index.js.map +1 -1
  222. package/dist/servers/fetch-server.js +2 -0
  223. package/dist/servers/fetch-server.js.map +1 -1
  224. package/dist/session/index.d.ts +1 -1
  225. package/dist/session/index.js +20 -2
  226. package/dist/session/index.js.map +1 -1
  227. package/dist/session/preflight.d.ts +20 -35
  228. package/dist/session/preflight.js +92 -109
  229. package/dist/session/preflight.js.map +1 -1
  230. package/dist/session/resource-budget-tracker.js +8 -0
  231. package/dist/session/resource-budget-tracker.js.map +1 -1
  232. package/dist/session/session-manager.d.ts +7 -0
  233. package/dist/session/session-manager.js.map +1 -1
  234. package/dist/session/types.d.ts +23 -0
  235. package/dist/signal/bot-command.js +6 -1
  236. package/dist/signal/bot-command.js.map +1 -1
  237. package/dist/signal/setup-signal.js +1 -1
  238. package/dist/signal/setup-signal.js.map +1 -1
  239. package/dist/signal/signal-bot-daemon.d.ts +1 -0
  240. package/dist/signal/signal-bot-daemon.js +9 -2
  241. package/dist/signal/signal-bot-daemon.js.map +1 -1
  242. package/dist/signal/signal-container.d.ts +3 -3
  243. package/dist/signal/signal-container.js +2 -2
  244. package/dist/signal/signal-container.js.map +1 -1
  245. package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
  246. package/dist/trusted-process/call-circuit-breaker.js +22 -3
  247. package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
  248. package/dist/trusted-process/container-command.d.ts +35 -0
  249. package/dist/trusted-process/container-command.js +49 -0
  250. package/dist/trusted-process/container-command.js.map +1 -0
  251. package/dist/trusted-process/mcp-error-utils.js +4 -1
  252. package/dist/trusted-process/mcp-error-utils.js.map +1 -1
  253. package/dist/trusted-process/mcp-proxy-server.js +37 -3
  254. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  255. package/dist/trusted-process/policy-engine.js +13 -2
  256. package/dist/trusted-process/policy-engine.js.map +1 -1
  257. package/dist/trusted-process/tcp-server-transport.d.ts +19 -1
  258. package/dist/trusted-process/tcp-server-transport.js +56 -10
  259. package/dist/trusted-process/tcp-server-transport.js.map +1 -1
  260. package/dist/trusted-process/tool-call-coordinator.d.ts +22 -8
  261. package/dist/trusted-process/tool-call-coordinator.js +149 -65
  262. package/dist/trusted-process/tool-call-coordinator.js.map +1 -1
  263. package/dist/trusted-process/tool-call-pipeline.d.ts +8 -0
  264. package/dist/trusted-process/tool-call-pipeline.js +68 -34
  265. package/dist/trusted-process/tool-call-pipeline.js.map +1 -1
  266. package/dist/util/atomic-write.d.ts +31 -0
  267. package/dist/util/atomic-write.js +43 -0
  268. package/dist/util/atomic-write.js.map +1 -0
  269. package/dist/utils/preflight-checks.js +1 -3
  270. package/dist/utils/preflight-checks.js.map +1 -1
  271. package/dist/utils/stdio-guard.d.ts +1 -0
  272. package/dist/utils/stdio-guard.js +27 -0
  273. package/dist/utils/stdio-guard.js.map +1 -0
  274. package/dist/web-ui/__tests__/config-dispatch.test.d.ts +13 -0
  275. package/dist/web-ui/__tests__/config-dispatch.test.js +383 -0
  276. package/dist/web-ui/__tests__/config-dispatch.test.js.map +1 -0
  277. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +6 -0
  278. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -1
  279. package/dist/web-ui/conn-registry.d.ts +14 -0
  280. package/dist/web-ui/conn-registry.js +25 -0
  281. package/dist/web-ui/conn-registry.js.map +1 -0
  282. package/dist/web-ui/dispatch/config-dispatch.d.ts +15 -0
  283. package/dist/web-ui/dispatch/config-dispatch.js +277 -0
  284. package/dist/web-ui/dispatch/config-dispatch.js.map +1 -0
  285. package/dist/web-ui/dispatch/escalation-dispatch.js +11 -2
  286. package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -1
  287. package/dist/web-ui/dispatch/persona-dispatch.d.ts +46 -2
  288. package/dist/web-ui/dispatch/persona-dispatch.js +209 -56
  289. package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -1
  290. package/dist/web-ui/dispatch/pty-dispatch.d.ts +15 -0
  291. package/dist/web-ui/dispatch/pty-dispatch.js +66 -0
  292. package/dist/web-ui/dispatch/pty-dispatch.js.map +1 -0
  293. package/dist/web-ui/dispatch/session-dispatch.js +89 -6
  294. package/dist/web-ui/dispatch/session-dispatch.js.map +1 -1
  295. package/dist/web-ui/dispatch/types.d.ts +35 -0
  296. package/dist/web-ui/dispatch/types.js +42 -1
  297. package/dist/web-ui/dispatch/types.js.map +1 -1
  298. package/dist/web-ui/dispatch/workflow-dispatch.js +116 -5
  299. package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -1
  300. package/dist/web-ui/json-rpc-dispatch.js +4 -1
  301. package/dist/web-ui/json-rpc-dispatch.js.map +1 -1
  302. package/dist/web-ui/pty-session-manager.d.ts +234 -0
  303. package/dist/web-ui/pty-session-manager.js +599 -0
  304. package/dist/web-ui/pty-session-manager.js.map +1 -0
  305. package/dist/web-ui/web-event-bus.d.ts +34 -1
  306. package/dist/web-ui/web-event-bus.js.map +1 -1
  307. package/dist/web-ui/web-session-transport.js.map +1 -1
  308. package/dist/web-ui/web-ui-server.d.ts +22 -0
  309. package/dist/web-ui/web-ui-server.js +41 -0
  310. package/dist/web-ui/web-ui-server.js.map +1 -1
  311. package/dist/web-ui/web-ui-types.d.ts +212 -5
  312. package/dist/web-ui/web-ui-types.js.map +1 -1
  313. package/dist/web-ui-static/assets/index-CCVI4nEK.css +1 -0
  314. package/dist/web-ui-static/assets/index-Dm012gvY.js +114 -0
  315. package/dist/web-ui-static/index.html +2 -2
  316. package/dist/workflow/cli-shared.d.ts +62 -0
  317. package/dist/workflow/cli-shared.js +117 -0
  318. package/dist/workflow/cli-shared.js.map +1 -0
  319. package/dist/workflow/cli-support.js +0 -2
  320. package/dist/workflow/cli-support.js.map +1 -1
  321. package/dist/workflow/container-snapshots.d.ts +29 -0
  322. package/dist/workflow/container-snapshots.js +137 -0
  323. package/dist/workflow/container-snapshots.js.map +1 -0
  324. package/dist/workflow/daemon-gate-commands.d.ts +21 -0
  325. package/dist/workflow/daemon-gate-commands.js +595 -0
  326. package/dist/workflow/daemon-gate-commands.js.map +1 -0
  327. package/dist/workflow/discovery.d.ts +29 -0
  328. package/dist/workflow/discovery.js +67 -7
  329. package/dist/workflow/discovery.js.map +1 -1
  330. package/dist/workflow/lane-template.d.ts +89 -0
  331. package/dist/workflow/lane-template.js +141 -0
  332. package/dist/workflow/lane-template.js.map +1 -0
  333. package/dist/workflow/lint.d.ts +7 -1
  334. package/dist/workflow/lint.js +186 -3
  335. package/dist/workflow/lint.js.map +1 -1
  336. package/dist/workflow/machine-builder.d.ts +90 -2
  337. package/dist/workflow/machine-builder.js +222 -29
  338. package/dist/workflow/machine-builder.js.map +1 -1
  339. package/dist/workflow/message-log.d.ts +15 -1
  340. package/dist/workflow/message-log.js.map +1 -1
  341. package/dist/workflow/orchestrator.d.ts +505 -1
  342. package/dist/workflow/orchestrator.js +1725 -69
  343. package/dist/workflow/orchestrator.js.map +1 -1
  344. package/dist/workflow/prompt-builder.js +2 -1
  345. package/dist/workflow/prompt-builder.js.map +1 -1
  346. package/dist/workflow/run-state-command.js +1 -1
  347. package/dist/workflow/run-state-command.js.map +1 -1
  348. package/dist/workflow/shutdown-signals.d.ts +7 -0
  349. package/dist/workflow/shutdown-signals.js +40 -0
  350. package/dist/workflow/shutdown-signals.js.map +1 -0
  351. package/dist/workflow/status-parser.js +19 -4
  352. package/dist/workflow/status-parser.js.map +1 -1
  353. package/dist/workflow/types.d.ts +123 -23
  354. package/dist/workflow/types.js +2 -0
  355. package/dist/workflow/types.js.map +1 -1
  356. package/dist/workflow/validate.d.ts +23 -1
  357. package/dist/workflow/validate.js +311 -22
  358. package/dist/workflow/validate.js.map +1 -1
  359. package/dist/workflow/workflow-command.d.ts +0 -17
  360. package/dist/workflow/workflow-command.js +118 -94
  361. package/dist/workflow/workflow-command.js.map +1 -1
  362. package/dist/workflow/workflow-discovery.d.ts +2 -0
  363. package/dist/workflow/workflow-discovery.js +22 -1
  364. package/dist/workflow/workflow-discovery.js.map +1 -1
  365. package/dist/workflow/workflow-manager.d.ts +34 -0
  366. package/dist/workflow/workflow-manager.js +52 -1
  367. package/dist/workflow/workflow-manager.js.map +1 -1
  368. package/dist/workflow/workflows/design-and-code/README.md +50 -0
  369. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  370. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  371. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  372. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  373. package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  374. package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  375. package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  376. package/dist/workflow/workflows/evolve/README.md +66 -0
  377. package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
  378. package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
  379. package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  380. package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  381. package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
  382. package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  383. package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
  384. package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  385. package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  386. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  387. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  388. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  389. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  390. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  391. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  392. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  393. package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  394. package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  395. package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  396. package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  397. package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  398. package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  399. package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  400. package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  401. package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  402. package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  403. package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  404. package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  405. package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  406. package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
  407. package/dist/workflow/workflows/test-email-summary/workflow.yaml +1 -0
  408. package/dist/workflow/workflows/vuln-discovery/README.md +54 -0
  409. package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +6 -1
  410. package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +1 -0
  411. package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +4 -0
  412. package/dist/workflow/workflows/vuln-discovery/workflow.yaml +13 -8
  413. package/docker/Dockerfile.base +22 -0
  414. package/docker/Dockerfile.base.arm64 +18 -0
  415. package/docker/Dockerfile.claude-code +3 -1
  416. package/docker/Dockerfile.codex +17 -0
  417. package/docker/Dockerfile.goose +3 -1
  418. package/docker/entrypoint-claude-code.sh +28 -45
  419. package/docker/entrypoint-codex.sh +42 -0
  420. package/docker/entrypoint-goose.sh +5 -24
  421. package/docker/entrypoint-uid-remap.sh +93 -0
  422. package/package.json +39 -30
  423. package/src/workflow/workflows/design-and-code/README.md +50 -0
  424. package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  425. package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  426. package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  427. package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  428. package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  429. package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  430. package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  431. package/src/workflow/workflows/evolve/README.md +66 -0
  432. package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
  433. package/src/workflow/workflows/evolve/scripts/README.md +314 -0
  434. package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  435. package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  436. package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
  437. package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  438. package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
  439. package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  440. package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  441. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  442. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  443. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  444. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  445. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  446. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  447. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  448. package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  449. package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  450. package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  451. package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  452. package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  453. package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  454. package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  455. package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  456. package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  457. package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  458. package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  459. package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  460. package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  461. package/src/workflow/workflows/evolve/workflow.yaml +646 -0
  462. package/src/workflow/workflows/test-email-summary/workflow.yaml +1 -0
  463. package/src/workflow/workflows/vuln-discovery/README.md +54 -0
  464. package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +6 -1
  465. package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +1 -0
  466. package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +4 -0
  467. package/src/workflow/workflows/vuln-discovery/workflow.yaml +13 -8
  468. package/dist/mux/pty-bridge.js.map +0 -1
  469. package/dist/mux/trusted-input.js.map +0 -1
  470. package/dist/web-ui-static/assets/index-BFO5z1js.js +0 -76
  471. package/dist/web-ui-static/assets/index-CCUwrkIL.css +0 -1
  472. package/packages/web-ui/README.md +0 -113
@@ -1,39 +1,128 @@
1
1
  /**
2
2
  * Persona-related JSON-RPC method dispatch.
3
3
  *
4
- * Handles `personas.*` methods: list, get, compile.
4
+ * Handles `personas.*` methods: list, get, the Phase 1b streamed compile + its
5
+ * read methods (compileStream / getCompile / listCompiles), and the Phase 1c
6
+ * CRUD methods. There is a SINGLE compile surface (compileStream) — it is both
7
+ * kill-switch gated and runs the broad-policy validator. The old blocking
8
+ * `personas.compile` method was removed in Phase 1c because it was an ungated,
9
+ * unvalidated second compile path.
5
10
  */
6
- import { existsSync, readFileSync } from 'node:fs';
7
- import { resolve } from 'node:path';
8
11
  import { z } from 'zod';
9
12
  import { validateParams } from './types.js';
10
- import { RpcError, MethodNotFoundError } from '../web-ui-types.js';
11
- import { scanPersonas } from '../../mux/persona-scanner.js';
12
- import { getPersonaConstitutionPath, getPersonaGeneratedDir, loadPersona } from '../../persona/resolve.js';
13
+ import { RpcError, MethodNotFoundError, } from '../web-ui-types.js';
14
+ import { getPersonaDetail as getPersonaDetailService, listPersonas, createPersona as createPersonaService, setPersonaConstitution as setPersonaConstitutionService, setPersonaMemory as setPersonaMemoryService, deletePersona as deletePersonaService, setPersonaBroadPolicyOptIn as setPersonaBroadPolicyOptInService, } from '../../persona/persona-service.js';
15
+ import { loadPersona } from '../../persona/resolve.js';
13
16
  import { createPersonaName } from '../../persona/types.js';
17
+ import { personaCompileOrchestrator, CompileOrchestratorError } from '../../persona/persona-compile-orchestrator.js';
18
+ import { getConnId } from '../conn-registry.js';
14
19
  // ---------------------------------------------------------------------------
15
20
  // Param schemas
16
21
  // ---------------------------------------------------------------------------
17
22
  const personaNameSchema = z.object({ name: z.string().min(1) });
23
+ const getCompileSchema = z.object({ operationId: z.string().min(1) });
24
+ const listCompilesSchema = z.object({});
25
+ // ---------------------------------------------------------------------------
26
+ // Phase 1c persona-CRUD param schemas (locked contract; handlers added in the
27
+ // implementation stage). Exported so they form part of the wire contract and
28
+ // can be unit-tested independently. All mutation methods are additionally
29
+ // gated on `ctx.allowPolicyMutation` in the dispatch switch (else
30
+ // POLICY_MUTATION_FORBIDDEN); the schemas only validate shape.
31
+ // ---------------------------------------------------------------------------
32
+ /** `personas.create` -> PersonaDetailDto. Slug is branded inside the service. */
33
+ export const createPersonaSchema = z.object({
34
+ name: z.string().min(1).max(63),
35
+ description: z.string().trim().min(1),
36
+ servers: z.array(z.string().trim().min(1)).optional(),
37
+ memoryEnabled: z.boolean().optional(),
38
+ constitution: z.string().optional(), // default '' inside the service (empty persona)
39
+ });
40
+ /** `personas.editConstitution` -> PersonaEditResultDto { stale }. */
41
+ export const editConstitutionSchema = z.object({
42
+ name: z.string().min(1),
43
+ constitution: z.string(),
44
+ });
45
+ /** `personas.setMemory` -> PersonaDetailDto. */
46
+ export const setMemorySchema = z.object({
47
+ name: z.string().min(1),
48
+ enabled: z.boolean(),
49
+ });
50
+ /**
51
+ * `personas.delete` (soft by default) -> { deleted: true }.
52
+ * `confirmed: z.literal(true)` makes an unconfirmed call a schema error;
53
+ * confirmation lives in the UI. `force: true` => hard delete (revoke policy).
54
+ */
55
+ export const deletePersonaSchema = z.object({
56
+ name: z.string().min(1),
57
+ confirmed: z.literal(true),
58
+ force: z.boolean().optional(),
59
+ });
60
+ /**
61
+ * `personas.setBroadPolicyOptIn` (gated) -> PersonaDetailDto. The ONLY way to
62
+ * set `allowBroadPolicy`; never inferred from the constitution.
63
+ */
64
+ export const setBroadPolicyOptInSchema = z.object({
65
+ name: z.string().min(1),
66
+ enabled: z.boolean(),
67
+ });
18
68
  // ---------------------------------------------------------------------------
19
69
  // Dispatch
20
70
  // ---------------------------------------------------------------------------
21
- export async function personaDispatch(method, params) {
71
+ // All persona methods are synchronous post-Phase-1c (the streamed compile is
72
+ // fire-and-return; the old blocking `personas.compile` that awaited the pipeline
73
+ // was removed). The signature stays `async` for uniformity with the sibling
74
+ // dispatchers and so a thrown RpcError is normalized into a rejected promise for
75
+ // callers that `await` it.
76
+ // eslint-disable-next-line @typescript-eslint/require-await
77
+ export async function personaDispatch(ctx, method, params, client) {
22
78
  switch (method) {
23
79
  case 'personas.list': {
24
- return scanPersonas().map((p) => ({
25
- name: p.name,
26
- description: p.description,
27
- compiled: p.compiled,
28
- }));
80
+ return listPersonas();
29
81
  }
30
82
  case 'personas.get': {
31
83
  const { name } = validateParams(personaNameSchema, params);
32
84
  return getPersonaDetail(name);
33
85
  }
34
- case 'personas.compile': {
86
+ case 'personas.compileStream': {
35
87
  const { name } = validateParams(personaNameSchema, params);
36
- return compilePersona(name);
88
+ return compileStream(ctx, name, client);
89
+ }
90
+ case 'personas.getCompile': {
91
+ const { operationId } = validateParams(getCompileSchema, params);
92
+ return getCompile(operationId);
93
+ }
94
+ case 'personas.listCompiles': {
95
+ validateParams(listCompilesSchema, params);
96
+ return listCompiles();
97
+ }
98
+ // -----------------------------------------------------------------------
99
+ // Phase 1c CRUD (all gated on ctx.allowPolicyMutation; gate fires BEFORE
100
+ // any fs read). Each mutation emits `personas.changed`.
101
+ // -----------------------------------------------------------------------
102
+ case 'personas.create': {
103
+ requirePolicyMutation(ctx);
104
+ const input = validateParams(createPersonaSchema, params);
105
+ return createPersonaHandler(ctx, input, client);
106
+ }
107
+ case 'personas.editConstitution': {
108
+ requirePolicyMutation(ctx);
109
+ const { name, constitution } = validateParams(editConstitutionSchema, params);
110
+ return editConstitutionHandler(ctx, name, constitution, client);
111
+ }
112
+ case 'personas.setMemory': {
113
+ requirePolicyMutation(ctx);
114
+ const { name, enabled } = validateParams(setMemorySchema, params);
115
+ return setMemoryHandler(ctx, name, enabled, client);
116
+ }
117
+ case 'personas.delete': {
118
+ requirePolicyMutation(ctx);
119
+ const { name, force } = validateParams(deletePersonaSchema, params);
120
+ return deletePersonaHandler(ctx, name, force ?? false, client);
121
+ }
122
+ case 'personas.setBroadPolicyOptIn': {
123
+ requirePolicyMutation(ctx);
124
+ const { name, enabled } = validateParams(setBroadPolicyOptInSchema, params);
125
+ return setBroadPolicyOptInHandler(ctx, name, enabled, client);
37
126
  }
38
127
  default:
39
128
  throw new MethodNotFoundError(method);
@@ -61,56 +150,120 @@ function resolvePersonaOrThrow(nameRaw) {
61
150
  return { name, persona };
62
151
  }
63
152
  function getPersonaDetail(nameRaw) {
64
- const { name, persona } = resolvePersonaOrThrow(nameRaw);
65
- let constitution = '';
66
- const constitutionPath = getPersonaConstitutionPath(name);
153
+ // Validate + map to RpcError consistently with the other persona methods,
154
+ // then delegate the fs reads to the headless service (Phase 1a).
155
+ const { name } = resolvePersonaOrThrow(nameRaw);
156
+ return getPersonaDetailService(name);
157
+ }
158
+ /**
159
+ * Fire-and-return streamed compile (Phase 1b). Gated behind the daemon's
160
+ * `allowPolicyMutation` kill switch: when off (the DEFAULT), the mutation
161
+ * surface does not exist — return POLICY_MUTATION_FORBIDDEN BEFORE any
162
+ * credential read so a read-only client never learns credential state.
163
+ */
164
+ function compileStream(ctx, nameRaw, client) {
165
+ if (ctx.allowPolicyMutation !== true) {
166
+ throw new RpcError('POLICY_MUTATION_FORBIDDEN', 'Policy mutation is not enabled on this daemon.');
167
+ }
168
+ const { name } = resolvePersonaOrThrow(nameRaw);
169
+ const actor = describeActor(client);
67
170
  try {
68
- constitution = readFileSync(constitutionPath, 'utf-8');
171
+ return personaCompileOrchestrator.startCompile(name, actor, ctx.eventBus);
69
172
  }
70
- catch {
71
- // No constitution yet -- return empty
72
- }
73
- const generatedDir = getPersonaGeneratedDir(name);
74
- const policyPath = resolve(generatedDir, 'compiled-policy.json');
75
- const hasPolicy = existsSync(policyPath);
76
- let policyRuleCount;
77
- if (hasPolicy) {
78
- try {
79
- const raw = readFileSync(policyPath, 'utf-8');
80
- const compiled = JSON.parse(raw);
81
- policyRuleCount = compiled.rules.length;
82
- }
83
- catch {
84
- // Ignore parse errors
173
+ catch (err) {
174
+ if (err instanceof CompileOrchestratorError) {
175
+ throw new RpcError(err.code, err.message, err.data);
85
176
  }
177
+ throw err;
86
178
  }
87
- return {
88
- name: persona.name,
89
- description: persona.description,
90
- createdAt: persona.createdAt,
91
- constitution,
92
- servers: persona.servers,
93
- hasPolicy,
94
- policyRuleCount,
95
- };
96
179
  }
97
- async function compilePersona(nameRaw) {
98
- const { name } = resolvePersonaOrThrow(nameRaw);
180
+ function getCompile(operationId) {
181
+ const op = personaCompileOrchestrator.getCompile(operationId);
182
+ if (!op) {
183
+ throw new RpcError('PERSONA_NOT_FOUND', `No compile operation "${operationId}"`);
184
+ }
185
+ return op;
186
+ }
187
+ function listCompiles() {
188
+ return personaCompileOrchestrator.listCompiles();
189
+ }
190
+ /**
191
+ * Kill-switch gate shared by all mutation methods. Throws
192
+ * POLICY_MUTATION_FORBIDDEN when the daemon was not launched with
193
+ * `--allow-policy-mutation`. Fires BEFORE any fs/credential read so a read-only
194
+ * client never learns persona/credential state.
195
+ */
196
+ function requirePolicyMutation(ctx) {
197
+ if (ctx.allowPolicyMutation !== true) {
198
+ throw new RpcError('POLICY_MUTATION_FORBIDDEN', 'Policy mutation is not enabled on this daemon.');
199
+ }
200
+ }
201
+ /**
202
+ * Maps a persona-service thrown error (which carries a discriminant `code`
203
+ * string set via Object.assign) onto a typed RpcError. Unknown errors bubble.
204
+ */
205
+ function rethrowServiceError(err) {
206
+ const code = typeof err === 'object' && err !== null ? err.code : undefined;
207
+ if (code === 'PERSONA_EXISTS') {
208
+ throw new RpcError('PERSONA_EXISTS', err instanceof Error ? err.message : 'Persona already exists.');
209
+ }
210
+ if (code === 'PERSONA_NOT_FOUND') {
211
+ throw new RpcError('PERSONA_NOT_FOUND', err instanceof Error ? err.message : 'Persona not found.');
212
+ }
213
+ throw err;
214
+ }
215
+ /**
216
+ * Runs a persona-service mutation under the WS actor, maps service errors to
217
+ * RpcError (via rethrowServiceError), emits `personas.changed`, and returns the
218
+ * mutation's result. Centralizes the per-handler try/catch + change-event
219
+ * boilerplate so a new mutation method cannot forget the notification.
220
+ */
221
+ function mutateAndEmit(ctx, mutate, client) {
222
+ let result;
99
223
  try {
100
- // Dynamic import to avoid loading heavy pipeline deps at startup
101
- const { compilePersonaPolicy } = await import('../../persona/compile-persona-policy.js');
102
- const result = await compilePersonaPolicy(name);
103
- return {
104
- success: true,
105
- ruleCount: result.rules.length,
106
- };
224
+ result = mutate(describeActor(client));
107
225
  }
108
226
  catch (err) {
109
- return {
110
- success: false,
111
- ruleCount: 0,
112
- errors: [err instanceof Error ? err.message : String(err)],
113
- };
227
+ rethrowServiceError(err);
114
228
  }
229
+ ctx.eventBus.emit('personas.changed', {});
230
+ return result;
231
+ }
232
+ function createPersonaHandler(ctx, input, client) {
233
+ // Validate the slug up front so a bad name is INVALID_PARAMS (not a raw throw).
234
+ try {
235
+ createPersonaName(input.name);
236
+ }
237
+ catch {
238
+ throw new RpcError('INVALID_PARAMS', `Invalid persona name: ${input.name}`);
239
+ }
240
+ return mutateAndEmit(ctx, (actor) => createPersonaService(input, actor), client);
241
+ }
242
+ function editConstitutionHandler(ctx, nameRaw, constitution, client) {
243
+ const { name } = resolvePersonaOrThrow(nameRaw);
244
+ return mutateAndEmit(ctx, (actor) => setPersonaConstitutionService(name, constitution, actor), client);
245
+ }
246
+ function setMemoryHandler(ctx, nameRaw, enabled, client) {
247
+ const { name } = resolvePersonaOrThrow(nameRaw);
248
+ mutateAndEmit(ctx, (actor) => setPersonaMemoryService(name, enabled, actor), client);
249
+ return getPersonaDetailService(name);
250
+ }
251
+ function deletePersonaHandler(ctx, nameRaw, force, client) {
252
+ const { name } = resolvePersonaOrThrow(nameRaw);
253
+ mutateAndEmit(ctx, (actor) => deletePersonaService(name, actor, { force }), client);
254
+ return { deleted: true };
255
+ }
256
+ function setBroadPolicyOptInHandler(ctx, nameRaw, enabled, client) {
257
+ const { name } = resolvePersonaOrThrow(nameRaw);
258
+ return mutateAndEmit(ctx, (actor) => setPersonaBroadPolicyOptInService(name, enabled, actor), client);
259
+ }
260
+ /** Builds the audit/actor string: `${remoteAddr}#${connId}` (WS) or 'cli'. */
261
+ function describeActor(client) {
262
+ if (!client)
263
+ return 'cli';
264
+ const connId = getConnId(client);
265
+ // `_socket` exposes the remote address on the underlying TCP socket.
266
+ const remote = client._socket?.remoteAddress ?? 'unknown';
267
+ return `${remote}#${connId ?? 'unknown'}`;
115
268
  }
116
269
  //# sourceMappingURL=persona-dispatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"persona-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/persona-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persona-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/persona-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * PTY terminal subscription JSON-RPC dispatch.
3
+ *
4
+ * Handles the four per-client PTY methods:
5
+ * - sessions.ptyAttach (subscribe + one-shot replay snapshot)
6
+ * - sessions.ptyDetach (unsubscribe)
7
+ * - sessions.ptyInput (forward base64 keystroke bytes to the child stdin)
8
+ * - sessions.ptyResize (resize the child PTY)
9
+ *
10
+ * All delegate to `ctx.ptySessionManager`. Mirrors token-stream-dispatch.ts:
11
+ * attach/detach are keyed to the calling WebSocket, so the client is required.
12
+ */
13
+ import type { WebSocket as WsWebSocket } from 'ws';
14
+ import { type DispatchContext } from './types.js';
15
+ export declare function ptyDispatch(ctx: DispatchContext, method: string, params: Record<string, unknown>, client: WsWebSocket): unknown;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * PTY terminal subscription JSON-RPC dispatch.
3
+ *
4
+ * Handles the four per-client PTY methods:
5
+ * - sessions.ptyAttach (subscribe + one-shot replay snapshot)
6
+ * - sessions.ptyDetach (unsubscribe)
7
+ * - sessions.ptyInput (forward base64 keystroke bytes to the child stdin)
8
+ * - sessions.ptyResize (resize the child PTY)
9
+ *
10
+ * All delegate to `ctx.ptySessionManager`. Mirrors token-stream-dispatch.ts:
11
+ * attach/detach are keyed to the calling WebSocket, so the client is required.
12
+ */
13
+ import { z } from 'zod';
14
+ import { validateParams, labelSchema } from './types.js';
15
+ import { MethodNotFoundError, RpcError } from '../web-ui-types.js';
16
+ // ---------------------------------------------------------------------------
17
+ // Param validation schemas
18
+ // ---------------------------------------------------------------------------
19
+ const ptyInputSchema = z.object({ label: z.number().int().positive(), data: z.string() });
20
+ const ptyResizeSchema = z.object({
21
+ label: z.number().int().positive(),
22
+ cols: z.number().int().positive(),
23
+ rows: z.number().int().positive(),
24
+ });
25
+ // A trusted user message (not raw keystrokes): the daemon writes user-context
26
+ // (source 'mux-trusted-input') and injects the text into the PTY.
27
+ const ptyPromptSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
28
+ // ---------------------------------------------------------------------------
29
+ // Dispatch
30
+ // ---------------------------------------------------------------------------
31
+ export function ptyDispatch(ctx, method, params, client) {
32
+ const manager = ctx.ptySessionManager;
33
+ if (!manager) {
34
+ throw new RpcError('INTERNAL_ERROR', 'PTY session manager not available');
35
+ }
36
+ switch (method) {
37
+ case 'sessions.ptyAttach': {
38
+ const { label } = validateParams(labelSchema, params);
39
+ manager.attach(label, client);
40
+ return { attached: true };
41
+ }
42
+ case 'sessions.ptyDetach': {
43
+ const { label } = validateParams(labelSchema, params);
44
+ manager.detach(label, client);
45
+ return { detached: true };
46
+ }
47
+ case 'sessions.ptyInput': {
48
+ const { label, data } = validateParams(ptyInputSchema, params);
49
+ manager.input(label, data);
50
+ return { accepted: true };
51
+ }
52
+ case 'sessions.ptyResize': {
53
+ const { label, cols, rows } = validateParams(ptyResizeSchema, params);
54
+ manager.resize(label, cols, rows);
55
+ return { resized: true };
56
+ }
57
+ case 'sessions.ptyPrompt': {
58
+ const { label, text } = validateParams(ptyPromptSchema, params);
59
+ manager.sendPrompt(label, text);
60
+ return { accepted: true };
61
+ }
62
+ default:
63
+ throw new MethodNotFoundError(method);
64
+ }
65
+ }
66
+ //# sourceMappingURL=pty-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/pty-dispatch.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,10 @@
5
5
  * budget, history, diagnostics.
6
6
  */
7
7
  import { z } from 'zod';
8
- import { validateParams, toSessionDto, toBudgetDto, labelSchema } from './types.js';
8
+ import { validateParams, toSessionDto, toBudgetDto, zeroedBudgetDto, labelSchema, } from './types.js';
9
9
  import { RpcError, SessionNotFoundError, MethodNotFoundError, } from '../web-ui-types.js';
10
10
  import { tokenStreamDispatch } from './token-stream-dispatch.js';
11
+ import { ptyDispatch } from './pty-dispatch.js';
11
12
  import { WebSessionTransport } from '../web-session-transport.js';
12
13
  import { loadConfig } from '../../config/index.js';
13
14
  import { createStandaloneSession } from '../../session/index.js';
@@ -18,7 +19,24 @@ import * as logger from '../../logger.js';
18
19
  // ---------------------------------------------------------------------------
19
20
  // Param validation schemas
20
21
  // ---------------------------------------------------------------------------
21
- const sessionCreateSchema = z.object({ persona: z.string().min(1).optional() });
22
+ const sessionCreateSchema = z.object({
23
+ persona: z.string().min(1).optional(),
24
+ /**
25
+ * Per-session trajectory-capture override. Wins over the
26
+ * daemon-process default set via `--capture-traces`. When undefined,
27
+ * the daemon-process default (or `false`) is used. See
28
+ * docs/designs/mitm-token-trajectory-capture.md §10.
29
+ */
30
+ captureTraces: z.boolean().optional(),
31
+ /**
32
+ * Docker-agent (web-pty) launch options, mirroring mux `/new`. Ignored by the
33
+ * code-mode chatbox path. The child `ironcurtain start --pty` validates the
34
+ * workspace (containment) and resolves the provider profile / model.
35
+ */
36
+ workspacePath: z.string().min(1).optional(),
37
+ providerProfileName: z.string().min(1).optional(),
38
+ model: z.string().min(1).optional(),
39
+ });
22
40
  const sessionSendSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
23
41
  // ---------------------------------------------------------------------------
24
42
  // Session dispatch
@@ -31,6 +49,13 @@ export async function sessionDispatch(ctx, method, params, client) {
31
49
  }
32
50
  return tokenStreamDispatch(ctx, method, params, client);
33
51
  }
52
+ // Delegate PTY terminal methods to dedicated dispatch module
53
+ if (method.startsWith('sessions.pty')) {
54
+ if (!client) {
55
+ throw new RpcError('INTERNAL_ERROR', 'PTY methods require a WebSocket client');
56
+ }
57
+ return ptyDispatch(ctx, method, params, client);
58
+ }
34
59
  switch (method) {
35
60
  case 'sessions.list':
36
61
  return listSessions(ctx);
@@ -39,11 +64,21 @@ export async function sessionDispatch(ctx, method, params, client) {
39
64
  return getSession(ctx, label);
40
65
  }
41
66
  case 'sessions.create': {
42
- const { persona } = validateParams(sessionCreateSchema, params);
43
- return createWebSession(ctx, persona);
67
+ const opts = validateParams(sessionCreateSchema, params);
68
+ // Docker mode streams a live terminal (web-pty); code mode keeps the
69
+ // turn-based chatbox session. The daemon's SessionMode is process-global.
70
+ if (ctx.mode.kind === 'docker') {
71
+ return createPtySession(ctx, opts);
72
+ }
73
+ return createWebSession(ctx, opts.persona, opts.captureTraces);
44
74
  }
45
75
  case 'sessions.end': {
46
76
  const { label } = validateParams(labelSchema, params);
77
+ // Route PTY labels to their manager (they are not in SessionManager).
78
+ if (ctx.ptySessionManager?.has(label)) {
79
+ ctx.ptySessionManager.end(label);
80
+ return;
81
+ }
47
82
  const endManaged = ctx.sessionManager.get(label);
48
83
  const endSessionId = endManaged?.session.getInfo().id;
49
84
  await ctx.sessionManager.end(label);
@@ -59,6 +94,10 @@ export async function sessionDispatch(ctx, method, params, client) {
59
94
  }
60
95
  case 'sessions.budget': {
61
96
  const { label } = validateParams(labelSchema, params);
97
+ // PTY sessions have no turn/budget accounting; return a zeroed budget
98
+ // rather than throwing, so a stale/racing client degrades cleanly (§11 D2).
99
+ if (ctx.ptySessionManager?.has(label))
100
+ return zeroedBudgetDto();
62
101
  const managed = ctx.sessionManager.get(label);
63
102
  if (!managed)
64
103
  throw new SessionNotFoundError(label);
@@ -66,6 +105,9 @@ export async function sessionDispatch(ctx, method, params, client) {
66
105
  }
67
106
  case 'sessions.history': {
68
107
  const { label } = validateParams(labelSchema, params);
108
+ // PTY sessions carry no turn history (§11 D2).
109
+ if (ctx.ptySessionManager?.has(label))
110
+ return [];
69
111
  const managed = ctx.sessionManager.get(label);
70
112
  if (!managed)
71
113
  throw new SessionNotFoundError(label);
@@ -73,6 +115,9 @@ export async function sessionDispatch(ctx, method, params, client) {
73
115
  }
74
116
  case 'sessions.diagnostics': {
75
117
  const { label } = validateParams(labelSchema, params);
118
+ // PTY sessions carry no diagnostic log (§11 D2).
119
+ if (ctx.ptySessionManager?.has(label))
120
+ return [];
76
121
  const managed = ctx.sessionManager.get(label);
77
122
  if (!managed)
78
123
  throw new SessionNotFoundError(label);
@@ -90,9 +135,17 @@ function cleanupSessionQueue(ctx, label) {
90
135
  ctx.sessionQueues.delete(label);
91
136
  }
92
137
  function listSessions(ctx) {
93
- return ctx.sessionManager.all().map((m) => toSessionDto(m));
138
+ const managed = ctx.sessionManager.all().map((m) => toSessionDto(m));
139
+ const pty = ctx.ptySessionManager?.listDtos() ?? [];
140
+ return [...managed, ...pty];
94
141
  }
95
142
  function getSession(ctx, label) {
143
+ // PTY sessions have no turn history/diagnostics; return the DTO with empty
144
+ // logs rather than throwing, since selecting one drives this call.
145
+ const ptyDto = ctx.ptySessionManager?.getDto(label);
146
+ if (ptyDto) {
147
+ return { ...ptyDto, history: [], diagnosticLog: [] };
148
+ }
96
149
  const managed = ctx.sessionManager.get(label);
97
150
  if (!managed)
98
151
  throw new SessionNotFoundError(label);
@@ -102,7 +155,28 @@ function getSession(ctx, label) {
102
155
  diagnosticLog: managed.session.getDiagnosticLog(),
103
156
  };
104
157
  }
105
- async function createWebSession(ctx, persona) {
158
+ /**
159
+ * Creates a Docker-agent PTY session (docker mode). Enforces the SAME
160
+ * concurrency cap as the turn-based path, counting PTY sessions (§11 D4) —
161
+ * each is a full container, so an unbounded spawn is a real resource concern.
162
+ */
163
+ async function createPtySession(ctx, opts) {
164
+ const manager = ctx.ptySessionManager;
165
+ if (!manager) {
166
+ throw new RpcError('INTERNAL_ERROR', 'PTY session manager not available');
167
+ }
168
+ if (manager.size >= ctx.maxConcurrentWebSessions) {
169
+ throw new RpcError('RATE_LIMITED', `PTY session limit reached (max ${ctx.maxConcurrentWebSessions})`);
170
+ }
171
+ return manager.create({
172
+ ...(opts.persona ? { persona: opts.persona } : {}),
173
+ ...(opts.captureTraces !== undefined ? { captureTraces: opts.captureTraces } : {}),
174
+ ...(opts.workspacePath ? { workspacePath: opts.workspacePath } : {}),
175
+ ...(opts.providerProfileName ? { providerProfileName: opts.providerProfileName } : {}),
176
+ ...(opts.model ? { model: opts.model } : {}),
177
+ });
178
+ }
179
+ async function createWebSession(ctx, persona, captureTracesOverride) {
106
180
  const webCount = ctx.sessionManager.byKind('web').length;
107
181
  if (webCount >= ctx.maxConcurrentWebSessions) {
108
182
  throw new RpcError('RATE_LIMITED', `Web session limit reached (max ${ctx.maxConcurrentWebSessions})`);
@@ -114,10 +188,19 @@ async function createWebSession(ctx, persona) {
114
188
  autoSaveMemory: shouldAutoSaveMemory(config, { persona }),
115
189
  dockerMode: ctx.mode.kind === 'docker',
116
190
  });
191
+ // Capture precedence: JSON-RPC field > daemon CLI flag > userConfig.
192
+ // The session factory then resolves vs `userConfig.capture?.enabled`
193
+ // as the final fallback (§10).
194
+ const effectiveCapture = captureTracesOverride !== undefined
195
+ ? captureTracesOverride
196
+ : (ctx.captureTracesDefault ?? false)
197
+ ? true
198
+ : undefined;
117
199
  const session = await createStandaloneSession({
118
200
  config,
119
201
  mode: ctx.mode,
120
202
  persona,
203
+ ...(effectiveCapture !== undefined ? { captureTracesOverride: effectiveCapture } : {}),
121
204
  onEscalation: transport.createEscalationHandler(),
122
205
  onEscalationExpired: transport.createEscalationExpiredHandler(),
123
206
  onEscalationResolved: transport.createEscalationResolvedHandler(),