@provos/ironcurtain 0.10.0 → 0.11.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 (467) hide show
  1. package/README.md +60 -8
  2. package/dist/auth/oauth-provider.js +1 -4
  3. package/dist/auth/oauth-provider.js.map +1 -1
  4. package/dist/cli.js +38 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config/config-command.js +162 -7
  7. package/dist/config/config-command.js.map +1 -1
  8. package/dist/config/first-start.js +61 -0
  9. package/dist/config/first-start.js.map +1 -1
  10. package/dist/config/generated/compiled-policy.json +528 -161
  11. package/dist/config/generated/test-scenarios.json +4810 -170
  12. package/dist/config/generated/tool-annotations.json +34 -47
  13. package/dist/config/index.d.ts +58 -0
  14. package/dist/config/index.js +97 -15
  15. package/dist/config/index.js.map +1 -1
  16. package/dist/config/mcp-servers.json +2 -2
  17. package/dist/config/paths.d.ts +175 -0
  18. package/dist/config/paths.js +308 -14
  19. package/dist/config/paths.js.map +1 -1
  20. package/dist/config/types.d.ts +7 -1
  21. package/dist/config/user-config.d.ts +53 -5
  22. package/dist/config/user-config.js +96 -30
  23. package/dist/config/user-config.js.map +1 -1
  24. package/dist/config/validate-policy-dir.d.ts +10 -0
  25. package/dist/config/validate-policy-dir.js +59 -0
  26. package/dist/config/validate-policy-dir.js.map +1 -0
  27. package/dist/cron/job-commands.js +22 -2
  28. package/dist/cron/job-commands.js.map +1 -1
  29. package/dist/cron/types.d.ts +16 -2
  30. package/dist/cron/types.js +1 -3
  31. package/dist/cron/types.js.map +1 -1
  32. package/dist/daemon/daemon-command.js +16 -2
  33. package/dist/daemon/daemon-command.js.map +1 -1
  34. package/dist/daemon/ironcurtain-daemon.d.ts +44 -1
  35. package/dist/daemon/ironcurtain-daemon.js +210 -8
  36. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  37. package/dist/docker/adapters/claude-code.js +194 -20
  38. package/dist/docker/adapters/claude-code.js.map +1 -1
  39. package/dist/docker/adapters/goose.d.ts +12 -11
  40. package/dist/docker/adapters/goose.js +80 -27
  41. package/dist/docker/adapters/goose.js.map +1 -1
  42. package/dist/docker/agent-adapter.d.ts +178 -4
  43. package/dist/docker/agent-adapter.js +14 -0
  44. package/dist/docker/agent-adapter.js.map +1 -1
  45. package/dist/docker/code-mode-proxy.d.ts +27 -0
  46. package/dist/docker/code-mode-proxy.js +3 -0
  47. package/dist/docker/code-mode-proxy.js.map +1 -1
  48. package/dist/docker/docker-agent-session.d.ts +113 -62
  49. package/dist/docker/docker-agent-session.js +242 -294
  50. package/dist/docker/docker-agent-session.js.map +1 -1
  51. package/dist/docker/docker-infrastructure.d.ts +246 -21
  52. package/dist/docker/docker-infrastructure.js +520 -29
  53. package/dist/docker/docker-infrastructure.js.map +1 -1
  54. package/dist/docker/docker-manager.d.ts +36 -1
  55. package/dist/docker/docker-manager.js +135 -30
  56. package/dist/docker/docker-manager.js.map +1 -1
  57. package/dist/docker/docker-progress-sink.d.ts +43 -0
  58. package/dist/docker/docker-progress-sink.js +299 -0
  59. package/dist/docker/docker-progress-sink.js.map +1 -0
  60. package/dist/docker/mitm-proxy.d.ts +84 -1
  61. package/dist/docker/mitm-proxy.js +380 -18
  62. package/dist/docker/mitm-proxy.js.map +1 -1
  63. package/dist/docker/oauth-credentials.d.ts +46 -3
  64. package/dist/docker/oauth-credentials.js +56 -14
  65. package/dist/docker/oauth-credentials.js.map +1 -1
  66. package/dist/docker/oauth-token-manager.js +2 -2
  67. package/dist/docker/oauth-token-manager.js.map +1 -1
  68. package/dist/docker/orientation.d.ts +1 -1
  69. package/dist/docker/provider-config.d.ts +49 -2
  70. package/dist/docker/provider-config.js +202 -28
  71. package/dist/docker/provider-config.js.map +1 -1
  72. package/dist/docker/proxy-tools.d.ts +0 -2
  73. package/dist/docker/proxy-tools.js +2 -7
  74. package/dist/docker/proxy-tools.js.map +1 -1
  75. package/dist/docker/pty-session.d.ts +49 -1
  76. package/dist/docker/pty-session.js +199 -69
  77. package/dist/docker/pty-session.js.map +1 -1
  78. package/dist/docker/pty-types.d.ts +0 -2
  79. package/dist/docker/pty-types.js +0 -2
  80. package/dist/docker/pty-types.js.map +1 -1
  81. package/dist/docker/resource-limits.d.ts +125 -0
  82. package/dist/docker/resource-limits.js +200 -0
  83. package/dist/docker/resource-limits.js.map +1 -0
  84. package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
  85. package/dist/docker/spawn-with-idle-timeout.js +152 -0
  86. package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
  87. package/dist/docker/sse-extractor.d.ts +51 -0
  88. package/dist/docker/sse-extractor.js +303 -0
  89. package/dist/docker/sse-extractor.js.map +1 -0
  90. package/dist/docker/token-stream-bus.d.ts +83 -0
  91. package/dist/docker/token-stream-bus.js +98 -0
  92. package/dist/docker/token-stream-bus.js.map +1 -0
  93. package/dist/docker/token-stream-types.d.ts +71 -0
  94. package/dist/docker/token-stream-types.js +8 -0
  95. package/dist/docker/token-stream-types.js.map +1 -0
  96. package/dist/docker/types.d.ts +53 -6
  97. package/dist/doctor/checks.d.ts +138 -0
  98. package/dist/doctor/checks.js +511 -0
  99. package/dist/doctor/checks.js.map +1 -0
  100. package/dist/doctor/doctor-command.d.ts +29 -0
  101. package/dist/doctor/doctor-command.js +160 -0
  102. package/dist/doctor/doctor-command.js.map +1 -0
  103. package/dist/doctor/mcp-liveness.d.ts +28 -0
  104. package/dist/doctor/mcp-liveness.js +84 -0
  105. package/dist/doctor/mcp-liveness.js.map +1 -0
  106. package/dist/doctor/oauth-checks.d.ts +23 -0
  107. package/dist/doctor/oauth-checks.js +157 -0
  108. package/dist/doctor/oauth-checks.js.map +1 -0
  109. package/dist/doctor/output.d.ts +26 -0
  110. package/dist/doctor/output.js +82 -0
  111. package/dist/doctor/output.js.map +1 -0
  112. package/dist/escalation/listener-command.js +0 -3
  113. package/dist/escalation/listener-command.js.map +1 -1
  114. package/dist/event-bus/typed-event-bus.d.ts +26 -0
  115. package/dist/event-bus/typed-event-bus.js +35 -0
  116. package/dist/event-bus/typed-event-bus.js.map +1 -0
  117. package/dist/index.js +24 -9
  118. package/dist/index.js.map +1 -1
  119. package/dist/logger.js +31 -2
  120. package/dist/logger.js.map +1 -1
  121. package/dist/memory/auto-save.d.ts +18 -4
  122. package/dist/memory/auto-save.js +46 -6
  123. package/dist/memory/auto-save.js.map +1 -1
  124. package/dist/memory/memory-policy.d.ts +41 -0
  125. package/dist/memory/memory-policy.js +36 -0
  126. package/dist/memory/memory-policy.js.map +1 -0
  127. package/dist/mux/mux-command.d.ts +10 -1
  128. package/dist/mux/mux-command.js +56 -35
  129. package/dist/mux/mux-command.js.map +1 -1
  130. package/dist/mux/mux-renderer.js +2 -12
  131. package/dist/mux/mux-renderer.js.map +1 -1
  132. package/dist/mux/session-scanner.js +1 -2
  133. package/dist/mux/session-scanner.js.map +1 -1
  134. package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
  135. package/dist/{pipeline → observability}/llm-logger.js +8 -3
  136. package/dist/observability/llm-logger.js.map +1 -0
  137. package/dist/observe/observe-command.d.ts +12 -0
  138. package/dist/observe/observe-command.js +298 -0
  139. package/dist/observe/observe-command.js.map +1 -0
  140. package/dist/observe/observe-renderer.d.ts +24 -0
  141. package/dist/observe/observe-renderer.js +87 -0
  142. package/dist/observe/observe-renderer.js.map +1 -0
  143. package/dist/observe/observe-tui-rain.d.ts +42 -0
  144. package/dist/observe/observe-tui-rain.js +531 -0
  145. package/dist/observe/observe-tui-rain.js.map +1 -0
  146. package/dist/observe/observe-tui-text-panel.d.ts +46 -0
  147. package/dist/observe/observe-tui-text-panel.js +525 -0
  148. package/dist/observe/observe-tui-text-panel.js.map +1 -0
  149. package/dist/observe/observe-tui-types.d.ts +270 -0
  150. package/dist/observe/observe-tui-types.js +200 -0
  151. package/dist/observe/observe-tui-types.js.map +1 -0
  152. package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
  153. package/dist/observe/observe-tui-word-scorer.js +572 -0
  154. package/dist/observe/observe-tui-word-scorer.js.map +1 -0
  155. package/dist/observe/observe-tui.d.ts +59 -0
  156. package/dist/observe/observe-tui.js +592 -0
  157. package/dist/observe/observe-tui.js.map +1 -0
  158. package/dist/persona/memory-gate.d.ts +19 -0
  159. package/dist/persona/memory-gate.js +33 -0
  160. package/dist/persona/memory-gate.js.map +1 -0
  161. package/dist/persona/persona-command.js +41 -6
  162. package/dist/persona/persona-command.js.map +1 -1
  163. package/dist/persona/resolve.d.ts +22 -0
  164. package/dist/persona/resolve.js +45 -2
  165. package/dist/persona/resolve.js.map +1 -1
  166. package/dist/persona/types.d.ts +16 -0
  167. package/dist/pipeline/constitution-compiler.d.ts +25 -14
  168. package/dist/pipeline/constitution-compiler.js +107 -38
  169. package/dist/pipeline/constitution-compiler.js.map +1 -1
  170. package/dist/pipeline/dynamic-list-types.d.ts +3 -6
  171. package/dist/pipeline/dynamic-list-types.js +3 -16
  172. package/dist/pipeline/dynamic-list-types.js.map +1 -1
  173. package/dist/pipeline/pipeline-runner.js +89 -50
  174. package/dist/pipeline/pipeline-runner.js.map +1 -1
  175. package/dist/pipeline/pipeline-shared.d.ts +1 -1
  176. package/dist/pipeline/pipeline-shared.js +3 -11
  177. package/dist/pipeline/pipeline-shared.js.map +1 -1
  178. package/dist/pipeline/policy-verifier.js +16 -3
  179. package/dist/pipeline/policy-verifier.js.map +1 -1
  180. package/dist/pipeline/proxy-mcp-connections.js +17 -2
  181. package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
  182. package/dist/pipeline/scenario-generator.d.ts +4 -8
  183. package/dist/pipeline/scenario-generator.js +13 -46
  184. package/dist/pipeline/scenario-generator.js.map +1 -1
  185. package/dist/sandbox/index.d.ts +14 -0
  186. package/dist/sandbox/index.js +335 -116
  187. package/dist/sandbox/index.js.map +1 -1
  188. package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
  189. package/dist/sandbox/ironcurtain-protocol.js +185 -0
  190. package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
  191. package/dist/session/agent-session.d.ts +6 -0
  192. package/dist/session/agent-session.js +16 -5
  193. package/dist/session/agent-session.js.map +1 -1
  194. package/dist/session/cli-transport.js +0 -6
  195. package/dist/session/cli-transport.js.map +1 -1
  196. package/dist/session/index.d.ts +35 -14
  197. package/dist/session/index.js +324 -130
  198. package/dist/session/index.js.map +1 -1
  199. package/dist/session/preflight.d.ts +50 -13
  200. package/dist/session/preflight.js +252 -80
  201. package/dist/session/preflight.js.map +1 -1
  202. package/dist/session/prompts.d.ts +2 -5
  203. package/dist/session/prompts.js.map +1 -1
  204. package/dist/session/session-manager.d.ts +61 -6
  205. package/dist/session/session-manager.js +72 -10
  206. package/dist/session/session-manager.js.map +1 -1
  207. package/dist/session/session-metadata.d.ts +21 -5
  208. package/dist/session/session-metadata.js +34 -12
  209. package/dist/session/session-metadata.js.map +1 -1
  210. package/dist/session/types.d.ts +311 -5
  211. package/dist/session/types.js +57 -1
  212. package/dist/session/types.js.map +1 -1
  213. package/dist/signal/setup-signal.js +13 -21
  214. package/dist/signal/setup-signal.js.map +1 -1
  215. package/dist/signal/signal-bot-daemon.d.ts +16 -1
  216. package/dist/signal/signal-bot-daemon.js +39 -27
  217. package/dist/signal/signal-bot-daemon.js.map +1 -1
  218. package/dist/signal/signal-container.js +7 -1
  219. package/dist/signal/signal-container.js.map +1 -1
  220. package/dist/skills/discovery.d.ts +77 -0
  221. package/dist/skills/discovery.js +206 -0
  222. package/dist/skills/discovery.js.map +1 -0
  223. package/dist/skills/index.d.ts +4 -0
  224. package/dist/skills/index.js +3 -0
  225. package/dist/skills/index.js.map +1 -0
  226. package/dist/skills/staging.d.ts +28 -0
  227. package/dist/skills/staging.js +68 -0
  228. package/dist/skills/staging.js.map +1 -0
  229. package/dist/skills/types.d.ts +46 -0
  230. package/dist/skills/types.js +2 -0
  231. package/dist/skills/types.js.map +1 -0
  232. package/dist/trusted-process/approval-whitelist.d.ts +0 -2
  233. package/dist/trusted-process/approval-whitelist.js +17 -17
  234. package/dist/trusted-process/approval-whitelist.js.map +1 -1
  235. package/dist/trusted-process/async-mutex.d.ts +32 -0
  236. package/dist/trusted-process/async-mutex.js +50 -0
  237. package/dist/trusted-process/async-mutex.js.map +1 -0
  238. package/dist/trusted-process/audit-log.d.ts +38 -1
  239. package/dist/trusted-process/audit-log.js +82 -13
  240. package/dist/trusted-process/audit-log.js.map +1 -1
  241. package/dist/trusted-process/call-circuit-breaker.js +2 -1
  242. package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
  243. package/dist/trusted-process/control-server.d.ts +101 -0
  244. package/dist/trusted-process/control-server.js +282 -0
  245. package/dist/trusted-process/control-server.js.map +1 -0
  246. package/dist/trusted-process/domain-utils.d.ts +6 -6
  247. package/dist/trusted-process/domain-utils.js +7 -23
  248. package/dist/trusted-process/domain-utils.js.map +1 -1
  249. package/dist/trusted-process/error-prefixes.d.ts +16 -0
  250. package/dist/trusted-process/error-prefixes.js +17 -0
  251. package/dist/trusted-process/error-prefixes.js.map +1 -0
  252. package/dist/trusted-process/index.d.ts +40 -23
  253. package/dist/trusted-process/index.js +131 -225
  254. package/dist/trusted-process/index.js.map +1 -1
  255. package/dist/trusted-process/list-matcher.d.ts +17 -0
  256. package/dist/trusted-process/list-matcher.js +31 -0
  257. package/dist/trusted-process/list-matcher.js.map +1 -0
  258. package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
  259. package/dist/trusted-process/mcp-client-manager.js +40 -45
  260. package/dist/trusted-process/mcp-client-manager.js.map +1 -1
  261. package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
  262. package/dist/trusted-process/mcp-proxy-server.js +166 -657
  263. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  264. package/dist/trusted-process/policy-engine.d.ts +16 -4
  265. package/dist/trusted-process/policy-engine.js +90 -45
  266. package/dist/trusted-process/policy-engine.js.map +1 -1
  267. package/dist/trusted-process/policy-roots.d.ts +6 -0
  268. package/dist/trusted-process/policy-roots.js +20 -0
  269. package/dist/trusted-process/policy-roots.js.map +1 -1
  270. package/dist/trusted-process/sandbox-integration.d.ts +12 -0
  271. package/dist/trusted-process/sandbox-integration.js +18 -0
  272. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  273. package/dist/trusted-process/tool-call-coordinator.d.ts +269 -0
  274. package/dist/trusted-process/tool-call-coordinator.js +508 -0
  275. package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
  276. package/dist/trusted-process/tool-call-pipeline.d.ts +205 -0
  277. package/dist/trusted-process/tool-call-pipeline.js +798 -0
  278. package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
  279. package/dist/trusted-process/tool-description-hints.d.ts +1 -1
  280. package/dist/types/argument-roles.d.ts +1 -1
  281. package/dist/types/argument-roles.js +14 -1
  282. package/dist/types/argument-roles.js.map +1 -1
  283. package/dist/types/audit.d.ts +9 -0
  284. package/dist/{session → types}/errors.d.ts +8 -2
  285. package/dist/{session → types}/errors.js +8 -2
  286. package/dist/types/errors.js.map +1 -0
  287. package/dist/types/reserved-servers.d.ts +11 -0
  288. package/dist/types/reserved-servers.js +12 -0
  289. package/dist/types/reserved-servers.js.map +1 -0
  290. package/dist/types/server-listing.d.ts +14 -0
  291. package/dist/types/server-listing.js +2 -0
  292. package/dist/types/server-listing.js.map +1 -0
  293. package/dist/types/slug.d.ts +2 -0
  294. package/dist/types/slug.js +2 -0
  295. package/dist/types/slug.js.map +1 -1
  296. package/dist/types/url-normalize.d.ts +16 -0
  297. package/dist/types/url-normalize.js +33 -0
  298. package/dist/types/url-normalize.js.map +1 -0
  299. package/dist/utils/error-message.d.ts +8 -0
  300. package/dist/utils/error-message.js +11 -0
  301. package/dist/utils/error-message.js.map +1 -0
  302. package/dist/utils/exec-error.d.ts +19 -0
  303. package/dist/utils/exec-error.js +16 -0
  304. package/dist/utils/exec-error.js.map +1 -0
  305. package/dist/utils/is-plain-object.d.ts +7 -0
  306. package/dist/utils/is-plain-object.js +12 -0
  307. package/dist/utils/is-plain-object.js.map +1 -0
  308. package/dist/utils/preflight-checks.d.ts +16 -0
  309. package/dist/utils/preflight-checks.js +178 -0
  310. package/dist/utils/preflight-checks.js.map +1 -0
  311. package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
  312. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
  313. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
  314. package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
  315. package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
  316. package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
  317. package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
  318. package/dist/web-ui/dispatch/job-dispatch.js +83 -0
  319. package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
  320. package/dist/web-ui/dispatch/persona-dispatch.d.ts +6 -0
  321. package/dist/web-ui/dispatch/persona-dispatch.js +116 -0
  322. package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
  323. package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
  324. package/dist/web-ui/dispatch/session-dispatch.js +201 -0
  325. package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
  326. package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
  327. package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
  328. package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
  329. package/dist/web-ui/dispatch/types.d.ts +31 -0
  330. package/dist/web-ui/dispatch/types.js +68 -0
  331. package/dist/web-ui/dispatch/types.js.map +1 -0
  332. package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
  333. package/dist/web-ui/dispatch/workflow-dispatch.js +925 -0
  334. package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
  335. package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
  336. package/dist/web-ui/json-rpc-dispatch.js +34 -0
  337. package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
  338. package/dist/web-ui/state-graph.d.ts +13 -0
  339. package/dist/web-ui/state-graph.js +82 -0
  340. package/dist/web-ui/state-graph.js.map +1 -0
  341. package/dist/web-ui/token-stream-bridge.d.ts +76 -0
  342. package/dist/web-ui/token-stream-bridge.js +265 -0
  343. package/dist/web-ui/token-stream-bridge.js.map +1 -0
  344. package/dist/web-ui/web-event-bus.d.ts +152 -0
  345. package/dist/web-ui/web-event-bus.js +19 -0
  346. package/dist/web-ui/web-event-bus.js.map +1 -0
  347. package/dist/web-ui/web-session-transport.d.ts +31 -0
  348. package/dist/web-ui/web-session-transport.js +109 -0
  349. package/dist/web-ui/web-session-transport.js.map +1 -0
  350. package/dist/web-ui/web-ui-server.d.ts +76 -0
  351. package/dist/web-ui/web-ui-server.js +461 -0
  352. package/dist/web-ui/web-ui-server.js.map +1 -0
  353. package/dist/web-ui/web-ui-types.d.ts +290 -0
  354. package/dist/web-ui/web-ui-types.js +32 -0
  355. package/dist/web-ui/web-ui-types.js.map +1 -0
  356. package/dist/web-ui/ws-utils.d.ts +5 -0
  357. package/dist/web-ui/ws-utils.js +12 -0
  358. package/dist/web-ui/ws-utils.js.map +1 -0
  359. package/dist/web-ui-static/assets/index-BFO5z1js.js +76 -0
  360. package/dist/web-ui-static/assets/index-CCUwrkIL.css +1 -0
  361. package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
  362. package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
  363. package/dist/web-ui-static/index.html +14 -0
  364. package/dist/workflow/artifacts.d.ts +59 -0
  365. package/dist/workflow/artifacts.js +188 -0
  366. package/dist/workflow/artifacts.js.map +1 -0
  367. package/dist/workflow/checkpoint-selection.d.ts +34 -0
  368. package/dist/workflow/checkpoint-selection.js +48 -0
  369. package/dist/workflow/checkpoint-selection.js.map +1 -0
  370. package/dist/workflow/checkpoint.d.ts +35 -0
  371. package/dist/workflow/checkpoint.js +84 -0
  372. package/dist/workflow/checkpoint.js.map +1 -0
  373. package/dist/workflow/cli-support.d.ts +92 -0
  374. package/dist/workflow/cli-support.js +423 -0
  375. package/dist/workflow/cli-support.js.map +1 -0
  376. package/dist/workflow/definition-loader.d.ts +32 -0
  377. package/dist/workflow/definition-loader.js +56 -0
  378. package/dist/workflow/definition-loader.js.map +1 -0
  379. package/dist/workflow/discovery.d.ts +78 -0
  380. package/dist/workflow/discovery.js +203 -0
  381. package/dist/workflow/discovery.js.map +1 -0
  382. package/dist/workflow/errors.d.ts +66 -0
  383. package/dist/workflow/errors.js +49 -0
  384. package/dist/workflow/errors.js.map +1 -0
  385. package/dist/workflow/guards.d.ts +8 -0
  386. package/dist/workflow/guards.js +38 -0
  387. package/dist/workflow/guards.js.map +1 -0
  388. package/dist/workflow/lint-integration.d.ts +64 -0
  389. package/dist/workflow/lint-integration.js +56 -0
  390. package/dist/workflow/lint-integration.js.map +1 -0
  391. package/dist/workflow/lint.d.ts +66 -0
  392. package/dist/workflow/lint.js +410 -0
  393. package/dist/workflow/lint.js.map +1 -0
  394. package/dist/workflow/machine-builder.d.ts +90 -0
  395. package/dist/workflow/machine-builder.js +485 -0
  396. package/dist/workflow/machine-builder.js.map +1 -0
  397. package/dist/workflow/message-log.d.ts +85 -0
  398. package/dist/workflow/message-log.js +40 -0
  399. package/dist/workflow/message-log.js.map +1 -0
  400. package/dist/workflow/orchestrator.d.ts +450 -0
  401. package/dist/workflow/orchestrator.js +1941 -0
  402. package/dist/workflow/orchestrator.js.map +1 -0
  403. package/dist/workflow/prompt-builder.d.ts +39 -0
  404. package/dist/workflow/prompt-builder.js +242 -0
  405. package/dist/workflow/prompt-builder.js.map +1 -0
  406. package/dist/workflow/run-state-command.d.ts +9 -0
  407. package/dist/workflow/run-state-command.js +414 -0
  408. package/dist/workflow/run-state-command.js.map +1 -0
  409. package/dist/workflow/run-state-debug-capture.d.ts +40 -0
  410. package/dist/workflow/run-state-debug-capture.js +101 -0
  411. package/dist/workflow/run-state-debug-capture.js.map +1 -0
  412. package/dist/workflow/status-parser.d.ts +68 -0
  413. package/dist/workflow/status-parser.js +259 -0
  414. package/dist/workflow/status-parser.js.map +1 -0
  415. package/dist/workflow/types.d.ts +498 -0
  416. package/dist/workflow/types.js +83 -0
  417. package/dist/workflow/types.js.map +1 -0
  418. package/dist/workflow/validate.d.ts +58 -0
  419. package/dist/workflow/validate.js +499 -0
  420. package/dist/workflow/validate.js.map +1 -0
  421. package/dist/workflow/workflow-command.d.ts +26 -0
  422. package/dist/workflow/workflow-command.js +648 -0
  423. package/dist/workflow/workflow-command.js.map +1 -0
  424. package/dist/workflow/workflow-discovery.d.ts +25 -0
  425. package/dist/workflow/workflow-discovery.js +100 -0
  426. package/dist/workflow/workflow-discovery.js.map +1 -0
  427. package/dist/workflow/workflow-manager.d.ts +122 -0
  428. package/dist/workflow/workflow-manager.js +308 -0
  429. package/dist/workflow/workflow-manager.js.map +1 -0
  430. package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
  431. package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  432. package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  433. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  434. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  435. package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  436. package/dist/workflow/workflows/test-email-summary/workflow.yaml +89 -0
  437. package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +201 -0
  438. package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +166 -0
  439. package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +185 -0
  440. package/dist/workflow/workflows/vuln-discovery/workflow.yaml +920 -0
  441. package/dist/workflow/worktree.d.ts +43 -0
  442. package/dist/workflow/worktree.js +106 -0
  443. package/dist/workflow/worktree.js.map +1 -0
  444. package/docker/Dockerfile.base +9 -0
  445. package/docker/Dockerfile.base.arm64 +9 -0
  446. package/docker/entrypoint-claude-code.sh +46 -0
  447. package/docker/entrypoint-goose.sh +25 -0
  448. package/package.json +19 -8
  449. package/packages/web-ui/README.md +113 -0
  450. package/packages/web-ui/docs/workflow-state-machine.png +0 -0
  451. package/src/config/generated/compiled-policy.json +528 -161
  452. package/src/config/generated/test-scenarios.json +4810 -170
  453. package/src/config/generated/tool-annotations.json +34 -47
  454. package/src/config/mcp-servers.json +2 -2
  455. package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
  456. package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  457. package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  458. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  459. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  460. package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  461. package/src/workflow/workflows/test-email-summary/workflow.yaml +89 -0
  462. package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +201 -0
  463. package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +166 -0
  464. package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +185 -0
  465. package/src/workflow/workflows/vuln-discovery/workflow.yaml +920 -0
  466. package/dist/pipeline/llm-logger.js.map +0 -1
  467. package/dist/session/errors.js.map +0 -1
@@ -0,0 +1,101 @@
1
+ /**
2
+ * HTTP control server for `ToolCallCoordinator`.
3
+ *
4
+ * Exposes a small JSON-over-HTTP API that the workflow orchestrator uses
5
+ * to hot-swap the coordinator's policy between state transitions. The
6
+ * server follows the same shape as the MITM proxy's control server:
7
+ * HTTP/1.1 over a Unix domain socket (preferred) or loopback TCP
8
+ * (fallback for platforms where UDS in bind mounts is not viable --
9
+ * typically macOS with Docker Desktop).
10
+ *
11
+ * Routing convention: endpoints live under `/__ironcurtain/<noun>/<verb>`.
12
+ * This prefix is shared with the MITM control server but each server
13
+ * routes a disjoint set of nouns (MITM owns `domains/*`; the coordinator
14
+ * owns `policy/*`). The two services are deliberately separate --
15
+ * they run in different processes and serve different concerns.
16
+ *
17
+ * Transport selection rules:
18
+ * - If `socketPath` is supplied, bind UDS. The parent directory is
19
+ * assumed to carry `0o700` mode (same pattern as MITM); this is
20
+ * how access control is enforced.
21
+ * - Otherwise if `port` is supplied, bind TCP on 127.0.0.1.
22
+ * - Callers must supply exactly one of the two.
23
+ *
24
+ * The server is silent when no workflow is wired up: `start()` is only
25
+ * called when the coordinator was constructed with a control-socket
26
+ * path, so the single-session CLI / daemon / cron paths are unaffected.
27
+ */
28
+ /**
29
+ * HTTP path for the policy hot-swap RPC. Exported so clients (the
30
+ * workflow orchestrator) can target it without stringly-typed paths.
31
+ */
32
+ export declare const POLICY_LOAD_PATH = "/__ironcurtain/policy/load";
33
+ /**
34
+ * Request body for `POST {POLICY_LOAD_PATH}`.
35
+ * Matches `ToolCallCoordinator.loadPolicy`'s argument shape exactly so
36
+ * the server is a thin HTTP adapter.
37
+ *
38
+ * Audit entries are written to the coordinator's single long-lived
39
+ * audit file (fixed at construction time); each entry carries a
40
+ * `persona` field so consumers can reconstruct per-persona slices
41
+ * without per-state file rotation.
42
+ */
43
+ export interface LoadPolicyRequest {
44
+ readonly persona: string;
45
+ readonly policyDir: string;
46
+ }
47
+ /** Handler invoked when `POST /__ironcurtain/policy/load` arrives. */
48
+ export type LoadPolicyHandler = (req: LoadPolicyRequest) => Promise<void>;
49
+ /** Listen options. Exactly one of `socketPath` / `port` must be set. */
50
+ export interface ControlServerListenOptions {
51
+ /** Absolute UDS path. Mutually exclusive with `port`. */
52
+ readonly socketPath?: string;
53
+ /** TCP port (0 for OS-assigned). Mutually exclusive with `socketPath`. */
54
+ readonly port?: number;
55
+ }
56
+ /** Address the server actually bound to (TCP port is filled in if 0 was passed). */
57
+ export interface ControlServerAddress {
58
+ readonly socketPath?: string;
59
+ readonly port?: number;
60
+ }
61
+ /**
62
+ * Constructor dependencies for `ControlServer`. The handler is injected
63
+ * so the server has no direct coupling to `ToolCallCoordinator`; this
64
+ * keeps the server unit-testable without a full coordinator.
65
+ */
66
+ export interface ControlServerDeps {
67
+ readonly onLoadPolicy: LoadPolicyHandler;
68
+ }
69
+ /**
70
+ * HTTP server that routes control requests to the coordinator.
71
+ *
72
+ * Lifecycle: call `start(options)` to bind the server and `stop()` to
73
+ * unbind it. After `stop()` completes, the same instance may be started
74
+ * again with new listen options.
75
+ */
76
+ export declare class ControlServer {
77
+ private readonly server;
78
+ private boundAddress;
79
+ constructor(deps: ControlServerDeps);
80
+ /** Dispatches a single request. One method, one route, for now. */
81
+ private route;
82
+ /**
83
+ * Parses a `POST /__ironcurtain/policy/load` request and invokes the
84
+ * handler. 400 on malformed input; 500 on handler failure; 200 on
85
+ * success with `{ ok: true, loadedAt: <ISO> }`.
86
+ */
87
+ private handleLoadPolicy;
88
+ /**
89
+ * Begins accepting connections. Resolves once the socket is bound;
90
+ * rejects with the server's `'error'` event on bind failure.
91
+ */
92
+ start(options: ControlServerListenOptions): Promise<ControlServerAddress>;
93
+ /** Returns the bound address, or null if `start()` has not completed. */
94
+ getAddress(): ControlServerAddress | null;
95
+ /**
96
+ * Shuts down the server. Closes all in-flight connections, removes
97
+ * the socket file (UDS mode), and resolves once the listener has
98
+ * fully stopped.
99
+ */
100
+ stop(): Promise<void>;
101
+ }
@@ -0,0 +1,282 @@
1
+ /**
2
+ * HTTP control server for `ToolCallCoordinator`.
3
+ *
4
+ * Exposes a small JSON-over-HTTP API that the workflow orchestrator uses
5
+ * to hot-swap the coordinator's policy between state transitions. The
6
+ * server follows the same shape as the MITM proxy's control server:
7
+ * HTTP/1.1 over a Unix domain socket (preferred) or loopback TCP
8
+ * (fallback for platforms where UDS in bind mounts is not viable --
9
+ * typically macOS with Docker Desktop).
10
+ *
11
+ * Routing convention: endpoints live under `/__ironcurtain/<noun>/<verb>`.
12
+ * This prefix is shared with the MITM control server but each server
13
+ * routes a disjoint set of nouns (MITM owns `domains/*`; the coordinator
14
+ * owns `policy/*`). The two services are deliberately separate --
15
+ * they run in different processes and serve different concerns.
16
+ *
17
+ * Transport selection rules:
18
+ * - If `socketPath` is supplied, bind UDS. The parent directory is
19
+ * assumed to carry `0o700` mode (same pattern as MITM); this is
20
+ * how access control is enforced.
21
+ * - Otherwise if `port` is supplied, bind TCP on 127.0.0.1.
22
+ * - Callers must supply exactly one of the two.
23
+ *
24
+ * The server is silent when no workflow is wired up: `start()` is only
25
+ * called when the coordinator was constructed with a control-socket
26
+ * path, so the single-session CLI / daemon / cron paths are unaffected.
27
+ */
28
+ import { existsSync, unlinkSync } from 'node:fs';
29
+ import * as http from 'node:http';
30
+ import * as logger from '../logger.js';
31
+ import { PolicyDirValidationError } from '../config/validate-policy-dir.js';
32
+ // ---------------------------------------------------------------------------
33
+ // Public types
34
+ // ---------------------------------------------------------------------------
35
+ /**
36
+ * HTTP path for the policy hot-swap RPC. Exported so clients (the
37
+ * workflow orchestrator) can target it without stringly-typed paths.
38
+ */
39
+ export const POLICY_LOAD_PATH = '/__ironcurtain/policy/load';
40
+ // ---------------------------------------------------------------------------
41
+ // Implementation
42
+ // ---------------------------------------------------------------------------
43
+ /** Cap on control-request body size (4 KiB). Load requests are tiny; anything larger is hostile or buggy. */
44
+ const MAX_BODY_BYTES = 4096;
45
+ /** Buffers an HTTP request body up to `maxBytes`; rejects if the limit is exceeded. */
46
+ function bufferRequestBody(req, maxBytes) {
47
+ return new Promise((resolve, reject) => {
48
+ const chunks = [];
49
+ let size = 0;
50
+ req.on('data', (chunk) => {
51
+ size += chunk.length;
52
+ if (size > maxBytes) {
53
+ req.destroy();
54
+ reject(new Error(`Request body exceeds ${maxBytes} bytes`));
55
+ }
56
+ else {
57
+ chunks.push(chunk);
58
+ }
59
+ });
60
+ req.on('end', () => resolve(Buffer.concat(chunks)));
61
+ req.on('error', reject);
62
+ });
63
+ }
64
+ /** Writes a JSON response with the given status code and body. */
65
+ function writeJson(res, status, body) {
66
+ res.writeHead(status, { 'Content-Type': 'application/json' });
67
+ res.end(JSON.stringify(body));
68
+ }
69
+ /**
70
+ * Formats an unknown thrown value for server-side logging. Includes the
71
+ * stack trace when available -- this is server-side only, so full
72
+ * internals are appropriate. Never pass this output to an HTTP response:
73
+ * error messages in Node commonly embed filesystem paths and other
74
+ * internal details that should not cross the trust boundary.
75
+ */
76
+ function formatErrorForLog(err) {
77
+ if (err instanceof Error) {
78
+ return err.stack ?? `${err.name}: ${err.message}`;
79
+ }
80
+ return String(err);
81
+ }
82
+ /**
83
+ * Validates the decoded body of a load-policy request. Returns the
84
+ * validated shape or a string describing the first validation failure.
85
+ */
86
+ function parseLoadPolicyBody(raw) {
87
+ if (typeof raw !== 'object' || raw === null)
88
+ return 'body must be a JSON object';
89
+ const obj = raw;
90
+ if (typeof obj.persona !== 'string' || obj.persona.length === 0) {
91
+ return 'persona must be a non-empty string';
92
+ }
93
+ if (typeof obj.policyDir !== 'string' || obj.policyDir.length === 0) {
94
+ return 'policyDir must be a non-empty string';
95
+ }
96
+ return {
97
+ persona: obj.persona,
98
+ policyDir: obj.policyDir,
99
+ };
100
+ }
101
+ /**
102
+ * HTTP server that routes control requests to the coordinator.
103
+ *
104
+ * Lifecycle: call `start(options)` to bind the server and `stop()` to
105
+ * unbind it. After `stop()` completes, the same instance may be started
106
+ * again with new listen options.
107
+ */
108
+ export class ControlServer {
109
+ server;
110
+ boundAddress = null;
111
+ constructor(deps) {
112
+ this.server = http.createServer((req, res) => {
113
+ this.route(req, res, deps).catch((err) => {
114
+ // The per-handler try/catch should absorb all errors; this is
115
+ // a belt-and-braces guard against a handler that leaks a
116
+ // rejection. Log the full error server-side (including stack)
117
+ // and return an opaque 500 to the client -- raw error text
118
+ // from Node commonly embeds absolute paths and internal
119
+ // details that should not cross the trust boundary.
120
+ logger.warn(`[control-server] unhandled handler error: ${formatErrorForLog(err)}`);
121
+ if (!res.headersSent) {
122
+ writeJson(res, 500, { error: 'Internal error' });
123
+ }
124
+ else {
125
+ res.end();
126
+ }
127
+ });
128
+ });
129
+ }
130
+ /** Dispatches a single request. One method, one route, for now. */
131
+ async route(req, res, deps) {
132
+ const url = req.url ?? '';
133
+ if (url === POLICY_LOAD_PATH && req.method === 'POST') {
134
+ await this.handleLoadPolicy(req, res, deps.onLoadPolicy);
135
+ return;
136
+ }
137
+ writeJson(res, 404, { error: 'Not Found' });
138
+ }
139
+ /**
140
+ * Parses a `POST /__ironcurtain/policy/load` request and invokes the
141
+ * handler. 400 on malformed input; 500 on handler failure; 200 on
142
+ * success with `{ ok: true, loadedAt: <ISO> }`.
143
+ */
144
+ async handleLoadPolicy(req, res, onLoadPolicy) {
145
+ let body;
146
+ try {
147
+ body = await bufferRequestBody(req, MAX_BODY_BYTES);
148
+ }
149
+ catch (err) {
150
+ // bufferRequestBody rejects on (a) oversized body — our controlled
151
+ // message — or (b) Node-level req 'error' events, whose messages
152
+ // may embed filesystem paths or other internals. Generic response
153
+ // either way; details go to the server log.
154
+ logger.warn(`ControlServer bufferRequestBody failed: ${formatErrorForLog(err)}`);
155
+ writeJson(res, 400, { error: 'Bad request' });
156
+ return;
157
+ }
158
+ let parsed;
159
+ try {
160
+ parsed = JSON.parse(body.toString('utf-8'));
161
+ }
162
+ catch {
163
+ // JSON.parse's error text embeds parser internals (byte offsets
164
+ // and the surrounding characters of the input). The caller knows
165
+ // what they sent; a generic message is sufficient and avoids
166
+ // echoing any fragment of the request back.
167
+ writeJson(res, 400, { error: 'Invalid JSON' });
168
+ return;
169
+ }
170
+ const validated = parseLoadPolicyBody(parsed);
171
+ if (typeof validated === 'string') {
172
+ writeJson(res, 400, { error: validated });
173
+ return;
174
+ }
175
+ try {
176
+ await onLoadPolicy(validated);
177
+ }
178
+ catch (err) {
179
+ // PolicyDirValidationError is a caller-fault case (the RPC
180
+ // supplied a policyDir that escapes the trusted roots). Its
181
+ // message is built by our own code and references only paths
182
+ // the caller already knows, so surfacing it as 400 helps the
183
+ // orchestrator log the real cause instead of a blind "Internal
184
+ // error". Any other throw is an unexpected server-side failure
185
+ // whose error text may embed filesystem internals; log it
186
+ // server-side and return a generic 500.
187
+ if (err instanceof PolicyDirValidationError) {
188
+ writeJson(res, 400, { error: err.message });
189
+ return;
190
+ }
191
+ logger.warn(`[control-server] loadPolicy failed: ${formatErrorForLog(err)}`);
192
+ writeJson(res, 500, { error: 'Internal error' });
193
+ return;
194
+ }
195
+ writeJson(res, 200, { ok: true, loadedAt: new Date().toISOString() });
196
+ }
197
+ /**
198
+ * Begins accepting connections. Resolves once the socket is bound;
199
+ * rejects with the server's `'error'` event on bind failure.
200
+ */
201
+ async start(options) {
202
+ if (this.boundAddress !== null) {
203
+ throw new Error(`ControlServer.start() called twice (already listening at ${JSON.stringify(this.boundAddress)})`);
204
+ }
205
+ const { socketPath, port } = options;
206
+ const hasSocket = socketPath !== undefined;
207
+ const hasPort = port !== undefined;
208
+ if (hasSocket === hasPort) {
209
+ throw new Error('ControlServer.start: exactly one of socketPath or port must be provided');
210
+ }
211
+ if (socketPath !== undefined) {
212
+ // If a stale socket exists from a previous run, clear it. Matches
213
+ // MITM's behavior at mitm-proxy.ts:1600.
214
+ if (existsSync(socketPath)) {
215
+ unlinkSync(socketPath);
216
+ }
217
+ this.boundAddress = await listen(this.server, socketPath);
218
+ return this.boundAddress;
219
+ }
220
+ // Narrowing: port must be defined here (we rejected the both-undefined
221
+ // and both-defined cases above).
222
+ this.boundAddress = await listenTcp(this.server, port ?? 0);
223
+ return this.boundAddress;
224
+ }
225
+ /** Returns the bound address, or null if `start()` has not completed. */
226
+ getAddress() {
227
+ return this.boundAddress;
228
+ }
229
+ /**
230
+ * Shuts down the server. Closes all in-flight connections, removes
231
+ * the socket file (UDS mode), and resolves once the listener has
232
+ * fully stopped.
233
+ */
234
+ async stop() {
235
+ // closeAllConnections() cancels any in-flight requests so close()
236
+ // doesn't hang waiting for keep-alive connections to end.
237
+ this.server.closeAllConnections();
238
+ await new Promise((resolve) => {
239
+ this.server.close(() => resolve());
240
+ });
241
+ const socketPath = this.boundAddress?.socketPath;
242
+ if (socketPath) {
243
+ try {
244
+ if (existsSync(socketPath)) {
245
+ unlinkSync(socketPath);
246
+ }
247
+ }
248
+ catch {
249
+ // best-effort cleanup
250
+ }
251
+ }
252
+ // Clear the bound address so `getAddress()` correctly reports the
253
+ // listener as gone and a subsequent `start()` is permitted (the
254
+ // double-start guard in `start()` keys off `boundAddress`).
255
+ this.boundAddress = null;
256
+ }
257
+ }
258
+ /** Listens on a UDS and resolves with the bound address. */
259
+ function listen(server, socketPath) {
260
+ return new Promise((resolve, reject) => {
261
+ const onError = (err) => reject(err);
262
+ server.once('error', onError);
263
+ server.listen(socketPath, () => {
264
+ server.removeListener('error', onError);
265
+ resolve({ socketPath });
266
+ });
267
+ });
268
+ }
269
+ /** Listens on loopback TCP and resolves with the OS-assigned port. */
270
+ function listenTcp(server, port) {
271
+ return new Promise((resolve, reject) => {
272
+ const onError = (err) => reject(err);
273
+ server.once('error', onError);
274
+ server.listen(port, '127.0.0.1', () => {
275
+ server.removeListener('error', onError);
276
+ const addr = server.address();
277
+ const boundPort = addr && typeof addr === 'object' ? addr.port : port;
278
+ resolve({ port: boundPort });
279
+ });
280
+ });
281
+ }
282
+ //# sourceMappingURL=control-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-server.js","sourceRoot":"","sources":["../../src/trusted-process/control-server.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,13 @@
4
4
  * Domain matching (domainMatchesAllowlist, isIpAddress) shared by the
5
5
  * PolicyEngine and the list type registry (dynamic-list-types.ts).
6
6
  *
7
- * URL normalization and domain extraction (normalizeUrl, extractDomain,
8
- * normalizeGitUrl, extractGitDomain, resolveGitRemote) used by the
7
+ * Domain extraction (extractDomain, extractGitDomain) and git remote
8
+ * resolution (resolveGitRemote, resolveDefaultGitRemote) used by the
9
9
  * policy engine's domain check pipeline and the auto-approver.
10
+ *
11
+ * URL canonicalizers (normalizeUrl, normalizeGitUrl) live in
12
+ * `../types/url-normalize.js` so the ArgumentRole registry can use them
13
+ * without forming a runtime cycle through this module.
10
14
  */
11
15
  import type { ArgumentRole } from '../types/argument-roles.js';
12
16
  /**
@@ -29,12 +33,8 @@ export declare function isIpAddress(domain: string): boolean;
29
33
  * For plain hostname domains (e.g., from `fetch-url`), behavior is unchanged.
30
34
  */
31
35
  export declare function domainMatchesAllowlist(domain: string, allowedDomains: readonly string[]): boolean;
32
- /** Normalizes an HTTP(S) URL to a canonical form. Returns value as-is on parse failure. */
33
- export declare function normalizeUrl(value: string): string;
34
36
  /** Extracts the hostname from an HTTP(S) URL. Returns value as-is on parse failure. */
35
37
  export declare function extractDomain(value: string): string;
36
- /** Normalizes a git URL (HTTP or SSH format). SSH URLs are returned as-is. */
37
- export declare function normalizeGitUrl(value: string): string;
38
38
  /**
39
39
  * Extracts the domain from a URL value, dispatching to the correct
40
40
  * extractor based on role. Use this instead of calling extractDomain
@@ -4,9 +4,13 @@
4
4
  * Domain matching (domainMatchesAllowlist, isIpAddress) shared by the
5
5
  * PolicyEngine and the list type registry (dynamic-list-types.ts).
6
6
  *
7
- * URL normalization and domain extraction (normalizeUrl, extractDomain,
8
- * normalizeGitUrl, extractGitDomain, resolveGitRemote) used by the
7
+ * Domain extraction (extractDomain, extractGitDomain) and git remote
8
+ * resolution (resolveGitRemote, resolveDefaultGitRemote) used by the
9
9
  * policy engine's domain check pipeline and the auto-approver.
10
+ *
11
+ * URL canonicalizers (normalizeUrl, normalizeGitUrl) live in
12
+ * `../types/url-normalize.js` so the ArgumentRole registry can use them
13
+ * without forming a runtime cycle through this module.
10
14
  */
11
15
  import { execFileSync } from 'node:child_process';
12
16
  import { resolve } from 'node:path';
@@ -52,20 +56,8 @@ export function domainMatchesAllowlist(domain, allowedDomains) {
52
56
  });
53
57
  }
54
58
  // ---------------------------------------------------------------------------
55
- // URL normalization and domain extraction
59
+ // Domain extraction
56
60
  // ---------------------------------------------------------------------------
57
- /** Normalizes an HTTP(S) URL to a canonical form. Returns value as-is on parse failure. */
58
- export function normalizeUrl(value) {
59
- try {
60
- const url = new URL(value);
61
- if (url.pathname === '/')
62
- url.pathname = '';
63
- return url.toString().replace(/\/$/, '');
64
- }
65
- catch {
66
- return value;
67
- }
68
- }
69
61
  /** Extracts the hostname from an HTTP(S) URL. Returns value as-is on parse failure. */
70
62
  export function extractDomain(value) {
71
63
  try {
@@ -75,14 +67,6 @@ export function extractDomain(value) {
75
67
  return value;
76
68
  }
77
69
  }
78
- /** Normalizes a git URL (HTTP or SSH format). SSH URLs are returned as-is. */
79
- export function normalizeGitUrl(value) {
80
- // SSH format: git@host:path -- no further normalization needed
81
- const sshMatch = value.match(/^(?:[\w.+-]+@)?([^:]+):/);
82
- if (sshMatch && !value.includes('://'))
83
- return value;
84
- return normalizeUrl(value);
85
- }
86
70
  /**
87
71
  * Extracts the domain from a URL value, dispatching to the correct
88
72
  * extractor based on role. Use this instead of calling extractDomain
@@ -1 +1 @@
1
- {"version":3,"file":"domain-utils.js","sourceRoot":"","sources":["../../src/trusted-process/domain-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,cAAiC;IACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACrC,IAAI,OAAO,KAAK,GAAG;YAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACjD,OAAO,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpE,CAAC;QACD,2CAA2C;QAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,KAAK,OAAO,CAAC;QACrD,gDAAgD;QAChD,OAAO,QAAQ,KAAK,OAAO,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,2FAA2F;AAC3F,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG;YAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACxD,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,IAAkB;IACpE,OAAO,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,CAAC,GAAG,QAAQ,CAAC;IACjB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC5D,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAAgC;IAC9E,gCAAgC;IAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gEAAgE;IAChE,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE;YACvD,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,gDAAgD;IAChE,CAAC;AACH,CAAC;AAKD;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAiB;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvF,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,MAAc,EAAE,IAAiB;IACxD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,MAAM,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,UAAkB,EAAE,IAAiB;IACzD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAgB;QAC5B,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC;IAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;QACtB,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"domain-utils.js","sourceRoot":"","sources":["../../src/trusted-process/domain-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared error-message prefixes used by the pipeline to tag error
3
+ * responses with a recognizable category. Consumers (logs, UI, user
4
+ * messages) can pattern-match on these to identify the error category
5
+ * without relying on internal decision fields.
6
+ *
7
+ * The coordinator itself classifies tool-call outcomes via the
8
+ * `_policyDecision.status` field stamped on every response, not by
9
+ * matching these prefixes.
10
+ */
11
+ export declare const ERROR_PREFIX_DENIED = "DENIED:";
12
+ export declare const ERROR_PREFIX_ESCALATION_REQUIRED = "ESCALATION REQUIRED:";
13
+ export declare const ERROR_PREFIX_ESCALATION_DENIED = "ESCALATION DENIED:";
14
+ export declare const ERROR_PREFIX_CIRCUIT_BREAKER = "CIRCUIT BREAKER:";
15
+ export declare const ERROR_PREFIX_UNKNOWN_ARGS = "Unknown argument(s):";
16
+ export declare const ERROR_PREFIX_MISSING_ANNOTATION = "Missing annotation for tool:";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Shared error-message prefixes used by the pipeline to tag error
3
+ * responses with a recognizable category. Consumers (logs, UI, user
4
+ * messages) can pattern-match on these to identify the error category
5
+ * without relying on internal decision fields.
6
+ *
7
+ * The coordinator itself classifies tool-call outcomes via the
8
+ * `_policyDecision.status` field stamped on every response, not by
9
+ * matching these prefixes.
10
+ */
11
+ export const ERROR_PREFIX_DENIED = 'DENIED:';
12
+ export const ERROR_PREFIX_ESCALATION_REQUIRED = 'ESCALATION REQUIRED:';
13
+ export const ERROR_PREFIX_ESCALATION_DENIED = 'ESCALATION DENIED:';
14
+ export const ERROR_PREFIX_CIRCUIT_BREAKER = 'CIRCUIT BREAKER:';
15
+ export const ERROR_PREFIX_UNKNOWN_ARGS = 'Unknown argument(s):';
16
+ export const ERROR_PREFIX_MISSING_ANNOTATION = 'Missing annotation for tool:';
17
+ //# sourceMappingURL=error-prefixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-prefixes.js","sourceRoot":"","sources":["../../src/trusted-process/error-prefixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAC7C,MAAM,CAAC,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AACvE,MAAM,CAAC,MAAM,8BAA8B,GAAG,oBAAoB,CAAC;AACnE,MAAM,CAAC,MAAM,4BAA4B,GAAG,kBAAkB,CAAC;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAChE,MAAM,CAAC,MAAM,+BAA+B,GAAG,8BAA8B,CAAC"}
@@ -1,49 +1,66 @@
1
1
  import type { IronCurtainConfig } from '../config/types.js';
2
2
  import type { ToolCallRequest, ToolCallResult } from '../types/mcp.js';
3
- import { type WhitelistCandidateIpc } from './approval-whitelist.js';
4
- /** Result from an escalation callback, optionally including whitelist selection. */
5
- export interface EscalationResult {
6
- readonly decision: 'approved' | 'denied';
7
- /** Index into whitelistCandidates to whitelist. Absent = no whitelisting. */
8
- readonly whitelistSelection?: number;
9
- }
10
- export type EscalationPromptFn = (request: ToolCallRequest, reason: string, context?: Readonly<Record<string, string>>,
11
- /** Whitelist candidates for display to the user. */
12
- whitelistCandidates?: readonly WhitelistCandidateIpc[]) => Promise<EscalationResult>;
3
+ import { type EscalationPromptFn } from './tool-call-coordinator.js';
4
+ /** Re-export for backward compatibility with callers that import from here. */
5
+ export type { EscalationPromptFn };
6
+ export type { EscalationResult } from './tool-call-coordinator.js';
13
7
  export interface TrustedProcessOptions {
8
+ /**
9
+ * In-process escalation callback used by direct-tool-call code paths
10
+ * (integration tests). When set, the coordinator invokes this
11
+ * instead of consulting the file-IPC escalation directory.
12
+ */
14
13
  onEscalation?: EscalationPromptFn;
15
14
  }
15
+ /**
16
+ * In-process trusted process. Wraps `ToolCallCoordinator` for callers
17
+ * (integration tests, fallback direct-tool-call mode) that want a
18
+ * pre-wired object with a single `handleToolCall` entry point.
19
+ *
20
+ * After Step 1, both in-process and Code Mode paths share the same
21
+ * coordinator implementation for policy evaluation and audit logging.
22
+ *
23
+ * Lifecycle: `new TrustedProcess(config)` + `await initialize()`. The
24
+ * coordinator is constructed during `initialize()` (not the constructor)
25
+ * so the auto-approve model can be built first and threaded into
26
+ * construction-time invariants, rather than being attached after the
27
+ * fact.
28
+ */
16
29
  export declare class TrustedProcess {
17
30
  private config;
18
- private policyEngine;
31
+ private coordinator;
19
32
  private mcpManager;
20
33
  private mcpRoots;
21
- private auditLog;
22
34
  private escalation;
23
- private onEscalation?;
24
- private readonly whitelist;
25
- private autoApproveModel;
26
- private lastUserMessage;
27
- private serverContextMap;
35
+ private readonly options;
28
36
  constructor(config: IronCurtainConfig, options?: TrustedProcessOptions);
37
+ /** Internal accessor: throws if used before `initialize()`. */
38
+ private requireCoordinator;
29
39
  /**
30
40
  * Sets the most recent user message for auto-approval context.
31
41
  * Called by the session layer before each agent turn.
32
42
  */
33
43
  setLastUserMessage(message: string): void;
34
44
  initialize(): Promise<void>;
45
+ /**
46
+ * Creates the auto-approve language model when enabled in user config.
47
+ * Returns `null` when auto-approve is disabled or model construction
48
+ * fails (non-fatal: the session continues with manual escalation).
49
+ */
50
+ private buildAutoApproveModel;
51
+ /**
52
+ * Connects to every configured MCP server and registers its tools
53
+ * with the coordinator. Unavailable servers are logged and skipped.
54
+ */
55
+ private connectMcpServers;
35
56
  listTools(serverName: string): Promise<{
36
57
  name: string;
37
58
  description?: string;
38
59
  inputSchema: unknown;
39
60
  }[]>;
40
61
  /**
41
- * Handles a tool call request through the full trusted process lifecycle:
42
- * 1. Evaluate policy (allow / deny / escalate)
43
- * 2. If escalated, prompt the human for approval
44
- * 3. If allowed, forward to the real MCP server
45
- * 4. Log the complete decision trace to the audit log
46
- * 5. Return the result to the caller
62
+ * Handles a tool call through the coordinator's policy pipeline.
63
+ * Mirrors the legacy TrustedProcess.handleToolCall signature.
47
64
  */
48
65
  handleToolCall(request: ToolCallRequest): Promise<ToolCallResult>;
49
66
  shutdown(): Promise<void>;