@provos/ironcurtain 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (660) hide show
  1. package/README.md +68 -14
  2. package/dist/auth/oauth-provider.js +1 -4
  3. package/dist/auth/oauth-provider.js.map +1 -1
  4. package/dist/cli-help.d.ts +12 -0
  5. package/dist/cli-help.js +21 -0
  6. package/dist/cli-help.js.map +1 -1
  7. package/dist/cli.js +46 -6
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/agent-model-guard.d.ts +14 -0
  10. package/dist/config/agent-model-guard.js +24 -0
  11. package/dist/config/agent-model-guard.js.map +1 -0
  12. package/dist/config/config-command.js +277 -7
  13. package/dist/config/config-command.js.map +1 -1
  14. package/dist/config/first-start.js +62 -7
  15. package/dist/config/first-start.js.map +1 -1
  16. package/dist/config/generated/compiled-policy.json +528 -161
  17. package/dist/config/generated/test-scenarios.json +4810 -170
  18. package/dist/config/generated/tool-annotations.json +34 -47
  19. package/dist/config/index.d.ts +58 -0
  20. package/dist/config/index.js +97 -15
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/mcp-servers.json +2 -2
  23. package/dist/config/model-provider.d.ts +9 -0
  24. package/dist/config/model-provider.js +13 -0
  25. package/dist/config/model-provider.js.map +1 -1
  26. package/dist/config/paths.d.ts +217 -0
  27. package/dist/config/paths.js +363 -14
  28. package/dist/config/paths.js.map +1 -1
  29. package/dist/config/types.d.ts +7 -1
  30. package/dist/config/user-config.d.ts +101 -6
  31. package/dist/config/user-config.js +145 -31
  32. package/dist/config/user-config.js.map +1 -1
  33. package/dist/config/validate-policy-dir.d.ts +10 -0
  34. package/dist/config/validate-policy-dir.js +59 -0
  35. package/dist/config/validate-policy-dir.js.map +1 -0
  36. package/dist/cron/job-commands.js +22 -2
  37. package/dist/cron/job-commands.js.map +1 -1
  38. package/dist/cron/types.d.ts +16 -2
  39. package/dist/cron/types.js +1 -3
  40. package/dist/cron/types.js.map +1 -1
  41. package/dist/daemon/daemon-command.js +30 -7
  42. package/dist/daemon/daemon-command.js.map +1 -1
  43. package/dist/daemon/ironcurtain-daemon.d.ts +62 -1
  44. package/dist/daemon/ironcurtain-daemon.js +231 -8
  45. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  46. package/dist/daemon-client/daemon-client.d.ts +123 -0
  47. package/dist/daemon-client/daemon-client.js +324 -0
  48. package/dist/daemon-client/daemon-client.js.map +1 -0
  49. package/dist/docker/adapters/claude-code.js +194 -20
  50. package/dist/docker/adapters/claude-code.js.map +1 -1
  51. package/dist/docker/adapters/codex.d.ts +9 -0
  52. package/dist/docker/adapters/codex.js +297 -0
  53. package/dist/docker/adapters/codex.js.map +1 -0
  54. package/dist/docker/adapters/goose.d.ts +12 -11
  55. package/dist/docker/adapters/goose.js +80 -27
  56. package/dist/docker/adapters/goose.js.map +1 -1
  57. package/dist/docker/agent-adapter.d.ts +183 -5
  58. package/dist/docker/agent-adapter.js +16 -0
  59. package/dist/docker/agent-adapter.js.map +1 -1
  60. package/dist/docker/agent-registry.js +5 -0
  61. package/dist/docker/agent-registry.js.map +1 -1
  62. package/dist/docker/apple-container-manager.d.ts +49 -0
  63. package/dist/docker/apple-container-manager.js +464 -0
  64. package/dist/docker/apple-container-manager.js.map +1 -0
  65. package/dist/docker/code-mode-proxy.d.ts +38 -0
  66. package/dist/docker/code-mode-proxy.js +6 -1
  67. package/dist/docker/code-mode-proxy.js.map +1 -1
  68. package/dist/docker/container-lifecycle.d.ts +2 -2
  69. package/dist/docker/container-lifecycle.js.map +1 -1
  70. package/dist/docker/container-runtime.d.ts +29 -0
  71. package/dist/docker/container-runtime.js +76 -0
  72. package/dist/docker/container-runtime.js.map +1 -0
  73. package/dist/docker/docker-agent-session.d.ts +113 -62
  74. package/dist/docker/docker-agent-session.js +271 -294
  75. package/dist/docker/docker-agent-session.js.map +1 -1
  76. package/dist/docker/docker-infrastructure.d.ts +428 -26
  77. package/dist/docker/docker-infrastructure.js +1005 -70
  78. package/dist/docker/docker-infrastructure.js.map +1 -1
  79. package/dist/docker/docker-manager.d.ts +58 -3
  80. package/dist/docker/docker-manager.js +378 -33
  81. package/dist/docker/docker-manager.js.map +1 -1
  82. package/dist/docker/docker-probe.d.ts +45 -0
  83. package/dist/docker/docker-probe.js +86 -0
  84. package/dist/docker/docker-probe.js.map +1 -0
  85. package/dist/docker/docker-progress-sink.d.ts +43 -0
  86. package/dist/docker/docker-progress-sink.js +299 -0
  87. package/dist/docker/docker-progress-sink.js.map +1 -0
  88. package/dist/docker/mitm-proxy.d.ts +135 -1
  89. package/dist/docker/mitm-proxy.js +611 -25
  90. package/dist/docker/mitm-proxy.js.map +1 -1
  91. package/dist/docker/network-topology.d.ts +81 -0
  92. package/dist/docker/network-topology.js +160 -0
  93. package/dist/docker/network-topology.js.map +1 -0
  94. package/dist/docker/oauth-credentials.d.ts +59 -3
  95. package/dist/docker/oauth-credentials.js +181 -14
  96. package/dist/docker/oauth-credentials.js.map +1 -1
  97. package/dist/docker/oauth-token-manager.js +2 -2
  98. package/dist/docker/oauth-token-manager.js.map +1 -1
  99. package/dist/docker/orientation.d.ts +1 -1
  100. package/dist/docker/package-types.d.ts +1 -1
  101. package/dist/docker/provider-config.d.ts +78 -3
  102. package/dist/docker/provider-config.js +295 -31
  103. package/dist/docker/provider-config.js.map +1 -1
  104. package/dist/docker/provision-lock.d.ts +46 -0
  105. package/dist/docker/provision-lock.js +152 -0
  106. package/dist/docker/provision-lock.js.map +1 -0
  107. package/dist/docker/proxy-tools.d.ts +0 -2
  108. package/dist/docker/proxy-tools.js +2 -7
  109. package/dist/docker/proxy-tools.js.map +1 -1
  110. package/dist/docker/pty-session.d.ts +64 -1
  111. package/dist/docker/pty-session.js +306 -104
  112. package/dist/docker/pty-session.js.map +1 -1
  113. package/dist/docker/pty-types.d.ts +0 -2
  114. package/dist/docker/pty-types.js +0 -2
  115. package/dist/docker/pty-types.js.map +1 -1
  116. package/dist/docker/registry-proxy.d.ts +46 -0
  117. package/dist/docker/registry-proxy.js +255 -1
  118. package/dist/docker/registry-proxy.js.map +1 -1
  119. package/dist/docker/resource-limits.d.ts +134 -0
  120. package/dist/docker/resource-limits.js +203 -0
  121. package/dist/docker/resource-limits.js.map +1 -0
  122. package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
  123. package/dist/docker/spawn-with-idle-timeout.js +152 -0
  124. package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
  125. package/dist/docker/sse-extractor.d.ts +51 -0
  126. package/dist/docker/sse-extractor.js +303 -0
  127. package/dist/docker/sse-extractor.js.map +1 -0
  128. package/dist/docker/token-stream-bus.d.ts +83 -0
  129. package/dist/docker/token-stream-bus.js +98 -0
  130. package/dist/docker/token-stream-bus.js.map +1 -0
  131. package/dist/docker/token-stream-types.d.ts +71 -0
  132. package/dist/docker/token-stream-types.js +8 -0
  133. package/dist/docker/token-stream-types.js.map +1 -0
  134. package/dist/docker/trajectory-capture.d.ts +79 -0
  135. package/dist/docker/trajectory-capture.js +521 -0
  136. package/dist/docker/trajectory-capture.js.map +1 -0
  137. package/dist/docker/trajectory-reassembler.d.ts +286 -0
  138. package/dist/docker/trajectory-reassembler.js +990 -0
  139. package/dist/docker/trajectory-reassembler.js.map +1 -0
  140. package/dist/docker/trajectory-tap.d.ts +100 -0
  141. package/dist/docker/trajectory-tap.js +410 -0
  142. package/dist/docker/trajectory-tap.js.map +1 -0
  143. package/dist/docker/trajectory-types.d.ts +187 -0
  144. package/dist/docker/trajectory-types.js +43 -0
  145. package/dist/docker/trajectory-types.js.map +1 -0
  146. package/dist/docker/types.d.ts +105 -12
  147. package/dist/doctor/checks.d.ts +171 -0
  148. package/dist/doctor/checks.js +598 -0
  149. package/dist/doctor/checks.js.map +1 -0
  150. package/dist/doctor/doctor-command.d.ts +29 -0
  151. package/dist/doctor/doctor-command.js +190 -0
  152. package/dist/doctor/doctor-command.js.map +1 -0
  153. package/dist/doctor/mcp-liveness.d.ts +28 -0
  154. package/dist/doctor/mcp-liveness.js +92 -0
  155. package/dist/doctor/mcp-liveness.js.map +1 -0
  156. package/dist/doctor/oauth-checks.d.ts +23 -0
  157. package/dist/doctor/oauth-checks.js +157 -0
  158. package/dist/doctor/oauth-checks.js.map +1 -0
  159. package/dist/doctor/output.d.ts +26 -0
  160. package/dist/doctor/output.js +82 -0
  161. package/dist/doctor/output.js.map +1 -0
  162. package/dist/escalation/listener-command.js +0 -3
  163. package/dist/escalation/listener-command.js.map +1 -1
  164. package/dist/event-bus/typed-event-bus.d.ts +26 -0
  165. package/dist/event-bus/typed-event-bus.js +35 -0
  166. package/dist/event-bus/typed-event-bus.js.map +1 -0
  167. package/dist/index.js +54 -21
  168. package/dist/index.js.map +1 -1
  169. package/dist/logger.js +31 -2
  170. package/dist/logger.js.map +1 -1
  171. package/dist/memory/auto-save.d.ts +18 -4
  172. package/dist/memory/auto-save.js +46 -6
  173. package/dist/memory/auto-save.js.map +1 -1
  174. package/dist/memory/memory-policy.d.ts +41 -0
  175. package/dist/memory/memory-policy.js +36 -0
  176. package/dist/memory/memory-policy.js.map +1 -0
  177. package/dist/mux/mux-app.d.ts +2 -0
  178. package/dist/mux/mux-app.js +1 -0
  179. package/dist/mux/mux-app.js.map +1 -1
  180. package/dist/mux/mux-command.d.ts +10 -1
  181. package/dist/mux/mux-command.js +74 -40
  182. package/dist/mux/mux-command.js.map +1 -1
  183. package/dist/mux/mux-renderer.js +2 -12
  184. package/dist/mux/mux-renderer.js.map +1 -1
  185. package/dist/mux/pty-bridge.d.ts +2 -0
  186. package/dist/mux/pty-bridge.js +3 -0
  187. package/dist/mux/pty-bridge.js.map +1 -1
  188. package/dist/mux/session-scanner.js +1 -2
  189. package/dist/mux/session-scanner.js.map +1 -1
  190. package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
  191. package/dist/{pipeline → observability}/llm-logger.js +8 -3
  192. package/dist/observability/llm-logger.js.map +1 -0
  193. package/dist/observe/observe-command.d.ts +12 -0
  194. package/dist/observe/observe-command.js +285 -0
  195. package/dist/observe/observe-command.js.map +1 -0
  196. package/dist/observe/observe-renderer.d.ts +24 -0
  197. package/dist/observe/observe-renderer.js +87 -0
  198. package/dist/observe/observe-renderer.js.map +1 -0
  199. package/dist/observe/observe-tui-rain.d.ts +42 -0
  200. package/dist/observe/observe-tui-rain.js +531 -0
  201. package/dist/observe/observe-tui-rain.js.map +1 -0
  202. package/dist/observe/observe-tui-text-panel.d.ts +46 -0
  203. package/dist/observe/observe-tui-text-panel.js +525 -0
  204. package/dist/observe/observe-tui-text-panel.js.map +1 -0
  205. package/dist/observe/observe-tui-types.d.ts +270 -0
  206. package/dist/observe/observe-tui-types.js +200 -0
  207. package/dist/observe/observe-tui-types.js.map +1 -0
  208. package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
  209. package/dist/observe/observe-tui-word-scorer.js +572 -0
  210. package/dist/observe/observe-tui-word-scorer.js.map +1 -0
  211. package/dist/observe/observe-tui.d.ts +59 -0
  212. package/dist/observe/observe-tui.js +592 -0
  213. package/dist/observe/observe-tui.js.map +1 -0
  214. package/dist/persona/broad-policy-validator.d.ts +95 -0
  215. package/dist/persona/broad-policy-validator.js +171 -0
  216. package/dist/persona/broad-policy-validator.js.map +1 -0
  217. package/dist/persona/compile-persona-policy.d.ts +54 -2
  218. package/dist/persona/compile-persona-policy.js +29 -4
  219. package/dist/persona/compile-persona-policy.js.map +1 -1
  220. package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
  221. package/dist/persona/event-bus-progress-reporter.js +66 -0
  222. package/dist/persona/event-bus-progress-reporter.js.map +1 -0
  223. package/dist/persona/memory-gate.d.ts +19 -0
  224. package/dist/persona/memory-gate.js +33 -0
  225. package/dist/persona/memory-gate.js.map +1 -0
  226. package/dist/persona/persona-command.js +77 -72
  227. package/dist/persona/persona-command.js.map +1 -1
  228. package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
  229. package/dist/persona/persona-compile-orchestrator.js +504 -0
  230. package/dist/persona/persona-compile-orchestrator.js.map +1 -0
  231. package/dist/persona/persona-service.d.ts +137 -0
  232. package/dist/persona/persona-service.js +263 -0
  233. package/dist/persona/persona-service.js.map +1 -0
  234. package/dist/persona/policy-mutation-audit.d.ts +109 -0
  235. package/dist/persona/policy-mutation-audit.js +179 -0
  236. package/dist/persona/policy-mutation-audit.js.map +1 -0
  237. package/dist/persona/resolve.d.ts +22 -0
  238. package/dist/persona/resolve.js +45 -2
  239. package/dist/persona/resolve.js.map +1 -1
  240. package/dist/persona/rule-delta.d.ts +30 -0
  241. package/dist/persona/rule-delta.js +82 -0
  242. package/dist/persona/rule-delta.js.map +1 -0
  243. package/dist/persona/types.d.ts +28 -0
  244. package/dist/pipeline/annotate.js +10 -2
  245. package/dist/pipeline/annotate.js.map +1 -1
  246. package/dist/pipeline/compile.js +14 -2
  247. package/dist/pipeline/compile.js.map +1 -1
  248. package/dist/pipeline/constitution-compiler.d.ts +25 -14
  249. package/dist/pipeline/constitution-compiler.js +107 -38
  250. package/dist/pipeline/constitution-compiler.js.map +1 -1
  251. package/dist/pipeline/dynamic-list-types.d.ts +3 -6
  252. package/dist/pipeline/dynamic-list-types.js +3 -16
  253. package/dist/pipeline/dynamic-list-types.js.map +1 -1
  254. package/dist/pipeline/pipeline-runner.d.ts +63 -4
  255. package/dist/pipeline/pipeline-runner.js +242 -94
  256. package/dist/pipeline/pipeline-runner.js.map +1 -1
  257. package/dist/pipeline/pipeline-shared.d.ts +33 -4
  258. package/dist/pipeline/pipeline-shared.js +79 -19
  259. package/dist/pipeline/pipeline-shared.js.map +1 -1
  260. package/dist/pipeline/policy-verifier.js +16 -3
  261. package/dist/pipeline/policy-verifier.js.map +1 -1
  262. package/dist/pipeline/proxy-mcp-connections.js +17 -2
  263. package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
  264. package/dist/pipeline/refresh-lists.js +3 -5
  265. package/dist/pipeline/refresh-lists.js.map +1 -1
  266. package/dist/pipeline/scenario-generator.d.ts +4 -8
  267. package/dist/pipeline/scenario-generator.js +13 -46
  268. package/dist/pipeline/scenario-generator.js.map +1 -1
  269. package/dist/sandbox/index.d.ts +29 -0
  270. package/dist/sandbox/index.js +351 -119
  271. package/dist/sandbox/index.js.map +1 -1
  272. package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
  273. package/dist/sandbox/ironcurtain-protocol.js +185 -0
  274. package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
  275. package/dist/session/agent-session.d.ts +6 -0
  276. package/dist/session/agent-session.js +16 -5
  277. package/dist/session/agent-session.js.map +1 -1
  278. package/dist/session/cli-transport.js +0 -6
  279. package/dist/session/cli-transport.js.map +1 -1
  280. package/dist/session/index.d.ts +35 -14
  281. package/dist/session/index.js +333 -130
  282. package/dist/session/index.js.map +1 -1
  283. package/dist/session/preflight.d.ts +21 -13
  284. package/dist/session/preflight.js +227 -88
  285. package/dist/session/preflight.js.map +1 -1
  286. package/dist/session/prompts.d.ts +2 -5
  287. package/dist/session/prompts.js.map +1 -1
  288. package/dist/session/session-manager.d.ts +61 -6
  289. package/dist/session/session-manager.js +72 -10
  290. package/dist/session/session-manager.js.map +1 -1
  291. package/dist/session/session-metadata.d.ts +21 -5
  292. package/dist/session/session-metadata.js +34 -12
  293. package/dist/session/session-metadata.js.map +1 -1
  294. package/dist/session/types.d.ts +320 -5
  295. package/dist/session/types.js +57 -1
  296. package/dist/session/types.js.map +1 -1
  297. package/dist/signal/bot-command.js +6 -1
  298. package/dist/signal/bot-command.js.map +1 -1
  299. package/dist/signal/setup-signal.js +13 -21
  300. package/dist/signal/setup-signal.js.map +1 -1
  301. package/dist/signal/signal-bot-daemon.d.ts +16 -1
  302. package/dist/signal/signal-bot-daemon.js +39 -27
  303. package/dist/signal/signal-bot-daemon.js.map +1 -1
  304. package/dist/signal/signal-container.d.ts +3 -3
  305. package/dist/signal/signal-container.js +9 -3
  306. package/dist/signal/signal-container.js.map +1 -1
  307. package/dist/skills/discovery.d.ts +77 -0
  308. package/dist/skills/discovery.js +206 -0
  309. package/dist/skills/discovery.js.map +1 -0
  310. package/dist/skills/index.d.ts +4 -0
  311. package/dist/skills/index.js +3 -0
  312. package/dist/skills/index.js.map +1 -0
  313. package/dist/skills/staging.d.ts +28 -0
  314. package/dist/skills/staging.js +68 -0
  315. package/dist/skills/staging.js.map +1 -0
  316. package/dist/skills/types.d.ts +46 -0
  317. package/dist/skills/types.js +2 -0
  318. package/dist/skills/types.js.map +1 -0
  319. package/dist/trusted-process/approval-whitelist.d.ts +0 -2
  320. package/dist/trusted-process/approval-whitelist.js +17 -17
  321. package/dist/trusted-process/approval-whitelist.js.map +1 -1
  322. package/dist/trusted-process/async-mutex.d.ts +32 -0
  323. package/dist/trusted-process/async-mutex.js +50 -0
  324. package/dist/trusted-process/async-mutex.js.map +1 -0
  325. package/dist/trusted-process/audit-log.d.ts +38 -1
  326. package/dist/trusted-process/audit-log.js +82 -13
  327. package/dist/trusted-process/audit-log.js.map +1 -1
  328. package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
  329. package/dist/trusted-process/call-circuit-breaker.js +23 -3
  330. package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
  331. package/dist/trusted-process/container-command.d.ts +35 -0
  332. package/dist/trusted-process/container-command.js +49 -0
  333. package/dist/trusted-process/container-command.js.map +1 -0
  334. package/dist/trusted-process/control-server.d.ts +101 -0
  335. package/dist/trusted-process/control-server.js +282 -0
  336. package/dist/trusted-process/control-server.js.map +1 -0
  337. package/dist/trusted-process/domain-utils.d.ts +6 -6
  338. package/dist/trusted-process/domain-utils.js +7 -23
  339. package/dist/trusted-process/domain-utils.js.map +1 -1
  340. package/dist/trusted-process/error-prefixes.d.ts +16 -0
  341. package/dist/trusted-process/error-prefixes.js +17 -0
  342. package/dist/trusted-process/error-prefixes.js.map +1 -0
  343. package/dist/trusted-process/index.d.ts +40 -23
  344. package/dist/trusted-process/index.js +131 -225
  345. package/dist/trusted-process/index.js.map +1 -1
  346. package/dist/trusted-process/list-matcher.d.ts +17 -0
  347. package/dist/trusted-process/list-matcher.js +31 -0
  348. package/dist/trusted-process/list-matcher.js.map +1 -0
  349. package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
  350. package/dist/trusted-process/mcp-client-manager.js +40 -45
  351. package/dist/trusted-process/mcp-client-manager.js.map +1 -1
  352. package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
  353. package/dist/trusted-process/mcp-proxy-server.js +201 -660
  354. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  355. package/dist/trusted-process/policy-engine.d.ts +16 -4
  356. package/dist/trusted-process/policy-engine.js +103 -47
  357. package/dist/trusted-process/policy-engine.js.map +1 -1
  358. package/dist/trusted-process/policy-roots.d.ts +6 -0
  359. package/dist/trusted-process/policy-roots.js +20 -0
  360. package/dist/trusted-process/policy-roots.js.map +1 -1
  361. package/dist/trusted-process/sandbox-integration.d.ts +12 -0
  362. package/dist/trusted-process/sandbox-integration.js +18 -0
  363. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  364. package/dist/trusted-process/tcp-server-transport.d.ts +12 -1
  365. package/dist/trusted-process/tcp-server-transport.js +9 -1
  366. package/dist/trusted-process/tcp-server-transport.js.map +1 -1
  367. package/dist/trusted-process/tool-call-coordinator.d.ts +283 -0
  368. package/dist/trusted-process/tool-call-coordinator.js +592 -0
  369. package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
  370. package/dist/trusted-process/tool-call-pipeline.d.ts +213 -0
  371. package/dist/trusted-process/tool-call-pipeline.js +832 -0
  372. package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
  373. package/dist/trusted-process/tool-description-hints.d.ts +1 -1
  374. package/dist/types/argument-roles.d.ts +1 -1
  375. package/dist/types/argument-roles.js +14 -1
  376. package/dist/types/argument-roles.js.map +1 -1
  377. package/dist/types/audit.d.ts +9 -0
  378. package/dist/{session → types}/errors.d.ts +8 -2
  379. package/dist/{session → types}/errors.js +8 -2
  380. package/dist/types/errors.js.map +1 -0
  381. package/dist/types/reserved-servers.d.ts +11 -0
  382. package/dist/types/reserved-servers.js +12 -0
  383. package/dist/types/reserved-servers.js.map +1 -0
  384. package/dist/types/server-listing.d.ts +14 -0
  385. package/dist/types/server-listing.js +2 -0
  386. package/dist/types/server-listing.js.map +1 -0
  387. package/dist/types/slug.d.ts +2 -0
  388. package/dist/types/slug.js +2 -0
  389. package/dist/types/slug.js.map +1 -1
  390. package/dist/types/url-normalize.d.ts +16 -0
  391. package/dist/types/url-normalize.js +33 -0
  392. package/dist/types/url-normalize.js.map +1 -0
  393. package/dist/util/atomic-write.d.ts +31 -0
  394. package/dist/util/atomic-write.js +43 -0
  395. package/dist/util/atomic-write.js.map +1 -0
  396. package/dist/utils/error-message.d.ts +8 -0
  397. package/dist/utils/error-message.js +11 -0
  398. package/dist/utils/error-message.js.map +1 -0
  399. package/dist/utils/exec-error.d.ts +19 -0
  400. package/dist/utils/exec-error.js +16 -0
  401. package/dist/utils/exec-error.js.map +1 -0
  402. package/dist/utils/is-plain-object.d.ts +7 -0
  403. package/dist/utils/is-plain-object.js +12 -0
  404. package/dist/utils/is-plain-object.js.map +1 -0
  405. package/dist/utils/preflight-checks.d.ts +16 -0
  406. package/dist/utils/preflight-checks.js +178 -0
  407. package/dist/utils/preflight-checks.js.map +1 -0
  408. package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
  409. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
  410. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
  411. package/dist/web-ui/conn-registry.d.ts +14 -0
  412. package/dist/web-ui/conn-registry.js +25 -0
  413. package/dist/web-ui/conn-registry.js.map +1 -0
  414. package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
  415. package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
  416. package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
  417. package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
  418. package/dist/web-ui/dispatch/job-dispatch.js +83 -0
  419. package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
  420. package/dist/web-ui/dispatch/persona-dispatch.d.ts +50 -0
  421. package/dist/web-ui/dispatch/persona-dispatch.js +269 -0
  422. package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
  423. package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
  424. package/dist/web-ui/dispatch/session-dispatch.js +219 -0
  425. package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
  426. package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
  427. package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
  428. package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
  429. package/dist/web-ui/dispatch/types.d.ts +54 -0
  430. package/dist/web-ui/dispatch/types.js +72 -0
  431. package/dist/web-ui/dispatch/types.js.map +1 -0
  432. package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
  433. package/dist/web-ui/dispatch/workflow-dispatch.js +1036 -0
  434. package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
  435. package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
  436. package/dist/web-ui/json-rpc-dispatch.js +34 -0
  437. package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
  438. package/dist/web-ui/state-graph.d.ts +13 -0
  439. package/dist/web-ui/state-graph.js +82 -0
  440. package/dist/web-ui/state-graph.js.map +1 -0
  441. package/dist/web-ui/token-stream-bridge.d.ts +76 -0
  442. package/dist/web-ui/token-stream-bridge.js +265 -0
  443. package/dist/web-ui/token-stream-bridge.js.map +1 -0
  444. package/dist/web-ui/web-event-bus.d.ts +176 -0
  445. package/dist/web-ui/web-event-bus.js +19 -0
  446. package/dist/web-ui/web-event-bus.js.map +1 -0
  447. package/dist/web-ui/web-session-transport.d.ts +31 -0
  448. package/dist/web-ui/web-session-transport.js +109 -0
  449. package/dist/web-ui/web-session-transport.js.map +1 -0
  450. package/dist/web-ui/web-ui-server.d.ts +90 -0
  451. package/dist/web-ui/web-ui-server.js +477 -0
  452. package/dist/web-ui/web-ui-server.js.map +1 -0
  453. package/dist/web-ui/web-ui-types.d.ts +418 -0
  454. package/dist/web-ui/web-ui-types.js +32 -0
  455. package/dist/web-ui/web-ui-types.js.map +1 -0
  456. package/dist/web-ui/ws-utils.d.ts +5 -0
  457. package/dist/web-ui/ws-utils.js +12 -0
  458. package/dist/web-ui/ws-utils.js.map +1 -0
  459. package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
  460. package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -0
  461. package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
  462. package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
  463. package/dist/web-ui-static/index.html +14 -0
  464. package/dist/workflow/artifacts.d.ts +59 -0
  465. package/dist/workflow/artifacts.js +188 -0
  466. package/dist/workflow/artifacts.js.map +1 -0
  467. package/dist/workflow/checkpoint-selection.d.ts +34 -0
  468. package/dist/workflow/checkpoint-selection.js +48 -0
  469. package/dist/workflow/checkpoint-selection.js.map +1 -0
  470. package/dist/workflow/checkpoint.d.ts +35 -0
  471. package/dist/workflow/checkpoint.js +84 -0
  472. package/dist/workflow/checkpoint.js.map +1 -0
  473. package/dist/workflow/cli-shared.d.ts +62 -0
  474. package/dist/workflow/cli-shared.js +117 -0
  475. package/dist/workflow/cli-shared.js.map +1 -0
  476. package/dist/workflow/cli-support.d.ts +92 -0
  477. package/dist/workflow/cli-support.js +421 -0
  478. package/dist/workflow/cli-support.js.map +1 -0
  479. package/dist/workflow/container-snapshots.d.ts +29 -0
  480. package/dist/workflow/container-snapshots.js +137 -0
  481. package/dist/workflow/container-snapshots.js.map +1 -0
  482. package/dist/workflow/daemon-gate-commands.d.ts +21 -0
  483. package/dist/workflow/daemon-gate-commands.js +599 -0
  484. package/dist/workflow/daemon-gate-commands.js.map +1 -0
  485. package/dist/workflow/definition-loader.d.ts +32 -0
  486. package/dist/workflow/definition-loader.js +56 -0
  487. package/dist/workflow/definition-loader.js.map +1 -0
  488. package/dist/workflow/discovery.d.ts +107 -0
  489. package/dist/workflow/discovery.js +263 -0
  490. package/dist/workflow/discovery.js.map +1 -0
  491. package/dist/workflow/errors.d.ts +66 -0
  492. package/dist/workflow/errors.js +49 -0
  493. package/dist/workflow/errors.js.map +1 -0
  494. package/dist/workflow/guards.d.ts +8 -0
  495. package/dist/workflow/guards.js +38 -0
  496. package/dist/workflow/guards.js.map +1 -0
  497. package/dist/workflow/lane-template.d.ts +89 -0
  498. package/dist/workflow/lane-template.js +141 -0
  499. package/dist/workflow/lane-template.js.map +1 -0
  500. package/dist/workflow/lint-integration.d.ts +64 -0
  501. package/dist/workflow/lint-integration.js +56 -0
  502. package/dist/workflow/lint-integration.js.map +1 -0
  503. package/dist/workflow/lint.d.ts +72 -0
  504. package/dist/workflow/lint.js +593 -0
  505. package/dist/workflow/lint.js.map +1 -0
  506. package/dist/workflow/machine-builder.d.ts +178 -0
  507. package/dist/workflow/machine-builder.js +678 -0
  508. package/dist/workflow/machine-builder.js.map +1 -0
  509. package/dist/workflow/message-log.d.ts +99 -0
  510. package/dist/workflow/message-log.js +40 -0
  511. package/dist/workflow/message-log.js.map +1 -0
  512. package/dist/workflow/orchestrator.d.ts +954 -0
  513. package/dist/workflow/orchestrator.js +3594 -0
  514. package/dist/workflow/orchestrator.js.map +1 -0
  515. package/dist/workflow/prompt-builder.d.ts +39 -0
  516. package/dist/workflow/prompt-builder.js +243 -0
  517. package/dist/workflow/prompt-builder.js.map +1 -0
  518. package/dist/workflow/run-state-command.d.ts +9 -0
  519. package/dist/workflow/run-state-command.js +414 -0
  520. package/dist/workflow/run-state-command.js.map +1 -0
  521. package/dist/workflow/run-state-debug-capture.d.ts +40 -0
  522. package/dist/workflow/run-state-debug-capture.js +101 -0
  523. package/dist/workflow/run-state-debug-capture.js.map +1 -0
  524. package/dist/workflow/status-parser.d.ts +68 -0
  525. package/dist/workflow/status-parser.js +274 -0
  526. package/dist/workflow/status-parser.js.map +1 -0
  527. package/dist/workflow/types.d.ts +598 -0
  528. package/dist/workflow/types.js +85 -0
  529. package/dist/workflow/types.js.map +1 -0
  530. package/dist/workflow/validate.d.ts +80 -0
  531. package/dist/workflow/validate.js +788 -0
  532. package/dist/workflow/validate.js.map +1 -0
  533. package/dist/workflow/workflow-command.d.ts +9 -0
  534. package/dist/workflow/workflow-command.js +670 -0
  535. package/dist/workflow/workflow-command.js.map +1 -0
  536. package/dist/workflow/workflow-discovery.d.ts +27 -0
  537. package/dist/workflow/workflow-discovery.js +121 -0
  538. package/dist/workflow/workflow-discovery.js.map +1 -0
  539. package/dist/workflow/workflow-manager.d.ts +156 -0
  540. package/dist/workflow/workflow-manager.js +359 -0
  541. package/dist/workflow/workflow-manager.js.map +1 -0
  542. package/dist/workflow/workflows/design-and-code/README.md +50 -0
  543. package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
  544. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  545. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  546. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  547. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  548. package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  549. package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  550. package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  551. package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
  552. package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
  553. package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  554. package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  555. package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
  556. package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  557. package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
  558. package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  559. package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  560. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  561. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  562. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  563. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  564. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  565. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  566. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  567. package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  568. package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  569. package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  570. package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  571. package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  572. package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  573. package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  574. package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  575. package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  576. package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  577. package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  578. package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  579. package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  580. package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
  581. package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  582. package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  583. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  584. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  585. package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  586. package/dist/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  587. package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  588. package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  589. package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  590. package/dist/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  591. package/dist/workflow/worktree.d.ts +43 -0
  592. package/dist/workflow/worktree.js +106 -0
  593. package/dist/workflow/worktree.js.map +1 -0
  594. package/docker/Dockerfile.base +31 -0
  595. package/docker/Dockerfile.base.arm64 +27 -0
  596. package/docker/Dockerfile.claude-code +3 -1
  597. package/docker/Dockerfile.codex +17 -0
  598. package/docker/Dockerfile.goose +3 -1
  599. package/docker/entrypoint-claude-code.sh +7 -0
  600. package/docker/entrypoint-codex.sh +42 -0
  601. package/docker/entrypoint-goose.sh +6 -0
  602. package/docker/entrypoint-uid-remap.sh +93 -0
  603. package/package.json +27 -11
  604. package/packages/web-ui/README.md +113 -0
  605. package/packages/web-ui/docs/workflow-state-machine.png +0 -0
  606. package/src/config/generated/compiled-policy.json +528 -161
  607. package/src/config/generated/test-scenarios.json +4810 -170
  608. package/src/config/generated/tool-annotations.json +34 -47
  609. package/src/config/mcp-servers.json +2 -2
  610. package/src/workflow/workflows/design-and-code/README.md +50 -0
  611. package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
  612. package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  613. package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  614. package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  615. package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  616. package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  617. package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  618. package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  619. package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
  620. package/src/workflow/workflows/evolve/scripts/README.md +314 -0
  621. package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  622. package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  623. package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
  624. package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  625. package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
  626. package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  627. package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  628. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  629. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  630. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  631. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  632. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  633. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  634. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  635. package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  636. package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  637. package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  638. package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  639. package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  640. package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  641. package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  642. package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  643. package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  644. package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  645. package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  646. package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  647. package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  648. package/src/workflow/workflows/evolve/workflow.yaml +646 -0
  649. package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  650. package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  651. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  652. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  653. package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  654. package/src/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  655. package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  656. package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  657. package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  658. package/src/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  659. package/dist/pipeline/llm-logger.js.map +0 -1
  660. package/dist/session/errors.js.map +0 -1
@@ -0,0 +1,572 @@
1
+ /**
2
+ * TF-IDF word scorer for the observe TUI rain panel.
3
+ *
4
+ * Maintains a running TF-IDF model over the session, treating each
5
+ * message turn or tool call as a "document" and the full session
6
+ * history as the corpus. Produces top-scoring words for rain panel
7
+ * word drops, with throttle/dedup to avoid repetition.
8
+ *
9
+ * Depends on observe-tui-types.ts only. No external dependencies.
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // Constants
13
+ // ---------------------------------------------------------------------------
14
+ /** Minimum word length to consider for scoring. */
15
+ const MIN_WORD_LENGTH = 4;
16
+ /** Number of top-scoring words to return per document. */
17
+ const TOP_N_WORDS = 3;
18
+ /** Milliseconds before a recently-shown word can be re-enqueued. */
19
+ const DEDUP_WINDOW_MS = 30_000;
20
+ /** Characters of accumulated text before mid-stream scoring triggers. */
21
+ const MID_STREAM_THRESHOLD = 200;
22
+ // ---------------------------------------------------------------------------
23
+ // Stop words
24
+ // ---------------------------------------------------------------------------
25
+ /** Common English words that are uninteresting for display. */
26
+ const ENGLISH_STOP_WORDS = new Set([
27
+ 'about',
28
+ 'after',
29
+ 'also',
30
+ 'back',
31
+ 'been',
32
+ 'before',
33
+ 'being',
34
+ 'between',
35
+ 'both',
36
+ 'came',
37
+ 'come',
38
+ 'could',
39
+ 'each',
40
+ 'does',
41
+ 'done',
42
+ 'down',
43
+ 'even',
44
+ 'find',
45
+ 'first',
46
+ 'from',
47
+ 'going',
48
+ 'good',
49
+ 'great',
50
+ 'have',
51
+ 'here',
52
+ 'into',
53
+ 'just',
54
+ 'know',
55
+ 'like',
56
+ 'long',
57
+ 'look',
58
+ 'made',
59
+ 'make',
60
+ 'many',
61
+ 'more',
62
+ 'most',
63
+ 'much',
64
+ 'must',
65
+ 'need',
66
+ 'never',
67
+ 'next',
68
+ 'only',
69
+ 'other',
70
+ 'over',
71
+ 'part',
72
+ 'said',
73
+ 'same',
74
+ 'should',
75
+ 'show',
76
+ 'some',
77
+ 'still',
78
+ 'such',
79
+ 'sure',
80
+ 'take',
81
+ 'tell',
82
+ 'than',
83
+ 'that',
84
+ 'them',
85
+ 'then',
86
+ 'there',
87
+ 'these',
88
+ 'they',
89
+ 'thing',
90
+ 'think',
91
+ 'this',
92
+ 'those',
93
+ 'through',
94
+ 'time',
95
+ 'used',
96
+ 'very',
97
+ 'want',
98
+ 'well',
99
+ 'were',
100
+ 'what',
101
+ 'when',
102
+ 'where',
103
+ 'which',
104
+ 'while',
105
+ 'will',
106
+ 'with',
107
+ 'without',
108
+ 'word',
109
+ 'work',
110
+ 'would',
111
+ 'year',
112
+ 'your',
113
+ ]);
114
+ /** Common code tokens that are uninteresting for display. */
115
+ const CODE_STOP_WORDS = new Set([
116
+ 'async',
117
+ 'await',
118
+ 'boolean',
119
+ 'break',
120
+ 'case',
121
+ 'catch',
122
+ 'class',
123
+ 'const',
124
+ 'constructor',
125
+ 'continue',
126
+ 'default',
127
+ 'delete',
128
+ 'else',
129
+ 'enum',
130
+ 'error',
131
+ 'export',
132
+ 'extends',
133
+ 'false',
134
+ 'finally',
135
+ 'function',
136
+ 'global',
137
+ 'implements',
138
+ 'import',
139
+ 'instanceof',
140
+ 'interface',
141
+ 'module',
142
+ 'null',
143
+ 'number',
144
+ 'object',
145
+ 'package',
146
+ 'private',
147
+ 'protected',
148
+ 'public',
149
+ 'readonly',
150
+ 'require',
151
+ 'return',
152
+ 'static',
153
+ 'string',
154
+ 'super',
155
+ 'switch',
156
+ 'template',
157
+ 'this',
158
+ 'throw',
159
+ 'true',
160
+ 'type',
161
+ 'typeof',
162
+ 'undefined',
163
+ 'unknown',
164
+ 'void',
165
+ 'while',
166
+ 'with',
167
+ 'yield',
168
+ 'console',
169
+ 'process',
170
+ 'promise',
171
+ 'array',
172
+ ]);
173
+ function isStopWord(word) {
174
+ const lower = word.toLowerCase();
175
+ return ENGLISH_STOP_WORDS.has(lower) || CODE_STOP_WORDS.has(lower);
176
+ }
177
+ // ---------------------------------------------------------------------------
178
+ // Word extraction
179
+ // ---------------------------------------------------------------------------
180
+ /** Pattern for splitting text into word candidates. */
181
+ const WORD_SPLIT_RE = /[\s,.;:!?()[\]{}<>"'`|/\\=+*&#@^~]+/;
182
+ /** Strings that are purely numeric -- always rejected. */
183
+ const PURE_NUMERIC_RE = /^[0-9]+$/;
184
+ /** Strings that contain only hex characters (case-insensitive). */
185
+ const HEX_CHARS_ONLY_RE = /^[0-9a-f]+$/i;
186
+ /** Strings containing at least one digit. */
187
+ const CONTAINS_DIGIT_RE = /[0-9]/;
188
+ /**
189
+ * Minimum length for a hex-looking string to be considered an
190
+ * identifier/hash rather than an English word. Below this we
191
+ * prefer to keep the word (e.g., "face", "cafe", "decade").
192
+ */
193
+ const MIN_HEX_IDENTIFIER_LENGTH = 8;
194
+ /**
195
+ * Reject strings that are purely numeric or clearly hash/identifier-like.
196
+ *
197
+ * Purely numeric: always rejected.
198
+ * Hex-looking: rejected only when long enough AND containing at least one
199
+ * digit. This catches commit SHAs and content hashes (e.g., `a3f92c1b8d4e`)
200
+ * while preserving real English words that happen to use only hex letters
201
+ * (e.g., `face`, `cafe`, `beef`, `decade`, `feedback`).
202
+ */
203
+ function isNumericOrHashLike(lower) {
204
+ if (PURE_NUMERIC_RE.test(lower))
205
+ return true;
206
+ if (lower.length < MIN_HEX_IDENTIFIER_LENGTH)
207
+ return false;
208
+ return HEX_CHARS_ONLY_RE.test(lower) && CONTAINS_DIGIT_RE.test(lower);
209
+ }
210
+ /**
211
+ * Extract candidate words from plain text.
212
+ *
213
+ * Returns an array of { original, lower } tuples where `original`
214
+ * preserves the source casing for display and `lower` is used for
215
+ * matching and dedup.
216
+ */
217
+ export function extractWordsFromText(text) {
218
+ const results = [];
219
+ const parts = text.split(WORD_SPLIT_RE);
220
+ for (const raw of parts) {
221
+ // Strip leading/trailing punctuation and quotes
222
+ const cleaned = raw.replace(/^[^a-zA-Z0-9_]+|[^a-zA-Z0-9_]+$/g, '');
223
+ if (cleaned.length < MIN_WORD_LENGTH)
224
+ continue;
225
+ const lower = cleaned.toLowerCase();
226
+ if (isNumericOrHashLike(lower))
227
+ continue;
228
+ // Skip stop words
229
+ if (isStopWord(cleaned))
230
+ continue;
231
+ results.push({ original: cleaned, lower });
232
+ }
233
+ return results;
234
+ }
235
+ /** Pattern matching function/method calls like `foo.bar()` or `baz()`. */
236
+ const FUNC_CALL_RE = /(?:[\w$]+\.)*?([\w$]+)\s*\(/g;
237
+ /** Pattern matching meaningful string literals (single or double quoted, 4+ chars). */
238
+ const STRING_LITERAL_RE = /(?:"([^"]{4,})"|'([^']{4,})')/g;
239
+ /** Pattern matching MCP-style dotted tool names like `google_workspace.calendar_get_events`. */
240
+ const DOTTED_TOOL_RE = /(\w+)\.(\w{4,})/g;
241
+ /**
242
+ * Extract words from code content (e.g., the `code` field of execute_code).
243
+ *
244
+ * Extracts function/method call names, meaningful string literals,
245
+ * dotted tool names, and also runs the regular word extractor on
246
+ * the full text.
247
+ */
248
+ export function extractWordsFromCode(code) {
249
+ const results = [];
250
+ const seen = new Set();
251
+ function addIfNew(original) {
252
+ const lower = original.toLowerCase();
253
+ if (lower.length < MIN_WORD_LENGTH)
254
+ return;
255
+ if (seen.has(lower))
256
+ return;
257
+ if (isNumericOrHashLike(lower))
258
+ return;
259
+ if (isStopWord(original))
260
+ return;
261
+ seen.add(lower);
262
+ results.push({ original, lower });
263
+ }
264
+ // Extract function/method call names
265
+ for (const match of code.matchAll(FUNC_CALL_RE)) {
266
+ addIfNew(match[1]);
267
+ }
268
+ // Extract dotted tool names (second segment)
269
+ for (const match of code.matchAll(DOTTED_TOOL_RE)) {
270
+ addIfNew(match[2]);
271
+ }
272
+ // Extract string literals
273
+ for (const match of code.matchAll(STRING_LITERAL_RE)) {
274
+ const literal = match[1] || match[2];
275
+ // Skip path-like strings unless they look like filenames
276
+ if (literal.startsWith('/') && literal.includes('/')) {
277
+ // Extract just the filename
278
+ const segments = literal.split('/');
279
+ const filename = segments[segments.length - 1];
280
+ if (filename && filename.length >= MIN_WORD_LENGTH) {
281
+ addIfNew(filename.replace(/\.[^.]+$/, '')); // strip extension
282
+ }
283
+ }
284
+ else {
285
+ // Run word extractor on the literal
286
+ for (const w of extractWordsFromText(literal)) {
287
+ addIfNew(w.original);
288
+ }
289
+ }
290
+ }
291
+ // Also run regular extraction on the full code text
292
+ for (const w of extractWordsFromText(code)) {
293
+ addIfNew(w.original);
294
+ }
295
+ return results;
296
+ }
297
+ /**
298
+ * Try to extract the `code` field from accumulated tool input JSON.
299
+ * Returns the code string, or null if parsing fails or no code field.
300
+ */
301
+ export function extractCodeFromToolInput(accumulatedJson) {
302
+ try {
303
+ const parsed = JSON.parse(accumulatedJson);
304
+ if (parsed && typeof parsed === 'object' && 'code' in parsed) {
305
+ const code = parsed.code;
306
+ if (typeof code === 'string')
307
+ return code;
308
+ }
309
+ }
310
+ catch {
311
+ // Incomplete JSON -- expected during streaming
312
+ }
313
+ return null;
314
+ }
315
+ // ---------------------------------------------------------------------------
316
+ // TF-IDF scoring
317
+ // ---------------------------------------------------------------------------
318
+ /**
319
+ * Compute term frequency for a list of words.
320
+ * Returns a map from lowercase word to count.
321
+ */
322
+ function computeTf(words) {
323
+ const tf = new Map();
324
+ for (const { lower } of words) {
325
+ tf.set(lower, (tf.get(lower) ?? 0) + 1);
326
+ }
327
+ return tf;
328
+ }
329
+ /**
330
+ * Create a WordScorer that maintains a running TF-IDF model.
331
+ *
332
+ * @param topN - Number of top-scoring words to return (default: 3)
333
+ * @param dedupWindowMs - Milliseconds before re-showing a word (default: 30s)
334
+ */
335
+ export function createWordScorer(topN = TOP_N_WORDS, dedupWindowMs = DEDUP_WINDOW_MS) {
336
+ // Corpus: document frequency (how many documents contain each word)
337
+ const df = new Map();
338
+ let docCount = 0;
339
+ // Recently shown words: key -> timestamp
340
+ const recentlyShown = new Map();
341
+ return {
342
+ get documentCount() {
343
+ return docCount;
344
+ },
345
+ scoreDocument(words) {
346
+ if (words.length === 0)
347
+ return [];
348
+ docCount++;
349
+ // Update document frequency: each unique word in this doc increments df
350
+ const uniqueInDoc = new Set();
351
+ for (const { lower } of words) {
352
+ uniqueInDoc.add(lower);
353
+ }
354
+ for (const lower of uniqueInDoc) {
355
+ df.set(lower, (df.get(lower) ?? 0) + 1);
356
+ }
357
+ // Compute TF for this document
358
+ const tf = computeTf(words);
359
+ // Build the best original-cased form for each word
360
+ const bestOriginal = new Map();
361
+ for (const { original, lower } of words) {
362
+ // Prefer the form that appears first
363
+ if (!bestOriginal.has(lower)) {
364
+ bestOriginal.set(lower, original);
365
+ }
366
+ }
367
+ // Score each unique word: TF * IDF
368
+ const scored = [];
369
+ for (const [lower, count] of tf) {
370
+ const idf = Math.log((docCount + 1) / ((df.get(lower) ?? 0) + 1));
371
+ const score = count * idf;
372
+ scored.push({
373
+ word: bestOriginal.get(lower) ?? lower,
374
+ key: lower,
375
+ score,
376
+ });
377
+ }
378
+ // Sort by score descending, return top N
379
+ scored.sort((a, b) => b.score - a.score);
380
+ return scored.slice(0, topN);
381
+ },
382
+ tryShow(key, now) {
383
+ const ts = now ?? Date.now();
384
+ // Clean expired entries (amortized, check a few each call)
385
+ let cleanCount = 0;
386
+ for (const [k, t] of recentlyShown) {
387
+ if (ts - t > dedupWindowMs) {
388
+ recentlyShown.delete(k);
389
+ }
390
+ if (++cleanCount >= 5)
391
+ break;
392
+ }
393
+ const lastShown = recentlyShown.get(key);
394
+ if (lastShown !== undefined && ts - lastShown < dedupWindowMs) {
395
+ return false;
396
+ }
397
+ recentlyShown.set(key, ts);
398
+ return true;
399
+ },
400
+ };
401
+ }
402
+ // ---------------------------------------------------------------------------
403
+ // Tool name cleanup
404
+ // ---------------------------------------------------------------------------
405
+ /**
406
+ * Clean up MCP tool names for display.
407
+ * Strips `mcp__` prefix and server name prefix.
408
+ * e.g., `mcp__ironcurtain__execute_code` -> `execute_code`
409
+ */
410
+ export function cleanToolName(toolName) {
411
+ // Strip mcp__serverName__ prefix
412
+ const mpcPrefixMatch = toolName.match(/^mcp__[^_]+__(.+)$/);
413
+ if (mpcPrefixMatch)
414
+ return mpcPrefixMatch[1];
415
+ // Strip simpler server__ prefix
416
+ const serverPrefixMatch = toolName.match(/^[^_]+__(.+)$/);
417
+ if (serverPrefixMatch)
418
+ return serverPrefixMatch[1];
419
+ return toolName;
420
+ }
421
+ /**
422
+ * Shorten a model name for display.
423
+ * Strips the "claude-" prefix if present.
424
+ * e.g., "claude-sonnet-4-20250514" -> "sonnet-4-20250514"
425
+ */
426
+ export function shortenModelName(model) {
427
+ if (model.startsWith('claude-'))
428
+ return model.slice(7);
429
+ return model;
430
+ }
431
+ export function createTextAccumulator(threshold = MID_STREAM_THRESHOLD) {
432
+ let buffer = '';
433
+ let scoredUpTo = 0;
434
+ return {
435
+ get length() {
436
+ return buffer.length;
437
+ },
438
+ append(text) {
439
+ buffer += text;
440
+ if (buffer.length - scoredUpTo >= threshold) {
441
+ const words = extractWordsFromText(buffer.slice(scoredUpTo));
442
+ scoredUpTo = buffer.length;
443
+ return words.length > 0 ? words : null;
444
+ }
445
+ return null;
446
+ },
447
+ flush() {
448
+ const words = extractWordsFromText(buffer);
449
+ buffer = '';
450
+ scoredUpTo = 0;
451
+ return words;
452
+ },
453
+ reset() {
454
+ buffer = '';
455
+ scoredUpTo = 0;
456
+ },
457
+ };
458
+ }
459
+ export function createToolInputAccumulator() {
460
+ let toolName = null;
461
+ let inputBuffer = '';
462
+ return {
463
+ get active() {
464
+ return toolName !== null;
465
+ },
466
+ start(name) {
467
+ toolName = name;
468
+ inputBuffer = '';
469
+ },
470
+ appendDelta(delta) {
471
+ inputBuffer += delta;
472
+ },
473
+ flush() {
474
+ if (toolName === null)
475
+ return null;
476
+ const name = toolName;
477
+ const accumulated = inputBuffer;
478
+ toolName = null;
479
+ inputBuffer = '';
480
+ const words = [];
481
+ // Try to extract code from execute_code tool input
482
+ const code = extractCodeFromToolInput(accumulated);
483
+ if (code) {
484
+ words.push(...extractWordsFromCode(code));
485
+ }
486
+ else {
487
+ // Fall back to plain text extraction from the raw JSON
488
+ words.push(...extractWordsFromText(accumulated));
489
+ }
490
+ return { toolName: name, words };
491
+ },
492
+ };
493
+ }
494
+ export function createSessionWordState() {
495
+ return {
496
+ textAccumulator: createTextAccumulator(),
497
+ toolAccumulator: createToolInputAccumulator(),
498
+ };
499
+ }
500
+ /**
501
+ * Process a token stream event through the word scorer and produce
502
+ * word drop candidates. Returns an array of candidates to enqueue.
503
+ *
504
+ * This is the main integration point between the orchestrator and
505
+ * the word scorer. The caller is responsible for calling
506
+ * `rainEngine.enqueueWord()` for each returned candidate.
507
+ */
508
+ export function processEventForWords(event, sessionWordState, scorer, now) {
509
+ const candidates = [];
510
+ const ts = now ?? Date.now();
511
+ function addScoredWords(words, source) {
512
+ const scored = scorer.scoreDocument(words);
513
+ for (const s of scored) {
514
+ if (scorer.tryShow(s.key, ts)) {
515
+ candidates.push({ word: s.word, source });
516
+ }
517
+ }
518
+ }
519
+ switch (event.kind) {
520
+ case 'message_start': {
521
+ sessionWordState.textAccumulator.reset();
522
+ const short = shortenModelName(event.model);
523
+ if (scorer.tryShow(short.toLowerCase(), ts)) {
524
+ candidates.push({ word: short, source: 'model' });
525
+ }
526
+ break;
527
+ }
528
+ case 'text_delta': {
529
+ const midWords = sessionWordState.textAccumulator.append(event.text);
530
+ if (midWords) {
531
+ addScoredWords(midWords, 'text');
532
+ }
533
+ break;
534
+ }
535
+ case 'tool_use': {
536
+ if (event.toolName !== '') {
537
+ // New tool call starting: flush any previous tool accumulator
538
+ const prev = sessionWordState.toolAccumulator.flush();
539
+ if (prev && prev.words.length > 0) {
540
+ addScoredWords(prev.words, 'tool');
541
+ }
542
+ // Start new accumulator
543
+ sessionWordState.toolAccumulator.start(event.toolName);
544
+ // Enqueue cleaned tool name
545
+ const cleaned = cleanToolName(event.toolName);
546
+ if (cleaned.length >= MIN_WORD_LENGTH && scorer.tryShow(cleaned.toLowerCase(), ts)) {
547
+ candidates.push({ word: cleaned, source: 'tool' });
548
+ }
549
+ }
550
+ else if (event.inputDelta) {
551
+ // input_json_delta fragment
552
+ sessionWordState.toolAccumulator.appendDelta(event.inputDelta);
553
+ }
554
+ break;
555
+ }
556
+ case 'message_end': {
557
+ // Flush text accumulator
558
+ const textWords = sessionWordState.textAccumulator.flush();
559
+ if (textWords.length > 0) {
560
+ addScoredWords(textWords, 'text');
561
+ }
562
+ // Flush tool accumulator (in case the last tool call wasn't followed by another)
563
+ const toolResult = sessionWordState.toolAccumulator.flush();
564
+ if (toolResult && toolResult.words.length > 0) {
565
+ addScoredWords(toolResult.words, 'tool');
566
+ }
567
+ break;
568
+ }
569
+ }
570
+ return candidates;
571
+ }
572
+ //# sourceMappingURL=observe-tui-word-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe-tui-word-scorer.js","sourceRoot":"","sources":["../../src/observe/observe-tui-word-scorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * TUI orchestrator for the observe command.
3
+ *
4
+ * Manages the screen lifecycle (alternate buffer, cursor, raw mode),
5
+ * runs the 15fps frame loop, routes token stream events to the rain
6
+ * engine and text panel, and renders the divider and status bar.
7
+ *
8
+ * Computes the dominant agent phase across active sessions and
9
+ * communicates it to the rain engine for phase-driven color shifts.
10
+ * Uses TF-IDF scoring to select interesting words from LLM output
11
+ * and tool calls for rain panel word drops.
12
+ *
13
+ * Depends on observe-tui-types.ts, observe-tui-rain.ts,
14
+ * observe-tui-text-panel.ts, and observe-tui-word-scorer.ts.
15
+ * No external dependencies beyond Node built-ins.
16
+ */
17
+ import type { TokenStreamEvent } from '../docker/token-stream-types.js';
18
+ import { type AgentPhase, type ObserveEventSink, type ObserveTuiOptions, type RainToken, type SessionState } from './observe-tui-types.js';
19
+ /**
20
+ * Extract rain tokens from a single token stream event.
21
+ *
22
+ * - text_delta: each character -> RainToken kind='text'
23
+ * - tool_use: each character of toolName -> kind='tool'
24
+ * - error: each character of message -> kind='error'
25
+ * - Other event kinds produce no rain tokens.
26
+ */
27
+ export declare function extractRainTokens(event: TokenStreamEvent): RainToken[];
28
+ /**
29
+ * Update a SessionState from a single event.
30
+ * Mutates the state in place.
31
+ */
32
+ export declare function updateSessionState(state: SessionState, event: TokenStreamEvent): void;
33
+ /**
34
+ * Compute the dominant agent phase across all active sessions.
35
+ * Priority: error > tool_use > thinking > idle.
36
+ * Error phase is tracked separately via errorFramesRemaining.
37
+ */
38
+ export declare function computeDominantPhase(sessions: Map<number, SessionState>, errorActive: boolean): AgentPhase;
39
+ /**
40
+ * Sliding window tracker for tokens/sec computation.
41
+ * Records (timestamp, cumulativeTokens) snapshots and computes
42
+ * the rate over the most recent windowMs period.
43
+ */
44
+ export declare class TokenRateTracker {
45
+ private readonly windowMs;
46
+ private readonly samples;
47
+ constructor(windowMs?: number);
48
+ /** Record a new snapshot of cumulative token count. */
49
+ record(now: number, totalTokens: number): void;
50
+ /** Compute tokens/sec over the sliding window. */
51
+ rate(): number;
52
+ }
53
+ export declare function formatTokenCount(n: number): string;
54
+ /** Return type: ObserveEventSink + start/destroy lifecycle methods. */
55
+ export interface ObserveTui extends ObserveEventSink {
56
+ start(): void;
57
+ destroy(): void;
58
+ }
59
+ export declare function createObserveTui(options: ObserveTuiOptions): ObserveTui;