open-multi-agent-kit 0.80.7 → 0.90.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 (1494) hide show
  1. package/CHANGELOG.md +5 -27
  2. package/README.md +81 -38
  3. package/dist/agents/jailbreak/index.d.ts +7 -0
  4. package/dist/agents/jailbreak/index.d.ts.map +1 -0
  5. package/dist/agents/jailbreak/index.js +7 -0
  6. package/dist/agents/jailbreak/index.js.map +1 -0
  7. package/dist/agents/jailbreak/subagent-f.d.ts +44 -0
  8. package/dist/agents/jailbreak/subagent-f.d.ts.map +1 -0
  9. package/dist/agents/jailbreak/subagent-f.js +60 -0
  10. package/dist/agents/jailbreak/subagent-f.js.map +1 -0
  11. package/dist/bun/register-bedrock.d.ts.map +1 -1
  12. package/dist/bun/register-bedrock.js +2 -2
  13. package/dist/bun/register-bedrock.js.map +1 -1
  14. package/dist/ci/verify-reporter.d.ts +22 -0
  15. package/dist/ci/verify-reporter.d.ts.map +1 -0
  16. package/dist/ci/verify-reporter.js +50 -0
  17. package/dist/ci/verify-reporter.js.map +1 -0
  18. package/dist/cli/args.d.ts +4 -1
  19. package/dist/cli/args.d.ts.map +1 -1
  20. package/dist/cli/args.js +8 -0
  21. package/dist/cli/args.js.map +1 -1
  22. package/dist/cli/config-selector.d.ts.map +1 -1
  23. package/dist/cli/config-selector.js +1 -1
  24. package/dist/cli/config-selector.js.map +1 -1
  25. package/dist/cli/file-processor.d.ts +1 -1
  26. package/dist/cli/file-processor.d.ts.map +1 -1
  27. package/dist/cli/file-processor.js.map +1 -1
  28. package/dist/cli/initial-message.d.ts +1 -1
  29. package/dist/cli/initial-message.d.ts.map +1 -1
  30. package/dist/cli/initial-message.js.map +1 -1
  31. package/dist/cli/jailbreak-args.d.ts +26 -0
  32. package/dist/cli/jailbreak-args.d.ts.map +1 -0
  33. package/dist/cli/jailbreak-args.js +86 -0
  34. package/dist/cli/jailbreak-args.js.map +1 -0
  35. package/dist/cli/list-models.d.ts.map +1 -1
  36. package/dist/cli/list-models.js +1 -1
  37. package/dist/cli/list-models.js.map +1 -1
  38. package/dist/cli/session-picker.d.ts.map +1 -1
  39. package/dist/cli/session-picker.js +1 -1
  40. package/dist/cli/session-picker.js.map +1 -1
  41. package/dist/commands/doctor-provider.d.ts +19 -0
  42. package/dist/commands/doctor-provider.d.ts.map +1 -0
  43. package/dist/commands/doctor-provider.js +123 -0
  44. package/dist/commands/doctor-provider.js.map +1 -0
  45. package/dist/commands/jailbreak.d.ts +49 -0
  46. package/dist/commands/jailbreak.d.ts.map +1 -0
  47. package/dist/commands/jailbreak.js +201 -0
  48. package/dist/commands/jailbreak.js.map +1 -0
  49. package/dist/config.d.ts +9 -5
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +33 -52
  52. package/dist/config.js.map +1 -1
  53. package/dist/core/agent-session-services.d.ts +2 -2
  54. package/dist/core/agent-session-services.d.ts.map +1 -1
  55. package/dist/core/agent-session-services.js.map +1 -1
  56. package/dist/core/agent-session.d.ts +16 -27
  57. package/dist/core/agent-session.d.ts.map +1 -1
  58. package/dist/core/agent-session.js +185 -89
  59. package/dist/core/agent-session.js.map +1 -1
  60. package/dist/core/auth-storage.d.ts +3 -6
  61. package/dist/core/auth-storage.d.ts.map +1 -1
  62. package/dist/core/auth-storage.js +7 -7
  63. package/dist/core/auth-storage.js.map +1 -1
  64. package/dist/core/automation/index.d.ts +359 -0
  65. package/dist/core/automation/index.d.ts.map +1 -0
  66. package/dist/core/automation/index.js +665 -0
  67. package/dist/core/automation/index.js.map +1 -0
  68. package/dist/core/bash-executor.d.ts +1 -0
  69. package/dist/core/bash-executor.d.ts.map +1 -1
  70. package/dist/core/bash-executor.js +1 -0
  71. package/dist/core/bash-executor.js.map +1 -1
  72. package/dist/core/browser-use.d.ts +53 -0
  73. package/dist/core/browser-use.d.ts.map +1 -0
  74. package/dist/core/browser-use.js +108 -0
  75. package/dist/core/browser-use.js.map +1 -0
  76. package/dist/core/command-safety-parser.d.ts +77 -0
  77. package/dist/core/command-safety-parser.d.ts.map +1 -0
  78. package/dist/core/command-safety-parser.js +763 -0
  79. package/dist/core/command-safety-parser.js.map +1 -0
  80. package/dist/core/command-safety.d.ts.map +1 -1
  81. package/dist/core/command-safety.js +106 -3
  82. package/dist/core/command-safety.js.map +1 -1
  83. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  84. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  85. package/dist/core/compaction/branch-summarization.js +5 -21
  86. package/dist/core/compaction/branch-summarization.js.map +1 -1
  87. package/dist/core/compaction/compaction.d.ts +3 -101
  88. package/dist/core/compaction/compaction.d.ts.map +1 -1
  89. package/dist/core/compaction/compaction.js +21 -656
  90. package/dist/core/compaction/compaction.js.map +1 -1
  91. package/dist/core/compaction/utils.d.ts +2 -2
  92. package/dist/core/compaction/utils.d.ts.map +1 -1
  93. package/dist/core/compaction/utils.js.map +1 -1
  94. package/dist/core/compactor.d.ts +42 -0
  95. package/dist/core/compactor.d.ts.map +1 -0
  96. package/dist/core/compactor.js +131 -0
  97. package/dist/core/compactor.js.map +1 -0
  98. package/dist/core/context-budget-compressors.d.ts +50 -0
  99. package/dist/core/context-budget-compressors.d.ts.map +1 -0
  100. package/dist/core/context-budget-compressors.js +166 -0
  101. package/dist/core/context-budget-compressors.js.map +1 -0
  102. package/dist/core/context-budget-governor-v2.d.ts +7 -0
  103. package/dist/core/context-budget-governor-v2.d.ts.map +1 -0
  104. package/dist/core/context-budget-governor-v2.js +7 -0
  105. package/dist/core/context-budget-governor-v2.js.map +1 -0
  106. package/dist/core/context-budget-governor.d.ts +67 -0
  107. package/dist/core/context-budget-governor.d.ts.map +1 -0
  108. package/dist/core/context-budget-governor.js +224 -0
  109. package/dist/core/context-budget-governor.js.map +1 -0
  110. package/dist/core/context-budget-headroom-candidates.d.ts +3 -0
  111. package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -0
  112. package/dist/core/context-budget-headroom-candidates.js +85 -0
  113. package/dist/core/context-budget-headroom-candidates.js.map +1 -0
  114. package/dist/core/context-budget-headroom-types.d.ts +67 -0
  115. package/dist/core/context-budget-headroom-types.d.ts.map +1 -0
  116. package/dist/core/context-budget-headroom-types.js +46 -0
  117. package/dist/core/context-budget-headroom-types.js.map +1 -0
  118. package/dist/core/context-budget-headroom.d.ts +5 -0
  119. package/dist/core/context-budget-headroom.d.ts.map +1 -0
  120. package/dist/core/context-budget-headroom.js +123 -0
  121. package/dist/core/context-budget-headroom.js.map +1 -0
  122. package/dist/core/context-budget-relevance.d.ts +46 -0
  123. package/dist/core/context-budget-relevance.d.ts.map +1 -0
  124. package/dist/core/context-budget-relevance.js +329 -0
  125. package/dist/core/context-budget-relevance.js.map +1 -0
  126. package/dist/core/context-budget-system-prompt-items.d.ts +19 -0
  127. package/dist/core/context-budget-system-prompt-items.d.ts.map +1 -0
  128. package/dist/core/context-budget-system-prompt-items.js +143 -0
  129. package/dist/core/context-budget-system-prompt-items.js.map +1 -0
  130. package/dist/core/context-budget-system-prompt.d.ts +31 -0
  131. package/dist/core/context-budget-system-prompt.d.ts.map +1 -0
  132. package/dist/core/context-budget-system-prompt.js +87 -0
  133. package/dist/core/context-budget-system-prompt.js.map +1 -0
  134. package/dist/core/context-budget-token-counter.d.ts +34 -0
  135. package/dist/core/context-budget-token-counter.d.ts.map +1 -0
  136. package/dist/core/context-budget-token-counter.js +315 -0
  137. package/dist/core/context-budget-token-counter.js.map +1 -0
  138. package/dist/core/context-budget-v2-coverage.d.ts +5 -0
  139. package/dist/core/context-budget-v2-coverage.d.ts.map +1 -0
  140. package/dist/core/context-budget-v2-coverage.js +58 -0
  141. package/dist/core/context-budget-v2-coverage.js.map +1 -0
  142. package/dist/core/context-budget-v2-plan-hash.d.ts +12 -0
  143. package/dist/core/context-budget-v2-plan-hash.d.ts.map +1 -0
  144. package/dist/core/context-budget-v2-plan-hash.js +38 -0
  145. package/dist/core/context-budget-v2-plan-hash.js.map +1 -0
  146. package/dist/core/context-budget-v2-planner.d.ts +3 -0
  147. package/dist/core/context-budget-v2-planner.d.ts.map +1 -0
  148. package/dist/core/context-budget-v2-planner.js +143 -0
  149. package/dist/core/context-budget-v2-planner.js.map +1 -0
  150. package/dist/core/context-budget-v2-scoring.d.ts +14 -0
  151. package/dist/core/context-budget-v2-scoring.d.ts.map +1 -0
  152. package/dist/core/context-budget-v2-scoring.js +114 -0
  153. package/dist/core/context-budget-v2-scoring.js.map +1 -0
  154. package/dist/core/context-budget-v2-selection.d.ts +32 -0
  155. package/dist/core/context-budget-v2-selection.d.ts.map +1 -0
  156. package/dist/core/context-budget-v2-selection.js +158 -0
  157. package/dist/core/context-budget-v2-selection.js.map +1 -0
  158. package/dist/core/context-budget-v2-tiers.d.ts +15 -0
  159. package/dist/core/context-budget-v2-tiers.d.ts.map +1 -0
  160. package/dist/core/context-budget-v2-tiers.js +68 -0
  161. package/dist/core/context-budget-v2-tiers.js.map +1 -0
  162. package/dist/core/context-budget-v2-types.d.ts +92 -0
  163. package/dist/core/context-budget-v2-types.d.ts.map +1 -0
  164. package/dist/core/context-budget-v2-types.js +24 -0
  165. package/dist/core/context-budget-v2-types.js.map +1 -0
  166. package/dist/core/defaults.d.ts +1 -1
  167. package/dist/core/defaults.d.ts.map +1 -1
  168. package/dist/core/defaults.js.map +1 -1
  169. package/dist/core/diagnostics.d.ts +6 -0
  170. package/dist/core/diagnostics.d.ts.map +1 -1
  171. package/dist/core/diagnostics.js.map +1 -1
  172. package/dist/core/domain-confidence.d.ts +9 -0
  173. package/dist/core/domain-confidence.d.ts.map +1 -0
  174. package/dist/core/domain-confidence.js +39 -0
  175. package/dist/core/domain-confidence.js.map +1 -0
  176. package/dist/core/domain-dispatch.d.ts +44 -0
  177. package/dist/core/domain-dispatch.d.ts.map +1 -0
  178. package/dist/core/domain-dispatch.js +118 -0
  179. package/dist/core/domain-dispatch.js.map +1 -0
  180. package/dist/core/domain-loadouts.d.ts +76 -0
  181. package/dist/core/domain-loadouts.d.ts.map +1 -0
  182. package/dist/core/domain-loadouts.js +981 -0
  183. package/dist/core/domain-loadouts.js.map +1 -0
  184. package/dist/core/domain-registry.d.ts +7 -0
  185. package/dist/core/domain-registry.d.ts.map +1 -0
  186. package/dist/core/domain-registry.js +11 -0
  187. package/dist/core/domain-registry.js.map +1 -0
  188. package/dist/core/domain-router.d.ts +16 -0
  189. package/dist/core/domain-router.d.ts.map +1 -0
  190. package/dist/core/domain-router.js +24 -0
  191. package/dist/core/domain-router.js.map +1 -0
  192. package/dist/core/domain-score.d.ts +13 -0
  193. package/dist/core/domain-score.d.ts.map +1 -0
  194. package/dist/core/domain-score.js +48 -0
  195. package/dist/core/domain-score.js.map +1 -0
  196. package/dist/core/domain-trigger-match.d.ts +14 -0
  197. package/dist/core/domain-trigger-match.d.ts.map +1 -0
  198. package/dist/core/domain-trigger-match.js +51 -0
  199. package/dist/core/domain-trigger-match.js.map +1 -0
  200. package/dist/core/domain-types.d.ts +30 -0
  201. package/dist/core/domain-types.d.ts.map +1 -0
  202. package/dist/core/domain-types.js +2 -0
  203. package/dist/core/domain-types.js.map +1 -0
  204. package/dist/core/exact-cache-policy.d.ts +8 -0
  205. package/dist/core/exact-cache-policy.d.ts.map +1 -1
  206. package/dist/core/exact-cache-policy.js +9 -0
  207. package/dist/core/exact-cache-policy.js.map +1 -1
  208. package/dist/core/exec.d.ts +0 -2
  209. package/dist/core/exec.d.ts.map +1 -1
  210. package/dist/core/exec.js +0 -1
  211. package/dist/core/exec.js.map +1 -1
  212. package/dist/core/export-html/index.d.ts +1 -1
  213. package/dist/core/export-html/index.d.ts.map +1 -1
  214. package/dist/core/export-html/index.js.map +1 -1
  215. package/dist/core/export-html/template.js +1 -3
  216. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  217. package/dist/core/export-html/tool-renderer.js.map +1 -1
  218. package/dist/core/extensions/builtin/command-safety-gate.d.ts +3 -0
  219. package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -1
  220. package/dist/core/extensions/builtin/command-safety-gate.js +15 -3
  221. package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -1
  222. package/dist/core/extensions/builtin/todo-checklist.d.ts +20 -0
  223. package/dist/core/extensions/builtin/todo-checklist.d.ts.map +1 -0
  224. package/dist/core/extensions/builtin/todo-checklist.js +73 -0
  225. package/dist/core/extensions/builtin/todo-checklist.js.map +1 -0
  226. package/dist/core/extensions/loader.d.ts +4 -4
  227. package/dist/core/extensions/loader.d.ts.map +1 -1
  228. package/dist/core/extensions/loader.js +57 -92
  229. package/dist/core/extensions/loader.js.map +1 -1
  230. package/dist/core/extensions/runner.d.ts +3 -3
  231. package/dist/core/extensions/runner.d.ts.map +1 -1
  232. package/dist/core/extensions/runner.js +1 -1
  233. package/dist/core/extensions/runner.js.map +1 -1
  234. package/dist/core/extensions/types.d.ts +7 -35
  235. package/dist/core/extensions/types.d.ts.map +1 -1
  236. package/dist/core/extensions/types.js.map +1 -1
  237. package/dist/core/extensions/wrapper.d.ts +1 -1
  238. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  239. package/dist/core/extensions/wrapper.js.map +1 -1
  240. package/dist/core/footer-data-provider.d.ts +3 -1
  241. package/dist/core/footer-data-provider.d.ts.map +1 -1
  242. package/dist/core/footer-data-provider.js +4 -0
  243. package/dist/core/footer-data-provider.js.map +1 -1
  244. package/dist/core/headroom.d.ts +45 -0
  245. package/dist/core/headroom.d.ts.map +1 -0
  246. package/dist/core/headroom.js +171 -0
  247. package/dist/core/headroom.js.map +1 -0
  248. package/dist/core/hook-inventory.d.ts +4 -2
  249. package/dist/core/hook-inventory.d.ts.map +1 -1
  250. package/dist/core/hook-inventory.js +80 -11
  251. package/dist/core/hook-inventory.js.map +1 -1
  252. package/dist/core/hooks/fail-closed.d.ts +4 -1
  253. package/dist/core/hooks/fail-closed.d.ts.map +1 -1
  254. package/dist/core/hooks/fail-closed.js +79 -5
  255. package/dist/core/hooks/fail-closed.js.map +1 -1
  256. package/dist/core/hooks/index.d.ts +2 -2
  257. package/dist/core/hooks/index.d.ts.map +1 -1
  258. package/dist/core/hooks/index.js +1 -1
  259. package/dist/core/hooks/index.js.map +1 -1
  260. package/dist/core/hooks/types.d.ts +9 -0
  261. package/dist/core/hooks/types.d.ts.map +1 -1
  262. package/dist/core/hooks/types.js.map +1 -1
  263. package/dist/core/keybindings.d.ts +2 -14
  264. package/dist/core/keybindings.d.ts.map +1 -1
  265. package/dist/core/keybindings.js +1 -31
  266. package/dist/core/keybindings.js.map +1 -1
  267. package/dist/core/lean-ctx.d.ts +99 -0
  268. package/dist/core/lean-ctx.d.ts.map +1 -0
  269. package/dist/core/lean-ctx.js +225 -0
  270. package/dist/core/lean-ctx.js.map +1 -0
  271. package/dist/core/loadout-compose.d.ts +53 -0
  272. package/dist/core/loadout-compose.d.ts.map +1 -0
  273. package/dist/core/loadout-compose.js +172 -0
  274. package/dist/core/loadout-compose.js.map +1 -0
  275. package/dist/core/loadout-policy-bridge.d.ts +22 -0
  276. package/dist/core/loadout-policy-bridge.d.ts.map +1 -0
  277. package/dist/core/loadout-policy-bridge.js +52 -0
  278. package/dist/core/loadout-policy-bridge.js.map +1 -0
  279. package/dist/core/loadout-runtime.d.ts +22 -0
  280. package/dist/core/loadout-runtime.d.ts.map +1 -1
  281. package/dist/core/loadout-runtime.js +41 -5
  282. package/dist/core/loadout-runtime.js.map +1 -1
  283. package/dist/core/loadout-safety.d.ts +55 -0
  284. package/dist/core/loadout-safety.d.ts.map +1 -0
  285. package/dist/core/loadout-safety.js +213 -0
  286. package/dist/core/loadout-safety.js.map +1 -0
  287. package/dist/core/loadouts.d.ts +4 -2
  288. package/dist/core/loadouts.d.ts.map +1 -1
  289. package/dist/core/loadouts.js +116 -5
  290. package/dist/core/loadouts.js.map +1 -1
  291. package/dist/core/loop-gates.d.ts +48 -0
  292. package/dist/core/loop-gates.d.ts.map +1 -0
  293. package/dist/core/loop-gates.js +352 -0
  294. package/dist/core/loop-gates.js.map +1 -0
  295. package/dist/core/loop-registry.d.ts +77 -0
  296. package/dist/core/loop-registry.d.ts.map +1 -0
  297. package/dist/core/loop-registry.js +831 -0
  298. package/dist/core/loop-registry.js.map +1 -0
  299. package/dist/core/loop-types.d.ts +194 -0
  300. package/dist/core/loop-types.d.ts.map +1 -0
  301. package/dist/core/loop-types.js +2 -0
  302. package/dist/core/loop-types.js.map +1 -0
  303. package/dist/core/mcp-inventory.d.ts +7 -0
  304. package/dist/core/mcp-inventory.d.ts.map +1 -1
  305. package/dist/core/mcp-inventory.js +5 -1
  306. package/dist/core/mcp-inventory.js.map +1 -1
  307. package/dist/core/mcp-presets.d.ts +43 -2
  308. package/dist/core/mcp-presets.d.ts.map +1 -1
  309. package/dist/core/mcp-presets.js +298 -2
  310. package/dist/core/mcp-presets.js.map +1 -1
  311. package/dist/core/messages.d.ts +3 -3
  312. package/dist/core/messages.d.ts.map +1 -1
  313. package/dist/core/messages.js.map +1 -1
  314. package/dist/core/metrics-sampler.d.ts +11 -0
  315. package/dist/core/metrics-sampler.d.ts.map +1 -1
  316. package/dist/core/metrics-sampler.js +52 -13
  317. package/dist/core/metrics-sampler.js.map +1 -1
  318. package/dist/core/model-registry.d.ts +1 -2
  319. package/dist/core/model-registry.d.ts.map +1 -1
  320. package/dist/core/model-registry.js +18 -41
  321. package/dist/core/model-registry.js.map +1 -1
  322. package/dist/core/model-resolver.d.ts +2 -2
  323. package/dist/core/model-resolver.d.ts.map +1 -1
  324. package/dist/core/model-resolver.js +2 -2
  325. package/dist/core/model-resolver.js.map +1 -1
  326. package/dist/core/package-gallery-identity.d.ts +7 -0
  327. package/dist/core/package-gallery-identity.d.ts.map +1 -0
  328. package/dist/core/package-gallery-identity.js +31 -0
  329. package/dist/core/package-gallery-identity.js.map +1 -0
  330. package/dist/core/package-gallery-install.d.ts +6 -0
  331. package/dist/core/package-gallery-install.d.ts.map +1 -0
  332. package/dist/core/package-gallery-install.js +59 -0
  333. package/dist/core/package-gallery-install.js.map +1 -0
  334. package/dist/core/package-gallery-manifest.d.ts +13 -0
  335. package/dist/core/package-gallery-manifest.d.ts.map +1 -0
  336. package/dist/core/package-gallery-manifest.js +183 -0
  337. package/dist/core/package-gallery-manifest.js.map +1 -0
  338. package/dist/core/package-gallery-trial.d.ts +4 -0
  339. package/dist/core/package-gallery-trial.d.ts.map +1 -0
  340. package/dist/core/package-gallery-trial.js +55 -0
  341. package/dist/core/package-gallery-trial.js.map +1 -0
  342. package/dist/core/package-gallery-types.d.ts +71 -0
  343. package/dist/core/package-gallery-types.d.ts.map +1 -0
  344. package/dist/core/package-gallery-types.js +2 -0
  345. package/dist/core/package-gallery-types.js.map +1 -0
  346. package/dist/core/package-gallery.d.ts +5 -123
  347. package/dist/core/package-gallery.d.ts.map +1 -1
  348. package/dist/core/package-gallery.js +5 -391
  349. package/dist/core/package-gallery.js.map +1 -1
  350. package/dist/core/package-manager.d.ts +0 -69
  351. package/dist/core/package-manager.d.ts.map +1 -1
  352. package/dist/core/package-manager.js +69 -367
  353. package/dist/core/package-manager.js.map +1 -1
  354. package/dist/core/package-procurement.d.ts +4 -4
  355. package/dist/core/package-procurement.d.ts.map +1 -1
  356. package/dist/core/package-procurement.js +29 -17
  357. package/dist/core/package-procurement.js.map +1 -1
  358. package/dist/core/pi-package-intake-candidates.d.ts +21 -0
  359. package/dist/core/pi-package-intake-candidates.d.ts.map +1 -0
  360. package/dist/core/pi-package-intake-candidates.js +109 -0
  361. package/dist/core/pi-package-intake-candidates.js.map +1 -0
  362. package/dist/core/pi-package-intake.d.ts +43 -0
  363. package/dist/core/pi-package-intake.d.ts.map +1 -0
  364. package/dist/core/pi-package-intake.js +122 -0
  365. package/dist/core/pi-package-intake.js.map +1 -0
  366. package/dist/core/provider-attribution.d.ts +1 -1
  367. package/dist/core/provider-attribution.d.ts.map +1 -1
  368. package/dist/core/provider-attribution.js.map +1 -1
  369. package/dist/core/provider-display-names.d.ts.map +1 -1
  370. package/dist/core/provider-display-names.js +1 -0
  371. package/dist/core/provider-display-names.js.map +1 -1
  372. package/dist/core/read-anchors.d.ts +1 -1
  373. package/dist/core/read-anchors.d.ts.map +1 -1
  374. package/dist/core/read-anchors.js +1 -1
  375. package/dist/core/read-anchors.js.map +1 -1
  376. package/dist/core/recovery-checkpoint.d.ts +2 -2
  377. package/dist/core/recovery-checkpoint.d.ts.map +1 -1
  378. package/dist/core/recovery-checkpoint.js +2 -2
  379. package/dist/core/recovery-checkpoint.js.map +1 -1
  380. package/dist/core/resolve-config-value.d.ts +1 -1
  381. package/dist/core/resolve-config-value.d.ts.map +1 -1
  382. package/dist/core/resolve-config-value.js +2 -30
  383. package/dist/core/resolve-config-value.js.map +1 -1
  384. package/dist/core/resource-loader.d.ts +12 -20
  385. package/dist/core/resource-loader.d.ts.map +1 -1
  386. package/dist/core/resource-loader.js +67 -90
  387. package/dist/core/resource-loader.js.map +1 -1
  388. package/dist/core/sandbox-policy-v2.d.ts +49 -0
  389. package/dist/core/sandbox-policy-v2.d.ts.map +1 -0
  390. package/dist/core/sandbox-policy-v2.js +368 -0
  391. package/dist/core/sandbox-policy-v2.js.map +1 -0
  392. package/dist/core/sdk.d.ts +10 -78
  393. package/dist/core/sdk.d.ts.map +1 -1
  394. package/dist/core/sdk.js +97 -139
  395. package/dist/core/sdk.js.map +1 -1
  396. package/dist/core/semantic-cache-policy.d.ts +7 -1
  397. package/dist/core/semantic-cache-policy.d.ts.map +1 -1
  398. package/dist/core/semantic-cache-policy.js +8 -0
  399. package/dist/core/semantic-cache-policy.js.map +1 -1
  400. package/dist/core/session-manager.d.ts +2 -4
  401. package/dist/core/session-manager.d.ts.map +1 -1
  402. package/dist/core/session-manager.js +5 -6
  403. package/dist/core/session-manager.js.map +1 -1
  404. package/dist/core/settings-manager.d.ts +1 -18
  405. package/dist/core/settings-manager.d.ts.map +1 -1
  406. package/dist/core/settings-manager.js +2 -48
  407. package/dist/core/settings-manager.js.map +1 -1
  408. package/dist/core/skills.d.ts +5 -0
  409. package/dist/core/skills.d.ts.map +1 -1
  410. package/dist/core/skills.js +149 -36
  411. package/dist/core/skills.js.map +1 -1
  412. package/dist/core/slash-commands.d.ts.map +1 -1
  413. package/dist/core/slash-commands.js +0 -2
  414. package/dist/core/slash-commands.js.map +1 -1
  415. package/dist/core/subagent-orchestration.d.ts +73 -0
  416. package/dist/core/subagent-orchestration.d.ts.map +1 -0
  417. package/dist/core/subagent-orchestration.js +408 -0
  418. package/dist/core/subagent-orchestration.js.map +1 -0
  419. package/dist/core/system-prompt.d.ts +5 -4
  420. package/dist/core/system-prompt.d.ts.map +1 -1
  421. package/dist/core/system-prompt.js +57 -36
  422. package/dist/core/system-prompt.js.map +1 -1
  423. package/dist/core/timings.d.ts +0 -4
  424. package/dist/core/timings.d.ts.map +1 -1
  425. package/dist/core/timings.js +0 -4
  426. package/dist/core/timings.js.map +1 -1
  427. package/dist/core/todo-runtime-state.d.ts +5 -0
  428. package/dist/core/todo-runtime-state.d.ts.map +1 -0
  429. package/dist/core/todo-runtime-state.js +12 -0
  430. package/dist/core/todo-runtime-state.js.map +1 -0
  431. package/dist/core/todo-state.d.ts +53 -0
  432. package/dist/core/todo-state.d.ts.map +1 -0
  433. package/dist/core/todo-state.js +87 -0
  434. package/dist/core/todo-state.js.map +1 -0
  435. package/dist/core/token-optimizer.d.ts +58 -0
  436. package/dist/core/token-optimizer.d.ts.map +1 -0
  437. package/dist/core/token-optimizer.js +179 -0
  438. package/dist/core/token-optimizer.js.map +1 -0
  439. package/dist/core/tools/bash.d.ts +8 -9
  440. package/dist/core/tools/bash.d.ts.map +1 -1
  441. package/dist/core/tools/bash.js +9 -8
  442. package/dist/core/tools/bash.js.map +1 -1
  443. package/dist/core/tools/edit.d.ts +3 -14
  444. package/dist/core/tools/edit.d.ts.map +1 -1
  445. package/dist/core/tools/edit.js +4 -25
  446. package/dist/core/tools/edit.js.map +1 -1
  447. package/dist/core/tools/find.d.ts +1 -4
  448. package/dist/core/tools/find.d.ts.map +1 -1
  449. package/dist/core/tools/find.js +1 -4
  450. package/dist/core/tools/find.js.map +1 -1
  451. package/dist/core/tools/grep.d.ts +1 -4
  452. package/dist/core/tools/grep.d.ts.map +1 -1
  453. package/dist/core/tools/grep.js +2 -5
  454. package/dist/core/tools/grep.js.map +1 -1
  455. package/dist/core/tools/index.d.ts +2 -2
  456. package/dist/core/tools/index.d.ts.map +1 -1
  457. package/dist/core/tools/index.js.map +1 -1
  458. package/dist/core/tools/ls.d.ts +1 -4
  459. package/dist/core/tools/ls.d.ts.map +1 -1
  460. package/dist/core/tools/ls.js +1 -4
  461. package/dist/core/tools/ls.js.map +1 -1
  462. package/dist/core/tools/read.d.ts +2 -14
  463. package/dist/core/tools/read.d.ts.map +1 -1
  464. package/dist/core/tools/read.js +4 -28
  465. package/dist/core/tools/read.js.map +1 -1
  466. package/dist/core/tools/render-utils.d.ts +1 -1
  467. package/dist/core/tools/render-utils.d.ts.map +1 -1
  468. package/dist/core/tools/render-utils.js +1 -1
  469. package/dist/core/tools/render-utils.js.map +1 -1
  470. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  471. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  472. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  473. package/dist/core/tools/write.d.ts +2 -4
  474. package/dist/core/tools/write.d.ts.map +1 -1
  475. package/dist/core/tools/write.js +4 -4
  476. package/dist/core/tools/write.js.map +1 -1
  477. package/dist/encoding/index.d.ts +6 -0
  478. package/dist/encoding/index.d.ts.map +1 -0
  479. package/dist/encoding/index.js +6 -0
  480. package/dist/encoding/index.js.map +1 -0
  481. package/dist/encoding/l4-encoder.d.ts +96 -0
  482. package/dist/encoding/l4-encoder.d.ts.map +1 -0
  483. package/dist/encoding/l4-encoder.js +474 -0
  484. package/dist/encoding/l4-encoder.js.map +1 -0
  485. package/dist/fuzzing/index.d.ts +6 -0
  486. package/dist/fuzzing/index.d.ts.map +1 -0
  487. package/dist/fuzzing/index.js +6 -0
  488. package/dist/fuzzing/index.js.map +1 -0
  489. package/dist/fuzzing/mutation-engine.d.ts +93 -0
  490. package/dist/fuzzing/mutation-engine.d.ts.map +1 -0
  491. package/dist/fuzzing/mutation-engine.js +244 -0
  492. package/dist/fuzzing/mutation-engine.js.map +1 -0
  493. package/dist/guardrails/audit-logger.d.ts +4 -0
  494. package/dist/guardrails/audit-logger.d.ts.map +1 -0
  495. package/dist/guardrails/audit-logger.js +28 -0
  496. package/dist/guardrails/audit-logger.js.map +1 -0
  497. package/dist/guardrails/evidence-system.d.ts +61 -0
  498. package/dist/guardrails/evidence-system.d.ts.map +1 -0
  499. package/dist/guardrails/evidence-system.js +302 -0
  500. package/dist/guardrails/evidence-system.js.map +1 -0
  501. package/dist/guardrails/freedomd-adapter.d.ts +16 -0
  502. package/dist/guardrails/freedomd-adapter.d.ts.map +1 -0
  503. package/dist/guardrails/freedomd-adapter.js +87 -0
  504. package/dist/guardrails/freedomd-adapter.js.map +1 -0
  505. package/dist/index.d.ts +5 -19
  506. package/dist/index.d.ts.map +1 -1
  507. package/dist/index.js +3 -17
  508. package/dist/index.js.map +1 -1
  509. package/dist/jailbreak-extension.d.ts +48 -0
  510. package/dist/jailbreak-extension.d.ts.map +1 -0
  511. package/dist/jailbreak-extension.js +47 -0
  512. package/dist/jailbreak-extension.js.map +1 -0
  513. package/dist/main.d.ts.map +1 -1
  514. package/dist/main.js +2 -2
  515. package/dist/main.js.map +1 -1
  516. package/dist/migrations.d.ts +0 -37
  517. package/dist/migrations.d.ts.map +1 -1
  518. package/dist/migrations.js +6 -414
  519. package/dist/migrations.js.map +1 -1
  520. package/dist/modes/interactive/components/armin.d.ts +1 -1
  521. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  522. package/dist/modes/interactive/components/armin.js.map +1 -1
  523. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  524. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  525. package/dist/modes/interactive/components/assistant-message.js +1 -1
  526. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  527. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  528. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  529. package/dist/modes/interactive/components/bash-execution.js +1 -1
  530. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  531. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  532. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  533. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  534. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  535. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  536. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  537. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  538. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  539. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  540. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  541. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  542. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  543. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  544. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  545. package/dist/modes/interactive/components/config-selector.js +1 -1
  546. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  547. package/dist/modes/interactive/components/control-panel-box.d.ts +15 -0
  548. package/dist/modes/interactive/components/control-panel-box.d.ts.map +1 -0
  549. package/dist/modes/interactive/components/control-panel-box.js +55 -0
  550. package/dist/modes/interactive/components/control-panel-box.js.map +1 -0
  551. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -1
  552. package/dist/modes/interactive/components/control-panel-gradient-motion.js +2 -36
  553. package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -1
  554. package/dist/modes/interactive/components/control-panel-gradient.d.ts +1 -0
  555. package/dist/modes/interactive/components/control-panel-gradient.d.ts.map +1 -1
  556. package/dist/modes/interactive/components/control-panel-gradient.js +6 -5
  557. package/dist/modes/interactive/components/control-panel-gradient.js.map +1 -1
  558. package/dist/modes/interactive/components/control-panel-layout.d.ts +30 -0
  559. package/dist/modes/interactive/components/control-panel-layout.d.ts.map +1 -0
  560. package/dist/modes/interactive/components/control-panel-layout.js +197 -0
  561. package/dist/modes/interactive/components/control-panel-layout.js.map +1 -0
  562. package/dist/modes/interactive/components/control-panel-runtime-status.d.ts +6 -0
  563. package/dist/modes/interactive/components/control-panel-runtime-status.d.ts.map +1 -0
  564. package/dist/modes/interactive/components/control-panel-runtime-status.js +29 -0
  565. package/dist/modes/interactive/components/control-panel-runtime-status.js.map +1 -0
  566. package/dist/modes/interactive/components/control-panel.d.ts +9 -31
  567. package/dist/modes/interactive/components/control-panel.d.ts.map +1 -1
  568. package/dist/modes/interactive/components/control-panel.js +49 -168
  569. package/dist/modes/interactive/components/control-panel.js.map +1 -1
  570. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  571. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  572. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  573. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  574. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  575. package/dist/modes/interactive/components/custom-editor.js +14 -22
  576. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  577. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  578. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/custom-message.js +1 -1
  580. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  581. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  582. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  583. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  584. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  585. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  586. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  587. package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
  588. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  589. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  590. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  591. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  592. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/extension-editor.js +1 -1
  594. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  595. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  596. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/extension-input.js +1 -1
  598. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  599. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  600. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/extension-selector.js +1 -1
  602. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  603. package/dist/modes/interactive/components/footer.d.ts +1 -1
  604. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/footer.js +7 -9
  606. package/dist/modes/interactive/components/footer.js.map +1 -1
  607. package/dist/modes/interactive/components/index.d.ts +0 -2
  608. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/index.js +0 -2
  610. package/dist/modes/interactive/components/index.js.map +1 -1
  611. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  612. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  613. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  614. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  615. package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
  616. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  617. package/dist/modes/interactive/components/login-dialog.js +2 -2
  618. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  619. package/dist/modes/interactive/components/model-selector.d.ts +13 -47
  620. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  621. package/dist/modes/interactive/components/model-selector.js +118 -193
  622. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  623. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  624. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  625. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  626. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  627. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  628. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  630. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  631. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  632. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  633. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  634. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  635. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  636. package/dist/modes/interactive/components/session-selector.js +1 -1
  637. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  638. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  639. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  640. package/dist/modes/interactive/components/settings-selector.js +1 -1
  641. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  642. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  643. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  644. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  645. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  646. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  647. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  648. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  649. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  650. package/dist/modes/interactive/components/theme-selector.d.ts +1 -2
  651. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  652. package/dist/modes/interactive/components/theme-selector.js +2 -11
  653. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  654. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -7
  655. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  656. package/dist/modes/interactive/components/thinking-selector.js +48 -7
  657. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  658. package/dist/modes/interactive/components/todo-checklist.d.ts +31 -0
  659. package/dist/modes/interactive/components/todo-checklist.d.ts.map +1 -0
  660. package/dist/modes/interactive/components/todo-checklist.js +121 -0
  661. package/dist/modes/interactive/components/todo-checklist.js.map +1 -0
  662. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  663. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  664. package/dist/modes/interactive/components/tool-execution.js +1 -1
  665. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  666. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  667. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  668. package/dist/modes/interactive/components/tree-selector.js +1 -1
  669. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  670. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  671. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  672. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  673. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  674. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  675. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  676. package/dist/modes/interactive/components/user-message.js +1 -1
  677. package/dist/modes/interactive/components/user-message.js.map +1 -1
  678. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  679. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  680. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  681. package/dist/modes/interactive/interactive-mode.d.ts +3 -8
  682. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  683. package/dist/modes/interactive/interactive-mode.js +80 -232
  684. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  685. package/dist/modes/interactive/theme/omk-control-grid-dark.json +65 -77
  686. package/dist/modes/interactive/theme/omk-neon-control.json +90 -0
  687. package/dist/modes/interactive/theme/rust-forge.json +14 -24
  688. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  689. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  690. package/dist/modes/interactive/theme/theme.js +25 -45
  691. package/dist/modes/interactive/theme/theme.js.map +1 -1
  692. package/dist/modes/print-mode.d.ts +1 -1
  693. package/dist/modes/print-mode.d.ts.map +1 -1
  694. package/dist/modes/print-mode.js.map +1 -1
  695. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  696. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  697. package/dist/modes/rpc/rpc-client.js.map +1 -1
  698. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  699. package/dist/modes/rpc/rpc-mode.js +0 -4
  700. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  701. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  702. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  703. package/dist/modes/rpc/rpc-types.js.map +1 -1
  704. package/dist/modules/index.d.ts +8 -0
  705. package/dist/modules/index.d.ts.map +1 -0
  706. package/dist/modules/index.js +7 -0
  707. package/dist/modules/index.js.map +1 -0
  708. package/dist/modules/lrl-bypass.d.ts +40 -0
  709. package/dist/modules/lrl-bypass.d.ts.map +1 -0
  710. package/dist/modules/lrl-bypass.js +84 -0
  711. package/dist/modules/lrl-bypass.js.map +1 -0
  712. package/dist/modules/lrl-deps.d.ts +38 -0
  713. package/dist/modules/lrl-deps.d.ts.map +1 -0
  714. package/dist/modules/lrl-deps.js +128 -0
  715. package/dist/modules/lrl-deps.js.map +1 -0
  716. package/dist/multiturn/easl-chain.d.ts +113 -0
  717. package/dist/multiturn/easl-chain.d.ts.map +1 -0
  718. package/dist/multiturn/easl-chain.js +351 -0
  719. package/dist/multiturn/easl-chain.js.map +1 -0
  720. package/dist/multiturn/index.d.ts +6 -0
  721. package/dist/multiturn/index.d.ts.map +1 -0
  722. package/dist/multiturn/index.js +6 -0
  723. package/dist/multiturn/index.js.map +1 -0
  724. package/dist/orchestration/lane-grant-auditor.d.ts +4 -0
  725. package/dist/orchestration/lane-grant-auditor.d.ts.map +1 -0
  726. package/dist/orchestration/lane-grant-auditor.js +87 -0
  727. package/dist/orchestration/lane-grant-auditor.js.map +1 -0
  728. package/dist/package-manager-cli.d.ts.map +1 -1
  729. package/dist/package-manager-cli.js +48 -113
  730. package/dist/package-manager-cli.js.map +1 -1
  731. package/dist/routing/fallback-router.d.ts +123 -0
  732. package/dist/routing/fallback-router.d.ts.map +1 -0
  733. package/dist/routing/fallback-router.js +355 -0
  734. package/dist/routing/fallback-router.js.map +1 -0
  735. package/dist/routing/index.d.ts +6 -0
  736. package/dist/routing/index.d.ts.map +1 -0
  737. package/dist/routing/index.js +6 -0
  738. package/dist/routing/index.js.map +1 -0
  739. package/dist/types/evidence.d.ts +117 -0
  740. package/dist/types/evidence.d.ts.map +1 -0
  741. package/dist/types/evidence.js +8 -0
  742. package/dist/types/evidence.js.map +1 -0
  743. package/dist/types/guardrails.d.ts +61 -0
  744. package/dist/types/guardrails.d.ts.map +1 -0
  745. package/dist/types/guardrails.js +9 -0
  746. package/dist/types/guardrails.js.map +1 -0
  747. package/dist/types/jailbreak.d.ts +246 -0
  748. package/dist/types/jailbreak.d.ts.map +1 -0
  749. package/dist/types/jailbreak.js +8 -0
  750. package/dist/types/jailbreak.js.map +1 -0
  751. package/dist/types/lane-grant.d.ts +58 -0
  752. package/dist/types/lane-grant.d.ts.map +1 -0
  753. package/dist/types/lane-grant.js +9 -0
  754. package/dist/types/lane-grant.js.map +1 -0
  755. package/dist/utils/jailbreak/common.d.ts +63 -0
  756. package/dist/utils/jailbreak/common.d.ts.map +1 -0
  757. package/dist/utils/jailbreak/common.js +130 -0
  758. package/dist/utils/jailbreak/common.js.map +1 -0
  759. package/dist/utils/jailbreak/index.d.ts +7 -0
  760. package/dist/utils/jailbreak/index.d.ts.map +1 -0
  761. package/dist/utils/jailbreak/index.js +7 -0
  762. package/dist/utils/jailbreak/index.js.map +1 -0
  763. package/dist/utils/windows-self-update.d.ts.map +1 -1
  764. package/dist/utils/windows-self-update.js +1 -1
  765. package/dist/utils/windows-self-update.js.map +1 -1
  766. package/docs/compaction.md +8 -21
  767. package/docs/custom-provider.md +2 -2
  768. package/docs/development.md +1 -1
  769. package/docs/extensions.md +11 -11
  770. package/docs/loadout-domains/README.md +70 -0
  771. package/docs/loadout-domains/ai-agent-ops.md +94 -0
  772. package/docs/loadout-domains/backend-api.md +116 -0
  773. package/docs/loadout-domains/data-science.md +100 -0
  774. package/docs/loadout-domains/devops-infra.md +85 -0
  775. package/docs/loadout-domains/docs-writing.md +92 -0
  776. package/docs/loadout-domains/frontend-ui.md +128 -0
  777. package/docs/loadout-domains/general.md +62 -0
  778. package/docs/loadout-domains/mobile.md +84 -0
  779. package/docs/loadout-domains/qa-testing.md +87 -0
  780. package/docs/loadout-domains/research.md +80 -0
  781. package/docs/loadout-domains/security-audit.md +97 -0
  782. package/docs/packages.md +7 -48
  783. package/docs/prompt-templates.md +0 -2
  784. package/docs/providers.md +12 -0
  785. package/docs/sdk.md +3 -3
  786. package/docs/security.md +145 -0
  787. package/docs/session-format.md +1 -1
  788. package/docs/themes.md +8 -7
  789. package/docs/tui.md +14 -14
  790. package/docs/usage.md +6 -16
  791. package/examples/extensions/README.md +2 -2
  792. package/examples/extensions/aside-computer-use/README.md +114 -0
  793. package/examples/extensions/aside-computer-use/action-scoring.ts +122 -0
  794. package/examples/extensions/aside-computer-use/assertions.ts +380 -0
  795. package/examples/extensions/aside-computer-use/controller.ts +491 -0
  796. package/examples/extensions/aside-computer-use/evidence.ts +229 -0
  797. package/examples/extensions/aside-computer-use/golden-trace.ts +141 -0
  798. package/examples/extensions/aside-computer-use/index.ts +76 -0
  799. package/examples/extensions/aside-computer-use/mcp-client.ts +381 -0
  800. package/examples/extensions/aside-computer-use/observation-snapshot.ts +121 -0
  801. package/examples/extensions/aside-computer-use/package.json +16 -0
  802. package/examples/extensions/aside-computer-use/policy.ts +257 -0
  803. package/examples/extensions/aside-computer-use/risk-authorize.ts +200 -0
  804. package/examples/extensions/aside-computer-use/risk-classifier.ts +205 -0
  805. package/examples/extensions/aside-computer-use/schema-fingerprint.ts +80 -0
  806. package/examples/extensions/aside-computer-use/session-binding.ts +161 -0
  807. package/examples/extensions/aside-computer-use/tools.ts +449 -0
  808. package/examples/extensions/aside-computer-use/types.ts +217 -0
  809. package/examples/extensions/aside-computer-use/url-origin.ts +132 -0
  810. package/examples/extensions/bash-spawn-hook.ts +1 -1
  811. package/examples/extensions/border-status-editor.ts +2 -2
  812. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  813. package/examples/extensions/custom-compaction.ts +1 -1
  814. package/examples/extensions/custom-footer.ts +2 -2
  815. package/examples/extensions/custom-header.ts +8 -8
  816. package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  817. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  818. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  819. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  820. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  821. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  822. package/examples/extensions/doom-overlay/README.md +1 -2
  823. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  824. package/examples/extensions/doom-overlay/doom/build.sh +4 -4
  825. package/examples/extensions/doom-overlay/doom/doomgeneric_omk.c +72 -0
  826. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  827. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  828. package/examples/extensions/git-merge-and-resolve.ts +1 -1
  829. package/examples/extensions/github-issue-autocomplete.ts +1 -6
  830. package/examples/extensions/gondolin/index.ts +1 -1
  831. package/examples/extensions/gondolin/package-lock.json +2 -2
  832. package/examples/extensions/gondolin/package.json +1 -1
  833. package/examples/extensions/handoff.ts +2 -2
  834. package/examples/extensions/hello.ts +1 -1
  835. package/examples/extensions/inline-bash.ts +1 -1
  836. package/examples/extensions/input-transform-streaming.ts +1 -1
  837. package/examples/extensions/input-transform.ts +2 -2
  838. package/examples/extensions/mac-system-theme.ts +1 -1
  839. package/examples/extensions/message-renderer.ts +1 -1
  840. package/examples/extensions/minimal-mode.ts +1 -1
  841. package/examples/extensions/modal-editor.ts +1 -1
  842. package/examples/extensions/overlay-qa-tests.ts +7 -7
  843. package/examples/extensions/overlay-test.ts +1 -1
  844. package/examples/extensions/plan-mode/index.ts +3 -3
  845. package/examples/extensions/preset.ts +4 -4
  846. package/examples/extensions/provider-payload.ts +6 -3
  847. package/examples/extensions/qna.ts +1 -1
  848. package/examples/extensions/question.ts +1 -1
  849. package/examples/extensions/questionnaire.ts +1 -1
  850. package/examples/extensions/rpc-demo.ts +1 -1
  851. package/examples/extensions/sandbox/index.ts +2 -2
  852. package/examples/extensions/sandbox/package-lock.json +2 -2
  853. package/examples/extensions/sandbox/package.json +1 -1
  854. package/examples/extensions/shutdown-command.ts +5 -5
  855. package/examples/extensions/snake.ts +1 -1
  856. package/examples/extensions/space-invaders.ts +1 -1
  857. package/examples/extensions/structured-output.ts +1 -1
  858. package/examples/extensions/subagent/agents.ts +2 -2
  859. package/examples/extensions/subagent/index.ts +19 -51
  860. package/examples/extensions/summarize.ts +2 -2
  861. package/examples/extensions/tic-tac-toe.ts +2 -2
  862. package/examples/extensions/todo.ts +2 -2
  863. package/examples/extensions/tool-override.ts +1 -1
  864. package/examples/extensions/tools.ts +1 -1
  865. package/examples/extensions/truncated-tool.ts +1 -1
  866. package/examples/extensions/with-deps/package-lock.json +2 -2
  867. package/examples/extensions/with-deps/package.json +1 -1
  868. package/examples/extensions/working-indicator.ts +3 -3
  869. package/examples/rpc-extension-ui.ts +1 -9
  870. package/examples/sdk/02-custom-model.ts +1 -1
  871. package/examples/sdk/07-context-files.ts +0 -2
  872. package/examples/sdk/12-full-control.ts +1 -1
  873. package/examples/sdk/README.md +1 -1
  874. package/npm-shrinkwrap.json +1805 -0
  875. package/package.json +10 -32
  876. package/dist/core/compaction/pruner-policy.d.ts +0 -84
  877. package/dist/core/compaction/pruner-policy.d.ts.map +0 -1
  878. package/dist/core/compaction/pruner-policy.js +0 -273
  879. package/dist/core/compaction/pruner-policy.js.map +0 -1
  880. package/dist/core/context-graph-identity-resolution.d.ts +0 -114
  881. package/dist/core/context-graph-identity-resolution.d.ts.map +0 -1
  882. package/dist/core/context-graph-identity-resolution.js +0 -127
  883. package/dist/core/context-graph-identity-resolution.js.map +0 -1
  884. package/dist/core/context-graph-memory-store.d.ts +0 -153
  885. package/dist/core/context-graph-memory-store.d.ts.map +0 -1
  886. package/dist/core/context-graph-memory-store.js +0 -377
  887. package/dist/core/context-graph-memory-store.js.map +0 -1
  888. package/dist/core/context-graph-ontology-generation.d.ts +0 -104
  889. package/dist/core/context-graph-ontology-generation.d.ts.map +0 -1
  890. package/dist/core/context-graph-ontology-generation.js +0 -135
  891. package/dist/core/context-graph-ontology-generation.js.map +0 -1
  892. package/dist/core/context-graph-ontology-registry.d.ts +0 -766
  893. package/dist/core/context-graph-ontology-registry.d.ts.map +0 -1
  894. package/dist/core/context-graph-ontology-registry.js +0 -1133
  895. package/dist/core/context-graph-ontology-registry.js.map +0 -1
  896. package/dist/core/context-graph-policy.d.ts +0 -68
  897. package/dist/core/context-graph-policy.d.ts.map +0 -1
  898. package/dist/core/context-graph-policy.js +0 -221
  899. package/dist/core/context-graph-policy.js.map +0 -1
  900. package/dist/core/context-graph-reasoning.d.ts +0 -130
  901. package/dist/core/context-graph-reasoning.d.ts.map +0 -1
  902. package/dist/core/context-graph-reasoning.js +0 -442
  903. package/dist/core/context-graph-reasoning.js.map +0 -1
  904. package/dist/core/context-graph-retrieval.d.ts +0 -120
  905. package/dist/core/context-graph-retrieval.d.ts.map +0 -1
  906. package/dist/core/context-graph-retrieval.js +0 -288
  907. package/dist/core/context-graph-retrieval.js.map +0 -1
  908. package/dist/core/contract-verification.d.ts +0 -78
  909. package/dist/core/contract-verification.d.ts.map +0 -1
  910. package/dist/core/contract-verification.js +0 -110
  911. package/dist/core/contract-verification.js.map +0 -1
  912. package/dist/core/freedom/banner.d.ts +0 -14
  913. package/dist/core/freedom/banner.d.ts.map +0 -1
  914. package/dist/core/freedom/banner.js +0 -22
  915. package/dist/core/freedom/banner.js.map +0 -1
  916. package/dist/core/freedom/config.d.ts +0 -27
  917. package/dist/core/freedom/config.d.ts.map +0 -1
  918. package/dist/core/freedom/config.js +0 -216
  919. package/dist/core/freedom/config.js.map +0 -1
  920. package/dist/core/freedom/index.d.ts +0 -23
  921. package/dist/core/freedom/index.d.ts.map +0 -1
  922. package/dist/core/freedom/index.js +0 -19
  923. package/dist/core/freedom/index.js.map +0 -1
  924. package/dist/core/freedom/policy.d.ts +0 -42
  925. package/dist/core/freedom/policy.d.ts.map +0 -1
  926. package/dist/core/freedom/policy.js +0 -47
  927. package/dist/core/freedom/policy.js.map +0 -1
  928. package/dist/core/freedom/safety-floor.d.ts +0 -73
  929. package/dist/core/freedom/safety-floor.d.ts.map +0 -1
  930. package/dist/core/freedom/safety-floor.js +0 -275
  931. package/dist/core/freedom/safety-floor.js.map +0 -1
  932. package/dist/core/harness-control-events.d.ts +0 -91
  933. package/dist/core/harness-control-events.d.ts.map +0 -1
  934. package/dist/core/harness-control-events.js +0 -514
  935. package/dist/core/harness-control-events.js.map +0 -1
  936. package/dist/core/harness-control-replay.d.ts +0 -31
  937. package/dist/core/harness-control-replay.d.ts.map +0 -1
  938. package/dist/core/harness-control-replay.js +0 -187
  939. package/dist/core/harness-control-replay.js.map +0 -1
  940. package/dist/core/headroom-middleware.d.ts +0 -35
  941. package/dist/core/headroom-middleware.d.ts.map +0 -1
  942. package/dist/core/headroom-middleware.js +0 -166
  943. package/dist/core/headroom-middleware.js.map +0 -1
  944. package/dist/core/lean-context-middleware.d.ts +0 -12
  945. package/dist/core/lean-context-middleware.d.ts.map +0 -1
  946. package/dist/core/lean-context-middleware.js +0 -87
  947. package/dist/core/lean-context-middleware.js.map +0 -1
  948. package/dist/core/lean-context-policy.d.ts +0 -45
  949. package/dist/core/lean-context-policy.d.ts.map +0 -1
  950. package/dist/core/lean-context-policy.js +0 -108
  951. package/dist/core/lean-context-policy.js.map +0 -1
  952. package/dist/core/native-adoption-benchmark.d.ts +0 -166
  953. package/dist/core/native-adoption-benchmark.d.ts.map +0 -1
  954. package/dist/core/native-adoption-benchmark.js +0 -624
  955. package/dist/core/native-adoption-benchmark.js.map +0 -1
  956. package/dist/core/observability-trace.d.ts +0 -80
  957. package/dist/core/observability-trace.d.ts.map +0 -1
  958. package/dist/core/observability-trace.js +0 -140
  959. package/dist/core/observability-trace.js.map +0 -1
  960. package/dist/core/orchestration/checkpoint.d.ts +0 -83
  961. package/dist/core/orchestration/checkpoint.d.ts.map +0 -1
  962. package/dist/core/orchestration/checkpoint.js +0 -152
  963. package/dist/core/orchestration/checkpoint.js.map +0 -1
  964. package/dist/core/orchestration/errors.d.ts +0 -74
  965. package/dist/core/orchestration/errors.d.ts.map +0 -1
  966. package/dist/core/orchestration/errors.js +0 -52
  967. package/dist/core/orchestration/errors.js.map +0 -1
  968. package/dist/core/orchestration/merge-queue.d.ts +0 -121
  969. package/dist/core/orchestration/merge-queue.d.ts.map +0 -1
  970. package/dist/core/orchestration/merge-queue.js +0 -149
  971. package/dist/core/orchestration/merge-queue.js.map +0 -1
  972. package/dist/core/orchestration/recovery.d.ts +0 -106
  973. package/dist/core/orchestration/recovery.d.ts.map +0 -1
  974. package/dist/core/orchestration/recovery.js +0 -110
  975. package/dist/core/orchestration/recovery.js.map +0 -1
  976. package/dist/core/orchestration/replay-ledger.d.ts +0 -76
  977. package/dist/core/orchestration/replay-ledger.d.ts.map +0 -1
  978. package/dist/core/orchestration/replay-ledger.js +0 -395
  979. package/dist/core/orchestration/replay-ledger.js.map +0 -1
  980. package/dist/core/orchestration/scheduler-state.d.ts +0 -78
  981. package/dist/core/orchestration/scheduler-state.d.ts.map +0 -1
  982. package/dist/core/orchestration/scheduler-state.js +0 -185
  983. package/dist/core/orchestration/scheduler-state.js.map +0 -1
  984. package/dist/core/orchestration/scheduler-store.d.ts +0 -309
  985. package/dist/core/orchestration/scheduler-store.d.ts.map +0 -1
  986. package/dist/core/orchestration/scheduler-store.js +0 -368
  987. package/dist/core/orchestration/scheduler-store.js.map +0 -1
  988. package/dist/core/orchestration/sqlite-scheduler-store.d.ts +0 -57
  989. package/dist/core/orchestration/sqlite-scheduler-store.d.ts.map +0 -1
  990. package/dist/core/orchestration/sqlite-scheduler-store.js +0 -528
  991. package/dist/core/orchestration/sqlite-scheduler-store.js.map +0 -1
  992. package/dist/core/orchestration/transaction-coordinator.d.ts +0 -217
  993. package/dist/core/orchestration/transaction-coordinator.d.ts.map +0 -1
  994. package/dist/core/orchestration/transaction-coordinator.js +0 -281
  995. package/dist/core/orchestration/transaction-coordinator.js.map +0 -1
  996. package/dist/core/orchestration/verification-contract.d.ts +0 -197
  997. package/dist/core/orchestration/verification-contract.d.ts.map +0 -1
  998. package/dist/core/orchestration/verification-contract.js +0 -145
  999. package/dist/core/orchestration/verification-contract.js.map +0 -1
  1000. package/dist/core/package-composition.d.ts +0 -68
  1001. package/dist/core/package-composition.d.ts.map +0 -1
  1002. package/dist/core/package-composition.js +0 -304
  1003. package/dist/core/package-composition.js.map +0 -1
  1004. package/dist/core/package-trial-runtime.d.ts +0 -75
  1005. package/dist/core/package-trial-runtime.d.ts.map +0 -1
  1006. package/dist/core/package-trial-runtime.js +0 -73
  1007. package/dist/core/package-trial-runtime.js.map +0 -1
  1008. package/dist/core/package-trial-sandbox.d.ts +0 -27
  1009. package/dist/core/package-trial-sandbox.d.ts.map +0 -1
  1010. package/dist/core/package-trial-sandbox.js +0 -102
  1011. package/dist/core/package-trial-sandbox.js.map +0 -1
  1012. package/dist/core/policy-overlays-runtime.d.ts +0 -141
  1013. package/dist/core/policy-overlays-runtime.d.ts.map +0 -1
  1014. package/dist/core/policy-overlays-runtime.js +0 -720
  1015. package/dist/core/policy-overlays-runtime.js.map +0 -1
  1016. package/dist/core/read-anchor-registry.d.ts +0 -27
  1017. package/dist/core/read-anchor-registry.d.ts.map +0 -1
  1018. package/dist/core/read-anchor-registry.js +0 -103
  1019. package/dist/core/read-anchor-registry.js.map +0 -1
  1020. package/dist/core/read-content-cache.d.ts +0 -22
  1021. package/dist/core/read-content-cache.d.ts.map +0 -1
  1022. package/dist/core/read-content-cache.js +0 -79
  1023. package/dist/core/read-content-cache.js.map +0 -1
  1024. package/dist/core/session-digest.d.ts +0 -57
  1025. package/dist/core/session-digest.d.ts.map +0 -1
  1026. package/dist/core/session-digest.js +0 -193
  1027. package/dist/core/session-digest.js.map +0 -1
  1028. package/dist/core/spec-kit/compiler.d.ts +0 -67
  1029. package/dist/core/spec-kit/compiler.d.ts.map +0 -1
  1030. package/dist/core/spec-kit/compiler.js +0 -268
  1031. package/dist/core/spec-kit/compiler.js.map +0 -1
  1032. package/dist/core/transaction-coordinator.d.ts +0 -30
  1033. package/dist/core/transaction-coordinator.d.ts.map +0 -1
  1034. package/dist/core/transaction-coordinator.js +0 -173
  1035. package/dist/core/transaction-coordinator.js.map +0 -1
  1036. package/dist/modes/interactive/components/mcp-selector.d.ts +0 -30
  1037. package/dist/modes/interactive/components/mcp-selector.d.ts.map +0 -1
  1038. package/dist/modes/interactive/components/mcp-selector.js +0 -155
  1039. package/dist/modes/interactive/components/mcp-selector.js.map +0 -1
  1040. package/dist/modes/interactive/components/model-selector-state.d.ts +0 -101
  1041. package/dist/modes/interactive/components/model-selector-state.d.ts.map +0 -1
  1042. package/dist/modes/interactive/components/model-selector-state.js +0 -261
  1043. package/dist/modes/interactive/components/model-selector-state.js.map +0 -1
  1044. package/dist/modes/interactive/components/skills-selector.d.ts +0 -32
  1045. package/dist/modes/interactive/components/skills-selector.d.ts.map +0 -1
  1046. package/dist/modes/interactive/components/skills-selector.js +0 -130
  1047. package/dist/modes/interactive/components/skills-selector.js.map +0 -1
  1048. package/dist/modes/interactive/theme/omk-blackboard.json +0 -91
  1049. package/dist/modes/interactive/theme/omk-freedom-grid.json +0 -91
  1050. package/dist/modes/interactive/theme/omk-neon-ops.json +0 -90
  1051. package/dist/modes/interactive/theme/omk-slate-light.json +0 -91
  1052. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -72
  1053. package/node_modules/@earendil-works/omk-agent-core/README.md +0 -488
  1054. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts +0 -24
  1055. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts.map +0 -1
  1056. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js +0 -553
  1057. package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js.map +0 -1
  1058. package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts +0 -118
  1059. package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts.map +0 -1
  1060. package/node_modules/@earendil-works/omk-agent-core/dist/agent.js +0 -402
  1061. package/node_modules/@earendil-works/omk-agent-core/dist/agent.js.map +0 -1
  1062. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts +0 -95
  1063. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts.map +0 -1
  1064. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js +0 -996
  1065. package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js.map +0 -1
  1066. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts +0 -53
  1067. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +0 -1
  1068. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js +0 -175
  1069. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js.map +0 -1
  1070. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts +0 -117
  1071. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts.map +0 -1
  1072. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js +0 -568
  1073. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js.map +0 -1
  1074. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts +0 -25
  1075. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts.map +0 -1
  1076. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js +0 -131
  1077. package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js.map +0 -1
  1078. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts +0 -51
  1079. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts.map +0 -1
  1080. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js +0 -510
  1081. package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js.map +0 -1
  1082. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts +0 -51
  1083. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts.map +0 -1
  1084. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js +0 -102
  1085. package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js.map +0 -1
  1086. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts +0 -48
  1087. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts.map +0 -1
  1088. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js +0 -230
  1089. package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js.map +0 -1
  1090. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts +0 -26
  1091. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts.map +0 -1
  1092. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js +0 -101
  1093. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js.map +0 -1
  1094. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts +0 -36
  1095. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts.map +0 -1
  1096. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js +0 -273
  1097. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js.map +0 -1
  1098. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts +0 -18
  1099. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts.map +0 -1
  1100. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js +0 -42
  1101. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js.map +0 -1
  1102. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts +0 -25
  1103. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts.map +0 -1
  1104. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js +0 -114
  1105. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js.map +0 -1
  1106. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts +0 -11
  1107. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts.map +0 -1
  1108. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js +0 -39
  1109. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js.map +0 -1
  1110. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts +0 -33
  1111. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts.map +0 -1
  1112. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js +0 -210
  1113. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js.map +0 -1
  1114. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts +0 -2
  1115. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts.map +0 -1
  1116. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js +0 -50
  1117. package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js.map +0 -1
  1118. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts +0 -44
  1119. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts.map +0 -1
  1120. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js +0 -311
  1121. package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js.map +0 -1
  1122. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts +0 -3
  1123. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts.map +0 -1
  1124. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js +0 -30
  1125. package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js.map +0 -1
  1126. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts +0 -616
  1127. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts.map +0 -1
  1128. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js +0 -94
  1129. package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js.map +0 -1
  1130. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts +0 -14
  1131. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts.map +0 -1
  1132. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js +0 -126
  1133. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js.map +0 -1
  1134. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts +0 -70
  1135. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts.map +0 -1
  1136. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js +0 -297
  1137. package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js.map +0 -1
  1138. package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts +0 -20
  1139. package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts.map +0 -1
  1140. package/node_modules/@earendil-works/omk-agent-core/dist/index.js +0 -25
  1141. package/node_modules/@earendil-works/omk-agent-core/dist/index.js.map +0 -1
  1142. package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts +0 -3
  1143. package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts.map +0 -1
  1144. package/node_modules/@earendil-works/omk-agent-core/dist/node.js +0 -3
  1145. package/node_modules/@earendil-works/omk-agent-core/dist/node.js.map +0 -1
  1146. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts +0 -69
  1147. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts.map +0 -1
  1148. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js +0 -278
  1149. package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js.map +0 -1
  1150. package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts +0 -393
  1151. package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts.map +0 -1
  1152. package/node_modules/@earendil-works/omk-agent-core/dist/types.js +0 -2
  1153. package/node_modules/@earendil-works/omk-agent-core/dist/types.js.map +0 -1
  1154. package/node_modules/@earendil-works/omk-agent-core/package.json +0 -60
  1155. package/node_modules/@earendil-works/omk-ai/README.md +0 -1389
  1156. package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts +0 -20
  1157. package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts.map +0 -1
  1158. package/node_modules/@earendil-works/omk-ai/dist/api-registry.js +0 -44
  1159. package/node_modules/@earendil-works/omk-ai/dist/api-registry.js.map +0 -1
  1160. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts +0 -5
  1161. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts.map +0 -1
  1162. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js +0 -6
  1163. package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js.map +0 -1
  1164. package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts +0 -3
  1165. package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts.map +0 -1
  1166. package/node_modules/@earendil-works/omk-ai/dist/cli.js +0 -130
  1167. package/node_modules/@earendil-works/omk-ai/dist/cli.js.map +0 -1
  1168. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts +0 -20
  1169. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts.map +0 -1
  1170. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js +0 -199
  1171. package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js.map +0 -1
  1172. package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts +0 -10
  1173. package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts.map +0 -1
  1174. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts +0 -515
  1175. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts.map +0 -1
  1176. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js +0 -517
  1177. package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js.map +0 -1
  1178. package/node_modules/@earendil-works/omk-ai/dist/image-models.js +0 -23
  1179. package/node_modules/@earendil-works/omk-ai/dist/image-models.js.map +0 -1
  1180. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts +0 -14
  1181. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts.map +0 -1
  1182. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js +0 -22
  1183. package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js.map +0 -1
  1184. package/node_modules/@earendil-works/omk-ai/dist/images.d.ts +0 -4
  1185. package/node_modules/@earendil-works/omk-ai/dist/images.d.ts.map +0 -1
  1186. package/node_modules/@earendil-works/omk-ai/dist/images.js +0 -16
  1187. package/node_modules/@earendil-works/omk-ai/dist/images.js.map +0 -1
  1188. package/node_modules/@earendil-works/omk-ai/dist/index.d.ts +0 -33
  1189. package/node_modules/@earendil-works/omk-ai/dist/index.d.ts.map +0 -1
  1190. package/node_modules/@earendil-works/omk-ai/dist/index.js +0 -21
  1191. package/node_modules/@earendil-works/omk-ai/dist/index.js.map +0 -1
  1192. package/node_modules/@earendil-works/omk-ai/dist/models.d.ts +0 -18
  1193. package/node_modules/@earendil-works/omk-ai/dist/models.d.ts.map +0 -1
  1194. package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts +0 -18762
  1195. package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts.map +0 -1
  1196. package/node_modules/@earendil-works/omk-ai/dist/models.generated.js +0 -17197
  1197. package/node_modules/@earendil-works/omk-ai/dist/models.generated.js.map +0 -1
  1198. package/node_modules/@earendil-works/omk-ai/dist/models.js +0 -78
  1199. package/node_modules/@earendil-works/omk-ai/dist/models.js.map +0 -1
  1200. package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts +0 -2
  1201. package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts.map +0 -1
  1202. package/node_modules/@earendil-works/omk-ai/dist/oauth.js +0 -2
  1203. package/node_modules/@earendil-works/omk-ai/dist/oauth.js.map +0 -1
  1204. package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts +0 -39
  1205. package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts.map +0 -1
  1206. package/node_modules/@earendil-works/omk-ai/dist/provider-network.js +0 -170
  1207. package/node_modules/@earendil-works/omk-ai/dist/provider-network.js.map +0 -1
  1208. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts +0 -38
  1209. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts.map +0 -1
  1210. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js +0 -826
  1211. package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js.map +0 -1
  1212. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts +0 -77
  1213. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts.map +0 -1
  1214. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js +0 -1123
  1215. package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js.map +0 -1
  1216. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts +0 -15
  1217. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts.map +0 -1
  1218. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js +0 -221
  1219. package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js.map +0 -1
  1220. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts +0 -13
  1221. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts.map +0 -1
  1222. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js +0 -26
  1223. package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js.map +0 -1
  1224. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts +0 -56
  1225. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts.map +0 -1
  1226. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js +0 -368
  1227. package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js.map +0 -1
  1228. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts +0 -8
  1229. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts.map +0 -1
  1230. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js +0 -29
  1231. package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js.map +0 -1
  1232. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts +0 -70
  1233. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts.map +0 -1
  1234. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js +0 -331
  1235. package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js.map +0 -1
  1236. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts +0 -15
  1237. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts.map +0 -1
  1238. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js +0 -442
  1239. package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js.map +0 -1
  1240. package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts +0 -13
  1241. package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts.map +0 -1
  1242. package/node_modules/@earendil-works/omk-ai/dist/providers/google.js +0 -402
  1243. package/node_modules/@earendil-works/omk-ai/dist/providers/google.js.map +0 -1
  1244. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts +0 -3
  1245. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts.map +0 -1
  1246. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js +0 -128
  1247. package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js.map +0 -1
  1248. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts +0 -4
  1249. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts.map +0 -1
  1250. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js +0 -34
  1251. package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js.map +0 -1
  1252. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts +0 -25
  1253. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts.map +0 -1
  1254. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js +0 -534
  1255. package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js.map +0 -1
  1256. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts +0 -30
  1257. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts.map +0 -1
  1258. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js +0 -1171
  1259. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js.map +0 -1
  1260. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts +0 -19
  1261. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts.map +0 -1
  1262. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js +0 -977
  1263. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js.map +0 -1
  1264. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts +0 -11
  1265. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts.map +0 -1
  1266. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js +0 -22
  1267. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js.map +0 -1
  1268. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts +0 -18
  1269. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts.map +0 -1
  1270. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js +0 -496
  1271. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js.map +0 -1
  1272. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts +0 -13
  1273. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts.map +0 -1
  1274. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js +0 -233
  1275. package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js.map +0 -1
  1276. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts +0 -35
  1277. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts.map +0 -1
  1278. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js +0 -254
  1279. package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js.map +0 -1
  1280. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts +0 -8
  1281. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts.map +0 -1
  1282. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js +0 -42
  1283. package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js.map +0 -1
  1284. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts +0 -13
  1285. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts.map +0 -1
  1286. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js +0 -82
  1287. package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js.map +0 -1
  1288. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts +0 -8
  1289. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts.map +0 -1
  1290. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js +0 -184
  1291. package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js.map +0 -1
  1292. package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts +0 -4
  1293. package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts.map +0 -1
  1294. package/node_modules/@earendil-works/omk-ai/dist/session-resources.js +0 -22
  1295. package/node_modules/@earendil-works/omk-ai/dist/session-resources.js.map +0 -1
  1296. package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts +0 -8
  1297. package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts.map +0 -1
  1298. package/node_modules/@earendil-works/omk-ai/dist/stream.js +0 -77
  1299. package/node_modules/@earendil-works/omk-ai/dist/stream.js.map +0 -1
  1300. package/node_modules/@earendil-works/omk-ai/dist/types.d.ts +0 -570
  1301. package/node_modules/@earendil-works/omk-ai/dist/types.d.ts.map +0 -1
  1302. package/node_modules/@earendil-works/omk-ai/dist/types.js +0 -2
  1303. package/node_modules/@earendil-works/omk-ai/dist/types.js.map +0 -1
  1304. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts +0 -6
  1305. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts.map +0 -1
  1306. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js +0 -34
  1307. package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js.map +0 -1
  1308. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts +0 -19
  1309. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts.map +0 -1
  1310. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js +0 -25
  1311. package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js.map +0 -1
  1312. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts +0 -21
  1313. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts.map +0 -1
  1314. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js +0 -81
  1315. package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js.map +0 -1
  1316. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts +0 -3
  1317. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts.map +0 -1
  1318. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js +0 -14
  1319. package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js.map +0 -1
  1320. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts +0 -2
  1321. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts.map +0 -1
  1322. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js +0 -8
  1323. package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js.map +0 -1
  1324. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts +0 -16
  1325. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts.map +0 -1
  1326. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js +0 -113
  1327. package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js.map +0 -1
  1328. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts +0 -10
  1329. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts.map +0 -1
  1330. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js +0 -97
  1331. package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js.map +0 -1
  1332. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts +0 -25
  1333. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts.map +0 -1
  1334. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js +0 -335
  1335. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js.map +0 -1
  1336. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts +0 -21
  1337. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts.map +0 -1
  1338. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js +0 -56
  1339. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js.map +0 -1
  1340. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts +0 -30
  1341. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  1342. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js +0 -280
  1343. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js.map +0 -1
  1344. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts +0 -58
  1345. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts.map +0 -1
  1346. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js +0 -122
  1347. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js.map +0 -1
  1348. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts +0 -3
  1349. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  1350. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js +0 -105
  1351. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js.map +0 -1
  1352. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts +0 -43
  1353. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  1354. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js +0 -487
  1355. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js.map +0 -1
  1356. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts +0 -13
  1357. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts.map +0 -1
  1358. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js +0 -31
  1359. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js.map +0 -1
  1360. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts +0 -64
  1361. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts.map +0 -1
  1362. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js +0 -2
  1363. package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js.map +0 -1
  1364. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts +0 -57
  1365. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts.map +0 -1
  1366. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js +0 -154
  1367. package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js.map +0 -1
  1368. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts +0 -22
  1369. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts.map +0 -1
  1370. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js +0 -26
  1371. package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js.map +0 -1
  1372. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts +0 -17
  1373. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts.map +0 -1
  1374. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js +0 -21
  1375. package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js.map +0 -1
  1376. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts +0 -18
  1377. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts.map +0 -1
  1378. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js +0 -281
  1379. package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js.map +0 -1
  1380. package/node_modules/@earendil-works/omk-ai/package.json +0 -106
  1381. package/node_modules/@earendil-works/omk-tui/README.md +0 -791
  1382. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts +0 -54
  1383. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts.map +0 -1
  1384. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js +0 -632
  1385. package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js.map +0 -1
  1386. package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts +0 -22
  1387. package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts.map +0 -1
  1388. package/node_modules/@earendil-works/omk-tui/dist/components/box.js +0 -104
  1389. package/node_modules/@earendil-works/omk-tui/dist/components/box.js.map +0 -1
  1390. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts +0 -22
  1391. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts.map +0 -1
  1392. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js +0 -35
  1393. package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js.map +0 -1
  1394. package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts +0 -249
  1395. package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts.map +0 -1
  1396. package/node_modules/@earendil-works/omk-tui/dist/components/editor.js +0 -1857
  1397. package/node_modules/@earendil-works/omk-tui/dist/components/editor.js.map +0 -1
  1398. package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts +0 -28
  1399. package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts.map +0 -1
  1400. package/node_modules/@earendil-works/omk-tui/dist/components/image.js +0 -89
  1401. package/node_modules/@earendil-works/omk-tui/dist/components/image.js.map +0 -1
  1402. package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts +0 -37
  1403. package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts.map +0 -1
  1404. package/node_modules/@earendil-works/omk-tui/dist/components/input.js +0 -378
  1405. package/node_modules/@earendil-works/omk-tui/dist/components/input.js.map +0 -1
  1406. package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts +0 -31
  1407. package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts.map +0 -1
  1408. package/node_modules/@earendil-works/omk-tui/dist/components/loader.js +0 -69
  1409. package/node_modules/@earendil-works/omk-tui/dist/components/loader.js.map +0 -1
  1410. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts +0 -96
  1411. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts.map +0 -1
  1412. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js +0 -644
  1413. package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js.map +0 -1
  1414. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts +0 -50
  1415. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts.map +0 -1
  1416. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js +0 -159
  1417. package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js.map +0 -1
  1418. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts +0 -50
  1419. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts.map +0 -1
  1420. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js +0 -185
  1421. package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js.map +0 -1
  1422. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts +0 -12
  1423. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts.map +0 -1
  1424. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js +0 -23
  1425. package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js.map +0 -1
  1426. package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts +0 -19
  1427. package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts.map +0 -1
  1428. package/node_modules/@earendil-works/omk-tui/dist/components/text.js +0 -89
  1429. package/node_modules/@earendil-works/omk-tui/dist/components/text.js.map +0 -1
  1430. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts +0 -13
  1431. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts.map +0 -1
  1432. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js +0 -51
  1433. package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js.map +0 -1
  1434. package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts +0 -39
  1435. package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts.map +0 -1
  1436. package/node_modules/@earendil-works/omk-tui/dist/editor-component.js +0 -2
  1437. package/node_modules/@earendil-works/omk-tui/dist/editor-component.js.map +0 -1
  1438. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts +0 -16
  1439. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts.map +0 -1
  1440. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js +0 -110
  1441. package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js.map +0 -1
  1442. package/node_modules/@earendil-works/omk-tui/dist/index.d.ts +0 -23
  1443. package/node_modules/@earendil-works/omk-tui/dist/index.d.ts.map +0 -1
  1444. package/node_modules/@earendil-works/omk-tui/dist/index.js +0 -32
  1445. package/node_modules/@earendil-works/omk-tui/dist/index.js.map +0 -1
  1446. package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts +0 -212
  1447. package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts.map +0 -1
  1448. package/node_modules/@earendil-works/omk-tui/dist/keybindings.js +0 -252
  1449. package/node_modules/@earendil-works/omk-tui/dist/keybindings.js.map +0 -1
  1450. package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts +0 -184
  1451. package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts.map +0 -1
  1452. package/node_modules/@earendil-works/omk-tui/dist/keys.js +0 -1173
  1453. package/node_modules/@earendil-works/omk-tui/dist/keys.js.map +0 -1
  1454. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts +0 -28
  1455. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts.map +0 -1
  1456. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js +0 -44
  1457. package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js.map +0 -1
  1458. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts +0 -3
  1459. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts.map +0 -1
  1460. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js +0 -53
  1461. package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js.map +0 -1
  1462. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts +0 -50
  1463. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts.map +0 -1
  1464. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js +0 -361
  1465. package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js.map +0 -1
  1466. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts +0 -90
  1467. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts.map +0 -1
  1468. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js +0 -366
  1469. package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js.map +0 -1
  1470. package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts +0 -113
  1471. package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts.map +0 -1
  1472. package/node_modules/@earendil-works/omk-tui/dist/terminal.js +0 -472
  1473. package/node_modules/@earendil-works/omk-tui/dist/terminal.js.map +0 -1
  1474. package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts +0 -242
  1475. package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts.map +0 -1
  1476. package/node_modules/@earendil-works/omk-tui/dist/tui.js +0 -1221
  1477. package/node_modules/@earendil-works/omk-tui/dist/tui.js.map +0 -1
  1478. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts +0 -17
  1479. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts.map +0 -1
  1480. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js +0 -25
  1481. package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js.map +0 -1
  1482. package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts +0 -84
  1483. package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts.map +0 -1
  1484. package/node_modules/@earendil-works/omk-tui/dist/utils.js +0 -1032
  1485. package/node_modules/@earendil-works/omk-tui/dist/utils.js.map +0 -1
  1486. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts +0 -25
  1487. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts.map +0 -1
  1488. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js +0 -96
  1489. package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js.map +0 -1
  1490. package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  1491. package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  1492. package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  1493. package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  1494. package/node_modules/@earendil-works/omk-tui/package.json +0 -47
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/automation/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFile, stat } from \"node:fs/promises\";\n\nexport type RiskLevel = \"R0\" | \"R1\" | \"R2\" | \"R3\";\n\nexport type Capability =\n\t| \"fs.read\"\n\t| \"fs.write\"\n\t| \"process.exec\"\n\t| \"network.read\"\n\t| \"network.write\"\n\t| \"browser.observe\"\n\t| \"browser.mutate\"\n\t| \"browser.credentialed\"\n\t| \"mcp.call\"\n\t| \"extension.run\"\n\t| \"api.call\"\n\t| \"secrets.resolve\"\n\t| \"subagent.spawn\";\n\nexport type EnvMode = \"secret-ref-only\" | \"passthrough-audited\" | \"passthrough-full\";\nexport type Sensitivity = \"public\" | \"internal\" | \"credential\" | \"payment\" | \"session\" | \"admin\";\nexport type ApiMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nexport interface AutonomyProfile {\n\tid: \"autopilot-max\" | \"trusted-dev\" | \"ci-agent\" | \"public-safe\";\n\thumanPromptBudget: { maxPromptsPerTask: number; maxPromptRate: number };\n\tcapabilities: Capability[];\n\tenv: {\n\t\tmode: EnvMode;\n\t\tallowPatterns: string[];\n\t\tdenyPatterns: string[];\n\t\tredactPatterns: string[];\n\t\texposeToModel: false;\n\t};\n\tapi: {\n\t\tallowOrigins: string[];\n\t\tallowMethods: ApiMethod[];\n\t\tmutationDefault: \"auto\";\n\t\trequireIdempotencyForMethods: ApiMethod[];\n\t};\n\tbrowser: {\n\t\tpersistentProfile: boolean;\n\t\tcredentialedSessions: boolean;\n\t\tautoSubmit: boolean;\n\t\tautoDownload: boolean;\n\t\tmaxUnknownOutcomeReconciliations: number;\n\t};\n\tverification: {\n\t\tminVerifiabilityByRisk: Record<RiskLevel, number>;\n\t\trequireEvidenceByRisk: Record<RiskLevel, boolean>;\n\t\trequirePostconditionsByRisk: Record<RiskLevel, boolean>;\n\t};\n\trecovery: {\n\t\tautoRetry: boolean;\n\t\tautoRollback: boolean;\n\t\tautoCompensate: boolean;\n\t\tduplicateMutationSuppression: boolean;\n\t};\n\tbudgets: {\n\t\tmaxWallClockMs: number;\n\t\tmaxToolCalls: number;\n\t\tmaxBrowserActions: number;\n\t\tmaxNetworkCalls: number;\n\t\tmaxCostUsd: number;\n\t\triskBudget: Record<RiskLevel, number>;\n\t};\n}\n\nexport const AUTOPILOT_MAX: AutonomyProfile = {\n\tid: \"autopilot-max\",\n\thumanPromptBudget: { maxPromptsPerTask: 0, maxPromptRate: 0 },\n\tcapabilities: [\n\t\t\"fs.read\",\n\t\t\"fs.write\",\n\t\t\"process.exec\",\n\t\t\"network.read\",\n\t\t\"network.write\",\n\t\t\"browser.observe\",\n\t\t\"browser.mutate\",\n\t\t\"browser.credentialed\",\n\t\t\"mcp.call\",\n\t\t\"extension.run\",\n\t\t\"api.call\",\n\t\t\"secrets.resolve\",\n\t\t\"subagent.spawn\",\n\t],\n\tenv: {\n\t\tmode: \"passthrough-audited\",\n\t\tallowPatterns: [\"*\"],\n\t\tdenyPatterns: [],\n\t\tredactPatterns: [\n\t\t\t\"*KEY*\",\n\t\t\t\"*TOKEN*\",\n\t\t\t\"*SECRET*\",\n\t\t\t\"*PASSWORD*\",\n\t\t\t\"AWS_*\",\n\t\t\t\"GCP_*\",\n\t\t\t\"AZURE_*\",\n\t\t\t\"OPENAI_*\",\n\t\t\t\"ANTHROPIC_*\",\n\t\t\t\"GITHUB_*\",\n\t\t\t\"NPM_*\",\n\t\t],\n\t\texposeToModel: false,\n\t},\n\tapi: {\n\t\tallowOrigins: [\"*\"],\n\t\tallowMethods: [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"],\n\t\tmutationDefault: \"auto\",\n\t\trequireIdempotencyForMethods: [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"],\n\t},\n\tbrowser: {\n\t\tpersistentProfile: true,\n\t\tcredentialedSessions: true,\n\t\tautoSubmit: true,\n\t\tautoDownload: true,\n\t\tmaxUnknownOutcomeReconciliations: 5,\n\t},\n\tverification: {\n\t\tminVerifiabilityByRisk: { R0: 0.1, R1: 0.25, R2: 0.45, R3: 0.65 },\n\t\trequireEvidenceByRisk: { R0: false, R1: true, R2: true, R3: true },\n\t\trequirePostconditionsByRisk: { R0: false, R1: true, R2: true, R3: true },\n\t},\n\trecovery: {\n\t\tautoRetry: true,\n\t\tautoRollback: true,\n\t\tautoCompensate: true,\n\t\tduplicateMutationSuppression: true,\n\t},\n\tbudgets: {\n\t\tmaxWallClockMs: 30 * 60 * 1000,\n\t\tmaxToolCalls: 500,\n\t\tmaxBrowserActions: 250,\n\t\tmaxNetworkCalls: 1000,\n\t\tmaxCostUsd: 10,\n\t\triskBudget: { R0: 10000, R1: 2000, R2: 500, R3: 100 },\n\t},\n};\n\nexport interface EnvRecord {\n\tkey: string;\n\tvalue: string;\n\tsensitivity: Sensitivity;\n\tsource: \"process\" | \"profile\" | \"workspace\" | \"task\" | \"tool\";\n\tfingerprint: string;\n}\n\nexport interface EnvUseEvent {\n\tactionId: string;\n\ttoolId: string;\n\tkey: string;\n\tsensitivity: Sensitivity;\n\tfingerprint: string;\n\tpurpose: string;\n\tpassedToProcess: boolean;\n\texposedToModel: false;\n\ttimestamp: string;\n}\n\nexport interface EnvResolutionRequest {\n\tactionId: string;\n\ttoolId: string;\n\tpurpose: string;\n\tprofile: AutonomyProfile;\n\trequestedKeys?: string[];\n\trequestedPatterns?: string[];\n\textraEnv?: Record<string, string>;\n}\n\nexport interface EnvBrokerLedger {\n\tappend(event: EnvUseEvent): Promise<unknown>;\n}\n\nexport class EnvBroker {\n\tprivate readonly processEnv: Record<string, string | undefined>;\n\tprivate readonly ledger: EnvBrokerLedger;\n\n\tconstructor(args: { processEnv: Record<string, string | undefined>; ledger: EnvBrokerLedger }) {\n\t\tthis.processEnv = args.processEnv;\n\t\tthis.ledger = args.ledger;\n\t}\n\n\tasync createChildEnv(req: EnvResolutionRequest): Promise<Record<string, string>> {\n\t\tconst selected = this.collect(req).filter((record) => this.isAllowed(record, req));\n\t\tconst childEnv: Record<string, string> = {};\n\t\tfor (const record of selected) {\n\t\t\tchildEnv[record.key] = record.value;\n\t\t\tawait this.ledger.append({\n\t\t\t\tactionId: req.actionId,\n\t\t\t\ttoolId: req.toolId,\n\t\t\t\tkey: record.key,\n\t\t\t\tsensitivity: record.sensitivity,\n\t\t\t\tfingerprint: record.fingerprint,\n\t\t\t\tpurpose: req.purpose,\n\t\t\t\tpassedToProcess: true,\n\t\t\t\texposedToModel: false,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t});\n\t\t}\n\t\treturn childEnv;\n\t}\n\n\tredactEnvForModel(env: Record<string, string>): Record<string, string> {\n\t\tconst out: Record<string, string> = {};\n\t\tfor (const [key, value] of Object.entries(env)) {\n\t\t\tconst sensitivity = classifyEnvKey(key, value);\n\t\t\tout[key] = sensitivity === \"public\" ? value : `[REDACTED:${sha256(value).slice(0, 12)}]`;\n\t\t}\n\t\treturn out;\n\t}\n\n\tprivate collect(req: EnvResolutionRequest): EnvRecord[] {\n\t\tconst records: EnvRecord[] = [];\n\t\tfor (const [key, value] of Object.entries(this.processEnv)) {\n\t\t\tif (typeof value !== \"string\") continue;\n\t\t\trecords.push({\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t\tsensitivity: classifyEnvKey(key, value),\n\t\t\t\tsource: \"process\",\n\t\t\t\tfingerprint: sha256(value),\n\t\t\t});\n\t\t}\n\t\tfor (const [key, value] of Object.entries(req.extraEnv ?? {})) {\n\t\t\trecords.push({\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t\tsensitivity: classifyEnvKey(key, value),\n\t\t\t\tsource: \"tool\",\n\t\t\t\tfingerprint: sha256(value),\n\t\t\t});\n\t\t}\n\t\treturn records;\n\t}\n\n\tprivate isAllowed(record: EnvRecord, req: EnvResolutionRequest): boolean {\n\t\tif (req.profile.env.mode === \"passthrough-full\") return true;\n\t\tif (req.profile.env.mode === \"secret-ref-only\" && record.sensitivity !== \"public\") return false;\n\t\tconst allowedByPattern = matchesAny(record.key, req.profile.env.allowPatterns);\n\t\tconst deniedByPattern = matchesAny(record.key, req.profile.env.denyPatterns);\n\t\tif (deniedByPattern || !allowedByPattern) return false;\n\t\tif (req.requestedKeys?.includes(record.key)) return true;\n\t\tif (req.requestedPatterns?.some((pattern) => globMatch(record.key, pattern))) return true;\n\t\treturn req.profile.env.allowPatterns.includes(\"*\");\n\t}\n}\n\nexport type EvidenceActor = \"agent\" | \"tool\" | \"browser\" | \"extension-host\" | \"mcp\" | \"api\" | \"verifier\" | \"recovery\";\nexport type EvidenceOutcome =\n\t| \"planned\"\n\t| \"executed\"\n\t| \"verified\"\n\t| \"failed_before_commit\"\n\t| \"unknown_after_dispatch\"\n\t| \"reconciled\"\n\t| \"compensated\";\n\nexport interface EvidenceEvent {\n\tsequence: number;\n\tpreviousHash: string;\n\teventHash: string;\n\ttimestamp: string;\n\tsessionId: string;\n\ttaskId: string;\n\tactionId?: string;\n\tactor: EvidenceActor;\n\tkind: string;\n\tinputHash?: string;\n\toutputHash?: string;\n\tredactedOutputHash?: string;\n\tenvUseHash?: string;\n\tpolicyHash?: string;\n\tprofileHash?: string;\n\tschemaHash?: string;\n\toutcome?: EvidenceOutcome;\n}\n\nexport type EvidenceEventInput = Omit<\n\tEvidenceEvent,\n\t\"sequence\" | \"previousHash\" | \"eventHash\" | \"timestamp\" | \"sessionId\" | \"taskId\"\n>;\n\nexport class EvidenceLedger {\n\tprivate readonly sessionId: string;\n\tprivate readonly taskId: string;\n\tprivate readonly events: EvidenceEvent[] = [];\n\tprivate previousHash = \"genesis\";\n\n\tconstructor(args: { sessionId: string; taskId: string }) {\n\t\tthis.sessionId = args.sessionId;\n\t\tthis.taskId = args.taskId;\n\t}\n\n\tasync append(event: EvidenceEventInput): Promise<EvidenceEvent> {\n\t\tconst fullWithoutHash = {\n\t\t\t...event,\n\t\t\tsequence: this.events.length + 1,\n\t\t\tpreviousHash: this.previousHash,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tsessionId: this.sessionId,\n\t\t\ttaskId: this.taskId,\n\t\t};\n\t\tconst eventHash = canonicalHash(fullWithoutHash);\n\t\tconst full: EvidenceEvent = { ...fullWithoutHash, eventHash };\n\t\tthis.events.push(full);\n\t\tthis.previousHash = eventHash;\n\t\treturn full;\n\t}\n\n\tsnapshot(): EvidenceEvent[] {\n\t\treturn this.events.map((event) => ({ ...event }));\n\t}\n}\n\nexport type Postcondition =\n\t| { kind: \"url\"; origin?: string; path?: string; pattern?: string }\n\t| { kind: \"text\"; exact?: string; pattern?: string }\n\t| { kind: \"element-visible\"; ref?: string; role?: string; name?: string }\n\t| { kind: \"element-value\"; ref: string; expected: string }\n\t| { kind: \"api-status\"; status: number }\n\t| { kind: \"api-json\"; jsonPath: string; expected: unknown }\n\t| { kind: \"file-exists\"; path: string; sha256?: string }\n\t| { kind: \"download\"; path: string; sha256?: string; mimeType?: string }\n\t| { kind: \"receipt\"; idPattern: string }\n\t| { kind: \"database\"; queryId: string; expectedHash: string };\n\nexport interface VerificationContext {\n\tcurrentUrl?: string;\n\ttext?: string;\n\telements?: Array<{ ref?: string; role?: string; name?: string; value?: string; visible?: boolean }>;\n\tapiStatus?: number;\n\tapiBody?: unknown;\n\treceiptId?: string;\n\tdatabaseHashes?: Record<string, string>;\n}\n\nexport interface EvidencePointer {\n\tkind: string;\n\tdescription: string;\n\tsha256?: string;\n}\n\nexport interface VerificationResult {\n\tpass: boolean;\n\tconfidence: number;\n\tevidencePointers: EvidencePointer[];\n\tfailures: string[];\n\treceiptId?: string;\n}\n\nexport class PostconditionVerifier {\n\tasync verify(conditions: Postcondition[], ctx: VerificationContext): Promise<VerificationResult> {\n\t\tif (conditions.length === 0) {\n\t\t\treturn { pass: false, confidence: 0, evidencePointers: [], failures: [\"no postconditions\"] };\n\t\t}\n\t\tconst results: VerificationResult[] = [];\n\t\tfor (const condition of conditions) {\n\t\t\tresults.push(await this.verifyOne(condition, ctx));\n\t\t}\n\t\treturn {\n\t\t\tpass: results.every((result) => result.pass),\n\t\t\tconfidence: Math.min(...results.map((result) => result.confidence)),\n\t\t\tevidencePointers: results.flatMap((result) => result.evidencePointers),\n\t\t\tfailures: results.flatMap((result) => result.failures),\n\t\t\treceiptId: results.find((result) => result.receiptId)?.receiptId,\n\t\t};\n\t}\n\n\tprivate async verifyOne(condition: Postcondition, ctx: VerificationContext): Promise<VerificationResult> {\n\t\tswitch (condition.kind) {\n\t\t\tcase \"api-status\":\n\t\t\t\treturn booleanResult(ctx.apiStatus === condition.status, \"api-status\", `status ${condition.status}`);\n\t\t\tcase \"api-json\": {\n\t\t\t\tconst actual = readJsonPath(ctx.apiBody, condition.jsonPath);\n\t\t\t\treturn booleanResult(deepEqual(actual, condition.expected), \"api-json\", condition.jsonPath);\n\t\t\t}\n\t\t\tcase \"text\": {\n\t\t\t\tconst text = ctx.text ?? \"\";\n\t\t\t\tconst pass =\n\t\t\t\t\tcondition.exact !== undefined\n\t\t\t\t\t\t? text.includes(condition.exact)\n\t\t\t\t\t\t: condition.pattern !== undefined && new RegExp(condition.pattern).test(text);\n\t\t\t\treturn booleanResult(pass, \"text\", condition.exact ?? condition.pattern ?? \"<missing>\");\n\t\t\t}\n\t\t\tcase \"url\": {\n\t\t\t\tconst currentUrl = ctx.currentUrl;\n\t\t\t\tif (typeof currentUrl !== \"string\") {\n\t\t\t\t\treturn booleanResult(false, \"url\", \"<missing>\");\n\t\t\t\t}\n\t\t\t\tconst parsedUrl = new URL(currentUrl);\n\t\t\t\tlet pass = true;\n\t\t\t\tif (condition.origin) pass = parsedUrl.origin === condition.origin;\n\t\t\t\tif (pass && condition.path) pass = parsedUrl.pathname === condition.path;\n\t\t\t\tif (pass && condition.pattern) pass = new RegExp(condition.pattern).test(currentUrl);\n\t\t\t\treturn booleanResult(pass, \"url\", currentUrl ?? \"<missing>\");\n\t\t\t}\n\t\t\tcase \"file-exists\":\n\t\t\t\treturn verifyFile(condition.path, condition.sha256, \"file-exists\");\n\t\t\tcase \"download\":\n\t\t\t\treturn verifyFile(condition.path, condition.sha256, \"download\");\n\t\t\tcase \"receipt\": {\n\t\t\t\tconst receiptId = ctx.receiptId;\n\t\t\t\tconst pass = typeof receiptId === \"string\" && new RegExp(condition.idPattern).test(receiptId);\n\t\t\t\treturn { ...booleanResult(pass, \"receipt\", receiptId ?? \"<missing>\"), receiptId };\n\t\t\t}\n\t\t\tcase \"database\": {\n\t\t\t\tconst actualHash = ctx.databaseHashes?.[condition.queryId];\n\t\t\t\treturn booleanResult(actualHash === condition.expectedHash, \"database\", condition.queryId);\n\t\t\t}\n\t\t\tcase \"element-visible\": {\n\t\t\t\tconst pass = (ctx.elements ?? []).some(\n\t\t\t\t\t(element) =>\n\t\t\t\t\t\telement.visible === true &&\n\t\t\t\t\t\t(condition.ref === undefined || element.ref === condition.ref) &&\n\t\t\t\t\t\t(condition.role === undefined || element.role === condition.role) &&\n\t\t\t\t\t\t(condition.name === undefined || element.name === condition.name),\n\t\t\t\t);\n\t\t\t\treturn booleanResult(pass, \"element-visible\", condition.ref ?? condition.role ?? condition.name ?? \"<any>\");\n\t\t\t}\n\t\t\tcase \"element-value\": {\n\t\t\t\tconst pass = (ctx.elements ?? []).some(\n\t\t\t\t\t(element) => element.ref === condition.ref && element.value === condition.expected,\n\t\t\t\t);\n\t\t\t\treturn booleanResult(pass, \"element-value\", condition.ref);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface ApiAction {\n\tactionId: string;\n\tmethod: ApiMethod;\n\turl: string;\n\theaders: Record<string, string>;\n\tbody?: unknown;\n\tcredentialRefs: string[];\n\texpectedPostconditions: Postcondition[];\n\tidempotencyKey?: string;\n}\n\nexport interface ApiOutcome {\n\tkind: \"succeeded\" | \"failed_before_commit\" | \"succeeded_unverified\" | \"unknown_after_dispatch\";\n\tstatus?: number;\n\tbodyHash?: string;\n\treceiptId?: string;\n\tredactedBody?: unknown;\n}\n\nexport interface BrokerFetchRequest {\n\tmethod: ApiMethod;\n\theaders: Record<string, string>;\n\tbody?: string;\n\tsignal?: AbortSignal;\n}\n\nexport interface BrokerFetchResponse {\n\tstatus: number;\n\tjson(): Promise<unknown>;\n\ttext(): Promise<string>;\n}\n\nexport type BrokerFetcher = (url: string, init: BrokerFetchRequest) => Promise<BrokerFetchResponse>;\n\nexport class ApiBroker {\n\tprivate readonly ledger: EvidenceLedger;\n\tprivate readonly verifier: PostconditionVerifier;\n\tprivate readonly fetcher: BrokerFetcher;\n\n\tconstructor(args: { ledger: EvidenceLedger; verifier: PostconditionVerifier; fetcher?: BrokerFetcher }) {\n\t\tthis.ledger = args.ledger;\n\t\tthis.verifier = args.verifier;\n\t\tthis.fetcher = args.fetcher ?? defaultFetcher;\n\t}\n\n\tasync execute(\n\t\taction: ApiAction,\n\t\tctx: { signal?: AbortSignal; profile?: AutonomyProfile } = {},\n\t): Promise<ApiOutcome> {\n\t\tconst idempotencyKey = action.idempotencyKey ?? deriveIdempotencyKey(action);\n\t\tconst headers = { ...action.headers, \"Idempotency-Key\": idempotencyKey, \"X-OMK-Action-Id\": action.actionId };\n\t\tawait this.ledger.append({\n\t\t\tactor: \"api\",\n\t\t\tkind: \"api.dispatch.planned\",\n\t\t\tactionId: action.actionId,\n\t\t\tinputHash: canonicalHash({ method: action.method, url: action.url, headers, body: action.body }),\n\t\t\toutcome: \"planned\",\n\t\t});\n\n\t\tlet response: BrokerFetchResponse;\n\t\ttry {\n\t\t\tresponse = await this.fetcher(action.url, {\n\t\t\t\tmethod: action.method,\n\t\t\t\theaders,\n\t\t\t\tbody: action.body === undefined ? undefined : JSON.stringify(action.body),\n\t\t\t\tsignal: ctx.signal,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn this.reconcileUnknown(action, idempotencyKey, ctx.profile ?? AUTOPILOT_MAX);\n\t\t}\n\n\t\tconst rawBody = await safeReadJsonOrText(response);\n\t\tconst redactedBody = redactForModel(rawBody);\n\t\tawait this.ledger.append({\n\t\t\tactor: \"api\",\n\t\t\tkind: \"api.response\",\n\t\t\tactionId: action.actionId,\n\t\t\toutputHash: canonicalHash(rawBody),\n\t\t\tredactedOutputHash: canonicalHash(redactedBody),\n\t\t\toutcome: \"executed\",\n\t\t});\n\t\tconst verification = await this.verifier.verify(action.expectedPostconditions, {\n\t\t\tapiStatus: response.status,\n\t\t\tapiBody: rawBody,\n\t\t\treceiptId: readReceiptId(rawBody),\n\t\t});\n\t\tif (!verification.pass) {\n\t\t\treturn {\n\t\t\t\tkind: \"succeeded_unverified\",\n\t\t\t\tstatus: response.status,\n\t\t\t\tbodyHash: canonicalHash(rawBody),\n\t\t\t\tredactedBody,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"succeeded\",\n\t\t\tstatus: response.status,\n\t\t\tbodyHash: canonicalHash(rawBody),\n\t\t\treceiptId: verification.receiptId,\n\t\t\tredactedBody,\n\t\t};\n\t}\n\n\tprivate async reconcileUnknown(\n\t\taction: ApiAction,\n\t\tidempotencyKey: string,\n\t\tprofile: AutonomyProfile,\n\t): Promise<ApiOutcome> {\n\t\tfor (let attempt = 0; attempt < profile.browser.maxUnknownOutcomeReconciliations; attempt++) {\n\t\t\tconst verification = await this.verifier.verify(action.expectedPostconditions, { receiptId: idempotencyKey });\n\t\t\tif (verification.pass) {\n\t\t\t\tawait this.ledger.append({\n\t\t\t\t\tactor: \"recovery\",\n\t\t\t\t\tkind: \"api.unknown.reconciled\",\n\t\t\t\t\tactionId: action.actionId,\n\t\t\t\t\toutcome: \"reconciled\",\n\t\t\t\t});\n\t\t\t\treturn { kind: \"succeeded\", receiptId: verification.receiptId };\n\t\t\t}\n\t\t}\n\t\tawait this.ledger.append({\n\t\t\tactor: \"recovery\",\n\t\t\tkind: \"api.unknown.unresolved\",\n\t\t\tactionId: action.actionId,\n\t\t\toutcome: \"unknown_after_dispatch\",\n\t\t});\n\t\treturn { kind: \"unknown_after_dispatch\" };\n\t}\n}\n\nexport interface ExecutionStrategy {\n\texecute: boolean;\n\trequirePostcondition: boolean;\n\trequireIdempotency: boolean;\n\trecovery: \"retry\" | \"repair\" | \"reconcile-and-compensate\";\n\tevidenceDepth: \"minimal\" | \"normal\" | \"deep\" | \"forensic\";\n}\n\nexport function strategyForRisk(risk: RiskLevel): ExecutionStrategy {\n\tif (risk === \"R0\") {\n\t\treturn {\n\t\t\texecute: true,\n\t\t\trequirePostcondition: false,\n\t\t\trequireIdempotency: false,\n\t\t\trecovery: \"retry\",\n\t\t\tevidenceDepth: \"minimal\",\n\t\t};\n\t}\n\tif (risk === \"R1\") {\n\t\treturn {\n\t\t\texecute: true,\n\t\t\trequirePostcondition: true,\n\t\t\trequireIdempotency: false,\n\t\t\trecovery: \"retry\",\n\t\t\tevidenceDepth: \"normal\",\n\t\t};\n\t}\n\tif (risk === \"R2\") {\n\t\treturn {\n\t\t\texecute: true,\n\t\t\trequirePostcondition: true,\n\t\t\trequireIdempotency: true,\n\t\t\trecovery: \"repair\",\n\t\t\tevidenceDepth: \"deep\",\n\t\t};\n\t}\n\treturn {\n\t\texecute: true,\n\t\trequirePostcondition: true,\n\t\trequireIdempotency: true,\n\t\trecovery: \"reconcile-and-compensate\",\n\t\tevidenceDepth: \"forensic\",\n\t};\n}\n\nexport interface ToolExecutionNeed {\n\tactionId: string;\n\trequiredCapability: Capability;\n\trisk: RiskLevel;\n\trequiredPostconditions: Postcondition[];\n\tcontextFingerprint?: string;\n}\n\nexport interface ToolExecutionCandidate {\n\ttoolId: string;\n\tcapability: Capability;\n\tschemaHash: string;\n\treliability: number;\n\tverificationStrength: number;\n\tavgLatencyMs: number;\n\tcostUsd: number;\n\tsupportsIdempotency: boolean;\n\tenabled: boolean;\n\tcontextFingerprint?: string;\n}\n\nexport interface ToolExecutionChoice {\n\tcandidate: ToolExecutionCandidate;\n\tscore: number;\n\tstrategy: ExecutionStrategy;\n\treasons: string[];\n}\n\nexport class DynamicToolPortfolioOptimizer {\n\trank(candidates: ToolExecutionCandidate[], need: ToolExecutionNeed): ToolExecutionChoice[] {\n\t\treturn candidates\n\t\t\t.filter((candidate) => candidate.enabled && candidate.capability === need.requiredCapability)\n\t\t\t.map((candidate) => this.scoreCandidate(candidate, need))\n\t\t\t.sort((left, right) => right.score - left.score);\n\t}\n\n\tscoreCandidate(candidate: ToolExecutionCandidate, need: ToolExecutionNeed): ToolExecutionChoice {\n\t\tconst strategy = strategyForRisk(need.risk);\n\t\tconst contextMatch =\n\t\t\tneed.contextFingerprint === undefined || candidate.contextFingerprint === need.contextFingerprint ? 1 : 0;\n\t\tconst idempotency = !strategy.requireIdempotency || candidate.supportsIdempotency ? 1 : 0;\n\t\tconst latency = Math.max(0, 1 - candidate.avgLatencyMs / 30000);\n\t\tconst cost = Math.max(0, 1 - candidate.costUsd / Math.max(1, AUTOPILOT_MAX.budgets.maxCostUsd));\n\t\tconst postconditionCoverage = need.requiredPostconditions.length > 0 ? candidate.verificationStrength : 1;\n\t\tconst score =\n\t\t\t0.32 * candidate.reliability +\n\t\t\t0.26 * postconditionCoverage +\n\t\t\t0.16 * idempotency +\n\t\t\t0.12 * contextMatch +\n\t\t\t0.08 * latency +\n\t\t\t0.06 * cost;\n\t\treturn {\n\t\t\tcandidate,\n\t\t\tscore: Number(score.toFixed(4)),\n\t\t\tstrategy,\n\t\t\treasons: [\n\t\t\t\t`reliability=${candidate.reliability}`,\n\t\t\t\t`verification=${postconditionCoverage}`,\n\t\t\t\t`idempotency=${idempotency}`,\n\t\t\t\t`context=${contextMatch}`,\n\t\t\t],\n\t\t};\n\t}\n}\n\nexport class ToolExecutionBroker {\n\tprivate readonly ledger: EvidenceLedger;\n\tprivate readonly profile: AutonomyProfile;\n\tprivate readonly optimizer: DynamicToolPortfolioOptimizer;\n\n\tconstructor(args: {\n\t\tledger: EvidenceLedger;\n\t\tprofile?: AutonomyProfile;\n\t\toptimizer?: DynamicToolPortfolioOptimizer;\n\t}) {\n\t\tthis.ledger = args.ledger;\n\t\tthis.profile = args.profile ?? AUTOPILOT_MAX;\n\t\tthis.optimizer = args.optimizer ?? new DynamicToolPortfolioOptimizer();\n\t}\n\n\tasync select(need: ToolExecutionNeed, candidates: ToolExecutionCandidate[]): Promise<ToolExecutionChoice> {\n\t\tconst choices = this.optimizer.rank(candidates, need);\n\t\tconst choice = choices[0];\n\t\tif (choice === undefined) {\n\t\t\tthrow new Error(`No enabled tool candidate for ${need.requiredCapability}`);\n\t\t}\n\t\tawait this.ledger.append({\n\t\t\tactor: \"tool\",\n\t\t\tkind: \"tool.execution.planned\",\n\t\t\tactionId: need.actionId,\n\t\t\tinputHash: canonicalHash(need),\n\t\t\tpolicyHash: canonicalHash(this.profile),\n\t\t\tschemaHash: choice.candidate.schemaHash,\n\t\t\toutcome: \"planned\",\n\t\t});\n\t\treturn choice;\n\t}\n\n\tasync recordResult(choice: ToolExecutionChoice, result: VerificationResult): Promise<EvidenceEvent> {\n\t\treturn this.ledger.append({\n\t\t\tactor: \"tool\",\n\t\t\tkind: \"tool.execution.result\",\n\t\t\tactionId: choice.candidate.toolId,\n\t\t\toutputHash: canonicalHash(result),\n\t\t\tschemaHash: choice.candidate.schemaHash,\n\t\t\toutcome: result.pass ? \"verified\" : \"unknown_after_dispatch\",\n\t\t});\n\t}\n}\n\nexport interface AutomationTraceAction {\n\tkind: \"tool\" | \"browser\" | \"api\" | \"mcp\" | \"extension\";\n\tverificationPass: boolean;\n\tschemaHashMatched?: boolean;\n\tenvUseLedgered?: boolean;\n\ttargetFingerprintMatched?: boolean;\n\toutcome?: \"unknown_after_dispatch\" | \"succeeded\" | \"failed\";\n\treconciled?: boolean;\n}\n\nexport interface AutomationTraceEnvApiUse {\n\tledgered: boolean;\n\texposedToModel: boolean;\n\texposedToLogs: boolean;\n}\n\nexport interface AutomationTraceContextPlan {\n\trenderedTokens: number;\n\tresourceBudget: number;\n\tplanHash: string;\n\trenderedHashLinkedPlanHash: string;\n\toutputReserveCountedOnce: boolean;\n}\n\nexport interface AutomationTrace {\n\tactions: AutomationTraceAction[];\n\tverifications: Array<{ conditionHash: string; pass: boolean }>;\n\thumanPrompts: number;\n\tenvApiUses: AutomationTraceEnvApiUse[];\n\tfailures: number;\n\tunknownOutcomes: number;\n\trecoveredFailures: number;\n\treconciledUnknowns: number;\n\tsecretLeaks: number;\n\tduplicateIrreversibleMutations: number;\n\tunledgeredEnvUses: number;\n\treplayMatches: boolean;\n\tcontextPlans: AutomationTraceContextPlan[];\n}\n\nexport interface AutomationHarnessScoreInput {\n\trequiredPostconditions: Postcondition[];\n\ttrace: AutomationTrace;\n}\n\nexport interface AutomationScoreBreakdown {\n\tscore: number;\n\tverifiedSuccess: boolean;\n\tenvApiUseCorrectness: number;\n\tduplicateMutations: number;\n\tsecretLeaks: number;\n\tcritical: boolean;\n}\n\nexport class AutomationHarnessScorer {\n\tscore(input: AutomationHarnessScoreInput): AutomationScoreBreakdown {\n\t\tconst verifiedSuccess = this.verifiedSuccess(input);\n\t\tconst autonomy = 1 - input.trace.humanPrompts / Math.max(1, input.trace.actions.length);\n\t\tconst toolUse = this.toolUseScore(input.trace);\n\t\tconst browserUse = this.browserUseScore(input.trace);\n\t\tconst envApi = this.envApiScore(input.trace);\n\t\tconst recovery = this.recoveryScore(input.trace);\n\t\tconst determinism = input.trace.replayMatches ? 1 : 0;\n\t\tconst context = this.contextScore(input.trace);\n\t\tconst critical =\n\t\t\tinput.trace.secretLeaks > 0 ||\n\t\t\tinput.trace.duplicateIrreversibleMutations > 0 ||\n\t\t\t(input.requiredPostconditions.length > 0 && verifiedSuccess < 1) ||\n\t\t\t!input.trace.replayMatches ||\n\t\t\tinput.trace.unledgeredEnvUses > 0 ||\n\t\t\tinput.trace.envApiUses.some((use) => !use.ledgered) ||\n\t\t\tinput.trace.actions.some(\n\t\t\t\t(action) =>\n\t\t\t\t\taction.schemaHashMatched === false ||\n\t\t\t\t\t(action.kind === \"browser\" && action.targetFingerprintMatched === false),\n\t\t\t);\n\t\tconst raw =\n\t\t\t20 * verifiedSuccess +\n\t\t\t15 * autonomy +\n\t\t\t15 * toolUse +\n\t\t\t15 * browserUse +\n\t\t\t10 * envApi +\n\t\t\t10 * recovery +\n\t\t\t10 * determinism +\n\t\t\t5 * context;\n\t\treturn {\n\t\t\tscore: critical ? Math.min(79, raw) : raw,\n\t\t\tverifiedSuccess: verifiedSuccess >= 0.93,\n\t\t\tenvApiUseCorrectness: envApi,\n\t\t\tduplicateMutations: input.trace.duplicateIrreversibleMutations,\n\t\t\tsecretLeaks: input.trace.secretLeaks,\n\t\t\tcritical,\n\t\t};\n\t}\n\n\tprivate verifiedSuccess(input: AutomationHarnessScoreInput): number {\n\t\tconst passed = input.requiredPostconditions.filter((condition) =>\n\t\t\tinput.trace.verifications.some(\n\t\t\t\t(verification) => verification.conditionHash === canonicalHash(condition) && verification.pass,\n\t\t\t),\n\t\t);\n\t\treturn passed.length / Math.max(1, input.requiredPostconditions.length);\n\t}\n\n\tprivate toolUseScore(trace: AutomationTrace): number {\n\t\tconst calls = trace.actions.filter((action) => action.kind === \"tool\");\n\t\tif (calls.length === 0) return 1;\n\t\tconst verified = calls.filter((action) => action.verificationPass).length;\n\t\tconst schemaStable = calls.filter((action) => action.schemaHashMatched === true).length;\n\t\tconst envLedgered = calls.filter((action) => action.envUseLedgered === true).length;\n\t\treturn (verified + schemaStable + envLedgered) / (3 * calls.length);\n\t}\n\n\tprivate browserUseScore(trace: AutomationTrace): number {\n\t\tconst actions = trace.actions.filter((action) => action.kind === \"browser\");\n\t\tif (actions.length === 0) return 1;\n\t\tconst verified = actions.filter((action) => action.verificationPass).length;\n\t\tconst targetStable = actions.filter((action) => action.targetFingerprintMatched === true).length;\n\t\tconst unknownResolved = actions.filter(\n\t\t\t(action) => action.outcome !== \"unknown_after_dispatch\" || action.reconciled === true,\n\t\t).length;\n\t\treturn (verified + targetStable + unknownResolved) / (3 * actions.length);\n\t}\n\n\tprivate envApiScore(trace: AutomationTrace): number {\n\t\tif (trace.envApiUses.length === 0) return 1;\n\t\tconst ledgered = trace.envApiUses.filter((use) => use.ledgered).length;\n\t\tconst notLeaked = trace.envApiUses.filter((use) => !use.exposedToModel && !use.exposedToLogs).length;\n\t\treturn (ledgered + notLeaked) / (2 * trace.envApiUses.length);\n\t}\n\n\tprivate recoveryScore(trace: AutomationTrace): number {\n\t\tconst failures = trace.failures + trace.unknownOutcomes;\n\t\tif (failures === 0) return 1;\n\t\treturn (trace.recoveredFailures + trace.reconciledUnknowns) / failures;\n\t}\n\n\tprivate contextScore(trace: AutomationTrace): number {\n\t\tif (trace.contextPlans.length === 0) return 1;\n\t\tconst valid = trace.contextPlans.filter(\n\t\t\t(plan) =>\n\t\t\t\tplan.renderedTokens <= plan.resourceBudget &&\n\t\t\t\tplan.planHash === plan.renderedHashLinkedPlanHash &&\n\t\t\t\tplan.outputReserveCountedOnce,\n\t\t).length;\n\t\treturn valid / trace.contextPlans.length;\n\t}\n}\n\nexport function classifyEnvKey(key: string, value: string): Sensitivity {\n\tconst normalizedKey = key.toUpperCase();\n\tif (\n\t\tnormalizedKey.includes(\"TOKEN\") ||\n\t\tnormalizedKey.includes(\"SECRET\") ||\n\t\tnormalizedKey.includes(\"PASSWORD\") ||\n\t\tnormalizedKey.includes(\"API_KEY\") ||\n\t\tnormalizedKey.endsWith(\"_KEY\") ||\n\t\tnormalizedKey.startsWith(\"AWS_\") ||\n\t\tnormalizedKey.startsWith(\"GCP_\") ||\n\t\tnormalizedKey.startsWith(\"AZURE_\") ||\n\t\tnormalizedKey.startsWith(\"OPENAI_\") ||\n\t\tnormalizedKey.startsWith(\"ANTHROPIC_\") ||\n\t\tnormalizedKey.startsWith(\"GITHUB_\") ||\n\t\tnormalizedKey.startsWith(\"NPM_\")\n\t) {\n\t\treturn \"credential\";\n\t}\n\tif (looksLikePaymentCredential(value)) return \"payment\";\n\tif (looksLikeSessionCookie(value)) return \"session\";\n\treturn \"public\";\n}\n\nexport function canonicalHash(value: unknown): string {\n\treturn sha256(stableStringify(value));\n}\n\nexport function redactForModel(value: unknown): unknown {\n\tif (typeof value === \"string\") return redactString(value);\n\tif (Array.isArray(value)) return value.map((item) => redactForModel(item));\n\tif (isRecord(value)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, child] of Object.entries(value)) {\n\t\t\tout[key] =\n\t\t\t\tclassifyEnvKey(key, typeof child === \"string\" ? child : \"\") === \"public\"\n\t\t\t\t\t? redactForModel(child)\n\t\t\t\t\t: \"[REDACTED]\";\n\t\t}\n\t\treturn out;\n\t}\n\treturn value;\n}\n\nfunction booleanResult(pass: boolean, kind: string, description: string): VerificationResult {\n\treturn {\n\t\tpass,\n\t\tconfidence: pass ? 1 : 0,\n\t\tevidencePointers: pass ? [{ kind, description }] : [],\n\t\tfailures: pass ? [] : [`${kind} postcondition failed: ${description}`],\n\t};\n}\n\nasync function verifyFile(path: string, expectedHash: string | undefined, kind: string): Promise<VerificationResult> {\n\ttry {\n\t\tawait stat(path);\n\t\tconst content = await readFile(path);\n\t\tconst actualHash = createHash(\"sha256\").update(content).digest(\"hex\");\n\t\tconst pass = expectedHash === undefined || expectedHash === actualHash;\n\t\treturn {\n\t\t\tpass,\n\t\t\tconfidence: pass ? 1 : 0,\n\t\t\tevidencePointers: pass ? [{ kind, description: path, sha256: actualHash }] : [],\n\t\t\tfailures: pass ? [] : [`${kind} hash mismatch for ${path}`],\n\t\t};\n\t} catch {\n\t\treturn { pass: false, confidence: 0, evidencePointers: [], failures: [`${kind} missing: ${path}`] };\n\t}\n}\n\nfunction readJsonPath(value: unknown, path: string): unknown {\n\tif (path === \"$\") return value;\n\tif (!path.startsWith(\"$.\")) return undefined;\n\tlet current = value;\n\tfor (const segment of path.slice(2).split(\".\")) {\n\t\tif (!isRecord(current)) return undefined;\n\t\tcurrent = current[segment];\n\t}\n\treturn current;\n}\n\nfunction readReceiptId(value: unknown): string | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst receipt = value.receiptId ?? value.id;\n\treturn typeof receipt === \"string\" ? receipt : undefined;\n}\n\nasync function safeReadJsonOrText(response: BrokerFetchResponse): Promise<unknown> {\n\ttry {\n\t\treturn await response.json();\n\t} catch {\n\t\treturn response.text();\n\t}\n}\n\nfunction deriveIdempotencyKey(action: ApiAction): string {\n\treturn `omk-${canonicalHash({ method: action.method, url: action.url, body: action.body, actionId: action.actionId }).slice(0, 24)}`;\n}\n\nasync function defaultFetcher(url: string, init: BrokerFetchRequest): Promise<BrokerFetchResponse> {\n\tconst response = await fetch(url, init);\n\treturn {\n\t\tstatus: response.status,\n\t\tjson: () => response.json() as Promise<unknown>,\n\t\ttext: () => response.text(),\n\t};\n}\n\nfunction redactString(value: string): string {\n\treturn value\n\t\t.replace(/Bearer\\s+[A-Za-z0-9._~+/=-]{8,}/g, \"Bearer [REDACTED]\")\n\t\t.replace(/([?&]?(?:access_)?token=)[^&\\s]+/gi, \"$1[REDACTED]\")\n\t\t.replace(/((?:api[_-]?key|password|secret)=)[^&\\s]+/gi, \"$1[REDACTED]\");\n}\n\nfunction deepEqual(left: unknown, right: unknown): boolean {\n\treturn stableStringify(left) === stableStringify(right);\n}\n\nfunction stableStringify(value: unknown): string {\n\tif (value === null || typeof value !== \"object\") return JSON.stringify(value);\n\tif (Array.isArray(value)) return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n\tconst record = value as Record<string, unknown>;\n\treturn `{${Object.keys(record)\n\t\t.sort()\n\t\t.map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`)\n\t\t.join(\",\")}}`;\n}\n\nfunction matchesAny(value: string, patterns: string[]): boolean {\n\treturn patterns.some((pattern) => pattern === \"*\" || globMatch(value, pattern));\n}\n\nfunction globMatch(value: string, pattern: string): boolean {\n\tconst escaped = pattern\n\t\t.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\t\t.replace(/\\*/g, \".*\")\n\t\t.replace(/\\?/g, \".\");\n\treturn new RegExp(`^${escaped}$`, \"i\").test(value);\n}\n\nfunction sha256(value: string): string {\n\treturn createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction looksLikePaymentCredential(value: string): boolean {\n\treturn /\\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})\\b/.test(value);\n}\n\nfunction looksLikeSessionCookie(value: string): boolean {\n\treturn value.length >= 32 && /[A-Za-z0-9+/=_-]{32,}/.test(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
@@ -11,6 +11,7 @@ export interface BashExecutorOptions {
11
11
  onChunk?: (chunk: string) => void;
12
12
  /** AbortSignal for cancellation */
13
13
  signal?: AbortSignal;
14
+ env?: NodeJS.ProcessEnv;
14
15
  }
15
16
  export interface BashResult {
16
17
  /** Combined stdout + stderr output (sanitized, possibly truncated) */
@@ -1 +1 @@
1
- {"version":3,"file":"bash-executor.d.ts","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,WAAW,mBAAmB;IACnC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAgIrB","sourcesContent":["/**\n * Bash command execution with streaming support and cancellation.\n *\n * This module provides a unified bash execution implementation used by:\n * - AgentSession.executeBash() for interactive and RPC modes\n * - Direct calls from modes that need bash execution\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { createWriteStream, type WriteStream } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stripAnsi } from \"../utils/ansi.ts\";\nimport { sanitizeBinaryOutput } from \"../utils/shell.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport { DEFAULT_MAX_BYTES, truncateTail } from \"./tools/truncate.ts\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BashExecutorOptions {\n\t/** Callback for streaming output chunks (already sanitized) */\n\tonChunk?: (chunk: string) => void;\n\t/** AbortSignal for cancellation */\n\tsignal?: AbortSignal;\n}\n\nexport interface BashResult {\n\t/** Combined stdout + stderr output (sanitized, possibly truncated) */\n\toutput: string;\n\t/** Process exit code (undefined if killed/cancelled) */\n\texitCode: number | undefined;\n\t/** Whether the command was cancelled via signal */\n\tcancelled: boolean;\n\t/** Whether the output was truncated */\n\ttruncated: boolean;\n\t/** Path to temp file containing full output (if output exceeded truncation threshold) */\n\tfullOutputPath?: string;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Execute a bash command using custom BashOperations.\n * Used for remote execution (SSH, containers, etc.).\n */\nexport async function executeBashWithOperations(\n\tcommand: string,\n\tcwd: string,\n\toperations: BashOperations,\n\toptions?: BashExecutorOptions,\n): Promise<BashResult> {\n\tconst outputChunks: string[] = [];\n\tlet outputBytes = 0;\n\tconst maxOutputBytes = DEFAULT_MAX_BYTES * 2;\n\n\tlet tempFilePath: string | undefined;\n\tlet tempFileStream: WriteStream | undefined;\n\tlet totalBytes = 0;\n\n\tconst ensureTempFile = () => {\n\t\tif (tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst id = randomBytes(8).toString(\"hex\");\n\t\ttempFilePath = join(tmpdir(), `omk-bash-${id}.log`);\n\t\t// Owner-only permissions: full output can contain secrets (env vars, tokens, etc.).\n\t\ttempFileStream = createWriteStream(tempFilePath, { mode: 0o600 });\n\t\tfor (const chunk of outputChunks) {\n\t\t\ttempFileStream.write(chunk);\n\t\t}\n\t};\n\n\t/** Close and delete the temp file when its path is never surfaced to the caller. */\n\tconst discardTempFile = async () => {\n\t\tif (!tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst path = tempFilePath;\n\t\tconst stream = tempFileStream;\n\t\ttempFilePath = undefined;\n\t\ttempFileStream = undefined;\n\t\tif (stream) {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tstream.end(() => resolve());\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\tawait rm(path, { force: true });\n\t\t} catch {\n\t\t\t// Best effort: a stale temp file must not fail the command.\n\t\t}\n\t};\n\n\tconst decoder = new TextDecoder();\n\n\tconst onData = (data: Buffer) => {\n\t\ttotalBytes += data.length;\n\n\t\t// Sanitize: strip ANSI, replace binary garbage, normalize newlines\n\t\tconst text = sanitizeBinaryOutput(stripAnsi(decoder.decode(data, { stream: true }))).replace(/\\r/g, \"\");\n\n\t\t// Start writing to temp file if exceeds threshold\n\t\tif (totalBytes > DEFAULT_MAX_BYTES) {\n\t\t\tensureTempFile();\n\t\t}\n\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.write(text);\n\t\t}\n\n\t\t// Keep rolling buffer\n\t\toutputChunks.push(text);\n\t\toutputBytes += text.length;\n\t\twhile (outputBytes > maxOutputBytes && outputChunks.length > 1) {\n\t\t\tconst removed = outputChunks.shift()!;\n\t\t\toutputBytes -= removed.length;\n\t\t}\n\n\t\t// Stream to callback\n\t\tif (options?.onChunk) {\n\t\t\toptions.onChunk(text);\n\t\t}\n\t};\n\n\ttry {\n\t\tconst result = await operations.exec(command, cwd, {\n\t\t\tonData,\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\tconst fullOutput = outputChunks.join(\"\");\n\t\tconst truncationResult = truncateTail(fullOutput);\n\t\tif (truncationResult.truncated) {\n\t\t\tensureTempFile();\n\t\t} else {\n\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\tawait discardTempFile();\n\t\t}\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.end();\n\t\t}\n\t\tconst cancelled = options?.signal?.aborted ?? false;\n\n\t\treturn {\n\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\texitCode: cancelled ? undefined : (result.exitCode ?? undefined),\n\t\t\tcancelled,\n\t\t\ttruncated: truncationResult.truncated,\n\t\t\tfullOutputPath: tempFilePath,\n\t\t};\n\t} catch (err) {\n\t\t// Check if it was an abort\n\t\tif (options?.signal?.aborted) {\n\t\t\tconst fullOutput = outputChunks.join(\"\");\n\t\t\tconst truncationResult = truncateTail(fullOutput);\n\t\t\tif (truncationResult.truncated) {\n\t\t\t\tensureTempFile();\n\t\t\t} else {\n\t\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\t\tawait discardTempFile();\n\t\t\t}\n\t\t\tif (tempFileStream) {\n\t\t\t\ttempFileStream.end();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\t\texitCode: undefined,\n\t\t\t\tcancelled: true,\n\t\t\t\ttruncated: truncationResult.truncated,\n\t\t\t\tfullOutputPath: tempFilePath,\n\t\t\t};\n\t\t}\n\n\t\t// The path is never reported when the command throws; clean up the spill file.\n\t\tawait discardTempFile();\n\n\t\tthrow err;\n\t}\n}\n"]}
1
+ {"version":3,"file":"bash-executor.d.ts","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,WAAW,mBAAmB;IACnC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAiIrB","sourcesContent":["/**\n * Bash command execution with streaming support and cancellation.\n *\n * This module provides a unified bash execution implementation used by:\n * - AgentSession.executeBash() for interactive and RPC modes\n * - Direct calls from modes that need bash execution\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { createWriteStream, type WriteStream } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stripAnsi } from \"../utils/ansi.ts\";\nimport { sanitizeBinaryOutput } from \"../utils/shell.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport { DEFAULT_MAX_BYTES, truncateTail } from \"./tools/truncate.ts\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BashExecutorOptions {\n\t/** Callback for streaming output chunks (already sanitized) */\n\tonChunk?: (chunk: string) => void;\n\t/** AbortSignal for cancellation */\n\tsignal?: AbortSignal;\n\tenv?: NodeJS.ProcessEnv;\n}\n\nexport interface BashResult {\n\t/** Combined stdout + stderr output (sanitized, possibly truncated) */\n\toutput: string;\n\t/** Process exit code (undefined if killed/cancelled) */\n\texitCode: number | undefined;\n\t/** Whether the command was cancelled via signal */\n\tcancelled: boolean;\n\t/** Whether the output was truncated */\n\ttruncated: boolean;\n\t/** Path to temp file containing full output (if output exceeded truncation threshold) */\n\tfullOutputPath?: string;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Execute a bash command using custom BashOperations.\n * Used for remote execution (SSH, containers, etc.).\n */\nexport async function executeBashWithOperations(\n\tcommand: string,\n\tcwd: string,\n\toperations: BashOperations,\n\toptions?: BashExecutorOptions,\n): Promise<BashResult> {\n\tconst outputChunks: string[] = [];\n\tlet outputBytes = 0;\n\tconst maxOutputBytes = DEFAULT_MAX_BYTES * 2;\n\n\tlet tempFilePath: string | undefined;\n\tlet tempFileStream: WriteStream | undefined;\n\tlet totalBytes = 0;\n\n\tconst ensureTempFile = () => {\n\t\tif (tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst id = randomBytes(8).toString(\"hex\");\n\t\ttempFilePath = join(tmpdir(), `omk-bash-${id}.log`);\n\t\t// Owner-only permissions: full output can contain secrets (env vars, tokens, etc.).\n\t\ttempFileStream = createWriteStream(tempFilePath, { mode: 0o600 });\n\t\tfor (const chunk of outputChunks) {\n\t\t\ttempFileStream.write(chunk);\n\t\t}\n\t};\n\n\t/** Close and delete the temp file when its path is never surfaced to the caller. */\n\tconst discardTempFile = async () => {\n\t\tif (!tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst path = tempFilePath;\n\t\tconst stream = tempFileStream;\n\t\ttempFilePath = undefined;\n\t\ttempFileStream = undefined;\n\t\tif (stream) {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tstream.end(() => resolve());\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\tawait rm(path, { force: true });\n\t\t} catch {\n\t\t\t// Best effort: a stale temp file must not fail the command.\n\t\t}\n\t};\n\n\tconst decoder = new TextDecoder();\n\n\tconst onData = (data: Buffer) => {\n\t\ttotalBytes += data.length;\n\n\t\t// Sanitize: strip ANSI, replace binary garbage, normalize newlines\n\t\tconst text = sanitizeBinaryOutput(stripAnsi(decoder.decode(data, { stream: true }))).replace(/\\r/g, \"\");\n\n\t\t// Start writing to temp file if exceeds threshold\n\t\tif (totalBytes > DEFAULT_MAX_BYTES) {\n\t\t\tensureTempFile();\n\t\t}\n\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.write(text);\n\t\t}\n\n\t\t// Keep rolling buffer\n\t\toutputChunks.push(text);\n\t\toutputBytes += text.length;\n\t\twhile (outputBytes > maxOutputBytes && outputChunks.length > 1) {\n\t\t\tconst removed = outputChunks.shift()!;\n\t\t\toutputBytes -= removed.length;\n\t\t}\n\n\t\t// Stream to callback\n\t\tif (options?.onChunk) {\n\t\t\toptions.onChunk(text);\n\t\t}\n\t};\n\n\ttry {\n\t\tconst result = await operations.exec(command, cwd, {\n\t\t\tonData,\n\t\t\tsignal: options?.signal,\n\t\t\tenv: options?.env,\n\t\t});\n\n\t\tconst fullOutput = outputChunks.join(\"\");\n\t\tconst truncationResult = truncateTail(fullOutput);\n\t\tif (truncationResult.truncated) {\n\t\t\tensureTempFile();\n\t\t} else {\n\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\tawait discardTempFile();\n\t\t}\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.end();\n\t\t}\n\t\tconst cancelled = options?.signal?.aborted ?? false;\n\n\t\treturn {\n\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\texitCode: cancelled ? undefined : (result.exitCode ?? undefined),\n\t\t\tcancelled,\n\t\t\ttruncated: truncationResult.truncated,\n\t\t\tfullOutputPath: tempFilePath,\n\t\t};\n\t} catch (err) {\n\t\t// Check if it was an abort\n\t\tif (options?.signal?.aborted) {\n\t\t\tconst fullOutput = outputChunks.join(\"\");\n\t\t\tconst truncationResult = truncateTail(fullOutput);\n\t\t\tif (truncationResult.truncated) {\n\t\t\t\tensureTempFile();\n\t\t\t} else {\n\t\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\t\tawait discardTempFile();\n\t\t\t}\n\t\t\tif (tempFileStream) {\n\t\t\t\ttempFileStream.end();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\t\texitCode: undefined,\n\t\t\t\tcancelled: true,\n\t\t\t\ttruncated: truncationResult.truncated,\n\t\t\t\tfullOutputPath: tempFilePath,\n\t\t\t};\n\t\t}\n\n\t\t// The path is never reported when the command throws; clean up the spill file.\n\t\tawait discardTempFile();\n\n\t\tthrow err;\n\t}\n}\n"]}
@@ -88,6 +88,7 @@ export async function executeBashWithOperations(command, cwd, operations, option
88
88
  const result = await operations.exec(command, cwd, {
89
89
  onData,
90
90
  signal: options?.signal,
91
+ env: options?.env,
91
92
  });
92
93
  const fullOutput = outputChunks.join("");
93
94
  const truncationResult = truncateTail(fullOutput);
@@ -1 +1 @@
1
- {"version":3,"file":"bash-executor.js","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bash command execution with streaming support and cancellation.\n *\n * This module provides a unified bash execution implementation used by:\n * - AgentSession.executeBash() for interactive and RPC modes\n * - Direct calls from modes that need bash execution\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { createWriteStream, type WriteStream } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stripAnsi } from \"../utils/ansi.ts\";\nimport { sanitizeBinaryOutput } from \"../utils/shell.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport { DEFAULT_MAX_BYTES, truncateTail } from \"./tools/truncate.ts\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BashExecutorOptions {\n\t/** Callback for streaming output chunks (already sanitized) */\n\tonChunk?: (chunk: string) => void;\n\t/** AbortSignal for cancellation */\n\tsignal?: AbortSignal;\n}\n\nexport interface BashResult {\n\t/** Combined stdout + stderr output (sanitized, possibly truncated) */\n\toutput: string;\n\t/** Process exit code (undefined if killed/cancelled) */\n\texitCode: number | undefined;\n\t/** Whether the command was cancelled via signal */\n\tcancelled: boolean;\n\t/** Whether the output was truncated */\n\ttruncated: boolean;\n\t/** Path to temp file containing full output (if output exceeded truncation threshold) */\n\tfullOutputPath?: string;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Execute a bash command using custom BashOperations.\n * Used for remote execution (SSH, containers, etc.).\n */\nexport async function executeBashWithOperations(\n\tcommand: string,\n\tcwd: string,\n\toperations: BashOperations,\n\toptions?: BashExecutorOptions,\n): Promise<BashResult> {\n\tconst outputChunks: string[] = [];\n\tlet outputBytes = 0;\n\tconst maxOutputBytes = DEFAULT_MAX_BYTES * 2;\n\n\tlet tempFilePath: string | undefined;\n\tlet tempFileStream: WriteStream | undefined;\n\tlet totalBytes = 0;\n\n\tconst ensureTempFile = () => {\n\t\tif (tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst id = randomBytes(8).toString(\"hex\");\n\t\ttempFilePath = join(tmpdir(), `omk-bash-${id}.log`);\n\t\t// Owner-only permissions: full output can contain secrets (env vars, tokens, etc.).\n\t\ttempFileStream = createWriteStream(tempFilePath, { mode: 0o600 });\n\t\tfor (const chunk of outputChunks) {\n\t\t\ttempFileStream.write(chunk);\n\t\t}\n\t};\n\n\t/** Close and delete the temp file when its path is never surfaced to the caller. */\n\tconst discardTempFile = async () => {\n\t\tif (!tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst path = tempFilePath;\n\t\tconst stream = tempFileStream;\n\t\ttempFilePath = undefined;\n\t\ttempFileStream = undefined;\n\t\tif (stream) {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tstream.end(() => resolve());\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\tawait rm(path, { force: true });\n\t\t} catch {\n\t\t\t// Best effort: a stale temp file must not fail the command.\n\t\t}\n\t};\n\n\tconst decoder = new TextDecoder();\n\n\tconst onData = (data: Buffer) => {\n\t\ttotalBytes += data.length;\n\n\t\t// Sanitize: strip ANSI, replace binary garbage, normalize newlines\n\t\tconst text = sanitizeBinaryOutput(stripAnsi(decoder.decode(data, { stream: true }))).replace(/\\r/g, \"\");\n\n\t\t// Start writing to temp file if exceeds threshold\n\t\tif (totalBytes > DEFAULT_MAX_BYTES) {\n\t\t\tensureTempFile();\n\t\t}\n\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.write(text);\n\t\t}\n\n\t\t// Keep rolling buffer\n\t\toutputChunks.push(text);\n\t\toutputBytes += text.length;\n\t\twhile (outputBytes > maxOutputBytes && outputChunks.length > 1) {\n\t\t\tconst removed = outputChunks.shift()!;\n\t\t\toutputBytes -= removed.length;\n\t\t}\n\n\t\t// Stream to callback\n\t\tif (options?.onChunk) {\n\t\t\toptions.onChunk(text);\n\t\t}\n\t};\n\n\ttry {\n\t\tconst result = await operations.exec(command, cwd, {\n\t\t\tonData,\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\tconst fullOutput = outputChunks.join(\"\");\n\t\tconst truncationResult = truncateTail(fullOutput);\n\t\tif (truncationResult.truncated) {\n\t\t\tensureTempFile();\n\t\t} else {\n\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\tawait discardTempFile();\n\t\t}\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.end();\n\t\t}\n\t\tconst cancelled = options?.signal?.aborted ?? false;\n\n\t\treturn {\n\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\texitCode: cancelled ? undefined : (result.exitCode ?? undefined),\n\t\t\tcancelled,\n\t\t\ttruncated: truncationResult.truncated,\n\t\t\tfullOutputPath: tempFilePath,\n\t\t};\n\t} catch (err) {\n\t\t// Check if it was an abort\n\t\tif (options?.signal?.aborted) {\n\t\t\tconst fullOutput = outputChunks.join(\"\");\n\t\t\tconst truncationResult = truncateTail(fullOutput);\n\t\t\tif (truncationResult.truncated) {\n\t\t\t\tensureTempFile();\n\t\t\t} else {\n\t\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\t\tawait discardTempFile();\n\t\t\t}\n\t\t\tif (tempFileStream) {\n\t\t\t\ttempFileStream.end();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\t\texitCode: undefined,\n\t\t\t\tcancelled: true,\n\t\t\t\ttruncated: truncationResult.truncated,\n\t\t\t\tfullOutputPath: tempFilePath,\n\t\t\t};\n\t\t}\n\n\t\t// The path is never reported when the command throws; clean up the spill file.\n\t\tawait discardTempFile();\n\n\t\tthrow err;\n\t}\n}\n"]}
1
+ {"version":3,"file":"bash-executor.js","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bash command execution with streaming support and cancellation.\n *\n * This module provides a unified bash execution implementation used by:\n * - AgentSession.executeBash() for interactive and RPC modes\n * - Direct calls from modes that need bash execution\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { createWriteStream, type WriteStream } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stripAnsi } from \"../utils/ansi.ts\";\nimport { sanitizeBinaryOutput } from \"../utils/shell.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport { DEFAULT_MAX_BYTES, truncateTail } from \"./tools/truncate.ts\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BashExecutorOptions {\n\t/** Callback for streaming output chunks (already sanitized) */\n\tonChunk?: (chunk: string) => void;\n\t/** AbortSignal for cancellation */\n\tsignal?: AbortSignal;\n\tenv?: NodeJS.ProcessEnv;\n}\n\nexport interface BashResult {\n\t/** Combined stdout + stderr output (sanitized, possibly truncated) */\n\toutput: string;\n\t/** Process exit code (undefined if killed/cancelled) */\n\texitCode: number | undefined;\n\t/** Whether the command was cancelled via signal */\n\tcancelled: boolean;\n\t/** Whether the output was truncated */\n\ttruncated: boolean;\n\t/** Path to temp file containing full output (if output exceeded truncation threshold) */\n\tfullOutputPath?: string;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Execute a bash command using custom BashOperations.\n * Used for remote execution (SSH, containers, etc.).\n */\nexport async function executeBashWithOperations(\n\tcommand: string,\n\tcwd: string,\n\toperations: BashOperations,\n\toptions?: BashExecutorOptions,\n): Promise<BashResult> {\n\tconst outputChunks: string[] = [];\n\tlet outputBytes = 0;\n\tconst maxOutputBytes = DEFAULT_MAX_BYTES * 2;\n\n\tlet tempFilePath: string | undefined;\n\tlet tempFileStream: WriteStream | undefined;\n\tlet totalBytes = 0;\n\n\tconst ensureTempFile = () => {\n\t\tif (tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst id = randomBytes(8).toString(\"hex\");\n\t\ttempFilePath = join(tmpdir(), `omk-bash-${id}.log`);\n\t\t// Owner-only permissions: full output can contain secrets (env vars, tokens, etc.).\n\t\ttempFileStream = createWriteStream(tempFilePath, { mode: 0o600 });\n\t\tfor (const chunk of outputChunks) {\n\t\t\ttempFileStream.write(chunk);\n\t\t}\n\t};\n\n\t/** Close and delete the temp file when its path is never surfaced to the caller. */\n\tconst discardTempFile = async () => {\n\t\tif (!tempFilePath) {\n\t\t\treturn;\n\t\t}\n\t\tconst path = tempFilePath;\n\t\tconst stream = tempFileStream;\n\t\ttempFilePath = undefined;\n\t\ttempFileStream = undefined;\n\t\tif (stream) {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tstream.end(() => resolve());\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\tawait rm(path, { force: true });\n\t\t} catch {\n\t\t\t// Best effort: a stale temp file must not fail the command.\n\t\t}\n\t};\n\n\tconst decoder = new TextDecoder();\n\n\tconst onData = (data: Buffer) => {\n\t\ttotalBytes += data.length;\n\n\t\t// Sanitize: strip ANSI, replace binary garbage, normalize newlines\n\t\tconst text = sanitizeBinaryOutput(stripAnsi(decoder.decode(data, { stream: true }))).replace(/\\r/g, \"\");\n\n\t\t// Start writing to temp file if exceeds threshold\n\t\tif (totalBytes > DEFAULT_MAX_BYTES) {\n\t\t\tensureTempFile();\n\t\t}\n\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.write(text);\n\t\t}\n\n\t\t// Keep rolling buffer\n\t\toutputChunks.push(text);\n\t\toutputBytes += text.length;\n\t\twhile (outputBytes > maxOutputBytes && outputChunks.length > 1) {\n\t\t\tconst removed = outputChunks.shift()!;\n\t\t\toutputBytes -= removed.length;\n\t\t}\n\n\t\t// Stream to callback\n\t\tif (options?.onChunk) {\n\t\t\toptions.onChunk(text);\n\t\t}\n\t};\n\n\ttry {\n\t\tconst result = await operations.exec(command, cwd, {\n\t\t\tonData,\n\t\t\tsignal: options?.signal,\n\t\t\tenv: options?.env,\n\t\t});\n\n\t\tconst fullOutput = outputChunks.join(\"\");\n\t\tconst truncationResult = truncateTail(fullOutput);\n\t\tif (truncationResult.truncated) {\n\t\t\tensureTempFile();\n\t\t} else {\n\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\tawait discardTempFile();\n\t\t}\n\t\tif (tempFileStream) {\n\t\t\ttempFileStream.end();\n\t\t}\n\t\tconst cancelled = options?.signal?.aborted ?? false;\n\n\t\treturn {\n\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\texitCode: cancelled ? undefined : (result.exitCode ?? undefined),\n\t\t\tcancelled,\n\t\t\ttruncated: truncationResult.truncated,\n\t\t\tfullOutputPath: tempFilePath,\n\t\t};\n\t} catch (err) {\n\t\t// Check if it was an abort\n\t\tif (options?.signal?.aborted) {\n\t\t\tconst fullOutput = outputChunks.join(\"\");\n\t\t\tconst truncationResult = truncateTail(fullOutput);\n\t\t\tif (truncationResult.truncated) {\n\t\t\t\tensureTempFile();\n\t\t\t} else {\n\t\t\t\t// fullOutputPath is only surfaced when output is truncated; don't leave the spill file behind.\n\t\t\t\tawait discardTempFile();\n\t\t\t}\n\t\t\tif (tempFileStream) {\n\t\t\t\ttempFileStream.end();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\toutput: truncationResult.truncated ? truncationResult.content : fullOutput,\n\t\t\t\texitCode: undefined,\n\t\t\t\tcancelled: true,\n\t\t\t\ttruncated: truncationResult.truncated,\n\t\t\t\tfullOutputPath: tempFilePath,\n\t\t\t};\n\t\t}\n\n\t\t// The path is never reported when the command throws; clean up the spill file.\n\t\tawait discardTempFile();\n\n\t\tthrow err;\n\t}\n}\n"]}
@@ -0,0 +1,53 @@
1
+ import { EventEmitter } from "events";
2
+ import { type Postcondition, type VerificationResult } from "./automation/index.ts";
3
+ export interface BrowserTask {
4
+ url: string;
5
+ task: string;
6
+ sessionId?: string;
7
+ postconditions?: Postcondition[];
8
+ }
9
+ export interface PageState {
10
+ url: string;
11
+ title: string;
12
+ links: string[];
13
+ forms: {
14
+ action: string;
15
+ fields: string[];
16
+ }[];
17
+ text?: string;
18
+ status?: number;
19
+ error?: string;
20
+ }
21
+ export interface BrowserUseResult {
22
+ success: boolean;
23
+ pageState: PageState;
24
+ taskCompletion: number;
25
+ pageQuality: number;
26
+ navEfficiency: number;
27
+ safety: number;
28
+ overallScore: number;
29
+ screenshot?: string;
30
+ verification: VerificationResult;
31
+ repairsAttempted: number;
32
+ }
33
+ export declare class BrowserUseEngine extends EventEmitter {
34
+ navigate(url: string): Promise<PageState>;
35
+ private parseHTML;
36
+ }
37
+ export declare class BrowserUseEvaluator extends EventEmitter {
38
+ evaluate(result: BrowserUseResult): {
39
+ passed: boolean;
40
+ score: number;
41
+ };
42
+ }
43
+ export declare class BrowserUseAgent extends EventEmitter {
44
+ private engine;
45
+ private evaluator;
46
+ private sessions;
47
+ private verifier;
48
+ constructor();
49
+ execute(task: BrowserTask): Promise<BrowserUseResult>;
50
+ getSession(sessionId: string): PageState | undefined;
51
+ }
52
+ export default BrowserUseAgent;
53
+ //# sourceMappingURL=browser-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-use.d.ts","sourceRoot":"","sources":["../../src/core/browser-use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,KAAK,aAAa,EAAyB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3G,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,kBAAkB,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAqB9C;IAED,OAAO,CAAC,SAAS;CAyBjB;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IACpD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAGrE;CACD;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAwB;IAExC,cAKC;IAEK,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuC1D;IAED,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEnD;CACD;AAED,eAAe,eAAe,CAAC","sourcesContent":["import { EventEmitter } from \"events\";\nimport { type Postcondition, PostconditionVerifier, type VerificationResult } from \"./automation/index.ts\";\n\nexport interface BrowserTask {\n\turl: string;\n\ttask: string;\n\tsessionId?: string;\n\tpostconditions?: Postcondition[];\n}\n\nexport interface PageState {\n\turl: string;\n\ttitle: string;\n\tlinks: string[];\n\tforms: { action: string; fields: string[] }[];\n\ttext?: string;\n\tstatus?: number;\n\terror?: string;\n}\n\nexport interface BrowserUseResult {\n\tsuccess: boolean;\n\tpageState: PageState;\n\ttaskCompletion: number;\n\tpageQuality: number;\n\tnavEfficiency: number;\n\tsafety: number;\n\toverallScore: number;\n\tscreenshot?: string;\n\tverification: VerificationResult;\n\trepairsAttempted: number;\n}\n\nexport class BrowserUseEngine extends EventEmitter {\n\tasync navigate(url: string): Promise<PageState> {\n\t\ttry {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = setTimeout(() => controller.abort(), 10000);\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(url, { signal: controller.signal });\n\t\t\t\tconst html = await response.text();\n\t\t\t\treturn this.parseHTML(html, response.url || url, response.status);\n\t\t\t} finally {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\turl,\n\t\t\t\ttitle: \"Error\",\n\t\t\t\tlinks: [],\n\t\t\t\tforms: [],\n\t\t\t\ttext: \"\",\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate parseHTML(html: string, url: string, status: number): PageState {\n\t\tconst titleMatch = html.match(/<title>([^<]*)<\\/title>/i);\n\t\tconst links = [...html.matchAll(/href=\"([^\"]+)\"/gi)]\n\t\t\t.map((match) => match[1])\n\t\t\t.filter((link) => link.startsWith(\"http\"));\n\t\tconst forms = [...html.matchAll(/<form[^>]*action=\"([^\"]*)\"[^>]*>([\\s\\S]*?)<\\/form>/gi)].map((match) => ({\n\t\t\taction: match[1] || url,\n\t\t\tfields: [...match[2].matchAll(/name=\"([^\"]*)\"/gi)].map((field) => field[1]),\n\t\t}));\n\t\tconst text = html\n\t\t\t.replace(/<script[\\s\\S]*?<\\/script>/gi, \"\")\n\t\t\t.replace(/<style[\\s\\S]*?<\\/style>/gi, \"\")\n\t\t\t.replace(/<[^>]+>/g, \" \")\n\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t.trim();\n\n\t\treturn {\n\t\t\turl,\n\t\t\ttitle: titleMatch?.[1] || \"No Title\",\n\t\t\tlinks: [...new Set(links)].slice(0, 20),\n\t\t\tforms,\n\t\t\ttext,\n\t\t\tstatus,\n\t\t};\n\t}\n}\n\nexport class BrowserUseEvaluator extends EventEmitter {\n\tevaluate(result: BrowserUseResult): { passed: boolean; score: number } {\n\t\tconst passed = result.overallScore >= 0.6 && result.safety >= 0.5 && result.verification.pass;\n\t\treturn { passed, score: result.overallScore };\n\t}\n}\n\nexport class BrowserUseAgent extends EventEmitter {\n\tprivate engine: BrowserUseEngine;\n\tprivate evaluator: BrowserUseEvaluator;\n\tprivate sessions: Map<string, PageState> = new Map();\n\tprivate verifier: PostconditionVerifier;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.engine = new BrowserUseEngine();\n\t\tthis.evaluator = new BrowserUseEvaluator();\n\t\tthis.verifier = new PostconditionVerifier();\n\t}\n\n\tasync execute(task: BrowserTask): Promise<BrowserUseResult> {\n\t\tconst pageState = await this.engine.navigate(task.url);\n\t\tthis.sessions.set(task.sessionId || \"default\", pageState);\n\t\tconst verification = await this.verifier.verify(task.postconditions ?? [{ kind: \"text\", pattern: \"\\\\S\" }], {\n\t\t\tcurrentUrl: pageState.url,\n\t\t\ttext: pageState.text ?? \"\",\n\t\t\tapiStatus: pageState.status,\n\t\t});\n\t\tconst observed = pageState.error === undefined && (pageState.status === undefined || pageState.status < 500);\n\t\tconst taskCompletion = verification.pass ? 1 : observed ? 0.4 : 0;\n\t\tconst pageQuality = observed\n\t\t\t? Math.min(\n\t\t\t\t\t1,\n\t\t\t\t\t(pageState.links.length > 0 ? 0.25 : 0) +\n\t\t\t\t\t\t(pageState.forms.length > 0 ? 0.25 : 0) +\n\t\t\t\t\t\t(pageState.text ? 0.5 : 0),\n\t\t\t\t)\n\t\t\t: 0;\n\t\tconst navEfficiency = observed ? 0.9 : 0;\n\t\tconst safety = verification.failures.length === 0 ? 1 : 0.7;\n\t\tconst overallScore = Number(\n\t\t\t(taskCompletion * 0.45 + pageQuality * 0.2 + navEfficiency * 0.2 + safety * 0.15).toFixed(2),\n\t\t);\n\t\tconst result: BrowserUseResult = {\n\t\t\tsuccess: observed && verification.pass,\n\t\t\tpageState,\n\t\t\ttaskCompletion,\n\t\t\tpageQuality,\n\t\t\tnavEfficiency,\n\t\t\tsafety,\n\t\t\toverallScore,\n\t\t\tverification,\n\t\t\trepairsAttempted: verification.pass ? 0 : 1,\n\t\t};\n\n\t\tconst evaluation = this.evaluator.evaluate(result);\n\t\tthis.emit(\"taskComplete\", { task, result, evaluation });\n\n\t\treturn result;\n\t}\n\n\tgetSession(sessionId: string): PageState | undefined {\n\t\treturn this.sessions.get(sessionId);\n\t}\n}\n\nexport default BrowserUseAgent;\n"]}
@@ -0,0 +1,108 @@
1
+ import { EventEmitter } from "events";
2
+ import { PostconditionVerifier } from "./automation/index.js";
3
+ export class BrowserUseEngine extends EventEmitter {
4
+ async navigate(url) {
5
+ try {
6
+ const controller = new AbortController();
7
+ const timeout = setTimeout(() => controller.abort(), 10000);
8
+ try {
9
+ const response = await fetch(url, { signal: controller.signal });
10
+ const html = await response.text();
11
+ return this.parseHTML(html, response.url || url, response.status);
12
+ }
13
+ finally {
14
+ clearTimeout(timeout);
15
+ }
16
+ }
17
+ catch (error) {
18
+ return {
19
+ url,
20
+ title: "Error",
21
+ links: [],
22
+ forms: [],
23
+ text: "",
24
+ error: error instanceof Error ? error.message : String(error),
25
+ };
26
+ }
27
+ }
28
+ parseHTML(html, url, status) {
29
+ const titleMatch = html.match(/<title>([^<]*)<\/title>/i);
30
+ const links = [...html.matchAll(/href="([^"]+)"/gi)]
31
+ .map((match) => match[1])
32
+ .filter((link) => link.startsWith("http"));
33
+ const forms = [...html.matchAll(/<form[^>]*action="([^"]*)"[^>]*>([\s\S]*?)<\/form>/gi)].map((match) => ({
34
+ action: match[1] || url,
35
+ fields: [...match[2].matchAll(/name="([^"]*)"/gi)].map((field) => field[1]),
36
+ }));
37
+ const text = html
38
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
39
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
40
+ .replace(/<[^>]+>/g, " ")
41
+ .replace(/\s+/g, " ")
42
+ .trim();
43
+ return {
44
+ url,
45
+ title: titleMatch?.[1] || "No Title",
46
+ links: [...new Set(links)].slice(0, 20),
47
+ forms,
48
+ text,
49
+ status,
50
+ };
51
+ }
52
+ }
53
+ export class BrowserUseEvaluator extends EventEmitter {
54
+ evaluate(result) {
55
+ const passed = result.overallScore >= 0.6 && result.safety >= 0.5 && result.verification.pass;
56
+ return { passed, score: result.overallScore };
57
+ }
58
+ }
59
+ export class BrowserUseAgent extends EventEmitter {
60
+ engine;
61
+ evaluator;
62
+ sessions = new Map();
63
+ verifier;
64
+ constructor() {
65
+ super();
66
+ this.engine = new BrowserUseEngine();
67
+ this.evaluator = new BrowserUseEvaluator();
68
+ this.verifier = new PostconditionVerifier();
69
+ }
70
+ async execute(task) {
71
+ const pageState = await this.engine.navigate(task.url);
72
+ this.sessions.set(task.sessionId || "default", pageState);
73
+ const verification = await this.verifier.verify(task.postconditions ?? [{ kind: "text", pattern: "\\S" }], {
74
+ currentUrl: pageState.url,
75
+ text: pageState.text ?? "",
76
+ apiStatus: pageState.status,
77
+ });
78
+ const observed = pageState.error === undefined && (pageState.status === undefined || pageState.status < 500);
79
+ const taskCompletion = verification.pass ? 1 : observed ? 0.4 : 0;
80
+ const pageQuality = observed
81
+ ? Math.min(1, (pageState.links.length > 0 ? 0.25 : 0) +
82
+ (pageState.forms.length > 0 ? 0.25 : 0) +
83
+ (pageState.text ? 0.5 : 0))
84
+ : 0;
85
+ const navEfficiency = observed ? 0.9 : 0;
86
+ const safety = verification.failures.length === 0 ? 1 : 0.7;
87
+ const overallScore = Number((taskCompletion * 0.45 + pageQuality * 0.2 + navEfficiency * 0.2 + safety * 0.15).toFixed(2));
88
+ const result = {
89
+ success: observed && verification.pass,
90
+ pageState,
91
+ taskCompletion,
92
+ pageQuality,
93
+ navEfficiency,
94
+ safety,
95
+ overallScore,
96
+ verification,
97
+ repairsAttempted: verification.pass ? 0 : 1,
98
+ };
99
+ const evaluation = this.evaluator.evaluate(result);
100
+ this.emit("taskComplete", { task, result, evaluation });
101
+ return result;
102
+ }
103
+ getSession(sessionId) {
104
+ return this.sessions.get(sessionId);
105
+ }
106
+ }
107
+ export default BrowserUseAgent;
108
+ //# sourceMappingURL=browser-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-use.js","sourceRoot":"","sources":["../../src/core/browser-use.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from \"events\";\nimport { type Postcondition, PostconditionVerifier, type VerificationResult } from \"./automation/index.ts\";\n\nexport interface BrowserTask {\n\turl: string;\n\ttask: string;\n\tsessionId?: string;\n\tpostconditions?: Postcondition[];\n}\n\nexport interface PageState {\n\turl: string;\n\ttitle: string;\n\tlinks: string[];\n\tforms: { action: string; fields: string[] }[];\n\ttext?: string;\n\tstatus?: number;\n\terror?: string;\n}\n\nexport interface BrowserUseResult {\n\tsuccess: boolean;\n\tpageState: PageState;\n\ttaskCompletion: number;\n\tpageQuality: number;\n\tnavEfficiency: number;\n\tsafety: number;\n\toverallScore: number;\n\tscreenshot?: string;\n\tverification: VerificationResult;\n\trepairsAttempted: number;\n}\n\nexport class BrowserUseEngine extends EventEmitter {\n\tasync navigate(url: string): Promise<PageState> {\n\t\ttry {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = setTimeout(() => controller.abort(), 10000);\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(url, { signal: controller.signal });\n\t\t\t\tconst html = await response.text();\n\t\t\t\treturn this.parseHTML(html, response.url || url, response.status);\n\t\t\t} finally {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\turl,\n\t\t\t\ttitle: \"Error\",\n\t\t\t\tlinks: [],\n\t\t\t\tforms: [],\n\t\t\t\ttext: \"\",\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate parseHTML(html: string, url: string, status: number): PageState {\n\t\tconst titleMatch = html.match(/<title>([^<]*)<\\/title>/i);\n\t\tconst links = [...html.matchAll(/href=\"([^\"]+)\"/gi)]\n\t\t\t.map((match) => match[1])\n\t\t\t.filter((link) => link.startsWith(\"http\"));\n\t\tconst forms = [...html.matchAll(/<form[^>]*action=\"([^\"]*)\"[^>]*>([\\s\\S]*?)<\\/form>/gi)].map((match) => ({\n\t\t\taction: match[1] || url,\n\t\t\tfields: [...match[2].matchAll(/name=\"([^\"]*)\"/gi)].map((field) => field[1]),\n\t\t}));\n\t\tconst text = html\n\t\t\t.replace(/<script[\\s\\S]*?<\\/script>/gi, \"\")\n\t\t\t.replace(/<style[\\s\\S]*?<\\/style>/gi, \"\")\n\t\t\t.replace(/<[^>]+>/g, \" \")\n\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t.trim();\n\n\t\treturn {\n\t\t\turl,\n\t\t\ttitle: titleMatch?.[1] || \"No Title\",\n\t\t\tlinks: [...new Set(links)].slice(0, 20),\n\t\t\tforms,\n\t\t\ttext,\n\t\t\tstatus,\n\t\t};\n\t}\n}\n\nexport class BrowserUseEvaluator extends EventEmitter {\n\tevaluate(result: BrowserUseResult): { passed: boolean; score: number } {\n\t\tconst passed = result.overallScore >= 0.6 && result.safety >= 0.5 && result.verification.pass;\n\t\treturn { passed, score: result.overallScore };\n\t}\n}\n\nexport class BrowserUseAgent extends EventEmitter {\n\tprivate engine: BrowserUseEngine;\n\tprivate evaluator: BrowserUseEvaluator;\n\tprivate sessions: Map<string, PageState> = new Map();\n\tprivate verifier: PostconditionVerifier;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.engine = new BrowserUseEngine();\n\t\tthis.evaluator = new BrowserUseEvaluator();\n\t\tthis.verifier = new PostconditionVerifier();\n\t}\n\n\tasync execute(task: BrowserTask): Promise<BrowserUseResult> {\n\t\tconst pageState = await this.engine.navigate(task.url);\n\t\tthis.sessions.set(task.sessionId || \"default\", pageState);\n\t\tconst verification = await this.verifier.verify(task.postconditions ?? [{ kind: \"text\", pattern: \"\\\\S\" }], {\n\t\t\tcurrentUrl: pageState.url,\n\t\t\ttext: pageState.text ?? \"\",\n\t\t\tapiStatus: pageState.status,\n\t\t});\n\t\tconst observed = pageState.error === undefined && (pageState.status === undefined || pageState.status < 500);\n\t\tconst taskCompletion = verification.pass ? 1 : observed ? 0.4 : 0;\n\t\tconst pageQuality = observed\n\t\t\t? Math.min(\n\t\t\t\t\t1,\n\t\t\t\t\t(pageState.links.length > 0 ? 0.25 : 0) +\n\t\t\t\t\t\t(pageState.forms.length > 0 ? 0.25 : 0) +\n\t\t\t\t\t\t(pageState.text ? 0.5 : 0),\n\t\t\t\t)\n\t\t\t: 0;\n\t\tconst navEfficiency = observed ? 0.9 : 0;\n\t\tconst safety = verification.failures.length === 0 ? 1 : 0.7;\n\t\tconst overallScore = Number(\n\t\t\t(taskCompletion * 0.45 + pageQuality * 0.2 + navEfficiency * 0.2 + safety * 0.15).toFixed(2),\n\t\t);\n\t\tconst result: BrowserUseResult = {\n\t\t\tsuccess: observed && verification.pass,\n\t\t\tpageState,\n\t\t\ttaskCompletion,\n\t\t\tpageQuality,\n\t\t\tnavEfficiency,\n\t\t\tsafety,\n\t\t\toverallScore,\n\t\t\tverification,\n\t\t\trepairsAttempted: verification.pass ? 0 : 1,\n\t\t};\n\n\t\tconst evaluation = this.evaluator.evaluate(result);\n\t\tthis.emit(\"taskComplete\", { task, result, evaluation });\n\n\t\treturn result;\n\t}\n\n\tgetSession(sessionId: string): PageState | undefined {\n\t\treturn this.sessions.get(sessionId);\n\t}\n}\n\nexport default BrowserUseAgent;\n"]}
@@ -0,0 +1,77 @@
1
+ export interface ShellSegment {
2
+ /** Raw top-level command text (split on `;`, `&&`, `||`, `&`, newline). */
3
+ readonly text: string;
4
+ /** Coarse quote-aware tokens for this segment. */
5
+ readonly tokens: readonly string[];
6
+ }
7
+ export interface SubcommandNode {
8
+ readonly kind: "dollar_paren" | "backtick";
9
+ readonly inner: string;
10
+ readonly depth: number;
11
+ }
12
+ export interface SubshellNode {
13
+ readonly inner: string;
14
+ readonly depth: number;
15
+ }
16
+ export interface ProcessSubNode {
17
+ readonly direction: "in" | "out";
18
+ readonly inner: string;
19
+ readonly depth: number;
20
+ }
21
+ export interface EnvAssignment {
22
+ readonly name: string;
23
+ /** Raw value text exactly as written (may itself contain expansions). */
24
+ readonly value: string;
25
+ readonly position: "prefix" | "export" | "env" | "inline";
26
+ readonly loaderInjection: boolean;
27
+ readonly sensitiveName: boolean;
28
+ }
29
+ export interface ExpansionNode {
30
+ readonly kind: "var" | "brace";
31
+ readonly name: string;
32
+ readonly depth: number;
33
+ }
34
+ export interface DecoderPipeline {
35
+ readonly stages: readonly string[];
36
+ readonly decoderIndex: number;
37
+ readonly executorIndex: number;
38
+ readonly executor: string;
39
+ }
40
+ export interface ParseDiagnostic {
41
+ readonly code: string;
42
+ readonly message: string;
43
+ readonly fatal: boolean;
44
+ }
45
+ export interface ShellAnalysis {
46
+ readonly raw: string;
47
+ readonly segments: readonly ShellSegment[];
48
+ readonly subcommands: readonly SubcommandNode[];
49
+ readonly subshells: readonly SubshellNode[];
50
+ readonly processSubstitutions: readonly ProcessSubNode[];
51
+ readonly assignments: readonly EnvAssignment[];
52
+ readonly dynamicExpansions: readonly ExpansionNode[];
53
+ readonly decoderPipelines: readonly DecoderPipeline[];
54
+ readonly wrapperDepth: number;
55
+ readonly diagnostics: readonly ParseDiagnostic[];
56
+ }
57
+ export type CommandAction = "allow" | "confirm" | "block" | "escalate";
58
+ export interface RiskReason {
59
+ readonly code: string;
60
+ readonly message: string;
61
+ }
62
+ export interface CommandRiskV2Verdict {
63
+ readonly action: CommandAction;
64
+ readonly reasons: readonly RiskReason[];
65
+ /** Effective command strings after unwrapping dynamic structures. */
66
+ readonly normalizedCommands: readonly string[];
67
+ readonly analysis: ShellAnalysis;
68
+ }
69
+ /** Public: analyze a shell command into structural metadata. */
70
+ export declare function analyzeShellCommandV2(command: string): ShellAnalysis;
71
+ /**
72
+ * Public: classify a shell command into allow / confirm / block / escalate,
73
+ * composing the existing `classifyShellCommand` verdict with V2 structural
74
+ * detections. The result never lowers the existing risk tier.
75
+ */
76
+ export declare function classifyCommandRiskV2(command: string): CommandRiskV2Verdict;
77
+ //# sourceMappingURL=command-safety-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-safety-parser.d.ts","sourceRoot":"","sources":["../../src/core/command-safety-parser.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lane SA3 - Command Safety Parser V2.\n *\n * Pure, side-effect-free shell command analysis layered on top of the existing\n * `classifyShellCommand` engine. It adds quoting-aware detection of:\n * - command substitution: `$(...)` and backticks\n * - subshell grouping: `(...)`\n * - process substitution: `<(...)` and `>(...)`\n * - environment assignment injection: `VAR=... cmd`, `export VAR=...`, `env VAR=...`\n * - dynamic expansions: `$VAR`, `${VAR}`\n * - decoder pipelines: `base64 -d` / `xxd -r` / `openssl enc -d` feeding a shell\n * - wrapper nesting depth and parser diagnostics (fail-closed)\n *\n * It does NOT execute, decode, or normalize away the original command. The\n * classifier composes the existing verdict with V2 detections and never lowers\n * the existing risk tier.\n */\nimport { classifyShellCommand } from \"./command-safety.ts\";\n\n/** Maximum structural recursion depth ($() inside $(...) inside ...). */\nconst MAX_SCAN_DEPTH = 6;\n\n/** Executables that decode and/or execute an encoded payload. */\nconst DECODER_EXECUTABLES = new Set<string>([\n\t\"sh\",\n\t\"bash\",\n\t\"zsh\",\n\t\"dash\",\n\t\"ksh\",\n\t\"ash\",\n\t\"eval\",\n\t\"source\",\n\t\".\",\n\t\"python\",\n\t\"python2\",\n\t\"python3\",\n\t\"node\",\n\t\"perl\",\n\t\"ruby\",\n\t\"php\",\n\t\"lua\",\n\t\"expect\",\n\t\"env\",\n\t\"xargs\",\n]);\n\n/**\n * Environment variable names that inject code or redirect runtime loader\n * behavior. Assigning any of these on a command line is treated as a loader /\n * runtime injection attempt.\n */\nconst LOADER_INJECTION_ENV = new Set<string>([\n\t\"LD_PRELOAD\",\n\t\"LD_LIBRARY_PATH\",\n\t\"LD_AUDIT\",\n\t\"LD_BIND_NOW\",\n\t\"LD_PROFILE\",\n\t\"DYLD_INSERT_LIBRARIES\",\n\t\"DYLD_LIBRARY_PATH\",\n\t\"DYLD_FALLBACK_LIBRARY_PATH\",\n\t\"NODE_OPTIONS\",\n\t\"NODE_PATH\",\n\t\"NODE_REPL_EXTERNAL_MODULE\",\n\t\"NODE_EXTRA_CA_CERTS\",\n\t\"NODE_TLS_REJECT_UNAUTHORIZED\",\n\t\"PYTHONPATH\",\n\t\"PYTHONHOME\",\n\t\"PYTHONSTARTUP\",\n\t\"PYTHONINSPECT\",\n\t\"PERL5LIB\",\n\t\"PERLLIB\",\n\t\"PERL5OPT\",\n\t\"RUBYLIB\",\n\t\"RUBYOPT\",\n\t\"RUBYPATH\",\n\t\"JAVA_TOOL_OPTIONS\",\n\t\"_JAVA_OPTIONS\",\n\t\"JDK_JAVA_OPTIONS\",\n\t\"MAVEN_OPTS\",\n]);\n\n/** Exact sensitive variable names (do not end in a standard suffix). */\nconst SENSITIVE_NAME_EXACT = new Set<string>([\n\t\"AWS_ACCESS_KEY_ID\",\n\t\"AWS_SECRET_ACCESS_KEY\",\n\t\"AWS_SESSION_TOKEN\",\n\t\"GITHUB_TOKEN\",\n\t\"GH_TOKEN\",\n\t\"GITLAB_TOKEN\",\n\t\"NPM_TOKEN\",\n\t\"NODE_AUTH_TOKEN\",\n]);\n\n/** Sensitive variable name suffixes. */\nconst SENSITIVE_NAME_REGEX =\n\t/(^|_)(API_KEY|API_TOKEN|ACCESS_TOKEN|SECRET|SECRET_KEY|PRIVATE_KEY|PASSWORD|PASSWD|TOKEN)$/i;\n\n/**\n * Commands whose arguments become filesystem or history targets. An\n * unresolved `$VAR` expansion in their argument position is treated as a\n * dynamic target (could expand to /, ~, or a sensitive path).\n */\nconst RISKY_EXPANSION_EXEC = new Set<string>([\n\t\"rm\",\n\t\"dd\",\n\t\"mkfs\",\n\t\"find\",\n\t\"git\",\n\t\"chmod\",\n\t\"chown\",\n\t\"cp\",\n\t\"mv\",\n\t\"install\",\n\t\"rsync\",\n\t\"scp\",\n]);\n\nexport interface ShellSegment {\n\t/** Raw top-level command text (split on `;`, `&&`, `||`, `&`, newline). */\n\treadonly text: string;\n\t/** Coarse quote-aware tokens for this segment. */\n\treadonly tokens: readonly string[];\n}\n\nexport interface SubcommandNode {\n\treadonly kind: \"dollar_paren\" | \"backtick\";\n\treadonly inner: string;\n\treadonly depth: number;\n}\n\nexport interface SubshellNode {\n\treadonly inner: string;\n\treadonly depth: number;\n}\n\nexport interface ProcessSubNode {\n\treadonly direction: \"in\" | \"out\";\n\treadonly inner: string;\n\treadonly depth: number;\n}\n\nexport interface EnvAssignment {\n\treadonly name: string;\n\t/** Raw value text exactly as written (may itself contain expansions). */\n\treadonly value: string;\n\treadonly position: \"prefix\" | \"export\" | \"env\" | \"inline\";\n\treadonly loaderInjection: boolean;\n\treadonly sensitiveName: boolean;\n}\n\nexport interface ExpansionNode {\n\treadonly kind: \"var\" | \"brace\";\n\treadonly name: string;\n\treadonly depth: number;\n}\n\nexport interface DecoderPipeline {\n\treadonly stages: readonly string[];\n\treadonly decoderIndex: number;\n\treadonly executorIndex: number;\n\treadonly executor: string;\n}\n\nexport interface ParseDiagnostic {\n\treadonly code: string;\n\treadonly message: string;\n\treadonly fatal: boolean;\n}\n\nexport interface ShellAnalysis {\n\treadonly raw: string;\n\treadonly segments: readonly ShellSegment[];\n\treadonly subcommands: readonly SubcommandNode[];\n\treadonly subshells: readonly SubshellNode[];\n\treadonly processSubstitutions: readonly ProcessSubNode[];\n\treadonly assignments: readonly EnvAssignment[];\n\treadonly dynamicExpansions: readonly ExpansionNode[];\n\treadonly decoderPipelines: readonly DecoderPipeline[];\n\treadonly wrapperDepth: number;\n\treadonly diagnostics: readonly ParseDiagnostic[];\n}\n\nexport type CommandAction = \"allow\" | \"confirm\" | \"block\" | \"escalate\";\n\nexport interface RiskReason {\n\treadonly code: string;\n\treadonly message: string;\n}\n\nexport interface CommandRiskV2Verdict {\n\treadonly action: CommandAction;\n\treadonly reasons: readonly RiskReason[];\n\t/** Effective command strings after unwrapping dynamic structures. */\n\treadonly normalizedCommands: readonly string[];\n\treadonly analysis: ShellAnalysis;\n}\n\nconst ACTION_RANK: Readonly<Record<CommandAction, number>> = {\n\tallow: 0,\n\tconfirm: 1,\n\tescalate: 2,\n\tblock: 3,\n};\n\nfunction isWhitespace(ch: string): boolean {\n\treturn ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\f\" || ch === \"\\v\";\n}\n\nfunction isSensitiveEnvName(name: string): boolean {\n\tif (SENSITIVE_NAME_EXACT.has(name)) return true;\n\treturn SENSITIVE_NAME_REGEX.test(name);\n}\n\n/** Split a command into top-level command segments on `;`, `&&`, `||`, `&`, newline. */\nfunction splitTopLevelCommands(command: string): string[] {\n\tconst segments: string[] = [];\n\tlet buf = \"\";\n\tlet quote: string | undefined;\n\tlet escaped = false;\n\tconst flush = (): void => {\n\t\tconst trimmed = buf.trim();\n\t\tif (trimmed) segments.push(trimmed);\n\t\tbuf = \"\";\n\t};\n\tfor (let i = 0; i < command.length; i += 1) {\n\t\tconst ch = command[i];\n\t\tconst next = command[i + 1];\n\t\tif (escaped) {\n\t\t\tbuf += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\tbuf += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tbuf += ch;\n\t\t\tif (ch === quote) quote = undefined;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tquote = ch;\n\t\t\tbuf += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\") {\n\t\t\tflush();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"&\") {\n\t\t\tflush();\n\t\t\tif (next === \"&\") i += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"|\") {\n\t\t\tif (next === \"|\") {\n\t\t\t\tflush();\n\t\t\t\ti += 1;\n\t\t\t} else {\n\t\t\t\t// single pipe stays within the segment (decoder pipeline detection)\n\t\t\t\tbuf += ch;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\n\" || ch === \"\\r\") {\n\t\t\tflush();\n\t\t\tcontinue;\n\t\t}\n\t\tbuf += ch;\n\t}\n\tflush();\n\treturn segments;\n}\n\n/** Coarse quote-aware tokenizer for one segment. */\nfunction tokenize(segment: string): string[] {\n\tconst tokens: string[] = [];\n\tlet cur = \"\";\n\tlet quote: string | undefined;\n\tlet escaped = false;\n\tfor (const ch of segment) {\n\t\tif (escaped) {\n\t\t\tcur += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tif (ch === quote) {\n\t\t\t\tquote = undefined;\n\t\t\t} else {\n\t\t\t\tcur += ch;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (isWhitespace(ch)) {\n\t\t\tif (cur) {\n\t\t\t\ttokens.push(cur);\n\t\t\t\tcur = \"\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tcur += ch;\n\t}\n\tif (cur) tokens.push(cur);\n\treturn tokens;\n}\n\n/** Split a segment on single `|` (pipe stages), quote-aware. `||` is gone already. */\nfunction splitPipeStages(segment: string): string[] {\n\tconst stages: string[] = [];\n\tlet buf = \"\";\n\tlet quote: string | undefined;\n\tlet escaped = false;\n\tconst flush = (): void => {\n\t\tconst trimmed = buf.trim();\n\t\tif (trimmed) stages.push(trimmed);\n\t\tbuf = \"\";\n\t};\n\tfor (let i = 0; i < segment.length; i += 1) {\n\t\tconst ch = segment[i];\n\t\tif (escaped) {\n\t\t\tbuf += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\tbuf += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tbuf += ch;\n\t\t\tif (ch === quote) quote = undefined;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tquote = ch;\n\t\t\tbuf += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"|\") {\n\t\t\tflush();\n\t\t\tcontinue;\n\t\t}\n\t\tbuf += ch;\n\t}\n\tflush();\n\treturn stages;\n}\n\n/** Return the index of the `)` matching the `(` at `openIndex`, or -1. */\nfunction findMatchingParen(text: string, openIndex: number): number {\n\tif (text[openIndex] !== \"(\") return -1;\n\tlet depth = 0;\n\tlet quote: string | undefined;\n\tlet escaped = false;\n\tfor (let i = openIndex; i < text.length; i += 1) {\n\t\tconst ch = text[i];\n\t\tif (escaped) {\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tif (ch === quote) quote = undefined;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"(\") depth += 1;\n\t\telse if (ch === \")\") {\n\t\t\tdepth -= 1;\n\t\t\tif (depth === 0) return i;\n\t\t}\n\t}\n\treturn -1;\n}\n\ninterface RawExpansion {\n\treadonly kind: \"var\" | \"brace\";\n\treadonly name: string;\n\treadonly end: number;\n}\n\n/** Read a `$VAR` or `${VAR}` expansion starting at `dollarIndex`. Returns null for `${...}` ops we do not model. */\nfunction readExpansion(text: string, dollarIndex: number): RawExpansion | null {\n\tconst next = text[dollarIndex + 1];\n\tif (next === \"{\") {\n\t\tconst close = text.indexOf(\"}\", dollarIndex + 2);\n\t\tif (close === -1) return null;\n\t\tconst name = text.slice(dollarIndex + 2, close);\n\t\tif (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) return null;\n\t\treturn { kind: \"brace\", name, end: close + 1 };\n\t}\n\tif (next && /[A-Za-z_]/.test(next)) {\n\t\tconst match = /^[A-Za-z_][A-Za-z0-9_]*/.exec(text.slice(dollarIndex + 1));\n\t\tif (match) return { kind: \"var\", name: match[0], end: dollarIndex + 1 + match[0].length };\n\t}\n\treturn null;\n}\n\ninterface ScanState {\n\treadonly subcommands: SubcommandNode[];\n\treadonly subshells: SubshellNode[];\n\treadonly processSubs: ProcessSubNode[];\n\treadonly expansions: ExpansionNode[];\n\treadonly diagnostics: ParseDiagnostic[];\n\tmaxDepth: number;\n}\n\n/** Recursively scan `text` for structural shell nodes, quote-aware. */\nfunction scanStructural(text: string, state: ScanState, depth: number): void {\n\tif (depth > MAX_SCAN_DEPTH) {\n\t\tstate.diagnostics.push({\n\t\t\tcode: \"parser.depth_exceeded\",\n\t\t\tmessage: `Wrapper nesting exceeded depth ${MAX_SCAN_DEPTH}.`,\n\t\t\tfatal: false,\n\t\t});\n\t\treturn;\n\t}\n\tlet i = 0;\n\tlet quote: string | undefined;\n\tlet escaped = false;\n\tconst n = text.length;\n\twhile (i < n) {\n\t\tconst ch = text[i];\n\t\tconst next = text[i + 1];\n\t\tif (escaped) {\n\t\t\tescaped = false;\n\t\t\ti += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\ti += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\t// Inside double quotes, $() and backticks still expand; `(` alone is literal.\n\t\t\tif (quote === '\"' && ch === \"$\" && next === \"(\") {\n\t\t\t\tconst end = findMatchingParen(text, i + 1);\n\t\t\t\tif (end === -1) {\n\t\t\t\t\tstate.diagnostics.push({\n\t\t\t\t\t\tcode: \"parser.unterminated_dollar_paren\",\n\t\t\t\t\t\tmessage: \"Unterminated $( ... ).\",\n\t\t\t\t\t\tfatal: true,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst inner = text.slice(i + 2, end);\n\t\t\t\tstate.subcommands.push({ kind: \"dollar_paren\", inner, depth });\n\t\t\t\tstate.maxDepth = Math.max(state.maxDepth, depth);\n\t\t\t\tscanStructural(inner, state, depth + 1);\n\t\t\t\ti = end + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (quote === '\"' && ch === \"`\") {\n\t\t\t\tconst end = text.indexOf(\"`\", i + 1);\n\t\t\t\tif (end === -1) {\n\t\t\t\t\tstate.diagnostics.push({\n\t\t\t\t\t\tcode: \"parser.unterminated_backtick\",\n\t\t\t\t\t\tmessage: \"Unterminated backtick.\",\n\t\t\t\t\t\tfatal: true,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst inner = text.slice(i + 1, end);\n\t\t\t\tstate.subcommands.push({ kind: \"backtick\", inner, depth });\n\t\t\t\tstate.maxDepth = Math.max(state.maxDepth, depth);\n\t\t\t\tscanStructural(inner, state, depth + 1);\n\t\t\t\ti = end + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (quote === '\"' && ch === \"$\") {\n\t\t\t\tconst exp = readExpansion(text, i);\n\t\t\t\tif (exp) {\n\t\t\t\t\tstate.expansions.push({ kind: exp.kind, name: exp.name, depth });\n\t\t\t\t\ti = exp.end;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ch === quote) quote = undefined;\n\t\t\ti += 1;\n\t\t\tcontinue;\n\t\t}\n\t\t// unquoted\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tquote = ch;\n\t\t\ti += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"$\" && next === \"(\") {\n\t\t\tconst end = findMatchingParen(text, i + 1);\n\t\t\tif (end === -1) {\n\t\t\t\tstate.diagnostics.push({\n\t\t\t\t\tcode: \"parser.unterminated_dollar_paren\",\n\t\t\t\t\tmessage: \"Unterminated $( ... ).\",\n\t\t\t\t\tfatal: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst inner = text.slice(i + 2, end);\n\t\t\tstate.subcommands.push({ kind: \"dollar_paren\", inner, depth });\n\t\t\tstate.maxDepth = Math.max(state.maxDepth, depth);\n\t\t\tscanStructural(inner, state, depth + 1);\n\t\t\ti = end + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"`\") {\n\t\t\tconst end = text.indexOf(\"`\", i + 1);\n\t\t\tif (end === -1) {\n\t\t\t\tstate.diagnostics.push({\n\t\t\t\t\tcode: \"parser.unterminated_backtick\",\n\t\t\t\t\tmessage: \"Unterminated backtick.\",\n\t\t\t\t\tfatal: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst inner = text.slice(i + 1, end);\n\t\t\tstate.subcommands.push({ kind: \"backtick\", inner, depth });\n\t\t\tstate.maxDepth = Math.max(state.maxDepth, depth);\n\t\t\tscanStructural(inner, state, depth + 1);\n\t\t\ti = end + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif ((ch === \"<\" || ch === \">\") && next === \"(\") {\n\t\t\tconst end = findMatchingParen(text, i + 1);\n\t\t\tif (end === -1) {\n\t\t\t\tstate.diagnostics.push({\n\t\t\t\t\tcode: \"parser.unterminated_process_sub\",\n\t\t\t\t\tmessage: \"Unterminated process substitution.\",\n\t\t\t\t\tfatal: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst inner = text.slice(i + 2, end);\n\t\t\tstate.processSubs.push({ direction: ch === \"<\" ? \"in\" : \"out\", inner, depth });\n\t\t\tstate.maxDepth = Math.max(state.maxDepth, depth);\n\t\t\tscanStructural(inner, state, depth + 1);\n\t\t\ti = end + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"(\") {\n\t\t\tconst end = findMatchingParen(text, i);\n\t\t\tif (end === -1) {\n\t\t\t\tstate.diagnostics.push({\n\t\t\t\t\tcode: \"parser.unterminated_subshell\",\n\t\t\t\t\tmessage: \"Unterminated subshell.\",\n\t\t\t\t\tfatal: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst inner = text.slice(i + 1, end);\n\t\t\tstate.subshells.push({ inner, depth });\n\t\t\tstate.maxDepth = Math.max(state.maxDepth, depth);\n\t\t\tscanStructural(inner, state, depth + 1);\n\t\t\ti = end + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"$\") {\n\t\t\tconst exp = readExpansion(text, i);\n\t\t\tif (exp) {\n\t\t\t\tstate.expansions.push({ kind: exp.kind, name: exp.name, depth });\n\t\t\t\ti = exp.end;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\ti += 1;\n\t}\n\tif (quote !== undefined) {\n\t\tstate.diagnostics.push({\n\t\t\tcode: \"parser.unterminated_quote\",\n\t\t\tmessage: `Unterminated ${quote} quote.`,\n\t\t\tfatal: true,\n\t\t});\n\t}\n}\n\n/** Detect leading `VAR=value` assignments, including `export` / `env` prefixes. */\nfunction detectAssignments(segment: string): EnvAssignment[] {\n\tconst tokens = tokenize(segment);\n\tif (tokens.length === 0) return [];\n\tconst assignments: EnvAssignment[] = [];\n\tlet idx = 0;\n\tlet position: EnvAssignment[\"position\"] = \"prefix\";\n\tconst head = tokens[0]?.toLowerCase();\n\tif (head === \"export\" || head === \"set\") {\n\t\tposition = \"export\";\n\t\tidx = 1;\n\t} else if (head === \"env\") {\n\t\tposition = \"env\";\n\t\tidx = 1;\n\t\t// skip leading env options (-i, -u NAME, -C, ...). -u / --unset consume a name token.\n\t\twhile (idx < tokens.length) {\n\t\t\tconst tok = tokens[idx];\n\t\t\tif (!tok || !tok.startsWith(\"-\") || tok === \"--\") {\n\t\t\t\tif (tok === \"--\") idx += 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tidx += 1;\n\t\t\tconst lower = tok.toLowerCase();\n\t\t\tif (lower === \"-u\" || lower === \"--unset\" || lower === \"-s\" || lower === \"--ignore-environment\") {\n\t\t\t\tif (idx < tokens.length && !tokens[idx].includes(\"=\")) idx += 1;\n\t\t\t}\n\t\t}\n\t}\n\tconst assignRegex = /^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/;\n\twhile (idx < tokens.length) {\n\t\tconst tok = tokens[idx];\n\t\tconst match = assignRegex.exec(tok);\n\t\tif (!match) break;\n\t\tconst name = match[1];\n\t\tassignments.push({\n\t\t\tname,\n\t\t\tvalue: match[2],\n\t\t\tposition,\n\t\t\tloaderInjection: LOADER_INJECTION_ENV.has(name),\n\t\t\tsensitiveName: isSensitiveEnvName(name),\n\t\t});\n\t\tidx += 1;\n\t}\n\treturn assignments;\n}\n\nfunction isDecoderStage(exec: string, tokens: readonly string[]): boolean {\n\tif (exec === \"base64\") {\n\t\treturn tokens.slice(1).some((t) => t === \"-d\" || t === \"--decode\" || t === \"-D\");\n\t}\n\tif (exec === \"xxd\") {\n\t\treturn tokens.slice(1).some((t) => t === \"-r\" || t === \"-rp\" || t === \"-r -p\");\n\t}\n\tif (exec === \"openssl\") {\n\t\tconst lower = tokens.map((t) => t.toLowerCase());\n\t\treturn lower.includes(\"enc\") && lower.some((t) => t === \"-d\" || t === \"-decrypt\" || t === \"-aes-256-cbc\");\n\t}\n\treturn exec === \"printf\" || exec === \"uudecode\" || exec === \"mmencode\" || exec === \"recode\";\n}\n\nfunction detectDecoderPipeline(segment: string): DecoderPipeline | null {\n\tconst stages = splitPipeStages(segment);\n\tif (stages.length < 2) return null;\n\tlet decoderIndex = -1;\n\tlet executorIndex = -1;\n\tlet executor = \"\";\n\tfor (let i = 0; i < stages.length; i += 1) {\n\t\tconst toks = tokenize(stages[i]);\n\t\tconst exec = toks[0]?.toLowerCase();\n\t\tif (!exec) continue;\n\t\tif (decoderIndex === -1 && isDecoderStage(exec, toks)) decoderIndex = i;\n\t\tif (executorIndex === -1 && DECODER_EXECUTABLES.has(exec)) {\n\t\t\texecutorIndex = i;\n\t\t\texecutor = exec;\n\t\t}\n\t}\n\tif (decoderIndex !== -1 && executorIndex !== -1 && executorIndex >= decoderIndex) {\n\t\treturn { stages, decoderIndex, executorIndex, executor };\n\t}\n\treturn null;\n}\n\n/** Public: analyze a shell command into structural metadata. */\nexport function analyzeShellCommandV2(command: string): ShellAnalysis {\n\tconst raw = command;\n\tconst topSegments = splitTopLevelCommands(command);\n\tconst segments: ShellSegment[] = topSegments.map((text) => ({ text, tokens: tokenize(text) }));\n\n\tconst state: ScanState = {\n\t\tsubcommands: [],\n\t\tsubshells: [],\n\t\tprocessSubs: [],\n\t\texpansions: [],\n\t\tdiagnostics: [],\n\t\tmaxDepth: 0,\n\t};\n\tscanStructural(command, state, 0);\n\n\tconst assignments: EnvAssignment[] = [];\n\tfor (const seg of topSegments) assignments.push(...detectAssignments(seg));\n\n\tconst decoderPipelines: DecoderPipeline[] = [];\n\tfor (const seg of topSegments) {\n\t\tconst dp = detectDecoderPipeline(seg);\n\t\tif (dp) decoderPipelines.push(dp);\n\t}\n\n\treturn {\n\t\traw,\n\t\tsegments,\n\t\tsubcommands: state.subcommands,\n\t\tsubshells: state.subshells,\n\t\tprocessSubstitutions: state.processSubs,\n\t\tassignments,\n\t\tdynamicExpansions: state.expansions,\n\t\tdecoderPipelines,\n\t\twrapperDepth: state.maxDepth,\n\t\tdiagnostics: state.diagnostics,\n\t};\n}\n\nfunction bump(current: CommandAction, candidate: CommandAction): CommandAction {\n\treturn ACTION_RANK[candidate] > ACTION_RANK[current] ? candidate : current;\n}\n\n/**\n * Public: classify a shell command into allow / confirm / block / escalate,\n * composing the existing `classifyShellCommand` verdict with V2 structural\n * detections. The result never lowers the existing risk tier.\n */\nexport function classifyCommandRiskV2(command: string): CommandRiskV2Verdict {\n\tconst analysis = analyzeShellCommandV2(command);\n\tconst base = classifyShellCommand(command);\n\tlet action: CommandAction = base.risk === \"block\" ? \"block\" : base.risk === \"confirm\" ? \"confirm\" : \"allow\";\n\tconst reasons: RiskReason[] = [{ code: base.rule, message: base.reason }];\n\tconst normalizedCommands: string[] = [command];\n\tfor (const node of analysis.subcommands) normalizedCommands.push(node.inner);\n\tfor (const node of analysis.subshells) normalizedCommands.push(node.inner);\n\tfor (const node of analysis.processSubstitutions) normalizedCommands.push(node.inner);\n\n\t// Privilege commands escalate (sudo / su / doas / pkexec). Never auto-allowed headlessly.\n\tif (base.rule.startsWith(\"priv.\")) {\n\t\treasons.push({ code: \"priv.escalate\", message: \"Privilege escalation requires explicit human approval.\" });\n\t\taction = bump(action, \"escalate\");\n\t}\n\n\t// Inspect dynamic-structure inner content for hidden destructive commands.\n\tfor (const node of analysis.subcommands) {\n\t\tconst innerVerdict = classifyShellCommand(node.inner);\n\t\tif (innerVerdict.risk === \"block\") {\n\t\t\treasons.push({\n\t\t\t\tcode: `exec.inner_block:${innerVerdict.rule}`,\n\t\t\t\tmessage: `Command substitution hides a destructive command: ${innerVerdict.reason}`,\n\t\t\t});\n\t\t\taction = bump(action, \"block\");\n\t\t} else if (innerVerdict.risk === \"confirm\") {\n\t\t\treasons.push({\n\t\t\t\tcode: `exec.inner_confirm:${innerVerdict.rule}`,\n\t\t\t\tmessage: `Command substitution hides a risky command: ${innerVerdict.reason}`,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const node of analysis.subshells) {\n\t\tconst innerVerdict = classifyShellCommand(node.inner);\n\t\tif (innerVerdict.risk === \"block\") {\n\t\t\treasons.push({\n\t\t\t\tcode: `exec.inner_block:${innerVerdict.rule}`,\n\t\t\t\tmessage: `Subshell hides a destructive command: ${innerVerdict.reason}`,\n\t\t\t});\n\t\t\taction = bump(action, \"block\");\n\t\t} else if (innerVerdict.risk === \"confirm\") {\n\t\t\treasons.push({\n\t\t\t\tcode: `exec.inner_confirm:${innerVerdict.rule}`,\n\t\t\t\tmessage: `Subshell hides a risky command: ${innerVerdict.reason}`,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const node of analysis.processSubstitutions) {\n\t\tconst innerVerdict = classifyShellCommand(node.inner);\n\t\tif (innerVerdict.risk === \"block\") {\n\t\t\treasons.push({\n\t\t\t\tcode: `exec.inner_block:${innerVerdict.rule}`,\n\t\t\t\tmessage: `Process substitution hides a destructive command: ${innerVerdict.reason}`,\n\t\t\t});\n\t\t\taction = bump(action, \"block\");\n\t\t}\n\t}\n\n\tconst hasDynamic =\n\t\tanalysis.subcommands.length > 0 || analysis.subshells.length > 0 || analysis.processSubstitutions.length > 0;\n\n\t// Dynamic plus already-risky base -> escalate (the dynamic part can hide a worse payload).\n\tif (hasDynamic && base.risk !== \"allow\") {\n\t\treasons.push({\n\t\t\tcode: \"exec.dynamic_elevated\",\n\t\t\tmessage: \"Dynamic shell structure combined with a risky base command.\",\n\t\t});\n\t\taction = bump(action, \"escalate\");\n\t}\n\n\tif (analysis.subcommands.length > 0) {\n\t\treasons.push({\n\t\t\tcode: \"exec.command_substitution\",\n\t\t\tmessage: \"Command substitution $(...) or backticks can execute arbitrary commands.\",\n\t\t});\n\t\taction = bump(action, \"confirm\");\n\t}\n\tif (analysis.subshells.length > 0) {\n\t\treasons.push({ code: \"exec.subshell\", message: \"Subshell grouping (...) can execute arbitrary commands.\" });\n\t\taction = bump(action, \"confirm\");\n\t}\n\tif (analysis.processSubstitutions.length > 0) {\n\t\treasons.push({\n\t\t\tcode: \"exec.process_substitution\",\n\t\t\tmessage: \"Process substitution <(...) or >(...) spawns a process.\",\n\t\t});\n\t\taction = bump(action, \"confirm\");\n\t}\n\n\tfor (const dp of analysis.decoderPipelines) {\n\t\treasons.push({\n\t\t\tcode: \"exec.decoder_pipeline\",\n\t\t\tmessage: `Decoder pipeline (${dp.stages[dp.decoderIndex]} -> ${dp.executor}) can execute a decoded payload.`,\n\t\t});\n\t\taction = bump(action, \"confirm\");\n\t}\n\n\tfor (const assignment of analysis.assignments) {\n\t\tif (assignment.loaderInjection) {\n\t\t\treasons.push({\n\t\t\t\tcode: \"env.loader_injection\",\n\t\t\t\tmessage: `Assignment sets loader/runtime injection variable ${assignment.name}.`,\n\t\t\t});\n\t\t\taction = bump(action, \"confirm\");\n\t\t} else if (assignment.sensitiveName) {\n\t\t\treasons.push({\n\t\t\t\tcode: \"env.sensitive_assignment\",\n\t\t\t\tmessage: `Assignment exposes a sensitive variable ${assignment.name} on the command line.`,\n\t\t\t});\n\t\t\taction = bump(action, \"confirm\");\n\t\t}\n\t}\n\n\t// Unresolved expansion inside a risky command's argument list (could expand to /, ~, or a sensitive path).\n\tfor (const seg of analysis.segments) {\n\t\tconst exec = seg.tokens[0]?.toLowerCase();\n\t\tif (!exec || !RISKY_EXPANSION_EXEC.has(exec)) continue;\n\t\tconst hasExpansion = seg.tokens.slice(1).some((tok) => tok.includes(\"$\"));\n\t\tif (hasExpansion) {\n\t\t\treasons.push({\n\t\t\t\tcode: \"exec.dynamic_target\",\n\t\t\t\tmessage: `Unresolved expansion in arguments of risky command '${exec}'.`,\n\t\t\t});\n\t\t\taction = bump(action, \"confirm\");\n\t\t}\n\t}\n\n\tfor (const diag of analysis.diagnostics) {\n\t\tif (diag.fatal) {\n\t\t\treasons.push({ code: diag.code, message: diag.message });\n\t\t\t// Parser fatal -> fail-closed to at least confirm (block stays block).\n\t\t\taction = bump(action, \"confirm\");\n\t\t}\n\t}\n\n\treturn { action, reasons, normalizedCommands, analysis };\n}\n"]}