@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,17 +1,28 @@
1
1
  import type { ThinkingLevel } from "@prometheus-ai/agent-core";
2
2
  import type { Effort } from "@prometheus-ai/ai";
3
+ import type { ShapeTarget } from "@prometheus-ai/snapcompact";
3
4
  import {
5
+ type Component,
4
6
  Container,
7
+ extractPrintableText,
8
+ fuzzyRank,
9
+ getKeybindings,
10
+ getSettingItemFilterText,
11
+ type ImageBudget,
5
12
  Input,
6
13
  matchesKey,
14
+ parseSgrMouse,
7
15
  type SelectItem,
8
16
  SelectList,
9
17
  type SettingItem,
10
18
  SettingsList,
19
+ type SgrMouseEvent,
11
20
  Spacer,
12
21
  type Tab,
13
22
  TabBar,
14
23
  Text,
24
+ truncateToWidth,
25
+ visibleWidth,
15
26
  } from "@prometheus-ai/tui";
16
27
  import { getDefault, type SettingPath, settings } from "../../config/settings";
17
28
  import type {
@@ -22,12 +33,12 @@ import type {
22
33
  } from "../../config/settings-schema";
23
34
  import { SETTING_TABS, TAB_METADATA } from "../../config/settings-schema";
24
35
  import { getCurrentThemeName, getSelectListTheme, getSettingsListTheme, theme } from "../../modes/theme/theme";
25
- import { matchesAppInterrupt } from "../../modes/utils/keybinding-matchers";
26
36
  import { AUTO_THINKING, type ConfiguredThinkingLevel } from "../../thinking";
27
37
  import { getTabBarTheme } from "../shared";
28
- import { DynamicBorder } from "./dynamic-border";
38
+ import { bottomBorder, divider, row, topBorder } from "./overlay-box";
29
39
  import { handleInputOrEscape, PluginSettingsComponent } from "./plugin-settings";
30
- import { getSettingsForTab, type SettingDef } from "./settings-defs";
40
+ import { getSettingDef, getSettingsForTab, type SettingDef } from "./settings-defs";
41
+ import { SnapcompactShapePreview } from "./snapcompact-shape-preview";
31
42
  import { getPreset } from "./status-line/presets";
32
43
 
33
44
  /**
@@ -59,8 +70,6 @@ class TextInputSubmenu extends Container {
59
70
  this.#input = new Input();
60
71
  if (currentValue) {
61
72
  this.#input.setValue(currentValue);
62
- // Move cursor to end of pre-filled value (ctrl+e = cursorLineEnd).
63
- this.#input.handleInput("\x05");
64
73
  }
65
74
  this.#input.onSubmit = value => {
66
75
  this.onSubmit(value); // empty string clears the setting
@@ -79,6 +88,8 @@ class SelectSubmenu extends Container {
79
88
  #selectList: SelectList;
80
89
  #previewText: Text | null = null;
81
90
  #previewUpdateRequestId: number = 0;
91
+ #selectListLineOffset = 0;
92
+ #selectListLineCount = 0;
82
93
 
83
94
  constructor(
84
95
  title: string,
@@ -89,6 +100,7 @@ class SelectSubmenu extends Container {
89
100
  onCancel: () => void,
90
101
  onSelectionChange?: (value: string) => void | Promise<void>,
91
102
  private readonly getPreview?: () => string,
103
+ footer?: Component,
92
104
  ) {
93
105
  super();
94
106
 
@@ -150,6 +162,13 @@ class SelectSubmenu extends Container {
150
162
  // Hint
151
163
  this.addChild(new Spacer(1));
152
164
  this.addChild(new Text(theme.fg("dim", " Enter to select · Esc to go back"), 0, 0));
165
+
166
+ // Footer (e.g. the snapcompact shape preview) below the interactive rows,
167
+ // so the list never shifts while browsing.
168
+ if (footer) {
169
+ this.addChild(new Spacer(1));
170
+ this.addChild(footer);
171
+ }
153
172
  }
154
173
 
155
174
  #updatePreview(): void {
@@ -158,19 +177,73 @@ class SelectSubmenu extends Container {
158
177
  }
159
178
  }
160
179
 
180
+ /**
181
+ * Concatenate children like Container.render, recording where the select
182
+ * list lands so routed mouse events can be hit-tested against it.
183
+ */
184
+ override render(width: number): readonly string[] {
185
+ const lines: string[] = [];
186
+ for (const child of this.children) {
187
+ const childLines = child.render(Math.max(1, width));
188
+ if (child === this.#selectList) {
189
+ this.#selectListLineOffset = lines.length;
190
+ this.#selectListLineCount = childLines.length;
191
+ }
192
+ lines.push(...childLines);
193
+ }
194
+ return lines;
195
+ }
196
+
197
+ /** Mouse routed from the host: wheel steps, hover lights, click confirms. */
198
+ routeMouse(event: SgrMouseEvent, line: number, _col: number): void {
199
+ if (event.wheel !== null) {
200
+ this.#selectList.handleWheel(event.wheel);
201
+ return;
202
+ }
203
+ const listLine = line - this.#selectListLineOffset;
204
+ const within = listLine >= 0 && listLine < this.#selectListLineCount;
205
+ const index = within ? this.#selectList.hitTest(listLine) : undefined;
206
+ if (event.motion) {
207
+ this.#selectList.setHoverIndex(index ?? null);
208
+ return;
209
+ }
210
+ if (event.leftClick && index !== undefined) {
211
+ this.#selectList.clickItem(index);
212
+ }
213
+ }
214
+
161
215
  handleInput(data: string): void {
162
216
  this.#selectList.handleInput(data);
163
217
  }
164
218
  }
165
219
 
220
+ let cachedSidebarWidth: number | undefined;
221
+ /**
222
+ * Split-sidebar width derived from every group name in the schema (not just
223
+ * the visible tab), so the divider column never moves when switching tabs or
224
+ * when condition-gated groups appear.
225
+ */
226
+ function settingsSidebarWidth(): number {
227
+ if (cachedSidebarWidth === undefined) {
228
+ let nameWidth = 0;
229
+ for (const tab of SETTING_TABS) {
230
+ for (const def of getSettingsForTab(tab)) {
231
+ if (def.group) nameWidth = Math.max(nameWidth, visibleWidth(def.group));
232
+ }
233
+ }
234
+ cachedSidebarWidth = Math.min(22, nameWidth) + 4;
235
+ }
236
+ return cachedSidebarWidth;
237
+ }
238
+
166
239
  function getSettingsTabs(): Tab[] {
167
240
  return [
168
241
  ...SETTING_TABS.map(id => {
169
242
  const meta = TAB_METADATA[id];
170
243
  const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
171
- return { id, label: `${icon} ${meta.label}` };
244
+ return { id, label: `${icon} ${meta.label}`, short: icon };
172
245
  }),
173
- { id: "plugins", label: `${theme.icon.package} Plugins` },
246
+ { id: "plugins", label: `${theme.icon.package} Plugins`, short: theme.icon.package },
174
247
  ];
175
248
  }
176
249
 
@@ -187,6 +260,12 @@ export interface SettingsRuntimeContext {
187
260
  availableThemes: string[];
188
261
  /** Working directory for plugins tab */
189
262
  cwd: string;
263
+ /** Active model (api + id); resolves what the snapcompact `auto` shape maps to. */
264
+ model?: ShapeTarget;
265
+ /** Shared TUI image budget (graphics ids + transmit-once) for image previews. */
266
+ imageBudget?: ImageBudget;
267
+ /** Schedules a re-render after async preview work completes. */
268
+ requestRender?: () => void;
190
269
  }
191
270
 
192
271
  /** Status line settings subset for preview */
@@ -196,6 +275,7 @@ export interface StatusLinePreviewSettings {
196
275
  rightSegments?: StatusLineSegmentId[];
197
276
  separator?: StatusLineSeparatorStyle;
198
277
  sessionAccent?: boolean;
278
+ transparent?: boolean;
199
279
  }
200
280
 
201
281
  export interface SettingsCallbacks {
@@ -217,72 +297,380 @@ export interface SettingsCallbacks {
217
297
  * Main tabbed settings selector component.
218
298
  * Uses declarative settings definitions from settings-defs.ts.
219
299
  */
220
- export class SettingsSelectorComponent extends Container {
300
+ export class SettingsSelectorComponent implements Component {
221
301
  #tabBar: TabBar;
222
302
  #currentList: SettingsList | null = null;
223
- #currentSubmenu: Container | null = null;
303
+ #searchList: SettingsList | null = null;
224
304
  #pluginComponent: PluginSettingsComponent | null = null;
225
- #statusPreviewContainer: Container | null = null;
226
- #statusPreviewText: Text | null = null;
227
305
  #currentTabId: SettingTab | "plugins" = "appearance";
306
+ #preSearchTabId: SettingTab | "plugins" = "appearance";
307
+ #searchQuery = "";
308
+ /** Single-line editor backing the search banner (cursor, word ops, paste). */
309
+ #searchInput = new Input();
310
+ #searchMatchCount = 0;
311
+ /** First matching item id per tab id, for Tab-key jumps while searching. */
312
+ #searchFirstMatch = new Map<string, string>();
228
313
  #textInputActive = false;
314
+ #hasSectionJump = false;
315
+ // Frame geometry from the last render, for mouse hit-testing (the
316
+ // fullscreen overlay paints from screen row 0, so mouse rows map 1:1).
317
+ #tabRowStart = 0;
318
+ #tabRowCount = 0;
319
+ #contentRowStart = 0;
320
+ #contentRowCount = 0;
229
321
 
230
322
  constructor(
231
323
  private readonly context: SettingsRuntimeContext,
232
324
  private readonly callbacks: SettingsCallbacks,
233
325
  ) {
234
- super();
235
-
236
- // Add top border
237
- this.addChild(new DynamicBorder());
238
-
239
- // Tab bar
240
- this.#tabBar = new TabBar("Settings", getSettingsTabs(), getTabBarTheme());
326
+ // No label prefix (the frame title already says Settings) and no
327
+ // "(tab to cycle)" hint (folded into the footer hint line).
328
+ this.#tabBar = new TabBar("", getSettingsTabs(), getTabBarTheme());
329
+ this.#tabBar.showHint = false;
241
330
  this.#tabBar.onTabChange = () => {
242
- this.#switchToTab(this.#tabBar.getActiveTab().id as SettingTab | "plugins");
331
+ const tabId = this.#tabBar.getActiveTab().id as SettingTab | "plugins";
332
+ if (this.#searchList) {
333
+ // While searching, tabs act as jump targets into the result list.
334
+ const firstId = this.#searchFirstMatch.get(tabId);
335
+ if (firstId) this.#searchList.selectItem(firstId);
336
+ return;
337
+ }
338
+ this.#switchToTab(tabId);
243
339
  };
244
- this.addChild(this.#tabBar);
245
-
246
- // Spacer after tab bar
247
- this.addChild(new Spacer(1));
248
340
 
249
341
  // Initialize with first tab
250
342
  this.#switchToTab("appearance");
343
+ }
251
344
 
252
- // Add bottom border
253
- this.addChild(new DynamicBorder());
345
+ invalidate(): void {
346
+ this.#tabBar.invalidate();
347
+ this.#currentList?.invalidate();
348
+ this.#searchList?.invalidate();
349
+ this.#pluginComponent?.invalidate();
350
+ }
351
+
352
+ /** Swap the active content (per-tab list, search list, or plugins). */
353
+ #setContent(build: () => void): void {
354
+ this.#currentList = null;
355
+ this.#searchList = null;
356
+ this.#pluginComponent = null;
357
+ build();
254
358
  }
255
359
 
256
360
  #switchToTab(tabId: SettingTab | "plugins"): void {
257
361
  this.#currentTabId = tabId;
362
+ this.#setContent(() => {
363
+ if (tabId === "plugins") {
364
+ this.#showPluginsTab();
365
+ } else {
366
+ this.#showSettingsTab(tabId);
367
+ }
368
+ });
369
+ }
258
370
 
259
- // Remove current content
260
- if (this.#currentList) {
261
- this.removeChild(this.#currentList);
262
- this.#currentList = null;
371
+ #footerHintText(): string {
372
+ if (this.#searchList) {
373
+ return "Enter to change · Tab to jump tabs · Esc to exit search";
263
374
  }
264
- if (this.#pluginComponent) {
265
- this.removeChild(this.#pluginComponent);
266
- this.#pluginComponent = null;
375
+ if (this.#currentTabId === "plugins") {
376
+ return "Tab to switch tabs · Esc to close";
267
377
  }
268
- if (this.#statusPreviewContainer) {
269
- this.removeChild(this.#statusPreviewContainer);
270
- this.#statusPreviewContainer = null;
271
- this.#statusPreviewText = null;
378
+ if (this.#currentList?.sectionFocused) {
379
+ return "↑/↓ to jump sections · Tab/Enter to settings · ←/→ to switch tabs · Esc to close";
272
380
  }
381
+ const nav = this.#hasSectionJump ? "Tab to jump sections · ←/→ to switch tabs" : "Tab to switch tabs";
382
+ return `Enter/Space to change · ${nav} · Type to search · Esc to close`;
383
+ }
273
384
 
274
- // Remove bottom border temporarily
275
- const bottomBorder = this.children[this.children.length - 1];
276
- this.removeChild(bottomBorder);
385
+ /** Single-line search banner: accent icon, editable query with live cursor, right-aligned match count. */
386
+ #renderSearchBanner(width: number): string {
387
+ const icon = theme.symbol("icon.search");
388
+ const countText = this.#searchMatchCount === 1 ? "1 match" : `${this.#searchMatchCount} matches`;
389
+ const rightWidth = visibleWidth(countText) + 1; // trailing margin
390
+ const prefix = ` ${theme.fg("accent", icon)} `;
391
+ // The input pads itself to exactly this width and keeps the cursor in view.
392
+ const inputWidth = Math.max(4, width - visibleWidth(prefix) - rightWidth - 1);
393
+ const inputLine = this.#searchInput.render(inputWidth)[0] ?? "";
394
+ const count = theme.fg(this.#searchMatchCount > 0 ? "dim" : "warning", countText);
395
+ return truncateToWidth(`${prefix}${theme.bold(inputLine)} ${count} `, width);
396
+ }
277
397
 
278
- if (tabId === "plugins") {
279
- this.#showPluginsTab();
398
+ /**
399
+ * Fullscreen frame: title border, tab row, divider, optional search banner,
400
+ * the active content sized to fill the terminal, the appearance preview,
401
+ * then a footer hint pinned above the bottom border.
402
+ */
403
+ render(width: number): readonly string[] {
404
+ const height = Math.max(14, process.stdout.rows || 40);
405
+ const innerWidth = Math.max(1, width - 4);
406
+
407
+ const tabLines = this.#tabBar.render(innerWidth);
408
+ const searching = this.#searchList !== null;
409
+ const showPreview = !searching && this.#currentTabId === "appearance";
410
+ const previewLines = showPreview ? ["", theme.fg("muted", "Preview:"), this.#getStatusPreviewString()] : [];
411
+
412
+ // Fixed chrome: top border, tabs, divider, [search row], divider, hint, bottom border.
413
+ const fixedRows = 1 + tabLines.length + 1 + (searching ? 1 : 0) + 1 + 1 + 1;
414
+ const contentRows = Math.max(7, height - fixedRows - previewLines.length);
415
+
416
+ const list = this.#searchList ?? this.#currentList;
417
+ let contentLines: readonly string[];
418
+ if (list) {
419
+ // SettingsList pads itself to viewport + blank + 3 description rows.
420
+ list.setMaxVisible(contentRows - 4);
421
+ contentLines = list.render(innerWidth);
422
+ } else if (this.#pluginComponent) {
423
+ contentLines = this.#pluginComponent.render(innerWidth);
280
424
  } else {
281
- this.#showSettingsTab(tabId);
425
+ contentLines = [];
426
+ }
427
+
428
+ const out: string[] = [];
429
+ out.push(topBorder(width, "Settings"));
430
+ this.#tabRowStart = out.length;
431
+ this.#tabRowCount = tabLines.length;
432
+ for (const line of tabLines) {
433
+ out.push(row(line, width));
434
+ }
435
+ out.push(divider(width));
436
+ if (searching) {
437
+ out.push(row(this.#renderSearchBanner(innerWidth), width));
438
+ }
439
+ this.#contentRowStart = out.length;
440
+ this.#contentRowCount = contentRows;
441
+ for (let i = 0; i < contentRows; i++) {
442
+ out.push(row(contentLines[i] ?? "", width));
443
+ }
444
+ for (const line of previewLines) {
445
+ out.push(row(line, width));
446
+ }
447
+ out.push(divider(width));
448
+ out.push(row(theme.fg("dim", this.#footerHintText()), width));
449
+ out.push(bottomBorder(width));
450
+ return out;
451
+ }
452
+
453
+ /**
454
+ * Route an SGR mouse report against the frame geometry of the last render.
455
+ * Wheel scrolls the focused list, motion drives the hover highlights (tabs
456
+ * and rows), and a left click activates: tabs switch (or jump, while
457
+ * searching), a row click selects, and a click on the already-selected row
458
+ * activates it (toggle / open submenu).
459
+ */
460
+ #handleMouse(data: string): boolean {
461
+ const event = parseSgrMouse(data);
462
+ if (!event) return false;
463
+
464
+ const list = this.#searchList ?? this.#currentList;
465
+ // row() insets content by two columns (border + space).
466
+ const innerCol = event.col - 2;
467
+ const contentLine = event.row - this.#contentRowStart;
468
+
469
+ // An open submenu owns the pointer: wheel, hover, and clicks route into
470
+ // it (text-input submenus ignore routed events).
471
+ if (list?.hasOpenSubmenu()) {
472
+ list.routeSubmenuMouse(event, contentLine, innerCol);
473
+ return true;
474
+ }
475
+
476
+ if (event.wheel !== null) {
477
+ list?.handleWheel(event.wheel);
478
+ return true;
479
+ }
480
+
481
+ const tabLine = event.row - this.#tabRowStart;
482
+ const overTabs = tabLine >= 0 && tabLine < this.#tabRowCount;
483
+ const overContent = contentLine >= 0 && contentLine < this.#contentRowCount;
484
+
485
+ if (event.motion) {
486
+ const hovered = overTabs ? this.#tabBar.tabAt(tabLine, innerCol) : undefined;
487
+ this.#tabBar.setHoverTab(hovered && !hovered.muted ? hovered.id : null);
488
+ // hoverTest: never light up pane rows while the pointer is on the
489
+ // sidebar — only rows the pointer is actually on.
490
+ list?.setHoverItem(overContent ? (list.hoverTest(contentLine, innerCol) ?? null) : null);
491
+ return true;
492
+ }
493
+ if (!event.leftClick) return true;
494
+
495
+ if (overTabs) {
496
+ const tab = this.#tabBar.tabAt(tabLine, innerCol);
497
+ if (tab) this.#tabBar.selectTab(tab.id);
498
+ return true;
499
+ }
500
+ if (overContent && list) {
501
+ const id = list.hitTest(contentLine, innerCol);
502
+ if (id !== undefined) {
503
+ const wasSelected = list.getSelectedItem()?.id === id;
504
+ list.selectItem(id);
505
+ // Click-again activates: toggle booleans, open submenus.
506
+ if (wasSelected) list.handleInput("\n");
507
+ }
282
508
  }
509
+ return true;
510
+ }
283
511
 
284
- // Re-add bottom border
285
- this.addChild(bottomBorder);
512
+ // ═══════════════════════════════════════════════════════════════════════
513
+ // Global search (type-to-search across every tab)
514
+ // ═══════════════════════════════════════════════════════════════════════
515
+
516
+ /** Swap the tab content for the global search result list. */
517
+ #startSearch(initialQuery: string): void {
518
+ this.#preSearchTabId = this.#currentTabId;
519
+ this.#searchInput = new Input();
520
+ this.#searchInput.prompt = "";
521
+ this.#searchInput.setValue(initialQuery);
522
+ const list = new SettingsList(
523
+ [],
524
+ 10,
525
+ getSettingsListTheme(),
526
+ (id, newValue) => this.#onSearchSettingChange(id as SettingPath, newValue),
527
+ () => this.callbacks.onCancel(),
528
+ {
529
+ layout: "flat",
530
+ typeToSearch: false,
531
+ emptyText: "No matching settings",
532
+ hint: "",
533
+ },
534
+ );
535
+ // Keep the footer tab highlight on the tab owning the selected result.
536
+ list.onSelectionChange = item => this.#syncTabBarToSelection(item);
537
+ this.#setContent(() => {
538
+ this.#searchList = list;
539
+ });
540
+ this.#setSearchQuery(initialQuery);
541
+ }
542
+
543
+ /**
544
+ * Recompute matches across every settings tab. Results render as one flat
545
+ * list with a heading row per tab; the footer tab bar reorders to show
546
+ * matching tabs (with counts) first and the rest muted at the end.
547
+ */
548
+ #setSearchQuery(query: string): void {
549
+ if (!this.#searchList) return;
550
+ if (query.length === 0) {
551
+ this.#endSearch(false);
552
+ return;
553
+ }
554
+ this.#searchQuery = query;
555
+
556
+ const counts = new Map<SettingTab, number>();
557
+ const items: SettingItem[] = [];
558
+ const tabResults: { tab: SettingTab; matched: SettingItem[]; bestScore: number; order: number }[] = [];
559
+ this.#searchFirstMatch.clear();
560
+ let total = 0;
561
+ for (const tab of SETTING_TABS) {
562
+ const candidates: SettingItem[] = [];
563
+ for (const def of getSettingsForTab(tab)) {
564
+ const item = this.#defToItem(def);
565
+ if (item) candidates.push(item);
566
+ }
567
+ const ranked = fuzzyRank(candidates, query, getSettingItemFilterText);
568
+ const matched = ranked.map(result => result.item);
569
+ counts.set(tab, matched.length);
570
+ if (matched.length === 0) continue;
571
+ total += matched.length;
572
+ tabResults.push({
573
+ tab,
574
+ matched,
575
+ bestScore: ranked[0]?.score ?? 0,
576
+ order: SETTING_TABS.indexOf(tab),
577
+ });
578
+ }
579
+
580
+ tabResults.sort((a, b) => a.bestScore - b.bestScore || a.order - b.order);
581
+ for (const result of tabResults) {
582
+ const meta = TAB_METADATA[result.tab];
583
+ items.push({
584
+ id: `__tab:${result.tab}`,
585
+ label: `${theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0])} ${meta.label}`,
586
+ currentValue: "",
587
+ heading: true,
588
+ });
589
+ this.#searchFirstMatch.set(result.tab, result.matched[0]?.id ?? "");
590
+ items.push(...result.matched);
591
+ }
592
+
593
+ this.#searchList.setItems(items);
594
+ this.#searchMatchCount = total;
595
+ this.#tabBar.setTabs(
596
+ this.#buildSearchTabs(
597
+ counts,
598
+ tabResults.map(result => result.tab),
599
+ ),
600
+ );
601
+ this.#syncTabBarToSelection(this.#searchList.getSelectedItem());
602
+ }
603
+
604
+ /**
605
+ * Leave search mode. With `jumpToSelection`, land on the tab containing
606
+ * the selected result and keep it selected there — search doubles as
607
+ * navigation. Otherwise restore the pre-search tab.
608
+ */
609
+ #endSearch(jumpToSelection: boolean): void {
610
+ if (!this.#searchList) return;
611
+ const selected = jumpToSelection ? this.#searchList.getSelectedItem() : undefined;
612
+ const selectedDef = selected ? getSettingDef(selected.id as SettingPath) : undefined;
613
+ const targetTab: SettingTab | "plugins" = selectedDef?.tab ?? this.#preSearchTabId;
614
+
615
+ this.#searchQuery = "";
616
+ this.#searchFirstMatch.clear();
617
+ this.#searchMatchCount = 0;
618
+ this.#tabBar.setTabs(getSettingsTabs(), targetTab);
619
+ this.#switchToTab(targetTab);
620
+ if (selectedDef) {
621
+ this.#currentList?.selectItem(selectedDef.path);
622
+ }
623
+ }
624
+
625
+ /** Matching tabs first (counts attached), ordered by best result score; the rest stay muted at the end. */
626
+ #buildSearchTabs(counts: Map<SettingTab, number>, matchedTabOrder: readonly SettingTab[]): Tab[] {
627
+ const matched: Tab[] = [];
628
+ const empty: Tab[] = [];
629
+ const matchedIds = new Set<SettingTab>(matchedTabOrder);
630
+ for (const id of matchedTabOrder) {
631
+ const meta = TAB_METADATA[id];
632
+ const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
633
+ const count = counts.get(id) ?? 0;
634
+ if (count > 0) {
635
+ matched.push({ id, label: `${icon} ${meta.label} (${count})`, short: `${icon} ${count}` });
636
+ }
637
+ }
638
+ for (const id of SETTING_TABS) {
639
+ if (matchedIds.has(id)) continue;
640
+ const meta = TAB_METADATA[id];
641
+ const icon = theme.symbol(meta.icon as Parameters<typeof theme.symbol>[0]);
642
+ empty.push({ id, label: `${icon} ${meta.label}`, short: icon, muted: true });
643
+ }
644
+ // Plugins hosts its own UI; it is not part of the schema-backed search.
645
+ empty.push({ id: "plugins", label: `${theme.icon.package} Plugins`, short: theme.icon.package, muted: true });
646
+ return [...matched, ...empty];
647
+ }
648
+
649
+ #syncTabBarToSelection(item: SettingItem | undefined): void {
650
+ if (!this.#searchList || !item) return;
651
+ const def = getSettingDef(item.id as SettingPath);
652
+ if (def) this.#tabBar.setActiveById(def.tab);
653
+ }
654
+
655
+ /** Value-change dispatch for the search result list (any tab's setting). */
656
+ #onSearchSettingChange(path: SettingPath, newValue: string): void {
657
+ const def = getSettingDef(path);
658
+ if (!def) return;
659
+ if (def.type === "boolean") {
660
+ const boolValue = newValue === "true";
661
+ settings.set(path, boolValue as never);
662
+ this.callbacks.onChange(path, boolValue);
663
+ } else if (def.type === "enum") {
664
+ settings.set(path, newValue as never);
665
+ this.callbacks.onChange(path, newValue);
666
+ }
667
+ // Submenu/text types already persisted inside their own done callbacks.
668
+ if (def.tab === "appearance") {
669
+ this.#triggerStatusLinePreview();
670
+ }
671
+ // Values feed the searchable text and condition gates may have flipped:
672
+ // recompute results in place (selection is preserved by item id).
673
+ this.#setSearchQuery(this.#searchQuery);
286
674
  }
287
675
 
288
676
  /**
@@ -387,6 +775,7 @@ export class SettingsSelectorComponent extends Container {
387
775
  // Preview handlers
388
776
  let onPreview: ((value: string) => void | Promise<void>) | undefined;
389
777
  let onPreviewCancel: (() => void) | undefined;
778
+ let footer: Component | undefined;
390
779
 
391
780
  const activeThemeBeforePreview = getCurrentThemeName() ?? currentValue;
392
781
  if (def.path === "theme.dark" || def.path === "theme.light") {
@@ -407,7 +796,6 @@ export class SettingsSelectorComponent extends Container {
407
796
  rightSegments: presetDef.rightSegments,
408
797
  separator: presetDef.separator,
409
798
  });
410
- this.#updateStatusPreview();
411
799
  };
412
800
  onPreviewCancel = () => {
413
801
  const currentPreset = settings.get("statusLine.preset");
@@ -418,18 +806,23 @@ export class SettingsSelectorComponent extends Container {
418
806
  rightSegments: presetDef.rightSegments,
419
807
  separator: presetDef.separator,
420
808
  });
421
- this.#updateStatusPreview();
422
809
  };
423
810
  } else if (def.path === "statusLine.separator") {
424
811
  onPreview = value => {
425
812
  this.callbacks.onStatusLinePreview?.({ separator: value as StatusLineSeparatorStyle });
426
- this.#updateStatusPreview();
427
813
  };
428
814
  onPreviewCancel = () => {
429
815
  const separator = settings.get("statusLine.separator");
430
816
  this.callbacks.onStatusLinePreview?.({ separator });
431
- this.#updateStatusPreview();
432
817
  };
818
+ } else if (def.path === "snapcompact.shape") {
819
+ const shapePreview = new SnapcompactShapePreview(currentValue, {
820
+ model: this.context.model,
821
+ imageBudget: this.context.imageBudget,
822
+ requestRender: this.context.requestRender,
823
+ });
824
+ onPreview = value => shapePreview.setValue(value);
825
+ footer = shapePreview;
433
826
  }
434
827
 
435
828
  // Provide status line preview for theme selection
@@ -452,6 +845,7 @@ export class SettingsSelectorComponent extends Container {
452
845
  },
453
846
  onPreview,
454
847
  getPreview,
848
+ footer,
455
849
  );
456
850
  }
457
851
 
@@ -508,19 +902,15 @@ export class SettingsSelectorComponent extends Container {
508
902
  #showSettingsTab(tabId: SettingTab): void {
509
903
  const defs = getSettingsForTab(tabId);
510
904
 
511
- // Add status line preview for appearance tab
512
- if (tabId === "appearance") {
513
- this.#statusPreviewContainer = new Container();
514
- this.#statusPreviewContainer.addChild(new Spacer(1));
515
- this.#statusPreviewContainer.addChild(new Text(theme.fg("muted", "Preview:"), 0, 0));
516
- this.#statusPreviewText = new Text(this.#getStatusPreviewString(), 0, 0);
517
- this.#statusPreviewContainer.addChild(this.#statusPreviewText);
518
- this.#statusPreviewContainer.addChild(new Spacer(1));
519
- this.addChild(this.#statusPreviewContainer);
520
- }
905
+ const items = this.#buildItemsForDefs(defs);
906
+ // Mirror SettingsList's section detection (leading ungrouped items form
907
+ // an implicit section) so the footer hint only advertises PgUp/PgDn
908
+ // when the jump actually changes sections.
909
+ const sectionCount = items.filter(item => item.heading).length + (items.length > 0 && !items[0].heading ? 1 : 0);
910
+ this.#hasSectionJump = sectionCount >= 2;
521
911
 
522
912
  this.#currentList = new SettingsList(
523
- this.#buildItemsForDefs(defs),
913
+ items,
524
914
  10,
525
915
  getSettingsListTheme(),
526
916
  (id, newValue) => {
@@ -549,17 +939,28 @@ export class SettingsSelectorComponent extends Container {
549
939
  this.#refreshCurrentTabItems(defs);
550
940
  },
551
941
  () => this.callbacks.onCancel(),
942
+ // The selector owns type-to-search and the footer hint; pin the
943
+ // split sidebar width so the divider never jumps between tabs.
944
+ { typeToSearch: false, hint: "", sidebarWidth: settingsSidebarWidth() },
552
945
  );
553
-
554
- this.addChild(this.#currentList);
555
946
  }
556
947
 
557
- /** Map a definition list to UI items, dropping any whose condition is false. */
948
+ /**
949
+ * Map a definition list to UI items, dropping any whose condition is false.
950
+ * Inserts a heading row whenever the (group-sorted) definition list crosses
951
+ * into a new group; groups whose items are all condition-hidden emit none.
952
+ */
558
953
  #buildItemsForDefs(defs: SettingDef[]): SettingItem[] {
559
954
  const items: SettingItem[] = [];
955
+ let lastGroup: string | undefined;
560
956
  for (const def of defs) {
561
957
  const item = this.#defToItem(def);
562
- if (item) items.push(item);
958
+ if (!item) continue;
959
+ if (def.group && def.group !== lastGroup) {
960
+ items.push({ id: `__heading:${def.group}`, label: def.group, currentValue: "", heading: true });
961
+ lastGroup = def.group;
962
+ }
963
+ items.push(item);
563
964
  }
564
965
  return items;
565
966
  }
@@ -590,18 +991,9 @@ export class SettingsSelectorComponent extends Container {
590
991
  rightSegments: settings.get("statusLine.rightSegments"),
591
992
  separator: settings.get("statusLine.separator"),
592
993
  sessionAccent: settings.get("statusLine.sessionAccent"),
994
+ transparent: settings.get("statusLine.transparent"),
593
995
  };
594
996
  this.callbacks.onStatusLinePreview?.(statusLineSettings);
595
- this.#updateStatusPreview();
596
- }
597
-
598
- /**
599
- * Update the inline status preview text.
600
- */
601
- #updateStatusPreview(): void {
602
- if (this.#statusPreviewText && this.#currentTabId === "appearance") {
603
- this.#statusPreviewText.setText(this.#getStatusPreviewString());
604
- }
605
997
  }
606
998
 
607
999
  #showPluginsTab(): void {
@@ -609,39 +1001,95 @@ export class SettingsSelectorComponent extends Container {
609
1001
  onClose: () => this.callbacks.onCancel(),
610
1002
  onPluginChanged: () => this.callbacks.onPluginsChanged?.(),
611
1003
  });
612
- this.addChild(this.#pluginComponent);
613
- }
614
-
615
- getFocusComponent(): SettingsList | PluginSettingsComponent {
616
- // Return the current focusable component - one of these will always be set
617
- return (this.#currentList || this.#pluginComponent)!;
618
1004
  }
619
1005
 
620
1006
  handleInput(data: string): void {
621
- // Handle tab switching but NOT when a text input is active, since
622
- // arrow keys must reach the cursor and Tab must not switch tabs.
623
- if (
624
- !this.#textInputActive &&
625
- (matchesKey(data, "tab") ||
626
- matchesKey(data, "shift+tab") ||
627
- matchesKey(data, "left") ||
628
- matchesKey(data, "right"))
629
- ) {
630
- this.#tabBar.handleInput(data);
1007
+ // SGR mouse reports (the fullscreen overlay enables tracking).
1008
+ if (data.startsWith("\x1b[<")) {
1009
+ this.#handleMouse(data);
1010
+ return;
1011
+ }
1012
+
1013
+ // Text-input submenus take every byte: arrow keys must reach the
1014
+ // cursor and Tab must not switch tabs.
1015
+ if (this.#textInputActive) {
1016
+ (this.#searchList ?? this.#currentList)?.handleInput(data);
1017
+ return;
1018
+ }
1019
+
1020
+ const activeList = this.#searchList ?? this.#currentList;
1021
+
1022
+ // An open submenu owns input entirely — Tab/arrows/typing belong to it.
1023
+ if (activeList?.hasOpenSubmenu()) {
1024
+ activeList.handleInput(data);
1025
+ return;
1026
+ }
1027
+
1028
+ if (this.#searchList) {
1029
+ this.#handleSearchModeInput(data, this.#searchList);
631
1030
  return;
632
1031
  }
633
1032
 
634
- // Escape at top level cancels
635
- if (matchesAppInterrupt(data) && !this.#currentSubmenu) {
636
- this.callbacks.onCancel();
1033
+ // Tab toggles keyboard focus between section headings and setting rows
1034
+ // (fast section hopping); tabs without sections keep Tab switching tabs.
1035
+ if (matchesKey(data, "tab") || matchesKey(data, "shift+tab")) {
1036
+ if (this.#currentList?.hasSectionFocusTargets()) {
1037
+ this.#currentList.toggleSectionFocus();
1038
+ return;
1039
+ }
1040
+ this.#tabBar.handleInput(data);
1041
+ return;
1042
+ }
1043
+ if (matchesKey(data, "left") || matchesKey(data, "right")) {
1044
+ this.#tabBar.handleInput(data);
637
1045
  return;
638
1046
  }
639
1047
 
640
- // Pass to current content
1048
+ // Printable characters start a search across every settings tab. The
1049
+ // plugins tab keeps its own local filtering instead.
1050
+ if (this.#currentTabId !== "plugins") {
1051
+ const printable = extractPrintableText(data);
1052
+ if (printable !== undefined && printable.trim().length > 0) {
1053
+ this.#startSearch(printable);
1054
+ return;
1055
+ }
1056
+ }
1057
+
641
1058
  if (this.#currentList) {
642
1059
  this.#currentList.handleInput(data);
643
1060
  } else if (this.#pluginComponent) {
644
1061
  this.#pluginComponent.handleInput(data);
645
1062
  }
646
1063
  }
1064
+
1065
+ #handleSearchModeInput(data: string, list: SettingsList): void {
1066
+ const kb = getKeybindings();
1067
+ if (kb.matches(data, "tui.select.cancel")) {
1068
+ // Exit search, landing on the tab of the selected result.
1069
+ this.#endSearch(true);
1070
+ return;
1071
+ }
1072
+ if (matchesKey(data, "tab") || matchesKey(data, "shift+tab")) {
1073
+ // Jump between tabs that have matches (muted tabs are skipped).
1074
+ this.#tabBar.handleInput(data);
1075
+ return;
1076
+ }
1077
+ // Selection, paging, and activation stay with the result list.
1078
+ if (
1079
+ kb.matches(data, "tui.select.up") ||
1080
+ kb.matches(data, "tui.select.down") ||
1081
+ kb.matches(data, "tui.select.pageUp") ||
1082
+ kb.matches(data, "tui.select.pageDown") ||
1083
+ kb.matches(data, "tui.select.confirm") ||
1084
+ data === "\n"
1085
+ ) {
1086
+ list.handleInput(data);
1087
+ return;
1088
+ }
1089
+ // Everything else edits the query like a regular single-line editor:
1090
+ // cursor movement, word ops, kill ring, undo, paste.
1091
+ this.#searchInput.handleInput(data);
1092
+ const value = this.#searchInput.getValue();
1093
+ if (value !== this.#searchQuery) this.#setSearchQuery(value);
1094
+ }
647
1095
  }