@namzu/sdk 34.2.0 → 36.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (669) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/README.md +2 -6
  3. package/dist/agents/PipelineAgent.d.ts.map +1 -1
  4. package/dist/agents/PipelineAgent.js +118 -100
  5. package/dist/agents/PipelineAgent.js.map +1 -1
  6. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  7. package/dist/agents/ReactiveAgent.js +2 -0
  8. package/dist/agents/ReactiveAgent.js.map +1 -1
  9. package/dist/agents/RouterAgent.d.ts.map +1 -1
  10. package/dist/agents/RouterAgent.js +105 -61
  11. package/dist/agents/RouterAgent.js.map +1 -1
  12. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  13. package/dist/agents/SupervisorAgent.js +8 -4
  14. package/dist/agents/SupervisorAgent.js.map +1 -1
  15. package/dist/agents/budget.d.ts +6 -0
  16. package/dist/agents/budget.d.ts.map +1 -0
  17. package/dist/agents/budget.js +33 -0
  18. package/dist/agents/budget.js.map +1 -0
  19. package/dist/agents/explore.d.ts +20 -0
  20. package/dist/agents/explore.d.ts.map +1 -0
  21. package/dist/agents/explore.js +26 -0
  22. package/dist/agents/explore.js.map +1 -0
  23. package/dist/agents/file-definitions.d.ts +80 -0
  24. package/dist/agents/file-definitions.d.ts.map +1 -0
  25. package/dist/agents/file-definitions.js +179 -0
  26. package/dist/agents/file-definitions.js.map +1 -0
  27. package/dist/agents/index.d.ts +3 -0
  28. package/dist/agents/index.d.ts.map +1 -1
  29. package/dist/agents/index.js +2 -0
  30. package/dist/agents/index.js.map +1 -1
  31. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  32. package/dist/bridge/a2a/mapper.js +6 -0
  33. package/dist/bridge/a2a/mapper.js.map +1 -1
  34. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  35. package/dist/bridge/sse/mapper.js +22 -0
  36. package/dist/bridge/sse/mapper.js.map +1 -1
  37. package/dist/bus/lock.d.ts.map +1 -1
  38. package/dist/bus/lock.js +1 -10
  39. package/dist/bus/lock.js.map +1 -1
  40. package/dist/compaction/consolidation.d.ts +31 -0
  41. package/dist/compaction/consolidation.d.ts.map +1 -0
  42. package/dist/compaction/consolidation.js +63 -0
  43. package/dist/compaction/consolidation.js.map +1 -0
  44. package/dist/compaction/factory.d.ts.map +1 -1
  45. package/dist/compaction/factory.js +3 -0
  46. package/dist/compaction/factory.js.map +1 -1
  47. package/dist/compaction/index.d.ts +6 -1
  48. package/dist/compaction/index.d.ts.map +1 -1
  49. package/dist/compaction/index.js +6 -0
  50. package/dist/compaction/index.js.map +1 -1
  51. package/dist/compaction/manager.d.ts +7 -0
  52. package/dist/compaction/manager.d.ts.map +1 -1
  53. package/dist/compaction/manager.js +31 -0
  54. package/dist/compaction/manager.js.map +1 -1
  55. package/dist/compaction/plan.d.ts +23 -0
  56. package/dist/compaction/plan.d.ts.map +1 -1
  57. package/dist/compaction/plan.js +41 -24
  58. package/dist/compaction/plan.js.map +1 -1
  59. package/dist/compaction/salience/bm25.d.ts +26 -0
  60. package/dist/compaction/salience/bm25.d.ts.map +1 -0
  61. package/dist/compaction/salience/bm25.js +56 -0
  62. package/dist/compaction/salience/bm25.js.map +1 -0
  63. package/dist/compaction/salience/goal.d.ts +21 -0
  64. package/dist/compaction/salience/goal.d.ts.map +1 -0
  65. package/dist/compaction/salience/goal.js +32 -0
  66. package/dist/compaction/salience/goal.js.map +1 -0
  67. package/dist/compaction/salience/index.d.ts +4 -0
  68. package/dist/compaction/salience/index.d.ts.map +1 -0
  69. package/dist/compaction/salience/index.js +4 -0
  70. package/dist/compaction/salience/index.js.map +1 -0
  71. package/dist/compaction/salience/minhash.d.ts +17 -0
  72. package/dist/compaction/salience/minhash.d.ts.map +1 -0
  73. package/dist/compaction/salience/minhash.js +54 -0
  74. package/dist/compaction/salience/minhash.js.map +1 -0
  75. package/dist/compaction/salience/score.d.ts +64 -0
  76. package/dist/compaction/salience/score.d.ts.map +1 -0
  77. package/dist/compaction/salience/score.js +256 -0
  78. package/dist/compaction/salience/score.js.map +1 -0
  79. package/dist/compaction/salience/tokenize.d.ts +20 -0
  80. package/dist/compaction/salience/tokenize.d.ts.map +1 -0
  81. package/dist/compaction/salience/tokenize.js +92 -0
  82. package/dist/compaction/salience/tokenize.js.map +1 -0
  83. package/dist/compaction/salience/working-set.d.ts +59 -0
  84. package/dist/compaction/salience/working-set.d.ts.map +1 -0
  85. package/dist/compaction/salience/working-set.js +137 -0
  86. package/dist/compaction/salience/working-set.js.map +1 -0
  87. package/dist/compaction/serializer.d.ts +2 -0
  88. package/dist/compaction/serializer.d.ts.map +1 -1
  89. package/dist/compaction/serializer.js +15 -0
  90. package/dist/compaction/serializer.js.map +1 -1
  91. package/dist/compaction/token-estimate.d.ts +13 -0
  92. package/dist/compaction/token-estimate.d.ts.map +1 -0
  93. package/dist/compaction/token-estimate.js +58 -0
  94. package/dist/compaction/token-estimate.js.map +1 -0
  95. package/dist/compaction/tool-result-editing.d.ts +10 -2
  96. package/dist/compaction/tool-result-editing.d.ts.map +1 -1
  97. package/dist/compaction/tool-result-editing.js +22 -24
  98. package/dist/compaction/tool-result-editing.js.map +1 -1
  99. package/dist/compaction/types.d.ts +22 -1
  100. package/dist/compaction/types.d.ts.map +1 -1
  101. package/dist/compaction/wire.d.ts +3 -1
  102. package/dist/compaction/wire.d.ts.map +1 -1
  103. package/dist/compaction/wire.js +2 -0
  104. package/dist/compaction/wire.js.map +1 -1
  105. package/dist/config/runtime.d.ts +58 -28
  106. package/dist/config/runtime.d.ts.map +1 -1
  107. package/dist/config/runtime.js +13 -1
  108. package/dist/config/runtime.js.map +1 -1
  109. package/dist/connector/builtins/http.d.ts.map +1 -1
  110. package/dist/connector/builtins/http.js +2 -8
  111. package/dist/connector/builtins/http.js.map +1 -1
  112. package/dist/connector/builtins/webhook.js +2 -2
  113. package/dist/connector/builtins/webhook.js.map +1 -1
  114. package/dist/connector/mcp/adapter.d.ts +2 -0
  115. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  116. package/dist/connector/mcp/adapter.js +30 -0
  117. package/dist/connector/mcp/adapter.js.map +1 -1
  118. package/dist/connector/tools/adapter.js +2 -2
  119. package/dist/connector/tools/adapter.js.map +1 -1
  120. package/dist/connector/tools/definitions.js +2 -2
  121. package/dist/connector/tools/definitions.js.map +1 -1
  122. package/dist/constants/compaction/index.d.ts +1 -0
  123. package/dist/constants/compaction/index.d.ts.map +1 -1
  124. package/dist/constants/compaction/index.js +1 -0
  125. package/dist/constants/compaction/index.js.map +1 -1
  126. package/dist/constants/telemetry/index.d.ts +0 -1
  127. package/dist/constants/telemetry/index.d.ts.map +1 -1
  128. package/dist/constants/telemetry/index.js +0 -1
  129. package/dist/constants/telemetry/index.js.map +1 -1
  130. package/dist/contracts/a2a.d.ts +5 -5
  131. package/dist/contracts/api.d.ts +4 -2
  132. package/dist/contracts/api.d.ts.map +1 -1
  133. package/dist/contracts/schemas.d.ts +1 -15
  134. package/dist/contracts/schemas.d.ts.map +1 -1
  135. package/dist/contracts/schemas.js +5 -20
  136. package/dist/contracts/schemas.js.map +1 -1
  137. package/dist/invariants/index.d.ts +1 -1
  138. package/dist/manager/agent/lifecycle.d.ts +2 -18
  139. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  140. package/dist/manager/agent/lifecycle.js +373 -340
  141. package/dist/manager/agent/lifecycle.js.map +1 -1
  142. package/dist/manager/run/persistence.d.ts +3 -0
  143. package/dist/manager/run/persistence.d.ts.map +1 -1
  144. package/dist/manager/run/persistence.js +35 -5
  145. package/dist/manager/run/persistence.js.map +1 -1
  146. package/dist/plugin/index.d.ts +2 -0
  147. package/dist/plugin/index.d.ts.map +1 -1
  148. package/dist/plugin/index.js +1 -0
  149. package/dist/plugin/index.js.map +1 -1
  150. package/dist/plugin/shell-hook.d.ts +128 -0
  151. package/dist/plugin/shell-hook.d.ts.map +1 -0
  152. package/dist/plugin/shell-hook.js +299 -0
  153. package/dist/plugin/shell-hook.js.map +1 -0
  154. package/dist/prompt/coding-agent-doctrine.d.ts +63 -0
  155. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -0
  156. package/dist/prompt/coding-agent-doctrine.js +100 -0
  157. package/dist/prompt/coding-agent-doctrine.js.map +1 -0
  158. package/dist/prompt/index.d.ts +2 -0
  159. package/dist/prompt/index.d.ts.map +1 -1
  160. package/dist/prompt/index.js +1 -0
  161. package/dist/prompt/index.js.map +1 -1
  162. package/dist/provider/errors.d.ts +1 -1
  163. package/dist/provider/errors.js +1 -1
  164. package/dist/provider/fallback.d.ts +2 -0
  165. package/dist/provider/fallback.d.ts.map +1 -1
  166. package/dist/provider/fallback.js +3 -1
  167. package/dist/provider/fallback.js.map +1 -1
  168. package/dist/provider/retry.d.ts +2 -0
  169. package/dist/provider/retry.d.ts.map +1 -1
  170. package/dist/provider/retry.js +3 -1
  171. package/dist/provider/retry.js.map +1 -1
  172. package/dist/provider/token-budget.d.ts +13 -0
  173. package/dist/provider/token-budget.d.ts.map +1 -0
  174. package/dist/provider/token-budget.js +150 -0
  175. package/dist/provider/token-budget.js.map +1 -0
  176. package/dist/public-runtime.d.ts +14 -14
  177. package/dist/public-runtime.d.ts.map +1 -1
  178. package/dist/public-runtime.js +15 -10
  179. package/dist/public-runtime.js.map +1 -1
  180. package/dist/public-tools.d.ts +2 -0
  181. package/dist/public-tools.d.ts.map +1 -1
  182. package/dist/public-tools.js +2 -0
  183. package/dist/public-tools.js.map +1 -1
  184. package/dist/public-types.d.ts +12 -2
  185. package/dist/public-types.d.ts.map +1 -1
  186. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  187. package/dist/registry/command/kernel-commands.js +18 -6
  188. package/dist/registry/command/kernel-commands.js.map +1 -1
  189. package/dist/registry/tool/execute.d.ts.map +1 -1
  190. package/dist/registry/tool/execute.js +4 -1
  191. package/dist/registry/tool/execute.js.map +1 -1
  192. package/dist/run/LimitChecker.js +1 -1
  193. package/dist/run/LimitChecker.js.map +1 -1
  194. package/dist/run/drain.js +1 -1
  195. package/dist/run/reporter.d.ts.map +1 -1
  196. package/dist/run/reporter.js +15 -0
  197. package/dist/run/reporter.js.map +1 -1
  198. package/dist/run/token-budget.d.ts +108 -0
  199. package/dist/run/token-budget.d.ts.map +1 -0
  200. package/dist/run/token-budget.js +591 -0
  201. package/dist/run/token-budget.js.map +1 -0
  202. package/dist/runtime/jobs/registry.d.ts +29 -0
  203. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  204. package/dist/runtime/jobs/registry.js +98 -18
  205. package/dist/runtime/jobs/registry.js.map +1 -1
  206. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  207. package/dist/runtime/query/checkpoint.js +10 -3
  208. package/dist/runtime/query/checkpoint.js.map +1 -1
  209. package/dist/runtime/query/context.d.ts +2 -26
  210. package/dist/runtime/query/context.d.ts.map +1 -1
  211. package/dist/runtime/query/context.js +1 -29
  212. package/dist/runtime/query/context.js.map +1 -1
  213. package/dist/runtime/query/executor.d.ts +13 -9
  214. package/dist/runtime/query/executor.d.ts.map +1 -1
  215. package/dist/runtime/query/executor.js +144 -55
  216. package/dist/runtime/query/executor.js.map +1 -1
  217. package/dist/runtime/query/guard.d.ts.map +1 -1
  218. package/dist/runtime/query/guard.js +8 -0
  219. package/dist/runtime/query/guard.js.map +1 -1
  220. package/dist/runtime/query/index.d.ts +42 -4
  221. package/dist/runtime/query/index.d.ts.map +1 -1
  222. package/dist/runtime/query/index.js +153 -52
  223. package/dist/runtime/query/index.js.map +1 -1
  224. package/dist/runtime/query/iteration/index.d.ts +3 -3
  225. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  226. package/dist/runtime/query/iteration/index.js +47 -11
  227. package/dist/runtime/query/iteration/index.js.map +1 -1
  228. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  229. package/dist/runtime/query/iteration/phases/compaction.js +98 -30
  230. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  231. package/dist/runtime/query/iteration/phases/context.d.ts +4 -0
  232. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  233. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  234. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  235. package/dist/runtime/query/iteration/phases/tool-review.js +29 -7
  236. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  237. package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -1
  238. package/dist/runtime/query/iteration/phases/working-memory.js +25 -15
  239. package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -1
  240. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  241. package/dist/runtime/query/iteration/stream-turn.js +10 -5
  242. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  243. package/dist/runtime/query/plugin-hooks.d.ts +1 -1
  244. package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
  245. package/dist/runtime/query/plugin-hooks.js +20 -1
  246. package/dist/runtime/query/plugin-hooks.js.map +1 -1
  247. package/dist/runtime/query/prompt.d.ts.map +1 -1
  248. package/dist/runtime/query/prompt.js +14 -4
  249. package/dist/runtime/query/prompt.js.map +1 -1
  250. package/dist/runtime/query/repeat-call.d.ts +20 -2
  251. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  252. package/dist/runtime/query/repeat-call.js +35 -7
  253. package/dist/runtime/query/repeat-call.js.map +1 -1
  254. package/dist/runtime/query/result.d.ts.map +1 -1
  255. package/dist/runtime/query/result.js +9 -0
  256. package/dist/runtime/query/result.js.map +1 -1
  257. package/dist/runtime/query/review-policy.d.ts +142 -0
  258. package/dist/runtime/query/review-policy.d.ts.map +1 -0
  259. package/dist/runtime/query/review-policy.js +144 -0
  260. package/dist/runtime/query/review-policy.js.map +1 -0
  261. package/dist/runtime/query/run-state.d.ts.map +1 -1
  262. package/dist/runtime/query/run-state.js +4 -0
  263. package/dist/runtime/query/run-state.js.map +1 -1
  264. package/dist/runtime/query/steering.d.ts +4 -0
  265. package/dist/runtime/query/steering.d.ts.map +1 -1
  266. package/dist/runtime/query/steering.js +29 -0
  267. package/dist/runtime/query/steering.js.map +1 -1
  268. package/dist/runtime/query/token-budget.d.ts +7 -0
  269. package/dist/runtime/query/token-budget.d.ts.map +1 -0
  270. package/dist/runtime/query/token-budget.js +101 -0
  271. package/dist/runtime/query/token-budget.js.map +1 -0
  272. package/dist/runtime/query/tool-output-budget.d.ts +2 -0
  273. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  274. package/dist/runtime/query/tool-output-budget.js +29 -11
  275. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  276. package/dist/runtime/query/tool-pause.d.ts.map +1 -1
  277. package/dist/runtime/query/tool-pause.js +4 -2
  278. package/dist/runtime/query/tool-pause.js.map +1 -1
  279. package/dist/runtime/query/tooling.d.ts +4 -0
  280. package/dist/runtime/query/tooling.d.ts.map +1 -1
  281. package/dist/runtime/query/tooling.js +4 -0
  282. package/dist/runtime/query/tooling.js.map +1 -1
  283. package/dist/sandbox/file-walk-program.d.ts +3 -0
  284. package/dist/sandbox/file-walk-program.d.ts.map +1 -0
  285. package/dist/sandbox/file-walk-program.js +94 -0
  286. package/dist/sandbox/file-walk-program.js.map +1 -0
  287. package/dist/sandbox/file-walk.d.ts +12 -0
  288. package/dist/sandbox/file-walk.d.ts.map +1 -0
  289. package/dist/sandbox/file-walk.js +429 -0
  290. package/dist/sandbox/file-walk.js.map +1 -0
  291. package/dist/sandbox/index.d.ts +2 -0
  292. package/dist/sandbox/index.d.ts.map +1 -1
  293. package/dist/sandbox/index.js +1 -0
  294. package/dist/sandbox/index.js.map +1 -1
  295. package/dist/sandbox/provider/local.d.ts +3 -1
  296. package/dist/sandbox/provider/local.d.ts.map +1 -1
  297. package/dist/sandbox/provider/local.js +121 -12
  298. package/dist/sandbox/provider/local.js.map +1 -1
  299. package/dist/scheduler/completion-inbox.d.ts +3 -2
  300. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  301. package/dist/scheduler/completion-inbox.js +29 -15
  302. package/dist/scheduler/completion-inbox.js.map +1 -1
  303. package/dist/scheduler/delegating.d.ts +1 -0
  304. package/dist/scheduler/delegating.d.ts.map +1 -1
  305. package/dist/scheduler/delegating.js +29 -12
  306. package/dist/scheduler/delegating.js.map +1 -1
  307. package/dist/scheduler/local.d.ts +1 -0
  308. package/dist/scheduler/local.d.ts.map +1 -1
  309. package/dist/scheduler/local.js +4 -7
  310. package/dist/scheduler/local.js.map +1 -1
  311. package/dist/session/index.d.ts +0 -1
  312. package/dist/session/index.d.ts.map +1 -1
  313. package/dist/session/index.js +0 -1
  314. package/dist/session/index.js.map +1 -1
  315. package/dist/session/workspace/path-builder.d.ts.map +1 -1
  316. package/dist/session/workspace/path-builder.js +5 -4
  317. package/dist/session/workspace/path-builder.js.map +1 -1
  318. package/dist/store/feedback/disk.d.ts.map +1 -1
  319. package/dist/store/feedback/disk.js +4 -6
  320. package/dist/store/feedback/disk.js.map +1 -1
  321. package/dist/store/index.d.ts +2 -0
  322. package/dist/store/index.d.ts.map +1 -1
  323. package/dist/store/index.js +1 -0
  324. package/dist/store/index.js.map +1 -1
  325. package/dist/store/memory/disk.d.ts.map +1 -1
  326. package/dist/store/memory/disk.js +3 -12
  327. package/dist/store/memory/disk.js.map +1 -1
  328. package/dist/store/run/checkpoint-disk.d.ts +3 -3
  329. package/dist/store/run/checkpoint-disk.d.ts.map +1 -1
  330. package/dist/store/run/checkpoint-disk.js +14 -26
  331. package/dist/store/run/checkpoint-disk.js.map +1 -1
  332. package/dist/store/run/claim-disk.js +1 -1
  333. package/dist/store/run/conformance.d.ts +1 -1
  334. package/dist/store/run/conformance.d.ts.map +1 -1
  335. package/dist/store/run/conformance.js +41 -33
  336. package/dist/store/run/conformance.js.map +1 -1
  337. package/dist/store/run/disk.d.ts.map +1 -1
  338. package/dist/store/run/disk.js +20 -4
  339. package/dist/store/run/disk.js.map +1 -1
  340. package/dist/store/run/token-budget-disk.d.ts +37 -0
  341. package/dist/store/run/token-budget-disk.d.ts.map +1 -0
  342. package/dist/store/run/token-budget-disk.js +208 -0
  343. package/dist/store/run/token-budget-disk.js.map +1 -0
  344. package/dist/store/session/disk.d.ts +4 -13
  345. package/dist/store/session/disk.d.ts.map +1 -1
  346. package/dist/store/session/disk.js +34 -31
  347. package/dist/store/session/disk.js.map +1 -1
  348. package/dist/store/session/memory.d.ts +2 -0
  349. package/dist/store/session/memory.d.ts.map +1 -1
  350. package/dist/store/session/memory.js +41 -2
  351. package/dist/store/session/memory.js.map +1 -1
  352. package/dist/store/task/disk.d.ts.map +1 -1
  353. package/dist/store/task/disk.js +7 -8
  354. package/dist/store/task/disk.js.map +1 -1
  355. package/dist/store/topic/memory.d.ts +2 -0
  356. package/dist/store/topic/memory.d.ts.map +1 -1
  357. package/dist/store/topic/memory.js +13 -1
  358. package/dist/store/topic/memory.js.map +1 -1
  359. package/dist/test-support/ids.d.ts +4 -19
  360. package/dist/test-support/ids.d.ts.map +1 -1
  361. package/dist/test-support/ids.js +51 -59
  362. package/dist/test-support/ids.js.map +1 -1
  363. package/dist/tools/advisory/index.d.ts.map +1 -1
  364. package/dist/tools/advisory/index.js +3 -1
  365. package/dist/tools/advisory/index.js.map +1 -1
  366. package/dist/tools/builtins/bash.d.ts +2 -0
  367. package/dist/tools/builtins/bash.d.ts.map +1 -1
  368. package/dist/tools/builtins/bash.js +224 -70
  369. package/dist/tools/builtins/bash.js.map +1 -1
  370. package/dist/tools/builtins/computer-use.d.ts +2 -2
  371. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  372. package/dist/tools/builtins/computer-use.js +4 -2
  373. package/dist/tools/builtins/computer-use.js.map +1 -1
  374. package/dist/tools/builtins/edit.js +2 -2
  375. package/dist/tools/builtins/edit.js.map +1 -1
  376. package/dist/tools/builtins/glob.d.ts +2 -1
  377. package/dist/tools/builtins/glob.d.ts.map +1 -1
  378. package/dist/tools/builtins/glob.js +95 -103
  379. package/dist/tools/builtins/glob.js.map +1 -1
  380. package/dist/tools/builtins/grep.d.ts.map +1 -1
  381. package/dist/tools/builtins/grep.js +155 -111
  382. package/dist/tools/builtins/grep.js.map +1 -1
  383. package/dist/tools/builtins/ls.js +4 -4
  384. package/dist/tools/builtins/ls.js.map +1 -1
  385. package/dist/tools/builtins/lsp.js +2 -2
  386. package/dist/tools/builtins/lsp.js.map +1 -1
  387. package/dist/tools/builtins/read-file.js +2 -2
  388. package/dist/tools/builtins/read-file.js.map +1 -1
  389. package/dist/tools/builtins/write-file.js +2 -2
  390. package/dist/tools/builtins/write-file.js.map +1 -1
  391. package/dist/tools/coordinator/ask-user-question.d.ts +33 -0
  392. package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -0
  393. package/dist/tools/coordinator/ask-user-question.js +237 -0
  394. package/dist/tools/coordinator/ask-user-question.js.map +1 -0
  395. package/dist/tools/coordinator/index.d.ts +1 -2
  396. package/dist/tools/coordinator/index.d.ts.map +1 -1
  397. package/dist/tools/coordinator/index.js +4 -220
  398. package/dist/tools/coordinator/index.js.map +1 -1
  399. package/dist/tools/memory/read.d.ts.map +1 -1
  400. package/dist/tools/memory/read.js +2 -4
  401. package/dist/tools/memory/read.js.map +1 -1
  402. package/dist/tools/paths.d.ts +13 -0
  403. package/dist/tools/paths.d.ts.map +1 -1
  404. package/dist/tools/paths.js +53 -0
  405. package/dist/tools/paths.js.map +1 -1
  406. package/dist/tools/roster.d.ts +27 -0
  407. package/dist/tools/roster.d.ts.map +1 -0
  408. package/dist/tools/roster.js +42 -0
  409. package/dist/tools/roster.js.map +1 -0
  410. package/dist/types/agent/base.d.ts +5 -0
  411. package/dist/types/agent/base.d.ts.map +1 -1
  412. package/dist/types/agent/pipeline.d.ts +3 -0
  413. package/dist/types/agent/pipeline.d.ts.map +1 -1
  414. package/dist/types/agent/router.d.ts +2 -3
  415. package/dist/types/agent/router.d.ts.map +1 -1
  416. package/dist/types/agent/scheduler.d.ts +3 -0
  417. package/dist/types/agent/scheduler.d.ts.map +1 -1
  418. package/dist/types/agent/task.d.ts +5 -16
  419. package/dist/types/agent/task.d.ts.map +1 -1
  420. package/dist/types/agent/task.js.map +1 -1
  421. package/dist/types/common/index.d.ts.map +1 -1
  422. package/dist/types/common/index.js +3 -0
  423. package/dist/types/common/index.js.map +1 -1
  424. package/dist/types/computer-use/index.d.ts +8 -0
  425. package/dist/types/computer-use/index.d.ts.map +1 -1
  426. package/dist/types/computer-use/index.js.map +1 -1
  427. package/dist/types/hitl/index.d.ts +5 -0
  428. package/dist/types/hitl/index.d.ts.map +1 -1
  429. package/dist/types/hitl/index.js.map +1 -1
  430. package/dist/types/ids/brand.d.ts +5 -47
  431. package/dist/types/ids/brand.d.ts.map +1 -1
  432. package/dist/types/ids/brand.js +2 -39
  433. package/dist/types/ids/brand.js.map +1 -1
  434. package/dist/types/ids/index.d.ts +59 -69
  435. package/dist/types/ids/index.d.ts.map +1 -1
  436. package/dist/types/ids/index.js +12 -10
  437. package/dist/types/ids/index.js.map +1 -1
  438. package/dist/types/permission/index.d.ts +9 -0
  439. package/dist/types/permission/index.d.ts.map +1 -1
  440. package/dist/types/permission/index.js +9 -1
  441. package/dist/types/permission/index.js.map +1 -1
  442. package/dist/types/plugin/index.d.ts +45 -4
  443. package/dist/types/plugin/index.d.ts.map +1 -1
  444. package/dist/types/plugin/index.js +7 -0
  445. package/dist/types/plugin/index.js.map +1 -1
  446. package/dist/types/run/config.d.ts +3 -0
  447. package/dist/types/run/config.d.ts.map +1 -1
  448. package/dist/types/run/emergency.d.ts +5 -0
  449. package/dist/types/run/emergency.d.ts.map +1 -1
  450. package/dist/types/run/emergency.js.map +1 -1
  451. package/dist/types/run/entity.d.ts +6 -2
  452. package/dist/types/run/entity.d.ts.map +1 -1
  453. package/dist/types/run/events.d.ts +35 -0
  454. package/dist/types/run/events.d.ts.map +1 -1
  455. package/dist/types/run/events.js.map +1 -1
  456. package/dist/types/run/index.d.ts +1 -0
  457. package/dist/types/run/index.d.ts.map +1 -1
  458. package/dist/types/run/index.js +1 -0
  459. package/dist/types/run/index.js.map +1 -1
  460. package/dist/types/run/state.d.ts +16 -15
  461. package/dist/types/run/state.d.ts.map +1 -1
  462. package/dist/types/run/state.js +41 -22
  463. package/dist/types/run/state.js.map +1 -1
  464. package/dist/types/run/stop-reason.d.ts +3 -14
  465. package/dist/types/run/stop-reason.d.ts.map +1 -1
  466. package/dist/types/run/token-budget-store.d.ts +29 -0
  467. package/dist/types/run/token-budget-store.d.ts.map +1 -0
  468. package/dist/types/run/token-budget-store.js +25 -0
  469. package/dist/types/run/token-budget-store.js.map +1 -0
  470. package/dist/types/sandbox/index.d.ts +47 -2
  471. package/dist/types/sandbox/index.d.ts.map +1 -1
  472. package/dist/types/sandbox/index.js.map +1 -1
  473. package/dist/types/session/store.d.ts +8 -0
  474. package/dist/types/session/store.d.ts.map +1 -1
  475. package/dist/types/tool/index.d.ts +15 -0
  476. package/dist/types/tool/index.d.ts.map +1 -1
  477. package/dist/types/tool/index.js.map +1 -1
  478. package/dist/utils/frontmatter.d.ts +1 -1
  479. package/dist/utils/frontmatter.js +1 -1
  480. package/dist/utils/id-format.d.ts +3 -0
  481. package/dist/utils/id-format.d.ts.map +1 -0
  482. package/dist/utils/id-format.js +9 -0
  483. package/dist/utils/id-format.js.map +1 -0
  484. package/dist/utils/id.d.ts +65 -32
  485. package/dist/utils/id.d.ts.map +1 -1
  486. package/dist/utils/id.js +168 -148
  487. package/dist/utils/id.js.map +1 -1
  488. package/dist/utils/log/exception.js +1 -1
  489. package/dist/utils/log/exception.js.map +1 -1
  490. package/dist/utils/log/index.d.ts.map +1 -1
  491. package/dist/utils/log/index.js +1 -2
  492. package/dist/utils/log/index.js.map +1 -1
  493. package/dist/utils/log/templates.d.ts.map +1 -1
  494. package/dist/utils/log/templates.js +0 -1
  495. package/dist/utils/log/templates.js.map +1 -1
  496. package/package.json +6 -1
  497. package/src/agents/AGENTS.md +1 -1
  498. package/src/agents/PipelineAgent.ts +129 -109
  499. package/src/agents/ReactiveAgent.ts +2 -0
  500. package/src/agents/RouterAgent.ts +120 -73
  501. package/src/agents/SupervisorAgent.ts +12 -4
  502. package/src/agents/budget.ts +42 -0
  503. package/src/agents/explore.ts +29 -0
  504. package/src/agents/file-definitions.ts +237 -0
  505. package/src/agents/index.ts +15 -0
  506. package/src/bridge/a2a/mapper.ts +6 -0
  507. package/src/bridge/sse/mapper.ts +22 -0
  508. package/src/bus/lock.ts +1 -10
  509. package/src/compaction/consolidation.ts +79 -0
  510. package/src/compaction/factory.ts +3 -0
  511. package/src/compaction/index.ts +34 -4
  512. package/src/compaction/manager.ts +39 -1
  513. package/src/compaction/plan.ts +52 -21
  514. package/src/compaction/salience/bm25.ts +72 -0
  515. package/src/compaction/salience/goal.ts +44 -0
  516. package/src/compaction/salience/index.ts +19 -0
  517. package/src/compaction/salience/minhash.ts +53 -0
  518. package/src/compaction/salience/score.ts +305 -0
  519. package/src/compaction/salience/tokenize.ts +89 -0
  520. package/src/compaction/salience/working-set.ts +187 -0
  521. package/src/compaction/serializer.ts +16 -0
  522. package/src/compaction/token-estimate.ts +57 -0
  523. package/src/compaction/tool-result-editing.ts +28 -26
  524. package/src/compaction/types.ts +24 -1
  525. package/src/compaction/wire.ts +5 -1
  526. package/src/config/runtime.ts +13 -1
  527. package/src/connector/builtins/http.ts +2 -8
  528. package/src/connector/builtins/webhook.ts +2 -2
  529. package/src/connector/mcp/adapter.ts +32 -0
  530. package/src/connector/tools/adapter.ts +2 -2
  531. package/src/connector/tools/definitions.ts +2 -2
  532. package/src/constants/compaction/index.ts +1 -0
  533. package/src/constants/telemetry/index.ts +0 -1
  534. package/src/contracts/api.ts +5 -1
  535. package/src/contracts/schemas.ts +6 -20
  536. package/src/invariants/index.ts +1 -1
  537. package/src/manager/agent/lifecycle.ts +380 -352
  538. package/src/manager/run/persistence.ts +35 -5
  539. package/src/plugin/index.ts +19 -0
  540. package/src/plugin/shell-hook.ts +403 -0
  541. package/src/prompt/coding-agent-doctrine.ts +118 -0
  542. package/src/prompt/index.ts +8 -0
  543. package/src/provider/errors.ts +1 -1
  544. package/src/provider/fallback.ts +4 -1
  545. package/src/provider/retry.ts +4 -1
  546. package/src/provider/token-budget.ts +158 -0
  547. package/src/public-runtime.ts +56 -28
  548. package/src/public-tools.ts +5 -0
  549. package/src/public-types.ts +65 -0
  550. package/src/registry/command/kernel-commands.ts +16 -6
  551. package/src/registry/tool/execute.ts +4 -1
  552. package/src/run/LimitChecker.ts +1 -1
  553. package/src/run/drain.ts +1 -1
  554. package/src/run/reporter.ts +15 -0
  555. package/src/run/token-budget.ts +692 -0
  556. package/src/runtime/jobs/registry.ts +123 -17
  557. package/src/runtime/query/checkpoint.ts +10 -3
  558. package/src/runtime/query/context.ts +3 -57
  559. package/src/runtime/query/executor.ts +181 -71
  560. package/src/runtime/query/guard.ts +8 -0
  561. package/src/runtime/query/index.ts +209 -62
  562. package/src/runtime/query/iteration/index.ts +53 -15
  563. package/src/runtime/query/iteration/phases/compaction.ts +130 -31
  564. package/src/runtime/query/iteration/phases/context.ts +4 -0
  565. package/src/runtime/query/iteration/phases/tool-review.ts +39 -7
  566. package/src/runtime/query/iteration/phases/working-memory.ts +23 -14
  567. package/src/runtime/query/iteration/stream-turn.ts +9 -5
  568. package/src/runtime/query/plugin-hooks.ts +24 -2
  569. package/src/runtime/query/prompt.ts +21 -4
  570. package/src/runtime/query/repeat-call.ts +42 -7
  571. package/src/runtime/query/result.ts +9 -0
  572. package/src/runtime/query/review-policy.ts +231 -0
  573. package/src/runtime/query/run-state.ts +4 -0
  574. package/src/runtime/query/steering.ts +32 -0
  575. package/src/runtime/query/token-budget.ts +127 -0
  576. package/src/runtime/query/tool-output-budget.ts +33 -10
  577. package/src/runtime/query/tool-pause.ts +4 -2
  578. package/src/runtime/query/tooling.ts +8 -0
  579. package/src/sandbox/file-walk-program.ts +93 -0
  580. package/src/sandbox/file-walk.ts +463 -0
  581. package/src/sandbox/index.ts +2 -0
  582. package/src/sandbox/provider/local.ts +136 -13
  583. package/src/scheduler/completion-inbox.ts +29 -19
  584. package/src/scheduler/delegating.ts +35 -13
  585. package/src/scheduler/local.ts +5 -7
  586. package/src/session/index.ts +0 -1
  587. package/src/session/workspace/path-builder.ts +5 -4
  588. package/src/store/feedback/disk.ts +4 -6
  589. package/src/store/index.ts +2 -0
  590. package/src/store/memory/disk.ts +3 -11
  591. package/src/store/run/checkpoint-disk.ts +14 -27
  592. package/src/store/run/claim-disk.ts +1 -1
  593. package/src/store/run/conformance.ts +55 -39
  594. package/src/store/run/disk.ts +19 -4
  595. package/src/store/run/token-budget-disk.ts +247 -0
  596. package/src/store/session/disk.ts +36 -29
  597. package/src/store/session/memory.ts +38 -1
  598. package/src/store/task/disk.ts +7 -8
  599. package/src/store/topic/memory.ts +13 -1
  600. package/src/test-support/ids.ts +62 -59
  601. package/src/tools/advisory/index.ts +3 -1
  602. package/src/tools/builtins/bash.ts +241 -70
  603. package/src/tools/builtins/computer-use.ts +6 -2
  604. package/src/tools/builtins/edit.ts +2 -2
  605. package/src/tools/builtins/glob.ts +104 -122
  606. package/src/tools/builtins/grep.ts +166 -132
  607. package/src/tools/builtins/ls.ts +4 -4
  608. package/src/tools/builtins/lsp.ts +2 -2
  609. package/src/tools/builtins/read-file.ts +2 -2
  610. package/src/tools/builtins/write-file.ts +2 -2
  611. package/src/tools/coordinator/ask-user-question.ts +284 -0
  612. package/src/tools/coordinator/index.ts +5 -248
  613. package/src/tools/memory/read.ts +2 -4
  614. package/src/tools/paths.ts +64 -0
  615. package/src/tools/roster.ts +46 -0
  616. package/src/types/agent/base.ts +6 -0
  617. package/src/types/agent/pipeline.ts +3 -0
  618. package/src/types/agent/router.ts +2 -3
  619. package/src/types/agent/scheduler.ts +4 -0
  620. package/src/types/agent/task.ts +5 -18
  621. package/src/types/common/index.ts +3 -0
  622. package/src/types/computer-use/index.ts +8 -0
  623. package/src/types/hitl/index.ts +5 -0
  624. package/src/types/ids/brand.ts +5 -48
  625. package/src/types/ids/index.ts +66 -75
  626. package/src/types/permission/index.ts +11 -0
  627. package/src/types/plugin/index.ts +49 -1
  628. package/src/types/run/config.ts +3 -0
  629. package/src/types/run/emergency.ts +5 -0
  630. package/src/types/run/entity.ts +6 -2
  631. package/src/types/run/events.ts +37 -0
  632. package/src/types/run/index.ts +1 -0
  633. package/src/types/run/state.ts +58 -30
  634. package/src/types/run/stop-reason.ts +3 -14
  635. package/src/types/run/token-budget-store.ts +54 -0
  636. package/src/types/sandbox/index.ts +53 -0
  637. package/src/types/session/store.ts +8 -0
  638. package/src/types/tool/index.ts +15 -0
  639. package/src/utils/frontmatter.ts +1 -1
  640. package/src/utils/id-format.ts +9 -0
  641. package/src/utils/id.ts +222 -181
  642. package/src/utils/log/exception.ts +1 -1
  643. package/src/utils/log/index.ts +1 -2
  644. package/src/utils/log/templates.ts +0 -1
  645. package/dist/session/migration/errors.d.ts +0 -26
  646. package/dist/session/migration/errors.d.ts.map +0 -1
  647. package/dist/session/migration/errors.js +0 -22
  648. package/dist/session/migration/errors.js.map +0 -1
  649. package/dist/session/migration/filesystem.d.ts +0 -122
  650. package/dist/session/migration/filesystem.d.ts.map +0 -1
  651. package/dist/session/migration/filesystem.js +0 -379
  652. package/dist/session/migration/filesystem.js.map +0 -1
  653. package/dist/session/migration/id-prefix.d.ts +0 -113
  654. package/dist/session/migration/id-prefix.d.ts.map +0 -1
  655. package/dist/session/migration/id-prefix.js +0 -132
  656. package/dist/session/migration/id-prefix.js.map +0 -1
  657. package/dist/session/migration/index.d.ts +0 -12
  658. package/dist/session/migration/index.d.ts.map +0 -1
  659. package/dist/session/migration/index.js +0 -12
  660. package/dist/session/migration/index.js.map +0 -1
  661. package/dist/session/migration/marker.d.ts +0 -57
  662. package/dist/session/migration/marker.d.ts.map +0 -1
  663. package/dist/session/migration/marker.js +0 -123
  664. package/dist/session/migration/marker.js.map +0 -1
  665. package/src/session/migration/errors.ts +0 -23
  666. package/src/session/migration/filesystem.ts +0 -468
  667. package/src/session/migration/id-prefix.ts +0 -166
  668. package/src/session/migration/index.ts +0 -41
  669. package/src/session/migration/marker.ts +0 -142
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../../src/compaction/salience/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAoB,OAAO,EAAe,MAAM,8BAA8B,CAAA;AAO1F,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,wBAAwB,EAAE,eAKtC,CAAA;AAED,MAAM,WAAW,cAAc;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CACjC;AAED,eAAO,MAAM,uBAAuB,EAAE,cAIrC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE3E,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;CAC1C;AAED,MAAM,WAAW,YAAY;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CACzC;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAcpD;AAuBD,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,OAAO,EAAE,YAAY,GACnB,aAAa,EAAE,CAoLjB"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Salience: how much the next step depends on each message.
3
+ *
4
+ * The compaction pass chose what to keep by position — the floor, the
5
+ * last few turns, the last few tool results — and a fact stated in the
6
+ * middle of a long run aged out at the same rate as chatter. This gives
7
+ * every message a number instead, from four things the kernel can
8
+ * observe without a model:
9
+ *
10
+ * recency how many messages ago, decayed with a half-life;
11
+ * relevance BM25 against the goal — the task, the requirements, the
12
+ * open plan items, the latest intent;
13
+ * utility whether it was USED: a tool result whose paths and
14
+ * identifiers reappear in a later tool input or assistant
15
+ * turn; an instruction from the user;
16
+ * redundancy whether a later message says the same thing — a repeated
17
+ * read, the same error twice — so the older copy yields.
18
+ *
19
+ * What no score may cross is stated as `protected`: the leading system
20
+ * run, `retain` markers with the turn they pull in, the most recent
21
+ * turns, and the other half of a tool-call pair. Pure, like `plan.ts`:
22
+ * no run, no logger, no provider, so it can be asked without one.
23
+ */
24
+ import { findRetainedIndices } from '../retention.js';
25
+ import { estimateMessageTokens } from '../token-estimate.js';
26
+ import { bm25Score, buildIndex, indexDocument } from './bm25.js';
27
+ import { isEmptySignature, minhash, similarity } from './minhash.js';
28
+ import { tokenize } from './tokenize.js';
29
+ export const DEFAULT_SALIENCE_WEIGHTS = {
30
+ recency: 1,
31
+ relevance: 1,
32
+ utility: 1,
33
+ redundancy: 1,
34
+ };
35
+ export const DEFAULT_SALIENCE_CONFIG = {
36
+ halfLifeMessages: 12,
37
+ duplicateThreshold: 0.8,
38
+ weights: DEFAULT_SALIENCE_WEIGHTS,
39
+ };
40
+ /** The model-visible text of a message, with an assistant's tool inputs. */
41
+ export function messageText(message) {
42
+ if (message.role === 'tool') {
43
+ return typeof message.content === 'string'
44
+ ? message.content
45
+ : message.content.flatMap((block) => (block.type === 'text' ? [block.text] : [])).join('\n');
46
+ }
47
+ const parts = [];
48
+ if (typeof message.content === 'string')
49
+ parts.push(message.content);
50
+ if (message.role === 'assistant') {
51
+ for (const call of message.toolCalls ?? []) {
52
+ parts.push(call.function.name, call.function.arguments);
53
+ }
54
+ }
55
+ return parts.join('\n');
56
+ }
57
+ function hasRichContent(message) {
58
+ return ((message.role === 'user' && (message.attachments?.length ?? 0) > 0) ||
59
+ (message.role === 'tool' &&
60
+ typeof message.content !== 'string' &&
61
+ message.content.some((block) => block.type !== 'text')));
62
+ }
63
+ const isAssistantWithCalls = (m) => m.role === 'assistant' && Array.isArray(m.toolCalls);
64
+ /** Tokens that look like something a later turn could cite: paths, identifiers, dotted keys. */
65
+ function citable(tokens) {
66
+ const out = new Set();
67
+ for (const token of tokens) {
68
+ if (token.length >= 5 || token.includes('/') || token.includes('.'))
69
+ out.add(token);
70
+ }
71
+ return out;
72
+ }
73
+ export function scoreMessages(messages, options) {
74
+ const config = {
75
+ ...DEFAULT_SALIENCE_CONFIG,
76
+ ...options.config,
77
+ weights: { ...DEFAULT_SALIENCE_WEIGHTS, ...options.config?.weights },
78
+ };
79
+ const n = messages.length;
80
+ const texts = messages.map(messageText);
81
+ const richContent = messages.map(hasRichContent);
82
+ const tokenLists = texts.map(tokenize);
83
+ const documents = texts.map(indexDocument);
84
+ const index = buildIndex(documents);
85
+ const goalTokens = tokenize(options.goal);
86
+ // Relevance, normalised to the best message of the pass so weights mean
87
+ // the same thing in a short run and a long one.
88
+ // Normalised to the best message the pass could evict, not to the user
89
+ // turn that stated the goal: that turn matches the goal by definition,
90
+ // and measured against it every result reads as barely relevant.
91
+ const rawRelevance = documents.map((doc) => bm25Score(index, doc, goalTokens));
92
+ // Nor to an assistant turn that only issued a call: its arguments echo
93
+ // the goal's path in a dozen tokens, which BM25 scores above the
94
+ // four-thousand-token result that actually holds the file.
95
+ const maxRelevance = Math.max(0, ...rawRelevance.filter((_, i) => {
96
+ const m = messages[i];
97
+ return m.role === 'tool' || (m.role === 'assistant' && !isAssistantWithCalls(m));
98
+ }));
99
+ // Citation index: everything a LATER assistant turn or tool input names.
100
+ // Built once, suffix-wise, so each message asks "does anything after me
101
+ // cite my identifiers" in one lookup.
102
+ const citedAfter = new Array(n);
103
+ let running = new Set();
104
+ for (let i = n - 1; i >= 0; i -= 1) {
105
+ citedAfter[i] = running;
106
+ const message = messages[i];
107
+ if (message.role === 'assistant' || message.role === 'user') {
108
+ running = new Set([...running, ...citable(tokenLists[i])]);
109
+ }
110
+ }
111
+ // Redundancy: the highest similarity to any later message of the same
112
+ // role, and a full demotion when a later assistant turn repeats this
113
+ // message's tool call exactly.
114
+ const signatures = tokenLists.map(minhash);
115
+ const callKeys = messages.map((m) => isAssistantWithCalls(m)
116
+ ? (m.toolCalls ?? []).map((c) => `${c.function.name}:${c.function.arguments}`)
117
+ : []);
118
+ const laterCallKeys = new Array(n);
119
+ let calls = new Set();
120
+ for (let i = n - 1; i >= 0; i -= 1) {
121
+ laterCallKeys[i] = calls;
122
+ if (callKeys[i].length > 0)
123
+ calls = new Set([...calls, ...callKeys[i]]);
124
+ }
125
+ // Protection.
126
+ const protectedBy = new Array(n).fill(null);
127
+ let floorEnd = 0;
128
+ while (floorEnd < n && messages[floorEnd]?.role === 'system') {
129
+ protectedBy[floorEnd] = 'system-floor';
130
+ floorEnd += 1;
131
+ }
132
+ for (const i of findRetainedIndices(messages))
133
+ if (protectedBy[i] === null)
134
+ protectedBy[i] = 'retain';
135
+ for (let i = Math.max(floorEnd, n - options.keepRecentMessages); i < n; i += 1) {
136
+ if (protectedBy[i] === null)
137
+ protectedBy[i] = 'recent';
138
+ }
139
+ // A protected half of a pair protects the other half.
140
+ for (let i = 0; i < n; i += 1) {
141
+ const message = messages[i];
142
+ if (!isAssistantWithCalls(message) || protectedBy[i] === null)
143
+ continue;
144
+ const ids = new Set((message.toolCalls ?? []).map((c) => c.id));
145
+ for (let j = i + 1; j < n && ids.size > 0; j += 1) {
146
+ const candidate = messages[j];
147
+ if (candidate.role !== 'tool') {
148
+ if (candidate.role === 'assistant')
149
+ break;
150
+ continue;
151
+ }
152
+ if (ids.has(candidate.toolCallId)) {
153
+ ids.delete(candidate.toolCallId);
154
+ if (protectedBy[j] === null)
155
+ protectedBy[j] = 'pair';
156
+ }
157
+ }
158
+ }
159
+ for (let j = n - 1; j >= 0; j -= 1) {
160
+ const message = messages[j];
161
+ if (message.role !== 'tool' || protectedBy[j] === null)
162
+ continue;
163
+ const id = message.toolCallId;
164
+ for (let i = j - 1; i >= 0; i -= 1) {
165
+ const candidate = messages[i];
166
+ if (isAssistantWithCalls(candidate) && (candidate.toolCalls ?? []).some((c) => c.id === id)) {
167
+ if (protectedBy[i] === null)
168
+ protectedBy[i] = 'pair';
169
+ break;
170
+ }
171
+ }
172
+ }
173
+ const scored = [];
174
+ for (let i = 0; i < n; i += 1) {
175
+ const message = messages[i];
176
+ const distance = n - 1 - i;
177
+ const recency = 2 ** (-distance / Math.max(1, config.halfLifeMessages));
178
+ const relevance = maxRelevance > 0 ? rawRelevance[i] / maxRelevance : 0;
179
+ let utility = 0;
180
+ if (message.role === 'user') {
181
+ // An instruction is used by everything after it; an acknowledgment
182
+ // ("ok, go on") is not an instruction. The difference is whether it
183
+ // names anything or says more than a few words.
184
+ const tokens = tokenLists[i];
185
+ utility = citable(tokens).size > 0 || tokens.length >= 6 ? 1 : 0.2;
186
+ }
187
+ else if (message.role === 'tool') {
188
+ // Used is used: one identifier from this result named by a later
189
+ // turn is the evidence, and a count would let the recency of
190
+ // everything after it outvote the one result the run came back
191
+ // for. The eval that placed the account id deep in an early dump
192
+ // and cited it later watched the salience pass clear it under a
193
+ // thirds rule.
194
+ const mine = citable(tokenLists[i]);
195
+ let hits = 0;
196
+ for (const token of mine)
197
+ if (citedAfter[i].has(token))
198
+ hits += 1;
199
+ utility = hits > 0 ? 1 : 0;
200
+ }
201
+ else if (isAssistantWithCalls(message))
202
+ utility = 0.5;
203
+ let redundancy = 0;
204
+ const signature = signatures[i];
205
+ // A caption or a repeated call cannot prove that two screenshots or
206
+ // documents contain the same evidence. The lexical scorer has no
207
+ // access to their meaning, so it must not call those messages duplicates.
208
+ if (!richContent[i] && !isEmptySignature(signature)) {
209
+ for (let j = i + 1; j < n; j += 1) {
210
+ if (richContent[j] || messages[j].role !== message.role)
211
+ continue;
212
+ const sim = similarity(signature, signatures[j]);
213
+ if (sim > redundancy)
214
+ redundancy = sim;
215
+ }
216
+ }
217
+ if (redundancy < config.duplicateThreshold)
218
+ redundancy = redundancy >= 0.5 ? redundancy : 0;
219
+ else
220
+ redundancy = 1;
221
+ if (message.role === 'tool' && !richContent[i]) {
222
+ // The result of a call a later turn repeats exactly: the newer
223
+ // result is the one that counts.
224
+ for (let k = i - 1; k >= 0; k -= 1) {
225
+ const producer = messages[k];
226
+ if (!isAssistantWithCalls(producer))
227
+ continue;
228
+ const call = (producer.toolCalls ?? []).find((c) => c.id === message.toolCallId);
229
+ if (call) {
230
+ const key = `${call.function.name}:${call.function.arguments}`;
231
+ if (laterCallKeys[i].has(key))
232
+ redundancy = 1;
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ const w = config.weights;
238
+ const salience = w.recency * recency +
239
+ w.relevance * relevance +
240
+ w.utility * utility -
241
+ w.redundancy * redundancy;
242
+ scored.push({
243
+ index: i,
244
+ role: message.role,
245
+ tokens: estimateMessageTokens(message),
246
+ recency,
247
+ relevance,
248
+ utility,
249
+ redundancy,
250
+ salience,
251
+ protected: protectedBy[i],
252
+ });
253
+ }
254
+ return scored;
255
+ }
256
+ //# sourceMappingURL=score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.js","sourceRoot":"","sources":["../../../src/compaction/salience/score.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * An identifier-aware tokenizer for scoring, not for search.
3
+ *
4
+ * A coding conversation's vocabulary is paths, identifiers and error
5
+ * names. A word tokenizer sees `src/store.mjs` as one token that matches
6
+ * nothing and `removeTodo` as another; the model, asked about `store`,
7
+ * is looking at both. So a path splits on its separators, a `camelCase`
8
+ * or `snake_case` identifier splits into its words AND keeps its whole
9
+ * form, and a dotted attribute key (`namzu.run.id`) yields both the key
10
+ * and its parts. Everything is lower-cased; nothing is stemmed, because
11
+ * a stemmer that turns `tests` into `test` also turns `testing` into it,
12
+ * and the false matches cost more than the missed ones in a corpus this
13
+ * small. Stop words are the handful that carry no relevance in any
14
+ * sentence and would otherwise dominate term frequency.
15
+ */
16
+ /** Tokens of `text`, lower-cased, with identifiers and paths opened up. */
17
+ export declare function tokenize(text: string): string[];
18
+ /** Term frequencies of `tokens`. */
19
+ export declare function termFrequencies(tokens: readonly string[]): Map<string, number>;
20
+ //# sourceMappingURL=tokenize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../../src/compaction/salience/tokenize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2CH,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB/C;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9E"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * An identifier-aware tokenizer for scoring, not for search.
3
+ *
4
+ * A coding conversation's vocabulary is paths, identifiers and error
5
+ * names. A word tokenizer sees `src/store.mjs` as one token that matches
6
+ * nothing and `removeTodo` as another; the model, asked about `store`,
7
+ * is looking at both. So a path splits on its separators, a `camelCase`
8
+ * or `snake_case` identifier splits into its words AND keeps its whole
9
+ * form, and a dotted attribute key (`namzu.run.id`) yields both the key
10
+ * and its parts. Everything is lower-cased; nothing is stemmed, because
11
+ * a stemmer that turns `tests` into `test` also turns `testing` into it,
12
+ * and the false matches cost more than the missed ones in a corpus this
13
+ * small. Stop words are the handful that carry no relevance in any
14
+ * sentence and would otherwise dominate term frequency.
15
+ */
16
+ const STOP_WORDS = new Set([
17
+ 'a',
18
+ 'an',
19
+ 'and',
20
+ 'are',
21
+ 'as',
22
+ 'at',
23
+ 'be',
24
+ 'by',
25
+ 'for',
26
+ 'from',
27
+ 'i',
28
+ 'if',
29
+ 'in',
30
+ 'is',
31
+ 'it',
32
+ 'of',
33
+ 'on',
34
+ 'or',
35
+ 'that',
36
+ 'the',
37
+ 'then',
38
+ 'this',
39
+ 'to',
40
+ 'was',
41
+ 'will',
42
+ 'with',
43
+ 'you',
44
+ ]);
45
+ const WORD = /[\p{L}\p{N}_$][\p{L}\p{N}_$.\-/\\:]*/gu;
46
+ function splitIdentifier(raw) {
47
+ const parts = raw
48
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
49
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
50
+ .split(/[_\s]+/)
51
+ .filter((p) => p.length > 0);
52
+ return parts.length > 1 ? parts : [];
53
+ }
54
+ /** Tokens of `text`, lower-cased, with identifiers and paths opened up. */
55
+ export function tokenize(text) {
56
+ const out = [];
57
+ for (const match of text.matchAll(WORD)) {
58
+ const raw = match[0].replace(/^[.\-/\\:]+|[.\-/\\:]+$/g, '');
59
+ if (raw.length === 0)
60
+ continue;
61
+ const whole = raw.toLowerCase();
62
+ if (!STOP_WORDS.has(whole))
63
+ out.push(whole);
64
+ // Separators first: a path or dotted key contributes each segment.
65
+ const segments = raw.split(/[/\\.:\-]+/).filter((s) => s.length > 0);
66
+ if (segments.length > 1) {
67
+ for (const segment of segments) {
68
+ const lower = segment.toLowerCase();
69
+ if (!STOP_WORDS.has(lower) && lower !== whole)
70
+ out.push(lower);
71
+ for (const part of splitIdentifier(segment))
72
+ out.push(part.toLowerCase());
73
+ }
74
+ }
75
+ else {
76
+ for (const part of splitIdentifier(raw)) {
77
+ const lower = part.toLowerCase();
78
+ if (!STOP_WORDS.has(lower))
79
+ out.push(lower);
80
+ }
81
+ }
82
+ }
83
+ return out;
84
+ }
85
+ /** Term frequencies of `tokens`. */
86
+ export function termFrequencies(tokens) {
87
+ const tf = new Map();
88
+ for (const token of tokens)
89
+ tf.set(token, (tf.get(token) ?? 0) + 1);
90
+ return tf;
91
+ }
92
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../../src/compaction/salience/tokenize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The working set: which messages stay whole for the next call.
3
+ *
4
+ * Given every message's salience, choose the cheapest actions that bring
5
+ * the estimated context under a target, lowest salience first, then the
6
+ * larger result among equally salient candidates:
7
+ *
8
+ * clear replace a tool result with the same excerpt the stale pass
9
+ * uses, retaining a saved-artifact pointer when one exists;
10
+ * stub cut an assistant narration to its first sentence — the
11
+ * decision survives, the paragraph around it does not.
12
+ *
13
+ * Nothing protected is touched, and a message is never removed: the
14
+ * shape of the conversation — every `tool_use` beside its `tool_result`,
15
+ * every turn boundary — is exactly what it was, which is what makes this
16
+ * safe to run on every iteration. Folding a span into the structured
17
+ * state and summarising stay with the existing plan, which runs after
18
+ * this when the target could not be reached. Pure, like the rest of the
19
+ * compaction arithmetic.
20
+ */
21
+ import type { Message } from '../../types/message/index.js';
22
+ import type { ScoredMessage } from './score.js';
23
+ export interface WorkingSetAction {
24
+ readonly kind: 'clear' | 'stub';
25
+ readonly index: number;
26
+ readonly charsReclaimed: number;
27
+ }
28
+ export interface WorkingSetPlan {
29
+ readonly messages: Message[];
30
+ readonly actions: readonly WorkingSetAction[];
31
+ readonly clearedCount: number;
32
+ readonly stubbedCount: number;
33
+ readonly charsReclaimed: number;
34
+ readonly reclaimedTokens: number;
35
+ /** Whether the actions brought the estimate under the target. */
36
+ readonly reachedTarget: boolean;
37
+ }
38
+ export interface WorkingSetOptions {
39
+ readonly estimatedTokens: number;
40
+ readonly targetTokens: number;
41
+ /** Tool results smaller than this are not worth a placeholder. */
42
+ readonly minToolResultChars?: number;
43
+ /** Assistant narrations shorter than this keep their whole text. */
44
+ readonly minNarrationChars?: number;
45
+ /** Tools whose results are never cleared. */
46
+ readonly preserveTools?: readonly string[];
47
+ /**
48
+ * A message the goal names or a later turn cited is not evicted to
49
+ * reach the target while it scores above this fraction of the most
50
+ * salient evictable message. A strict target evicted the one result
51
+ * the goal named to shave the last few tokens — an eval watched it
52
+ * happen — and a pass that stops short and says so is the better
53
+ * answer: the trigger threshold still guards the hard limit.
54
+ */
55
+ readonly keepAboveFraction?: number;
56
+ }
57
+ export declare function isStubbedNarration(content: unknown): boolean;
58
+ export declare function planWorkingSet(messages: readonly Message[], scored: readonly ScoredMessage[], options: WorkingSetOptions): WorkingSetPlan;
59
+ //# sourceMappingURL=working-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-set.d.ts","sourceRoot":"","sources":["../../../src/compaction/salience/working-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAoB,OAAO,EAAe,MAAM,8BAA8B,CAAA;AAG1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,oEAAoE;IACpE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1C;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CACnC;AASD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,iBAAiB,GACxB,cAAc,CA2GhB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * The working set: which messages stay whole for the next call.
3
+ *
4
+ * Given every message's salience, choose the cheapest actions that bring
5
+ * the estimated context under a target, lowest salience first, then the
6
+ * larger result among equally salient candidates:
7
+ *
8
+ * clear replace a tool result with the same excerpt the stale pass
9
+ * uses, retaining a saved-artifact pointer when one exists;
10
+ * stub cut an assistant narration to its first sentence — the
11
+ * decision survives, the paragraph around it does not.
12
+ *
13
+ * Nothing protected is touched, and a message is never removed: the
14
+ * shape of the conversation — every `tool_use` beside its `tool_result`,
15
+ * every turn boundary — is exactly what it was, which is what makes this
16
+ * safe to run on every iteration. Folding a span into the structured
17
+ * state and summarising stay with the existing plan, which runs after
18
+ * this when the target could not be reached. Pure, like the rest of the
19
+ * compaction arithmetic.
20
+ */
21
+ import { CHARS_PER_TOKEN } from '../../constants/limits.js';
22
+ import { estimateMessageTokens } from '../token-estimate.js';
23
+ import { clearToolResult, isClearedToolResult } from '../tool-result-editing.js';
24
+ const STUB_MARK = '… (elided';
25
+ function firstSentence(text) {
26
+ const match = /^[\s\S]*?[.!?](?=\s|$)/u.exec(text.trim());
27
+ return (match ? match[0] : (text.trim().split('\n')[0] ?? '')).slice(0, 240);
28
+ }
29
+ export function isStubbedNarration(content) {
30
+ return typeof content === 'string' && content.includes(STUB_MARK);
31
+ }
32
+ export function planWorkingSet(messages, scored, options) {
33
+ const minTool = options.minToolResultChars ?? 1_000;
34
+ const minNarration = options.minNarrationChars ?? 240;
35
+ const preserve = new Set(options.preserveTools ?? []);
36
+ const toolNameByCallId = new Map();
37
+ for (const m of messages) {
38
+ if (m.role !== 'assistant')
39
+ continue;
40
+ for (const call of m.toolCalls ?? []) {
41
+ toolNameByCallId.set(call.id, call.function.name);
42
+ }
43
+ }
44
+ const candidates = [];
45
+ for (const s of scored) {
46
+ if (s.protected !== null || s.tokens === 0)
47
+ continue;
48
+ const m = messages[s.index];
49
+ if (m.role === 'tool') {
50
+ const tool = m;
51
+ if (tool.isError || isClearedToolResult(tool.content))
52
+ continue;
53
+ if (preserve.has(toolNameByCallId.get(tool.toolCallId) ?? ''))
54
+ continue;
55
+ if (s.tokens * CHARS_PER_TOKEN < minTool)
56
+ continue;
57
+ candidates.push({
58
+ index: s.index,
59
+ kind: 'clear',
60
+ salience: s.salience,
61
+ tokens: s.tokens,
62
+ goalBound: s.relevance >= 0.5 || s.utility >= 1,
63
+ });
64
+ }
65
+ else if (m.role === 'assistant' && !Array.isArray(m.toolCalls)) {
66
+ const text = typeof m.content === 'string' ? m.content : '';
67
+ if (text.length < minNarration || isStubbedNarration(text))
68
+ continue;
69
+ candidates.push({
70
+ index: s.index,
71
+ kind: 'stub',
72
+ salience: s.salience,
73
+ tokens: s.tokens,
74
+ goalBound: s.relevance >= 0.5 || s.utility >= 1,
75
+ });
76
+ }
77
+ }
78
+ candidates.sort((a, b) => a.salience - b.salience || b.tokens - a.tokens || a.index - b.index);
79
+ const maxSalience = candidates.reduce((m, c) => Math.max(m, c.salience), Number.NEGATIVE_INFINITY);
80
+ const floor = maxSalience * (options.keepAboveFraction ?? 0.5);
81
+ const next = [...messages];
82
+ const actions = [];
83
+ let charsReclaimed = 0;
84
+ let reclaimedTokens = 0;
85
+ let clearedCount = 0;
86
+ let stubbedCount = 0;
87
+ const excess = () => options.estimatedTokens - reclaimedTokens - options.targetTokens;
88
+ for (const candidate of candidates) {
89
+ if (excess() <= 0)
90
+ break;
91
+ // The floor guards what the goal names or a later turn used, not
92
+ // every above-average message: a run of look-alike dumps must still
93
+ // be evicted from the bottom when the target asks for it.
94
+ if (candidate.goalBound && candidate.salience > floor && candidate.salience > 0)
95
+ continue;
96
+ const m = next[candidate.index];
97
+ if (candidate.kind === 'clear') {
98
+ const tool = m;
99
+ const cleared = clearToolResult(tool, toolNameByCallId.get(tool.toolCallId) ?? 'unknown');
100
+ const tokenSaving = estimateMessageTokens(tool) - estimateMessageTokens(cleared.message);
101
+ if (tokenSaving <= 0)
102
+ continue;
103
+ next[candidate.index] = cleared.message;
104
+ charsReclaimed += cleared.charsReclaimed;
105
+ reclaimedTokens += tokenSaving;
106
+ clearedCount += 1;
107
+ actions.push({
108
+ kind: 'clear',
109
+ index: candidate.index,
110
+ charsReclaimed: cleared.charsReclaimed,
111
+ });
112
+ }
113
+ else {
114
+ const text = m.content;
115
+ const stub = `${firstSentence(text)} ${STUB_MARK}; ${(text.length - firstSentence(text).length).toLocaleString('en-US')} characters of narration)`;
116
+ const reclaimed = text.length - stub.length;
117
+ if (reclaimed <= 0)
118
+ continue;
119
+ const stubbed = { ...m, content: stub };
120
+ next[candidate.index] = stubbed;
121
+ charsReclaimed += reclaimed;
122
+ reclaimedTokens += estimateMessageTokens(m) - estimateMessageTokens(stubbed);
123
+ stubbedCount += 1;
124
+ actions.push({ kind: 'stub', index: candidate.index, charsReclaimed: reclaimed });
125
+ }
126
+ }
127
+ return {
128
+ messages: next,
129
+ actions,
130
+ clearedCount,
131
+ stubbedCount,
132
+ charsReclaimed,
133
+ reclaimedTokens,
134
+ reachedTarget: excess() <= 0,
135
+ };
136
+ }
137
+ //# sourceMappingURL=working-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-set.js","sourceRoot":"","sources":["../../../src/compaction/salience/working-set.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import type { WorkingState } from './types.js';
2
+ /** The pinned-facts section alone, or null when nothing is pinned. */
3
+ export declare function renderPins(state: WorkingState): string | null;
2
4
  export declare function serializeState(state: WorkingState): string;
3
5
  //# sourceMappingURL=serializer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/compaction/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,YAAY,CAAA;AA2DxD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA0D1D"}
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/compaction/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,YAAY,CAAA;AA2DxD,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAW7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA4D1D"}