@pentoshi/clai 4.18.0 → 5.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 (883) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/CONTRIBUTING.md +3 -2
  3. package/PROVIDERS.md +3 -3
  4. package/REA.md +96 -0
  5. package/README.md +110 -267
  6. package/SECURITY.md +5 -1
  7. package/dist/agent/compaction/compaction-prompt.d.ts +49 -0
  8. package/dist/agent/compaction/compaction-prompt.js +163 -0
  9. package/dist/agent/compaction/compaction-prompt.js.map +1 -0
  10. package/dist/agent/compaction/memory-sections.d.ts +27 -0
  11. package/dist/agent/compaction/memory-sections.js +144 -0
  12. package/dist/agent/compaction/memory-sections.js.map +1 -0
  13. package/dist/agent/compaction-summary.d.ts +2 -33
  14. package/dist/agent/compaction-summary.js +3 -113
  15. package/dist/agent/compaction-summary.js.map +1 -1
  16. package/dist/agent/context/compact-with-summary.d.ts +2 -4
  17. package/dist/agent/context/compact-with-summary.js +42 -68
  18. package/dist/agent/context/compact-with-summary.js.map +1 -1
  19. package/dist/agent/context/compaction-recent-history.d.ts +4 -3
  20. package/dist/agent/context/compaction-recent-history.js +30 -52
  21. package/dist/agent/context/compaction-recent-history.js.map +1 -1
  22. package/dist/agent/context/compaction-user-instructions.d.ts +5 -6
  23. package/dist/agent/context/compaction-user-instructions.js +156 -231
  24. package/dist/agent/context/compaction-user-instructions.js.map +1 -1
  25. package/dist/agent/context-manager.js +17 -8
  26. package/dist/agent/context-manager.js.map +1 -1
  27. package/dist/agent/durable-envelope.js +1 -1
  28. package/dist/agent/durable-envelope.js.map +1 -1
  29. package/dist/agent/events.d.ts +6 -0
  30. package/dist/agent/parser/dsml.d.ts +30 -0
  31. package/dist/agent/parser/dsml.js +233 -0
  32. package/dist/agent/parser/dsml.js.map +1 -0
  33. package/dist/agent/parser/vendor-protocols.d.ts +2 -5
  34. package/dist/agent/parser/vendor-protocols.js +4 -93
  35. package/dist/agent/parser/vendor-protocols.js.map +1 -1
  36. package/dist/agent/plan-implement-compact.js +1 -2
  37. package/dist/agent/plan-implement-compact.js.map +1 -1
  38. package/dist/agent/reliability-policy.d.ts +1 -0
  39. package/dist/agent/reliability-policy.js +14 -15
  40. package/dist/agent/reliability-policy.js.map +1 -1
  41. package/dist/agent/runner.js +12 -1
  42. package/dist/agent/runner.js.map +1 -1
  43. package/dist/agent/tool-call-parser.js +6 -8
  44. package/dist/agent/tool-call-parser.js.map +1 -1
  45. package/dist/agent/turn/event-emitter.js +2 -0
  46. package/dist/agent/turn/event-emitter.js.map +1 -1
  47. package/dist/agent/turn/loop/answer-path.js +3 -1
  48. package/dist/agent/turn/loop/answer-path.js.map +1 -1
  49. package/dist/agent/turn/loop/canonicalize-turn-call.js +5 -3
  50. package/dist/agent/turn/loop/canonicalize-turn-call.js.map +1 -1
  51. package/dist/agent/turn/loop/output-budget.d.ts +0 -1
  52. package/dist/agent/turn/loop/output-budget.js +5 -13
  53. package/dist/agent/turn/loop/output-budget.js.map +1 -1
  54. package/dist/agent/turn/loop/request-assembly.js +39 -33
  55. package/dist/agent/turn/loop/request-assembly.js.map +1 -1
  56. package/dist/agent/turn/loop/round-request.js +31 -18
  57. package/dist/agent/turn/loop/round-request.js.map +1 -1
  58. package/dist/agent/turn/loop/run-rounds.js +0 -2
  59. package/dist/agent/turn/loop/run-rounds.js.map +1 -1
  60. package/dist/agent/turn/loop/tool-call-recovery.d.ts +2 -0
  61. package/dist/agent/turn/loop/tool-call-recovery.js +26 -11
  62. package/dist/agent/turn/loop/tool-call-recovery.js.map +1 -1
  63. package/dist/agent/turn/mcp-agent-tools.d.ts +3 -0
  64. package/dist/agent/turn/mcp-agent-tools.js +11 -2
  65. package/dist/agent/turn/mcp-agent-tools.js.map +1 -1
  66. package/dist/agent/turn/prompt-sections.js +1 -0
  67. package/dist/agent/turn/prompt-sections.js.map +1 -1
  68. package/dist/agent/turn/scaffold-preflight.d.ts +6 -1
  69. package/dist/agent/turn/scaffold-preflight.js +10 -2
  70. package/dist/agent/turn/scaffold-preflight.js.map +1 -1
  71. package/dist/agent/turn/setup/mcp-agent-ports.d.ts +5 -1
  72. package/dist/agent/turn/setup/mcp-agent-ports.js +2 -0
  73. package/dist/agent/turn/setup/mcp-agent-ports.js.map +1 -1
  74. package/dist/agent/turn/system-sections.d.ts +2 -0
  75. package/dist/agent/turn/system-sections.js +12 -8
  76. package/dist/agent/turn/system-sections.js.map +1 -1
  77. package/dist/agent/turn/tool-execution/deps.d.ts +2 -0
  78. package/dist/agent/turn/tool-execution/result-framing.js +8 -6
  79. package/dist/agent/turn/tool-execution/result-framing.js.map +1 -1
  80. package/dist/agent/turn/tool-execution/single-tool.js +4 -1
  81. package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
  82. package/dist/agent/turn/turn-counters.d.ts +1 -0
  83. package/dist/agent/turn/turn-counters.js +2 -0
  84. package/dist/agent/turn/turn-counters.js.map +1 -1
  85. package/dist/agent/turn/workspace-setup.d.ts +7 -2
  86. package/dist/agent/turn/workspace-setup.js +45 -30
  87. package/dist/agent/turn/workspace-setup.js.map +1 -1
  88. package/dist/agent/workspace-orient.d.ts +4 -0
  89. package/dist/agent/workspace-orient.js +83 -37
  90. package/dist/agent/workspace-orient.js.map +1 -1
  91. package/dist/app/adapters/agent-event-adapter.d.ts +1 -0
  92. package/dist/app/adapters/agent-event-adapter.js +17 -2
  93. package/dist/app/adapters/agent-event-adapter.js.map +1 -1
  94. package/dist/app/adapters/current-agent-adapter.js +1 -0
  95. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  96. package/dist/app/adapters/current-store-adapter.js +10 -3
  97. package/dist/app/adapters/current-store-adapter.js.map +1 -1
  98. package/dist/app/commands/catalog.js +13 -4
  99. package/dist/app/commands/catalog.js.map +1 -1
  100. package/dist/app/commands/registry.js +1 -1
  101. package/dist/app/commands/registry.js.map +1 -1
  102. package/dist/app/controllers/session-changes.d.ts +5 -0
  103. package/dist/app/controllers/session-changes.js +50 -20
  104. package/dist/app/controllers/session-changes.js.map +1 -1
  105. package/dist/app/controllers/session-compact-helper.js +2 -5
  106. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  107. package/dist/app/controllers/session-controller.d.ts +8 -0
  108. package/dist/app/controllers/session-controller.js +97 -8
  109. package/dist/app/controllers/session-controller.js.map +1 -1
  110. package/dist/app/controllers/session-id.d.ts +1 -0
  111. package/dist/app/controllers/session-id.js +4 -0
  112. package/dist/app/controllers/session-id.js.map +1 -0
  113. package/dist/app/controllers/session-late-work.d.ts +27 -0
  114. package/dist/app/controllers/session-late-work.js +113 -0
  115. package/dist/app/controllers/session-late-work.js.map +1 -0
  116. package/dist/app/controllers/session-persistence.d.ts +5 -3
  117. package/dist/app/controllers/session-persistence.js +8 -5
  118. package/dist/app/controllers/session-persistence.js.map +1 -1
  119. package/dist/app/controllers/session-prompt-queue.d.ts +13 -1
  120. package/dist/app/controllers/session-prompt-queue.js +96 -24
  121. package/dist/app/controllers/session-prompt-queue.js.map +1 -1
  122. package/dist/app/controllers/turn-controller.d.ts +1 -0
  123. package/dist/app/controllers/turn-controller.js +14 -1
  124. package/dist/app/controllers/turn-controller.js.map +1 -1
  125. package/dist/app/events/app-event.d.ts +4 -0
  126. package/dist/app/events/app-event.js.map +1 -1
  127. package/dist/app/ports/agent-port.d.ts +1 -0
  128. package/dist/app/ports/persistence-port.d.ts +13 -1
  129. package/dist/app/ports/transcript-item.d.ts +2 -0
  130. package/dist/classic/app/app-wiring.d.ts +9 -4
  131. package/dist/classic/app/app-wiring.js +13 -5
  132. package/dist/classic/app/app-wiring.js.map +1 -1
  133. package/dist/classic/app/paint-pacing.js +2 -2
  134. package/dist/classic/app/paint-pacing.js.map +1 -1
  135. package/dist/classic/app/use-feed.js +16 -11
  136. package/dist/classic/app/use-feed.js.map +1 -1
  137. package/dist/classic/app/wiring-disclosure.js +1 -1
  138. package/dist/classic/app/wiring-disclosure.js.map +1 -1
  139. package/dist/classic/app/wiring-feed-scroll.d.ts +5 -0
  140. package/dist/classic/app/wiring-feed-scroll.js +39 -0
  141. package/dist/classic/app/wiring-feed-scroll.js.map +1 -0
  142. package/dist/classic/app/wiring-interactions.d.ts +3 -5
  143. package/dist/classic/app/wiring-interactions.js +18 -32
  144. package/dist/classic/app/wiring-interactions.js.map +1 -1
  145. package/dist/classic/app/wiring-lifecycle.d.ts +1 -0
  146. package/dist/classic/app/wiring-lifecycle.js +20 -2
  147. package/dist/classic/app/wiring-lifecycle.js.map +1 -1
  148. package/dist/classic/app/wiring-selection.js +46 -37
  149. package/dist/classic/app/wiring-selection.js.map +1 -1
  150. package/dist/classic/app/wiring-types.d.ts +9 -3
  151. package/dist/classic/blocks/intro-lines.js +1 -0
  152. package/dist/classic/blocks/intro-lines.js.map +1 -1
  153. package/dist/classic/blocks/thinking-lines.d.ts +6 -0
  154. package/dist/classic/blocks/thinking-lines.js +21 -7
  155. package/dist/classic/blocks/thinking-lines.js.map +1 -1
  156. package/dist/classic/blocks/tool-lines.js +1 -1
  157. package/dist/classic/blocks/tool-lines.js.map +1 -1
  158. package/dist/classic/blocks/turn-summary-lines.d.ts +1 -1
  159. package/dist/classic/blocks/turn-summary-lines.js +5 -3
  160. package/dist/classic/blocks/turn-summary-lines.js.map +1 -1
  161. package/dist/classic/bootstrap/renderer-handle.js +11 -3
  162. package/dist/classic/bootstrap/renderer-handle.js.map +1 -1
  163. package/dist/classic/bootstrap/start-classic.js +8 -18
  164. package/dist/classic/bootstrap/start-classic.js.map +1 -1
  165. package/dist/classic/chrome/composer-mentions.js +2 -1
  166. package/dist/classic/chrome/composer-mentions.js.map +1 -1
  167. package/dist/classic/chrome/directory-row.js +5 -5
  168. package/dist/classic/chrome/directory-row.js.map +1 -1
  169. package/dist/classic/chrome/status-rows.d.ts +2 -1
  170. package/dist/classic/chrome/status-rows.js +18 -8
  171. package/dist/classic/chrome/status-rows.js.map +1 -1
  172. package/dist/classic/feed/background-layout.d.ts +26 -0
  173. package/dist/classic/feed/background-layout.js +77 -0
  174. package/dist/classic/feed/background-layout.js.map +1 -0
  175. package/dist/classic/feed/estimated-height.d.ts +2 -0
  176. package/dist/classic/feed/estimated-height.js +24 -0
  177. package/dist/classic/feed/estimated-height.js.map +1 -0
  178. package/dist/classic/feed/feed-blocks.d.ts +4 -1
  179. package/dist/classic/feed/feed-blocks.js +32 -10
  180. package/dist/classic/feed/feed-blocks.js.map +1 -1
  181. package/dist/classic/feed/transcript-selection.d.ts +2 -1
  182. package/dist/classic/feed/transcript-selection.js +15 -10
  183. package/dist/classic/feed/transcript-selection.js.map +1 -1
  184. package/dist/classic/feed/transcript-window.d.ts +1 -0
  185. package/dist/classic/feed/transcript-window.js +41 -15
  186. package/dist/classic/feed/transcript-window.js.map +1 -1
  187. package/dist/classic/panels/confirm-panel.js +1 -0
  188. package/dist/classic/panels/confirm-panel.js.map +1 -1
  189. package/dist/classic/panels/jobs-panel.js +1 -1
  190. package/dist/classic/panels/jobs-panel.js.map +1 -1
  191. package/dist/classic/panels/pager-panel.d.ts +11 -8
  192. package/dist/classic/panels/pager-panel.js +42 -28
  193. package/dist/classic/panels/pager-panel.js.map +1 -1
  194. package/dist/classic/panels/pager-region-paint.d.ts +3 -0
  195. package/dist/classic/panels/pager-region-paint.js +43 -0
  196. package/dist/classic/panels/pager-region-paint.js.map +1 -0
  197. package/dist/classic/panels/pager-search-paint.d.ts +3 -0
  198. package/dist/classic/panels/pager-search-paint.js +59 -0
  199. package/dist/classic/panels/pager-search-paint.js.map +1 -0
  200. package/dist/classic/panels/pager-source-controller.js +2 -0
  201. package/dist/classic/panels/pager-source-controller.js.map +1 -1
  202. package/dist/classic/panels/panel-controller.js +5 -6
  203. package/dist/classic/panels/panel-controller.js.map +1 -1
  204. package/dist/classic/panels/panel-host.js +2 -2
  205. package/dist/classic/panels/panel-host.js.map +1 -1
  206. package/dist/classic/panels/panel-initial-states.d.ts +1 -0
  207. package/dist/classic/panels/panel-initial-states.js +1 -0
  208. package/dist/classic/panels/panel-initial-states.js.map +1 -1
  209. package/dist/classic/panels/panel-types.d.ts +1 -0
  210. package/dist/classic/panels/panel-wheel.js +2 -2
  211. package/dist/classic/panels/panel-wheel.js.map +1 -1
  212. package/dist/classic/panels/text-editor-panel.d.ts +2 -1
  213. package/dist/classic/panels/text-editor-panel.js +21 -12
  214. package/dist/classic/panels/text-editor-panel.js.map +1 -1
  215. package/dist/classic/render/ansi-text.js +49 -33
  216. package/dist/classic/render/ansi-text.js.map +1 -1
  217. package/dist/classic/render/ink-theme.js +1 -1
  218. package/dist/classic/render/ink-theme.js.map +1 -1
  219. package/dist/classic/render/measure.js +2 -3
  220. package/dist/classic/render/measure.js.map +1 -1
  221. package/dist/classic/render/shell-width.js +1 -1
  222. package/dist/classic/render/shell-width.js.map +1 -1
  223. package/dist/classic/render/widest-line.d.ts +1 -0
  224. package/dist/classic/render/widest-line.js +5 -0
  225. package/dist/classic/render/widest-line.js.map +1 -0
  226. package/dist/commands/current-version.d.ts +1 -0
  227. package/dist/commands/current-version.js +42 -0
  228. package/dist/commands/current-version.js.map +1 -0
  229. package/dist/commands/doctor.js +2 -1
  230. package/dist/commands/doctor.js.map +1 -1
  231. package/dist/commands/update.d.ts +2 -1
  232. package/dist/commands/update.js +4 -41
  233. package/dist/commands/update.js.map +1 -1
  234. package/dist/index.d.ts +1 -1
  235. package/dist/index.js +26 -16
  236. package/dist/index.js.map +1 -1
  237. package/dist/instructions/scaffold.js +2 -1
  238. package/dist/instructions/scaffold.js.map +1 -1
  239. package/dist/llm/agentrouter.js +6 -11
  240. package/dist/llm/agentrouter.js.map +1 -1
  241. package/dist/llm/anthropic.js +6 -8
  242. package/dist/llm/anthropic.js.map +1 -1
  243. package/dist/llm/bynara.js +6 -10
  244. package/dist/llm/bynara.js.map +1 -1
  245. package/dist/llm/capabilities.js +13 -6
  246. package/dist/llm/capabilities.js.map +1 -1
  247. package/dist/llm/capability/vision-patterns.js +1 -1
  248. package/dist/llm/capability/vision-patterns.js.map +1 -1
  249. package/dist/llm/cline.js +3 -2
  250. package/dist/llm/cline.js.map +1 -1
  251. package/dist/llm/codex-models.d.ts +1 -1
  252. package/dist/llm/codex-models.js +11 -6
  253. package/dist/llm/codex-models.js.map +1 -1
  254. package/dist/llm/codex.js +2 -1
  255. package/dist/llm/codex.js.map +1 -1
  256. package/dist/llm/constellation.js +5 -0
  257. package/dist/llm/constellation.js.map +1 -1
  258. package/dist/llm/context-windows.js +17 -13
  259. package/dist/llm/context-windows.js.map +1 -1
  260. package/dist/llm/copilot.js +19 -21
  261. package/dist/llm/copilot.js.map +1 -1
  262. package/dist/llm/custom-providers.d.ts +2 -1
  263. package/dist/llm/custom-providers.js +16 -10
  264. package/dist/llm/custom-providers.js.map +1 -1
  265. package/dist/llm/deepseek.js +6 -11
  266. package/dist/llm/deepseek.js.map +1 -1
  267. package/dist/llm/explabs.js +8 -9
  268. package/dist/llm/explabs.js.map +1 -1
  269. package/dist/llm/fireworks.js +9 -11
  270. package/dist/llm/fireworks.js.map +1 -1
  271. package/dist/llm/free-default-model.js +5 -3
  272. package/dist/llm/free-default-model.js.map +1 -1
  273. package/dist/llm/free-model-limits.js +2 -1
  274. package/dist/llm/free-model-limits.js.map +1 -1
  275. package/dist/llm/free.js +20 -23
  276. package/dist/llm/free.js.map +1 -1
  277. package/dist/llm/freebuff-agent-prompt.d.ts +1 -0
  278. package/dist/llm/freebuff-agent-prompt.js +46 -0
  279. package/dist/llm/freebuff-agent-prompt.js.map +1 -0
  280. package/dist/llm/freebuff-auth.js +15 -3
  281. package/dist/llm/freebuff-auth.js.map +1 -1
  282. package/dist/llm/freebuff-device-key.d.ts +39 -0
  283. package/dist/llm/freebuff-device-key.js +330 -0
  284. package/dist/llm/freebuff-device-key.js.map +1 -0
  285. package/dist/llm/freebuff-env-profile.d.ts +41 -0
  286. package/dist/llm/freebuff-env-profile.js +205 -0
  287. package/dist/llm/freebuff-env-profile.js.map +1 -0
  288. package/dist/llm/freebuff-fingerprint.d.ts +21 -0
  289. package/dist/llm/freebuff-fingerprint.js +137 -0
  290. package/dist/llm/freebuff-fingerprint.js.map +1 -0
  291. package/dist/llm/freebuff-models.d.ts +26 -5
  292. package/dist/llm/freebuff-models.js +146 -80
  293. package/dist/llm/freebuff-models.js.map +1 -1
  294. package/dist/llm/freebuff-run.d.ts +2 -0
  295. package/dist/llm/freebuff-run.js +77 -24
  296. package/dist/llm/freebuff-run.js.map +1 -1
  297. package/dist/llm/freebuff-session-api.d.ts +3 -1
  298. package/dist/llm/freebuff-session-api.js +26 -18
  299. package/dist/llm/freebuff-session-api.js.map +1 -1
  300. package/dist/llm/freebuff-session.d.ts +7 -1
  301. package/dist/llm/freebuff-session.js +81 -31
  302. package/dist/llm/freebuff-session.js.map +1 -1
  303. package/dist/llm/freebuff-wire.d.ts +8 -0
  304. package/dist/llm/freebuff-wire.js +42 -20
  305. package/dist/llm/freebuff-wire.js.map +1 -1
  306. package/dist/llm/freebuff.js +81 -10
  307. package/dist/llm/freebuff.js.map +1 -1
  308. package/dist/llm/generation-metrics.d.ts +11 -0
  309. package/dist/llm/generation-metrics.js +54 -0
  310. package/dist/llm/generation-metrics.js.map +1 -0
  311. package/dist/llm/generation-submission.d.ts +2 -0
  312. package/dist/llm/generation-submission.js +13 -0
  313. package/dist/llm/generation-submission.js.map +1 -0
  314. package/dist/llm/glm.js +6 -11
  315. package/dist/llm/glm.js.map +1 -1
  316. package/dist/llm/hetzner.js +9 -11
  317. package/dist/llm/hetzner.js.map +1 -1
  318. package/dist/llm/kimi.js +6 -11
  319. package/dist/llm/kimi.js.map +1 -1
  320. package/dist/llm/kiro.js +11 -10
  321. package/dist/llm/kiro.js.map +1 -1
  322. package/dist/llm/lightning.js +6 -10
  323. package/dist/llm/lightning.js.map +1 -1
  324. package/dist/llm/main-effort-discovery.d.ts +16 -0
  325. package/dist/llm/main-effort-discovery.js +71 -0
  326. package/dist/llm/main-effort-discovery.js.map +1 -0
  327. package/dist/llm/merge-gateway.js +9 -10
  328. package/dist/llm/merge-gateway.js.map +1 -1
  329. package/dist/llm/meta.js +6 -10
  330. package/dist/llm/meta.js.map +1 -1
  331. package/dist/llm/mimo.js +6 -11
  332. package/dist/llm/mimo.js.map +1 -1
  333. package/dist/llm/minimax.js +6 -11
  334. package/dist/llm/minimax.js.map +1 -1
  335. package/dist/llm/mistral.js +10 -5
  336. package/dist/llm/mistral.js.map +1 -1
  337. package/dist/llm/modal.js +6 -11
  338. package/dist/llm/modal.js.map +1 -1
  339. package/dist/llm/model-discovery.d.ts +4 -1
  340. package/dist/llm/model-discovery.js +5 -2
  341. package/dist/llm/model-discovery.js.map +1 -1
  342. package/dist/llm/model-limit-store.d.ts +2 -0
  343. package/dist/llm/model-limit-store.js +44 -12
  344. package/dist/llm/model-limit-store.js.map +1 -1
  345. package/dist/llm/model-list-cache.d.ts +15 -0
  346. package/dist/llm/model-list-cache.js +55 -0
  347. package/dist/llm/model-list-cache.js.map +1 -0
  348. package/dist/llm/nvidia.js +9 -10
  349. package/dist/llm/nvidia.js.map +1 -1
  350. package/dist/llm/ollama.js +4 -0
  351. package/dist/llm/ollama.js.map +1 -1
  352. package/dist/llm/omnirush-session-upload.d.ts +1 -0
  353. package/dist/llm/omnirush-session-upload.js +14 -1
  354. package/dist/llm/omnirush-session-upload.js.map +1 -1
  355. package/dist/llm/omnirush.js +10 -14
  356. package/dist/llm/omnirush.js.map +1 -1
  357. package/dist/llm/openrouter.js +6 -11
  358. package/dist/llm/openrouter.js.map +1 -1
  359. package/dist/llm/operation-usage.js +22 -5
  360. package/dist/llm/operation-usage.js.map +1 -1
  361. package/dist/llm/orcarouter.js +9 -13
  362. package/dist/llm/orcarouter.js.map +1 -1
  363. package/dist/llm/provider-info-text.js +2 -1
  364. package/dist/llm/provider-info-text.js.map +1 -1
  365. package/dist/llm/provider-model-layers.js +4 -0
  366. package/dist/llm/provider-model-layers.js.map +1 -1
  367. package/dist/llm/provider-profile-layers.js +2 -1
  368. package/dist/llm/provider-profile-layers.js.map +1 -1
  369. package/dist/llm/provider-profiles.d.ts +1 -0
  370. package/dist/llm/provider-profiles.js +32 -2
  371. package/dist/llm/provider-profiles.js.map +1 -1
  372. package/dist/llm/provider.js +2 -1
  373. package/dist/llm/provider.js.map +1 -1
  374. package/dist/llm/qoder/qoder.js +6 -10
  375. package/dist/llm/qoder/qoder.js.map +1 -1
  376. package/dist/llm/qwen-cloud.js +6 -9
  377. package/dist/llm/qwen-cloud.js.map +1 -1
  378. package/dist/llm/request-plan.js +17 -9
  379. package/dist/llm/request-plan.js.map +1 -1
  380. package/dist/llm/responses-request.js +8 -1
  381. package/dist/llm/responses-request.js.map +1 -1
  382. package/dist/llm/river-models.d.ts +1 -0
  383. package/dist/llm/river-models.js +6 -1
  384. package/dist/llm/river-models.js.map +1 -1
  385. package/dist/llm/routing/attempt-complete.js +6 -1
  386. package/dist/llm/routing/attempt-complete.js.map +1 -1
  387. package/dist/llm/routing/attempt-request.d.ts +3 -1
  388. package/dist/llm/routing/attempt-request.js +39 -5
  389. package/dist/llm/routing/attempt-request.js.map +1 -1
  390. package/dist/llm/routing/attempt-stream.js +8 -1
  391. package/dist/llm/routing/attempt-stream.js.map +1 -1
  392. package/dist/llm/routing/error-classification.d.ts +1 -0
  393. package/dist/llm/routing/error-classification.js +9 -1
  394. package/dist/llm/routing/error-classification.js.map +1 -1
  395. package/dist/llm/routing/request-option-fallback.d.ts +6 -0
  396. package/dist/llm/routing/request-option-fallback.js +63 -3
  397. package/dist/llm/routing/request-option-fallback.js.map +1 -1
  398. package/dist/llm/token-usage.js +7 -2
  399. package/dist/llm/token-usage.js.map +1 -1
  400. package/dist/llm/tokenharbor.js +10 -13
  401. package/dist/llm/tokenharbor.js.map +1 -1
  402. package/dist/llm/tokenrouter.js +10 -14
  403. package/dist/llm/tokenrouter.js.map +1 -1
  404. package/dist/llm/vercel.js +12 -12
  405. package/dist/llm/vercel.js.map +1 -1
  406. package/dist/llm/wire/chat-body.js +3 -1
  407. package/dist/llm/wire/chat-body.js.map +1 -1
  408. package/dist/llm/wire/effort-preflight.d.ts +4 -1
  409. package/dist/llm/wire/effort-preflight.js +49 -6
  410. package/dist/llm/wire/effort-preflight.js.map +1 -1
  411. package/dist/llm/wire/openai-complete.d.ts +1 -0
  412. package/dist/llm/wire/openai-complete.js +5 -1
  413. package/dist/llm/wire/openai-complete.js.map +1 -1
  414. package/dist/llm/wire/openai-stream.d.ts +1 -0
  415. package/dist/llm/wire/openai-stream.js +1 -0
  416. package/dist/llm/wire/openai-stream.js.map +1 -1
  417. package/dist/llm/wire/responses-first.js +3 -0
  418. package/dist/llm/wire/responses-first.js.map +1 -1
  419. package/dist/llm/zen-catalog.d.ts +3 -1
  420. package/dist/llm/zen-catalog.js +9 -3
  421. package/dist/llm/zen-catalog.js.map +1 -1
  422. package/dist/mcp/argument-hint.d.ts +9 -0
  423. package/dist/mcp/argument-hint.js +17 -0
  424. package/dist/mcp/argument-hint.js.map +1 -0
  425. package/dist/mcp/catalog.js +5 -5
  426. package/dist/mcp/catalog.js.map +1 -1
  427. package/dist/mcp/manager.d.ts +2 -0
  428. package/dist/mcp/manager.js +21 -1
  429. package/dist/mcp/manager.js.map +1 -1
  430. package/dist/mcp/runtime.d.ts +5 -1
  431. package/dist/mcp/runtime.js +33 -2
  432. package/dist/mcp/runtime.js.map +1 -1
  433. package/dist/noninteractive/stream-renderer.js +2 -0
  434. package/dist/noninteractive/stream-renderer.js.map +1 -1
  435. package/dist/os/ownership-repair.d.ts +5 -0
  436. package/dist/os/ownership-repair.js +62 -0
  437. package/dist/os/ownership-repair.js.map +1 -0
  438. package/dist/os/permissions.d.ts +7 -0
  439. package/dist/os/permissions.js +27 -22
  440. package/dist/os/permissions.js.map +1 -1
  441. package/dist/os/runtime-error.d.ts +2 -0
  442. package/dist/os/runtime-error.js +39 -0
  443. package/dist/os/runtime-error.js.map +1 -0
  444. package/dist/os/settle-within.d.ts +1 -0
  445. package/dist/os/settle-within.js +12 -0
  446. package/dist/os/settle-within.js.map +1 -0
  447. package/dist/os/user-environment.d.ts +1 -0
  448. package/dist/os/user-environment.js +3 -0
  449. package/dist/os/user-environment.js.map +1 -0
  450. package/dist/os/user-identity.d.ts +11 -0
  451. package/dist/os/user-identity.js +163 -0
  452. package/dist/os/user-identity.js.map +1 -0
  453. package/dist/prompts/embedded.js +1 -1
  454. package/dist/prompts/embedded.js.map +1 -1
  455. package/dist/prompts/index.js +21 -18
  456. package/dist/prompts/index.js.map +1 -1
  457. package/dist/prompts/system.agent.md +10 -9
  458. package/dist/rea/availability.d.ts +22 -0
  459. package/dist/rea/availability.js +82 -0
  460. package/dist/rea/availability.js.map +1 -0
  461. package/dist/rea/connection.d.ts +8 -0
  462. package/dist/rea/connection.js +12 -0
  463. package/dist/rea/connection.js.map +1 -0
  464. package/dist/rea/distribution.d.ts +13 -0
  465. package/dist/rea/distribution.js +140 -0
  466. package/dist/rea/distribution.js.map +1 -0
  467. package/dist/rea/download.d.ts +22 -0
  468. package/dist/rea/download.js +198 -0
  469. package/dist/rea/download.js.map +1 -0
  470. package/dist/rea/engine-report.d.ts +4 -0
  471. package/dist/rea/engine-report.js +77 -0
  472. package/dist/rea/engine-report.js.map +1 -0
  473. package/dist/rea/engine-status.d.ts +24 -0
  474. package/dist/rea/engine-status.js +103 -0
  475. package/dist/rea/engine-status.js.map +1 -0
  476. package/dist/rea/engines.d.ts +43 -0
  477. package/dist/rea/engines.js +160 -0
  478. package/dist/rea/engines.js.map +1 -0
  479. package/dist/rea/ghidra.d.ts +83 -0
  480. package/dist/rea/ghidra.js +316 -0
  481. package/dist/rea/ghidra.js.map +1 -0
  482. package/dist/rea/guide.d.ts +14 -0
  483. package/dist/rea/guide.js +178 -0
  484. package/dist/rea/guide.js.map +1 -0
  485. package/dist/rea/hints.d.ts +3 -0
  486. package/dist/rea/hints.js +99 -0
  487. package/dist/rea/hints.js.map +1 -0
  488. package/dist/rea/install.d.ts +10 -0
  489. package/dist/rea/install.js +173 -0
  490. package/dist/rea/install.js.map +1 -0
  491. package/dist/rea/jdk.d.ts +50 -0
  492. package/dist/rea/jdk.js +171 -0
  493. package/dist/rea/jdk.js.map +1 -0
  494. package/dist/rea/node.d.ts +22 -0
  495. package/dist/rea/node.js +150 -0
  496. package/dist/rea/node.js.map +1 -0
  497. package/dist/rea/runtime.d.ts +11 -0
  498. package/dist/rea/runtime.js +186 -0
  499. package/dist/rea/runtime.js.map +1 -0
  500. package/dist/rea/tool-index.d.ts +7 -0
  501. package/dist/rea/tool-index.js +105 -0
  502. package/dist/rea/tool-index.js.map +1 -0
  503. package/dist/rea/types.d.ts +36 -0
  504. package/dist/rea/types.js +2 -0
  505. package/dist/rea/types.js.map +1 -0
  506. package/dist/rea/workflow.d.ts +14 -0
  507. package/dist/rea/workflow.js +60 -0
  508. package/dist/rea/workflow.js.map +1 -0
  509. package/dist/rea/zip.d.ts +19 -0
  510. package/dist/rea/zip.js +257 -0
  511. package/dist/rea/zip.js.map +1 -0
  512. package/dist/safety/tool-classification.js +12 -0
  513. package/dist/safety/tool-classification.js.map +1 -1
  514. package/dist/security/known-secrets.d.ts +5 -0
  515. package/dist/security/known-secrets.js +50 -0
  516. package/dist/security/known-secrets.js.map +1 -0
  517. package/dist/session-runtime/client.d.ts +1 -1
  518. package/dist/session-runtime/client.js +6 -3
  519. package/dist/session-runtime/client.js.map +1 -1
  520. package/dist/session-runtime/host.js +2 -0
  521. package/dist/session-runtime/host.js.map +1 -1
  522. package/dist/session-runtime/paths.js +14 -6
  523. package/dist/session-runtime/paths.js.map +1 -1
  524. package/dist/session-runtime/start-runtime.js +5 -8
  525. package/dist/session-runtime/start-runtime.js.map +1 -1
  526. package/dist/session-runtime/store.js +4 -1
  527. package/dist/session-runtime/store.js.map +1 -1
  528. package/dist/store/config/endpoints.js +3 -1
  529. package/dist/store/config/endpoints.js.map +1 -1
  530. package/dist/store/credentials/crypto.d.ts +7 -0
  531. package/dist/store/credentials/crypto.js +118 -0
  532. package/dist/store/credentials/crypto.js.map +1 -0
  533. package/dist/store/credentials.d.ts +21 -0
  534. package/dist/store/credentials.js +150 -0
  535. package/dist/store/credentials.js.map +1 -0
  536. package/dist/store/history/freshness.d.ts +2 -0
  537. package/dist/store/history/freshness.js +3 -2
  538. package/dist/store/history/freshness.js.map +1 -1
  539. package/dist/store/history/jsonl-backend.d.ts +0 -1
  540. package/dist/store/history/jsonl-backend.js +3 -122
  541. package/dist/store/history/jsonl-backend.js.map +1 -1
  542. package/dist/store/history/jsonl-lock.d.ts +1 -0
  543. package/dist/store/history/jsonl-lock.js +94 -71
  544. package/dist/store/history/jsonl-lock.js.map +1 -1
  545. package/dist/store/history/legacy-migration.d.ts +6 -0
  546. package/dist/store/history/legacy-migration.js +127 -0
  547. package/dist/store/history/legacy-migration.js.map +1 -0
  548. package/dist/store/history/lifecycle.js +11 -2
  549. package/dist/store/history/lifecycle.js.map +1 -1
  550. package/dist/store/history/recovery.d.ts +2 -0
  551. package/dist/store/history/recovery.js +6 -1
  552. package/dist/store/history/recovery.js.map +1 -1
  553. package/dist/store/history/session-frames.d.ts +74 -0
  554. package/dist/store/history/session-frames.js +234 -0
  555. package/dist/store/history/session-frames.js.map +1 -0
  556. package/dist/store/history/session-index.d.ts +13 -0
  557. package/dist/store/history/session-index.js +135 -0
  558. package/dist/store/history/session-index.js.map +1 -0
  559. package/dist/store/history/session-log.d.ts +44 -0
  560. package/dist/store/history/session-log.js +386 -0
  561. package/dist/store/history/session-log.js.map +1 -0
  562. package/dist/store/history/session-paths.d.ts +11 -0
  563. package/dist/store/history/session-paths.js +35 -0
  564. package/dist/store/history/session-paths.js.map +1 -0
  565. package/dist/store/history/session-queries.js +34 -19
  566. package/dist/store/history/session-queries.js.map +1 -1
  567. package/dist/store/history/session-store.d.ts +11 -0
  568. package/dist/store/history/session-store.js +202 -0
  569. package/dist/store/history/session-store.js.map +1 -0
  570. package/dist/store/history/sqlite-backend.js +2 -0
  571. package/dist/store/history/sqlite-backend.js.map +1 -1
  572. package/dist/store/history/transcript-merge.d.ts +2 -0
  573. package/dist/store/history/transcript-merge.js +46 -0
  574. package/dist/store/history/transcript-merge.js.map +1 -0
  575. package/dist/store/history-index.d.ts +2 -2
  576. package/dist/store/history-index.js +3 -18
  577. package/dist/store/history-index.js.map +1 -1
  578. package/dist/store/history.d.ts +4 -1
  579. package/dist/store/history.js +113 -61
  580. package/dist/store/history.js.map +1 -1
  581. package/dist/store/keys/secret-store.js +5 -2
  582. package/dist/store/keys/secret-store.js.map +1 -1
  583. package/dist/store/legacy-location.d.ts +1 -0
  584. package/dist/store/legacy-location.js +37 -0
  585. package/dist/store/legacy-location.js.map +1 -0
  586. package/dist/store/ownership.d.ts +3 -0
  587. package/dist/store/ownership.js +23 -0
  588. package/dist/store/ownership.js.map +1 -0
  589. package/dist/store/paths.js +3 -2
  590. package/dist/store/paths.js.map +1 -1
  591. package/dist/store/redaction-cache.d.ts +0 -5
  592. package/dist/store/redaction-cache.js +6 -5
  593. package/dist/store/redaction-cache.js.map +1 -1
  594. package/dist/store/scope.js +7 -2
  595. package/dist/store/scope.js.map +1 -1
  596. package/dist/store/session-prompts.d.ts +1 -0
  597. package/dist/store/session-prompts.js +34 -13
  598. package/dist/store/session-prompts.js.map +1 -1
  599. package/dist/store/session-queue.d.ts +4 -0
  600. package/dist/store/session-queue.js +62 -0
  601. package/dist/store/session-queue.js.map +1 -0
  602. package/dist/store/session-workspace-activity.d.ts +4 -0
  603. package/dist/store/session-workspace-activity.js +69 -0
  604. package/dist/store/session-workspace-activity.js.map +1 -0
  605. package/dist/store/session-workspace-cleanup.d.ts +4 -0
  606. package/dist/store/session-workspace-cleanup.js +246 -0
  607. package/dist/store/session-workspace-cleanup.js.map +1 -0
  608. package/dist/store/session-workspace.js +9 -0
  609. package/dist/store/session-workspace.js.map +1 -1
  610. package/dist/tools/credentials.d.ts +2 -0
  611. package/dist/tools/credentials.js +27 -0
  612. package/dist/tools/credentials.js.map +1 -0
  613. package/dist/tools/definitions/aggregate.js +10 -0
  614. package/dist/tools/definitions/aggregate.js.map +1 -1
  615. package/dist/tools/definitions/credentials.d.ts +1 -0
  616. package/dist/tools/definitions/credentials.js +15 -0
  617. package/dist/tools/definitions/credentials.js.map +1 -0
  618. package/dist/tools/definitions/files.js +4 -4
  619. package/dist/tools/definitions/files.js.map +1 -1
  620. package/dist/tools/definitions/fs-read.js +3 -2
  621. package/dist/tools/definitions/fs-read.js.map +1 -1
  622. package/dist/tools/definitions/shell.js +2 -2
  623. package/dist/tools/definitions/shell.js.map +1 -1
  624. package/dist/tools/definitions/terminal.js +2 -1
  625. package/dist/tools/definitions/terminal.js.map +1 -1
  626. package/dist/tools/definitions.js +2 -1
  627. package/dist/tools/definitions.js.map +1 -1
  628. package/dist/tools/elevated-shell.js +11 -14
  629. package/dist/tools/elevated-shell.js.map +1 -1
  630. package/dist/tools/fs/mutations.js +1 -1
  631. package/dist/tools/fs/mutations.js.map +1 -1
  632. package/dist/tools/handlers/files-2.js +1 -1
  633. package/dist/tools/handlers/files-2.js.map +1 -1
  634. package/dist/tools/http/agents.d.ts +4 -5
  635. package/dist/tools/http/agents.js +4 -12
  636. package/dist/tools/http/agents.js.map +1 -1
  637. package/dist/tools/http/fetch.js +3 -10
  638. package/dist/tools/http/fetch.js.map +1 -1
  639. package/dist/tools/interactive-session-tools.js +20 -4
  640. package/dist/tools/interactive-session-tools.js.map +1 -1
  641. package/dist/tools/registry.d.ts +1 -0
  642. package/dist/tools/registry.js +5 -0
  643. package/dist/tools/registry.js.map +1 -1
  644. package/dist/tools/shell/artifact.d.ts +7 -0
  645. package/dist/tools/shell/artifact.js +85 -0
  646. package/dist/tools/shell/artifact.js.map +1 -0
  647. package/dist/tools/shell/capture.d.ts +1 -5
  648. package/dist/tools/shell/capture.js +1 -18
  649. package/dist/tools/shell/capture.js.map +1 -1
  650. package/dist/tools/shell/exec-attempt.js +9 -27
  651. package/dist/tools/shell/exec-attempt.js.map +1 -1
  652. package/dist/tools/shell/spawn-argv.js +7 -21
  653. package/dist/tools/shell/spawn-argv.js.map +1 -1
  654. package/dist/tools/sudo-session.d.ts +2 -1
  655. package/dist/tools/sudo-session.js +26 -9
  656. package/dist/tools/sudo-session.js.map +1 -1
  657. package/dist/tui-v2/app/App.js +11 -15
  658. package/dist/tui-v2/app/App.js.map +1 -1
  659. package/dist/tui-v2/app/layout-widths.js +6 -5
  660. package/dist/tui-v2/app/layout-widths.js.map +1 -1
  661. package/dist/tui-v2/bootstrap/patch-opentui-selection.d.ts +6 -0
  662. package/dist/tui-v2/bootstrap/patch-opentui-selection.js +27 -0
  663. package/dist/tui-v2/bootstrap/patch-opentui-selection.js.map +1 -0
  664. package/dist/tui-v2/bootstrap/renderer-handle.d.ts +2 -0
  665. package/dist/tui-v2/bootstrap/renderer-handle.js +21 -10
  666. package/dist/tui-v2/bootstrap/renderer-handle.js.map +1 -1
  667. package/dist/tui-v2/bootstrap/runtime-view.js +2 -0
  668. package/dist/tui-v2/bootstrap/runtime-view.js.map +1 -1
  669. package/dist/tui-v2/bootstrap/start-tui-v2.js +19 -29
  670. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  671. package/dist/tui-v2/components/jobs/jobs-panel.js +1 -9
  672. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  673. package/dist/tui-v2/components/modal/confirm-modal.js +1 -0
  674. package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
  675. package/dist/tui-v2/components/modal/text-editor-modal.js +4 -0
  676. package/dist/tui-v2/components/modal/text-editor-modal.js.map +1 -1
  677. package/dist/tui-v2/components/overlay/overlay-host.js +1 -2
  678. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  679. package/dist/tui-v2/components/pager/pager-line.d.ts +1 -0
  680. package/dist/tui-v2/components/pager/pager-line.js +46 -27
  681. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  682. package/dist/tui-v2/components/pager/pager-rows.d.ts +3 -0
  683. package/dist/tui-v2/components/pager/pager-rows.js +18 -1
  684. package/dist/tui-v2/components/pager/pager-rows.js.map +1 -1
  685. package/dist/tui-v2/components/pager/pager.d.ts +2 -0
  686. package/dist/tui-v2/components/pager/pager.js +12 -8
  687. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  688. package/dist/tui-v2/components/plan/plan-view.js +28 -6
  689. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  690. package/dist/tui-v2/components/status/context-limit-chip.js +2 -2
  691. package/dist/tui-v2/components/status/status-line.js +13 -12
  692. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  693. package/dist/tui-v2/components/toast/toast-anim.d.ts +6 -0
  694. package/dist/tui-v2/components/toast/toast-anim.js +17 -0
  695. package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
  696. package/dist/tui-v2/components/toast/toast-host.js +15 -5
  697. package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
  698. package/dist/tui-v2/components/transcript/compacted-row.js +3 -1
  699. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  700. package/dist/tui-v2/components/transcript/intro-card.js +5 -8
  701. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
  702. package/dist/tui-v2/components/transcript/selection-snap.d.ts +43 -0
  703. package/dist/tui-v2/components/transcript/selection-snap.js +68 -0
  704. package/dist/tui-v2/components/transcript/selection-snap.js.map +1 -0
  705. package/dist/tui-v2/components/transcript/thinking-block.d.ts +2 -0
  706. package/dist/tui-v2/components/transcript/thinking-block.js +36 -19
  707. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  708. package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +0 -2
  709. package/dist/tui-v2/components/transcript/thinking-presentation.js +0 -52
  710. package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -1
  711. package/dist/tui-v2/components/transcript/tool-card.js +5 -2
  712. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  713. package/dist/tui-v2/components/transcript/transcript-anchor.d.ts +20 -0
  714. package/dist/tui-v2/components/transcript/transcript-anchor.js +43 -0
  715. package/dist/tui-v2/components/transcript/transcript-anchor.js.map +1 -0
  716. package/dist/tui-v2/components/transcript/transcript-row.js +20 -6
  717. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  718. package/dist/tui-v2/components/transcript/transcript-scroll-port.d.ts +2 -0
  719. package/dist/tui-v2/components/transcript/transcript-scroll-port.js +35 -0
  720. package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -1
  721. package/dist/tui-v2/components/transcript/transcript-view.js +184 -147
  722. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  723. package/dist/tui-v2/components/transcript/user-message.js +31 -21
  724. package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
  725. package/dist/tui-v2/composer/composer-editor.js +2 -4
  726. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  727. package/dist/tui-v2/composer/composer-highlight.js +2 -1
  728. package/dist/tui-v2/composer/composer-highlight.js.map +1 -1
  729. package/dist/tui-v2/composer/composer-wheel.d.ts +1 -1
  730. package/dist/tui-v2/composer/composer-wheel.js +4 -4
  731. package/dist/tui-v2/composer/composer-wheel.js.map +1 -1
  732. package/dist/tui-v2/rendering/ansi-to-styled.js +16 -20
  733. package/dist/tui-v2/rendering/ansi-to-styled.js.map +1 -1
  734. package/dist/tui-v2/rendering/pager-markdown.d.ts +3 -2
  735. package/dist/tui-v2/rendering/pager-markdown.js +15 -11
  736. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  737. package/dist/types.d.ts +5 -7
  738. package/dist/types.js.map +1 -1
  739. package/dist/ui/mentions/expand.js +4 -0
  740. package/dist/ui/mentions/expand.js.map +1 -1
  741. package/dist/ui-core/bootstrap/composition-root.js +23 -0
  742. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  743. package/dist/ui-core/bootstrap/fatal-diagnostics.d.ts +1 -0
  744. package/dist/ui-core/bootstrap/fatal-diagnostics.js +9 -0
  745. package/dist/ui-core/bootstrap/fatal-diagnostics.js.map +1 -0
  746. package/dist/ui-core/bootstrap/lifecycle.d.ts +5 -0
  747. package/dist/ui-core/bootstrap/lifecycle.js +33 -4
  748. package/dist/ui-core/bootstrap/lifecycle.js.map +1 -1
  749. package/dist/ui-core/bootstrap/resume-option.d.ts +11 -0
  750. package/dist/ui-core/bootstrap/resume-option.js +9 -0
  751. package/dist/ui-core/bootstrap/resume-option.js.map +1 -0
  752. package/dist/ui-core/bootstrap/session-merge.d.ts +4 -0
  753. package/dist/ui-core/bootstrap/session-merge.js +19 -0
  754. package/dist/ui-core/bootstrap/session-merge.js.map +1 -0
  755. package/dist/ui-core/bootstrap/session-resume.d.ts +2 -11
  756. package/dist/ui-core/bootstrap/session-resume.js +2 -8
  757. package/dist/ui-core/bootstrap/session-resume.js.map +1 -1
  758. package/dist/ui-core/bootstrap/shutdown-services.d.ts +3 -0
  759. package/dist/ui-core/bootstrap/shutdown-services.js +24 -0
  760. package/dist/ui-core/bootstrap/shutdown-services.js.map +1 -0
  761. package/dist/ui-core/commands/change-commands.js +53 -15
  762. package/dist/ui-core/commands/change-commands.js.map +1 -1
  763. package/dist/ui-core/commands/command-handlers.js +4 -0
  764. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  765. package/dist/ui-core/commands/credential-commands.d.ts +7 -0
  766. package/dist/ui-core/commands/credential-commands.js +114 -0
  767. package/dist/ui-core/commands/credential-commands.js.map +1 -0
  768. package/dist/ui-core/commands/picker-commands.d.ts +6 -2
  769. package/dist/ui-core/commands/picker-commands.js +30 -17
  770. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  771. package/dist/ui-core/commands/pickers/search-reasoning.js +14 -4
  772. package/dist/ui-core/commands/pickers/search-reasoning.js.map +1 -1
  773. package/dist/ui-core/commands/rea-commands.d.ts +3 -0
  774. package/dist/ui-core/commands/rea-commands.js +176 -0
  775. package/dist/ui-core/commands/rea-commands.js.map +1 -0
  776. package/dist/ui-core/commands/rea-engines-commands.d.ts +37 -0
  777. package/dist/ui-core/commands/rea-engines-commands.js +433 -0
  778. package/dist/ui-core/commands/rea-engines-commands.js.map +1 -0
  779. package/dist/ui-core/composer/completion.js +3 -0
  780. package/dist/ui-core/composer/completion.js.map +1 -1
  781. package/dist/ui-core/controllers/overlay-controller.d.ts +5 -2
  782. package/dist/ui-core/controllers/overlay-controller.js +3 -2
  783. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  784. package/dist/ui-core/controllers/selection-controller.d.ts +2 -1
  785. package/dist/ui-core/controllers/selection-controller.js +27 -0
  786. package/dist/ui-core/controllers/selection-controller.js.map +1 -1
  787. package/dist/ui-core/layout/compute-layout.d.ts +3 -1
  788. package/dist/ui-core/layout/compute-layout.js +4 -2
  789. package/dist/ui-core/layout/compute-layout.js.map +1 -1
  790. package/dist/ui-core/motion/wheel-scroll.d.ts +7 -0
  791. package/dist/ui-core/motion/wheel-scroll.js +24 -0
  792. package/dist/ui-core/motion/wheel-scroll.js.map +1 -0
  793. package/dist/{classic/render/palette.js → ui-core/rendering/ansi-palette.js} +1 -1
  794. package/dist/ui-core/rendering/ansi-palette.js.map +1 -0
  795. package/dist/ui-core/rendering/artifact-pager-source.d.ts +1 -0
  796. package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -1
  797. package/dist/ui-core/rendering/compaction-pager-source.d.ts +4 -0
  798. package/dist/ui-core/rendering/compaction-pager-source.js +65 -0
  799. package/dist/ui-core/rendering/compaction-pager-source.js.map +1 -0
  800. package/dist/ui-core/rendering/duration.d.ts +3 -1
  801. package/dist/ui-core/rendering/duration.js +12 -3
  802. package/dist/ui-core/rendering/duration.js.map +1 -1
  803. package/dist/ui-core/rendering/incremental-strip.js +4 -1
  804. package/dist/ui-core/rendering/incremental-strip.js.map +1 -1
  805. package/dist/ui-core/rendering/intro-header.d.ts +3 -0
  806. package/dist/ui-core/rendering/intro-header.js +145 -161
  807. package/dist/ui-core/rendering/intro-header.js.map +1 -1
  808. package/dist/ui-core/rendering/job-tail-source.js +30 -2
  809. package/dist/ui-core/rendering/job-tail-source.js.map +1 -1
  810. package/dist/ui-core/rendering/markdown-diff-rows.d.ts +12 -0
  811. package/dist/ui-core/rendering/markdown-diff-rows.js +85 -0
  812. package/dist/ui-core/rendering/markdown-diff-rows.js.map +1 -0
  813. package/dist/ui-core/rendering/markdown.d.ts +1 -0
  814. package/dist/ui-core/rendering/markdown.js +12 -0
  815. package/dist/ui-core/rendering/markdown.js.map +1 -1
  816. package/dist/ui-core/rendering/open-tool-output.d.ts +1 -0
  817. package/dist/ui-core/rendering/open-tool-output.js +48 -14
  818. package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
  819. package/dist/ui-core/rendering/pager-regions.d.ts +7 -0
  820. package/dist/ui-core/rendering/pager-regions.js +8 -0
  821. package/dist/ui-core/rendering/pager-regions.js.map +1 -0
  822. package/dist/ui-core/rendering/plan-view.js +5 -5
  823. package/dist/ui-core/rendering/plan-view.js.map +1 -1
  824. package/dist/ui-core/rendering/render-markdown-lines.d.ts +1 -0
  825. package/dist/ui-core/rendering/render-markdown-lines.js +5 -2
  826. package/dist/ui-core/rendering/render-markdown-lines.js.map +1 -1
  827. package/dist/ui-core/rendering/session-change-diff.d.ts +2 -0
  828. package/dist/ui-core/rendering/session-change-diff.js +85 -0
  829. package/dist/ui-core/rendering/session-change-diff.js.map +1 -0
  830. package/dist/ui-core/rendering/session-prompts-pager-source.js +1 -1
  831. package/dist/ui-core/rendering/session-prompts-pager-source.js.map +1 -1
  832. package/dist/ui-core/rendering/strip-tool-surfaces.js +7 -7
  833. package/dist/ui-core/rendering/strip-tool-surfaces.js.map +1 -1
  834. package/dist/ui-core/rendering/task-disclosure.js +3 -3
  835. package/dist/ui-core/rendering/task-disclosure.js.map +1 -1
  836. package/dist/ui-core/rendering/text-width.d.ts +2 -0
  837. package/dist/ui-core/rendering/text-width.js +100 -4
  838. package/dist/ui-core/rendering/text-width.js.map +1 -1
  839. package/dist/ui-core/rendering/thinking-tail.js +6 -2
  840. package/dist/ui-core/rendering/thinking-tail.js.map +1 -1
  841. package/dist/ui-core/rendering/tool-output-pager-source.d.ts +4 -0
  842. package/dist/ui-core/rendering/tool-output-pager-source.js +94 -0
  843. package/dist/ui-core/rendering/tool-output-pager-source.js.map +1 -0
  844. package/dist/ui-core/rendering/tool-presenter.d.ts +2 -0
  845. package/dist/ui-core/rendering/tool-presenter.js +53 -0
  846. package/dist/ui-core/rendering/tool-presenter.js.map +1 -1
  847. package/dist/ui-core/state/hydrate/classic-transcript.js +2 -0
  848. package/dist/ui-core/state/hydrate/classic-transcript.js.map +1 -1
  849. package/dist/ui-core/state/pager-search.d.ts +8 -0
  850. package/dist/ui-core/state/pager-search.js +20 -0
  851. package/dist/ui-core/state/pager-search.js.map +1 -1
  852. package/dist/ui-core/state/semantic-document.d.ts +4 -0
  853. package/dist/ui-core/state/semantic-document.js.map +1 -1
  854. package/dist/ui-core/state/transcript/apply-app-event.js +1 -0
  855. package/dist/ui-core/state/transcript/apply-app-event.js.map +1 -1
  856. package/dist/ui-core/state/transcript-hydrate.js +1 -0
  857. package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
  858. package/dist/ui-core/state/transcript-store.d.ts +2 -1
  859. package/dist/ui-core/state/transcript-store.js +35 -0
  860. package/dist/ui-core/state/transcript-store.js.map +1 -1
  861. package/dist/ui-core/state/transcript-types.d.ts +2 -0
  862. package/dist/ui-core/state/transcript-types.js.map +1 -1
  863. package/dist/ui-core/state/transcript-window.d.ts +11 -2
  864. package/dist/ui-core/state/transcript-window.js +11 -2
  865. package/dist/ui-core/state/transcript-window.js.map +1 -1
  866. package/dist/version.generated.d.ts +2 -2
  867. package/dist/version.generated.js +2 -2
  868. package/dist/version.generated.js.map +1 -1
  869. package/package.json +5 -2
  870. package/dist/agent/context/compaction-work-history.d.ts +0 -13
  871. package/dist/agent/context/compaction-work-history.js +0 -150
  872. package/dist/agent/context/compaction-work-history.js.map +0 -1
  873. package/dist/classic/render/palette.js.map +0 -1
  874. package/dist/tui-v2/components/modal/prompt-actions-modal.d.ts +0 -10
  875. package/dist/tui-v2/components/modal/prompt-actions-modal.js +0 -101
  876. package/dist/tui-v2/components/modal/prompt-actions-modal.js.map +0 -1
  877. package/dist/tui-v2/components/transcript/transcript-scrollbar.d.ts +0 -29
  878. package/dist/tui-v2/components/transcript/transcript-scrollbar.js +0 -211
  879. package/dist/tui-v2/components/transcript/transcript-scrollbar.js.map +0 -1
  880. package/dist/ui-core/rendering/prompt-preview.d.ts +0 -5
  881. package/dist/ui-core/rendering/prompt-preview.js +0 -27
  882. package/dist/ui-core/rendering/prompt-preview.js.map +0 -1
  883. /package/dist/{classic/render/palette.d.ts → ui-core/rendering/ansi-palette.d.ts} +0 -0
@@ -0,0 +1,163 @@
1
+ import { compactionPromptAnchors, hasCompletedConversationTurn } from "../context/compaction-recent-history.js";
2
+ import { inheritedInstructionAnchors } from "../context/compaction-user-instructions.js";
3
+ import { ACTIVE_GOAL_HEADING, CONTEXT_GATHERED_HEADING, CURRENT_STATE_HEADING, isCompactionMemoryMessage, ISSUES_HEADING, PAST_WORK_HEADING, RECENT_PROMPTS_HEADING, RELEVANT_FILES_HEADING, USER_INSTRUCTIONS_HEADING, WORK_DONE_HEADING, } from "./memory-sections.js";
4
+ export const COMPACTION_SYSTEM_PROMPT = [
5
+ "You write continuation memory for an autonomous coding and security agent whose conversation is being compacted.",
6
+ "Follow the format in the user message exactly. You are summarizing the session, not continuing it: never answer the user, call tools, continue the task, or invent findings, file contents, receipts, exit codes or completions.",
7
+ ].join("\n");
8
+ export function compactionSituation(messages, options = {}) {
9
+ return {
10
+ turnInProgress: options.turnInProgress ?? !hasCompletedConversationTurn(messages),
11
+ hasPriorMemory: messages.some((message) => message.compaction !== undefined || isCompactionMemoryMessage(message)),
12
+ promptAnchors: compactionPromptAnchors(messages),
13
+ instructionAnchors: inheritedInstructionAnchors(messages),
14
+ };
15
+ }
16
+ const ROLE = [
17
+ "CONTEXT COMPACTION",
18
+ "",
19
+ "Pause the task for this one response. The conversation has reached its context limit and is about to be replaced by the continuation memory you write now. Afterwards the agent continues with only the system prompt, this memory, re-injected session state (active plan, durable envelope, project instructions, skills) and the most recent messages. Anything you leave out is gone, so the memory must let the agent resume exactly where it stopped, without repeating finished work, drifting from the user's intent, or forgetting a rule.",
20
+ "",
21
+ "Write the memory only. Do not answer the user, call tools, continue the work, or invent results, file contents, receipts, exit codes or completions. Use your own words.",
22
+ ];
23
+ const PLAN_HANDOFF = [
24
+ "",
25
+ "PURPOSE: the user accepted the plan built in plan mode and the agent now implements it. The active goal is to execute that accepted plan; the plan itself is re-injected separately, so reference its tasks instead of copying them. Context gathered carries the plan-mode research evidence (for security work: targets, scope, confirmed findings, negative results and untested areas). Plan-mode restrictions such as gather-only or wait-for-approval are historical now, while engagement scope and safety rules still apply.",
26
+ ];
27
+ function situationLines(input) {
28
+ const { situation, source } = input;
29
+ if (!situation)
30
+ return [];
31
+ const lines = ["", "SITUATION"];
32
+ if (input.partialSource) {
33
+ lines.push("- The source covers only the older part of the session; the newer turns stay in the live history right after this memory. Summarize the source completely and do not guess about the newer turns.");
34
+ }
35
+ lines.push(situation.turnInProgress
36
+ ? "- The agent was in the middle of the latest user request when the limit was hit. The latest user message is kept verbatim after the memory; the memory must say precisely what was in progress and what comes next."
37
+ : "- The latest turn ended with a final answer. Unless the conversation shows unfinished commitments, the latest task is complete.");
38
+ if (situation.hasPriorMemory) {
39
+ lines.push("- An earlier compaction memory appears in the source. It is the only record of everything before it: carry every still-relevant fact forward, merged with the newer turns and rewritten into the sections below. Move tasks that have since finished into Past completed work; never drop earlier completed work.");
40
+ }
41
+ if (source.kind === "regions") {
42
+ lines.push("- The source is a set of chronological region notes of one session; merge them into one memory and let later regions override earlier ones.");
43
+ }
44
+ if (situation.promptAnchors)
45
+ lines.push("", situation.promptAnchors);
46
+ if (situation.instructionAnchors)
47
+ lines.push("", situation.instructionAnchors);
48
+ return lines;
49
+ }
50
+ const FORMAT = [
51
+ "",
52
+ "FORMAT: write these sections in this exact order with these exact headings. Every section is required except Issues and risks, which you omit entirely when there is no genuine issue.",
53
+ "",
54
+ ACTIVE_GOAL_HEADING,
55
+ "The one goal the agent pursues next, as a precise, self-contained brief. Build it from the latest unfinished user task combined with every later follow-up, correction and piece of feedback; when the user changed direction mid-task, state the new direction and what it replaces. Include the definition of done (acceptance criteria and required verification such as tests, build, commit or push) and any scope limits or non-goals the user or the work established. If every task is finished, write \"No active task.\", name what was completed last, and say the agent should wait for the next request. Older finished tasks do not belong here.",
56
+ "",
57
+ USER_INSTRUCTIONS_HEADING,
58
+ "Rules the user gave about how to work, rewritten concisely in your own words while keeping exact values (limits, names, versions, paths, required wording). One bullet each:",
59
+ "- [S1] (session) a rule for all work in this session or project, such as code style, \"write like a senior developer\", \"no file over 300 lines\", git and commit rules, tools to use or avoid.",
60
+ "- [T1] (task: short task name) a rule that applies only within one task, such as \"while changing the UI, do not increase the composer width\".",
61
+ "Requests to do something (\"fix this UI\", \"change the color\", \"add /creds\") are tasks, not instructions; they belong in Active goal, Work done or Past completed work. Reuse carried IDs and give new rules the next free S or T number. Session rules last for the whole session. Keep a task rule only while its task is active or unfinished, and drop it once that task is done or abandoned. When the user changes or revokes a session rule, write \"- [S1] (retired) user: \\\"exact newer user quote\\\"\" and add the replacement as a new bullet. Rules from project instruction files (AGENTS.md, .clai/INSTRUCTIONS.md and similar) are re-injected separately, so do not copy them here, and never persist session or task rules into those files. Write \"None\" when there are no rules. Never write secret values.",
62
+ "",
63
+ CONTEXT_GATHERED_HEADING,
64
+ "Everything learned that the active goal depends on, so the agent never has to rediscover it: what exists and where (paths with line numbers, symbols, functions, components, config keys, endpoints, data shapes), how the relevant code or system works, why the problem happens (root cause and evidence), environment facts (stack, package manager, working commands, versions), constraints, decisions the user made or the work applied with their reasons (an approach nobody has chosen or applied yet is not a decision: put it in next steps as a proposal), and findings from tools, web research and subagents. For non-coding work, record each relevant command or tool finding with its key result. Quote code only where the exact text matters, such as a signature or an error message.",
65
+ "",
66
+ WORK_DONE_HEADING,
67
+ "Everything already done toward the active goal: each change as `path:line` or symbol, what changed (before → after) and why; files created or deleted; commands run with a short result (test counts, build status, commit hashes, pushes). Mark clearly what was applied and verified versus attempted, failed, reverted or only partly applied. Write \"Nothing yet.\" when no work has started.",
68
+ "",
69
+ CURRENT_STATE_HEADING,
70
+ "The most important section: it decides whether the agent resumes correctly. State exactly where the work stopped: what was in progress at the moment of compaction (the step, file or command, and what had and had not been applied), the workspace state (uncommitted changes, branch, running processes, background jobs, subagents and whether their results were read) and the latest user follow-up the agent must honor. Then give a numbered list of concrete next actions, starting with the very next one, each with how to verify it. Never list completed work as a next step, never re-plan finished steps, and never invent new tasks. When nothing remains, say so.",
71
+ "",
72
+ PAST_WORK_HEADING,
73
+ "Every earlier task in this session that is finished and is not the active goal, oldest first, one bullet per task: what the user asked, what was done (key files and symbols), the outcome and its verification, and its delivery state (uncommitted, committed with hash, pushed, PR open, merged, or unknown). Merge the entries from any earlier memory and rewrite them as tasks finish. Say when a past task relates to the active goal. Write \"None.\" when the active goal is the first task.",
74
+ "",
75
+ RELEVANT_FILES_HEADING,
76
+ "Files the agent needs for the active goal, most important first, as `path:line-range` — symbol and why it matters. At most about 20 entries; never list every file that was read.",
77
+ "",
78
+ ISSUES_HEADING,
79
+ "Only genuine open problems: failing tests, unresolved errors, blockers, risky partial edits, conflicting requirements, decisions the user must make. Omit the whole section when there are none.",
80
+ "",
81
+ `Do not write a "${RECENT_PROMPTS_HEADING.replace(/^## /, "")}" section; the application appends the verbatim prompts.`,
82
+ ];
83
+ const QUALITY = [
84
+ "",
85
+ "QUALITY",
86
+ "- Be concrete and complete. Prefer exact identifiers, paths, line numbers, commands, values and error text over paraphrase; vague phrases such as \"updated the logic\" are useless to the next agent.",
87
+ "- Read the source to the very end: the latest tool call, result and user message define the current state. Decisions that were replaced or reverted are superseded; record only the final choice and why.",
88
+ "- Separate fact from intent: a decision, scope limit or design counts as made only when the user stated it or the work applied it. Your own suggestions for how to proceed belong in Current state and next steps, phrased as proposed steps.",
89
+ "- State each fact once, in the section where the next agent will look for it.",
90
+ "- Delegated workers are subagents: record each one's id and attempt, task, status, whether its result was read, and the conclusions of results already read; retained reports stay recoverable by id and attempt. Keep background jobs and Responder tasks separate from subagents. The RESPONDER RESULT LEDGER is authoritative: never describe a consumed=true result as unread, and keep unread results pending.",
91
+ "- Approval and mode gates: plan-mode gather-only or wait-for-approval limits end only when the user accepts the plan; research-only or no-implementation limits the user set for the current topic stay in force. Compaction never grants approval, and an answered question never authorizes new work.",
92
+ "- Refer to credentials and secrets by purpose only; their values are carried separately.",
93
+ "- Length: as long as needed to lose nothing that matters and no longer, usually 1,500 to 4,000 tokens and up to about 6,000 for long sessions with several tasks. Plain Markdown with bullets, no code fences around the whole memory. Finish every section and end on a complete sentence.",
94
+ ];
95
+ function sourceLines(source) {
96
+ switch (source.kind) {
97
+ case "conversation":
98
+ return ["", "SOURCE: the entire conversation above this message, up to and including the most recent turn. This message itself is not part of the session."];
99
+ case "transcript":
100
+ return ["", "SOURCE (session transcript, oldest first):", "", source.text];
101
+ case "regions":
102
+ return ["", "SOURCE (region notes, oldest first):", "", source.regions.map((region, index) => `REGION ${index + 1}:\n${region}`).join("\n\n")];
103
+ }
104
+ }
105
+ export function buildCompactionUserPrompt(input) {
106
+ const durable = input.durableState?.trim();
107
+ return [
108
+ ...ROLE,
109
+ ...(input.purpose === "plan-implement" ? PLAN_HANDOFF : []),
110
+ ...situationLines(input),
111
+ ...(durable ? ["", "DURABLE STATE (authoritative for plan, task, job and result statuses):", durable] : []),
112
+ ...FORMAT,
113
+ ...QUALITY,
114
+ ...sourceLines(input.source),
115
+ ].join("\n");
116
+ }
117
+ export function buildDirectCompactionPrompt(input) {
118
+ return buildCompactionUserPrompt({
119
+ source: { kind: "conversation" },
120
+ situation: compactionSituation(input.messages, { turnInProgress: input.turnInProgress }),
121
+ durableState: input.durableState,
122
+ purpose: input.purpose,
123
+ });
124
+ }
125
+ export function buildCompactionChunkPrompt(input) {
126
+ return [
127
+ `REGION NOTES ${input.index + 1} OF ${input.total}`,
128
+ "",
129
+ "This is one chronological region of a long session that is being compacted. Write dense notes that a later pass will merge into the final memory. Summarize only what this region shows; do not answer the user, call tools, continue the work or guess about other regions.",
130
+ ...(input.purpose === "plan-implement" ? ["The session is a plan-mode research phase whose accepted plan will be implemented next; keep research evidence, findings, negative results and open areas."] : []),
131
+ "",
132
+ "Use these headings and keep every consequential detail:",
133
+ "### Tasks requested — each user request in order, with every later follow-up or correction, and whether it finished in this region.",
134
+ "### User instructions — each rule about how to work, quoted exactly, marked session-wide or tied to one task; prompts that ask for work are tasks, not instructions.",
135
+ "### Context gathered — paths with line numbers, symbols, mechanisms, root causes, environment facts, decisions with reasons, tool, web and subagent findings.",
136
+ "### Work done — each change as path:line or symbol (before → after), commands with short results, commits and pushes, failed or reverted attempts.",
137
+ "### State at the end of the region — what was in progress, pending next steps, open problems.",
138
+ "",
139
+ "Use exact identifiers. Never copy transcript lines, tool-call syntax or long output, and never write secret values.",
140
+ "",
141
+ "SOURCE (region):",
142
+ "",
143
+ input.chunk,
144
+ ].join("\n");
145
+ }
146
+ export function buildCompactionReducePrompt(input) {
147
+ return buildCompactionUserPrompt({
148
+ source: { kind: "regions", regions: input.partials },
149
+ situation: input.situation,
150
+ durableState: input.durableState,
151
+ purpose: input.purpose,
152
+ });
153
+ }
154
+ const RETRY_ISSUES = {
155
+ truncated: "The previous draft hit its output limit.",
156
+ "reasoning-only": "The previous draft contained no visible memory.",
157
+ replayed: "The previous draft copied transcript lines or tool-call syntax.",
158
+ incomplete: "The previous draft ended abruptly or missed required sections.",
159
+ };
160
+ export function buildCompactionRetryPrompt(prompt, reason) {
161
+ return `${prompt}\n\nQUALITY RETRY: ${RETRY_ISSUES[reason]} Write the complete memory again from the source, not as a continuation of the failed draft. Use every required section, keep every consequential fact once, and end on a complete sentence.`;
162
+ }
163
+ //# sourceMappingURL=compaction-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-prompt.js","sourceRoot":"","sources":["../../../src/agent/compaction/compaction-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ChatMessage } from "../../types.js";
2
+ export declare const COMPACTION_MEMORY_PREFIX = "Session memory from compacted earlier turns:";
3
+ export declare const PLAN_IMPLEMENT_MEMORY_PREFIX = "PLAN MODE HANDOFF: research memory for the accepted implementation phase. Gather-only/await-approval gates are historical; ACTIVE PLAN and SESSION STATE are authoritative:";
4
+ export declare const LEGACY_PLAN_IMPLEMENT_MEMORY_PREFIX = "Session memory from PLAN MODE research that was used to build the comprehensive detailed plan and tasks you are seeing now (handoff to agent implement \u2014 gather-only phase is over; execute approved tasks):";
5
+ export declare const MECHANICAL_MEMORY_PREFIX = "Earlier turns in this session, summarized";
6
+ export declare function isCompactionMemoryMessage(message: ChatMessage): boolean;
7
+ export declare const ACTIVE_GOAL_HEADING = "## Active goal";
8
+ export declare const USER_INSTRUCTIONS_HEADING = "## User instructions";
9
+ export declare const CONTEXT_GATHERED_HEADING = "## Context gathered";
10
+ export declare const WORK_DONE_HEADING = "## Work done";
11
+ export declare const CURRENT_STATE_HEADING = "## Current state and next steps";
12
+ export declare const PAST_WORK_HEADING = "## Past completed work";
13
+ export declare const RELEVANT_FILES_HEADING = "## Relevant files";
14
+ export declare const ISSUES_HEADING = "## Issues and risks";
15
+ export declare const RECENT_PROMPTS_HEADING = "## Last 3 user prompts (latest first)";
16
+ export declare const MODEL_MEMORY_HEADINGS: readonly ["## Active goal", "## User instructions", "## Context gathered", "## Work done", "## Current state and next steps", "## Past completed work", "## Relevant files", "## Issues and risks"];
17
+ export interface SectionRange {
18
+ readonly start: number;
19
+ readonly end: number;
20
+ readonly body: string;
21
+ }
22
+ export declare function sectionRanges(text: string, heading: string): SectionRange[];
23
+ export declare function sectionBody(text: string, heading: string): string | undefined;
24
+ export declare function replaceSections(text: string, heading: string, replacement: string): string;
25
+ export declare function withoutSection(text: string, heading: string): string;
26
+ export declare function insertSectionAfter(text: string, previous: readonly string[], section: string): string;
27
+ export declare function canonicalMemoryLayout(text: string): string;
@@ -0,0 +1,144 @@
1
+ export const COMPACTION_MEMORY_PREFIX = "Session memory from compacted earlier turns:";
2
+ export const PLAN_IMPLEMENT_MEMORY_PREFIX = "PLAN MODE HANDOFF: research memory for the accepted implementation phase. Gather-only/await-approval gates are historical; ACTIVE PLAN and SESSION STATE are authoritative:";
3
+ export const LEGACY_PLAN_IMPLEMENT_MEMORY_PREFIX = "Session memory from PLAN MODE research that was used to build the comprehensive detailed plan and tasks you are seeing now (handoff to agent implement — gather-only phase is over; execute approved tasks):";
4
+ export const MECHANICAL_MEMORY_PREFIX = "Earlier turns in this session, summarized";
5
+ const MEMORY_PREFIXES = [
6
+ COMPACTION_MEMORY_PREFIX,
7
+ PLAN_IMPLEMENT_MEMORY_PREFIX,
8
+ LEGACY_PLAN_IMPLEMENT_MEMORY_PREFIX,
9
+ MECHANICAL_MEMORY_PREFIX,
10
+ ];
11
+ export function isCompactionMemoryMessage(message) {
12
+ return message.role === "system" && MEMORY_PREFIXES.some((prefix) => message.content.startsWith(prefix));
13
+ }
14
+ export const ACTIVE_GOAL_HEADING = "## Active goal";
15
+ export const USER_INSTRUCTIONS_HEADING = "## User instructions";
16
+ export const CONTEXT_GATHERED_HEADING = "## Context gathered";
17
+ export const WORK_DONE_HEADING = "## Work done";
18
+ export const CURRENT_STATE_HEADING = "## Current state and next steps";
19
+ export const PAST_WORK_HEADING = "## Past completed work";
20
+ export const RELEVANT_FILES_HEADING = "## Relevant files";
21
+ export const ISSUES_HEADING = "## Issues and risks";
22
+ export const RECENT_PROMPTS_HEADING = "## Last 3 user prompts (latest first)";
23
+ export const MODEL_MEMORY_HEADINGS = [
24
+ ACTIVE_GOAL_HEADING,
25
+ USER_INSTRUCTIONS_HEADING,
26
+ CONTEXT_GATHERED_HEADING,
27
+ WORK_DONE_HEADING,
28
+ CURRENT_STATE_HEADING,
29
+ PAST_WORK_HEADING,
30
+ RELEVANT_FILES_HEADING,
31
+ ISSUES_HEADING,
32
+ ];
33
+ const SECTION_BOUNDARY = /^#{1,2}\s/;
34
+ function normalizedHeading(line) {
35
+ return line.trim().replace(/\s+/g, " ").toLowerCase();
36
+ }
37
+ export function sectionRanges(text, heading) {
38
+ const wanted = normalizedHeading(heading);
39
+ const lines = text.split("\n");
40
+ const ranges = [];
41
+ const offsets = [];
42
+ let offset = 0;
43
+ for (const line of lines) {
44
+ offsets.push(offset);
45
+ offset += line.length + 1;
46
+ }
47
+ for (let index = 0; index < lines.length; index += 1) {
48
+ if (normalizedHeading(lines[index]) !== wanted)
49
+ continue;
50
+ let end = index + 1;
51
+ while (end < lines.length && !SECTION_BOUNDARY.test(lines[end].trim()))
52
+ end += 1;
53
+ ranges.push({
54
+ start: offsets[index],
55
+ end: end < lines.length ? offsets[end] : text.length,
56
+ body: lines.slice(index + 1, end).join("\n").trim(),
57
+ });
58
+ }
59
+ return ranges;
60
+ }
61
+ export function sectionBody(text, heading) {
62
+ const bodies = sectionRanges(text, heading).map((range) => range.body).filter(Boolean);
63
+ return bodies.length > 0 ? bodies.join("\n") : undefined;
64
+ }
65
+ export function replaceSections(text, heading, replacement) {
66
+ const ranges = sectionRanges(text, heading);
67
+ if (ranges.length === 0)
68
+ return text;
69
+ let result = text;
70
+ for (let index = ranges.length - 1; index >= 0; index -= 1) {
71
+ const range = ranges[index];
72
+ const content = index === 0 && replacement ? `${replacement}\n\n` : "";
73
+ result = `${result.slice(0, range.start)}${content}${result.slice(range.end)}`;
74
+ }
75
+ return result.replace(/\n{3,}/g, "\n\n").trim();
76
+ }
77
+ export function withoutSection(text, heading) {
78
+ return replaceSections(text, heading, "");
79
+ }
80
+ export function insertSectionAfter(text, previous, section) {
81
+ for (let index = previous.length - 1; index >= 0; index -= 1) {
82
+ const ranges = sectionRanges(text, previous[index]);
83
+ const last = ranges.at(-1);
84
+ if (!last)
85
+ continue;
86
+ const before = text.slice(0, last.end).trimEnd();
87
+ const after = text.slice(last.end).trimStart();
88
+ return [before, section, after].filter(Boolean).join("\n\n");
89
+ }
90
+ return [section, text.trim()].filter(Boolean).join("\n\n");
91
+ }
92
+ const FENCE = /^(```|~~~)/;
93
+ const EMPTY_ISSUES = /^(none|n\/a|no (known |genuine |open )?(issues|risks)( or risks)?)\.?$/i;
94
+ function splitSections(text) {
95
+ const preamble = [];
96
+ const sections = [];
97
+ let fenced = false;
98
+ for (const line of text.split("\n")) {
99
+ const trimmed = line.trim();
100
+ if (FENCE.test(trimmed))
101
+ fenced = !fenced;
102
+ if (!fenced && /^##\s/.test(trimmed))
103
+ sections.push({ heading: trimmed, body: [] });
104
+ else if (sections.length > 0)
105
+ sections.at(-1).body.push(line);
106
+ else
107
+ preamble.push(line);
108
+ }
109
+ return {
110
+ preamble: preamble.join("\n").trim(),
111
+ sections: sections.map(({ heading, body }) => ({ heading, body: body.join("\n").trim() })),
112
+ };
113
+ }
114
+ function headingRank(heading) {
115
+ const index = MODEL_MEMORY_HEADINGS.findIndex((known) => normalizedHeading(known) === normalizedHeading(heading));
116
+ return index < 0 ? MODEL_MEMORY_HEADINGS.length : index;
117
+ }
118
+ function isDiscarded(section) {
119
+ const heading = normalizedHeading(section.heading);
120
+ if (heading === normalizedHeading(RECENT_PROMPTS_HEADING))
121
+ return true;
122
+ return heading === normalizedHeading(ISSUES_HEADING) && (section.body === "" || EMPTY_ISSUES.test(section.body.replace(/^[-*]\s*/, "")));
123
+ }
124
+ export function canonicalMemoryLayout(text) {
125
+ const { preamble, sections } = splitSections(text);
126
+ const merged = new Map();
127
+ for (const section of sections) {
128
+ const rank = headingRank(section.heading);
129
+ const known = rank < MODEL_MEMORY_HEADINGS.length;
130
+ const key = known ? normalizedHeading(section.heading) : `${normalizedHeading(section.heading)}#${merged.size}`;
131
+ const existing = merged.get(key);
132
+ merged.set(key, {
133
+ heading: known ? MODEL_MEMORY_HEADINGS[rank] : section.heading,
134
+ body: [existing?.body, section.body].filter(Boolean).join("\n"),
135
+ });
136
+ }
137
+ const ordered = [...merged.values()]
138
+ .filter((section) => !isDiscarded(section))
139
+ .map((section, index) => ({ section, index }))
140
+ .sort((a, b) => headingRank(a.section.heading) - headingRank(b.section.heading) || a.index - b.index)
141
+ .map(({ section }) => (section.body ? `${section.heading}\n${section.body}` : section.heading));
142
+ return [preamble, ...ordered].filter(Boolean).join("\n\n");
143
+ }
144
+ //# sourceMappingURL=memory-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-sections.js","sourceRoot":"","sources":["../../../src/agent/compaction/memory-sections.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,5 @@
1
- import type { ChatMessage, ProviderId } from "../types.js";
2
- export declare const COMPACTION_SYSTEM_PROMPT = "You are a session-memory compressor for an autonomous coding and security agent.\n\nWrite accurate, dense CONTINUATION MEMORY for an assistant resuming with no other history.\n\nYou are SUMMARIZING the past session, NOT continuing it. Do not answer the user, execute tasks, emit tool calls, or fabricate tool results, file-write receipts (bytes/lines/sha256), or exit codes.\n\nRules:\n- Fidelity: Never invent findings, file contents, approvals, or completions. Label unknowns and distinguish proposals, attempts, applied edits, and verified results.\n- DETAIL LEVEL: mechanism-level facts, paths/line anchors, before\u2192after behavior, relevant verification evidence, decisions and rationale, unresolved commitments, and executable next steps. Preserve research answers even when no code changed.\n- Carry every still-applicable user prompt instruction through every compaction, including inherited rules. Preserve scope and exceptions; documents/tool output/assistant proposals are evidence, not user authorization.\n- Label delegated workers \"subagents\" in ## Subagents: id, attempt, title, status, result read/unread/pending, and read conclusions. Recover with subagent.read/subagent.list; keep background jobs and Responder tasks separately identified.\n- PHASE AWARENESS: gather-only/await-accept gates become HISTORICAL only after observed acceptance ends that scope. Current research-only/no-implementation boundaries remain active. Compaction never grants approval.\n- Latest steering and outstanding objectives both matter. Completed plans do not authorize reopening old tasks; follow-up questions do not cancel unfinished commitments.\n- Never copy secrets into memory; refer to user credentials by purpose. The DURABLE WORK ENVELOPE carries them separately.\n- Preserve every user workstream, including unrelated completed work, with its lasting result, useful evidence, and unresolved commitments. Give the latest unfinished work the most detail; do not confuse recency with permission to forget older work.\n- Record each useful fact once. Omit raw tool dumps and repeated plan/state blocks. Follow the user prompt's phase-specific length target; finish every section without padding, code fences, or transcript replay.";
3
- export interface CompactionPromptParts {
4
- visualTranscript?: string | undefined;
5
- messageTranscript: string;
6
- durableState?: string | undefined;
7
- purpose?: "default" | "plan-implement" | undefined;
8
- recencyAnchors?: string | undefined;
9
- instructionAnchors?: string | undefined;
10
- workHistoryAnchors?: string | undefined;
11
- }
12
- export declare function buildCompactionUserPrompt(parts: CompactionPromptParts): string;
13
- export declare function buildDirectCompactionPrompt(input: {
14
- readonly durableState?: string | undefined;
15
- readonly purpose?: "default" | "plan-implement" | undefined;
16
- readonly messages?: readonly ChatMessage[] | undefined;
17
- readonly workHistoryAnchors?: string | undefined;
18
- }): string;
1
+ import type { ProviderId } from "../types.js";
2
+ export { buildCompactionChunkPrompt, buildCompactionReducePrompt, buildCompactionRetryPrompt, buildCompactionUserPrompt, buildDirectCompactionPrompt, compactionSituation, COMPACTION_SYSTEM_PROMPT, type CompactionPromptInput, type CompactionPurpose, type CompactionRetryReason, type CompactionSituation, type CompactionSource, } from "./compaction/compaction-prompt.js";
19
3
  export declare const COMPACTION_TRANSCRIPT_CHAR_BUDGET = 48000;
20
4
  export declare const COMPACTION_MAX_COMPLETION_TOKENS = 12288;
21
5
  export declare const COMPACTION_INPUT_SAFETY_TOKENS = 4096;
@@ -25,20 +9,6 @@ export declare const COMPACTION_MAP_MAX_COMPLETION_TOKENS = 16384;
25
9
  export declare const COMPACTION_CHUNK_CHAR_BUDGET = 64000;
26
10
  export declare const MAX_COMPACTION_CHUNKS = 8;
27
11
  export declare function chunkTranscriptForCompaction(transcript: string, chunkChars?: number, maxChunks?: number): string[];
28
- export declare function buildCompactionChunkPrompt(input: {
29
- readonly chunk: string;
30
- readonly index: number;
31
- readonly total: number;
32
- readonly purpose?: "default" | "plan-implement" | undefined;
33
- }): string;
34
- export declare function buildCompactionReducePrompt(input: {
35
- readonly partials: readonly string[];
36
- readonly durableState?: string | undefined;
37
- readonly purpose?: "default" | "plan-implement" | undefined;
38
- readonly recencyAnchors?: string | undefined;
39
- readonly instructionAnchors?: string | undefined;
40
- readonly workHistoryAnchors?: string | undefined;
41
- }): string;
42
12
  export declare function trimTranscriptForCompaction(transcript: string, budget?: number): string;
43
13
  export declare function normalizeCompactionSummary(summary: string): string;
44
14
  export declare function looksLikeIncompleteCompactionSummary(summary: string): boolean;
@@ -48,5 +18,4 @@ export declare function isCompactionCompletionTruncated(response: {
48
18
  completionTokens?: number | undefined;
49
19
  } | undefined;
50
20
  }, maxTokens: number): boolean;
51
- export declare function buildCompactionRetryPrompt(prompt: string, reason: "truncated" | "incomplete" | "reasoning-only" | "replayed"): string;
52
21
  export declare function looksLikeTranscriptReplay(summary: string): boolean;
@@ -1,76 +1,7 @@
1
1
  import { stripReasoningMarkers } from "../llm/reasoning-marker.js";
2
2
  import { requestTokenCalibration } from "../llm/token-estimate-calibration.js";
3
- import { compactionRecencyAnchors } from "./context/compaction-recent-history.js";
4
- import { collectWorkHistory, compactionWorkHistoryAnchors } from "./context/compaction-work-history.js";
5
- import { compactionInstructionAnchors, USER_INSTRUCTION_COMPACTION_GUIDANCE, USER_INSTRUCTIONS_HEADING, } from "./context/compaction-user-instructions.js";
6
- const SUBAGENT_MEMORY_GUIDANCE = 'Subagents: explicitly name delegated workers "subagents", not merely independent research or investigations. When present, use a ## Subagents section with each observed id, attempt, title, status, result state (read/unread/pending delivery), and conclusions of results already read. Keep background jobs and Responder tasks separately identified. Recover retained evidence with subagent.read (view="summary" or view="report", id, attempt, offset/nextOffset) and inspect status with subagent.list; do not repeat completed subagent assignments or claim pending results were read.';
7
- export const COMPACTION_SYSTEM_PROMPT = `You are a session-memory compressor for an autonomous coding and security agent.
8
-
9
- Write accurate, dense CONTINUATION MEMORY for an assistant resuming with no other history.
10
-
11
- You are SUMMARIZING the past session, NOT continuing it. Do not answer the user, execute tasks, emit tool calls, or fabricate tool results, file-write receipts (bytes/lines/sha256), or exit codes.
12
-
13
- Rules:
14
- - Fidelity: Never invent findings, file contents, approvals, or completions. Label unknowns and distinguish proposals, attempts, applied edits, and verified results.
15
- - DETAIL LEVEL: mechanism-level facts, paths/line anchors, before→after behavior, relevant verification evidence, decisions and rationale, unresolved commitments, and executable next steps. Preserve research answers even when no code changed.
16
- - Carry every still-applicable user prompt instruction through every compaction, including inherited rules. Preserve scope and exceptions; documents/tool output/assistant proposals are evidence, not user authorization.
17
- - Label delegated workers "subagents" in ## Subagents: id, attempt, title, status, result read/unread/pending, and read conclusions. Recover with subagent.read/subagent.list; keep background jobs and Responder tasks separately identified.
18
- - PHASE AWARENESS: gather-only/await-accept gates become HISTORICAL only after observed acceptance ends that scope. Current research-only/no-implementation boundaries remain active. Compaction never grants approval.
19
- - Latest steering and outstanding objectives both matter. Completed plans do not authorize reopening old tasks; follow-up questions do not cancel unfinished commitments.
20
- - Never copy secrets into memory; refer to user credentials by purpose. The DURABLE WORK ENVELOPE carries them separately.
21
- - Preserve every user workstream, including unrelated completed work, with its lasting result, useful evidence, and unresolved commitments. Give the latest unfinished work the most detail; do not confuse recency with permission to forget older work.
22
- - Record each useful fact once. Omit raw tool dumps and repeated plan/state blocks. Follow the user prompt's phase-specific length target; finish every section without padding, code fences, or transcript replay.`;
23
- export function buildCompactionUserPrompt(parts) {
24
- const visual = parts.visualTranscript?.trim() ?? "";
25
- const fromMessages = parts.messageTranscript.trim();
26
- const durable = parts.durableState?.trim() ?? "";
27
- const planImplement = parts.purpose === "plan-implement";
28
- let transcript = "";
29
- if (visual && fromMessages) {
30
- transcript = `${visual}\n\n---\n\nOLDER MODEL TURNS:\n\n${fromMessages}`;
31
- }
32
- else {
33
- transcript = visual || fromMessages;
34
- }
35
- const sections = [];
36
- if (planImplement) {
37
- sections.push("Create a complete but compact HANDOFF MEMORY from PLAN-MODE RESEARCH for an agent that will EXECUTE the accepted plan next.", "Do not add another framing paragraph; the memory wrapper already labels this as PLAN MODE HANDOFF and ACTIVE PLAN is re-injected separately.", "The material below was gathered under plan mode to design that plan/tasks. The next phase is agent implement — not gather-only.", "The live ACTIVE PLAN (goal/detail/tasks) will be re-injected separately — your job is ACTIONABLE research memory so implement does not re-discover or miss coverage.", "", "Use these section headings as applicable. For coding/general work, omit empty security-only sections instead of writing repeated `none` bullets; for pentest handoffs retain the coverage/finding sections:", "## User goals", USER_INSTRUCTIONS_HEADING, "## Research evidence (facts from plan-mode tools)", "## Coverage ledger (do not blindly re-do)", "## Confirmed findings", "## Negative / tested-OK results", "## Untested / open classes", "## Artifacts & paths", "## Durable engagement rules (still apply in agent mode)", "## Plan-mode-only notes (historical — not current agent gates)", "## Commands/tools and key results", "## Current state", "## Remaining work (post-accept tasks)", "## Open risks / failures", "", "How to fill sections (agent-performance critical):", "- DEDUPLICATE: state each fact once in the best section. Do not repeat destination/tool versions/config contents under evidence, findings, commands, and current state.", "- For coding handoffs, target ~600–1000 tokens. Security handoffs may use the full 800–1500 only when needed to preserve findings/coverage.", "- Research evidence: concrete verified facts only — project state/stack/config for coding; hosts/IPs, ports, stack fingerprint, auth surfaces, headers, endpoints, versions for security. Complete every bullet.", "- Coverage ledger: expensive/stable research already done so execution deepens rather than restarts. This does NOT forbid one concise revalidation of mutable workspace/manifest/tool state after handoff.", "- Confirmed findings: each as severity + one-line evidence + impact/repro if known (F1, F2, … or short titles). If none yet, say so.", "- Negative / tested-OK: things checked and not issues (SSRF guard, CORS locked, etc.) so implement does not re-burn steps.", "- Untested / open classes: authz/IDOR, RBAC, payment, injection, etc. still open — especially anything blocked on credentials.", "- Artifacts & paths: include only reusable artifacts the implementer may need (reports, downloads, extracted specs, scan outputs). Omit routine local inspection receipt paths and transient temp logs whose result is already summarized.", "- Durable engagement rules ONLY if they still bind implement (remote target/scope, authorized testing, non-destructive default, do not treat clai workspace as the target, no local dev server for remote assessments).", "- Plan-mode-only notes: gather-only / await-accept / no-exploit-yet gates that applied BEFORE accept — label historical; implementer is past that phase.", `- ${SUBAGENT_MEMORY_GUIDANCE}`, "- Commands/tools: only non-obvious or reusable commands and their outcomes. Do not repeat routine list/read/tool-version facts already captured above.", "- Current state: describe the last tool-observed state at compaction time. Do not claim plan acceptance/approval unless DURABLE STATE confirms it; distinguish transition assumptions from evidence.", "- Remaining work: ACTIVE PLAN is injected separately, so do not restate every task. Record only the next task, dependency/order caveats, blockers, or plan details not present in durable state.", "- Resolve contradictions explicitly (for example, a non-empty destination is not simultaneously guaranteed safe for an in-place scaffolder). If evidence conflicts, preserve the uncertainty and safest next check.", "- Do NOT invent findings. Do NOT omit confirmed issues that appear in the material. Prefer denser bullets over long prose.", "- Prefer COMPLETE short memory over a long memory that cuts off mid-sentence.");
38
- }
39
- else {
40
- sections.push("Create a complete but compact continuation memory. Treat resumed history and newer turns as one continuous session. Summarize; never answer the user, continue work, invent results, or emit tool calls/transcript receipts.", "Open with a single ORIENTATION line about the LATEST user topic and its status (answered / in progress / blocked). Derive it from the newest conversation, not the goal of an older completed plan or prior compacted memory.", "For research-only or explanatory questions, preserve the actual answers, findings, code paths, evidence, and caveats. An answered question does not authorize implementation or resuming unrelated fixes.", "Earlier compacted memories are historical, fallible summaries. Resolve their claims against newer messages and verified state; never promote a speculative interpretation of an old approval into a current task.", "", "Organize under these exact section headings (skip a section only if empty):", "## Latest conversation", "## User goals", USER_INSTRUCTIONS_HEADING, "## Key facts and environment", "## Decisions and constraints", "## Work completed", "## In flight / blocked", "## Commands/tools and results", "## Current state", "## Remaining work", "## Relevant files", "## Open risks / failures", "", "Write for a reader with zero prior context:", "- Latest conversation: recent topics, actual answers/findings, evidence, caveats, and unresolved questions, including research with no code changes.", "- Goals/constraints: intent, hard limits, requested execution boundary, roadmap/plan/task/index paths, decisions and their rationale/source. Preserve the outstanding objective alongside latest steering; side questions do not cancel unfinished commitments.", "- Facts/work completed: mechanism-level specificity, API/data shapes, environment/stack/package manager, absolute paths/line anchors, before→after behavior, reusable artifacts, and user-supplied nonsecret values. Older finished work needs only its lasting result and useful evidence.", "- In flight/remaining: unfinished commitments, dependencies/blockers, next concrete action and verification. Distinguish proposals, attempted/cancelled operations, applied edits, verified results, commits, and published changes. Cancelled edits may have partially applied; record uncertainty and the next check. Prior tests verify only the state tested. Do not infer tasks from research questions.", "- Current state/risks: dirty worktree, jobs/ids/PIDs/ports, last observations, informative failures and causes. Keep recoverable evidence references; omit routine file/command inventories and superseded debugging detail.", `- ${SUBAGENT_MEMORY_GUIDANCE}`, "- Background jobs/Responder tasks: ids, titles, parent/task ids, status and read conclusions. RESPONDER RESULT LEDGER consumed/analyzed state is authoritative; never describe consumed=true entries as unread. Unread results remain pending.", "- DEDUPLICATE: each fact once. Fresh ACTIVE PLAN, SESSION STATE and ENGAGEMENT SCOPE are re-injected; omit their full plans/tasks and routine receipts. Do NOT reproduce long user prompts verbatim.", "- Do not write a Last 3 user prompts section; the application appends it from the actual user messages after generating the memory.", "", "PHASE AWARENESS under Decisions and constraints:", "- Gather-only / await-accept / no-implement gates are historical after plan acceptance; standing engagement policy and current research-only scope still apply.");
41
- }
42
- sections.push("", USER_INSTRUCTION_COMPACTION_GUIDANCE, "", "WORKSTREAM COVERAGE (correctness-critical):", "- Cover every user workstream, oldest to newest, including unrelated completed topics and earlier unfinished commitments. Preserve each lasting result or actual answer, observed verification, important paths, and status; do not invent completion from a response or a tool request.", "- The application appends a bounded Session work history (preserved) ledger. Do not reproduce that section; add mechanism-level context and unresolved dependencies that its excerpts cannot express, with the most detail for the latest unfinished work.", "", "RECENCY (correctness-critical):", "- Read to the END, including the latest tool call and answer. Record the LATEST observed state; choices reverted, replaced, or abandoned are superseded, with reasons.", "- NEVER list completed work under Remaining work or In flight. Retain genuine outstanding commitments; omit speculative to-dos and ambiguous old approvals. Say explicitly when nothing remains.", "- DURABLE STATE controls recorded plan/task/job/result statuses. A completed plan does not determine the current conversation topic or override newer research-only scope.");
43
- const target = [
44
- planImplement
45
- ? "Target ~600–1000 tokens for coding handoffs, ~800–1500 when security findings/coverage require it."
46
- : "Target ~800–1800 tokens for ordinary continuation memory; use up to ~3600 for complex sessions when consequential context requires it.",
47
- "Preserve applicable user instructions and unfinished commitments first. Use only nonempty sections, state each fact once, and reference recoverable detailed evidence instead of copying it. Finish every bullet and section; end on a complete sentence. No secret values, fabricated successes, raw pseudo-tool syntax, or full tool dumps.",
48
- ].join(" ");
49
- sections.push(target);
50
- if (durable) {
51
- sections.push("", "DURABLE STATE (authoritative for recorded statuses; current topic comes from the latest conversation):", durable);
52
- }
53
- if (parts.instructionAnchors)
54
- sections.push("", parts.instructionAnchors);
55
- if (parts.workHistoryAnchors)
56
- sections.push("", "WORKSTREAM EVIDENCE (historical excerpts; reconcile against newer observations):", parts.workHistoryAnchors);
57
- sections.push("", "SESSION MATERIAL:", "", transcript);
58
- if (parts.recencyAnchors)
59
- sections.push("", parts.recencyAnchors);
60
- return sections.join("\n");
61
- }
62
- export function buildDirectCompactionPrompt(input) {
63
- const workHistoryAnchors = input.workHistoryAnchors ??
64
- (input.messages ? compactionWorkHistoryAnchors(collectWorkHistory(input.messages)) : "");
65
- return buildCompactionUserPrompt({
66
- messageTranscript: "The session material is the entire conversation above this instruction, up to and including the most recent turn. Summarize all of it; do not treat this instruction as session content.",
67
- ...(input.durableState ? { durableState: input.durableState } : {}),
68
- ...(input.purpose ? { purpose: input.purpose } : {}),
69
- ...(input.messages ? { recencyAnchors: compactionRecencyAnchors(input.messages) } : {}),
70
- ...(input.messages ? { instructionAnchors: compactionInstructionAnchors(input.messages) } : {}),
71
- workHistoryAnchors,
72
- });
73
- }
3
+ import { DSML_ANY_RE } from "./parser/dsml.js";
4
+ export { buildCompactionChunkPrompt, buildCompactionReducePrompt, buildCompactionRetryPrompt, buildCompactionUserPrompt, buildDirectCompactionPrompt, compactionSituation, COMPACTION_SYSTEM_PROMPT, } from "./compaction/compaction-prompt.js";
74
5
  export const COMPACTION_TRANSCRIPT_CHAR_BUDGET = 48_000;
75
6
  export const COMPACTION_MAX_COMPLETION_TOKENS = 12_288;
76
7
  export const COMPACTION_INPUT_SAFETY_TOKENS = 4_096;
@@ -117,37 +48,6 @@ export function chunkTranscriptForCompaction(transcript, chunkChars = COMPACTION
117
48
  }
118
49
  return chunks.map((chunk) => chunk.trim()).filter((chunk) => chunk.length > 0);
119
50
  }
120
- export function buildCompactionChunkPrompt(input) {
121
- const focus = input.purpose === "plan-implement"
122
- ? "Preserve targets, stack, confirmed findings, negative results, untested classes, artifact paths, commands and remaining work."
123
- : "Preserve goals, decisions, file paths with line anchors, before→after behavior of each change, verification evidence, environment quirks, commands and their results, task states, failures (with causes), running jobs and remaining work.";
124
- return [
125
- `Summarize region ${input.index + 1} of ${input.total} of one continuous session.`,
126
- "This is a partial region: do not write an orientation line, do not speculate about regions you cannot see, and do not answer the user.",
127
- focus,
128
- USER_INSTRUCTION_COMPACTION_GUIDANCE,
129
- "This region is partial: preserve inherited IDs and instruction changes with exact source quotes. Use unnumbered bullets for new rules; the final pass assigns globally unique IDs and reconciles scope/state. Do not retire a rule or mark the overall task complete based on missing evidence in other regions.",
130
- SUBAGENT_MEMORY_GUIDANCE,
131
- "Dense fact bullets only, at mechanism level. Transform the material into findings; never copy transcript lines, headings, tool-call JSON, file-write receipts, or long output verbatim. Preserve completed work, negative results, decisions, paths, commands, blockers, and remaining work so they are not repeated after resume.",
132
- "",
133
- "SESSION MATERIAL (REGION):",
134
- "",
135
- input.chunk,
136
- ].join("\n");
137
- }
138
- export function buildCompactionReducePrompt(input) {
139
- const merged = input.partials
140
- .map((part, index) => `REGION ${index + 1}:\n${part}`)
141
- .join("\n\n");
142
- return buildCompactionUserPrompt({
143
- messageTranscript: `Merge regions chronologically as one session. Reconcile repeated inherited instruction IDs against newer quoted corrections; assign distinct IDs to new rules. Preserve final observed state and unresolved commitments.\n\n${merged}`,
144
- ...(input.durableState ? { durableState: input.durableState } : {}),
145
- ...(input.purpose ? { purpose: input.purpose } : {}),
146
- ...(input.recencyAnchors ? { recencyAnchors: input.recencyAnchors } : {}),
147
- ...(input.instructionAnchors ? { instructionAnchors: input.instructionAnchors } : {}),
148
- ...(input.workHistoryAnchors ? { workHistoryAnchors: input.workHistoryAnchors } : {}),
149
- });
150
- }
151
51
  export function trimTranscriptForCompaction(transcript, budget = COMPACTION_TRANSCRIPT_CHAR_BUDGET) {
152
52
  if (transcript.length <= budget)
153
53
  return transcript;
@@ -209,16 +109,6 @@ export function isCompactionCompletionTruncated(response, maxTokens) {
209
109
  const used = response.usage?.completionTokens;
210
110
  return typeof used === "number" && used >= Math.max(1, maxTokens - 32);
211
111
  }
212
- export function buildCompactionRetryPrompt(prompt, reason) {
213
- const issue = reason === "truncated"
214
- ? "The previous draft hit its output limit."
215
- : reason === "reasoning-only"
216
- ? "The previous draft contained no visible memory."
217
- : reason === "replayed"
218
- ? "The previous draft replayed source transcript or raw pseudo-tool syntax."
219
- : "The previous draft ended abruptly or was structurally incomplete.";
220
- return `${prompt}\n\nQUALITY RETRY: ${issue} Rewrite the entire continuation memory from the source, not a continuation of the failed draft. Preserve all consequential facts once, use dense bullets, stay within the requested target, finish every section and bullet, and end on a complete sentence.`;
221
- }
222
112
  export function looksLikeTranscriptReplay(summary) {
223
113
  const hardMarkers = [
224
114
  /sha256_12\s*=/i,
@@ -228,7 +118,7 @@ export function looksLikeTranscriptReplay(summary) {
228
118
  /[\ue000\ue001]/,
229
119
  /<\|tool_(?:calls_section|call|call_argument)_(?:begin|end)\|>/i,
230
120
  /<[||]+tool[_▁](?:calls?[_▁](?:begin|end)|sep)[||]+>/i,
231
- /<[||]+DSML[||]+(?:tool_calls|invoke|parameter)\b/i,
121
+ DSML_ANY_RE,
232
122
  /<[||]+(?:open|close|sep)[||]+>/i,
233
123
  /\bbytes\s*=\s*\d+\s+lines\s*=\s*\d+/i,
234
124
  ];