@prometheus-ai/agent 0.5.3 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1160) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/cli.js +25110 -0
  3. package/dist/types/async/index.d.ts +0 -1
  4. package/dist/types/async/job-manager.d.ts +33 -0
  5. package/dist/types/autolearn/controller.d.ts +25 -0
  6. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  7. package/dist/types/autoresearch/state.d.ts +1 -1
  8. package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
  9. package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
  10. package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
  11. package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
  12. package/dist/types/autoresearch/types.d.ts +1 -1
  13. package/dist/types/capability/context-file.d.ts +0 -13
  14. package/dist/types/capability/mcp.d.ts +1 -0
  15. package/dist/types/capability/rule-buckets.d.ts +1 -1
  16. package/dist/types/capability/rule.d.ts +6 -1
  17. package/dist/types/capability/types.d.ts +0 -4
  18. package/dist/types/cli/args.d.ts +23 -3
  19. package/dist/types/cli/bench-cli.d.ts +78 -0
  20. package/dist/types/cli/claude-trace-cli.d.ts +7 -0
  21. package/dist/types/cli/dry-balance-cli.d.ts +16 -2
  22. package/dist/types/cli/gallery-cli.d.ts +43 -0
  23. package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
  24. package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
  25. package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
  26. package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
  27. package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
  28. package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
  29. package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
  30. package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
  31. package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
  32. package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
  33. package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
  34. package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
  35. package/dist/types/cli/gallery-screenshot.d.ts +35 -0
  36. package/dist/types/cli/gateway-cli.d.ts +4 -0
  37. package/dist/types/cli/grievances-cli.d.ts +1 -1
  38. package/dist/types/cli/list-models.d.ts +6 -14
  39. package/dist/types/cli/models-cli.d.ts +49 -0
  40. package/dist/types/cli/session-picker.d.ts +1 -1
  41. package/dist/types/cli/setup-cli.d.ts +1 -1
  42. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  43. package/dist/types/cli/startup-cwd.d.ts +2 -0
  44. package/dist/types/cli/update-cli.d.ts +13 -40
  45. package/dist/types/cli/usage-cli.d.ts +81 -0
  46. package/dist/types/cli-commands.d.ts +12 -0
  47. package/dist/types/collab/crypto.d.ts +7 -0
  48. package/dist/types/collab/guest.d.ts +37 -0
  49. package/dist/types/collab/host.d.ts +29 -0
  50. package/dist/types/collab/protocol.d.ts +119 -0
  51. package/dist/types/collab/relay-client.d.ts +22 -0
  52. package/dist/types/commands/bench.d.ts +29 -0
  53. package/dist/types/commands/gallery.d.ts +47 -0
  54. package/dist/types/commands/gateway.d.ts +3 -0
  55. package/dist/types/commands/install.d.ts +1 -1
  56. package/dist/types/commands/join.d.ts +12 -0
  57. package/dist/types/commands/launch.d.ts +8 -4
  58. package/dist/types/commands/models.d.ts +33 -0
  59. package/dist/types/commands/read.d.ts +1 -1
  60. package/dist/types/commands/say.d.ts +24 -0
  61. package/dist/types/commands/token.d.ts +25 -0
  62. package/dist/types/commands/usage.d.ts +34 -0
  63. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  64. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  65. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  66. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  67. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  68. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  69. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  70. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  71. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  72. package/dist/types/commit/analysis/conventional.d.ts +2 -2
  73. package/dist/types/commit/analysis/summary.d.ts +2 -2
  74. package/dist/types/commit/changelog/generate.d.ts +3 -3
  75. package/dist/types/commit/changelog/index.d.ts +2 -2
  76. package/dist/types/commit/map-reduce/index.d.ts +3 -3
  77. package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
  78. package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
  79. package/dist/types/commit/model-selection.d.ts +10 -4
  80. package/dist/types/commit/shared-llm.d.ts +1 -1
  81. package/dist/types/config/api-key-resolver.d.ts +43 -0
  82. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  83. package/dist/types/config/keybindings.d.ts +12 -7
  84. package/dist/types/config/model-discovery.d.ts +57 -0
  85. package/dist/types/config/model-equivalence.d.ts +1 -1
  86. package/dist/types/config/model-registry.d.ts +86 -222
  87. package/dist/types/config/model-resolver.d.ts +43 -12
  88. package/dist/types/config/model-roles.d.ts +29 -0
  89. package/dist/types/config/models-config-schema.d.ts +536 -43
  90. package/dist/types/config/models-config.d.ts +391 -0
  91. package/dist/types/config/settings-schema.d.ts +1211 -324
  92. package/dist/types/config/settings.d.ts +15 -3
  93. package/dist/types/dap/config.d.ts +14 -1
  94. package/dist/types/dap/types.d.ts +10 -0
  95. package/dist/types/debug/log-viewer.d.ts +1 -1
  96. package/dist/types/debug/raw-sse.d.ts +1 -1
  97. package/dist/types/debug/report-bundle.d.ts +3 -0
  98. package/dist/types/debug/terminal-info.d.ts +0 -1
  99. package/dist/types/discovery/at-imports.d.ts +15 -0
  100. package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
  101. package/dist/types/edit/diff.d.ts +3 -2
  102. package/dist/types/edit/file-snapshot-store.d.ts +18 -0
  103. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  104. package/dist/types/edit/hashline/params.d.ts +1 -1
  105. package/dist/types/edit/index.d.ts +0 -1
  106. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  107. package/dist/types/edit/modes/patch.d.ts +1 -1
  108. package/dist/types/edit/modes/replace.d.ts +1 -1
  109. package/dist/types/edit/renderer.d.ts +1 -0
  110. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  111. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  112. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  113. package/dist/types/eval/backend.d.ts +7 -2
  114. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  115. package/dist/types/eval/completion-bridge.d.ts +25 -0
  116. package/dist/types/eval/idle-timeout.d.ts +1 -5
  117. package/dist/types/eval/js/context-manager.d.ts +1 -0
  118. package/dist/types/eval/js/executor.d.ts +2 -0
  119. package/dist/types/eval/js/index.d.ts +1 -1
  120. package/dist/types/eval/js/shared/helpers.d.ts +7 -1
  121. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  122. package/dist/types/eval/js/shared/runtime.d.ts +6 -1
  123. package/dist/types/eval/js/worker-protocol.d.ts +6 -0
  124. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  125. package/dist/types/eval/py/executor.d.ts +12 -0
  126. package/dist/types/eval/py/index.d.ts +1 -1
  127. package/dist/types/eval/py/kernel.d.ts +6 -1
  128. package/dist/types/eval/py/runtime.d.ts +9 -0
  129. package/dist/types/exa/index.d.ts +1 -19
  130. package/dist/types/exa/mcp-client.d.ts +10 -3
  131. package/dist/types/exa/types.d.ts +0 -83
  132. package/dist/types/exec/bash-executor.d.ts +7 -0
  133. package/dist/types/export/custom-share.d.ts +1 -2
  134. package/dist/types/export/html/index.d.ts +39 -0
  135. package/dist/types/export/html/template-js.d.ts +2 -0
  136. package/dist/types/export/share.d.ts +61 -0
  137. package/dist/types/export/ttsr.d.ts +14 -0
  138. package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
  139. package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
  140. package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
  141. package/dist/types/extensibility/extensions/index.d.ts +1 -1
  142. package/dist/types/extensibility/extensions/loader.d.ts +20 -1
  143. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  144. package/dist/types/extensibility/extensions/runner.d.ts +5 -2
  145. package/dist/types/extensibility/extensions/types.d.ts +72 -11
  146. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  147. package/dist/types/extensibility/hooks/loader.d.ts +1 -1
  148. package/dist/types/extensibility/hooks/types.d.ts +11 -5
  149. package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
  150. package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
  151. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  152. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  153. package/dist/types/extensibility/plugins/types.d.ts +2 -2
  154. package/dist/types/extensibility/shared-events.d.ts +3 -3
  155. package/dist/types/extensibility/skills.d.ts +10 -0
  156. package/dist/types/extensibility/slash-commands.d.ts +1 -11
  157. package/dist/types/gateway/adapters/telegram/access.d.ts +4 -1
  158. package/dist/types/gateway/adapters/telegram/setup-api.d.ts +1 -1
  159. package/dist/types/gateway/adapters/telegram/webhook.d.ts +1 -1
  160. package/dist/types/gateway/types.d.ts +1 -1
  161. package/dist/types/goals/guided-setup.d.ts +18 -0
  162. package/dist/types/goals/state.d.ts +1 -1
  163. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  164. package/dist/types/hindsight/mental-models.d.ts +17 -8
  165. package/dist/types/hindsight/transcript.d.ts +1 -1
  166. package/dist/types/index.d.ts +5 -0
  167. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  168. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  169. package/dist/types/internal-urls/index.d.ts +1 -0
  170. package/dist/types/internal-urls/local-protocol.d.ts +14 -2
  171. package/dist/types/internal-urls/types.d.ts +1 -1
  172. package/dist/types/irc/bus.d.ts +79 -0
  173. package/dist/types/lib/xai-http.d.ts +1 -1
  174. package/dist/types/lsp/client.d.ts +10 -0
  175. package/dist/types/lsp/config.d.ts +2 -2
  176. package/dist/types/lsp/edits.d.ts +9 -0
  177. package/dist/types/lsp/format-options.d.ts +32 -0
  178. package/dist/types/lsp/index.d.ts +2 -7
  179. package/dist/types/lsp/types.d.ts +13 -1
  180. package/dist/types/lsp/utils.d.ts +6 -2
  181. package/dist/types/main.d.ts +23 -8
  182. package/dist/types/mcp/json-rpc.d.ts +5 -0
  183. package/dist/types/mcp/manager.d.ts +8 -0
  184. package/dist/types/mcp/oauth-discovery.d.ts +6 -1
  185. package/dist/types/mcp/oauth-flow.d.ts +13 -3
  186. package/dist/types/mcp/startup-events.d.ts +11 -0
  187. package/dist/types/mcp/tool-bridge.d.ts +2 -0
  188. package/dist/types/mcp/transports/stdio.d.ts +13 -0
  189. package/dist/types/mcp/types.d.ts +2 -0
  190. package/dist/types/memories/index.d.ts +7 -15
  191. package/dist/types/memories/storage.d.ts +0 -10
  192. package/dist/types/memory-backend/index.d.ts +3 -1
  193. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  194. package/dist/types/memory-backend/resolve.d.ts +2 -2
  195. package/dist/types/memory-backend/runtime.d.ts +4 -0
  196. package/dist/types/memory-backend/types.d.ts +67 -2
  197. package/dist/types/mnemopi/config.d.ts +31 -1
  198. package/dist/types/mnemopi/state.d.ts +40 -2
  199. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  200. package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
  201. package/dist/types/modes/components/agent-hub.d.ts +82 -0
  202. package/dist/types/modes/components/assistant-message.d.ts +5 -12
  203. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  204. package/dist/types/modes/components/chat-block.d.ts +64 -0
  205. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  206. package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
  207. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  208. package/dist/types/modes/components/custom-editor.d.ts +49 -2
  209. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  210. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  211. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  212. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  213. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  214. package/dist/types/modes/components/footer.d.ts +1 -1
  215. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  216. package/dist/types/modes/components/hook-input.d.ts +4 -0
  217. package/dist/types/modes/components/hook-selector.d.ts +5 -7
  218. package/dist/types/modes/components/index.d.ts +1 -0
  219. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  220. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  221. package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
  222. package/dist/types/modes/components/model-selector.d.ts +1 -1
  223. package/dist/types/modes/components/oauth-selector.d.ts +10 -1
  224. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  225. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  226. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  227. package/dist/types/modes/components/read-tool-group.d.ts +8 -0
  228. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  229. package/dist/types/modes/components/segment-track.d.ts +11 -6
  230. package/dist/types/modes/components/session-selector.d.ts +18 -9
  231. package/dist/types/modes/components/settings-defs.d.ts +9 -2
  232. package/dist/types/modes/components/settings-selector.d.ts +17 -4
  233. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  234. package/dist/types/modes/components/status-line/component.d.ts +61 -0
  235. package/dist/types/modes/components/status-line/index.d.ts +1 -0
  236. package/dist/types/modes/components/status-line/types.d.ts +47 -3
  237. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  238. package/dist/types/modes/components/tool-execution.d.ts +49 -2
  239. package/dist/types/modes/components/transcript-container.d.ts +76 -26
  240. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  241. package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
  242. package/dist/types/modes/components/usage-row.d.ts +3 -0
  243. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  244. package/dist/types/modes/components/user-message.d.ts +2 -1
  245. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  246. package/dist/types/modes/components/welcome.d.ts +12 -2
  247. package/dist/types/modes/controllers/command-controller.d.ts +3 -2
  248. package/dist/types/modes/controllers/event-controller.d.ts +7 -1
  249. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
  250. package/dist/types/modes/controllers/input-controller.d.ts +25 -3
  251. package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
  252. package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
  253. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  254. package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
  255. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  256. package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
  257. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  258. package/dist/types/modes/image-references.d.ts +14 -3
  259. package/dist/types/modes/index.d.ts +8 -7
  260. package/dist/types/modes/interactive-mode.d.ts +92 -16
  261. package/dist/types/modes/magic-keywords.d.ts +14 -2
  262. package/dist/types/modes/markdown-prose.d.ts +1 -1
  263. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  264. package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
  265. package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
  266. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  267. package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
  268. package/dist/types/modes/runtime-init.d.ts +4 -0
  269. package/dist/types/modes/session-observer-registry.d.ts +9 -0
  270. package/dist/types/modes/setup-version.d.ts +11 -0
  271. package/dist/types/modes/setup-wizard/index.d.ts +7 -2
  272. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  273. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
  274. package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
  275. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
  276. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  277. package/dist/types/modes/theme/theme.d.ts +42 -7
  278. package/dist/types/modes/types.d.ts +62 -13
  279. package/dist/types/modes/utils/context-usage.d.ts +6 -1
  280. package/dist/types/modes/utils/copy-targets.d.ts +21 -1
  281. package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
  282. package/dist/types/modes/workflow.d.ts +3 -3
  283. package/dist/types/plan-mode/approved-plan.d.ts +27 -8
  284. package/dist/types/plan-mode/plan-protection.d.ts +4 -4
  285. package/dist/types/registry/agent-lifecycle.d.ts +51 -0
  286. package/dist/types/registry/agent-registry.d.ts +33 -5
  287. package/dist/types/sdk.d.ts +46 -4
  288. package/dist/types/secrets/index.d.ts +1 -1
  289. package/dist/types/secrets/obfuscator.d.ts +9 -3
  290. package/dist/types/session/agent-session.d.ts +136 -66
  291. package/dist/types/session/agent-storage.d.ts +2 -1
  292. package/dist/types/session/auth-broker-config.d.ts +4 -0
  293. package/dist/types/session/auth-storage.d.ts +1 -1
  294. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  295. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  296. package/dist/types/session/messages.d.ts +26 -15
  297. package/dist/types/session/session-context.d.ts +39 -0
  298. package/dist/types/session/session-entries.d.ts +159 -0
  299. package/dist/types/session/session-history-format.d.ts +12 -0
  300. package/dist/types/session/session-listing.d.ts +69 -0
  301. package/dist/types/session/session-loader.d.ts +16 -0
  302. package/dist/types/session/session-manager.d.ts +107 -440
  303. package/dist/types/session/session-migrations.d.ts +12 -0
  304. package/dist/types/session/session-paths.d.ts +25 -0
  305. package/dist/types/session/session-persistence.d.ts +8 -0
  306. package/dist/types/session/session-storage.d.ts +11 -7
  307. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  308. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  309. package/dist/types/session/streaming-output.d.ts +46 -0
  310. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  311. package/dist/types/session/yield-queue.d.ts +10 -1
  312. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  313. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  314. package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
  315. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  316. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  317. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  318. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  319. package/dist/types/slash-commands/types.d.ts +5 -9
  320. package/dist/types/ssh/connection-manager.d.ts +8 -0
  321. package/dist/types/stt/asr-client.d.ts +90 -0
  322. package/dist/types/stt/asr-protocol.d.ts +97 -0
  323. package/dist/types/stt/asr-worker.d.ts +2 -0
  324. package/dist/types/stt/downloader.d.ts +38 -0
  325. package/dist/types/stt/endpointer.d.ts +59 -0
  326. package/dist/types/stt/index.d.ts +5 -1
  327. package/dist/types/stt/models.d.ts +120 -0
  328. package/dist/types/stt/recorder.d.ts +17 -0
  329. package/dist/types/stt/stt-controller.d.ts +6 -0
  330. package/dist/types/stt/transcriber.d.ts +5 -7
  331. package/dist/types/stt/wav.d.ts +29 -0
  332. package/dist/types/system-prompt.d.ts +9 -1
  333. package/dist/types/task/commands.d.ts +1 -1
  334. package/dist/types/task/discovery.d.ts +1 -2
  335. package/dist/types/task/executor.d.ts +61 -2
  336. package/dist/types/task/index.d.ts +37 -6
  337. package/dist/types/task/output-manager.d.ts +0 -7
  338. package/dist/types/task/parallel.d.ts +2 -2
  339. package/dist/types/task/prometheus-command.d.ts +2 -2
  340. package/dist/types/task/render.d.ts +20 -7
  341. package/dist/types/task/repair-args.d.ts +8 -7
  342. package/dist/types/task/types.d.ts +109 -52
  343. package/dist/types/task/worktree.d.ts +2 -0
  344. package/dist/types/telemetry-export.d.ts +2 -2
  345. package/dist/types/thinking.d.ts +4 -0
  346. package/dist/types/tiny/models.d.ts +1 -1
  347. package/dist/types/tiny/title-client.d.ts +12 -1
  348. package/dist/types/tiny/title-protocol.d.ts +1 -0
  349. package/dist/types/tools/archive-reader.d.ts +5 -0
  350. package/dist/types/tools/ask.d.ts +6 -1
  351. package/dist/types/tools/ast-edit.d.ts +4 -1
  352. package/dist/types/tools/ast-grep.d.ts +4 -1
  353. package/dist/types/tools/bash.d.ts +5 -2
  354. package/dist/types/tools/browser/attach.d.ts +4 -4
  355. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  356. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  357. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  358. package/dist/types/tools/browser/registry.d.ts +17 -3
  359. package/dist/types/tools/browser/render.d.ts +2 -0
  360. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  361. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  362. package/dist/types/tools/browser/tab-worker.d.ts +18 -1
  363. package/dist/types/tools/browser.d.ts +3 -1
  364. package/dist/types/tools/checkpoint.d.ts +1 -1
  365. package/dist/types/tools/conflict-detect.d.ts +16 -0
  366. package/dist/types/tools/debug.d.ts +1 -1
  367. package/dist/types/tools/eval-render.d.ts +1 -8
  368. package/dist/types/tools/eval.d.ts +9 -1
  369. package/dist/types/tools/fetch.d.ts +17 -8
  370. package/dist/types/tools/find.d.ts +1 -8
  371. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  372. package/dist/types/tools/gh.d.ts +4 -1
  373. package/dist/types/tools/github-cache.d.ts +19 -0
  374. package/dist/types/tools/grouped-file-output.d.ts +46 -12
  375. package/dist/types/tools/image-gen.d.ts +1 -1
  376. package/dist/types/tools/index.d.ts +89 -8
  377. package/dist/types/tools/inspect-image.d.ts +1 -1
  378. package/dist/types/tools/irc.d.ts +79 -39
  379. package/dist/types/tools/job.d.ts +8 -2
  380. package/dist/types/tools/learn.d.ts +51 -0
  381. package/dist/types/tools/manage-skill.d.ts +40 -0
  382. package/dist/types/tools/memory-edit.d.ts +2 -2
  383. package/dist/types/tools/memory-recall.d.ts +1 -1
  384. package/dist/types/tools/memory-reflect.d.ts +1 -1
  385. package/dist/types/tools/memory-render.d.ts +4 -1
  386. package/dist/types/tools/memory-retain.d.ts +1 -1
  387. package/dist/types/tools/path-utils.d.ts +17 -5
  388. package/dist/types/tools/plan-mode-guard.d.ts +18 -9
  389. package/dist/types/tools/read.d.ts +3 -2
  390. package/dist/types/tools/render-mermaid.d.ts +1 -1
  391. package/dist/types/tools/render-utils.d.ts +47 -27
  392. package/dist/types/tools/renderers.d.ts +10 -2
  393. package/dist/types/tools/report-tool-issue.d.ts +6 -1
  394. package/dist/types/tools/resolve.d.ts +1 -1
  395. package/dist/types/tools/review.d.ts +1 -1
  396. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  397. package/dist/types/tools/search.d.ts +7 -3
  398. package/dist/types/tools/sqlite-reader.d.ts +4 -0
  399. package/dist/types/tools/ssh.d.ts +2 -1
  400. package/dist/types/tools/todo.d.ts +7 -15
  401. package/dist/types/tools/tool-result.d.ts +2 -0
  402. package/dist/types/tools/tool-timeouts.d.ts +1 -1
  403. package/dist/types/tools/tts.d.ts +26 -1
  404. package/dist/types/tools/write.d.ts +6 -3
  405. package/dist/types/tools/yield.d.ts +8 -0
  406. package/dist/types/tts/downloader.d.ts +20 -0
  407. package/dist/types/tts/index.d.ts +8 -0
  408. package/dist/types/tts/models.d.ts +82 -0
  409. package/dist/types/tts/player.d.ts +32 -0
  410. package/dist/types/tts/runtime.d.ts +6 -0
  411. package/dist/types/tts/streaming-player.d.ts +41 -0
  412. package/dist/types/tts/tts-client.d.ts +93 -0
  413. package/dist/types/tts/tts-protocol.d.ts +95 -0
  414. package/dist/types/tts/tts-worker.d.ts +2 -0
  415. package/dist/types/tts/vocalizer.d.ts +41 -0
  416. package/dist/types/tts/wav.d.ts +8 -0
  417. package/dist/types/tui/code-cell.d.ts +0 -2
  418. package/dist/types/tui/hyperlink.d.ts +13 -7
  419. package/dist/types/tui/output-block.d.ts +16 -22
  420. package/dist/types/tui/status-line.d.ts +3 -0
  421. package/dist/types/utils/block-context.d.ts +35 -0
  422. package/dist/types/utils/changelog.d.ts +8 -0
  423. package/dist/types/utils/clipboard.d.ts +4 -3
  424. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  425. package/dist/types/utils/file-mentions.d.ts +7 -0
  426. package/dist/types/utils/git.d.ts +22 -3
  427. package/dist/types/utils/image-loading.d.ts +30 -1
  428. package/dist/types/utils/session-color.d.ts +15 -3
  429. package/dist/types/utils/thinking-display.d.ts +17 -0
  430. package/dist/types/utils/title-generator.d.ts +3 -2
  431. package/dist/types/utils/tool-choice.d.ts +8 -0
  432. package/dist/types/utils/tools-manager.d.ts +2 -1
  433. package/dist/types/web/kagi.d.ts +2 -2
  434. package/dist/types/web/parallel.d.ts +3 -0
  435. package/dist/types/web/scrapers/github.d.ts +22 -0
  436. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  437. package/dist/types/web/scrapers/types.d.ts +12 -0
  438. package/dist/types/web/search/index.d.ts +1 -1
  439. package/dist/types/web/search/providers/anthropic.d.ts +2 -1
  440. package/dist/types/web/search/providers/base.d.ts +2 -1
  441. package/dist/types/web/search/providers/brave.d.ts +2 -1
  442. package/dist/types/web/search/providers/codex.d.ts +2 -1
  443. package/dist/types/web/search/providers/exa.d.ts +2 -1
  444. package/dist/types/web/search/providers/gemini.d.ts +10 -6
  445. package/dist/types/web/search/providers/jina.d.ts +7 -2
  446. package/dist/types/web/search/providers/kagi.d.ts +7 -2
  447. package/dist/types/web/search/providers/kimi.d.ts +7 -2
  448. package/dist/types/web/search/providers/parallel.d.ts +2 -1
  449. package/dist/types/web/search/providers/perplexity.d.ts +10 -2
  450. package/dist/types/web/search/providers/searxng.d.ts +2 -1
  451. package/dist/types/web/search/providers/synthetic.d.ts +7 -3
  452. package/dist/types/web/search/providers/tavily.d.ts +2 -1
  453. package/dist/types/web/search/providers/zai.d.ts +2 -1
  454. package/dist/types/web/search/types.d.ts +1 -1
  455. package/examples/extensions/api-demo.ts +2 -2
  456. package/package.json +41 -15
  457. package/scripts/bench-guard.ts +71 -0
  458. package/scripts/build-binary.ts +24 -25
  459. package/scripts/bundle-dist.ts +97 -0
  460. package/scripts/generate-share-viewer.ts +34 -0
  461. package/scripts/prometheus +42 -0
  462. package/scripts/prometheus.ts +20 -0
  463. package/src/async/index.ts +0 -1
  464. package/src/async/job-manager.ts +106 -3
  465. package/src/auto-thinking/classifier.ts +2 -1
  466. package/src/autolearn/controller.ts +139 -0
  467. package/src/autolearn/managed-skills.ts +257 -0
  468. package/src/autoresearch/dashboard.ts +1 -1
  469. package/src/autoresearch/prompt-setup.md +6 -6
  470. package/src/autoresearch/prompt.md +6 -6
  471. package/src/autoresearch/state.ts +1 -1
  472. package/src/autoresearch/storage.ts +2 -1
  473. package/src/autoresearch/tools/init-experiment.ts +1 -1
  474. package/src/autoresearch/tools/log-experiment.ts +1 -1
  475. package/src/autoresearch/tools/run-experiment.ts +1 -1
  476. package/src/autoresearch/tools/update-notes.ts +1 -1
  477. package/src/autoresearch/types.ts +1 -1
  478. package/src/capability/context-file.ts +0 -14
  479. package/src/capability/fs.ts +10 -0
  480. package/src/capability/index.ts +1 -6
  481. package/src/capability/mcp.ts +1 -0
  482. package/src/capability/rule-buckets.ts +4 -2
  483. package/src/capability/rule.ts +10 -1
  484. package/src/capability/types.ts +0 -4
  485. package/src/cli/args.ts +66 -13
  486. package/src/cli/auth-broker-cli.ts +6 -7
  487. package/src/cli/auth-gateway-cli.ts +8 -9
  488. package/src/cli/bench-cli.ts +437 -0
  489. package/src/cli/claude-trace-cli.ts +28 -50
  490. package/src/cli/completion-gen.ts +28 -28
  491. package/src/cli/dry-balance-cli.ts +56 -23
  492. package/src/cli/gallery-cli.ts +231 -0
  493. package/src/cli/gallery-fixtures/agentic.ts +407 -0
  494. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  495. package/src/cli/gallery-fixtures/edit.ts +194 -0
  496. package/src/cli/gallery-fixtures/fs.ts +220 -0
  497. package/src/cli/gallery-fixtures/index.ts +40 -0
  498. package/src/cli/gallery-fixtures/interaction.ts +49 -0
  499. package/src/cli/gallery-fixtures/memory.ts +81 -0
  500. package/src/cli/gallery-fixtures/misc.ts +250 -0
  501. package/src/cli/gallery-fixtures/search.ts +213 -0
  502. package/src/cli/gallery-fixtures/shell.ts +167 -0
  503. package/src/cli/gallery-fixtures/types.ts +57 -0
  504. package/src/cli/gallery-fixtures/web.ts +158 -0
  505. package/src/cli/gallery-screenshot.ts +279 -0
  506. package/src/cli/gateway-cli.ts +32 -2
  507. package/src/cli/grievances-cli.ts +1 -1
  508. package/src/cli/list-models.ts +16 -174
  509. package/src/cli/models-cli.ts +429 -0
  510. package/src/cli/session-picker.ts +2 -1
  511. package/src/cli/setup-cli.ts +148 -47
  512. package/src/cli/setup-model-picker.ts +43 -0
  513. package/src/cli/startup-cwd.ts +68 -0
  514. package/src/cli/update-cli.ts +144 -272
  515. package/src/cli/usage-cli.ts +774 -0
  516. package/src/cli-commands.ts +36 -0
  517. package/src/cli.ts +141 -32
  518. package/src/collab/crypto.ts +63 -0
  519. package/src/collab/guest.ts +451 -0
  520. package/src/collab/host.ts +565 -0
  521. package/src/collab/protocol.ts +241 -0
  522. package/src/collab/relay-client.ts +216 -0
  523. package/src/commands/bench.ts +42 -0
  524. package/src/commands/complete.ts +1 -1
  525. package/src/commands/gallery.ts +52 -0
  526. package/src/commands/gateway.ts +4 -0
  527. package/src/commands/install.ts +1 -1
  528. package/src/commands/join.ts +39 -0
  529. package/src/commands/launch.ts +8 -4
  530. package/src/commands/models.ts +61 -0
  531. package/src/commands/read.ts +6 -3
  532. package/src/commands/say.ts +102 -0
  533. package/src/commands/setup.ts +1 -1
  534. package/src/commands/token.ts +89 -0
  535. package/src/commands/usage.ts +43 -0
  536. package/src/commit/agentic/agent.ts +2 -1
  537. package/src/commit/agentic/tools/analyze-file.ts +42 -20
  538. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  539. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  540. package/src/commit/agentic/tools/git-overview.ts +1 -1
  541. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  542. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  543. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  544. package/src/commit/agentic/tools/schemas.ts +1 -1
  545. package/src/commit/agentic/tools/split-commit.ts +9 -2
  546. package/src/commit/analysis/conventional.ts +2 -2
  547. package/src/commit/analysis/summary.ts +3 -3
  548. package/src/commit/changelog/generate.ts +3 -3
  549. package/src/commit/changelog/index.ts +2 -2
  550. package/src/commit/map-reduce/index.ts +3 -3
  551. package/src/commit/map-reduce/map-phase.ts +2 -2
  552. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  553. package/src/commit/model-selection.ts +35 -12
  554. package/src/commit/pipeline.ts +4 -4
  555. package/src/commit/shared-llm.ts +1 -1
  556. package/src/config/api-key-resolver.ts +67 -0
  557. package/src/config/append-only-context-mode.ts +6 -12
  558. package/src/config/keybindings.ts +9 -4
  559. package/src/config/mcp-schema.json +4 -0
  560. package/src/config/model-discovery.ts +574 -0
  561. package/src/config/model-equivalence.ts +5 -4
  562. package/src/config/model-registry.ts +659 -1093
  563. package/src/config/model-resolver.ts +374 -174
  564. package/src/config/model-roles.ts +88 -0
  565. package/src/config/models-config-schema.ts +61 -9
  566. package/src/config/models-config.ts +130 -0
  567. package/src/config/settings-schema.ts +1445 -382
  568. package/src/config/settings.ts +261 -69
  569. package/src/dap/client.ts +138 -53
  570. package/src/dap/config.ts +41 -2
  571. package/src/dap/defaults.json +1 -0
  572. package/src/dap/session.ts +263 -161
  573. package/src/dap/types.ts +10 -0
  574. package/src/debug/index.ts +50 -60
  575. package/src/debug/log-viewer.ts +1 -1
  576. package/src/debug/protocol-probe.ts +1 -1
  577. package/src/debug/raw-sse-buffer.ts +7 -4
  578. package/src/debug/raw-sse.ts +1 -1
  579. package/src/debug/report-bundle.ts +9 -0
  580. package/src/debug/terminal-info.ts +0 -3
  581. package/src/discovery/agents-md.ts +25 -21
  582. package/src/discovery/agents.ts +9 -15
  583. package/src/discovery/at-imports.ts +273 -0
  584. package/src/discovery/builtin-rules/index.ts +4 -0
  585. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  586. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  587. package/src/discovery/builtin.ts +45 -23
  588. package/src/discovery/claude-plugins.ts +44 -5
  589. package/src/discovery/helpers.ts +50 -9
  590. package/src/discovery/prometheus-extension-roots.ts +10 -10
  591. package/src/discovery/prometheus-plugins.ts +10 -10
  592. package/src/edit/diff.ts +191 -4
  593. package/src/edit/file-snapshot-store.ts +34 -1
  594. package/src/edit/hashline/block-resolver.ts +20 -1
  595. package/src/edit/hashline/diff.ts +123 -2
  596. package/src/edit/hashline/execute.ts +60 -4
  597. package/src/edit/hashline/filesystem.ts +2 -1
  598. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  599. package/src/edit/hashline/params.ts +1 -1
  600. package/src/edit/index.ts +47 -18
  601. package/src/edit/modes/apply-patch.ts +1 -1
  602. package/src/edit/modes/patch.ts +59 -3
  603. package/src/edit/modes/replace.ts +58 -24
  604. package/src/edit/notebook.ts +22 -2
  605. package/src/edit/renderer.ts +315 -151
  606. package/src/eval/__tests__/agent-bridge.test.ts +105 -39
  607. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  608. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  609. package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
  610. package/src/eval/__tests__/js-context-manager.test.ts +241 -0
  611. package/src/eval/__tests__/llm-bridge.test.ts +6 -4
  612. package/src/eval/__tests__/shared-executors.test.ts +34 -92
  613. package/src/eval/agent-bridge.ts +39 -23
  614. package/src/eval/backend.ts +15 -2
  615. package/src/eval/bridge-timeout.ts +1 -1
  616. package/src/eval/completion-bridge.ts +203 -0
  617. package/src/eval/idle-timeout.ts +3 -10
  618. package/src/eval/js/context-manager.ts +108 -31
  619. package/src/eval/js/executor.ts +9 -2
  620. package/src/eval/js/index.ts +7 -3
  621. package/src/eval/js/shared/helpers.ts +59 -13
  622. package/src/eval/js/shared/local-module-loader.ts +2 -2
  623. package/src/eval/js/shared/prelude.txt +167 -30
  624. package/src/eval/js/shared/rewrite-imports.ts +58 -34
  625. package/src/eval/js/shared/runtime.ts +24 -16
  626. package/src/eval/js/tool-bridge.ts +4 -0
  627. package/src/eval/js/worker-core.ts +1 -0
  628. package/src/eval/js/worker-entry.ts +6 -0
  629. package/src/eval/js/worker-protocol.ts +6 -0
  630. package/src/eval/llm-bridge.ts +2 -1
  631. package/src/eval/py/__tests__/prelude.test.ts +19 -0
  632. package/src/eval/py/executor.ts +70 -26
  633. package/src/eval/py/index.ts +13 -4
  634. package/src/eval/py/kernel.ts +48 -9
  635. package/src/eval/py/prelude.py +73 -24
  636. package/src/eval/py/runner.py +133 -28
  637. package/src/eval/py/runtime.ts +38 -1
  638. package/src/exa/index.ts +1 -26
  639. package/src/exa/mcp-client.ts +10 -10
  640. package/src/exa/types.ts +0 -97
  641. package/src/exec/bash-executor.ts +104 -7
  642. package/src/export/custom-share.ts +1 -1
  643. package/src/export/html/index.ts +119 -17
  644. package/src/export/html/share-loader.js +102 -0
  645. package/src/export/html/template-js.ts +6 -0
  646. package/src/export/html/template.css +745 -459
  647. package/src/export/html/template.css.d.ts +2 -0
  648. package/src/export/html/template.html +6 -3
  649. package/src/export/html/template.js +277 -891
  650. package/src/export/html/tool-views.generated.d.ts +2 -0
  651. package/src/export/html/tool-views.generated.js +38 -0
  652. package/src/export/share.ts +269 -0
  653. package/src/export/ttsr.ts +122 -1
  654. package/src/extensibility/custom-commands/loader.ts +7 -4
  655. package/src/extensibility/custom-commands/types.ts +9 -4
  656. package/src/extensibility/custom-tools/loader.ts +51 -23
  657. package/src/extensibility/custom-tools/types.ts +16 -8
  658. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  659. package/src/extensibility/extensions/index.ts +1 -0
  660. package/src/extensibility/extensions/loader.ts +70 -20
  661. package/src/extensibility/extensions/model-api.ts +41 -0
  662. package/src/extensibility/extensions/runner.ts +12 -2
  663. package/src/extensibility/extensions/types.ts +83 -11
  664. package/src/extensibility/extensions/wrapper.ts +41 -5
  665. package/src/extensibility/hooks/index.ts +2 -1
  666. package/src/extensibility/hooks/loader.ts +6 -3
  667. package/src/extensibility/hooks/types.ts +11 -5
  668. package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
  669. package/src/extensibility/plugins/doctor.ts +1 -2
  670. package/src/extensibility/plugins/installer.ts +2 -2
  671. package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
  672. package/src/extensibility/plugins/loader.ts +34 -23
  673. package/src/extensibility/plugins/manager.ts +226 -95
  674. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  675. package/src/extensibility/plugins/types.ts +3 -3
  676. package/src/extensibility/shared-events.ts +3 -3
  677. package/src/extensibility/skills.ts +113 -9
  678. package/src/extensibility/slash-commands.ts +1 -97
  679. package/src/gateway/adapters/telegram/access.ts +39 -4
  680. package/src/gateway/adapters/telegram/normalize.ts +16 -1
  681. package/src/gateway/adapters/telegram/setup-api.ts +7 -1
  682. package/src/gateway/adapters/telegram/webhook.ts +26 -5
  683. package/src/gateway/context.ts +9 -1
  684. package/src/gateway/types.ts +1 -1
  685. package/src/goals/guided-setup.ts +133 -0
  686. package/src/goals/state.ts +1 -1
  687. package/src/goals/tools/goal-tool.ts +38 -28
  688. package/src/hindsight/bank.ts +17 -2
  689. package/src/hindsight/client.ts +27 -2
  690. package/src/hindsight/mental-models.ts +59 -12
  691. package/src/hindsight/state.ts +12 -3
  692. package/src/hindsight/transcript.ts +1 -1
  693. package/src/index.ts +5 -0
  694. package/src/internal-urls/artifact-protocol.ts +11 -2
  695. package/src/internal-urls/docs-index.generated.ts +11 -9
  696. package/src/internal-urls/history-protocol.ts +113 -0
  697. package/src/internal-urls/index.ts +1 -0
  698. package/src/internal-urls/issue-pr-protocol.ts +22 -9
  699. package/src/internal-urls/local-protocol.ts +42 -7
  700. package/src/internal-urls/memory-protocol.ts +4 -31
  701. package/src/internal-urls/router.ts +3 -1
  702. package/src/internal-urls/types.ts +1 -1
  703. package/src/irc/bus.ts +303 -0
  704. package/src/lib/xai-http.ts +3 -3
  705. package/src/lsp/client.ts +245 -104
  706. package/src/lsp/clients/biome-client.ts +101 -39
  707. package/src/lsp/clients/lsp-linter-client.ts +2 -10
  708. package/src/lsp/config.ts +15 -5
  709. package/src/lsp/defaults.json +6 -0
  710. package/src/lsp/edits.ts +143 -95
  711. package/src/lsp/format-options.ts +119 -0
  712. package/src/lsp/index.ts +233 -93
  713. package/src/lsp/render.ts +11 -35
  714. package/src/lsp/types.ts +13 -1
  715. package/src/lsp/utils.ts +31 -12
  716. package/src/main.ts +396 -216
  717. package/src/mcp/config-writer.ts +7 -3
  718. package/src/mcp/json-rpc.ts +35 -5
  719. package/src/mcp/manager.ts +31 -16
  720. package/src/mcp/oauth-discovery.ts +34 -4
  721. package/src/mcp/oauth-flow.ts +61 -8
  722. package/src/mcp/render.ts +7 -1
  723. package/src/mcp/startup-events.ts +21 -0
  724. package/src/mcp/tool-bridge.ts +2 -0
  725. package/src/mcp/transports/stdio.ts +224 -4
  726. package/src/mcp/types.ts +2 -0
  727. package/src/memories/index.ts +174 -1128
  728. package/src/memories/storage.ts +2 -41
  729. package/src/memory-backend/index.ts +14 -1
  730. package/src/memory-backend/local-backend.ts +18 -3
  731. package/src/memory-backend/off-backend.ts +9 -0
  732. package/src/memory-backend/resolve.ts +4 -6
  733. package/src/memory-backend/runtime.ts +66 -0
  734. package/src/memory-backend/types.ts +82 -2
  735. package/src/mnemopi/backend.ts +220 -28
  736. package/src/mnemopi/config.ts +138 -33
  737. package/src/mnemopi/state.ts +91 -11
  738. package/src/modes/acp/acp-agent.ts +149 -142
  739. package/src/modes/acp/acp-event-mapper.ts +5 -1
  740. package/src/modes/components/agent-dashboard.ts +17 -11
  741. package/src/modes/components/agent-hub.ts +1346 -0
  742. package/src/modes/components/assistant-message.ts +190 -80
  743. package/src/modes/components/bash-execution.ts +1 -1
  744. package/src/modes/components/btw-panel.ts +5 -1
  745. package/src/modes/components/chat-block.ts +111 -0
  746. package/src/modes/components/collab-prompt-message.ts +30 -0
  747. package/src/modes/components/compaction-summary-message.ts +168 -33
  748. package/src/modes/components/copy-selector.ts +2 -45
  749. package/src/modes/components/custom-editor.test.ts +96 -0
  750. package/src/modes/components/custom-editor.ts +405 -118
  751. package/src/modes/components/custom-message.ts +1 -3
  752. package/src/modes/components/diff.ts +13 -2
  753. package/src/modes/components/dynamic-border.ts +12 -3
  754. package/src/modes/components/execution-shared.ts +1 -2
  755. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  756. package/src/modes/components/extensions/extension-list.ts +1 -1
  757. package/src/modes/components/extensions/inspector-panel.ts +7 -3
  758. package/src/modes/components/extensions/state-manager.ts +36 -41
  759. package/src/modes/components/footer.ts +4 -2
  760. package/src/modes/components/history-search.ts +1 -1
  761. package/src/modes/components/hook-editor.ts +8 -0
  762. package/src/modes/components/hook-input.ts +8 -0
  763. package/src/modes/components/hook-message.ts +1 -3
  764. package/src/modes/components/hook-selector.ts +6 -7
  765. package/src/modes/components/index.ts +1 -0
  766. package/src/modes/components/late-diagnostics-message.ts +60 -0
  767. package/src/modes/components/login-dialog.ts +1 -1
  768. package/src/modes/components/logout-account-selector.ts +130 -0
  769. package/src/modes/components/mcp-add-wizard.ts +14 -1
  770. package/src/modes/components/model-selector.ts +177 -75
  771. package/src/modes/components/oauth-selector.ts +102 -16
  772. package/src/modes/components/overlay-box.ts +108 -0
  773. package/src/modes/components/plan-review-overlay.ts +845 -0
  774. package/src/modes/components/plan-toc.ts +138 -0
  775. package/src/modes/components/plugin-settings.ts +22 -5
  776. package/src/modes/components/read-tool-group.ts +442 -39
  777. package/src/modes/components/reset-usage-selector.ts +161 -0
  778. package/src/modes/components/segment-track.ts +44 -7
  779. package/src/modes/components/session-selector.ts +97 -37
  780. package/src/modes/components/settings-defs.ts +28 -6
  781. package/src/modes/components/settings-selector.ts +541 -93
  782. package/src/modes/components/skill-message.ts +0 -1
  783. package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
  784. package/src/modes/components/snapcompact-shape-preview.ts +193 -0
  785. package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
  786. package/src/modes/components/status-line/index.ts +1 -0
  787. package/src/modes/components/status-line/presets.ts +3 -3
  788. package/src/modes/components/status-line/segments.ts +26 -7
  789. package/src/modes/components/status-line/types.ts +40 -9
  790. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  791. package/src/modes/components/tips.txt +7 -3
  792. package/src/modes/components/todo-reminder.ts +0 -2
  793. package/src/modes/components/tool-execution.ts +236 -103
  794. package/src/modes/components/transcript-container.ts +724 -99
  795. package/src/modes/components/tree-selector.ts +19 -4
  796. package/src/modes/components/ttsr-notification.ts +72 -30
  797. package/src/modes/components/usage-row.ts +18 -0
  798. package/src/modes/components/user-message-selector.ts +1 -1
  799. package/src/modes/components/user-message.ts +28 -12
  800. package/src/modes/components/visual-truncate.ts +1 -1
  801. package/src/modes/components/welcome.ts +80 -22
  802. package/src/modes/controllers/command-controller-shared.ts +7 -6
  803. package/src/modes/controllers/command-controller.ts +210 -180
  804. package/src/modes/controllers/event-controller.ts +352 -142
  805. package/src/modes/controllers/extension-ui-controller.ts +167 -208
  806. package/src/modes/controllers/input-controller.ts +778 -162
  807. package/src/modes/controllers/mcp-command-controller.ts +232 -80
  808. package/src/modes/controllers/selector-controller.ts +284 -145
  809. package/src/modes/controllers/session-focus-controller.ts +112 -0
  810. package/src/modes/controllers/ssh-command-controller.ts +2 -2
  811. package/src/modes/controllers/streaming-reveal.ts +295 -0
  812. package/src/modes/controllers/tan-command-controller.ts +173 -0
  813. package/src/modes/controllers/tool-args-reveal.ts +174 -0
  814. package/src/modes/gradient-highlight.ts +21 -9
  815. package/src/modes/image-references.ts +33 -7
  816. package/src/modes/index.ts +8 -25
  817. package/src/modes/interactive-mode.ts +840 -186
  818. package/src/modes/magic-keywords.ts +28 -6
  819. package/src/modes/markdown-prose.ts +1 -1
  820. package/src/modes/oauth-manual-input.ts +30 -3
  821. package/src/modes/rpc/rpc-client.ts +186 -3
  822. package/src/modes/rpc/rpc-mode.ts +318 -24
  823. package/src/modes/rpc/rpc-subagents.ts +265 -0
  824. package/src/modes/rpc/rpc-types.ts +111 -2
  825. package/src/modes/runtime-init.ts +28 -3
  826. package/src/modes/session-observer-registry.ts +72 -3
  827. package/src/modes/setup-version.ts +11 -0
  828. package/src/modes/setup-wizard/index.ts +16 -4
  829. package/src/modes/setup-wizard/lazy.ts +16 -0
  830. package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
  831. package/src/modes/setup-wizard/scenes/providers.ts +45 -12
  832. package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
  833. package/src/modes/setup-wizard/scenes/splash.ts +1 -1
  834. package/src/modes/setup-wizard/scenes/telegram.ts +77 -22
  835. package/src/modes/setup-wizard/scenes/theme.ts +29 -2
  836. package/src/modes/setup-wizard/scenes/types.ts +11 -2
  837. package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
  838. package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
  839. package/src/modes/shared.ts +2 -0
  840. package/src/modes/theme/defaults/dark-poimandres.json +1 -1
  841. package/src/modes/theme/defaults/light-poimandres.json +1 -1
  842. package/src/modes/theme/shimmer.ts +20 -9
  843. package/src/modes/theme/theme-schema.json +1 -1
  844. package/src/modes/theme/theme.ts +342 -82
  845. package/src/modes/types.ts +60 -18
  846. package/src/modes/utils/context-usage.ts +88 -8
  847. package/src/modes/utils/copy-targets.ts +133 -27
  848. package/src/modes/utils/hotkeys-markdown.ts +3 -2
  849. package/src/modes/utils/ui-helpers.ts +191 -110
  850. package/src/modes/workflow.ts +10 -10
  851. package/src/plan-mode/approved-plan.ts +66 -43
  852. package/src/plan-mode/plan-protection.ts +4 -4
  853. package/src/priority.json +5 -1
  854. package/src/prompts/agents/designer.md +1 -1
  855. package/src/prompts/agents/explore.md +3 -3
  856. package/src/prompts/agents/librarian.md +2 -3
  857. package/src/prompts/agents/oracle.md +2 -2
  858. package/src/prompts/agents/plan.md +6 -6
  859. package/src/prompts/agents/reviewer.md +1 -1
  860. package/src/prompts/agents/task.md +6 -5
  861. package/src/prompts/bench.md +12 -0
  862. package/src/prompts/ci-green-request.md +5 -7
  863. package/src/prompts/goals/goal-budget-limit.md +2 -2
  864. package/src/prompts/goals/goal-continuation.md +4 -4
  865. package/src/prompts/goals/goal-mode-active.md +1 -1
  866. package/src/prompts/goals/guided-goal-interview.md +8 -0
  867. package/src/prompts/goals/guided-goal-system.md +12 -0
  868. package/src/prompts/memories/consolidation.md +2 -7
  869. package/src/prompts/memories/consolidation_system.md +4 -0
  870. package/src/prompts/memories/identity_review.md +2 -2
  871. package/src/prompts/memories/read-path.md +11 -10
  872. package/src/prompts/memories/stage_one_system.md +2 -2
  873. package/src/prompts/review-custom-request.md +1 -1
  874. package/src/prompts/system/agent-creation-architect.md +2 -2
  875. package/src/prompts/system/auto-continue.md +1 -1
  876. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  877. package/src/prompts/system/autolearn-guidance.md +7 -0
  878. package/src/prompts/system/autolearn-nudge.md +3 -0
  879. package/src/prompts/system/background-tan-dispatch.md +8 -0
  880. package/src/prompts/system/btw-user.md +2 -2
  881. package/src/prompts/system/commit-message-system.md +13 -1
  882. package/src/prompts/system/custom-system-prompt.md +1 -1
  883. package/src/prompts/system/eager-task.md +7 -0
  884. package/src/prompts/system/eager-todo.md +11 -6
  885. package/src/prompts/system/empty-stop-retry.md +4 -6
  886. package/src/prompts/system/irc-autoreply.md +6 -0
  887. package/src/prompts/system/irc-incoming.md +3 -4
  888. package/src/prompts/system/manual-continue.md +7 -0
  889. package/src/prompts/system/omfg-user.md +3 -4
  890. package/src/prompts/system/orchestrate-notice.md +10 -10
  891. package/src/prompts/system/personalities/default.md +26 -0
  892. package/src/prompts/system/personalities/friendly.md +17 -0
  893. package/src/prompts/system/personalities/pragmatic.md +15 -0
  894. package/src/prompts/system/plan-mode-active.md +70 -77
  895. package/src/prompts/system/plan-mode-approved.md +1 -1
  896. package/src/prompts/system/plan-mode-subagent.md +4 -5
  897. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  898. package/src/prompts/system/project-prompt.md +2 -2
  899. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  900. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  901. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  902. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  903. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  904. package/src/prompts/system/subagent-system-prompt.md +7 -8
  905. package/src/prompts/system/system-prompt.md +28 -57
  906. package/src/prompts/system/tiny-title-system.md +1 -1
  907. package/src/prompts/system/title-marker-instruction.md +1 -0
  908. package/src/prompts/system/title-system-marker.md +16 -0
  909. package/src/prompts/system/title-system.md +16 -3
  910. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  911. package/src/prompts/system/workflow-notice.md +4 -4
  912. package/src/prompts/tools/ast-edit.md +1 -1
  913. package/src/prompts/tools/ast-grep.md +2 -2
  914. package/src/prompts/tools/bash.md +16 -8
  915. package/src/prompts/tools/browser.md +33 -43
  916. package/src/prompts/tools/debug.md +1 -1
  917. package/src/prompts/tools/eval.md +31 -51
  918. package/src/prompts/tools/find.md +0 -1
  919. package/src/prompts/tools/github.md +8 -7
  920. package/src/prompts/tools/goal.md +1 -1
  921. package/src/prompts/tools/image-gen.md +1 -1
  922. package/src/prompts/tools/inspect-image-system.md +1 -1
  923. package/src/prompts/tools/irc.md +39 -31
  924. package/src/prompts/tools/job.md +2 -1
  925. package/src/prompts/tools/learn.md +7 -0
  926. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  927. package/src/prompts/tools/lsp.md +2 -2
  928. package/src/prompts/tools/manage-skill.md +9 -0
  929. package/src/prompts/tools/memory-edit.md +1 -1
  930. package/src/prompts/tools/patch.md +2 -2
  931. package/src/prompts/tools/read.md +31 -39
  932. package/src/prompts/tools/recall.md +1 -1
  933. package/src/prompts/tools/reflect.md +1 -1
  934. package/src/prompts/tools/render-mermaid.md +2 -2
  935. package/src/prompts/tools/replace.md +4 -10
  936. package/src/prompts/tools/rewind.md +2 -2
  937. package/src/prompts/tools/search-tool-bm25.md +1 -9
  938. package/src/prompts/tools/search.md +0 -1
  939. package/src/prompts/tools/ssh.md +0 -4
  940. package/src/prompts/tools/task-summary.md +5 -16
  941. package/src/prompts/tools/task.md +47 -31
  942. package/src/prompts/tools/todo.md +6 -3
  943. package/src/registry/agent-lifecycle.ts +218 -0
  944. package/src/registry/agent-registry.ts +46 -5
  945. package/src/sdk.ts +692 -219
  946. package/src/secrets/index.ts +8 -1
  947. package/src/secrets/obfuscator.ts +40 -19
  948. package/src/session/agent-session.ts +1577 -806
  949. package/src/session/agent-storage.ts +18 -9
  950. package/src/session/auth-broker-config.ts +30 -1
  951. package/src/session/auth-storage.ts +6 -0
  952. package/src/session/codex-auto-reset.ts +202 -0
  953. package/src/session/history-storage.ts +3 -2
  954. package/src/session/indexed-session-storage.ts +7 -10
  955. package/src/session/messages.ts +59 -95
  956. package/src/session/session-context.ts +352 -0
  957. package/src/session/session-dump-format.ts +12 -3
  958. package/src/session/session-entries.ts +194 -0
  959. package/src/session/session-history-format.ts +246 -0
  960. package/src/session/session-listing.ts +588 -0
  961. package/src/session/session-loader.ts +106 -0
  962. package/src/session/session-manager.ts +1003 -2920
  963. package/src/session/session-migrations.ts +78 -0
  964. package/src/session/session-paths.ts +193 -0
  965. package/src/session/session-persistence.ts +131 -0
  966. package/src/session/session-storage.ts +91 -30
  967. package/src/session/snapcompact-inline.ts +542 -0
  968. package/src/session/snapcompact-savings-journal.ts +113 -0
  969. package/src/session/streaming-output.ts +248 -11
  970. package/src/session/tool-choice-queue.ts +23 -11
  971. package/src/session/yield-queue.ts +20 -2
  972. package/src/slash-commands/acp-builtins.ts +25 -1
  973. package/src/slash-commands/available-commands.ts +105 -0
  974. package/src/slash-commands/builtin-registry.ts +575 -49
  975. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  976. package/src/slash-commands/helpers/context-report.ts +28 -1
  977. package/src/slash-commands/helpers/logout.ts +88 -0
  978. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  979. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  980. package/src/slash-commands/helpers/usage-report.ts +38 -3
  981. package/src/slash-commands/types.ts +5 -9
  982. package/src/ssh/connection-manager.ts +27 -0
  983. package/src/ssh/ssh-executor.ts +60 -4
  984. package/src/stt/asr-client.ts +520 -0
  985. package/src/stt/asr-protocol.ts +65 -0
  986. package/src/stt/asr-worker.ts +790 -0
  987. package/src/stt/downloader.ts +107 -47
  988. package/src/stt/endpointer.ts +259 -0
  989. package/src/stt/index.ts +5 -1
  990. package/src/stt/models.ts +150 -0
  991. package/src/stt/recorder.ts +254 -67
  992. package/src/stt/stt-controller.ts +201 -22
  993. package/src/stt/transcriber.ts +37 -68
  994. package/src/stt/wav.ts +173 -0
  995. package/src/system-prompt.ts +52 -10
  996. package/src/task/agents.ts +3 -4
  997. package/src/task/commands.ts +3 -2
  998. package/src/task/discovery.ts +17 -24
  999. package/src/task/executor.ts +1054 -529
  1000. package/src/task/index.ts +862 -757
  1001. package/src/task/output-manager.ts +0 -11
  1002. package/src/task/parallel.ts +3 -3
  1003. package/src/task/prometheus-command.ts +2 -2
  1004. package/src/task/render.ts +529 -182
  1005. package/src/task/repair-args.ts +21 -9
  1006. package/src/task/types.ts +144 -66
  1007. package/src/task/worktree.ts +64 -56
  1008. package/src/telemetry-export.ts +27 -9
  1009. package/src/thinking.ts +9 -7
  1010. package/src/tiny/models.ts +2 -2
  1011. package/src/tiny/text.ts +5 -1
  1012. package/src/tiny/title-client.ts +72 -20
  1013. package/src/tiny/title-protocol.ts +1 -1
  1014. package/src/tiny/worker.ts +23 -99
  1015. package/src/tool-discovery/tool-index.ts +2 -0
  1016. package/src/tools/archive-reader.ts +94 -2
  1017. package/src/tools/ask.ts +234 -177
  1018. package/src/tools/ast-edit.ts +136 -80
  1019. package/src/tools/ast-grep.ts +41 -45
  1020. package/src/tools/auto-generated-guard.ts +20 -3
  1021. package/src/tools/bash-interactive.ts +28 -8
  1022. package/src/tools/bash.ts +198 -35
  1023. package/src/tools/browser/attach.ts +26 -7
  1024. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  1025. package/src/tools/browser/cmux/rpc.ts +156 -0
  1026. package/src/tools/browser/cmux/socket-client.ts +309 -0
  1027. package/src/tools/browser/launch.ts +11 -2
  1028. package/src/tools/browser/readable.ts +19 -2
  1029. package/src/tools/browser/registry.ts +52 -5
  1030. package/src/tools/browser/render.ts +13 -5
  1031. package/src/tools/browser/tab-protocol.ts +2 -0
  1032. package/src/tools/browser/tab-supervisor.ts +256 -34
  1033. package/src/tools/browser/tab-worker.ts +259 -91
  1034. package/src/tools/browser.ts +44 -2
  1035. package/src/tools/checkpoint.ts +1 -1
  1036. package/src/tools/conflict-detect.ts +50 -4
  1037. package/src/tools/debug.ts +27 -12
  1038. package/src/tools/eval-render.ts +32 -35
  1039. package/src/tools/eval.ts +26 -12
  1040. package/src/tools/fetch.ts +450 -99
  1041. package/src/tools/find.ts +182 -142
  1042. package/src/tools/gh-cache-invalidation.ts +255 -0
  1043. package/src/tools/gh-renderer.ts +104 -51
  1044. package/src/tools/gh.ts +232 -37
  1045. package/src/tools/github-cache.ts +97 -7
  1046. package/src/tools/grouped-file-output.ts +159 -52
  1047. package/src/tools/image-gen.ts +237 -132
  1048. package/src/tools/index.ts +147 -26
  1049. package/src/tools/inspect-image-renderer.ts +74 -45
  1050. package/src/tools/inspect-image.ts +12 -6
  1051. package/src/tools/irc.ts +626 -173
  1052. package/src/tools/job.ts +106 -29
  1053. package/src/tools/learn.ts +144 -0
  1054. package/src/tools/manage-skill.ts +104 -0
  1055. package/src/tools/memory-edit.ts +4 -4
  1056. package/src/tools/memory-recall.ts +7 -9
  1057. package/src/tools/memory-reflect.ts +5 -9
  1058. package/src/tools/memory-render.ts +23 -6
  1059. package/src/tools/memory-retain.ts +4 -4
  1060. package/src/tools/path-utils.ts +102 -48
  1061. package/src/tools/plan-mode-guard.ts +101 -40
  1062. package/src/tools/read.ts +475 -120
  1063. package/src/tools/render-mermaid.ts +1 -1
  1064. package/src/tools/render-utils.ts +132 -76
  1065. package/src/tools/renderers.ts +12 -1
  1066. package/src/tools/report-tool-issue.ts +14 -6
  1067. package/src/tools/resolve.ts +20 -3
  1068. package/src/tools/review.ts +2 -2
  1069. package/src/tools/search-tool-bm25.ts +37 -24
  1070. package/src/tools/search.ts +233 -115
  1071. package/src/tools/sqlite-reader.ts +26 -17
  1072. package/src/tools/ssh.ts +20 -14
  1073. package/src/tools/todo.ts +197 -191
  1074. package/src/tools/tool-result.ts +8 -0
  1075. package/src/tools/tool-timeouts.ts +1 -1
  1076. package/src/tools/tts.ts +205 -74
  1077. package/src/tools/write.ts +291 -155
  1078. package/src/tools/yield.ts +10 -1
  1079. package/src/tts/downloader.ts +64 -0
  1080. package/src/tts/index.ts +8 -0
  1081. package/src/tts/models.ts +137 -0
  1082. package/src/tts/player.ts +137 -0
  1083. package/src/tts/runtime.ts +21 -0
  1084. package/src/tts/streaming-player.ts +266 -0
  1085. package/src/tts/tts-client.ts +647 -0
  1086. package/src/tts/tts-protocol.ts +60 -0
  1087. package/src/tts/tts-worker.ts +505 -0
  1088. package/src/tts/vocalizer.ts +162 -0
  1089. package/src/tts/wav.ts +58 -0
  1090. package/src/tui/code-cell.ts +2 -7
  1091. package/src/tui/hyperlink.ts +40 -26
  1092. package/src/tui/output-block.ts +60 -108
  1093. package/src/tui/status-line.ts +5 -1
  1094. package/src/utils/block-context.ts +312 -0
  1095. package/src/utils/changelog.ts +27 -1
  1096. package/src/utils/clipboard.ts +91 -22
  1097. package/src/utils/commit-message-generator.ts +8 -3
  1098. package/src/utils/enhanced-paste.ts +230 -0
  1099. package/src/utils/file-mentions.ts +3 -1
  1100. package/src/utils/git.ts +315 -15
  1101. package/src/utils/image-loading.ts +65 -4
  1102. package/src/utils/session-color.ts +83 -9
  1103. package/src/utils/thinking-display.ts +37 -0
  1104. package/src/utils/title-generator.ts +73 -10
  1105. package/src/utils/tool-choice.ts +16 -0
  1106. package/src/utils/tools-manager.ts +19 -1
  1107. package/src/web/kagi.ts +28 -26
  1108. package/src/web/parallel.ts +7 -3
  1109. package/src/web/scrapers/arxiv.ts +1 -1
  1110. package/src/web/scrapers/github.ts +351 -3
  1111. package/src/web/scrapers/go-pkg.ts +1 -1
  1112. package/src/web/scrapers/iacr.ts +1 -1
  1113. package/src/web/scrapers/readthedocs.ts +1 -1
  1114. package/src/web/scrapers/twitter.ts +2 -1
  1115. package/src/web/scrapers/types.ts +87 -8
  1116. package/src/web/scrapers/wikipedia.ts +1 -1
  1117. package/src/web/scrapers/youtube.ts +9 -3
  1118. package/src/web/search/index.ts +15 -2
  1119. package/src/web/search/providers/anthropic.ts +62 -21
  1120. package/src/web/search/providers/base.ts +2 -1
  1121. package/src/web/search/providers/brave.ts +5 -2
  1122. package/src/web/search/providers/codex.ts +87 -51
  1123. package/src/web/search/providers/exa.ts +101 -10
  1124. package/src/web/search/providers/gemini.ts +49 -24
  1125. package/src/web/search/providers/jina.ts +15 -5
  1126. package/src/web/search/providers/kagi.ts +9 -2
  1127. package/src/web/search/providers/kimi.ts +45 -20
  1128. package/src/web/search/providers/parallel.ts +39 -24
  1129. package/src/web/search/providers/perplexity.ts +226 -63
  1130. package/src/web/search/providers/searxng.ts +19 -3
  1131. package/src/web/search/providers/synthetic.ts +16 -11
  1132. package/src/web/search/providers/tavily.ts +12 -9
  1133. package/src/web/search/providers/zai.ts +22 -9
  1134. package/src/web/search/render.ts +59 -64
  1135. package/src/web/search/types.ts +5 -1
  1136. package/dist/types/discovery/context-files.d.ts +0 -17
  1137. package/dist/types/exa/factory.d.ts +0 -13
  1138. package/dist/types/exa/render.d.ts +0 -19
  1139. package/dist/types/exa/researcher.d.ts +0 -9
  1140. package/dist/types/exa/search.d.ts +0 -9
  1141. package/dist/types/exa/websets.d.ts +0 -9
  1142. package/dist/types/export/html/template.generated.d.ts +0 -1
  1143. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  1144. package/dist/types/modes/components/status-line.d.ts +0 -77
  1145. package/dist/types/slash-commands/headless-plan.d.ts +0 -3
  1146. package/dist/types/stt/setup.d.ts +0 -18
  1147. package/scripts/generate-template.ts +0 -33
  1148. package/src/discovery/context-files.ts +0 -49
  1149. package/src/exa/factory.ts +0 -60
  1150. package/src/exa/render.ts +0 -244
  1151. package/src/exa/researcher.ts +0 -36
  1152. package/src/exa/search.ts +0 -47
  1153. package/src/exa/websets.ts +0 -248
  1154. package/src/export/html/template.generated.ts +0 -2
  1155. package/src/modes/components/session-observer-overlay.ts +0 -852
  1156. package/src/slash-commands/headless-plan.ts +0 -142
  1157. package/src/stt/setup.ts +0 -52
  1158. package/src/stt/transcribe.py +0 -70
  1159. /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
  1160. /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
@@ -1,15 +1,49 @@
1
- import { type Component, Container, type NativeScrollbackLiveRegion, TERMINAL } from "@prometheus-ai/tui";
1
+ import {
2
+ type Component,
3
+ Container,
4
+ type NativeScrollbackCommittedRows,
5
+ type NativeScrollbackLiveRegion,
6
+ type RenderStablePrefix,
7
+ type ViewportTailProvider,
8
+ } from "@prometheus-ai/tui";
2
9
 
3
- const kSnapshot = Symbol("transcript.frozenRender");
10
+ const kSnapshot = Symbol("transcript.liveDiffSnapshot");
4
11
 
5
- interface FrozenRender {
12
+ /**
13
+ * Per-block render cache: the block's previous stripped contribution plus the
14
+ * derived append-only state. Still-live blocks use it as input to
15
+ * {@link deriveLiveCommitState}; finalized blocks wholly inside already
16
+ * committed native scrollback can replay it without calling render().
17
+ */
18
+ interface LiveDiffSnapshot {
6
19
  width: number;
7
- lines: string[];
20
+ lines: readonly string[];
8
21
  generation: number;
22
+ appendOnly: boolean;
23
+ /**
24
+ * Frames remaining until a block that rewrote an interior row may re-earn
25
+ * append-only status. `0` means the block is not under rewrite suspicion.
26
+ */
27
+ volatileCooldown: number;
28
+ /**
29
+ * Stable-prefix ratchet (see {@link deriveLiveCommitState}): leading rows
30
+ * promoted as commit-safe because they stayed visibly identical for
31
+ * {@link STABLE_PREFIX_COMMIT_FRAMES} consecutive frames, plus the in-flight
32
+ * candidate run and its age.
33
+ */
34
+ stablePrefixLength: number;
35
+ candidatePrefixLength: number;
36
+ candidatePrefixAge: number;
37
+ /**
38
+ * Topmost row index ever observed rewritten in place (see
39
+ * {@link deriveLiveCommitState}): the stable-prefix ratchet never promotes
40
+ * rows at/after it. `Infinity` until the first rewrite.
41
+ */
42
+ rewriteFloor: number;
9
43
  }
10
44
 
11
45
  interface SnapshotCarrier {
12
- [kSnapshot]?: FrozenRender;
46
+ [kSnapshot]?: LiveDiffSnapshot;
13
47
  }
14
48
 
15
49
  /**
@@ -17,16 +51,32 @@ interface SnapshotCarrier {
17
51
  * result, an assistant message mid-stream) reports `false` so the container
18
52
  * keeps it inside the live (repaintable) region instead of freezing it. Blocks
19
53
  * without the method are treated as finalized — the default, stable behavior.
20
- *
21
- * `isTranscriptBlockAppendOnly` marks a still-live block whose rendered rows
22
- * only grow at the bottom and never re-layout (a streaming assistant reply).
23
- * Such a block's scrolled-off head is safe to commit to native scrollback even
24
- * while live; blocks that omit it (tool previews that collapse to a compact
25
- * result) keep their mutable rows deferred. Default is `false`.
26
54
  */
27
55
  interface FinalizableBlock {
28
56
  isTranscriptBlockFinalized?(): boolean;
29
- isTranscriptBlockAppendOnly?(): boolean;
57
+ /**
58
+ * Monotonic content version for blocks that can still mutate *after*
59
+ * reporting finalized (e.g. `AssistantMessageComponent`: the inline error
60
+ * restored at the next turn's `agent_start`, late tool-result images). The
61
+ * committed-scrollback render bypass only replays a block's previous rows
62
+ * when the version is unchanged; without this signal a post-finalize
63
+ * mutation would stay invisible until a global invalidation. Blocks that
64
+ * never mutate post-finalize simply omit the method.
65
+ */
66
+ getTranscriptBlockVersion?(): number;
67
+ /**
68
+ * Whether a still-live block's visually settled leading rows are durable —
69
+ * guaranteed to survive the block's remaining transitions (finalize,
70
+ * displacement) byte-stable — and may therefore be promoted as commit-safe
71
+ * by {@link deriveLiveCommitState}. Blocks whose pending render is
72
+ * provisional (a tool call's tail-window streaming preview, replaced
73
+ * wholesale by the result render) return `false`: committing such rows
74
+ * strands a stale copy in immutable terminal history the moment the real
75
+ * content re-lays-out the block (the engine audit recommits below it —
76
+ * "duplication, never loss"). Absent = `true`, the default for blocks
77
+ * whose live rows persist (a streaming assistant message).
78
+ */
79
+ isTranscriptBlockCommitStable?(): boolean;
30
80
  }
31
81
 
32
82
  function isBlockFinalized(child: Component): boolean {
@@ -34,59 +84,382 @@ function isBlockFinalized(child: Component): boolean {
34
84
  return fn ? fn.call(child) : true;
35
85
  }
36
86
 
37
- function isBlockAppendOnly(child: Component): boolean {
38
- const fn = (child as Component & FinalizableBlock).isTranscriptBlockAppendOnly;
39
- return fn ? fn.call(child) : false;
87
+ function getBlockVersion(child: Component): number | undefined {
88
+ const fn = (child as Component & FinalizableBlock).getTranscriptBlockVersion;
89
+ return fn ? fn.call(child) : undefined;
90
+ }
91
+
92
+ function isBlockCommitStable(child: Component): boolean {
93
+ const fn = (child as Component & FinalizableBlock).isTranscriptBlockCommitStable;
94
+ return fn ? fn.call(child) : true;
95
+ }
96
+
97
+ // A "plain blank" row is empty or whitespace-only with no ANSI bytes. It marks
98
+ // separation padding (a `Spacer`, or a no-background `paddingY` row) as opposed
99
+ // to a background-colored padding row, whose escape sequences contain `\S` and
100
+ // are therefore preserved as part of a block's visual design.
101
+ const NON_WHITESPACE = /\S/;
102
+ function isPlainBlank(line: string): boolean {
103
+ return !NON_WHITESPACE.test(line);
104
+ }
105
+
106
+ // Strip leading/trailing plain-blank rows so each block contributes only its
107
+ // visible body; the container owns the gaps between blocks. Returns the input
108
+ // array unchanged when there is nothing to trim (no allocation on the hot path).
109
+ function stripPlainBlankEdges(lines: readonly string[]): readonly string[] {
110
+ let start = 0;
111
+ let end = lines.length;
112
+ while (start < end && isPlainBlank(lines[start]!)) start++;
113
+ while (end > start && isPlainBlank(lines[end - 1]!)) end--;
114
+ return start === 0 && end === lines.length ? lines : lines.slice(start, end);
115
+ }
116
+
117
+ /**
118
+ * One block's recorded contribution to the assembled transcript: the raw array
119
+ * reference its render() returned, the stripped contribution derived from it,
120
+ * and where those rows landed. Reference-compared on the next render — per the
121
+ * Component render contract, an identical raw reference proves the block's
122
+ * rows are byte-identical, so the stripped contribution and the assembled rows
123
+ * can be reused without re-deriving anything.
124
+ */
125
+ interface BlockSegment {
126
+ component: Component;
127
+ rawRef: readonly string[];
128
+ contribution: readonly string[];
129
+ width: number;
130
+ generation: number;
131
+ /** Frame row of this block's first emitted row (the separator when present). */
132
+ startRow: number;
133
+ /** Rows emitted: separator + contribution (0 for empty contributions). */
134
+ rowCount: number;
135
+ sep: number;
136
+ /** Whether the block reported finalized when this segment was rendered. */
137
+ finalized: boolean;
138
+ /** Block version observed when this segment was rendered (see {@link FinalizableBlock}). */
139
+ version: number | undefined;
140
+ }
141
+
142
+ const EMPTY_SEGMENTS: BlockSegment[] = [];
143
+ /** Shared empty result for an empty viewport-tail render (no allocation). */
144
+ const EMPTY_TAIL: readonly string[] = [];
145
+
146
+ interface LiveCommitState {
147
+ appendOnly: boolean;
148
+ volatileCooldown: number;
149
+ stablePrefixLength: number;
150
+ candidatePrefixLength: number;
151
+ candidatePrefixAge: number;
152
+ rewriteFloor: number;
153
+ safeLength: number;
154
+ }
155
+
156
+ /**
157
+ * Render frames a block must stay clean (static or append-shaped) after an
158
+ * interior rewrite before its rows become committable again. A one-off
159
+ * re-layout (a codespan finalizing across a wrap boundary, a paragraph
160
+ * re-parsed as a heading) only suspends commits briefly — the pinned emitter
161
+ * appends from the stalled high-water mark, so the gap backfills contiguously
162
+ * once the block re-earns append-only. Periodic animations (a spinner rewrites
163
+ * its row every few frames) keep resetting the countdown and never re-earn it,
164
+ * so genuinely volatile blocks stay deferred. Frames arrive at most at the
165
+ * TUI's 30 Hz render cadence, so 30 frames ≈ 1s of clean streaming.
166
+ */
167
+ const VOLATILE_REARM_FRAMES = 30;
168
+
169
+ /**
170
+ * Consecutive frames a leading row run must stay visibly identical before it
171
+ * is promoted as commit-safe even though the block's tail keeps rewriting.
172
+ * Append-only detection alone is all-or-nothing per block: one perpetually
173
+ * ticking row (a task tool's progress tree, per-agent cost/tool counters, a
174
+ * log line spinner) suspends commits for the WHOLE block forever, so once the
175
+ * block outgrows the viewport its static head — e.g. a task's prompt/context
176
+ * markdown — is neither committed to native scrollback nor on screen: the
177
+ * transcript reads as cut off for the entire (possibly minutes-long) run.
178
+ * The ratchet commits the settled head while only the genuinely volatile tail
179
+ * stays deferred. If a promoted row is later rewritten (a collapsing
180
+ * preview), the engine's committed-prefix audit re-anchors and recommits —
181
+ * duplication, never loss — and the ratchet retreats to the divergence.
182
+ */
183
+ const STABLE_PREFIX_COMMIT_FRAMES = 30;
184
+
185
+ /**
186
+ * Rows at a live block's tail treated as the volatile streaming edge. Real
187
+ * streaming is not strictly append-only at the bottom: the in-flight markdown
188
+ * paragraph re-wraps as words arrive (rewriting its last 1-2 visual rows), an
189
+ * unclosed token (`**bold`, a half-streamed link) re-renders when its closer
190
+ * arrives, and a wrap-shrink moves the last word onto a new row. Divergence
191
+ * confined to this zone is clean growth, and the zone itself is held back
192
+ * from the offered commit boundary — so a tolerated rewrite can never touch a
193
+ * row the engine may have committed. Width 4 covers the observed shapes (≤2
194
+ * rows) with margin for wide glyphs and multi-row token spans; the cost is
195
+ * only that the last 4 rows of a live block commit at finalization instead of
196
+ * mid-stream, which is invisible (they are on screen — the viewport is always
197
+ * taller than the holdback).
198
+ */
199
+ const TAIL_VOLATILITY_ROWS = 4;
200
+
201
+ /**
202
+ * Visible-content form of a row: SGR/OSC bytes and trailing pad spaces are
203
+ * write framing, not content. A styled line's closing escape moves when the
204
+ * line stops being the last of its span (a wrapped thinking paragraph growing
205
+ * by one row), and width-padded rows shift their trailing spaces as text
206
+ * grows; both leave the on-screen cells identical and must not count as a
207
+ * rewrite of a committed-candidate row. Committed scrollback rows are written
208
+ * with a full SGR/OSC reset terminator, so escape-placement drift between
209
+ * visually identical renders cannot bleed styles across rows.
210
+ */
211
+ function normalizeRow(line: string): string {
212
+ return Bun.stripANSI(line).trimEnd();
213
+ }
214
+
215
+ function rowsVisiblyEqual(prev: string, cur: string): boolean {
216
+ return prev === cur || normalizeRow(prev) === normalizeRow(cur);
217
+ }
218
+
219
+ /**
220
+ * Whether `cur` is `prev` grown in place: the visible content of `prev` is a
221
+ * strict-or-equal prefix of `cur`'s (token streaming appending to the cursor
222
+ * row). Escape placement and pad drift are ignored, same as rowsVisiblyEqual.
223
+ */
224
+ function rowVisiblyGrew(prev: string, cur: string): boolean {
225
+ return normalizeRow(cur).startsWith(normalizeRow(prev));
226
+ }
227
+
228
+ function hasValidSnapshot(
229
+ snapshot: LiveDiffSnapshot | undefined,
230
+ width: number,
231
+ generation: number,
232
+ ): snapshot is LiveDiffSnapshot {
233
+ return snapshot !== undefined && snapshot.generation === generation && snapshot.width === width;
234
+ }
235
+
236
+ function commonPrefixLength(prev: readonly string[], cur: readonly string[]): number {
237
+ const limit = Math.min(prev.length, cur.length);
238
+ let i = 0;
239
+ while (i < limit && rowsVisiblyEqual(prev[i]!, cur[i]!)) i++;
240
+ return i;
241
+ }
242
+
243
+ function commonSuffixLength(prev: readonly string[], cur: readonly string[], prefixLength: number): number {
244
+ const limit = Math.min(prev.length - prefixLength, cur.length - prefixLength);
245
+ let i = 0;
246
+ while (i < limit && rowsVisiblyEqual(prev[prev.length - 1 - i]!, cur[cur.length - 1 - i]!)) i++;
247
+ return i;
248
+ }
249
+
250
+ function deriveLiveCommitState(
251
+ previous: LiveDiffSnapshot | undefined,
252
+ current: readonly string[],
253
+ width: number,
254
+ generation: number,
255
+ ): LiveCommitState {
256
+ let appendOnly = false;
257
+ let volatileCooldown = 0;
258
+ let stablePrefixLength = 0;
259
+ let candidatePrefixLength = 0;
260
+ let candidatePrefixAge = 0;
261
+ let rewriteFloor = Number.POSITIVE_INFINITY;
262
+ let trailingRowGrowth = false;
263
+ if (hasValidSnapshot(previous, width, generation)) {
264
+ appendOnly = previous.appendOnly;
265
+ volatileCooldown = previous.volatileCooldown;
266
+ stablePrefixLength = previous.stablePrefixLength;
267
+ candidatePrefixLength = previous.candidatePrefixLength;
268
+ candidatePrefixAge = previous.candidatePrefixAge;
269
+ rewriteFloor = previous.rewriteFloor;
270
+
271
+ const prefixLength = commonPrefixLength(previous.lines, current);
272
+ const staticRender = prefixLength === previous.lines.length && prefixLength === current.length;
273
+ let cleanFrame = true;
274
+ if (!staticRender) {
275
+ const suffixLength = commonSuffixLength(previous.lines, current, prefixLength);
276
+ // Append-only growth never rewrites a row that may already have scrolled
277
+ // into native scrollback; it only grows the block at/near its tail. Two
278
+ // shapes qualify:
279
+ // - a pure insertion that preserves every previous row across a
280
+ // matching prefix + suffix (a bottom append, or an insertion above
281
+ // stable trailing chrome like a streaming tool's footer/border);
282
+ // - a rewrite whose divergence BEGINS inside the trailing
283
+ // TAIL_VOLATILITY_ROWS of the previous render — the streaming edge:
284
+ // the in-flight paragraph re-wrapping as words arrive (its last 1-2
285
+ // visual rows), an unclosed markdown token (`**bold`) re-rendering
286
+ // when its closer streams in, a wrap-shrink pushing the last word
287
+ // onto an appended row. That zone is held back from `safeLength`
288
+ // below, so a tolerated rewrite can never touch a row that was
289
+ // offered for commit.
290
+ // The anchor matters: the gap must START in the tail zone, not merely
291
+ // be small — a one-row ticker mid-block with stable rows beneath it
292
+ // would otherwise classify clean, get offered past, and rewrite
293
+ // committed rows on every tick. Any deeper divergent row means the
294
+ // block re-laid-out committed-candidate content — a rewrite, which
295
+ // suspends commits until the block re-earns append-only.
296
+ const preservedEveryRow = prefixLength + suffixLength >= previous.lines.length;
297
+ const tailConfined = preservedEveryRow || prefixLength >= previous.lines.length - TAIL_VOLATILITY_ROWS;
298
+ if (tailConfined && current.length >= previous.lines.length) {
299
+ // Strict trailing-row growth: every previous row except the last
300
+ // is visibly unchanged and the last grew in place as a visible
301
+ // prefix, with no rows appended — a line accumulating tokens.
302
+ // The sole divergent row is the block's physical last row, which
303
+ // the engine's window floor never commits while it stays last
304
+ // (chunkTo ≤ windowTop ≤ last row index), so the volatile-tail
305
+ // holdback below is unnecessary: the whole body is offerable and
306
+ // the block's scrolled-off head reaches native scrollback.
307
+ trailingRowGrowth =
308
+ current.length === previous.lines.length &&
309
+ prefixLength === previous.lines.length - 1 &&
310
+ rowVisiblyGrew(previous.lines[prefixLength]!, current[prefixLength]!);
311
+ if (volatileCooldown === 0) appendOnly = true;
312
+ // Clean growth inserts/rewrites rows at the divergence; a floor
313
+ // inside the preserved suffix travels down with it, a floor at or
314
+ // above the divergent zone stays put (conservative: a stale floor
315
+ // index can only point at an earlier row, never a later one).
316
+ const delta = current.length - previous.lines.length;
317
+ if (delta > 0 && Number.isFinite(rewriteFloor)) {
318
+ const suffixStart = Math.max(prefixLength, previous.lines.length - suffixLength);
319
+ if (rewriteFloor >= suffixStart) rewriteFloor += delta;
320
+ }
321
+ } else {
322
+ cleanFrame = false;
323
+ appendOnly = false;
324
+ volatileCooldown = VOLATILE_REARM_FRAMES;
325
+ }
326
+ }
327
+ if (cleanFrame && volatileCooldown > 0) volatileCooldown--;
328
+
329
+ // Stable-prefix ratchet, independent of append-only. `prefixLength` is
330
+ // this frame's visibly-unchanged leading run; the candidate accumulates
331
+ // the MINIMUM prefix across a STABLE_PREFIX_COMMIT_FRAMES window, so
332
+ // promotion means every promoted row stayed identical for the whole
333
+ // window (row r is inside frame i's common prefix iff r < p_i, so
334
+ // r < min(p) holds for every frame of the window). A row settling
335
+ // mid-window promotes at most two windows later. The engine audit owns
336
+ // any promoted rows that already committed (recommit, never loss).
337
+ if (prefixLength < stablePrefixLength) {
338
+ // A divergence inside the promoted run is the ratchet's proof of
339
+ // over-promotion: this row was visibly stable for a full window,
340
+ // got promoted (and likely committed), and then mutated anyway — a
341
+ // slow ticker (an agent row's tool/cost counter, a growing progress
342
+ // tree), not settling content. It will mutate again, and every
343
+ // promote→mutate cycle makes the engine audit recommit, spraying a
344
+ // stale snapshot of the block into native scrollback. Floor the
345
+ // ratchet at the divergence permanently: rows above it may still
346
+ // promote, rows at/below it never re-promote while the block lives.
347
+ // One-off re-layouts before any promotion (a call→result frame
348
+ // transition, a codespan finalizing) never hit this branch, and the
349
+ // append-only re-arm path commits the full block regardless of the
350
+ // floor.
351
+ rewriteFloor = Math.min(rewriteFloor, prefixLength);
352
+ stablePrefixLength = prefixLength;
353
+ candidatePrefixLength = prefixLength;
354
+ candidatePrefixAge = 0;
355
+ } else {
356
+ candidatePrefixLength =
357
+ candidatePrefixAge === 0 ? prefixLength : Math.min(candidatePrefixLength, prefixLength);
358
+ candidatePrefixAge++;
359
+ if (candidatePrefixAge >= STABLE_PREFIX_COMMIT_FRAMES) {
360
+ // Cap at the volatile-tail holdback: a long static stretch would
361
+ // otherwise promote the streaming edge itself (min prefix == full
362
+ // length), and the next chunk's tail re-wrap would then rewrite
363
+ // offered rows.
364
+ stablePrefixLength = Math.min(
365
+ candidatePrefixLength,
366
+ rewriteFloor,
367
+ Math.max(0, current.length - TAIL_VOLATILITY_ROWS),
368
+ );
369
+ candidatePrefixLength = prefixLength;
370
+ candidatePrefixAge = 0;
371
+ }
372
+ }
373
+ }
374
+
375
+ return {
376
+ appendOnly,
377
+ volatileCooldown,
378
+ stablePrefixLength,
379
+ candidatePrefixLength,
380
+ candidatePrefixAge,
381
+ rewriteFloor,
382
+ // A clean-streaming block's body is committable up to the volatile-tail
383
+ // holdback (the streaming edge is never offered, so its tolerated
384
+ // rewrites can never touch committed rows); otherwise the settled head
385
+ // still is — only the volatile tail stays deferred. Strict in-place
386
+ // growth of the trailing row skips the holdback: its only mutable row
387
+ // is the block's last, which cannot commit while it remains last.
388
+ safeLength: appendOnly
389
+ ? trailingRowGrowth
390
+ ? current.length
391
+ : Math.max(stablePrefixLength, current.length - TAIL_VOLATILITY_ROWS, 0)
392
+ : stablePrefixLength,
393
+ };
40
394
  }
41
395
 
42
396
  /**
43
- * Transcript container that freezes the rendered output of every block except
44
- * the bottom-most (live) one on terminals where committed native scrollback is
45
- * immutable.
397
+ * Transcript container that renders every block's current content each frame
398
+ * and reports the live-region seam (`NativeScrollbackLiveRegion`) that gates
399
+ * the engine's append-only scrollback commits.
46
400
  *
47
- * On ED3-risk terminals with an unobservable viewport (ghostty/kitty/iTerm2/…)
48
- * the renderer cannot clear saved lines (`\x1b[3J` may yank a reader) or query
49
- * whether the user has scrolled, so any block that re-lays-out *after* it has
50
- * scrolled past the viewport leaves a stale duplicate above the live region
51
- * (a finalized assistant message re-wrapping, a tool preview collapsing to its
52
- * compact result, a late async tool completion). The renderer's only safe move
53
- * for such an offscreen edit is to not repaint which is correct only if the
54
- * committed region never changes underneath it.
401
+ * The engine never rewrites committed history: rows above the seam that have
402
+ * entered the tape keep whatever bytes they were committed with ("let the
403
+ * history be"), while the visible window always repaints from each block's
404
+ * latest render a late tool result, a post-finalize error pin, or an expand
405
+ * toggle is always reflected on screen. Blocks that are still mutating (an
406
+ * unfinalized tool, a streaming assistant message) stay below the seam so
407
+ * their rows do not enter history while they can still change; a streaming
408
+ * block whose render grows append-only deepens the seam through its settled
409
+ * head so a long reply's scrolled-off rows still reach scrollback mid-stream.
55
410
  *
56
- * This container provides that guarantee: a block's render is snapshotted while
57
- * it is the live (bottom-most) block, and once a newer block is appended it
58
- * replays the snapshot instead of recomputing. Mutations after a block leaves
59
- * live are intentionally deferred until the next checkpoint {@link thaw} (prompt
60
- * submit native-scrollback rebuild), where the whole transcript is replayed
61
- * and any drift reconciles safely. On terminals that can rebuild history this
62
- * freezing is unnecessary, so it renders every block live for full fidelity.
411
+ * Assembly is incremental: the returned array is persistent and mutated in
412
+ * place. Each block's render is still called every frame, but a block whose
413
+ * render returned the same array reference at an unchanged offset reuses its
414
+ * previously assembled rows; the array is truncated and re-pushed only from
415
+ * the first divergent block. The leading byte-identical row count is reported
416
+ * through {@link RenderStablePrefix} so the engine can skip marker scanning,
417
+ * line preparation, and the committed-prefix audit for those rows.
63
418
  */
64
- export class TranscriptContainer extends Container implements NativeScrollbackLiveRegion {
65
- // Bumped to invalidate every block's snapshot at once; a snapshot is only
66
- // honored when its stored generation still matches.
419
+ export class TranscriptContainer
420
+ extends Container
421
+ implements NativeScrollbackLiveRegion, NativeScrollbackCommittedRows, RenderStablePrefix, ViewportTailProvider
422
+ {
423
+ // Bumped to retire every block's diff snapshot at once (theme change /
424
+ // clear); a snapshot is only honored when its stored generation matches.
67
425
  #generation = 0;
68
- // Line index where the live (repaintable) region began on the previous
69
- // render — the start of the earliest still-mutating block, or the bottom
70
- // block when everything is finalized. A block leaves the live region only
71
- // once it has finalized AND a finalized block sits below it; the frame it
72
- // crosses out is recomputed so it freezes at its true final content, not the
73
- // mid-stream snapshot it last rendered while live (TUI render coalescing can
74
- // advance a block's content in the very frame it stops being live).
75
- #prevLiveStartIndex = 0;
76
426
  // Local line index where the current live region begins in the most recent
77
- // render. TUI extends the native-scrollback pinned region from this point
78
- // through the live blocks and the root chrome rendered below them.
427
+ // render. TUI commits rows to native scrollback only above this seam (or
428
+ // the deeper commit-safe end below).
79
429
  #nativeScrollbackLiveRegionStart: number | undefined;
80
- // Local line index up to which the leading run of live blocks is append-only
81
- // (a streaming assistant reply): everything in [liveRegionStart,
82
- // commitSafeEnd) only grows at the bottom and never re-layouts, so its
83
- // scrolled-off head is safe to commit to native scrollback. `undefined` when
84
- // the first live block is volatile (a tool preview).
430
+ // Local line index up to which the leading run of live blocks is safe to
431
+ // commit. Finalized blocks contribute their full body; still-live blocks
432
+ // contribute only while their render has been observed growing without
433
+ // visibly rewriting a previously rendered interior row (escape placement
434
+ // and pad drift are ignored). A rewrite suspends the block's contribution
435
+ // until it re-earns append-only via VOLATILE_REARM_FRAMES clean frames;
436
+ // the engine then backfills the stalled gap.
85
437
  #nativeScrollbackCommitSafeEnd: number | undefined;
86
-
438
+ // Local line index up to which the leading run of live blocks is DURABLE: a
439
+ // commit-stable block's full body is permanent content even while its interior
440
+ // rows re-lay-out (a streaming markdown table re-aligning columns), so the
441
+ // engine must append their scroll-off snapshot rather than drop it. Reported
442
+ // separately from the byte-stable commit-safe end because these rows may still
443
+ // drift after commit; the engine commits them audit-exempt. Provisional
444
+ // (commit-unstable) blocks never extend it.
445
+ #nativeScrollbackSnapshotSafeEnd: number | undefined;
446
+ // Persistent assembled transcript rows. Rows before the stable floor are
447
+ // byte-identical to the previous render; rows at/after it were re-pushed.
448
+ #lines: string[] = [];
449
+ #segments: BlockSegment[] = EMPTY_SEGMENTS;
450
+ #renderWidth = -1;
451
+ // Local rows already committed to native scrollback by the previous frame.
452
+ // Finalized blocks wholly before this boundary are immutable on-screen history;
453
+ // their previous contribution can be replayed without calling render().
454
+ #committedRows = 0;
455
+ // Stable-prefix floor accumulated across renders since the last
456
+ // getRenderStablePrefixRows() read (see RenderStablePrefix: reading
457
+ // consumes the report and re-bases the baseline). Out-of-band renders
458
+ // between engine frames lower it; they can never inflate it.
459
+ #stableRowsFloor = 0;
87
460
  override invalidate(): void {
88
- // A theme/global invalidation forces a full recompute on the rebuild that
89
- // follows; retire every snapshot.
461
+ // Theme/global invalidation: retire every diff snapshot so stale styling
462
+ // is not diffed against the recolored render.
90
463
  this.#generation++;
91
464
  super.invalidate();
92
465
  }
@@ -96,6 +469,16 @@ export class TranscriptContainer extends Container implements NativeScrollbackLi
96
469
  super.clear();
97
470
  }
98
471
 
472
+ setNativeScrollbackCommittedRows(rows: number): void {
473
+ this.#committedRows = Number.isFinite(rows) ? Math.max(0, Math.trunc(rows)) : 0;
474
+ }
475
+
476
+ getRenderStablePrefixRows(): number {
477
+ const value = Math.min(this.#stableRowsFloor, this.#lines.length);
478
+ this.#stableRowsFloor = this.#lines.length;
479
+ return value;
480
+ }
481
+
99
482
  getNativeScrollbackLiveRegionStart(): number | undefined {
100
483
  return this.#nativeScrollbackLiveRegionStart;
101
484
  }
@@ -104,28 +487,111 @@ export class TranscriptContainer extends Container implements NativeScrollbackLi
104
487
  return this.#nativeScrollbackCommitSafeEnd;
105
488
  }
106
489
 
490
+ getNativeScrollbackSnapshotSafeEnd(): number | undefined {
491
+ return this.#nativeScrollbackSnapshotSafeEnd;
492
+ }
493
+
107
494
  /**
108
- * Retire all frozen snapshots so the next render reflects each block's current
109
- * state. Call at reconciliation checkpoints (prompt submit) where the whole
110
- * transcript is replayed into native scrollback and any drift a frozen block
111
- * accumulated is reconciled.
495
+ * Whether `component` sits below a still-mutating block i.e. inside the
496
+ * live region, where its rows cannot have been committed to native
497
+ * scrollback yet (commits are prefix-only and stop at the first
498
+ * still-live block). Callers that retract ephemeral blocks (IRC cards)
499
+ * must check this: removing a block whose rows may already be in history
500
+ * is an interior deletion of the committed prefix, which the engine can
501
+ * only repair by recommitting everything below it — duplication.
112
502
  */
113
- thaw(): void {
114
- this.#generation++;
503
+ isWithinLiveRegion(component: Component): boolean {
504
+ const index = this.children.indexOf(component);
505
+ if (index < 0) return false;
506
+ for (let i = 0; i < index; i++) {
507
+ if (!isBlockFinalized(this.children[i]!)) return true;
508
+ }
509
+ return false;
115
510
  }
116
511
 
117
- override render(width: number): string[] {
512
+ /**
513
+ * Whether `component` is inside the live (repaintable) region exactly as
514
+ * {@link render} computes it: at/after the first still-mutating block, or
515
+ * the transcript tail when every block has finalized. Unlike
516
+ * {@link isWithinLiveRegion} (strictly below a still-mutating block, i.e.
517
+ * guaranteed-uncommitted), this also counts the trailing block that anchors
518
+ * the live region. Self-animating finalized blocks (a detached task's
519
+ * shimmering progress rows) poll this to stop animating — and settle on
520
+ * static bytes — the moment they sit above the seam, where their rows
521
+ * become commit-eligible native-scrollback history.
522
+ */
523
+ isBlockInLiveRegion(component: Component): boolean {
524
+ const children = this.children;
525
+ const index = children.indexOf(component);
526
+ if (index < 0) return false;
527
+ for (let i = 0; i <= index; i++) {
528
+ if (!isBlockFinalized(children[i]!)) return true;
529
+ }
530
+ // Every block at/before `index` finalized: the live region starts at the
531
+ // first unfinalized block below it, or at the last child when none exists.
532
+ for (let i = index + 1; i < children.length; i++) {
533
+ if (!isBlockFinalized(children[i]!)) return false;
534
+ }
535
+ return index === children.length - 1;
536
+ }
537
+
538
+ /**
539
+ * Render only the bottom `maxRows` rows of the transcript at `width`, walking
540
+ * blocks from the last toward the first and stopping the instant enough rows
541
+ * are collected — blocks above the fold are never rendered. The engine's
542
+ * resize viewport fast path uses this so a drag (a SIGWINCH burst, each event
543
+ * a fresh width that misses every per-width cache) re-lays-out only the
544
+ * handful of visible blocks instead of the whole history every event.
545
+ *
546
+ * State-isolated by contract: touches none of the persistent full-compose
547
+ * fields (#lines, #segments, the per-block diff snapshots, the commit/stable
548
+ * bookkeeping), so the authoritative full render on settle reconciles exactly
549
+ * as if this never ran. Calling each block's render() still warms its own
550
+ * per-width cache, which that settle render then reuses for free.
551
+ *
552
+ * Consecutive visible blocks are joined by exactly one blank separator, the
553
+ * same rule render() applies, so the result equals the bottom of a full
554
+ * render except for an at-most-one-row separator on the topmost included
555
+ * block — a transient discrepancy the settle paint overwrites.
556
+ */
557
+ renderViewportTail(width: number, maxRows: number): readonly string[] {
558
+ width = Math.max(1, width);
559
+ if (maxRows <= 0) return EMPTY_TAIL;
560
+ const collected: (readonly string[])[] = [];
561
+ let total = 0;
562
+ for (let i = this.children.length - 1; i >= 0 && total < maxRows; i--) {
563
+ const contribution = stripPlainBlankEdges(this.children[i]!.render(width));
564
+ if (contribution.length === 0) continue;
565
+ // One blank separator sits between this block and the (already
566
+ // collected) visible block below it.
567
+ if (collected.length > 0) total += 1;
568
+ collected.push(contribution);
569
+ total += contribution.length;
570
+ }
571
+ if (collected.length === 0) return EMPTY_TAIL;
572
+ const rows: string[] = [];
573
+ for (let k = collected.length - 1; k >= 0; k--) {
574
+ if (rows.length > 0) rows.push("");
575
+ const body = collected[k]!;
576
+ for (let j = 0; j < body.length; j++) rows.push(body[j]!);
577
+ }
578
+ return rows.length > maxRows ? rows.slice(rows.length - maxRows) : rows;
579
+ }
580
+
581
+ override render(width: number): readonly string[] {
118
582
  width = Math.max(1, width);
119
583
  this.#nativeScrollbackLiveRegionStart = undefined;
120
584
  this.#nativeScrollbackCommitSafeEnd = undefined;
121
- if (!TERMINAL.eagerEraseScrollbackRisk) return super.render(width);
585
+ this.#nativeScrollbackSnapshotSafeEnd = undefined;
122
586
 
123
587
  const count = this.children.length;
588
+
124
589
  // The live region spans from the earliest still-mutating block through the
125
- // bottom. A block that has not finalized must stay repaintable: out-of-band
126
- // inserts (TTSR/todo cards) can append a finalized block *below* a tool that
127
- // is still awaiting its result, and freezing the tool there would strand its
128
- // committed rows on the mid-stream preview the late result never reaches.
590
+ // bottom. A block that has not finalized must stay below the seam: out-of-
591
+ // band inserts (TTSR/todo cards) can append a finalized block *below* a
592
+ // tool that is still awaiting its result, and committing the tool there
593
+ // would strand its history rows on the mid-stream preview the late result
594
+ // never reaches.
129
595
  let liveStartIndex = count - 1;
130
596
  for (let i = 0; i < count; i++) {
131
597
  if (!isBlockFinalized(this.children[i]!)) {
@@ -133,49 +599,208 @@ export class TranscriptContainer extends Container implements NativeScrollbackLi
133
599
  break;
134
600
  }
135
601
  }
136
- // Blocks at [prevLiveStart, liveStart) just crossed out of the live region;
137
- // recompute them so they freeze at their final content. Everything below
138
- // the lower of the two cutoffs was already frozen last frame and replays.
139
- const replayCutoff = Math.min(liveStartIndex, this.#prevLiveStartIndex);
140
- this.#prevLiveStartIndex = liveStartIndex;
141
-
142
- const lines: string[] = [];
143
- // Tracks whether we are still inside the leading run of append-only live
144
- // blocks. The first non-append-only live block (or a finalized block below
145
- // the live region's start, which cannot happen for a leading run) closes it.
602
+
603
+ const lines = this.#lines;
604
+ const previousSegments = this.#segments;
605
+ const segments: BlockSegment[] = new Array(count);
606
+ // Poisoned until the walk completes: a block render throwing mid-walk
607
+ // leaves the persistent array half-rebuilt, and the next render must
608
+ // not trust stale segments against it. Restored at the end.
609
+ this.#segments = EMPTY_SEGMENTS;
610
+ const stableFloorBefore = this.#stableRowsFloor;
611
+ this.#stableRowsFloor = 0;
612
+ // Stability requires the same width and, per segment, the same block at
613
+ // the same offset returning the same array reference. The first
614
+ // divergence truncates the persistent array there; everything after
615
+ // re-pushes.
616
+ let chainStable = this.#renderWidth === width;
617
+ this.#renderWidth = width;
618
+ // Entry-unstable (width change): the divergence truncation inside the
619
+ // loop only fires on a stable→unstable transition, so reset the
620
+ // persistent array here to keep the `!chainStable ⇒ lines.length === row`
621
+ // invariant — otherwise re-pushed rows land after the stale frame.
622
+ if (!chainStable) lines.length = 0;
623
+
624
+ // Tracks whether we are still inside the leading run of commit-safe live
625
+ // blocks. The first still-live volatile block closes it, but rendering
626
+ // continues so lower blocks remain visible.
146
627
  let commitSafeOpen = true;
628
+ // The live-region start is recorded at the first visible row at/after
629
+ // liveStartIndex; empty leading blocks (or a separator) must not claim it
630
+ // early.
631
+ let liveRecorded = false;
632
+ // Frame row cursor: rows emitted (reused or pushed) so far.
633
+ let row = 0;
634
+ let stableRows = 0;
147
635
  for (let i = 0; i < count; i++) {
148
636
  const child = this.children[i]! as Component & SnapshotCarrier;
149
- if (i >= liveStartIndex) {
150
- if (i === liveStartIndex) this.#nativeScrollbackLiveRegionStart = lines.length;
637
+
638
+ // This child's contribution: its current render with plain-blank
639
+ // top/bottom edges stripped (the container owns inter-block gaps).
640
+ // Finalized blocks wholly inside committed native scrollback can reuse
641
+ // their previous contribution without calling render(): those rows are
642
+ // immutable terminal history for the current width/generation. Blocks
643
+ // outside committed history still render normally so late results,
644
+ // post-finalize re-layouts, and expand toggles remain visible.
645
+ const previousSnapshot = child[kSnapshot];
646
+ const previous = previousSegments[i];
647
+ const finalized = isBlockFinalized(child);
648
+ const version = getBlockVersion(child);
649
+ const committedReusable =
650
+ previous !== undefined &&
651
+ previous.component === child &&
652
+ previous.width === width &&
653
+ previous.generation === this.#generation &&
654
+ previous.startRow === row &&
655
+ previous.startRow + previous.rowCount <= this.#committedRows &&
656
+ finalized &&
657
+ // Only replay bytes that were themselves produced by a finalized
658
+ // render: a block finalizing between frames may have changed content
659
+ // while its rows were already committed via the append-only live
660
+ // path, so the first post-transition frame must render. Defense in
661
+ // depth on the transcript side — the TUI commit policy should keep
662
+ // that window closed, but the safety must not live there alone.
663
+ previous.finalized &&
664
+ // Post-finalize mutations (inline error restore, late tool images)
665
+ // bump the block version; a mismatch forces a real render so the
666
+ // committed-prefix audit can observe and re-anchor the change.
667
+ previous.version === version;
668
+ const raw = committedReusable ? previous.rawRef : child.render(width);
669
+ const reusable =
670
+ committedReusable ||
671
+ (previous !== undefined &&
672
+ previous.component === child &&
673
+ previous.rawRef === raw &&
674
+ previous.width === width &&
675
+ previous.generation === this.#generation);
676
+ const contribution = reusable ? previous.contribution : stripPlainBlankEdges(raw);
677
+ let liveCommitState: LiveCommitState | undefined;
678
+ // Provisional live renders (commit-unstable blocks) never feed the
679
+ // promotion machinery: their settled-looking rows are replaced
680
+ // wholesale on finalize, so offering them would commit a stale
681
+ // preview the result render can only duplicate, never erase.
682
+ if (i >= liveStartIndex && !finalized && isBlockCommitStable(child)) {
683
+ liveCommitState = deriveLiveCommitState(previousSnapshot, contribution, width, this.#generation);
684
+ }
685
+ // Cache the latest contribution as the next frame's diff input.
686
+ child[kSnapshot] = {
687
+ width,
688
+ lines: contribution,
689
+ generation: this.#generation,
690
+ appendOnly: liveCommitState?.appendOnly ?? false,
691
+ volatileCooldown: liveCommitState?.volatileCooldown ?? 0,
692
+ stablePrefixLength: liveCommitState?.stablePrefixLength ?? 0,
693
+ candidatePrefixLength: liveCommitState?.candidatePrefixLength ?? 0,
694
+ candidatePrefixAge: liveCommitState?.candidatePrefixAge ?? 0,
695
+ rewriteFloor: liveCommitState?.rewriteFloor ?? Number.POSITIVE_INFINITY,
696
+ };
697
+
698
+ // Empty (or stripped-to-nothing) children contribute nothing and never
699
+ // affect spacing or the live-region offsets. An empty still-live child
700
+ // still closes the commit-safe run: if it later gains rows, it pushes
701
+ // everything below it.
702
+ if (contribution.length === 0) {
703
+ if (i >= liveStartIndex && commitSafeOpen && !finalized) commitSafeOpen = false;
704
+ if (chainStable && !(reusable && previous.rowCount === 0 && previous.startRow === row)) {
705
+ chainStable = false;
706
+ lines.length = row;
707
+ }
708
+ if (chainStable) stableRows = row;
709
+ segments[i] = {
710
+ component: child,
711
+ rawRef: raw,
712
+ contribution,
713
+ width,
714
+ generation: this.#generation,
715
+ startRow: row,
716
+ rowCount: 0,
717
+ sep: 0,
718
+ finalized,
719
+ version,
720
+ };
721
+ continue;
722
+ }
723
+
724
+ // Every block is separated from preceding visible content by exactly one
725
+ // blank row — skipped when it opens the transcript or the prior row is
726
+ // already a plain blank (a fragment's own trailing pad), never doubling.
727
+ // `lines[row - 1]` is valid in both modes: reused rows are still present
728
+ // in the persistent array, re-pushed rows were just written.
729
+ const sep = row > 0 && !isPlainBlank(lines[row - 1]!) ? 1 : 0;
730
+
731
+ // The separator before the first live block stays in the committed
732
+ // prefix (it is deterministic once the prior block's body is settled),
733
+ // so the live region begins at the block's first content row.
734
+ if (!liveRecorded && i >= liveStartIndex) {
735
+ this.#nativeScrollbackLiveRegionStart = row + sep;
736
+ liveRecorded = true;
737
+ }
738
+
739
+ const rowCount = sep + contribution.length;
740
+ const stable = chainStable && reusable && previous.startRow === row && previous.sep === sep;
741
+ if (stable) {
742
+ stableRows = row + rowCount;
151
743
  } else {
152
- const snapshot = child[kSnapshot];
153
- // Replay a frozen block's last live render. A stale generation
154
- // (post-thaw) or width mismatch (resize, explicit rebuild) recomputes
155
- // instead, as does a block that was still live last frame (i >= cutoff).
156
- if (i < replayCutoff && snapshot && snapshot.generation === this.#generation && snapshot.width === width) {
157
- lines.push(...snapshot.lines);
158
- continue;
744
+ if (chainStable) {
745
+ chainStable = false;
746
+ lines.length = row;
159
747
  }
748
+ if (sep) lines.push("");
749
+ for (let j = 0; j < contribution.length; j++) lines.push(contribution[j]!);
160
750
  }
161
- const rendered = child.render(width);
162
- // Extend the commit-safe boundary through each leading append-only live
163
- // block. `lines.length` here is this block's start offset; the boundary
164
- // runs to the end of its rendered rows. The first volatile live block
165
- // closes the run so its mutable rows stay deferred.
751
+
752
+ const blockStart = row + sep;
166
753
  if (i >= liveStartIndex && commitSafeOpen) {
167
- if (isBlockAppendOnly(child)) {
168
- this.#nativeScrollbackCommitSafeEnd = lines.length + rendered.length;
169
- } else {
170
- commitSafeOpen = false;
754
+ const safeLength = finalized ? contribution.length : (liveCommitState?.safeLength ?? 0);
755
+ if (safeLength > 0) {
756
+ this.#nativeScrollbackCommitSafeEnd = blockStart + safeLength;
757
+ }
758
+ // Durable snapshot end: a commit-stable block's whole body is durable
759
+ // content — its scrolled-off rows are permanent even while interior
760
+ // rows re-lay-out (a streaming table re-aligning columns), so the
761
+ // engine must commit their snapshot on scroll-off rather than drop it.
762
+ // Finalized blocks are wholly durable; provisional (commit-unstable)
763
+ // blocks offer nothing beyond their byte-stable safe length.
764
+ const snapshotLength = finalized || isBlockCommitStable(child) ? contribution.length : safeLength;
765
+ if (snapshotLength > 0) {
766
+ this.#nativeScrollbackSnapshotSafeEnd = blockStart + snapshotLength;
171
767
  }
768
+ // A finalized, fully safe block may let the contiguous safe run extend
769
+ // into blocks rendered below it. A still-live block keeps pushing lower
770
+ // rows around as it grows, so the run closes there.
771
+ if (!(finalized && safeLength >= contribution.length)) commitSafeOpen = false;
172
772
  }
173
- // Cache every block's latest render. While a block is in the live region
174
- // this keeps its snapshot current; on the frame it crosses out, the
175
- // recompute above refreshes it to the final state before it freezes.
176
- child[kSnapshot] = { width, lines: rendered, generation: this.#generation };
177
- lines.push(...rendered);
773
+
774
+ segments[i] = {
775
+ component: child,
776
+ rawRef: raw,
777
+ contribution,
778
+ width,
779
+ generation: this.#generation,
780
+ startRow: row,
781
+ rowCount,
782
+ sep,
783
+ finalized,
784
+ version,
785
+ };
786
+ row += rowCount;
178
787
  }
788
+ // Trailing shrink: blocks removed from the tail leave stale rows behind
789
+ // when every surviving segment was reused.
790
+ if (lines.length !== row) lines.length = row;
791
+ this.#segments = segments;
792
+ this.#stableRowsFloor = Math.min(stableFloorBefore, stableRows, row);
179
793
  return lines;
180
794
  }
181
795
  }
796
+
797
+ /**
798
+ * Groups a run of sibling rows (an IRC card's header + body, a file-mention
799
+ * list, a bordered command/version panel) into a single transcript child so the
800
+ * container spaces it as one block — one blank line above, none injected between
801
+ * its rows. Without this wrapper the rows would be top-level children and the
802
+ * container would put a blank line between each (and inside any border box).
803
+ * It is a plain {@link Container}; the named subclass documents intent and makes
804
+ * every manual block grouping greppable.
805
+ */
806
+ export class TranscriptBlock extends Container {}