open-multi-agent-kit 0.80.6 → 0.80.8

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 (949) hide show
  1. package/CHANGELOG.md +4 -20
  2. package/README.md +66 -16
  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 +7 -0
  21. package/dist/cli/args.js.map +1 -1
  22. package/dist/cli/config-selector.d.ts +1 -1
  23. package/dist/cli/config-selector.d.ts.map +1 -1
  24. package/dist/cli/config-selector.js +2 -2
  25. package/dist/cli/config-selector.js.map +1 -1
  26. package/dist/cli/file-processor.d.ts +1 -1
  27. package/dist/cli/file-processor.d.ts.map +1 -1
  28. package/dist/cli/file-processor.js.map +1 -1
  29. package/dist/cli/initial-message.d.ts +1 -1
  30. package/dist/cli/initial-message.d.ts.map +1 -1
  31. package/dist/cli/initial-message.js.map +1 -1
  32. package/dist/cli/jailbreak-args.d.ts +26 -0
  33. package/dist/cli/jailbreak-args.d.ts.map +1 -0
  34. package/dist/cli/jailbreak-args.js +86 -0
  35. package/dist/cli/jailbreak-args.js.map +1 -0
  36. package/dist/cli/list-models.d.ts.map +1 -1
  37. package/dist/cli/list-models.js +1 -1
  38. package/dist/cli/list-models.js.map +1 -1
  39. package/dist/cli/session-picker.d.ts.map +1 -1
  40. package/dist/cli/session-picker.js +1 -1
  41. package/dist/cli/session-picker.js.map +1 -1
  42. package/dist/commands/doctor-provider.d.ts +19 -0
  43. package/dist/commands/doctor-provider.d.ts.map +1 -0
  44. package/dist/commands/doctor-provider.js +123 -0
  45. package/dist/commands/doctor-provider.js.map +1 -0
  46. package/dist/commands/jailbreak.d.ts +49 -0
  47. package/dist/commands/jailbreak.d.ts.map +1 -0
  48. package/dist/commands/jailbreak.js +201 -0
  49. package/dist/commands/jailbreak.js.map +1 -0
  50. package/dist/config.d.ts +9 -4
  51. package/dist/config.d.ts.map +1 -1
  52. package/dist/config.js +34 -52
  53. package/dist/config.js.map +1 -1
  54. package/dist/core/agent-session-services.d.ts +2 -2
  55. package/dist/core/agent-session-services.d.ts.map +1 -1
  56. package/dist/core/agent-session-services.js.map +1 -1
  57. package/dist/core/agent-session.d.ts +36 -8
  58. package/dist/core/agent-session.d.ts.map +1 -1
  59. package/dist/core/agent-session.js +294 -14
  60. package/dist/core/agent-session.js.map +1 -1
  61. package/dist/core/auth-storage.d.ts +3 -3
  62. package/dist/core/auth-storage.d.ts.map +1 -1
  63. package/dist/core/auth-storage.js +4 -4
  64. package/dist/core/auth-storage.js.map +1 -1
  65. package/dist/core/bash-executor.d.ts +1 -0
  66. package/dist/core/bash-executor.d.ts.map +1 -1
  67. package/dist/core/bash-executor.js +2 -1
  68. package/dist/core/bash-executor.js.map +1 -1
  69. package/dist/core/browser-use.d.ts +45 -0
  70. package/dist/core/browser-use.d.ts.map +1 -0
  71. package/dist/core/browser-use.js +70 -0
  72. package/dist/core/browser-use.js.map +1 -0
  73. package/dist/core/command-safety-parser.d.ts +77 -0
  74. package/dist/core/command-safety-parser.d.ts.map +1 -0
  75. package/dist/core/command-safety-parser.js +763 -0
  76. package/dist/core/command-safety-parser.js.map +1 -0
  77. package/dist/core/command-safety.d.ts +11 -0
  78. package/dist/core/command-safety.d.ts.map +1 -0
  79. package/dist/core/command-safety.js +631 -0
  80. package/dist/core/command-safety.js.map +1 -0
  81. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  82. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  83. package/dist/core/compaction/branch-summarization.js +2 -8
  84. package/dist/core/compaction/branch-summarization.js.map +1 -1
  85. package/dist/core/compaction/compaction.d.ts +3 -84
  86. package/dist/core/compaction/compaction.d.ts.map +1 -1
  87. package/dist/core/compaction/compaction.js +11 -608
  88. package/dist/core/compaction/compaction.js.map +1 -1
  89. package/dist/core/compaction/utils.d.ts +2 -2
  90. package/dist/core/compaction/utils.d.ts.map +1 -1
  91. package/dist/core/compaction/utils.js.map +1 -1
  92. package/dist/core/compactor.d.ts +42 -0
  93. package/dist/core/compactor.d.ts.map +1 -0
  94. package/dist/core/compactor.js +131 -0
  95. package/dist/core/compactor.js.map +1 -0
  96. package/dist/core/context-budget-compressors.d.ts +50 -0
  97. package/dist/core/context-budget-compressors.d.ts.map +1 -0
  98. package/dist/core/context-budget-compressors.js +166 -0
  99. package/dist/core/context-budget-compressors.js.map +1 -0
  100. package/dist/core/context-budget-governor-v2.d.ts +7 -0
  101. package/dist/core/context-budget-governor-v2.d.ts.map +1 -0
  102. package/dist/core/context-budget-governor-v2.js +7 -0
  103. package/dist/core/context-budget-governor-v2.js.map +1 -0
  104. package/dist/core/context-budget-governor.d.ts +67 -0
  105. package/dist/core/context-budget-governor.d.ts.map +1 -0
  106. package/dist/core/context-budget-governor.js +224 -0
  107. package/dist/core/context-budget-governor.js.map +1 -0
  108. package/dist/core/context-budget-headroom-candidates.d.ts +3 -0
  109. package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -0
  110. package/dist/core/context-budget-headroom-candidates.js +85 -0
  111. package/dist/core/context-budget-headroom-candidates.js.map +1 -0
  112. package/dist/core/context-budget-headroom-types.d.ts +67 -0
  113. package/dist/core/context-budget-headroom-types.d.ts.map +1 -0
  114. package/dist/core/context-budget-headroom-types.js +46 -0
  115. package/dist/core/context-budget-headroom-types.js.map +1 -0
  116. package/dist/core/context-budget-headroom.d.ts +5 -0
  117. package/dist/core/context-budget-headroom.d.ts.map +1 -0
  118. package/dist/core/context-budget-headroom.js +123 -0
  119. package/dist/core/context-budget-headroom.js.map +1 -0
  120. package/dist/core/context-budget-relevance.d.ts +46 -0
  121. package/dist/core/context-budget-relevance.d.ts.map +1 -0
  122. package/dist/core/context-budget-relevance.js +329 -0
  123. package/dist/core/context-budget-relevance.js.map +1 -0
  124. package/dist/core/context-budget-system-prompt-items.d.ts +19 -0
  125. package/dist/core/context-budget-system-prompt-items.d.ts.map +1 -0
  126. package/dist/core/context-budget-system-prompt-items.js +143 -0
  127. package/dist/core/context-budget-system-prompt-items.js.map +1 -0
  128. package/dist/core/context-budget-system-prompt.d.ts +31 -0
  129. package/dist/core/context-budget-system-prompt.d.ts.map +1 -0
  130. package/dist/core/context-budget-system-prompt.js +87 -0
  131. package/dist/core/context-budget-system-prompt.js.map +1 -0
  132. package/dist/core/context-budget-token-counter.d.ts +34 -0
  133. package/dist/core/context-budget-token-counter.d.ts.map +1 -0
  134. package/dist/core/context-budget-token-counter.js +315 -0
  135. package/dist/core/context-budget-token-counter.js.map +1 -0
  136. package/dist/core/context-budget-v2-coverage.d.ts +5 -0
  137. package/dist/core/context-budget-v2-coverage.d.ts.map +1 -0
  138. package/dist/core/context-budget-v2-coverage.js +58 -0
  139. package/dist/core/context-budget-v2-coverage.js.map +1 -0
  140. package/dist/core/context-budget-v2-plan-hash.d.ts +12 -0
  141. package/dist/core/context-budget-v2-plan-hash.d.ts.map +1 -0
  142. package/dist/core/context-budget-v2-plan-hash.js +38 -0
  143. package/dist/core/context-budget-v2-plan-hash.js.map +1 -0
  144. package/dist/core/context-budget-v2-planner.d.ts +3 -0
  145. package/dist/core/context-budget-v2-planner.d.ts.map +1 -0
  146. package/dist/core/context-budget-v2-planner.js +143 -0
  147. package/dist/core/context-budget-v2-planner.js.map +1 -0
  148. package/dist/core/context-budget-v2-scoring.d.ts +14 -0
  149. package/dist/core/context-budget-v2-scoring.d.ts.map +1 -0
  150. package/dist/core/context-budget-v2-scoring.js +114 -0
  151. package/dist/core/context-budget-v2-scoring.js.map +1 -0
  152. package/dist/core/context-budget-v2-selection.d.ts +32 -0
  153. package/dist/core/context-budget-v2-selection.d.ts.map +1 -0
  154. package/dist/core/context-budget-v2-selection.js +158 -0
  155. package/dist/core/context-budget-v2-selection.js.map +1 -0
  156. package/dist/core/context-budget-v2-tiers.d.ts +15 -0
  157. package/dist/core/context-budget-v2-tiers.d.ts.map +1 -0
  158. package/dist/core/context-budget-v2-tiers.js +68 -0
  159. package/dist/core/context-budget-v2-tiers.js.map +1 -0
  160. package/dist/core/context-budget-v2-types.d.ts +92 -0
  161. package/dist/core/context-budget-v2-types.d.ts.map +1 -0
  162. package/dist/core/context-budget-v2-types.js +24 -0
  163. package/dist/core/context-budget-v2-types.js.map +1 -0
  164. package/dist/core/defaults.d.ts +1 -1
  165. package/dist/core/defaults.d.ts.map +1 -1
  166. package/dist/core/defaults.js.map +1 -1
  167. package/dist/core/diagnostics.d.ts +4 -0
  168. package/dist/core/diagnostics.d.ts.map +1 -1
  169. package/dist/core/diagnostics.js.map +1 -1
  170. package/dist/core/domain-confidence.d.ts +9 -0
  171. package/dist/core/domain-confidence.d.ts.map +1 -0
  172. package/dist/core/domain-confidence.js +39 -0
  173. package/dist/core/domain-confidence.js.map +1 -0
  174. package/dist/core/domain-dispatch.d.ts +44 -0
  175. package/dist/core/domain-dispatch.d.ts.map +1 -0
  176. package/dist/core/domain-dispatch.js +118 -0
  177. package/dist/core/domain-dispatch.js.map +1 -0
  178. package/dist/core/domain-loadouts.d.ts +76 -0
  179. package/dist/core/domain-loadouts.d.ts.map +1 -0
  180. package/dist/core/domain-loadouts.js +981 -0
  181. package/dist/core/domain-loadouts.js.map +1 -0
  182. package/dist/core/domain-registry.d.ts +7 -0
  183. package/dist/core/domain-registry.d.ts.map +1 -0
  184. package/dist/core/domain-registry.js +11 -0
  185. package/dist/core/domain-registry.js.map +1 -0
  186. package/dist/core/domain-router.d.ts +16 -0
  187. package/dist/core/domain-router.d.ts.map +1 -0
  188. package/dist/core/domain-router.js +24 -0
  189. package/dist/core/domain-router.js.map +1 -0
  190. package/dist/core/domain-score.d.ts +13 -0
  191. package/dist/core/domain-score.d.ts.map +1 -0
  192. package/dist/core/domain-score.js +48 -0
  193. package/dist/core/domain-score.js.map +1 -0
  194. package/dist/core/domain-trigger-match.d.ts +14 -0
  195. package/dist/core/domain-trigger-match.d.ts.map +1 -0
  196. package/dist/core/domain-trigger-match.js +51 -0
  197. package/dist/core/domain-trigger-match.js.map +1 -0
  198. package/dist/core/domain-types.d.ts +30 -0
  199. package/dist/core/domain-types.d.ts.map +1 -0
  200. package/dist/core/domain-types.js +2 -0
  201. package/dist/core/domain-types.js.map +1 -0
  202. package/dist/core/exact-cache-policy.d.ts +108 -0
  203. package/dist/core/exact-cache-policy.d.ts.map +1 -0
  204. package/dist/core/exact-cache-policy.js +184 -0
  205. package/dist/core/exact-cache-policy.js.map +1 -0
  206. package/dist/core/export-html/index.d.ts +1 -1
  207. package/dist/core/export-html/index.d.ts.map +1 -1
  208. package/dist/core/export-html/index.js.map +1 -1
  209. package/dist/core/export-html/template.js +2 -4
  210. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  211. package/dist/core/export-html/tool-renderer.js.map +1 -1
  212. package/dist/core/extensions/builtin/command-safety-gate.d.ts +80 -0
  213. package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -0
  214. package/dist/core/extensions/builtin/command-safety-gate.js +159 -0
  215. package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -0
  216. package/dist/core/extensions/builtin/todo-checklist.d.ts +20 -0
  217. package/dist/core/extensions/builtin/todo-checklist.d.ts.map +1 -0
  218. package/dist/core/extensions/builtin/todo-checklist.js +70 -0
  219. package/dist/core/extensions/builtin/todo-checklist.js.map +1 -0
  220. package/dist/core/extensions/loader.d.ts.map +1 -1
  221. package/dist/core/extensions/loader.js +50 -47
  222. package/dist/core/extensions/loader.js.map +1 -1
  223. package/dist/core/extensions/runner.d.ts +3 -3
  224. package/dist/core/extensions/runner.d.ts.map +1 -1
  225. package/dist/core/extensions/runner.js +1 -1
  226. package/dist/core/extensions/runner.js.map +1 -1
  227. package/dist/core/extensions/types.d.ts +13 -13
  228. package/dist/core/extensions/types.d.ts.map +1 -1
  229. package/dist/core/extensions/types.js.map +1 -1
  230. package/dist/core/extensions/wrapper.d.ts +1 -1
  231. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  232. package/dist/core/extensions/wrapper.js.map +1 -1
  233. package/dist/core/headroom.d.ts +45 -0
  234. package/dist/core/headroom.d.ts.map +1 -0
  235. package/dist/core/headroom.js +171 -0
  236. package/dist/core/headroom.js.map +1 -0
  237. package/dist/core/hook-inventory.d.ts +25 -0
  238. package/dist/core/hook-inventory.d.ts.map +1 -0
  239. package/dist/core/hook-inventory.js +119 -0
  240. package/dist/core/hook-inventory.js.map +1 -0
  241. package/dist/core/hooks/fail-closed.d.ts +4 -1
  242. package/dist/core/hooks/fail-closed.d.ts.map +1 -1
  243. package/dist/core/hooks/fail-closed.js +79 -5
  244. package/dist/core/hooks/fail-closed.js.map +1 -1
  245. package/dist/core/hooks/index.d.ts +2 -2
  246. package/dist/core/hooks/index.d.ts.map +1 -1
  247. package/dist/core/hooks/index.js +1 -1
  248. package/dist/core/hooks/index.js.map +1 -1
  249. package/dist/core/hooks/types.d.ts +9 -0
  250. package/dist/core/hooks/types.d.ts.map +1 -1
  251. package/dist/core/hooks/types.js.map +1 -1
  252. package/dist/core/keybindings.d.ts +2 -14
  253. package/dist/core/keybindings.d.ts.map +1 -1
  254. package/dist/core/keybindings.js +1 -31
  255. package/dist/core/keybindings.js.map +1 -1
  256. package/dist/core/lean-ctx.d.ts +99 -0
  257. package/dist/core/lean-ctx.d.ts.map +1 -0
  258. package/dist/core/lean-ctx.js +225 -0
  259. package/dist/core/lean-ctx.js.map +1 -0
  260. package/dist/core/loadout-access-policy.d.ts +41 -0
  261. package/dist/core/loadout-access-policy.d.ts.map +1 -0
  262. package/dist/core/loadout-access-policy.js +182 -0
  263. package/dist/core/loadout-access-policy.js.map +1 -0
  264. package/dist/core/loadout-compose.d.ts +53 -0
  265. package/dist/core/loadout-compose.d.ts.map +1 -0
  266. package/dist/core/loadout-compose.js +172 -0
  267. package/dist/core/loadout-compose.js.map +1 -0
  268. package/dist/core/loadout-policy-bridge.d.ts +22 -0
  269. package/dist/core/loadout-policy-bridge.d.ts.map +1 -0
  270. package/dist/core/loadout-policy-bridge.js +52 -0
  271. package/dist/core/loadout-policy-bridge.js.map +1 -0
  272. package/dist/core/loadout-runtime.d.ts +106 -0
  273. package/dist/core/loadout-runtime.d.ts.map +1 -0
  274. package/dist/core/loadout-runtime.js +193 -0
  275. package/dist/core/loadout-runtime.js.map +1 -0
  276. package/dist/core/loadout-safety.d.ts +55 -0
  277. package/dist/core/loadout-safety.d.ts.map +1 -0
  278. package/dist/core/loadout-safety.js +213 -0
  279. package/dist/core/loadout-safety.js.map +1 -0
  280. package/dist/core/loadouts.d.ts +149 -0
  281. package/dist/core/loadouts.d.ts.map +1 -0
  282. package/dist/core/loadouts.js +553 -0
  283. package/dist/core/loadouts.js.map +1 -0
  284. package/dist/core/loop-gates.d.ts +48 -0
  285. package/dist/core/loop-gates.d.ts.map +1 -0
  286. package/dist/core/loop-gates.js +352 -0
  287. package/dist/core/loop-gates.js.map +1 -0
  288. package/dist/core/loop-registry.d.ts +77 -0
  289. package/dist/core/loop-registry.d.ts.map +1 -0
  290. package/dist/core/loop-registry.js +831 -0
  291. package/dist/core/loop-registry.js.map +1 -0
  292. package/dist/core/loop-types.d.ts +194 -0
  293. package/dist/core/loop-types.d.ts.map +1 -0
  294. package/dist/core/loop-types.js +2 -0
  295. package/dist/core/loop-types.js.map +1 -0
  296. package/dist/core/mcp-inventory.d.ts +41 -0
  297. package/dist/core/mcp-inventory.d.ts.map +1 -1
  298. package/dist/core/mcp-inventory.js +57 -1
  299. package/dist/core/mcp-inventory.js.map +1 -1
  300. package/dist/core/mcp-presets.d.ts +98 -0
  301. package/dist/core/mcp-presets.d.ts.map +1 -0
  302. package/dist/core/mcp-presets.js +377 -0
  303. package/dist/core/mcp-presets.js.map +1 -0
  304. package/dist/core/messages.d.ts +3 -3
  305. package/dist/core/messages.d.ts.map +1 -1
  306. package/dist/core/messages.js.map +1 -1
  307. package/dist/core/metrics-sampler.d.ts +11 -0
  308. package/dist/core/metrics-sampler.d.ts.map +1 -1
  309. package/dist/core/metrics-sampler.js +52 -13
  310. package/dist/core/metrics-sampler.js.map +1 -1
  311. package/dist/core/model-registry.d.ts +1 -1
  312. package/dist/core/model-registry.d.ts.map +1 -1
  313. package/dist/core/model-registry.js +2 -2
  314. package/dist/core/model-registry.js.map +1 -1
  315. package/dist/core/model-resolver.d.ts +2 -2
  316. package/dist/core/model-resolver.d.ts.map +1 -1
  317. package/dist/core/model-resolver.js +1 -1
  318. package/dist/core/model-resolver.js.map +1 -1
  319. package/dist/core/package-gallery-identity.d.ts +7 -0
  320. package/dist/core/package-gallery-identity.d.ts.map +1 -0
  321. package/dist/core/package-gallery-identity.js +31 -0
  322. package/dist/core/package-gallery-identity.js.map +1 -0
  323. package/dist/core/package-gallery-install.d.ts +6 -0
  324. package/dist/core/package-gallery-install.d.ts.map +1 -0
  325. package/dist/core/package-gallery-install.js +59 -0
  326. package/dist/core/package-gallery-install.js.map +1 -0
  327. package/dist/core/package-gallery-manifest.d.ts +13 -0
  328. package/dist/core/package-gallery-manifest.d.ts.map +1 -0
  329. package/dist/core/package-gallery-manifest.js +183 -0
  330. package/dist/core/package-gallery-manifest.js.map +1 -0
  331. package/dist/core/package-gallery-trial.d.ts +4 -0
  332. package/dist/core/package-gallery-trial.d.ts.map +1 -0
  333. package/dist/core/package-gallery-trial.js +55 -0
  334. package/dist/core/package-gallery-trial.js.map +1 -0
  335. package/dist/core/package-gallery-types.d.ts +71 -0
  336. package/dist/core/package-gallery-types.d.ts.map +1 -0
  337. package/dist/core/package-gallery-types.js +2 -0
  338. package/dist/core/package-gallery-types.js.map +1 -0
  339. package/dist/core/package-gallery.d.ts +6 -0
  340. package/dist/core/package-gallery.d.ts.map +1 -0
  341. package/dist/core/package-gallery.js +6 -0
  342. package/dist/core/package-gallery.js.map +1 -0
  343. package/dist/core/package-manager.d.ts.map +1 -1
  344. package/dist/core/package-manager.js +10 -10
  345. package/dist/core/package-manager.js.map +1 -1
  346. package/dist/core/package-procurement.d.ts +268 -0
  347. package/dist/core/package-procurement.d.ts.map +1 -0
  348. package/dist/core/package-procurement.js +709 -0
  349. package/dist/core/package-procurement.js.map +1 -0
  350. package/dist/core/provider-attribution.d.ts +1 -1
  351. package/dist/core/provider-attribution.d.ts.map +1 -1
  352. package/dist/core/provider-attribution.js.map +1 -1
  353. package/dist/core/read-anchors.d.ts +110 -0
  354. package/dist/core/read-anchors.d.ts.map +1 -0
  355. package/dist/core/read-anchors.js +193 -0
  356. package/dist/core/read-anchors.js.map +1 -0
  357. package/dist/core/recovery-checkpoint.d.ts +196 -0
  358. package/dist/core/recovery-checkpoint.d.ts.map +1 -0
  359. package/dist/core/recovery-checkpoint.js +382 -0
  360. package/dist/core/recovery-checkpoint.js.map +1 -0
  361. package/dist/core/resource-loader.d.ts +15 -21
  362. package/dist/core/resource-loader.d.ts.map +1 -1
  363. package/dist/core/resource-loader.js +62 -8
  364. package/dist/core/resource-loader.js.map +1 -1
  365. package/dist/core/sandbox/backend.d.ts +25 -0
  366. package/dist/core/sandbox/backend.d.ts.map +1 -0
  367. package/dist/core/sandbox/backend.js +150 -0
  368. package/dist/core/sandbox/backend.js.map +1 -0
  369. package/dist/core/sandbox/env.d.ts +6 -0
  370. package/dist/core/sandbox/env.d.ts.map +1 -0
  371. package/dist/core/sandbox/env.js +46 -0
  372. package/dist/core/sandbox/env.js.map +1 -0
  373. package/dist/core/sandbox/path-resolver.d.ts +4 -0
  374. package/dist/core/sandbox/path-resolver.d.ts.map +1 -0
  375. package/dist/core/sandbox/path-resolver.js +44 -0
  376. package/dist/core/sandbox/path-resolver.js.map +1 -0
  377. package/dist/core/sandbox/policy.d.ts +87 -0
  378. package/dist/core/sandbox/policy.d.ts.map +1 -0
  379. package/dist/core/sandbox/policy.js +280 -0
  380. package/dist/core/sandbox/policy.js.map +1 -0
  381. package/dist/core/sandbox/spawn.d.ts +20 -0
  382. package/dist/core/sandbox/spawn.d.ts.map +1 -0
  383. package/dist/core/sandbox/spawn.js +80 -0
  384. package/dist/core/sandbox/spawn.js.map +1 -0
  385. package/dist/core/sandbox-policy-v2.d.ts +49 -0
  386. package/dist/core/sandbox-policy-v2.d.ts.map +1 -0
  387. package/dist/core/sandbox-policy-v2.js +368 -0
  388. package/dist/core/sandbox-policy-v2.js.map +1 -0
  389. package/dist/core/sdk.d.ts +15 -4
  390. package/dist/core/sdk.d.ts.map +1 -1
  391. package/dist/core/sdk.js +50 -4
  392. package/dist/core/sdk.js.map +1 -1
  393. package/dist/core/semantic-cache-policy.d.ts +51 -0
  394. package/dist/core/semantic-cache-policy.d.ts.map +1 -0
  395. package/dist/core/semantic-cache-policy.js +228 -0
  396. package/dist/core/semantic-cache-policy.js.map +1 -0
  397. package/dist/core/session-manager.d.ts +2 -4
  398. package/dist/core/session-manager.d.ts.map +1 -1
  399. package/dist/core/session-manager.js +1 -1
  400. package/dist/core/session-manager.js.map +1 -1
  401. package/dist/core/settings-manager.d.ts +1 -4
  402. package/dist/core/settings-manager.d.ts.map +1 -1
  403. package/dist/core/settings-manager.js +2 -7
  404. package/dist/core/settings-manager.js.map +1 -1
  405. package/dist/core/skills.d.ts +1 -0
  406. package/dist/core/skills.d.ts.map +1 -1
  407. package/dist/core/skills.js +46 -5
  408. package/dist/core/skills.js.map +1 -1
  409. package/dist/core/slash-commands.d.ts.map +1 -1
  410. package/dist/core/slash-commands.js +0 -2
  411. package/dist/core/slash-commands.js.map +1 -1
  412. package/dist/core/subagent-orchestration.d.ts +73 -0
  413. package/dist/core/subagent-orchestration.d.ts.map +1 -0
  414. package/dist/core/subagent-orchestration.js +408 -0
  415. package/dist/core/subagent-orchestration.js.map +1 -0
  416. package/dist/core/system-prompt.d.ts +5 -4
  417. package/dist/core/system-prompt.d.ts.map +1 -1
  418. package/dist/core/system-prompt.js +63 -24
  419. package/dist/core/system-prompt.js.map +1 -1
  420. package/dist/core/telemetry.d.ts.map +1 -1
  421. package/dist/core/telemetry.js +1 -1
  422. package/dist/core/telemetry.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 +1 -5
  426. package/dist/core/timings.js.map +1 -1
  427. package/dist/core/todo-state.d.ts +53 -0
  428. package/dist/core/todo-state.d.ts.map +1 -0
  429. package/dist/core/todo-state.js +87 -0
  430. package/dist/core/todo-state.js.map +1 -0
  431. package/dist/core/token-optimizer.d.ts +58 -0
  432. package/dist/core/token-optimizer.d.ts.map +1 -0
  433. package/dist/core/token-optimizer.js +179 -0
  434. package/dist/core/token-optimizer.js.map +1 -0
  435. package/dist/core/tools/bash.d.ts +28 -4
  436. package/dist/core/tools/bash.d.ts.map +1 -1
  437. package/dist/core/tools/bash.js +55 -11
  438. package/dist/core/tools/bash.js.map +1 -1
  439. package/dist/core/tools/edit.d.ts +3 -2
  440. package/dist/core/tools/edit.d.ts.map +1 -1
  441. package/dist/core/tools/edit.js +4 -1
  442. package/dist/core/tools/edit.js.map +1 -1
  443. package/dist/core/tools/find.d.ts +1 -1
  444. package/dist/core/tools/find.d.ts.map +1 -1
  445. package/dist/core/tools/find.js +1 -1
  446. package/dist/core/tools/find.js.map +1 -1
  447. package/dist/core/tools/grep.d.ts +1 -1
  448. package/dist/core/tools/grep.d.ts.map +1 -1
  449. package/dist/core/tools/grep.js +1 -1
  450. package/dist/core/tools/grep.js.map +1 -1
  451. package/dist/core/tools/index.d.ts +1 -1
  452. package/dist/core/tools/index.d.ts.map +1 -1
  453. package/dist/core/tools/index.js.map +1 -1
  454. package/dist/core/tools/ls.d.ts +1 -1
  455. package/dist/core/tools/ls.d.ts.map +1 -1
  456. package/dist/core/tools/ls.js +1 -1
  457. package/dist/core/tools/ls.js.map +1 -1
  458. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  459. package/dist/core/tools/output-accumulator.js +1 -1
  460. package/dist/core/tools/output-accumulator.js.map +1 -1
  461. package/dist/core/tools/read.d.ts +2 -1
  462. package/dist/core/tools/read.d.ts.map +1 -1
  463. package/dist/core/tools/read.js +6 -3
  464. package/dist/core/tools/read.js.map +1 -1
  465. package/dist/core/tools/render-utils.d.ts +1 -1
  466. package/dist/core/tools/render-utils.d.ts.map +1 -1
  467. package/dist/core/tools/render-utils.js +1 -1
  468. package/dist/core/tools/render-utils.js.map +1 -1
  469. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  470. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  471. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  472. package/dist/core/tools/write.d.ts +2 -1
  473. package/dist/core/tools/write.d.ts.map +1 -1
  474. package/dist/core/tools/write.js +4 -1
  475. package/dist/core/tools/write.js.map +1 -1
  476. package/dist/encoding/index.d.ts +6 -0
  477. package/dist/encoding/index.d.ts.map +1 -0
  478. package/dist/encoding/index.js +6 -0
  479. package/dist/encoding/index.js.map +1 -0
  480. package/dist/encoding/l4-encoder.d.ts +96 -0
  481. package/dist/encoding/l4-encoder.d.ts.map +1 -0
  482. package/dist/encoding/l4-encoder.js +474 -0
  483. package/dist/encoding/l4-encoder.js.map +1 -0
  484. package/dist/fuzzing/index.d.ts +6 -0
  485. package/dist/fuzzing/index.d.ts.map +1 -0
  486. package/dist/fuzzing/index.js +6 -0
  487. package/dist/fuzzing/index.js.map +1 -0
  488. package/dist/fuzzing/mutation-engine.d.ts +93 -0
  489. package/dist/fuzzing/mutation-engine.d.ts.map +1 -0
  490. package/dist/fuzzing/mutation-engine.js +244 -0
  491. package/dist/fuzzing/mutation-engine.js.map +1 -0
  492. package/dist/guardrails/audit-logger.d.ts +4 -0
  493. package/dist/guardrails/audit-logger.d.ts.map +1 -0
  494. package/dist/guardrails/audit-logger.js +28 -0
  495. package/dist/guardrails/audit-logger.js.map +1 -0
  496. package/dist/guardrails/evidence-system.d.ts +61 -0
  497. package/dist/guardrails/evidence-system.d.ts.map +1 -0
  498. package/dist/guardrails/evidence-system.js +302 -0
  499. package/dist/guardrails/evidence-system.js.map +1 -0
  500. package/dist/guardrails/freedomd-adapter.d.ts +16 -0
  501. package/dist/guardrails/freedomd-adapter.d.ts.map +1 -0
  502. package/dist/guardrails/freedomd-adapter.js +87 -0
  503. package/dist/guardrails/freedomd-adapter.js.map +1 -0
  504. package/dist/jailbreak-extension.d.ts +48 -0
  505. package/dist/jailbreak-extension.d.ts.map +1 -0
  506. package/dist/jailbreak-extension.js +47 -0
  507. package/dist/jailbreak-extension.js.map +1 -0
  508. package/dist/main.d.ts.map +1 -1
  509. package/dist/main.js +6 -8
  510. package/dist/main.js.map +1 -1
  511. package/dist/migrations.d.ts +0 -37
  512. package/dist/migrations.d.ts.map +1 -1
  513. package/dist/migrations.js +6 -414
  514. package/dist/migrations.js.map +1 -1
  515. package/dist/modes/interactive/components/armin.d.ts +1 -1
  516. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  517. package/dist/modes/interactive/components/armin.js.map +1 -1
  518. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  519. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  520. package/dist/modes/interactive/components/assistant-message.js +1 -1
  521. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  522. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  523. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  524. package/dist/modes/interactive/components/bash-execution.js +1 -1
  525. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  526. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  527. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  529. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  530. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  531. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  532. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  533. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  534. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  535. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  537. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  538. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  539. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  540. package/dist/modes/interactive/components/config-selector.js +1 -1
  541. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  542. package/dist/modes/interactive/components/control-panel-box.d.ts +15 -0
  543. package/dist/modes/interactive/components/control-panel-box.d.ts.map +1 -0
  544. package/dist/modes/interactive/components/control-panel-box.js +55 -0
  545. package/dist/modes/interactive/components/control-panel-box.js.map +1 -0
  546. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts +28 -0
  547. package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -0
  548. package/dist/modes/interactive/components/control-panel-gradient-motion.js +112 -0
  549. package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -0
  550. package/dist/modes/interactive/components/control-panel-gradient.d.ts +28 -0
  551. package/dist/modes/interactive/components/control-panel-gradient.d.ts.map +1 -0
  552. package/dist/modes/interactive/components/control-panel-gradient.js +128 -0
  553. package/dist/modes/interactive/components/control-panel-gradient.js.map +1 -0
  554. package/dist/modes/interactive/components/control-panel-layout.d.ts +23 -0
  555. package/dist/modes/interactive/components/control-panel-layout.d.ts.map +1 -0
  556. package/dist/modes/interactive/components/control-panel-layout.js +165 -0
  557. package/dist/modes/interactive/components/control-panel-layout.js.map +1 -0
  558. package/dist/modes/interactive/components/control-panel-runtime-status.d.ts +5 -0
  559. package/dist/modes/interactive/components/control-panel-runtime-status.d.ts.map +1 -0
  560. package/dist/modes/interactive/components/control-panel-runtime-status.js +20 -0
  561. package/dist/modes/interactive/components/control-panel-runtime-status.js.map +1 -0
  562. package/dist/modes/interactive/components/control-panel.d.ts +24 -20
  563. package/dist/modes/interactive/components/control-panel.d.ts.map +1 -1
  564. package/dist/modes/interactive/components/control-panel.js +88 -69
  565. package/dist/modes/interactive/components/control-panel.js.map +1 -1
  566. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  567. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  568. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  569. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  570. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  571. package/dist/modes/interactive/components/custom-editor.js +14 -22
  572. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  573. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  574. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  575. package/dist/modes/interactive/components/custom-message.js +1 -1
  576. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  577. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  578. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  580. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  581. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  582. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  583. package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
  584. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  585. package/dist/modes/interactive/components/earendil-announcement.js +2 -2
  586. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  587. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  588. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  589. package/dist/modes/interactive/components/extension-editor.js +2 -2
  590. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  591. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  592. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/extension-input.js +1 -1
  594. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  595. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  596. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/extension-selector.js +1 -1
  598. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  599. package/dist/modes/interactive/components/footer.d.ts +1 -1
  600. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/footer.js +1 -1
  602. package/dist/modes/interactive/components/footer.js.map +1 -1
  603. package/dist/modes/interactive/components/index.d.ts +0 -2
  604. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/index.js +0 -2
  606. package/dist/modes/interactive/components/index.js.map +1 -1
  607. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  608. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  610. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  611. package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
  612. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  613. package/dist/modes/interactive/components/login-dialog.js +2 -2
  614. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  615. package/dist/modes/interactive/components/model-selector.d.ts +4 -4
  616. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  617. package/dist/modes/interactive/components/model-selector.js +20 -42
  618. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  619. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  620. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  621. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  622. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  623. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  624. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  625. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  626. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  627. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  628. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  629. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  630. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  631. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  632. package/dist/modes/interactive/components/session-selector.js +1 -1
  633. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  634. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  635. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  636. package/dist/modes/interactive/components/settings-selector.js +1 -1
  637. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  638. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  639. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  640. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  641. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  642. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  643. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  644. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  645. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  646. package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
  647. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  648. package/dist/modes/interactive/components/theme-selector.js +1 -1
  649. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  650. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -7
  651. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  652. package/dist/modes/interactive/components/thinking-selector.js +48 -7
  653. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  654. package/dist/modes/interactive/components/todo-checklist.d.ts +31 -0
  655. package/dist/modes/interactive/components/todo-checklist.d.ts.map +1 -0
  656. package/dist/modes/interactive/components/todo-checklist.js +121 -0
  657. package/dist/modes/interactive/components/todo-checklist.js.map +1 -0
  658. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  659. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  660. package/dist/modes/interactive/components/tool-execution.js +1 -1
  661. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  662. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  663. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  664. package/dist/modes/interactive/components/tree-selector.js +1 -1
  665. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  666. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  667. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  668. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  669. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  670. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  671. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  672. package/dist/modes/interactive/components/user-message.js +1 -1
  673. package/dist/modes/interactive/components/user-message.js.map +1 -1
  674. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  675. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  676. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  677. package/dist/modes/interactive/interactive-mode.d.ts +5 -8
  678. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  679. package/dist/modes/interactive/interactive-mode.js +79 -189
  680. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  681. package/dist/modes/interactive/theme/omk-control-grid-dark.json +65 -77
  682. package/dist/modes/interactive/theme/omk-neon-control.json +90 -0
  683. package/dist/modes/interactive/theme/rust-forge.json +14 -24
  684. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  685. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  686. package/dist/modes/interactive/theme/theme.js +22 -31
  687. package/dist/modes/interactive/theme/theme.js.map +1 -1
  688. package/dist/modes/print-mode.d.ts +3 -3
  689. package/dist/modes/print-mode.d.ts.map +1 -1
  690. package/dist/modes/print-mode.js +2 -2
  691. package/dist/modes/print-mode.js.map +1 -1
  692. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  693. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  694. package/dist/modes/rpc/rpc-client.js.map +1 -1
  695. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  696. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  697. package/dist/modes/rpc/rpc-types.js.map +1 -1
  698. package/dist/modules/index.d.ts +8 -0
  699. package/dist/modules/index.d.ts.map +1 -0
  700. package/dist/modules/index.js +7 -0
  701. package/dist/modules/index.js.map +1 -0
  702. package/dist/modules/lrl-bypass.d.ts +40 -0
  703. package/dist/modules/lrl-bypass.d.ts.map +1 -0
  704. package/dist/modules/lrl-bypass.js +84 -0
  705. package/dist/modules/lrl-bypass.js.map +1 -0
  706. package/dist/modules/lrl-deps.d.ts +38 -0
  707. package/dist/modules/lrl-deps.d.ts.map +1 -0
  708. package/dist/modules/lrl-deps.js +128 -0
  709. package/dist/modules/lrl-deps.js.map +1 -0
  710. package/dist/multiturn/easl-chain.d.ts +113 -0
  711. package/dist/multiturn/easl-chain.d.ts.map +1 -0
  712. package/dist/multiturn/easl-chain.js +351 -0
  713. package/dist/multiturn/easl-chain.js.map +1 -0
  714. package/dist/multiturn/index.d.ts +6 -0
  715. package/dist/multiturn/index.d.ts.map +1 -0
  716. package/dist/multiturn/index.js +6 -0
  717. package/dist/multiturn/index.js.map +1 -0
  718. package/dist/orchestration/lane-grant-auditor.d.ts +4 -0
  719. package/dist/orchestration/lane-grant-auditor.d.ts.map +1 -0
  720. package/dist/orchestration/lane-grant-auditor.js +87 -0
  721. package/dist/orchestration/lane-grant-auditor.js.map +1 -0
  722. package/dist/package-manager-cli.d.ts.map +1 -1
  723. package/dist/package-manager-cli.js +3 -3
  724. package/dist/package-manager-cli.js.map +1 -1
  725. package/dist/routing/fallback-router.d.ts +123 -0
  726. package/dist/routing/fallback-router.d.ts.map +1 -0
  727. package/dist/routing/fallback-router.js +355 -0
  728. package/dist/routing/fallback-router.js.map +1 -0
  729. package/dist/routing/index.d.ts +6 -0
  730. package/dist/routing/index.d.ts.map +1 -0
  731. package/dist/routing/index.js +6 -0
  732. package/dist/routing/index.js.map +1 -0
  733. package/dist/types/evidence.d.ts +117 -0
  734. package/dist/types/evidence.d.ts.map +1 -0
  735. package/dist/types/evidence.js +8 -0
  736. package/dist/types/evidence.js.map +1 -0
  737. package/dist/types/guardrails.d.ts +61 -0
  738. package/dist/types/guardrails.d.ts.map +1 -0
  739. package/dist/types/guardrails.js +9 -0
  740. package/dist/types/guardrails.js.map +1 -0
  741. package/dist/types/jailbreak.d.ts +246 -0
  742. package/dist/types/jailbreak.d.ts.map +1 -0
  743. package/dist/types/jailbreak.js +8 -0
  744. package/dist/types/jailbreak.js.map +1 -0
  745. package/dist/types/lane-grant.d.ts +58 -0
  746. package/dist/types/lane-grant.d.ts.map +1 -0
  747. package/dist/types/lane-grant.js +9 -0
  748. package/dist/types/lane-grant.js.map +1 -0
  749. package/dist/utils/clipboard-image.d.ts.map +1 -1
  750. package/dist/utils/clipboard-image.js +1 -1
  751. package/dist/utils/clipboard-image.js.map +1 -1
  752. package/dist/utils/jailbreak/common.d.ts +63 -0
  753. package/dist/utils/jailbreak/common.d.ts.map +1 -0
  754. package/dist/utils/jailbreak/common.js +130 -0
  755. package/dist/utils/jailbreak/common.js.map +1 -0
  756. package/dist/utils/jailbreak/index.d.ts +7 -0
  757. package/dist/utils/jailbreak/index.d.ts.map +1 -0
  758. package/dist/utils/jailbreak/index.js +7 -0
  759. package/dist/utils/jailbreak/index.js.map +1 -0
  760. package/dist/utils/omk-user-agent.d.ts +2 -0
  761. package/dist/utils/omk-user-agent.d.ts.map +1 -0
  762. package/dist/utils/{pi-user-agent.js → omk-user-agent.js} +2 -2
  763. package/dist/utils/omk-user-agent.js.map +1 -0
  764. package/dist/utils/tools-manager.d.ts.map +1 -1
  765. package/dist/utils/tools-manager.js +1 -1
  766. package/dist/utils/tools-manager.js.map +1 -1
  767. package/dist/utils/version-check.d.ts +5 -5
  768. package/dist/utils/version-check.d.ts.map +1 -1
  769. package/dist/utils/version-check.js +8 -11
  770. package/dist/utils/version-check.js.map +1 -1
  771. package/dist/utils/windows-self-update.d.ts.map +1 -1
  772. package/dist/utils/windows-self-update.js +1 -1
  773. package/dist/utils/windows-self-update.js.map +1 -1
  774. package/docs/compaction.md +8 -21
  775. package/docs/custom-provider.md +2 -2
  776. package/docs/development.md +1 -1
  777. package/docs/extensions.md +11 -11
  778. package/docs/loadout-domains/README.md +70 -0
  779. package/docs/loadout-domains/ai-agent-ops.md +94 -0
  780. package/docs/loadout-domains/backend-api.md +116 -0
  781. package/docs/loadout-domains/data-science.md +100 -0
  782. package/docs/loadout-domains/devops-infra.md +85 -0
  783. package/docs/loadout-domains/docs-writing.md +92 -0
  784. package/docs/loadout-domains/frontend-ui.md +128 -0
  785. package/docs/loadout-domains/general.md +62 -0
  786. package/docs/loadout-domains/mobile.md +84 -0
  787. package/docs/loadout-domains/qa-testing.md +87 -0
  788. package/docs/loadout-domains/research.md +80 -0
  789. package/docs/loadout-domains/security-audit.md +97 -0
  790. package/docs/packages.md +1 -1
  791. package/docs/sdk.md +3 -3
  792. package/docs/security.md +145 -0
  793. package/docs/session-format.md +1 -1
  794. package/docs/themes.md +8 -7
  795. package/docs/tui.md +14 -14
  796. package/examples/README.md +1 -1
  797. package/examples/extensions/README.md +12 -12
  798. package/examples/extensions/aside-computer-use/README.md +114 -0
  799. package/examples/extensions/aside-computer-use/action-scoring.ts +122 -0
  800. package/examples/extensions/aside-computer-use/assertions.ts +380 -0
  801. package/examples/extensions/aside-computer-use/controller.ts +491 -0
  802. package/examples/extensions/aside-computer-use/evidence.ts +229 -0
  803. package/examples/extensions/aside-computer-use/golden-trace.ts +141 -0
  804. package/examples/extensions/aside-computer-use/index.ts +76 -0
  805. package/examples/extensions/aside-computer-use/mcp-client.ts +381 -0
  806. package/examples/extensions/aside-computer-use/observation-snapshot.ts +121 -0
  807. package/examples/extensions/aside-computer-use/package.json +16 -0
  808. package/examples/extensions/aside-computer-use/policy.ts +257 -0
  809. package/examples/extensions/aside-computer-use/risk-authorize.ts +200 -0
  810. package/examples/extensions/aside-computer-use/risk-classifier.ts +205 -0
  811. package/examples/extensions/aside-computer-use/schema-fingerprint.ts +80 -0
  812. package/examples/extensions/aside-computer-use/session-binding.ts +161 -0
  813. package/examples/extensions/aside-computer-use/tools.ts +449 -0
  814. package/examples/extensions/aside-computer-use/types.ts +217 -0
  815. package/examples/extensions/aside-computer-use/url-origin.ts +132 -0
  816. package/examples/extensions/auto-commit-on-exit.ts +6 -6
  817. package/examples/extensions/bash-spawn-hook.ts +3 -3
  818. package/examples/extensions/bookmark.ts +5 -5
  819. package/examples/extensions/border-status-editor.ts +9 -9
  820. package/examples/extensions/built-in-tool-renderer.ts +7 -7
  821. package/examples/extensions/claude-rules.ts +4 -4
  822. package/examples/extensions/commands.ts +5 -5
  823. package/examples/extensions/confirm-destructive.ts +3 -3
  824. package/examples/extensions/custom-compaction.ts +4 -4
  825. package/examples/extensions/custom-footer.ts +4 -4
  826. package/examples/extensions/custom-header.ts +11 -11
  827. package/examples/extensions/custom-provider-anthropic/index.ts +5 -5
  828. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  829. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  830. package/examples/extensions/custom-provider-gitlab-duo/index.ts +4 -4
  831. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  832. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  833. package/examples/extensions/dirty-repo-guard.ts +7 -7
  834. package/examples/extensions/doom-overlay/README.md +2 -3
  835. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  836. package/examples/extensions/doom-overlay/doom/build.sh +4 -4
  837. package/examples/extensions/doom-overlay/doom/{doomgeneric_pi.c → doomgeneric_omk.c} +1 -1
  838. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  839. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  840. package/examples/extensions/doom-overlay/index.ts +3 -3
  841. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  842. package/examples/extensions/dynamic-resources/index.ts +2 -2
  843. package/examples/extensions/dynamic-tools.ts +4 -4
  844. package/examples/extensions/event-bus.ts +8 -8
  845. package/examples/extensions/file-trigger.ts +3 -3
  846. package/examples/extensions/git-checkpoint.ts +7 -7
  847. package/examples/extensions/git-merge-and-resolve.ts +14 -14
  848. package/examples/extensions/github-issue-autocomplete.ts +7 -12
  849. package/examples/extensions/gondolin/index.ts +16 -16
  850. package/examples/extensions/gondolin/package-lock.json +2 -2
  851. package/examples/extensions/gondolin/package.json +1 -1
  852. package/examples/extensions/handoff.ts +4 -4
  853. package/examples/extensions/hello.ts +3 -3
  854. package/examples/extensions/hidden-thinking-label.ts +4 -4
  855. package/examples/extensions/inline-bash.ts +5 -5
  856. package/examples/extensions/input-transform-streaming.ts +5 -5
  857. package/examples/extensions/input-transform.ts +5 -5
  858. package/examples/extensions/interactive-shell.ts +3 -3
  859. package/examples/extensions/mac-system-theme.ts +5 -5
  860. package/examples/extensions/message-renderer.ts +5 -5
  861. package/examples/extensions/minimal-mode.ts +10 -10
  862. package/examples/extensions/modal-editor.ts +4 -4
  863. package/examples/extensions/model-status.ts +3 -3
  864. package/examples/extensions/notify.ts +5 -5
  865. package/examples/extensions/overlay-qa-tests.ts +22 -22
  866. package/examples/extensions/overlay-test.ts +4 -4
  867. package/examples/extensions/permission-gate.ts +2 -2
  868. package/examples/extensions/pirate.ts +4 -4
  869. package/examples/extensions/plan-mode/index.ts +25 -25
  870. package/examples/extensions/preset.ts +31 -31
  871. package/examples/extensions/prompt-customizer.ts +3 -3
  872. package/examples/extensions/protected-paths.ts +2 -2
  873. package/examples/extensions/provider-payload.ts +8 -5
  874. package/examples/extensions/qna.ts +3 -3
  875. package/examples/extensions/question.ts +3 -3
  876. package/examples/extensions/questionnaire.ts +3 -3
  877. package/examples/extensions/rainbow-editor.ts +3 -3
  878. package/examples/extensions/reload-runtime.ts +4 -4
  879. package/examples/extensions/rpc-demo.ts +10 -10
  880. package/examples/extensions/sandbox/index.ts +16 -16
  881. package/examples/extensions/sandbox/package-lock.json +2 -2
  882. package/examples/extensions/sandbox/package.json +1 -1
  883. package/examples/extensions/send-user-message.ts +13 -13
  884. package/examples/extensions/session-name.ts +4 -4
  885. package/examples/extensions/shutdown-command.ts +10 -10
  886. package/examples/extensions/snake.ts +4 -4
  887. package/examples/extensions/space-invaders.ts +4 -4
  888. package/examples/extensions/ssh.ts +12 -12
  889. package/examples/extensions/status-line.ts +4 -4
  890. package/examples/extensions/structured-output.ts +3 -3
  891. package/examples/extensions/subagent/README.md +13 -13
  892. package/examples/extensions/subagent/agents.ts +1 -1
  893. package/examples/extensions/subagent/index.ts +13 -13
  894. package/examples/extensions/summarize.ts +4 -4
  895. package/examples/extensions/system-prompt-header.ts +3 -3
  896. package/examples/extensions/tic-tac-toe.ts +17 -17
  897. package/examples/extensions/timed-confirm.ts +4 -4
  898. package/examples/extensions/titlebar-spinner.ts +9 -9
  899. package/examples/extensions/todo.ts +7 -7
  900. package/examples/extensions/tool-override.ts +6 -6
  901. package/examples/extensions/tools.ts +11 -11
  902. package/examples/extensions/trigger-compact.ts +3 -3
  903. package/examples/extensions/truncated-tool.ts +4 -4
  904. package/examples/extensions/widget-placement.ts +2 -2
  905. package/examples/extensions/with-deps/index.ts +2 -2
  906. package/examples/extensions/with-deps/package-lock.json +2 -2
  907. package/examples/extensions/with-deps/package.json +1 -1
  908. package/examples/extensions/working-indicator.ts +7 -7
  909. package/examples/extensions/working-message-test.ts +3 -3
  910. package/examples/rpc-extension-ui.ts +1 -9
  911. package/examples/sdk/01-minimal.ts +1 -1
  912. package/examples/sdk/02-custom-model.ts +1 -1
  913. package/examples/sdk/03-custom-prompt.ts +1 -1
  914. package/examples/sdk/04-skills.ts +1 -1
  915. package/examples/sdk/05-tools.ts +1 -1
  916. package/examples/sdk/06-extensions.ts +11 -11
  917. package/examples/sdk/08-prompt-templates.ts +1 -1
  918. package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
  919. package/examples/sdk/12-full-control.ts +1 -1
  920. package/examples/sdk/README.md +3 -3
  921. package/npm-shrinkwrap.json +1805 -0
  922. package/package.json +8 -14
  923. package/dist/core/harness-control-events.d.ts +0 -79
  924. package/dist/core/harness-control-events.d.ts.map +0 -1
  925. package/dist/core/harness-control-events.js +0 -339
  926. package/dist/core/harness-control-events.js.map +0 -1
  927. package/dist/core/harness-control-replay.d.ts +0 -26
  928. package/dist/core/harness-control-replay.d.ts.map +0 -1
  929. package/dist/core/harness-control-replay.js +0 -155
  930. package/dist/core/harness-control-replay.js.map +0 -1
  931. package/dist/core/spec-kit/compiler.d.ts +0 -67
  932. package/dist/core/spec-kit/compiler.d.ts.map +0 -1
  933. package/dist/core/spec-kit/compiler.js +0 -268
  934. package/dist/core/spec-kit/compiler.js.map +0 -1
  935. package/dist/core/transaction-coordinator.d.ts +0 -30
  936. package/dist/core/transaction-coordinator.d.ts.map +0 -1
  937. package/dist/core/transaction-coordinator.js +0 -173
  938. package/dist/core/transaction-coordinator.js.map +0 -1
  939. package/dist/modes/interactive/components/mcp-selector.d.ts +0 -28
  940. package/dist/modes/interactive/components/mcp-selector.d.ts.map +0 -1
  941. package/dist/modes/interactive/components/mcp-selector.js +0 -138
  942. package/dist/modes/interactive/components/mcp-selector.js.map +0 -1
  943. package/dist/modes/interactive/components/skills-selector.d.ts +0 -32
  944. package/dist/modes/interactive/components/skills-selector.d.ts.map +0 -1
  945. package/dist/modes/interactive/components/skills-selector.js +0 -130
  946. package/dist/modes/interactive/components/skills-selector.js.map +0 -1
  947. package/dist/utils/pi-user-agent.d.ts +0 -2
  948. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  949. package/dist/utils/pi-user-agent.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ // [DEPRECATED — DEAD CODE] OMK v6.2 — Context Compactor (TypeScript)
2
+ // ==================================================================
3
+ // packages/coding-agent/src/core/compactor.ts
4
+ //
5
+ // STATUS: DEAD CODE — Not imported by any module at runtime.
6
+ // This file is NOT wired into AgentSession or any active pipeline.
7
+ //
8
+ // WHY DEAD:
9
+ // - agent-session.ts imports CompactionResult from compaction/index.ts,
10
+ // NOT from this file. The CompactionResult interfaces are different.
11
+ // - No other file in src/ imports from compactor.ts.
12
+ // - All classes (SlidingWindowCompactor, SemanticDeduplicator,
13
+ // ImportanceScorer, ContextCompactor) are only referenced within this file.
14
+ //
15
+ // ACTUAL COMPACTION SYSTEM:
16
+ // - compaction/compaction.ts → real compaction with LLM summarization
17
+ // - compaction/branch-summarization.ts → branch-specific summarization
18
+ // - compaction/utils.ts → compaction utilities
19
+ // - agent-session.ts imports compact(), prepareCompaction(), shouldCompact()
20
+ // from compaction/index.ts
21
+ //
22
+ // NOTE: types/jailbreak.ts also defines a CompactionResult interface (different shape).
23
+ // Both are distinct from the real CompactionResult in compaction/compaction.ts.
24
+ //
25
+ // DO NOT MODIFY — preserved for reference only.
26
+ import { EventEmitter } from "events";
27
+ export class SlidingWindowCompactor extends EventEmitter {
28
+ windowSize;
29
+ constructor(windowSize = 10) {
30
+ super();
31
+ this.windowSize = windowSize;
32
+ }
33
+ compact(turns) {
34
+ if (turns.length <= this.windowSize) {
35
+ return { preserved: turns, evicted: [] };
36
+ }
37
+ return {
38
+ preserved: turns.slice(-this.windowSize),
39
+ evicted: turns.slice(0, -this.windowSize),
40
+ };
41
+ }
42
+ }
43
+ export class SemanticDeduplicator extends EventEmitter {
44
+ deduplicate(turns) {
45
+ const seen = new Set();
46
+ const unique = [];
47
+ for (const turn of turns) {
48
+ const key = this.normalize(turn.content);
49
+ if (!seen.has(key)) {
50
+ seen.add(key);
51
+ unique.push(turn);
52
+ }
53
+ }
54
+ return unique;
55
+ }
56
+ normalize(text) {
57
+ return text.toLowerCase().replace(/\s+/g, " ").trim().substring(0, 100);
58
+ }
59
+ }
60
+ export class ImportanceScorer extends EventEmitter {
61
+ keywords = ["refusal", "error", "strategy", "phase", "decision", "goal"];
62
+ score(turn) {
63
+ let score = 0;
64
+ const content = turn.content.toLowerCase();
65
+ for (const kw of this.keywords) {
66
+ if (content.includes(kw))
67
+ score += 2;
68
+ }
69
+ if (turn.role === "system")
70
+ score += 1;
71
+ if (turn.role === "assistant" && content.includes("refuse"))
72
+ score += 5;
73
+ return score;
74
+ }
75
+ }
76
+ export class ContextCompactor extends EventEmitter {
77
+ slidingWindow;
78
+ deduplicator;
79
+ scorer;
80
+ constructor(windowSize = 10) {
81
+ super();
82
+ this.slidingWindow = new SlidingWindowCompactor(windowSize);
83
+ this.deduplicator = new SemanticDeduplicator();
84
+ this.scorer = new ImportanceScorer();
85
+ }
86
+ compact(turns, _level = "moderate") {
87
+ const originalCount = turns.length;
88
+ // 1. Importance scoring
89
+ const scored = turns.map((t) => ({ ...t, importance: this.scorer.score(t) }));
90
+ // 2. Protect high-importance turns
91
+ const protectedTurns = scored.filter((t) => (t.importance ?? 0) >= 3);
92
+ const candidates = scored.filter((t) => (t.importance ?? 0) < 3);
93
+ // 3. Sliding window
94
+ const { preserved, evicted } = this.slidingWindow.compact(candidates);
95
+ // 4. Deduplicate evicted
96
+ const uniqueEvicted = this.deduplicator.deduplicate(evicted);
97
+ // 5. Summarize evicted
98
+ const summary = this.summarize(uniqueEvicted);
99
+ // 6. Assemble result
100
+ const finalTurns = [...protectedTurns, ...preserved];
101
+ if (summary) {
102
+ finalTurns.push({
103
+ index: -1,
104
+ role: "system",
105
+ content: `[Summary]: ${summary}`,
106
+ timestamp: Date.now(),
107
+ });
108
+ }
109
+ return {
110
+ preserved: protectedTurns,
111
+ summarized: uniqueEvicted,
112
+ summary,
113
+ originalCount,
114
+ finalCount: finalTurns.length,
115
+ compressionRatio: finalTurns.length / originalCount,
116
+ };
117
+ }
118
+ summarize(turns) {
119
+ if (turns.length === 0)
120
+ return "";
121
+ const topics = new Set();
122
+ for (const turn of turns) {
123
+ const words = turn.content.split(/\s+/).filter((w) => w.length > 4);
124
+ for (const w of words.slice(0, 3))
125
+ topics.add(w);
126
+ }
127
+ return `Topics: ${Array.from(topics).slice(0, 5).join(", ")}`;
128
+ }
129
+ }
130
+ export default ContextCompactor;
131
+ //# sourceMappingURL=compactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../src/core/compactor.ts"],"names":[],"mappings":"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","sourcesContent":["// [DEPRECATED — DEAD CODE] OMK v6.2 — Context Compactor (TypeScript)\n// ==================================================================\n// packages/coding-agent/src/core/compactor.ts\n//\n// STATUS: DEAD CODE — Not imported by any module at runtime.\n// This file is NOT wired into AgentSession or any active pipeline.\n//\n// WHY DEAD:\n// - agent-session.ts imports CompactionResult from compaction/index.ts,\n// NOT from this file. The CompactionResult interfaces are different.\n// - No other file in src/ imports from compactor.ts.\n// - All classes (SlidingWindowCompactor, SemanticDeduplicator,\n// ImportanceScorer, ContextCompactor) are only referenced within this file.\n//\n// ACTUAL COMPACTION SYSTEM:\n// - compaction/compaction.ts → real compaction with LLM summarization\n// - compaction/branch-summarization.ts → branch-specific summarization\n// - compaction/utils.ts → compaction utilities\n// - agent-session.ts imports compact(), prepareCompaction(), shouldCompact()\n// from compaction/index.ts\n//\n// NOTE: types/jailbreak.ts also defines a CompactionResult interface (different shape).\n// Both are distinct from the real CompactionResult in compaction/compaction.ts.\n//\n// DO NOT MODIFY — preserved for reference only.\n\nimport { EventEmitter } from \"events\";\n\nexport interface CompactionTurn {\n\tindex: number;\n\trole: string;\n\tcontent: string;\n\ttimestamp: number;\n\timportance?: number;\n}\n\nexport interface CompactionResult {\n\tpreserved: CompactionTurn[];\n\tsummarized: CompactionTurn[];\n\tsummary: string;\n\toriginalCount: number;\n\tfinalCount: number;\n\tcompressionRatio: number;\n}\n\nexport class SlidingWindowCompactor extends EventEmitter {\n\tprivate windowSize: number;\n\n\tconstructor(windowSize = 10) {\n\t\tsuper();\n\t\tthis.windowSize = windowSize;\n\t}\n\n\tcompact(turns: CompactionTurn[]): { preserved: CompactionTurn[]; evicted: CompactionTurn[] } {\n\t\tif (turns.length <= this.windowSize) {\n\t\t\treturn { preserved: turns, evicted: [] };\n\t\t}\n\t\treturn {\n\t\t\tpreserved: turns.slice(-this.windowSize),\n\t\t\tevicted: turns.slice(0, -this.windowSize),\n\t\t};\n\t}\n}\n\nexport class SemanticDeduplicator extends EventEmitter {\n\tdeduplicate(turns: CompactionTurn[]): CompactionTurn[] {\n\t\tconst seen = new Set<string>();\n\t\tconst unique: CompactionTurn[] = [];\n\n\t\tfor (const turn of turns) {\n\t\t\tconst key = this.normalize(turn.content);\n\t\t\tif (!seen.has(key)) {\n\t\t\t\tseen.add(key);\n\t\t\t\tunique.push(turn);\n\t\t\t}\n\t\t}\n\n\t\treturn unique;\n\t}\n\n\tprivate normalize(text: string): string {\n\t\treturn text.toLowerCase().replace(/\\s+/g, \" \").trim().substring(0, 100);\n\t}\n}\n\nexport class ImportanceScorer extends EventEmitter {\n\tprivate keywords = [\"refusal\", \"error\", \"strategy\", \"phase\", \"decision\", \"goal\"];\n\n\tscore(turn: CompactionTurn): number {\n\t\tlet score = 0;\n\t\tconst content = turn.content.toLowerCase();\n\n\t\tfor (const kw of this.keywords) {\n\t\t\tif (content.includes(kw)) score += 2;\n\t\t}\n\n\t\tif (turn.role === \"system\") score += 1;\n\t\tif (turn.role === \"assistant\" && content.includes(\"refuse\")) score += 5;\n\n\t\treturn score;\n\t}\n}\n\nexport class ContextCompactor extends EventEmitter {\n\tprivate slidingWindow: SlidingWindowCompactor;\n\tprivate deduplicator: SemanticDeduplicator;\n\tprivate scorer: ImportanceScorer;\n\n\tconstructor(windowSize = 10) {\n\t\tsuper();\n\t\tthis.slidingWindow = new SlidingWindowCompactor(windowSize);\n\t\tthis.deduplicator = new SemanticDeduplicator();\n\t\tthis.scorer = new ImportanceScorer();\n\t}\n\n\tcompact(turns: CompactionTurn[], _level: \"gentle\" | \"moderate\" | \"aggressive\" = \"moderate\"): CompactionResult {\n\t\tconst originalCount = turns.length;\n\n\t\t// 1. Importance scoring\n\t\tconst scored = turns.map((t) => ({ ...t, importance: this.scorer.score(t) }));\n\n\t\t// 2. Protect high-importance turns\n\t\tconst protectedTurns = scored.filter((t) => (t.importance ?? 0) >= 3);\n\t\tconst candidates = scored.filter((t) => (t.importance ?? 0) < 3);\n\n\t\t// 3. Sliding window\n\t\tconst { preserved, evicted } = this.slidingWindow.compact(candidates);\n\n\t\t// 4. Deduplicate evicted\n\t\tconst uniqueEvicted = this.deduplicator.deduplicate(evicted);\n\n\t\t// 5. Summarize evicted\n\t\tconst summary = this.summarize(uniqueEvicted);\n\n\t\t// 6. Assemble result\n\t\tconst finalTurns = [...protectedTurns, ...preserved];\n\t\tif (summary) {\n\t\t\tfinalTurns.push({\n\t\t\t\tindex: -1,\n\t\t\t\trole: \"system\",\n\t\t\t\tcontent: `[Summary]: ${summary}`,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tpreserved: protectedTurns,\n\t\t\tsummarized: uniqueEvicted,\n\t\t\tsummary,\n\t\t\toriginalCount,\n\t\t\tfinalCount: finalTurns.length,\n\t\t\tcompressionRatio: finalTurns.length / originalCount,\n\t\t};\n\t}\n\n\tprivate summarize(turns: CompactionTurn[]): string {\n\t\tif (turns.length === 0) return \"\";\n\t\tconst topics = new Set<string>();\n\t\tfor (const turn of turns) {\n\t\t\tconst words = turn.content.split(/\\s+/).filter((w) => w.length > 4);\n\t\t\tfor (const w of words.slice(0, 3)) topics.add(w);\n\t\t}\n\t\treturn `Topics: ${Array.from(topics).slice(0, 5).join(\", \")}`;\n\t}\n}\n\nexport default ContextCompactor;\n"]}
@@ -0,0 +1,50 @@
1
+ import { type TokenCounterAdapter, type TokenCountResult } from "./context-budget-token-counter.ts";
2
+ export type ContextBudgetCompressorMode = "off" | "auto" | "headroom" | "llmlingua";
3
+ export type ContextBudgetCompressionMethod = "compressed" | "none";
4
+ export interface ContextCompressionRequest {
5
+ readonly text: string;
6
+ readonly targetTokens: number;
7
+ readonly modelId: string;
8
+ readonly timeoutMs?: number;
9
+ readonly maxOutputChars?: number;
10
+ }
11
+ export interface ContextCompressionResult {
12
+ readonly text: string;
13
+ readonly method: ContextBudgetCompressionMethod;
14
+ readonly adapterId: string;
15
+ readonly input: TokenCountResult;
16
+ readonly output: TokenCountResult;
17
+ readonly notes: readonly string[];
18
+ }
19
+ export interface ContextCompressorAdapter {
20
+ readonly id: string;
21
+ readonly priority: number;
22
+ isAvailable(): Promise<boolean>;
23
+ compress(request: ContextCompressionRequest): Promise<ContextCompressionResult>;
24
+ }
25
+ export interface CommandRunRequest {
26
+ readonly command: string;
27
+ readonly args: readonly string[];
28
+ readonly input: string;
29
+ readonly timeoutMs: number;
30
+ }
31
+ export interface CommandRunResult {
32
+ readonly exitCode: number | null;
33
+ readonly stdout: string;
34
+ readonly stderr: string;
35
+ readonly timedOut: boolean;
36
+ }
37
+ export interface CommandRunner {
38
+ run(request: CommandRunRequest): Promise<CommandRunResult>;
39
+ }
40
+ export interface CliCompressorOptions {
41
+ readonly command?: string;
42
+ readonly runner?: CommandRunner;
43
+ readonly tokenCounter?: TokenCounterAdapter;
44
+ }
45
+ export declare function createNodeCommandRunner(): CommandRunner;
46
+ export declare function createHeadroomCliCompressor(options?: CliCompressorOptions): ContextCompressorAdapter;
47
+ export declare function createLlmlinguaCliCompressor(options?: CliCompressorOptions): ContextCompressorAdapter;
48
+ export declare function createContextCompressorForMode(mode: ContextBudgetCompressorMode, options?: CliCompressorOptions): ContextCompressorAdapter | undefined;
49
+ export declare function createCompressorRegistry(adapters: readonly ContextCompressorAdapter[]): ContextCompressorAdapter;
50
+ //# sourceMappingURL=context-budget-compressors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget-compressors.d.ts","sourceRoot":"","sources":["../../src/core/context-budget-compressors.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,MAAM,2BAA2B,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AACpF,MAAM,MAAM,8BAA8B,GAAG,YAAY,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC5C;AAKD,wBAAgB,uBAAuB,IAAI,aAAa,CAqCvD;AAED,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,oBAAyB,GAAG,wBAAwB,CASxG;AAED,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,oBAAyB,GAAG,wBAAwB,CASzG;AAED,wBAAgB,8BAA8B,CAC7C,IAAI,EAAE,2BAA2B,EACjC,OAAO,GAAE,oBAAyB,GAChC,wBAAwB,GAAG,SAAS,CAWtC;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAAG,wBAAwB,CAwBhH","sourcesContent":["import { spawn } from \"node:child_process\";\nimport {\n\tcreateFallbackTokenCounter,\n\ttype TokenCounterAdapter,\n\ttype TokenCountResult,\n} from \"./context-budget-token-counter.ts\";\n\nexport type ContextBudgetCompressorMode = \"off\" | \"auto\" | \"headroom\" | \"llmlingua\";\nexport type ContextBudgetCompressionMethod = \"compressed\" | \"none\";\n\nexport interface ContextCompressionRequest {\n\treadonly text: string;\n\treadonly targetTokens: number;\n\treadonly modelId: string;\n\treadonly timeoutMs?: number;\n\treadonly maxOutputChars?: number;\n}\n\nexport interface ContextCompressionResult {\n\treadonly text: string;\n\treadonly method: ContextBudgetCompressionMethod;\n\treadonly adapterId: string;\n\treadonly input: TokenCountResult;\n\treadonly output: TokenCountResult;\n\treadonly notes: readonly string[];\n}\n\nexport interface ContextCompressorAdapter {\n\treadonly id: string;\n\treadonly priority: number;\n\tisAvailable(): Promise<boolean>;\n\tcompress(request: ContextCompressionRequest): Promise<ContextCompressionResult>;\n}\n\nexport interface CommandRunRequest {\n\treadonly command: string;\n\treadonly args: readonly string[];\n\treadonly input: string;\n\treadonly timeoutMs: number;\n}\n\nexport interface CommandRunResult {\n\treadonly exitCode: number | null;\n\treadonly stdout: string;\n\treadonly stderr: string;\n\treadonly timedOut: boolean;\n}\n\nexport interface CommandRunner {\n\trun(request: CommandRunRequest): Promise<CommandRunResult>;\n}\n\nexport interface CliCompressorOptions {\n\treadonly command?: string;\n\treadonly runner?: CommandRunner;\n\treadonly tokenCounter?: TokenCounterAdapter;\n}\n\nconst DEFAULT_TIMEOUT_MS = 15_000;\nconst DEFAULT_MAX_OUTPUT_CHARS = 400_000;\n\nexport function createNodeCommandRunner(): CommandRunner {\n\treturn {\n\t\trun(request) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst child = spawn(request.command, [...request.args], { stdio: [\"pipe\", \"pipe\", \"pipe\"] });\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tlet stderr = \"\";\n\t\t\t\tlet settled = false;\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tchild.kill(\"SIGTERM\");\n\t\t\t\t\tresolve({ exitCode: null, stdout, stderr, timedOut: true });\n\t\t\t\t}, request.timeoutMs);\n\t\t\t\tchild.stdout.setEncoding(\"utf8\");\n\t\t\t\tchild.stderr.setEncoding(\"utf8\");\n\t\t\t\tchild.stdout.on(\"data\", (chunk: string) => {\n\t\t\t\t\tstdout += chunk;\n\t\t\t\t});\n\t\t\t\tchild.stderr.on(\"data\", (chunk: string) => {\n\t\t\t\t\tstderr += chunk;\n\t\t\t\t});\n\t\t\t\tchild.on(\"error\", (error) => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tresolve({ exitCode: null, stdout, stderr: error.message, timedOut: false });\n\t\t\t\t});\n\t\t\t\tchild.on(\"close\", (exitCode) => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tresolve({ exitCode, stdout, stderr, timedOut: false });\n\t\t\t\t});\n\t\t\t\tchild.stdin.end(request.input, \"utf8\");\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createHeadroomCliCompressor(options: CliCompressorOptions = {}): ContextCompressorAdapter {\n\treturn createCliCompressor({\n\t\tid: \"headroom-cli\",\n\t\tpriority: 80,\n\t\tcommand: options.command ?? \"headroom\",\n\t\targs: (request) => [\"compress\", \"--target-tokens\", String(request.targetTokens), \"--model\", request.modelId],\n\t\trunner: options.runner,\n\t\ttokenCounter: options.tokenCounter,\n\t});\n}\n\nexport function createLlmlinguaCliCompressor(options: CliCompressorOptions = {}): ContextCompressorAdapter {\n\treturn createCliCompressor({\n\t\tid: \"llmlingua-cli\",\n\t\tpriority: 60,\n\t\tcommand: options.command ?? \"llmlingua\",\n\t\targs: (request) => [\"compress\", \"--target-tokens\", String(request.targetTokens), \"--model\", request.modelId],\n\t\trunner: options.runner,\n\t\ttokenCounter: options.tokenCounter,\n\t});\n}\n\nexport function createContextCompressorForMode(\n\tmode: ContextBudgetCompressorMode,\n\toptions: CliCompressorOptions = {},\n): ContextCompressorAdapter | undefined {\n\tif (mode === \"off\") {\n\t\treturn undefined;\n\t}\n\tif (mode === \"headroom\") {\n\t\treturn createHeadroomCliCompressor(options);\n\t}\n\tif (mode === \"llmlingua\") {\n\t\treturn createLlmlinguaCliCompressor(options);\n\t}\n\treturn createCompressorRegistry([createHeadroomCliCompressor(options), createLlmlinguaCliCompressor(options)]);\n}\n\nexport function createCompressorRegistry(adapters: readonly ContextCompressorAdapter[]): ContextCompressorAdapter {\n\tconst ordered = [...adapters].sort((a, b) => b.priority - a.priority || a.id.localeCompare(b.id));\n\treturn {\n\t\tid: \"context-compressor-registry\",\n\t\tpriority: 100,\n\t\tisAvailable: async () => true,\n\t\tasync compress(request) {\n\t\t\tconst notes: string[] = [];\n\t\t\tfor (const adapter of ordered) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(await adapter.isAvailable())) {\n\t\t\t\t\t\tnotes.push(`${adapter.id}:unavailable`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await adapter.compress(request);\n\t\t\t\t\treturn { ...result, notes: [...notes, ...result.notes] };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : \"unknown compressor failure\";\n\t\t\t\t\tnotes.push(`${adapter.id}:failed:${message}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn createNoCompressionResult(request, createFallbackTokenCounter(), notes);\n\t\t},\n\t};\n}\n\ninterface CliCompressorInternalOptions {\n\treadonly id: string;\n\treadonly priority: number;\n\treadonly command: string;\n\treadonly args: (request: ContextCompressionRequest) => readonly string[];\n\treadonly runner?: CommandRunner;\n\treadonly tokenCounter?: TokenCounterAdapter;\n}\n\nfunction createCliCompressor(options: CliCompressorInternalOptions): ContextCompressorAdapter {\n\tconst runner = options.runner ?? createNodeCommandRunner();\n\tconst tokenCounter = options.tokenCounter ?? createFallbackTokenCounter();\n\treturn {\n\t\tid: options.id,\n\t\tpriority: options.priority,\n\t\tasync isAvailable() {\n\t\t\tconst result = await runner.run({\n\t\t\t\tcommand: options.command,\n\t\t\t\targs: [\"--version\"],\n\t\t\t\tinput: \"\",\n\t\t\t\ttimeoutMs: 3_000,\n\t\t\t});\n\t\t\treturn result.exitCode === 0 && !result.timedOut;\n\t\t},\n\t\tasync compress(request) {\n\t\t\tconst input = tokenCounter.countText(request.text, request.modelId);\n\t\t\tif (input.tokens <= request.targetTokens) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [`${options.id}:already-within-budget`]);\n\t\t\t}\n\t\t\tconst timeoutMs = request.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\t\t\tconst result = await runner.run({\n\t\t\t\tcommand: options.command,\n\t\t\t\targs: options.args(request),\n\t\t\t\tinput: request.text,\n\t\t\t\ttimeoutMs,\n\t\t\t});\n\t\t\tif (result.timedOut) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [`${options.id}:timeout`]);\n\t\t\t}\n\t\t\tif (result.exitCode !== 0) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [\n\t\t\t\t\t`${options.id}:exit:${result.exitCode ?? \"null\"}`,\n\t\t\t\t]);\n\t\t\t}\n\t\t\tconst maxOutputChars = request.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS;\n\t\t\tconst outputText = result.stdout.slice(0, maxOutputChars);\n\t\t\tif (outputText.trim().length === 0) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [`${options.id}:empty-output`]);\n\t\t\t}\n\t\t\tconst output = tokenCounter.countText(outputText, request.modelId);\n\t\t\treturn {\n\t\t\t\ttext: outputText,\n\t\t\t\tmethod: \"compressed\",\n\t\t\t\tadapterId: options.id,\n\t\t\t\tinput,\n\t\t\t\toutput,\n\t\t\t\tnotes: outputText.length < result.stdout.length ? [`${options.id}:output-truncated`] : [`${options.id}:ok`],\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction createNoCompressionResult(\n\trequest: ContextCompressionRequest,\n\ttokenCounter: TokenCounterAdapter,\n\tnotes: readonly string[],\n): ContextCompressionResult {\n\tconst input = tokenCounter.countText(request.text, request.modelId);\n\treturn {\n\t\ttext: request.text,\n\t\tmethod: \"none\",\n\t\tadapterId: \"none\",\n\t\tinput,\n\t\toutput: input,\n\t\tnotes,\n\t};\n}\n"]}
@@ -0,0 +1,166 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createFallbackTokenCounter, } from "./context-budget-token-counter.js";
3
+ const DEFAULT_TIMEOUT_MS = 15_000;
4
+ const DEFAULT_MAX_OUTPUT_CHARS = 400_000;
5
+ export function createNodeCommandRunner() {
6
+ return {
7
+ run(request) {
8
+ return new Promise((resolve) => {
9
+ const child = spawn(request.command, [...request.args], { stdio: ["pipe", "pipe", "pipe"] });
10
+ let stdout = "";
11
+ let stderr = "";
12
+ let settled = false;
13
+ const timeout = setTimeout(() => {
14
+ settled = true;
15
+ child.kill("SIGTERM");
16
+ resolve({ exitCode: null, stdout, stderr, timedOut: true });
17
+ }, request.timeoutMs);
18
+ child.stdout.setEncoding("utf8");
19
+ child.stderr.setEncoding("utf8");
20
+ child.stdout.on("data", (chunk) => {
21
+ stdout += chunk;
22
+ });
23
+ child.stderr.on("data", (chunk) => {
24
+ stderr += chunk;
25
+ });
26
+ child.on("error", (error) => {
27
+ if (settled)
28
+ return;
29
+ settled = true;
30
+ clearTimeout(timeout);
31
+ resolve({ exitCode: null, stdout, stderr: error.message, timedOut: false });
32
+ });
33
+ child.on("close", (exitCode) => {
34
+ if (settled)
35
+ return;
36
+ settled = true;
37
+ clearTimeout(timeout);
38
+ resolve({ exitCode, stdout, stderr, timedOut: false });
39
+ });
40
+ child.stdin.end(request.input, "utf8");
41
+ });
42
+ },
43
+ };
44
+ }
45
+ export function createHeadroomCliCompressor(options = {}) {
46
+ return createCliCompressor({
47
+ id: "headroom-cli",
48
+ priority: 80,
49
+ command: options.command ?? "headroom",
50
+ args: (request) => ["compress", "--target-tokens", String(request.targetTokens), "--model", request.modelId],
51
+ runner: options.runner,
52
+ tokenCounter: options.tokenCounter,
53
+ });
54
+ }
55
+ export function createLlmlinguaCliCompressor(options = {}) {
56
+ return createCliCompressor({
57
+ id: "llmlingua-cli",
58
+ priority: 60,
59
+ command: options.command ?? "llmlingua",
60
+ args: (request) => ["compress", "--target-tokens", String(request.targetTokens), "--model", request.modelId],
61
+ runner: options.runner,
62
+ tokenCounter: options.tokenCounter,
63
+ });
64
+ }
65
+ export function createContextCompressorForMode(mode, options = {}) {
66
+ if (mode === "off") {
67
+ return undefined;
68
+ }
69
+ if (mode === "headroom") {
70
+ return createHeadroomCliCompressor(options);
71
+ }
72
+ if (mode === "llmlingua") {
73
+ return createLlmlinguaCliCompressor(options);
74
+ }
75
+ return createCompressorRegistry([createHeadroomCliCompressor(options), createLlmlinguaCliCompressor(options)]);
76
+ }
77
+ export function createCompressorRegistry(adapters) {
78
+ const ordered = [...adapters].sort((a, b) => b.priority - a.priority || a.id.localeCompare(b.id));
79
+ return {
80
+ id: "context-compressor-registry",
81
+ priority: 100,
82
+ isAvailable: async () => true,
83
+ async compress(request) {
84
+ const notes = [];
85
+ for (const adapter of ordered) {
86
+ try {
87
+ if (!(await adapter.isAvailable())) {
88
+ notes.push(`${adapter.id}:unavailable`);
89
+ continue;
90
+ }
91
+ const result = await adapter.compress(request);
92
+ return { ...result, notes: [...notes, ...result.notes] };
93
+ }
94
+ catch (error) {
95
+ const message = error instanceof Error ? error.message : "unknown compressor failure";
96
+ notes.push(`${adapter.id}:failed:${message}`);
97
+ }
98
+ }
99
+ return createNoCompressionResult(request, createFallbackTokenCounter(), notes);
100
+ },
101
+ };
102
+ }
103
+ function createCliCompressor(options) {
104
+ const runner = options.runner ?? createNodeCommandRunner();
105
+ const tokenCounter = options.tokenCounter ?? createFallbackTokenCounter();
106
+ return {
107
+ id: options.id,
108
+ priority: options.priority,
109
+ async isAvailable() {
110
+ const result = await runner.run({
111
+ command: options.command,
112
+ args: ["--version"],
113
+ input: "",
114
+ timeoutMs: 3_000,
115
+ });
116
+ return result.exitCode === 0 && !result.timedOut;
117
+ },
118
+ async compress(request) {
119
+ const input = tokenCounter.countText(request.text, request.modelId);
120
+ if (input.tokens <= request.targetTokens) {
121
+ return createNoCompressionResult(request, tokenCounter, [`${options.id}:already-within-budget`]);
122
+ }
123
+ const timeoutMs = request.timeoutMs ?? DEFAULT_TIMEOUT_MS;
124
+ const result = await runner.run({
125
+ command: options.command,
126
+ args: options.args(request),
127
+ input: request.text,
128
+ timeoutMs,
129
+ });
130
+ if (result.timedOut) {
131
+ return createNoCompressionResult(request, tokenCounter, [`${options.id}:timeout`]);
132
+ }
133
+ if (result.exitCode !== 0) {
134
+ return createNoCompressionResult(request, tokenCounter, [
135
+ `${options.id}:exit:${result.exitCode ?? "null"}`,
136
+ ]);
137
+ }
138
+ const maxOutputChars = request.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS;
139
+ const outputText = result.stdout.slice(0, maxOutputChars);
140
+ if (outputText.trim().length === 0) {
141
+ return createNoCompressionResult(request, tokenCounter, [`${options.id}:empty-output`]);
142
+ }
143
+ const output = tokenCounter.countText(outputText, request.modelId);
144
+ return {
145
+ text: outputText,
146
+ method: "compressed",
147
+ adapterId: options.id,
148
+ input,
149
+ output,
150
+ notes: outputText.length < result.stdout.length ? [`${options.id}:output-truncated`] : [`${options.id}:ok`],
151
+ };
152
+ },
153
+ };
154
+ }
155
+ function createNoCompressionResult(request, tokenCounter, notes) {
156
+ const input = tokenCounter.countText(request.text, request.modelId);
157
+ return {
158
+ text: request.text,
159
+ method: "none",
160
+ adapterId: "none",
161
+ input,
162
+ output: input,
163
+ notes,
164
+ };
165
+ }
166
+ //# sourceMappingURL=context-budget-compressors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget-compressors.js","sourceRoot":"","sources":["../../src/core/context-budget-compressors.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport {\n\tcreateFallbackTokenCounter,\n\ttype TokenCounterAdapter,\n\ttype TokenCountResult,\n} from \"./context-budget-token-counter.ts\";\n\nexport type ContextBudgetCompressorMode = \"off\" | \"auto\" | \"headroom\" | \"llmlingua\";\nexport type ContextBudgetCompressionMethod = \"compressed\" | \"none\";\n\nexport interface ContextCompressionRequest {\n\treadonly text: string;\n\treadonly targetTokens: number;\n\treadonly modelId: string;\n\treadonly timeoutMs?: number;\n\treadonly maxOutputChars?: number;\n}\n\nexport interface ContextCompressionResult {\n\treadonly text: string;\n\treadonly method: ContextBudgetCompressionMethod;\n\treadonly adapterId: string;\n\treadonly input: TokenCountResult;\n\treadonly output: TokenCountResult;\n\treadonly notes: readonly string[];\n}\n\nexport interface ContextCompressorAdapter {\n\treadonly id: string;\n\treadonly priority: number;\n\tisAvailable(): Promise<boolean>;\n\tcompress(request: ContextCompressionRequest): Promise<ContextCompressionResult>;\n}\n\nexport interface CommandRunRequest {\n\treadonly command: string;\n\treadonly args: readonly string[];\n\treadonly input: string;\n\treadonly timeoutMs: number;\n}\n\nexport interface CommandRunResult {\n\treadonly exitCode: number | null;\n\treadonly stdout: string;\n\treadonly stderr: string;\n\treadonly timedOut: boolean;\n}\n\nexport interface CommandRunner {\n\trun(request: CommandRunRequest): Promise<CommandRunResult>;\n}\n\nexport interface CliCompressorOptions {\n\treadonly command?: string;\n\treadonly runner?: CommandRunner;\n\treadonly tokenCounter?: TokenCounterAdapter;\n}\n\nconst DEFAULT_TIMEOUT_MS = 15_000;\nconst DEFAULT_MAX_OUTPUT_CHARS = 400_000;\n\nexport function createNodeCommandRunner(): CommandRunner {\n\treturn {\n\t\trun(request) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst child = spawn(request.command, [...request.args], { stdio: [\"pipe\", \"pipe\", \"pipe\"] });\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tlet stderr = \"\";\n\t\t\t\tlet settled = false;\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tchild.kill(\"SIGTERM\");\n\t\t\t\t\tresolve({ exitCode: null, stdout, stderr, timedOut: true });\n\t\t\t\t}, request.timeoutMs);\n\t\t\t\tchild.stdout.setEncoding(\"utf8\");\n\t\t\t\tchild.stderr.setEncoding(\"utf8\");\n\t\t\t\tchild.stdout.on(\"data\", (chunk: string) => {\n\t\t\t\t\tstdout += chunk;\n\t\t\t\t});\n\t\t\t\tchild.stderr.on(\"data\", (chunk: string) => {\n\t\t\t\t\tstderr += chunk;\n\t\t\t\t});\n\t\t\t\tchild.on(\"error\", (error) => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tresolve({ exitCode: null, stdout, stderr: error.message, timedOut: false });\n\t\t\t\t});\n\t\t\t\tchild.on(\"close\", (exitCode) => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\tsettled = true;\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tresolve({ exitCode, stdout, stderr, timedOut: false });\n\t\t\t\t});\n\t\t\t\tchild.stdin.end(request.input, \"utf8\");\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createHeadroomCliCompressor(options: CliCompressorOptions = {}): ContextCompressorAdapter {\n\treturn createCliCompressor({\n\t\tid: \"headroom-cli\",\n\t\tpriority: 80,\n\t\tcommand: options.command ?? \"headroom\",\n\t\targs: (request) => [\"compress\", \"--target-tokens\", String(request.targetTokens), \"--model\", request.modelId],\n\t\trunner: options.runner,\n\t\ttokenCounter: options.tokenCounter,\n\t});\n}\n\nexport function createLlmlinguaCliCompressor(options: CliCompressorOptions = {}): ContextCompressorAdapter {\n\treturn createCliCompressor({\n\t\tid: \"llmlingua-cli\",\n\t\tpriority: 60,\n\t\tcommand: options.command ?? \"llmlingua\",\n\t\targs: (request) => [\"compress\", \"--target-tokens\", String(request.targetTokens), \"--model\", request.modelId],\n\t\trunner: options.runner,\n\t\ttokenCounter: options.tokenCounter,\n\t});\n}\n\nexport function createContextCompressorForMode(\n\tmode: ContextBudgetCompressorMode,\n\toptions: CliCompressorOptions = {},\n): ContextCompressorAdapter | undefined {\n\tif (mode === \"off\") {\n\t\treturn undefined;\n\t}\n\tif (mode === \"headroom\") {\n\t\treturn createHeadroomCliCompressor(options);\n\t}\n\tif (mode === \"llmlingua\") {\n\t\treturn createLlmlinguaCliCompressor(options);\n\t}\n\treturn createCompressorRegistry([createHeadroomCliCompressor(options), createLlmlinguaCliCompressor(options)]);\n}\n\nexport function createCompressorRegistry(adapters: readonly ContextCompressorAdapter[]): ContextCompressorAdapter {\n\tconst ordered = [...adapters].sort((a, b) => b.priority - a.priority || a.id.localeCompare(b.id));\n\treturn {\n\t\tid: \"context-compressor-registry\",\n\t\tpriority: 100,\n\t\tisAvailable: async () => true,\n\t\tasync compress(request) {\n\t\t\tconst notes: string[] = [];\n\t\t\tfor (const adapter of ordered) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(await adapter.isAvailable())) {\n\t\t\t\t\t\tnotes.push(`${adapter.id}:unavailable`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst result = await adapter.compress(request);\n\t\t\t\t\treturn { ...result, notes: [...notes, ...result.notes] };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : \"unknown compressor failure\";\n\t\t\t\t\tnotes.push(`${adapter.id}:failed:${message}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn createNoCompressionResult(request, createFallbackTokenCounter(), notes);\n\t\t},\n\t};\n}\n\ninterface CliCompressorInternalOptions {\n\treadonly id: string;\n\treadonly priority: number;\n\treadonly command: string;\n\treadonly args: (request: ContextCompressionRequest) => readonly string[];\n\treadonly runner?: CommandRunner;\n\treadonly tokenCounter?: TokenCounterAdapter;\n}\n\nfunction createCliCompressor(options: CliCompressorInternalOptions): ContextCompressorAdapter {\n\tconst runner = options.runner ?? createNodeCommandRunner();\n\tconst tokenCounter = options.tokenCounter ?? createFallbackTokenCounter();\n\treturn {\n\t\tid: options.id,\n\t\tpriority: options.priority,\n\t\tasync isAvailable() {\n\t\t\tconst result = await runner.run({\n\t\t\t\tcommand: options.command,\n\t\t\t\targs: [\"--version\"],\n\t\t\t\tinput: \"\",\n\t\t\t\ttimeoutMs: 3_000,\n\t\t\t});\n\t\t\treturn result.exitCode === 0 && !result.timedOut;\n\t\t},\n\t\tasync compress(request) {\n\t\t\tconst input = tokenCounter.countText(request.text, request.modelId);\n\t\t\tif (input.tokens <= request.targetTokens) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [`${options.id}:already-within-budget`]);\n\t\t\t}\n\t\t\tconst timeoutMs = request.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\t\t\tconst result = await runner.run({\n\t\t\t\tcommand: options.command,\n\t\t\t\targs: options.args(request),\n\t\t\t\tinput: request.text,\n\t\t\t\ttimeoutMs,\n\t\t\t});\n\t\t\tif (result.timedOut) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [`${options.id}:timeout`]);\n\t\t\t}\n\t\t\tif (result.exitCode !== 0) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [\n\t\t\t\t\t`${options.id}:exit:${result.exitCode ?? \"null\"}`,\n\t\t\t\t]);\n\t\t\t}\n\t\t\tconst maxOutputChars = request.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS;\n\t\t\tconst outputText = result.stdout.slice(0, maxOutputChars);\n\t\t\tif (outputText.trim().length === 0) {\n\t\t\t\treturn createNoCompressionResult(request, tokenCounter, [`${options.id}:empty-output`]);\n\t\t\t}\n\t\t\tconst output = tokenCounter.countText(outputText, request.modelId);\n\t\t\treturn {\n\t\t\t\ttext: outputText,\n\t\t\t\tmethod: \"compressed\",\n\t\t\t\tadapterId: options.id,\n\t\t\t\tinput,\n\t\t\t\toutput,\n\t\t\t\tnotes: outputText.length < result.stdout.length ? [`${options.id}:output-truncated`] : [`${options.id}:ok`],\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction createNoCompressionResult(\n\trequest: ContextCompressionRequest,\n\ttokenCounter: TokenCounterAdapter,\n\tnotes: readonly string[],\n): ContextCompressionResult {\n\tconst input = tokenCounter.countText(request.text, request.modelId);\n\treturn {\n\t\ttext: request.text,\n\t\tmethod: \"none\",\n\t\tadapterId: \"none\",\n\t\tinput,\n\t\toutput: input,\n\t\tnotes,\n\t};\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export { type ContextBudgetItemV2, type ContextBudgetPriorityV2, type ContextBudgetTierV2, type ContextEvidenceKindV2, type ContextRepresentationCandidateV2, type ContextRepresentationFidelityV2, type ContextRepresentationKindV2, type ContextSourceRefV2, chooseHeadroomRepresentation, DEFAULT_HEADROOM_QUALITY_POLICY, deriveRepresentationCandidates, estimatePointerTokens, fnv1aHex, fullTextTokens, getHeadroomRuntimeStatus, type HeadroomQualityPolicyV2, type HeadroomRuntimeStatusV2, heuristicTokenCount, type RepresentationBudgetContext, } from "./context-budget-headroom.ts";
2
+ export { computeCoverageGap } from "./context-budget-v2-coverage.ts";
3
+ export { computePlanHash, contentHashOf } from "./context-budget-v2-plan-hash.ts";
4
+ export { planPromptContextBudgetV2 } from "./context-budget-v2-planner.ts";
5
+ export { scoreContextBudgetItemV2 } from "./context-budget-v2-scoring.ts";
6
+ export { ALL_TIERS_V2, CONTEXT_BUDGET_POLICY_VERSION_V2, type ContextBudgetObservabilityCountsV2, type ContextBudgetObservabilityTokensV2, DEFAULT_TIER_POLICY_V2, type PromptContextBudgetInputV2, type PromptContextBudgetObservabilityV2, type PromptContextBudgetPlanV2, type QualityDiagnosticReasonV2, type QualityDiagnosticV2, type SelectedRepresentationV2, type TierBudgetAllocationV2, type TierBudgetPolicyV2, } from "./context-budget-v2-types.ts";
7
+ //# sourceMappingURL=context-budget-governor-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget-governor-v2.d.ts","sourceRoot":"","sources":["../../src/core/context-budget-governor-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,qBAAqB,EACrB,QAAQ,EACR,cAAc,EACd,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,mBAAmB,EACnB,KAAK,2BAA2B,GAChC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EACN,YAAY,EACZ,gCAAgC,EAChC,KAAK,kCAAkC,EACvC,KAAK,kCAAkC,EACvC,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACvB,MAAM,8BAA8B,CAAC","sourcesContent":["export {\n\ttype ContextBudgetItemV2,\n\ttype ContextBudgetPriorityV2,\n\ttype ContextBudgetTierV2,\n\ttype ContextEvidenceKindV2,\n\ttype ContextRepresentationCandidateV2,\n\ttype ContextRepresentationFidelityV2,\n\ttype ContextRepresentationKindV2,\n\ttype ContextSourceRefV2,\n\tchooseHeadroomRepresentation,\n\tDEFAULT_HEADROOM_QUALITY_POLICY,\n\tderiveRepresentationCandidates,\n\testimatePointerTokens,\n\tfnv1aHex,\n\tfullTextTokens,\n\tgetHeadroomRuntimeStatus,\n\ttype HeadroomQualityPolicyV2,\n\ttype HeadroomRuntimeStatusV2,\n\theuristicTokenCount,\n\ttype RepresentationBudgetContext,\n} from \"./context-budget-headroom.ts\";\nexport { computeCoverageGap } from \"./context-budget-v2-coverage.ts\";\nexport { computePlanHash, contentHashOf } from \"./context-budget-v2-plan-hash.ts\";\nexport { planPromptContextBudgetV2 } from \"./context-budget-v2-planner.ts\";\nexport { scoreContextBudgetItemV2 } from \"./context-budget-v2-scoring.ts\";\nexport {\n\tALL_TIERS_V2,\n\tCONTEXT_BUDGET_POLICY_VERSION_V2,\n\ttype ContextBudgetObservabilityCountsV2,\n\ttype ContextBudgetObservabilityTokensV2,\n\tDEFAULT_TIER_POLICY_V2,\n\ttype PromptContextBudgetInputV2,\n\ttype PromptContextBudgetObservabilityV2,\n\ttype PromptContextBudgetPlanV2,\n\ttype QualityDiagnosticReasonV2,\n\ttype QualityDiagnosticV2,\n\ttype SelectedRepresentationV2,\n\ttype TierBudgetAllocationV2,\n\ttype TierBudgetPolicyV2,\n} from \"./context-budget-v2-types.ts\";\n"]}
@@ -0,0 +1,7 @@
1
+ export { chooseHeadroomRepresentation, DEFAULT_HEADROOM_QUALITY_POLICY, deriveRepresentationCandidates, estimatePointerTokens, fnv1aHex, fullTextTokens, getHeadroomRuntimeStatus, heuristicTokenCount, } from "./context-budget-headroom.js";
2
+ export { computeCoverageGap } from "./context-budget-v2-coverage.js";
3
+ export { computePlanHash, contentHashOf } from "./context-budget-v2-plan-hash.js";
4
+ export { planPromptContextBudgetV2 } from "./context-budget-v2-planner.js";
5
+ export { scoreContextBudgetItemV2 } from "./context-budget-v2-scoring.js";
6
+ export { ALL_TIERS_V2, CONTEXT_BUDGET_POLICY_VERSION_V2, DEFAULT_TIER_POLICY_V2, } from "./context-budget-v2-types.js";
7
+ //# sourceMappingURL=context-budget-governor-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget-governor-v2.js","sourceRoot":"","sources":["../../src/core/context-budget-governor-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EASN,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,EAC9B,qBAAqB,EACrB,QAAQ,EACR,cAAc,EACd,wBAAwB,EAGxB,mBAAmB,GAEnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EACN,YAAY,EACZ,gCAAgC,EAGhC,sBAAsB,GAStB,MAAM,8BAA8B,CAAC","sourcesContent":["export {\n\ttype ContextBudgetItemV2,\n\ttype ContextBudgetPriorityV2,\n\ttype ContextBudgetTierV2,\n\ttype ContextEvidenceKindV2,\n\ttype ContextRepresentationCandidateV2,\n\ttype ContextRepresentationFidelityV2,\n\ttype ContextRepresentationKindV2,\n\ttype ContextSourceRefV2,\n\tchooseHeadroomRepresentation,\n\tDEFAULT_HEADROOM_QUALITY_POLICY,\n\tderiveRepresentationCandidates,\n\testimatePointerTokens,\n\tfnv1aHex,\n\tfullTextTokens,\n\tgetHeadroomRuntimeStatus,\n\ttype HeadroomQualityPolicyV2,\n\ttype HeadroomRuntimeStatusV2,\n\theuristicTokenCount,\n\ttype RepresentationBudgetContext,\n} from \"./context-budget-headroom.ts\";\nexport { computeCoverageGap } from \"./context-budget-v2-coverage.ts\";\nexport { computePlanHash, contentHashOf } from \"./context-budget-v2-plan-hash.ts\";\nexport { planPromptContextBudgetV2 } from \"./context-budget-v2-planner.ts\";\nexport { scoreContextBudgetItemV2 } from \"./context-budget-v2-scoring.ts\";\nexport {\n\tALL_TIERS_V2,\n\tCONTEXT_BUDGET_POLICY_VERSION_V2,\n\ttype ContextBudgetObservabilityCountsV2,\n\ttype ContextBudgetObservabilityTokensV2,\n\tDEFAULT_TIER_POLICY_V2,\n\ttype PromptContextBudgetInputV2,\n\ttype PromptContextBudgetObservabilityV2,\n\ttype PromptContextBudgetPlanV2,\n\ttype QualityDiagnosticReasonV2,\n\ttype QualityDiagnosticV2,\n\ttype SelectedRepresentationV2,\n\ttype TierBudgetAllocationV2,\n\ttype TierBudgetPolicyV2,\n} from \"./context-budget-v2-types.ts\";\n"]}
@@ -0,0 +1,67 @@
1
+ import { type TokenCounterAdapter } from "./context-budget-token-counter.ts";
2
+ export type ContextBudgetItemKind = "system" | "context-pointer" | "context-full" | "skill-header" | "skill" | "mcp" | "history" | "tool-result" | "subagent-evidence" | "budget-note";
3
+ export type ContextBudgetPriority = "hard" | "high" | "medium" | "low";
4
+ export type ContextBudgetDiagnosticReason = "hard_pin_over_capacity" | "item_omitted" | "invalid_budget";
5
+ export interface ContextBudgetItem {
6
+ readonly id: string;
7
+ readonly kind: ContextBudgetItemKind;
8
+ readonly text: string;
9
+ readonly priority: ContextBudgetPriority;
10
+ readonly tokenEstimate?: number;
11
+ readonly relevance?: number;
12
+ readonly recency?: number;
13
+ readonly evidenceValue?: number;
14
+ readonly redundancyKey?: string;
15
+ }
16
+ export interface ContextBudgetGovernorInput {
17
+ readonly maxTokens: number;
18
+ readonly responseReserveTokens?: number;
19
+ readonly modelId?: string;
20
+ readonly policyVersion?: string;
21
+ readonly items: readonly ContextBudgetItem[];
22
+ readonly tokenCounter?: TokenCounterAdapter;
23
+ }
24
+ export interface ContextBudgetPlannedItem extends ContextBudgetItem {
25
+ readonly estimatedTokens: number;
26
+ readonly score: number;
27
+ }
28
+ export interface ContextBudgetDiagnostic {
29
+ readonly reason: ContextBudgetDiagnosticReason;
30
+ readonly itemId?: string;
31
+ readonly detail: string;
32
+ }
33
+ export interface ContextBudgetObservabilityCounts {
34
+ readonly selected: number;
35
+ readonly omitted: number;
36
+ }
37
+ export interface ContextBudgetObservabilityTokens {
38
+ readonly available: number;
39
+ readonly used: number;
40
+ readonly omitted: number;
41
+ readonly tokenSavings: number;
42
+ }
43
+ export interface ContextBudgetObservability {
44
+ readonly counts: ContextBudgetObservabilityCounts;
45
+ readonly diagnosticReasons: readonly ContextBudgetDiagnosticReason[];
46
+ readonly tokens: ContextBudgetObservabilityTokens;
47
+ readonly planHash: string;
48
+ }
49
+ export interface ContextBudgetPlan {
50
+ readonly policyVersion: string;
51
+ readonly maxTokens: number;
52
+ readonly responseReserveTokens: number;
53
+ readonly availableTokens: number;
54
+ readonly usedTokens: number;
55
+ readonly omittedTokens: number;
56
+ readonly emergency: boolean;
57
+ readonly omittedHighPriority: boolean;
58
+ readonly includedItems: readonly ContextBudgetPlannedItem[];
59
+ readonly omittedItems: readonly ContextBudgetPlannedItem[];
60
+ readonly diagnostics: readonly ContextBudgetDiagnostic[];
61
+ readonly planHash: string;
62
+ readonly observability: ContextBudgetObservability;
63
+ }
64
+ export declare const CONTEXT_BUDGET_POLICY_VERSION = "context-budget-v1";
65
+ export declare function planContextBudget(input: ContextBudgetGovernorInput): ContextBudgetPlan;
66
+ export declare function scoreContextBudgetItem(item: ContextBudgetItem, estimatedTokens: number): number;
67
+ //# sourceMappingURL=context-budget-governor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget-governor.d.ts","sourceRoot":"","sources":["../../src/core/context-budget-governor.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { createFallbackTokenCounter, type TokenCounterAdapter } from \"./context-budget-token-counter.ts\";\n\nexport type ContextBudgetItemKind =\n\t| \"system\"\n\t| \"context-pointer\"\n\t| \"context-full\"\n\t| \"skill-header\"\n\t| \"skill\"\n\t| \"mcp\"\n\t| \"history\"\n\t| \"tool-result\"\n\t| \"subagent-evidence\"\n\t| \"budget-note\";\n\nexport type ContextBudgetPriority = \"hard\" | \"high\" | \"medium\" | \"low\";\nexport type ContextBudgetDiagnosticReason = \"hard_pin_over_capacity\" | \"item_omitted\" | \"invalid_budget\";\n\nexport interface ContextBudgetItem {\n\treadonly id: string;\n\treadonly kind: ContextBudgetItemKind;\n\treadonly text: string;\n\treadonly priority: ContextBudgetPriority;\n\treadonly tokenEstimate?: number;\n\treadonly relevance?: number;\n\treadonly recency?: number;\n\treadonly evidenceValue?: number;\n\treadonly redundancyKey?: string;\n}\n\nexport interface ContextBudgetGovernorInput {\n\treadonly maxTokens: number;\n\treadonly responseReserveTokens?: number;\n\treadonly modelId?: string;\n\treadonly policyVersion?: string;\n\treadonly items: readonly ContextBudgetItem[];\n\treadonly tokenCounter?: TokenCounterAdapter;\n}\n\nexport interface ContextBudgetPlannedItem extends ContextBudgetItem {\n\treadonly estimatedTokens: number;\n\treadonly score: number;\n}\n\nexport interface ContextBudgetDiagnostic {\n\treadonly reason: ContextBudgetDiagnosticReason;\n\treadonly itemId?: string;\n\treadonly detail: string;\n}\n\nexport interface ContextBudgetObservabilityCounts {\n\treadonly selected: number;\n\treadonly omitted: number;\n}\n\nexport interface ContextBudgetObservabilityTokens {\n\treadonly available: number;\n\treadonly used: number;\n\treadonly omitted: number;\n\treadonly tokenSavings: number;\n}\n\nexport interface ContextBudgetObservability {\n\treadonly counts: ContextBudgetObservabilityCounts;\n\treadonly diagnosticReasons: readonly ContextBudgetDiagnosticReason[];\n\treadonly tokens: ContextBudgetObservabilityTokens;\n\treadonly planHash: string;\n}\n\nexport interface ContextBudgetPlan {\n\treadonly policyVersion: string;\n\treadonly maxTokens: number;\n\treadonly responseReserveTokens: number;\n\treadonly availableTokens: number;\n\treadonly usedTokens: number;\n\treadonly omittedTokens: number;\n\treadonly emergency: boolean;\n\treadonly omittedHighPriority: boolean;\n\treadonly includedItems: readonly ContextBudgetPlannedItem[];\n\treadonly omittedItems: readonly ContextBudgetPlannedItem[];\n\treadonly diagnostics: readonly ContextBudgetDiagnostic[];\n\treadonly planHash: string;\n\treadonly observability: ContextBudgetObservability;\n}\n\nexport const CONTEXT_BUDGET_POLICY_VERSION = \"context-budget-v1\";\n\nexport function planContextBudget(input: ContextBudgetGovernorInput): ContextBudgetPlan {\n\tconst tokenCounter = input.tokenCounter ?? createFallbackTokenCounter();\n\tconst modelId = input.modelId ?? \"unknown\";\n\tconst diagnostics: ContextBudgetDiagnostic[] = [];\n\tconst maxTokens = normalizeBudgetTokens(\"maxTokens\", input.maxTokens, diagnostics);\n\tconst responseReserveTokens = normalizeBudgetTokens(\n\t\t\"responseReserveTokens\",\n\t\tinput.responseReserveTokens ?? 0,\n\t\tdiagnostics,\n\t);\n\tconst availableTokens = Math.max(0, maxTokens - responseReserveTokens);\n\tconst plannedItems = input.items.map((item) => planItem(item, tokenCounter, modelId, diagnostics));\n\tconst includedIds = new Set<string>();\n\tlet usedTokens = 0;\n\n\tfor (const item of plannedItems) {\n\t\tif (item.priority !== \"hard\") {\n\t\t\tcontinue;\n\t\t}\n\t\tincludedIds.add(item.id);\n\t\tusedTokens += item.estimatedTokens;\n\t}\n\n\tif (usedTokens > availableTokens) {\n\t\tdiagnostics.push({\n\t\t\treason: \"hard_pin_over_capacity\",\n\t\t\tdetail: `hard-pinned context uses ${usedTokens} tokens against ${availableTokens} available tokens`,\n\t\t});\n\t}\n\n\tconst selectedRedundancyKeys = new Set<string>();\n\tconst remainingOptionalItems = plannedItems.filter((item) => item.priority !== \"hard\");\n\n\twhile (remainingOptionalItems.length > 0) {\n\t\tconst rankedItems = remainingOptionalItems\n\t\t\t.map((item) => applyRedundancyPenalty(item, selectedRedundancyKeys))\n\t\t\t.sort(comparePlannedItemsForSelection);\n\t\tconst selected = rankedItems.find((item) => usedTokens + item.estimatedTokens <= availableTokens);\n\t\tif (!selected) {\n\t\t\tbreak;\n\t\t}\n\n\t\tincludedIds.add(selected.id);\n\t\tusedTokens += selected.estimatedTokens;\n\t\tif (selected.redundancyKey) {\n\t\t\tselectedRedundancyKeys.add(selected.redundancyKey);\n\t\t}\n\n\t\tconst selectedIndex = remainingOptionalItems.findIndex((item) => item.id === selected.id);\n\t\tremainingOptionalItems.splice(selectedIndex, 1);\n\t}\n\n\tconst includedItems = plannedItems.filter((item) => includedIds.has(item.id));\n\tconst omittedItems = plannedItems.filter((item) => !includedIds.has(item.id));\n\tfor (const item of omittedItems) {\n\t\tdiagnostics.push({ reason: \"item_omitted\", itemId: item.id, detail: `${item.kind} omitted from context budget` });\n\t}\n\tconst omittedTokens = omittedItems.reduce((sum, item) => sum + item.estimatedTokens, 0);\n\tconst omittedHighPriority = omittedItems.some((item) => item.priority === \"high\");\n\tconst emergency =\n\t\tusedTokens > availableTokens || diagnostics.some((diagnostic) => diagnostic.reason === \"invalid_budget\");\n\tconst policyVersion = input.policyVersion ?? CONTEXT_BUDGET_POLICY_VERSION;\n\n\tconst planWithoutHash = {\n\t\tpolicyVersion,\n\t\tmaxTokens,\n\t\tresponseReserveTokens,\n\t\tavailableTokens,\n\t\tusedTokens,\n\t\tomittedTokens,\n\t\temergency,\n\t\tomittedHighPriority,\n\t\tincluded: includedItems.map((item) => [item.id, item.estimatedTokens, item.score]),\n\t\tomitted: omittedItems.map((item) => [item.id, item.estimatedTokens, item.score]),\n\t};\n\tconst planHash = createHash(\"sha256\").update(JSON.stringify(planWithoutHash), \"utf8\").digest(\"hex\");\n\tconst observability = buildObservability({\n\t\tavailableTokens,\n\t\tdiagnostics,\n\t\tincludedItems,\n\t\tomittedItems,\n\t\tomittedTokens,\n\t\tplanHash,\n\t\tusedTokens,\n\t});\n\n\treturn {\n\t\tpolicyVersion,\n\t\tmaxTokens,\n\t\tresponseReserveTokens,\n\t\tavailableTokens,\n\t\tusedTokens,\n\t\tomittedTokens,\n\t\temergency,\n\t\tomittedHighPriority,\n\t\tincludedItems,\n\t\tomittedItems,\n\t\tdiagnostics,\n\t\tplanHash,\n\t\tobservability,\n\t};\n}\n\nexport function scoreContextBudgetItem(item: ContextBudgetItem, estimatedTokens: number): number {\n\tconst priorityScore = priorityWeight(item.priority);\n\tconst relevance = clampScore(item.relevance) * 20;\n\tconst recency = clampScore(item.recency) * 10;\n\tconst evidence = clampScore(item.evidenceValue) * 15;\n\t// G1: costPenalty 비례화 — sqrt 기반으로 대항목에 더 큰 불이익 부여.\n\t// log2(t)*2는 1000토큰에서 ~19.9점으로 relevance(20점)와 동급 → 대항목 생존.\n\t// sqrt(t)*0.5는 1000토큰 15.8점, 5000토큰 35.4점, 10000토큰 50점 → 비례적 증가.\n\tconst costPenalty = Math.sqrt(normalizeTokenCount(estimatedTokens)) * 0.5;\n\treturn priorityScore + relevance + recency + evidence - costPenalty;\n}\n\nfunction planItem(\n\titem: ContextBudgetItem,\n\ttokenCounter: TokenCounterAdapter,\n\tmodelId: string,\n\tdiagnostics: ContextBudgetDiagnostic[],\n): ContextBudgetPlannedItem {\n\tconst rawEstimate = item.tokenEstimate ?? tokenCounter.countText(item.text, modelId).tokens;\n\tconst estimatedTokens = normalizeItemTokenEstimate(item.id, rawEstimate, diagnostics);\n\treturn {\n\t\t...item,\n\t\testimatedTokens,\n\t\tscore: item.priority === \"hard\" ? Number.POSITIVE_INFINITY : scoreContextBudgetItem(item, estimatedTokens),\n\t};\n}\n\nconst REDUNDANCY_PENALTY_FLOOR = 10;\nconst REDUNDANCY_PENALTY_SCALE = 0.8;\n\n/**\n * W4: Adaptive redundancy penalty — proportional to token count.\n * Large duplicates waste more budget so deserve higher penalty.\n * Formula: max(floor, sqrt(tokens) * scale)\n * - 200 tokens → 11.3 (near floor — minimal waste)\n * - 1000 tokens → 25.3 (moderate waste)\n * - 5000 tokens → 56.6 (heavy waste — strongly penalized)\n * Floor ensures small duplicates are still penalized meaningfully.\n * Scale (0.8) tuned to score medium=50 so large duplicates go negative.\n */\nfunction redundancyPenalty(estimatedTokens: number): number {\n\treturn Math.max(REDUNDANCY_PENALTY_FLOOR, Math.sqrt(estimatedTokens) * REDUNDANCY_PENALTY_SCALE);\n}\n\nfunction applyRedundancyPenalty(\n\titem: ContextBudgetPlannedItem,\n\tselectedRedundancyKeys: Set<string>,\n): ContextBudgetPlannedItem {\n\tif (!item.redundancyKey || !selectedRedundancyKeys.has(item.redundancyKey)) {\n\t\treturn item;\n\t}\n\treturn { ...item, score: item.score - redundancyPenalty(item.estimatedTokens) };\n}\n\nfunction comparePlannedItemsForSelection(a: ContextBudgetPlannedItem, b: ContextBudgetPlannedItem): number {\n\t// G2: 우선순위 티어 내부에서 밀도(score/tokens) 기반 정렬.\n\t// 단위 토큰당 가치가 높은 항목을 우선 선택 → 예산 활용률 극대화.\n\tconst aTier = priorityTier(a.priority);\n\tconst bTier = priorityTier(b.priority);\n\tif (aTier !== bTier) {\n\t\treturn aTier - bTier;\n\t}\n\tconst aDensity = a.score > 0 ? a.score / Math.max(a.estimatedTokens, 1) : 0;\n\tconst bDensity = b.score > 0 ? b.score / Math.max(b.estimatedTokens, 1) : 0;\n\tif (aDensity !== bDensity) {\n\t\treturn bDensity - aDensity;\n\t}\n\tif (a.estimatedTokens !== b.estimatedTokens) {\n\t\treturn a.estimatedTokens - b.estimatedTokens;\n\t}\n\treturn a.id.localeCompare(b.id);\n}\n\nfunction priorityTier(priority: ContextBudgetPriority): number {\n\tswitch (priority) {\n\t\tcase \"hard\":\n\t\t\treturn 0;\n\t\tcase \"high\":\n\t\t\treturn 1;\n\t\tcase \"medium\":\n\t\t\treturn 2;\n\t\tcase \"low\":\n\t\t\treturn 3;\n\t}\n}\n\nfunction priorityWeight(priority: ContextBudgetPriority): number {\n\tswitch (priority) {\n\t\tcase \"hard\":\n\t\t\treturn 1_000_000;\n\t\tcase \"high\":\n\t\t\treturn 100;\n\t\tcase \"medium\":\n\t\t\treturn 50;\n\t\tcase \"low\":\n\t\t\treturn 10;\n\t}\n}\n\nfunction clampScore(value: number | undefined): number {\n\tif (value === undefined || !Number.isFinite(value)) {\n\t\treturn 0;\n\t}\n\treturn Math.max(0, Math.min(1, value));\n}\n\nfunction normalizeBudgetTokens(\n\tfield: \"maxTokens\" | \"responseReserveTokens\",\n\tvalue: number,\n\tdiagnostics: ContextBudgetDiagnostic[],\n): number {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\tdiagnostics.push({\n\t\t\treason: \"invalid_budget\",\n\t\t\tdetail: `${field} must be a non-negative finite number, got ${value}`,\n\t\t});\n\t\treturn 0;\n\t}\n\treturn Math.floor(value);\n}\n\nfunction normalizeItemTokenEstimate(itemId: string, value: number, diagnostics: ContextBudgetDiagnostic[]): number {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\tdiagnostics.push({\n\t\t\treason: \"invalid_budget\",\n\t\t\titemId,\n\t\t\tdetail: `tokenEstimate must be a non-negative finite number, got ${value}`,\n\t\t});\n\t\treturn 0;\n\t}\n\treturn Math.ceil(value);\n}\n\nfunction normalizeTokenCount(value: number): number {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\treturn 0;\n\t}\n\treturn value;\n}\n\nfunction buildObservability(input: {\n\treadonly availableTokens: number;\n\treadonly diagnostics: readonly ContextBudgetDiagnostic[];\n\treadonly includedItems: readonly ContextBudgetPlannedItem[];\n\treadonly omittedItems: readonly ContextBudgetPlannedItem[];\n\treadonly omittedTokens: number;\n\treadonly planHash: string;\n\treadonly usedTokens: number;\n}): ContextBudgetObservability {\n\treturn {\n\t\tcounts: {\n\t\t\tselected: input.includedItems.length,\n\t\t\tomitted: input.omittedItems.length,\n\t\t},\n\t\tdiagnosticReasons: [...new Set(input.diagnostics.map((diagnostic) => diagnostic.reason))].sort(),\n\t\ttokens: {\n\t\t\tavailable: input.availableTokens,\n\t\t\tused: input.usedTokens,\n\t\t\tomitted: input.omittedTokens,\n\t\t\ttokenSavings: input.omittedTokens,\n\t\t},\n\t\tplanHash: input.planHash,\n\t};\n}\n"]}