@prometheus-ai/agent 0.5.4 → 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 (1145) hide show
  1. package/CHANGELOG.md +30 -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/grievances-cli.d.ts +1 -1
  37. package/dist/types/cli/list-models.d.ts +6 -14
  38. package/dist/types/cli/models-cli.d.ts +49 -0
  39. package/dist/types/cli/session-picker.d.ts +1 -1
  40. package/dist/types/cli/setup-cli.d.ts +1 -1
  41. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  42. package/dist/types/cli/startup-cwd.d.ts +2 -0
  43. package/dist/types/cli/update-cli.d.ts +13 -40
  44. package/dist/types/cli/usage-cli.d.ts +81 -0
  45. package/dist/types/cli-commands.d.ts +12 -0
  46. package/dist/types/collab/crypto.d.ts +7 -0
  47. package/dist/types/collab/guest.d.ts +37 -0
  48. package/dist/types/collab/host.d.ts +29 -0
  49. package/dist/types/collab/protocol.d.ts +119 -0
  50. package/dist/types/collab/relay-client.d.ts +22 -0
  51. package/dist/types/commands/bench.d.ts +29 -0
  52. package/dist/types/commands/gallery.d.ts +47 -0
  53. package/dist/types/commands/install.d.ts +1 -1
  54. package/dist/types/commands/join.d.ts +12 -0
  55. package/dist/types/commands/launch.d.ts +8 -4
  56. package/dist/types/commands/models.d.ts +33 -0
  57. package/dist/types/commands/read.d.ts +1 -1
  58. package/dist/types/commands/say.d.ts +24 -0
  59. package/dist/types/commands/token.d.ts +25 -0
  60. package/dist/types/commands/usage.d.ts +34 -0
  61. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  62. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  63. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  64. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  65. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  66. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  67. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  68. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  69. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  70. package/dist/types/commit/analysis/conventional.d.ts +2 -2
  71. package/dist/types/commit/analysis/summary.d.ts +2 -2
  72. package/dist/types/commit/changelog/generate.d.ts +3 -3
  73. package/dist/types/commit/changelog/index.d.ts +2 -2
  74. package/dist/types/commit/map-reduce/index.d.ts +3 -3
  75. package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
  76. package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
  77. package/dist/types/commit/model-selection.d.ts +10 -4
  78. package/dist/types/commit/shared-llm.d.ts +1 -1
  79. package/dist/types/config/api-key-resolver.d.ts +43 -0
  80. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  81. package/dist/types/config/keybindings.d.ts +12 -7
  82. package/dist/types/config/model-discovery.d.ts +57 -0
  83. package/dist/types/config/model-equivalence.d.ts +1 -1
  84. package/dist/types/config/model-registry.d.ts +86 -222
  85. package/dist/types/config/model-resolver.d.ts +43 -12
  86. package/dist/types/config/model-roles.d.ts +29 -0
  87. package/dist/types/config/models-config-schema.d.ts +536 -43
  88. package/dist/types/config/models-config.d.ts +391 -0
  89. package/dist/types/config/settings-schema.d.ts +1202 -324
  90. package/dist/types/config/settings.d.ts +15 -3
  91. package/dist/types/dap/config.d.ts +14 -1
  92. package/dist/types/dap/types.d.ts +10 -0
  93. package/dist/types/debug/log-viewer.d.ts +1 -1
  94. package/dist/types/debug/raw-sse.d.ts +1 -1
  95. package/dist/types/debug/report-bundle.d.ts +3 -0
  96. package/dist/types/debug/terminal-info.d.ts +0 -1
  97. package/dist/types/discovery/at-imports.d.ts +15 -0
  98. package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
  99. package/dist/types/edit/diff.d.ts +3 -2
  100. package/dist/types/edit/file-snapshot-store.d.ts +18 -0
  101. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  102. package/dist/types/edit/hashline/params.d.ts +1 -1
  103. package/dist/types/edit/index.d.ts +0 -1
  104. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  105. package/dist/types/edit/modes/patch.d.ts +1 -1
  106. package/dist/types/edit/modes/replace.d.ts +1 -1
  107. package/dist/types/edit/renderer.d.ts +1 -0
  108. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  109. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  110. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  111. package/dist/types/eval/backend.d.ts +7 -2
  112. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  113. package/dist/types/eval/completion-bridge.d.ts +25 -0
  114. package/dist/types/eval/idle-timeout.d.ts +1 -5
  115. package/dist/types/eval/js/context-manager.d.ts +1 -0
  116. package/dist/types/eval/js/executor.d.ts +2 -0
  117. package/dist/types/eval/js/index.d.ts +1 -1
  118. package/dist/types/eval/js/shared/helpers.d.ts +7 -1
  119. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  120. package/dist/types/eval/js/shared/runtime.d.ts +6 -1
  121. package/dist/types/eval/js/worker-protocol.d.ts +6 -0
  122. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  123. package/dist/types/eval/py/executor.d.ts +12 -0
  124. package/dist/types/eval/py/index.d.ts +1 -1
  125. package/dist/types/eval/py/kernel.d.ts +6 -1
  126. package/dist/types/eval/py/runtime.d.ts +9 -0
  127. package/dist/types/exa/index.d.ts +1 -19
  128. package/dist/types/exa/mcp-client.d.ts +10 -3
  129. package/dist/types/exa/types.d.ts +0 -83
  130. package/dist/types/exec/bash-executor.d.ts +7 -0
  131. package/dist/types/export/custom-share.d.ts +1 -2
  132. package/dist/types/export/html/index.d.ts +39 -0
  133. package/dist/types/export/html/template-js.d.ts +2 -0
  134. package/dist/types/export/share.d.ts +61 -0
  135. package/dist/types/export/ttsr.d.ts +14 -0
  136. package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
  137. package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
  138. package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
  139. package/dist/types/extensibility/extensions/index.d.ts +1 -1
  140. package/dist/types/extensibility/extensions/loader.d.ts +20 -1
  141. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  142. package/dist/types/extensibility/extensions/runner.d.ts +5 -2
  143. package/dist/types/extensibility/extensions/types.d.ts +72 -11
  144. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  145. package/dist/types/extensibility/hooks/loader.d.ts +1 -1
  146. package/dist/types/extensibility/hooks/types.d.ts +11 -5
  147. package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
  148. package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
  149. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  150. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  151. package/dist/types/extensibility/plugins/types.d.ts +2 -2
  152. package/dist/types/extensibility/shared-events.d.ts +3 -3
  153. package/dist/types/extensibility/skills.d.ts +10 -0
  154. package/dist/types/extensibility/slash-commands.d.ts +1 -11
  155. package/dist/types/goals/guided-setup.d.ts +18 -0
  156. package/dist/types/goals/state.d.ts +1 -1
  157. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  158. package/dist/types/hindsight/mental-models.d.ts +17 -8
  159. package/dist/types/hindsight/transcript.d.ts +1 -1
  160. package/dist/types/index.d.ts +5 -0
  161. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  162. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  163. package/dist/types/internal-urls/index.d.ts +1 -0
  164. package/dist/types/internal-urls/local-protocol.d.ts +14 -2
  165. package/dist/types/internal-urls/types.d.ts +1 -1
  166. package/dist/types/irc/bus.d.ts +79 -0
  167. package/dist/types/lib/xai-http.d.ts +1 -1
  168. package/dist/types/lsp/client.d.ts +10 -0
  169. package/dist/types/lsp/config.d.ts +2 -2
  170. package/dist/types/lsp/edits.d.ts +9 -0
  171. package/dist/types/lsp/format-options.d.ts +32 -0
  172. package/dist/types/lsp/index.d.ts +2 -7
  173. package/dist/types/lsp/types.d.ts +13 -1
  174. package/dist/types/lsp/utils.d.ts +6 -2
  175. package/dist/types/main.d.ts +23 -8
  176. package/dist/types/mcp/json-rpc.d.ts +5 -0
  177. package/dist/types/mcp/manager.d.ts +8 -0
  178. package/dist/types/mcp/oauth-discovery.d.ts +6 -1
  179. package/dist/types/mcp/oauth-flow.d.ts +13 -3
  180. package/dist/types/mcp/startup-events.d.ts +11 -0
  181. package/dist/types/mcp/tool-bridge.d.ts +2 -0
  182. package/dist/types/mcp/transports/stdio.d.ts +13 -0
  183. package/dist/types/mcp/types.d.ts +2 -0
  184. package/dist/types/memories/index.d.ts +7 -15
  185. package/dist/types/memories/storage.d.ts +0 -10
  186. package/dist/types/memory-backend/index.d.ts +3 -1
  187. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  188. package/dist/types/memory-backend/resolve.d.ts +2 -2
  189. package/dist/types/memory-backend/runtime.d.ts +4 -0
  190. package/dist/types/memory-backend/types.d.ts +67 -2
  191. package/dist/types/mnemopi/config.d.ts +31 -1
  192. package/dist/types/mnemopi/state.d.ts +40 -2
  193. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  194. package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
  195. package/dist/types/modes/components/agent-hub.d.ts +82 -0
  196. package/dist/types/modes/components/assistant-message.d.ts +5 -12
  197. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  198. package/dist/types/modes/components/chat-block.d.ts +64 -0
  199. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  200. package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
  201. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  202. package/dist/types/modes/components/custom-editor.d.ts +49 -2
  203. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  204. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  205. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  206. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  207. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  208. package/dist/types/modes/components/footer.d.ts +1 -1
  209. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  210. package/dist/types/modes/components/hook-input.d.ts +4 -0
  211. package/dist/types/modes/components/hook-selector.d.ts +5 -7
  212. package/dist/types/modes/components/index.d.ts +1 -0
  213. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  214. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  215. package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
  216. package/dist/types/modes/components/model-selector.d.ts +1 -1
  217. package/dist/types/modes/components/oauth-selector.d.ts +10 -1
  218. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  219. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  220. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  221. package/dist/types/modes/components/read-tool-group.d.ts +8 -0
  222. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  223. package/dist/types/modes/components/segment-track.d.ts +11 -6
  224. package/dist/types/modes/components/session-selector.d.ts +18 -9
  225. package/dist/types/modes/components/settings-defs.d.ts +9 -2
  226. package/dist/types/modes/components/settings-selector.d.ts +17 -4
  227. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  228. package/dist/types/modes/components/status-line/component.d.ts +61 -0
  229. package/dist/types/modes/components/status-line/index.d.ts +1 -0
  230. package/dist/types/modes/components/status-line/types.d.ts +47 -3
  231. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  232. package/dist/types/modes/components/tool-execution.d.ts +49 -2
  233. package/dist/types/modes/components/transcript-container.d.ts +76 -26
  234. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  235. package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
  236. package/dist/types/modes/components/usage-row.d.ts +3 -0
  237. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  238. package/dist/types/modes/components/user-message.d.ts +2 -1
  239. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  240. package/dist/types/modes/components/welcome.d.ts +12 -2
  241. package/dist/types/modes/controllers/command-controller.d.ts +3 -2
  242. package/dist/types/modes/controllers/event-controller.d.ts +7 -1
  243. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
  244. package/dist/types/modes/controllers/input-controller.d.ts +25 -3
  245. package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
  246. package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
  247. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  248. package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
  249. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  250. package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
  251. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  252. package/dist/types/modes/image-references.d.ts +14 -3
  253. package/dist/types/modes/index.d.ts +8 -7
  254. package/dist/types/modes/interactive-mode.d.ts +92 -16
  255. package/dist/types/modes/magic-keywords.d.ts +14 -2
  256. package/dist/types/modes/markdown-prose.d.ts +1 -1
  257. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  258. package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
  259. package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
  260. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  261. package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
  262. package/dist/types/modes/runtime-init.d.ts +4 -0
  263. package/dist/types/modes/session-observer-registry.d.ts +9 -0
  264. package/dist/types/modes/setup-version.d.ts +11 -0
  265. package/dist/types/modes/setup-wizard/index.d.ts +7 -2
  266. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  267. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
  268. package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
  269. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
  270. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  271. package/dist/types/modes/theme/theme.d.ts +42 -7
  272. package/dist/types/modes/types.d.ts +62 -13
  273. package/dist/types/modes/utils/context-usage.d.ts +6 -1
  274. package/dist/types/modes/utils/copy-targets.d.ts +21 -1
  275. package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
  276. package/dist/types/modes/workflow.d.ts +3 -3
  277. package/dist/types/plan-mode/approved-plan.d.ts +27 -8
  278. package/dist/types/plan-mode/plan-protection.d.ts +4 -4
  279. package/dist/types/registry/agent-lifecycle.d.ts +51 -0
  280. package/dist/types/registry/agent-registry.d.ts +33 -5
  281. package/dist/types/sdk.d.ts +46 -4
  282. package/dist/types/secrets/index.d.ts +1 -1
  283. package/dist/types/secrets/obfuscator.d.ts +9 -3
  284. package/dist/types/session/agent-session.d.ts +136 -66
  285. package/dist/types/session/agent-storage.d.ts +2 -1
  286. package/dist/types/session/auth-broker-config.d.ts +4 -0
  287. package/dist/types/session/auth-storage.d.ts +1 -1
  288. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  289. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  290. package/dist/types/session/messages.d.ts +26 -15
  291. package/dist/types/session/session-context.d.ts +39 -0
  292. package/dist/types/session/session-entries.d.ts +159 -0
  293. package/dist/types/session/session-history-format.d.ts +12 -0
  294. package/dist/types/session/session-listing.d.ts +69 -0
  295. package/dist/types/session/session-loader.d.ts +16 -0
  296. package/dist/types/session/session-manager.d.ts +107 -440
  297. package/dist/types/session/session-migrations.d.ts +12 -0
  298. package/dist/types/session/session-paths.d.ts +25 -0
  299. package/dist/types/session/session-persistence.d.ts +8 -0
  300. package/dist/types/session/session-storage.d.ts +11 -7
  301. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  302. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  303. package/dist/types/session/streaming-output.d.ts +46 -0
  304. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  305. package/dist/types/session/yield-queue.d.ts +10 -1
  306. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  307. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  308. package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
  309. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  310. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  311. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  312. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  313. package/dist/types/slash-commands/types.d.ts +5 -9
  314. package/dist/types/ssh/connection-manager.d.ts +8 -0
  315. package/dist/types/stt/asr-client.d.ts +90 -0
  316. package/dist/types/stt/asr-protocol.d.ts +97 -0
  317. package/dist/types/stt/asr-worker.d.ts +2 -0
  318. package/dist/types/stt/downloader.d.ts +38 -0
  319. package/dist/types/stt/endpointer.d.ts +59 -0
  320. package/dist/types/stt/index.d.ts +5 -1
  321. package/dist/types/stt/models.d.ts +120 -0
  322. package/dist/types/stt/recorder.d.ts +17 -0
  323. package/dist/types/stt/stt-controller.d.ts +6 -0
  324. package/dist/types/stt/transcriber.d.ts +5 -7
  325. package/dist/types/stt/wav.d.ts +29 -0
  326. package/dist/types/system-prompt.d.ts +9 -1
  327. package/dist/types/task/commands.d.ts +1 -1
  328. package/dist/types/task/discovery.d.ts +1 -2
  329. package/dist/types/task/executor.d.ts +61 -2
  330. package/dist/types/task/index.d.ts +37 -6
  331. package/dist/types/task/output-manager.d.ts +0 -7
  332. package/dist/types/task/parallel.d.ts +2 -2
  333. package/dist/types/task/prometheus-command.d.ts +2 -2
  334. package/dist/types/task/render.d.ts +20 -7
  335. package/dist/types/task/repair-args.d.ts +8 -7
  336. package/dist/types/task/types.d.ts +109 -52
  337. package/dist/types/task/worktree.d.ts +2 -0
  338. package/dist/types/telemetry-export.d.ts +2 -2
  339. package/dist/types/thinking.d.ts +4 -0
  340. package/dist/types/tiny/models.d.ts +1 -1
  341. package/dist/types/tiny/title-client.d.ts +12 -1
  342. package/dist/types/tiny/title-protocol.d.ts +1 -0
  343. package/dist/types/tools/archive-reader.d.ts +5 -0
  344. package/dist/types/tools/ask.d.ts +6 -1
  345. package/dist/types/tools/ast-edit.d.ts +4 -1
  346. package/dist/types/tools/ast-grep.d.ts +4 -1
  347. package/dist/types/tools/bash.d.ts +5 -2
  348. package/dist/types/tools/browser/attach.d.ts +4 -4
  349. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  350. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  351. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  352. package/dist/types/tools/browser/registry.d.ts +17 -3
  353. package/dist/types/tools/browser/render.d.ts +2 -0
  354. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  355. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  356. package/dist/types/tools/browser/tab-worker.d.ts +18 -1
  357. package/dist/types/tools/browser.d.ts +3 -1
  358. package/dist/types/tools/checkpoint.d.ts +1 -1
  359. package/dist/types/tools/conflict-detect.d.ts +16 -0
  360. package/dist/types/tools/debug.d.ts +1 -1
  361. package/dist/types/tools/eval-render.d.ts +1 -8
  362. package/dist/types/tools/eval.d.ts +9 -1
  363. package/dist/types/tools/fetch.d.ts +17 -8
  364. package/dist/types/tools/find.d.ts +1 -8
  365. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  366. package/dist/types/tools/gh.d.ts +4 -1
  367. package/dist/types/tools/github-cache.d.ts +19 -0
  368. package/dist/types/tools/grouped-file-output.d.ts +46 -12
  369. package/dist/types/tools/image-gen.d.ts +1 -1
  370. package/dist/types/tools/index.d.ts +89 -8
  371. package/dist/types/tools/inspect-image.d.ts +1 -1
  372. package/dist/types/tools/irc.d.ts +79 -39
  373. package/dist/types/tools/job.d.ts +8 -2
  374. package/dist/types/tools/learn.d.ts +51 -0
  375. package/dist/types/tools/manage-skill.d.ts +40 -0
  376. package/dist/types/tools/memory-edit.d.ts +2 -2
  377. package/dist/types/tools/memory-recall.d.ts +1 -1
  378. package/dist/types/tools/memory-reflect.d.ts +1 -1
  379. package/dist/types/tools/memory-render.d.ts +4 -1
  380. package/dist/types/tools/memory-retain.d.ts +1 -1
  381. package/dist/types/tools/path-utils.d.ts +17 -5
  382. package/dist/types/tools/plan-mode-guard.d.ts +18 -9
  383. package/dist/types/tools/read.d.ts +3 -2
  384. package/dist/types/tools/render-mermaid.d.ts +1 -1
  385. package/dist/types/tools/render-utils.d.ts +47 -27
  386. package/dist/types/tools/renderers.d.ts +10 -2
  387. package/dist/types/tools/report-tool-issue.d.ts +6 -1
  388. package/dist/types/tools/resolve.d.ts +1 -1
  389. package/dist/types/tools/review.d.ts +1 -1
  390. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  391. package/dist/types/tools/search.d.ts +7 -3
  392. package/dist/types/tools/sqlite-reader.d.ts +4 -0
  393. package/dist/types/tools/ssh.d.ts +2 -1
  394. package/dist/types/tools/todo.d.ts +7 -15
  395. package/dist/types/tools/tool-result.d.ts +2 -0
  396. package/dist/types/tools/tool-timeouts.d.ts +1 -1
  397. package/dist/types/tools/tts.d.ts +26 -1
  398. package/dist/types/tools/write.d.ts +6 -3
  399. package/dist/types/tools/yield.d.ts +8 -0
  400. package/dist/types/tts/downloader.d.ts +20 -0
  401. package/dist/types/tts/index.d.ts +8 -0
  402. package/dist/types/tts/models.d.ts +82 -0
  403. package/dist/types/tts/player.d.ts +32 -0
  404. package/dist/types/tts/runtime.d.ts +6 -0
  405. package/dist/types/tts/streaming-player.d.ts +41 -0
  406. package/dist/types/tts/tts-client.d.ts +93 -0
  407. package/dist/types/tts/tts-protocol.d.ts +95 -0
  408. package/dist/types/tts/tts-worker.d.ts +2 -0
  409. package/dist/types/tts/vocalizer.d.ts +41 -0
  410. package/dist/types/tts/wav.d.ts +8 -0
  411. package/dist/types/tui/code-cell.d.ts +0 -2
  412. package/dist/types/tui/hyperlink.d.ts +13 -7
  413. package/dist/types/tui/output-block.d.ts +16 -22
  414. package/dist/types/tui/status-line.d.ts +3 -0
  415. package/dist/types/utils/block-context.d.ts +35 -0
  416. package/dist/types/utils/changelog.d.ts +8 -0
  417. package/dist/types/utils/clipboard.d.ts +4 -3
  418. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  419. package/dist/types/utils/file-mentions.d.ts +7 -0
  420. package/dist/types/utils/git.d.ts +22 -3
  421. package/dist/types/utils/image-loading.d.ts +30 -1
  422. package/dist/types/utils/session-color.d.ts +15 -3
  423. package/dist/types/utils/thinking-display.d.ts +17 -0
  424. package/dist/types/utils/title-generator.d.ts +3 -2
  425. package/dist/types/utils/tool-choice.d.ts +8 -0
  426. package/dist/types/utils/tools-manager.d.ts +2 -1
  427. package/dist/types/web/kagi.d.ts +2 -2
  428. package/dist/types/web/parallel.d.ts +3 -0
  429. package/dist/types/web/scrapers/github.d.ts +22 -0
  430. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  431. package/dist/types/web/scrapers/types.d.ts +12 -0
  432. package/dist/types/web/search/index.d.ts +1 -1
  433. package/dist/types/web/search/providers/anthropic.d.ts +2 -1
  434. package/dist/types/web/search/providers/base.d.ts +2 -1
  435. package/dist/types/web/search/providers/brave.d.ts +2 -1
  436. package/dist/types/web/search/providers/codex.d.ts +2 -1
  437. package/dist/types/web/search/providers/exa.d.ts +2 -1
  438. package/dist/types/web/search/providers/gemini.d.ts +10 -6
  439. package/dist/types/web/search/providers/jina.d.ts +7 -2
  440. package/dist/types/web/search/providers/kagi.d.ts +7 -2
  441. package/dist/types/web/search/providers/kimi.d.ts +7 -2
  442. package/dist/types/web/search/providers/parallel.d.ts +2 -1
  443. package/dist/types/web/search/providers/perplexity.d.ts +10 -2
  444. package/dist/types/web/search/providers/searxng.d.ts +2 -1
  445. package/dist/types/web/search/providers/synthetic.d.ts +7 -3
  446. package/dist/types/web/search/providers/tavily.d.ts +2 -1
  447. package/dist/types/web/search/providers/zai.d.ts +2 -1
  448. package/dist/types/web/search/types.d.ts +1 -1
  449. package/examples/extensions/api-demo.ts +2 -2
  450. package/package.json +41 -15
  451. package/scripts/bench-guard.ts +71 -0
  452. package/scripts/build-binary.ts +24 -25
  453. package/scripts/bundle-dist.ts +97 -0
  454. package/scripts/generate-share-viewer.ts +34 -0
  455. package/scripts/prometheus +42 -0
  456. package/scripts/prometheus.ts +20 -0
  457. package/src/async/index.ts +0 -1
  458. package/src/async/job-manager.ts +106 -3
  459. package/src/auto-thinking/classifier.ts +2 -1
  460. package/src/autolearn/controller.ts +139 -0
  461. package/src/autolearn/managed-skills.ts +257 -0
  462. package/src/autoresearch/dashboard.ts +1 -1
  463. package/src/autoresearch/prompt-setup.md +6 -6
  464. package/src/autoresearch/prompt.md +6 -6
  465. package/src/autoresearch/state.ts +1 -1
  466. package/src/autoresearch/storage.ts +2 -1
  467. package/src/autoresearch/tools/init-experiment.ts +1 -1
  468. package/src/autoresearch/tools/log-experiment.ts +1 -1
  469. package/src/autoresearch/tools/run-experiment.ts +1 -1
  470. package/src/autoresearch/tools/update-notes.ts +1 -1
  471. package/src/autoresearch/types.ts +1 -1
  472. package/src/capability/context-file.ts +0 -14
  473. package/src/capability/fs.ts +10 -0
  474. package/src/capability/index.ts +1 -6
  475. package/src/capability/mcp.ts +1 -0
  476. package/src/capability/rule-buckets.ts +4 -2
  477. package/src/capability/rule.ts +10 -1
  478. package/src/capability/types.ts +0 -4
  479. package/src/cli/args.ts +66 -13
  480. package/src/cli/auth-broker-cli.ts +6 -7
  481. package/src/cli/auth-gateway-cli.ts +8 -9
  482. package/src/cli/bench-cli.ts +437 -0
  483. package/src/cli/claude-trace-cli.ts +28 -50
  484. package/src/cli/completion-gen.ts +28 -28
  485. package/src/cli/dry-balance-cli.ts +56 -23
  486. package/src/cli/gallery-cli.ts +231 -0
  487. package/src/cli/gallery-fixtures/agentic.ts +407 -0
  488. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  489. package/src/cli/gallery-fixtures/edit.ts +194 -0
  490. package/src/cli/gallery-fixtures/fs.ts +220 -0
  491. package/src/cli/gallery-fixtures/index.ts +40 -0
  492. package/src/cli/gallery-fixtures/interaction.ts +49 -0
  493. package/src/cli/gallery-fixtures/memory.ts +81 -0
  494. package/src/cli/gallery-fixtures/misc.ts +250 -0
  495. package/src/cli/gallery-fixtures/search.ts +213 -0
  496. package/src/cli/gallery-fixtures/shell.ts +167 -0
  497. package/src/cli/gallery-fixtures/types.ts +57 -0
  498. package/src/cli/gallery-fixtures/web.ts +158 -0
  499. package/src/cli/gallery-screenshot.ts +279 -0
  500. package/src/cli/grievances-cli.ts +1 -1
  501. package/src/cli/list-models.ts +16 -174
  502. package/src/cli/models-cli.ts +429 -0
  503. package/src/cli/session-picker.ts +2 -1
  504. package/src/cli/setup-cli.ts +148 -47
  505. package/src/cli/setup-model-picker.ts +43 -0
  506. package/src/cli/startup-cwd.ts +68 -0
  507. package/src/cli/update-cli.ts +144 -272
  508. package/src/cli/usage-cli.ts +774 -0
  509. package/src/cli-commands.ts +36 -0
  510. package/src/cli.ts +141 -32
  511. package/src/collab/crypto.ts +63 -0
  512. package/src/collab/guest.ts +451 -0
  513. package/src/collab/host.ts +565 -0
  514. package/src/collab/protocol.ts +241 -0
  515. package/src/collab/relay-client.ts +216 -0
  516. package/src/commands/bench.ts +42 -0
  517. package/src/commands/complete.ts +1 -1
  518. package/src/commands/gallery.ts +52 -0
  519. package/src/commands/install.ts +1 -1
  520. package/src/commands/join.ts +39 -0
  521. package/src/commands/launch.ts +8 -4
  522. package/src/commands/models.ts +61 -0
  523. package/src/commands/read.ts +6 -3
  524. package/src/commands/say.ts +102 -0
  525. package/src/commands/setup.ts +1 -1
  526. package/src/commands/token.ts +89 -0
  527. package/src/commands/usage.ts +43 -0
  528. package/src/commit/agentic/agent.ts +2 -1
  529. package/src/commit/agentic/tools/analyze-file.ts +42 -20
  530. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  531. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  532. package/src/commit/agentic/tools/git-overview.ts +1 -1
  533. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  534. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  535. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  536. package/src/commit/agentic/tools/schemas.ts +1 -1
  537. package/src/commit/agentic/tools/split-commit.ts +9 -2
  538. package/src/commit/analysis/conventional.ts +2 -2
  539. package/src/commit/analysis/summary.ts +3 -3
  540. package/src/commit/changelog/generate.ts +3 -3
  541. package/src/commit/changelog/index.ts +2 -2
  542. package/src/commit/map-reduce/index.ts +3 -3
  543. package/src/commit/map-reduce/map-phase.ts +2 -2
  544. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  545. package/src/commit/model-selection.ts +35 -12
  546. package/src/commit/pipeline.ts +4 -4
  547. package/src/commit/shared-llm.ts +1 -1
  548. package/src/config/api-key-resolver.ts +67 -0
  549. package/src/config/append-only-context-mode.ts +6 -12
  550. package/src/config/keybindings.ts +9 -4
  551. package/src/config/mcp-schema.json +4 -0
  552. package/src/config/model-discovery.ts +574 -0
  553. package/src/config/model-equivalence.ts +5 -4
  554. package/src/config/model-registry.ts +659 -1093
  555. package/src/config/model-resolver.ts +374 -174
  556. package/src/config/model-roles.ts +88 -0
  557. package/src/config/models-config-schema.ts +61 -9
  558. package/src/config/models-config.ts +130 -0
  559. package/src/config/settings-schema.ts +1441 -387
  560. package/src/config/settings.ts +261 -69
  561. package/src/dap/client.ts +138 -53
  562. package/src/dap/config.ts +41 -2
  563. package/src/dap/defaults.json +1 -0
  564. package/src/dap/session.ts +263 -161
  565. package/src/dap/types.ts +10 -0
  566. package/src/debug/index.ts +50 -60
  567. package/src/debug/log-viewer.ts +1 -1
  568. package/src/debug/protocol-probe.ts +1 -1
  569. package/src/debug/raw-sse-buffer.ts +7 -4
  570. package/src/debug/raw-sse.ts +1 -1
  571. package/src/debug/report-bundle.ts +9 -0
  572. package/src/debug/terminal-info.ts +0 -3
  573. package/src/discovery/agents-md.ts +25 -21
  574. package/src/discovery/agents.ts +9 -15
  575. package/src/discovery/at-imports.ts +273 -0
  576. package/src/discovery/builtin-rules/index.ts +4 -0
  577. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  578. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  579. package/src/discovery/builtin.ts +45 -23
  580. package/src/discovery/claude-plugins.ts +44 -5
  581. package/src/discovery/helpers.ts +50 -9
  582. package/src/discovery/prometheus-extension-roots.ts +10 -10
  583. package/src/discovery/prometheus-plugins.ts +10 -10
  584. package/src/edit/diff.ts +191 -4
  585. package/src/edit/file-snapshot-store.ts +34 -1
  586. package/src/edit/hashline/block-resolver.ts +20 -1
  587. package/src/edit/hashline/diff.ts +123 -2
  588. package/src/edit/hashline/execute.ts +60 -4
  589. package/src/edit/hashline/filesystem.ts +2 -1
  590. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  591. package/src/edit/hashline/params.ts +1 -1
  592. package/src/edit/index.ts +47 -18
  593. package/src/edit/modes/apply-patch.ts +1 -1
  594. package/src/edit/modes/patch.ts +59 -3
  595. package/src/edit/modes/replace.ts +58 -24
  596. package/src/edit/notebook.ts +22 -2
  597. package/src/edit/renderer.ts +315 -151
  598. package/src/eval/__tests__/agent-bridge.test.ts +105 -39
  599. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  600. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  601. package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
  602. package/src/eval/__tests__/js-context-manager.test.ts +241 -0
  603. package/src/eval/__tests__/llm-bridge.test.ts +6 -4
  604. package/src/eval/__tests__/shared-executors.test.ts +34 -92
  605. package/src/eval/agent-bridge.ts +39 -23
  606. package/src/eval/backend.ts +15 -2
  607. package/src/eval/bridge-timeout.ts +1 -1
  608. package/src/eval/completion-bridge.ts +203 -0
  609. package/src/eval/idle-timeout.ts +3 -10
  610. package/src/eval/js/context-manager.ts +108 -31
  611. package/src/eval/js/executor.ts +9 -2
  612. package/src/eval/js/index.ts +7 -3
  613. package/src/eval/js/shared/helpers.ts +59 -13
  614. package/src/eval/js/shared/local-module-loader.ts +2 -2
  615. package/src/eval/js/shared/prelude.txt +167 -30
  616. package/src/eval/js/shared/rewrite-imports.ts +58 -34
  617. package/src/eval/js/shared/runtime.ts +24 -16
  618. package/src/eval/js/tool-bridge.ts +4 -0
  619. package/src/eval/js/worker-core.ts +1 -0
  620. package/src/eval/js/worker-entry.ts +6 -0
  621. package/src/eval/js/worker-protocol.ts +6 -0
  622. package/src/eval/llm-bridge.ts +2 -1
  623. package/src/eval/py/__tests__/prelude.test.ts +19 -0
  624. package/src/eval/py/executor.ts +70 -26
  625. package/src/eval/py/index.ts +13 -4
  626. package/src/eval/py/kernel.ts +48 -9
  627. package/src/eval/py/prelude.py +73 -24
  628. package/src/eval/py/runner.py +133 -28
  629. package/src/eval/py/runtime.ts +38 -1
  630. package/src/exa/index.ts +1 -26
  631. package/src/exa/mcp-client.ts +10 -10
  632. package/src/exa/types.ts +0 -97
  633. package/src/exec/bash-executor.ts +104 -7
  634. package/src/export/custom-share.ts +1 -1
  635. package/src/export/html/index.ts +119 -17
  636. package/src/export/html/share-loader.js +102 -0
  637. package/src/export/html/template-js.ts +6 -0
  638. package/src/export/html/template.css +745 -459
  639. package/src/export/html/template.css.d.ts +2 -0
  640. package/src/export/html/template.html +6 -3
  641. package/src/export/html/template.js +277 -891
  642. package/src/export/html/tool-views.generated.d.ts +2 -0
  643. package/src/export/html/tool-views.generated.js +38 -0
  644. package/src/export/share.ts +269 -0
  645. package/src/export/ttsr.ts +122 -1
  646. package/src/extensibility/custom-commands/loader.ts +7 -4
  647. package/src/extensibility/custom-commands/types.ts +9 -4
  648. package/src/extensibility/custom-tools/loader.ts +51 -23
  649. package/src/extensibility/custom-tools/types.ts +16 -8
  650. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  651. package/src/extensibility/extensions/index.ts +1 -0
  652. package/src/extensibility/extensions/loader.ts +70 -20
  653. package/src/extensibility/extensions/model-api.ts +41 -0
  654. package/src/extensibility/extensions/runner.ts +12 -2
  655. package/src/extensibility/extensions/types.ts +83 -11
  656. package/src/extensibility/extensions/wrapper.ts +41 -5
  657. package/src/extensibility/hooks/index.ts +2 -1
  658. package/src/extensibility/hooks/loader.ts +6 -3
  659. package/src/extensibility/hooks/types.ts +11 -5
  660. package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
  661. package/src/extensibility/plugins/doctor.ts +1 -2
  662. package/src/extensibility/plugins/installer.ts +2 -2
  663. package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
  664. package/src/extensibility/plugins/loader.ts +34 -23
  665. package/src/extensibility/plugins/manager.ts +226 -95
  666. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  667. package/src/extensibility/plugins/types.ts +3 -3
  668. package/src/extensibility/shared-events.ts +3 -3
  669. package/src/extensibility/skills.ts +113 -9
  670. package/src/extensibility/slash-commands.ts +1 -97
  671. package/src/goals/guided-setup.ts +133 -0
  672. package/src/goals/state.ts +1 -1
  673. package/src/goals/tools/goal-tool.ts +38 -28
  674. package/src/hindsight/bank.ts +17 -2
  675. package/src/hindsight/client.ts +27 -2
  676. package/src/hindsight/mental-models.ts +59 -12
  677. package/src/hindsight/state.ts +12 -3
  678. package/src/hindsight/transcript.ts +1 -1
  679. package/src/index.ts +5 -0
  680. package/src/internal-urls/artifact-protocol.ts +11 -2
  681. package/src/internal-urls/docs-index.generated.ts +9 -7
  682. package/src/internal-urls/history-protocol.ts +113 -0
  683. package/src/internal-urls/index.ts +1 -0
  684. package/src/internal-urls/issue-pr-protocol.ts +22 -9
  685. package/src/internal-urls/local-protocol.ts +42 -7
  686. package/src/internal-urls/memory-protocol.ts +4 -31
  687. package/src/internal-urls/router.ts +3 -1
  688. package/src/internal-urls/types.ts +1 -1
  689. package/src/irc/bus.ts +303 -0
  690. package/src/lib/xai-http.ts +3 -3
  691. package/src/lsp/client.ts +245 -104
  692. package/src/lsp/clients/biome-client.ts +101 -39
  693. package/src/lsp/clients/lsp-linter-client.ts +2 -10
  694. package/src/lsp/config.ts +15 -5
  695. package/src/lsp/defaults.json +6 -0
  696. package/src/lsp/edits.ts +143 -95
  697. package/src/lsp/format-options.ts +119 -0
  698. package/src/lsp/index.ts +233 -93
  699. package/src/lsp/render.ts +11 -35
  700. package/src/lsp/types.ts +13 -1
  701. package/src/lsp/utils.ts +31 -12
  702. package/src/main.ts +396 -216
  703. package/src/mcp/config-writer.ts +7 -3
  704. package/src/mcp/json-rpc.ts +35 -5
  705. package/src/mcp/manager.ts +31 -16
  706. package/src/mcp/oauth-discovery.ts +34 -4
  707. package/src/mcp/oauth-flow.ts +61 -8
  708. package/src/mcp/render.ts +7 -1
  709. package/src/mcp/startup-events.ts +21 -0
  710. package/src/mcp/tool-bridge.ts +2 -0
  711. package/src/mcp/transports/stdio.ts +224 -4
  712. package/src/mcp/types.ts +2 -0
  713. package/src/memories/index.ts +174 -1128
  714. package/src/memories/storage.ts +2 -41
  715. package/src/memory-backend/index.ts +14 -1
  716. package/src/memory-backend/local-backend.ts +18 -3
  717. package/src/memory-backend/off-backend.ts +9 -0
  718. package/src/memory-backend/resolve.ts +4 -6
  719. package/src/memory-backend/runtime.ts +66 -0
  720. package/src/memory-backend/types.ts +82 -2
  721. package/src/mnemopi/backend.ts +220 -28
  722. package/src/mnemopi/config.ts +138 -33
  723. package/src/mnemopi/state.ts +91 -11
  724. package/src/modes/acp/acp-agent.ts +149 -142
  725. package/src/modes/acp/acp-event-mapper.ts +5 -1
  726. package/src/modes/components/agent-dashboard.ts +17 -11
  727. package/src/modes/components/agent-hub.ts +1346 -0
  728. package/src/modes/components/assistant-message.ts +190 -80
  729. package/src/modes/components/bash-execution.ts +1 -1
  730. package/src/modes/components/btw-panel.ts +5 -1
  731. package/src/modes/components/chat-block.ts +111 -0
  732. package/src/modes/components/collab-prompt-message.ts +30 -0
  733. package/src/modes/components/compaction-summary-message.ts +168 -33
  734. package/src/modes/components/copy-selector.ts +2 -45
  735. package/src/modes/components/custom-editor.test.ts +96 -0
  736. package/src/modes/components/custom-editor.ts +405 -118
  737. package/src/modes/components/custom-message.ts +1 -3
  738. package/src/modes/components/diff.ts +13 -2
  739. package/src/modes/components/dynamic-border.ts +12 -3
  740. package/src/modes/components/execution-shared.ts +1 -2
  741. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  742. package/src/modes/components/extensions/extension-list.ts +1 -1
  743. package/src/modes/components/extensions/inspector-panel.ts +7 -3
  744. package/src/modes/components/extensions/state-manager.ts +36 -41
  745. package/src/modes/components/footer.ts +4 -2
  746. package/src/modes/components/history-search.ts +1 -1
  747. package/src/modes/components/hook-editor.ts +8 -0
  748. package/src/modes/components/hook-input.ts +8 -0
  749. package/src/modes/components/hook-message.ts +1 -3
  750. package/src/modes/components/hook-selector.ts +6 -7
  751. package/src/modes/components/index.ts +1 -0
  752. package/src/modes/components/late-diagnostics-message.ts +60 -0
  753. package/src/modes/components/login-dialog.ts +1 -1
  754. package/src/modes/components/logout-account-selector.ts +130 -0
  755. package/src/modes/components/mcp-add-wizard.ts +14 -1
  756. package/src/modes/components/model-selector.ts +177 -75
  757. package/src/modes/components/oauth-selector.ts +102 -16
  758. package/src/modes/components/overlay-box.ts +108 -0
  759. package/src/modes/components/plan-review-overlay.ts +845 -0
  760. package/src/modes/components/plan-toc.ts +138 -0
  761. package/src/modes/components/plugin-settings.ts +22 -5
  762. package/src/modes/components/read-tool-group.ts +442 -39
  763. package/src/modes/components/reset-usage-selector.ts +161 -0
  764. package/src/modes/components/segment-track.ts +44 -7
  765. package/src/modes/components/session-selector.ts +97 -37
  766. package/src/modes/components/settings-defs.ts +28 -6
  767. package/src/modes/components/settings-selector.ts +541 -93
  768. package/src/modes/components/skill-message.ts +0 -1
  769. package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
  770. package/src/modes/components/snapcompact-shape-preview.ts +193 -0
  771. package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
  772. package/src/modes/components/status-line/index.ts +1 -0
  773. package/src/modes/components/status-line/presets.ts +3 -3
  774. package/src/modes/components/status-line/segments.ts +26 -7
  775. package/src/modes/components/status-line/types.ts +40 -9
  776. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  777. package/src/modes/components/tips.txt +7 -3
  778. package/src/modes/components/todo-reminder.ts +0 -2
  779. package/src/modes/components/tool-execution.ts +236 -103
  780. package/src/modes/components/transcript-container.ts +724 -99
  781. package/src/modes/components/tree-selector.ts +19 -4
  782. package/src/modes/components/ttsr-notification.ts +72 -30
  783. package/src/modes/components/usage-row.ts +18 -0
  784. package/src/modes/components/user-message-selector.ts +1 -1
  785. package/src/modes/components/user-message.ts +28 -12
  786. package/src/modes/components/visual-truncate.ts +1 -1
  787. package/src/modes/components/welcome.ts +80 -22
  788. package/src/modes/controllers/command-controller-shared.ts +7 -6
  789. package/src/modes/controllers/command-controller.ts +210 -180
  790. package/src/modes/controllers/event-controller.ts +352 -142
  791. package/src/modes/controllers/extension-ui-controller.ts +167 -208
  792. package/src/modes/controllers/input-controller.ts +778 -162
  793. package/src/modes/controllers/mcp-command-controller.ts +232 -80
  794. package/src/modes/controllers/selector-controller.ts +284 -145
  795. package/src/modes/controllers/session-focus-controller.ts +112 -0
  796. package/src/modes/controllers/ssh-command-controller.ts +2 -2
  797. package/src/modes/controllers/streaming-reveal.ts +295 -0
  798. package/src/modes/controllers/tan-command-controller.ts +173 -0
  799. package/src/modes/controllers/tool-args-reveal.ts +174 -0
  800. package/src/modes/gradient-highlight.ts +21 -9
  801. package/src/modes/image-references.ts +33 -7
  802. package/src/modes/index.ts +8 -25
  803. package/src/modes/interactive-mode.ts +840 -186
  804. package/src/modes/magic-keywords.ts +28 -6
  805. package/src/modes/markdown-prose.ts +1 -1
  806. package/src/modes/oauth-manual-input.ts +30 -3
  807. package/src/modes/rpc/rpc-client.ts +186 -3
  808. package/src/modes/rpc/rpc-mode.ts +318 -24
  809. package/src/modes/rpc/rpc-subagents.ts +265 -0
  810. package/src/modes/rpc/rpc-types.ts +111 -2
  811. package/src/modes/runtime-init.ts +28 -3
  812. package/src/modes/session-observer-registry.ts +72 -3
  813. package/src/modes/setup-version.ts +11 -0
  814. package/src/modes/setup-wizard/index.ts +16 -4
  815. package/src/modes/setup-wizard/lazy.ts +16 -0
  816. package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
  817. package/src/modes/setup-wizard/scenes/providers.ts +45 -12
  818. package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
  819. package/src/modes/setup-wizard/scenes/splash.ts +1 -1
  820. package/src/modes/setup-wizard/scenes/theme.ts +29 -2
  821. package/src/modes/setup-wizard/scenes/types.ts +11 -2
  822. package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
  823. package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
  824. package/src/modes/shared.ts +2 -0
  825. package/src/modes/theme/defaults/dark-poimandres.json +1 -1
  826. package/src/modes/theme/defaults/light-poimandres.json +1 -1
  827. package/src/modes/theme/shimmer.ts +20 -9
  828. package/src/modes/theme/theme-schema.json +1 -1
  829. package/src/modes/theme/theme.ts +342 -82
  830. package/src/modes/types.ts +60 -18
  831. package/src/modes/utils/context-usage.ts +88 -8
  832. package/src/modes/utils/copy-targets.ts +133 -27
  833. package/src/modes/utils/hotkeys-markdown.ts +3 -2
  834. package/src/modes/utils/ui-helpers.ts +191 -110
  835. package/src/modes/workflow.ts +10 -10
  836. package/src/plan-mode/approved-plan.ts +66 -43
  837. package/src/plan-mode/plan-protection.ts +4 -4
  838. package/src/priority.json +5 -1
  839. package/src/prompts/agents/designer.md +1 -1
  840. package/src/prompts/agents/explore.md +3 -3
  841. package/src/prompts/agents/librarian.md +2 -3
  842. package/src/prompts/agents/oracle.md +2 -2
  843. package/src/prompts/agents/plan.md +6 -6
  844. package/src/prompts/agents/reviewer.md +1 -1
  845. package/src/prompts/agents/task.md +6 -5
  846. package/src/prompts/bench.md +12 -0
  847. package/src/prompts/ci-green-request.md +5 -7
  848. package/src/prompts/goals/goal-budget-limit.md +2 -2
  849. package/src/prompts/goals/goal-continuation.md +4 -4
  850. package/src/prompts/goals/goal-mode-active.md +1 -1
  851. package/src/prompts/goals/guided-goal-interview.md +8 -0
  852. package/src/prompts/goals/guided-goal-system.md +12 -0
  853. package/src/prompts/memories/consolidation.md +2 -7
  854. package/src/prompts/memories/consolidation_system.md +4 -0
  855. package/src/prompts/memories/identity_review.md +2 -2
  856. package/src/prompts/memories/read-path.md +11 -10
  857. package/src/prompts/memories/stage_one_system.md +2 -2
  858. package/src/prompts/review-custom-request.md +1 -1
  859. package/src/prompts/system/agent-creation-architect.md +2 -2
  860. package/src/prompts/system/auto-continue.md +1 -1
  861. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  862. package/src/prompts/system/autolearn-guidance.md +7 -0
  863. package/src/prompts/system/autolearn-nudge.md +3 -0
  864. package/src/prompts/system/background-tan-dispatch.md +8 -0
  865. package/src/prompts/system/btw-user.md +2 -2
  866. package/src/prompts/system/commit-message-system.md +13 -1
  867. package/src/prompts/system/custom-system-prompt.md +1 -1
  868. package/src/prompts/system/eager-task.md +7 -0
  869. package/src/prompts/system/eager-todo.md +11 -6
  870. package/src/prompts/system/empty-stop-retry.md +4 -6
  871. package/src/prompts/system/irc-autoreply.md +6 -0
  872. package/src/prompts/system/irc-incoming.md +3 -4
  873. package/src/prompts/system/manual-continue.md +7 -0
  874. package/src/prompts/system/omfg-user.md +3 -4
  875. package/src/prompts/system/orchestrate-notice.md +10 -10
  876. package/src/prompts/system/personalities/default.md +26 -0
  877. package/src/prompts/system/personalities/friendly.md +17 -0
  878. package/src/prompts/system/personalities/pragmatic.md +15 -0
  879. package/src/prompts/system/plan-mode-active.md +70 -77
  880. package/src/prompts/system/plan-mode-approved.md +1 -1
  881. package/src/prompts/system/plan-mode-subagent.md +4 -5
  882. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  883. package/src/prompts/system/project-prompt.md +2 -2
  884. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  885. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  886. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  887. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  888. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  889. package/src/prompts/system/subagent-system-prompt.md +7 -8
  890. package/src/prompts/system/system-prompt.md +28 -57
  891. package/src/prompts/system/tiny-title-system.md +1 -1
  892. package/src/prompts/system/title-marker-instruction.md +1 -0
  893. package/src/prompts/system/title-system-marker.md +16 -0
  894. package/src/prompts/system/title-system.md +16 -3
  895. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  896. package/src/prompts/system/workflow-notice.md +4 -4
  897. package/src/prompts/tools/ast-edit.md +1 -1
  898. package/src/prompts/tools/ast-grep.md +2 -2
  899. package/src/prompts/tools/bash.md +16 -8
  900. package/src/prompts/tools/browser.md +33 -43
  901. package/src/prompts/tools/debug.md +1 -1
  902. package/src/prompts/tools/eval.md +31 -51
  903. package/src/prompts/tools/find.md +0 -1
  904. package/src/prompts/tools/github.md +8 -7
  905. package/src/prompts/tools/goal.md +1 -1
  906. package/src/prompts/tools/image-gen.md +1 -1
  907. package/src/prompts/tools/inspect-image-system.md +1 -1
  908. package/src/prompts/tools/irc.md +39 -31
  909. package/src/prompts/tools/job.md +2 -1
  910. package/src/prompts/tools/learn.md +7 -0
  911. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  912. package/src/prompts/tools/lsp.md +2 -2
  913. package/src/prompts/tools/manage-skill.md +9 -0
  914. package/src/prompts/tools/memory-edit.md +1 -1
  915. package/src/prompts/tools/patch.md +2 -2
  916. package/src/prompts/tools/read.md +31 -39
  917. package/src/prompts/tools/recall.md +1 -1
  918. package/src/prompts/tools/reflect.md +1 -1
  919. package/src/prompts/tools/render-mermaid.md +2 -2
  920. package/src/prompts/tools/replace.md +4 -10
  921. package/src/prompts/tools/rewind.md +2 -2
  922. package/src/prompts/tools/search-tool-bm25.md +1 -9
  923. package/src/prompts/tools/search.md +0 -1
  924. package/src/prompts/tools/ssh.md +0 -4
  925. package/src/prompts/tools/task-summary.md +5 -16
  926. package/src/prompts/tools/task.md +47 -31
  927. package/src/prompts/tools/todo.md +6 -3
  928. package/src/registry/agent-lifecycle.ts +218 -0
  929. package/src/registry/agent-registry.ts +46 -5
  930. package/src/sdk.ts +692 -219
  931. package/src/secrets/index.ts +8 -1
  932. package/src/secrets/obfuscator.ts +40 -19
  933. package/src/session/agent-session.ts +1577 -806
  934. package/src/session/agent-storage.ts +18 -9
  935. package/src/session/auth-broker-config.ts +30 -1
  936. package/src/session/auth-storage.ts +6 -0
  937. package/src/session/codex-auto-reset.ts +202 -0
  938. package/src/session/history-storage.ts +3 -2
  939. package/src/session/indexed-session-storage.ts +7 -10
  940. package/src/session/messages.ts +59 -95
  941. package/src/session/session-context.ts +352 -0
  942. package/src/session/session-dump-format.ts +12 -3
  943. package/src/session/session-entries.ts +194 -0
  944. package/src/session/session-history-format.ts +246 -0
  945. package/src/session/session-listing.ts +588 -0
  946. package/src/session/session-loader.ts +106 -0
  947. package/src/session/session-manager.ts +1003 -2920
  948. package/src/session/session-migrations.ts +78 -0
  949. package/src/session/session-paths.ts +193 -0
  950. package/src/session/session-persistence.ts +131 -0
  951. package/src/session/session-storage.ts +91 -30
  952. package/src/session/snapcompact-inline.ts +542 -0
  953. package/src/session/snapcompact-savings-journal.ts +113 -0
  954. package/src/session/streaming-output.ts +248 -11
  955. package/src/session/tool-choice-queue.ts +23 -11
  956. package/src/session/yield-queue.ts +20 -2
  957. package/src/slash-commands/acp-builtins.ts +25 -1
  958. package/src/slash-commands/available-commands.ts +105 -0
  959. package/src/slash-commands/builtin-registry.ts +575 -49
  960. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  961. package/src/slash-commands/helpers/context-report.ts +28 -1
  962. package/src/slash-commands/helpers/logout.ts +88 -0
  963. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  964. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  965. package/src/slash-commands/helpers/usage-report.ts +38 -3
  966. package/src/slash-commands/types.ts +5 -9
  967. package/src/ssh/connection-manager.ts +27 -0
  968. package/src/ssh/ssh-executor.ts +60 -4
  969. package/src/stt/asr-client.ts +520 -0
  970. package/src/stt/asr-protocol.ts +65 -0
  971. package/src/stt/asr-worker.ts +790 -0
  972. package/src/stt/downloader.ts +107 -47
  973. package/src/stt/endpointer.ts +259 -0
  974. package/src/stt/index.ts +5 -1
  975. package/src/stt/models.ts +150 -0
  976. package/src/stt/recorder.ts +254 -67
  977. package/src/stt/stt-controller.ts +201 -22
  978. package/src/stt/transcriber.ts +37 -68
  979. package/src/stt/wav.ts +173 -0
  980. package/src/system-prompt.ts +52 -10
  981. package/src/task/agents.ts +3 -4
  982. package/src/task/commands.ts +3 -2
  983. package/src/task/discovery.ts +17 -24
  984. package/src/task/executor.ts +1054 -529
  985. package/src/task/index.ts +862 -757
  986. package/src/task/output-manager.ts +0 -11
  987. package/src/task/parallel.ts +3 -3
  988. package/src/task/prometheus-command.ts +2 -2
  989. package/src/task/render.ts +529 -182
  990. package/src/task/repair-args.ts +21 -9
  991. package/src/task/types.ts +144 -66
  992. package/src/task/worktree.ts +64 -56
  993. package/src/telemetry-export.ts +27 -9
  994. package/src/thinking.ts +9 -7
  995. package/src/tiny/models.ts +2 -2
  996. package/src/tiny/text.ts +5 -1
  997. package/src/tiny/title-client.ts +72 -20
  998. package/src/tiny/title-protocol.ts +1 -1
  999. package/src/tiny/worker.ts +23 -99
  1000. package/src/tool-discovery/tool-index.ts +2 -0
  1001. package/src/tools/archive-reader.ts +94 -2
  1002. package/src/tools/ask.ts +234 -177
  1003. package/src/tools/ast-edit.ts +136 -80
  1004. package/src/tools/ast-grep.ts +41 -45
  1005. package/src/tools/auto-generated-guard.ts +20 -3
  1006. package/src/tools/bash-interactive.ts +28 -8
  1007. package/src/tools/bash.ts +198 -35
  1008. package/src/tools/browser/attach.ts +26 -7
  1009. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  1010. package/src/tools/browser/cmux/rpc.ts +156 -0
  1011. package/src/tools/browser/cmux/socket-client.ts +309 -0
  1012. package/src/tools/browser/launch.ts +11 -2
  1013. package/src/tools/browser/readable.ts +19 -2
  1014. package/src/tools/browser/registry.ts +52 -5
  1015. package/src/tools/browser/render.ts +13 -5
  1016. package/src/tools/browser/tab-protocol.ts +2 -0
  1017. package/src/tools/browser/tab-supervisor.ts +256 -34
  1018. package/src/tools/browser/tab-worker.ts +259 -91
  1019. package/src/tools/browser.ts +44 -2
  1020. package/src/tools/checkpoint.ts +1 -1
  1021. package/src/tools/conflict-detect.ts +50 -4
  1022. package/src/tools/debug.ts +27 -12
  1023. package/src/tools/eval-render.ts +32 -35
  1024. package/src/tools/eval.ts +26 -12
  1025. package/src/tools/fetch.ts +450 -99
  1026. package/src/tools/find.ts +182 -142
  1027. package/src/tools/gh-cache-invalidation.ts +255 -0
  1028. package/src/tools/gh-renderer.ts +104 -51
  1029. package/src/tools/gh.ts +232 -37
  1030. package/src/tools/github-cache.ts +97 -7
  1031. package/src/tools/grouped-file-output.ts +159 -52
  1032. package/src/tools/image-gen.ts +237 -132
  1033. package/src/tools/index.ts +147 -26
  1034. package/src/tools/inspect-image-renderer.ts +74 -45
  1035. package/src/tools/inspect-image.ts +12 -6
  1036. package/src/tools/irc.ts +626 -173
  1037. package/src/tools/job.ts +106 -29
  1038. package/src/tools/learn.ts +144 -0
  1039. package/src/tools/manage-skill.ts +104 -0
  1040. package/src/tools/memory-edit.ts +4 -4
  1041. package/src/tools/memory-recall.ts +7 -9
  1042. package/src/tools/memory-reflect.ts +5 -9
  1043. package/src/tools/memory-render.ts +23 -6
  1044. package/src/tools/memory-retain.ts +4 -4
  1045. package/src/tools/path-utils.ts +102 -48
  1046. package/src/tools/plan-mode-guard.ts +101 -40
  1047. package/src/tools/read.ts +475 -120
  1048. package/src/tools/render-mermaid.ts +1 -1
  1049. package/src/tools/render-utils.ts +132 -76
  1050. package/src/tools/renderers.ts +12 -1
  1051. package/src/tools/report-tool-issue.ts +14 -6
  1052. package/src/tools/resolve.ts +20 -3
  1053. package/src/tools/review.ts +2 -2
  1054. package/src/tools/search-tool-bm25.ts +37 -24
  1055. package/src/tools/search.ts +233 -115
  1056. package/src/tools/sqlite-reader.ts +26 -17
  1057. package/src/tools/ssh.ts +20 -14
  1058. package/src/tools/todo.ts +197 -191
  1059. package/src/tools/tool-result.ts +8 -0
  1060. package/src/tools/tool-timeouts.ts +1 -1
  1061. package/src/tools/tts.ts +205 -74
  1062. package/src/tools/write.ts +291 -155
  1063. package/src/tools/yield.ts +10 -1
  1064. package/src/tts/downloader.ts +64 -0
  1065. package/src/tts/index.ts +8 -0
  1066. package/src/tts/models.ts +137 -0
  1067. package/src/tts/player.ts +137 -0
  1068. package/src/tts/runtime.ts +21 -0
  1069. package/src/tts/streaming-player.ts +266 -0
  1070. package/src/tts/tts-client.ts +647 -0
  1071. package/src/tts/tts-protocol.ts +60 -0
  1072. package/src/tts/tts-worker.ts +505 -0
  1073. package/src/tts/vocalizer.ts +162 -0
  1074. package/src/tts/wav.ts +58 -0
  1075. package/src/tui/code-cell.ts +2 -7
  1076. package/src/tui/hyperlink.ts +40 -26
  1077. package/src/tui/output-block.ts +60 -108
  1078. package/src/tui/status-line.ts +5 -1
  1079. package/src/utils/block-context.ts +312 -0
  1080. package/src/utils/changelog.ts +27 -1
  1081. package/src/utils/clipboard.ts +91 -22
  1082. package/src/utils/commit-message-generator.ts +8 -3
  1083. package/src/utils/enhanced-paste.ts +230 -0
  1084. package/src/utils/file-mentions.ts +3 -1
  1085. package/src/utils/git.ts +315 -15
  1086. package/src/utils/image-loading.ts +65 -4
  1087. package/src/utils/session-color.ts +83 -9
  1088. package/src/utils/thinking-display.ts +37 -0
  1089. package/src/utils/title-generator.ts +73 -10
  1090. package/src/utils/tool-choice.ts +16 -0
  1091. package/src/utils/tools-manager.ts +19 -1
  1092. package/src/web/kagi.ts +28 -26
  1093. package/src/web/parallel.ts +7 -3
  1094. package/src/web/scrapers/arxiv.ts +1 -1
  1095. package/src/web/scrapers/github.ts +351 -3
  1096. package/src/web/scrapers/go-pkg.ts +1 -1
  1097. package/src/web/scrapers/iacr.ts +1 -1
  1098. package/src/web/scrapers/readthedocs.ts +1 -1
  1099. package/src/web/scrapers/twitter.ts +2 -1
  1100. package/src/web/scrapers/types.ts +87 -8
  1101. package/src/web/scrapers/wikipedia.ts +1 -1
  1102. package/src/web/scrapers/youtube.ts +9 -3
  1103. package/src/web/search/index.ts +15 -2
  1104. package/src/web/search/providers/anthropic.ts +62 -21
  1105. package/src/web/search/providers/base.ts +2 -1
  1106. package/src/web/search/providers/brave.ts +5 -2
  1107. package/src/web/search/providers/codex.ts +87 -51
  1108. package/src/web/search/providers/exa.ts +101 -10
  1109. package/src/web/search/providers/gemini.ts +49 -24
  1110. package/src/web/search/providers/jina.ts +15 -5
  1111. package/src/web/search/providers/kagi.ts +9 -2
  1112. package/src/web/search/providers/kimi.ts +45 -20
  1113. package/src/web/search/providers/parallel.ts +39 -24
  1114. package/src/web/search/providers/perplexity.ts +226 -63
  1115. package/src/web/search/providers/searxng.ts +19 -3
  1116. package/src/web/search/providers/synthetic.ts +16 -11
  1117. package/src/web/search/providers/tavily.ts +12 -9
  1118. package/src/web/search/providers/zai.ts +22 -9
  1119. package/src/web/search/render.ts +59 -64
  1120. package/src/web/search/types.ts +5 -1
  1121. package/dist/types/discovery/context-files.d.ts +0 -17
  1122. package/dist/types/exa/factory.d.ts +0 -13
  1123. package/dist/types/exa/render.d.ts +0 -19
  1124. package/dist/types/exa/researcher.d.ts +0 -9
  1125. package/dist/types/exa/search.d.ts +0 -9
  1126. package/dist/types/exa/websets.d.ts +0 -9
  1127. package/dist/types/export/html/template.generated.d.ts +0 -1
  1128. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  1129. package/dist/types/modes/components/status-line.d.ts +0 -77
  1130. package/dist/types/slash-commands/headless-plan.d.ts +0 -3
  1131. package/dist/types/stt/setup.d.ts +0 -18
  1132. package/scripts/generate-template.ts +0 -33
  1133. package/src/discovery/context-files.ts +0 -49
  1134. package/src/exa/factory.ts +0 -60
  1135. package/src/exa/render.ts +0 -244
  1136. package/src/exa/researcher.ts +0 -36
  1137. package/src/exa/search.ts +0 -47
  1138. package/src/exa/websets.ts +0 -248
  1139. package/src/export/html/template.generated.ts +0 -2
  1140. package/src/modes/components/session-observer-overlay.ts +0 -852
  1141. package/src/slash-commands/headless-plan.ts +0 -142
  1142. package/src/stt/setup.ts +0 -52
  1143. package/src/stt/transcribe.py +0 -70
  1144. /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
  1145. /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
@@ -1,27 +1,51 @@
1
1
  /**
2
- * Model resolution, scoping, and initial selection
2
+ * Model resolution, scoping, and initial selection.
3
+ *
4
+ * Layering:
5
+ * - `matchModel` is the single matching engine. Order: exact `provider/id`
6
+ * reference (with variant-alias and OpenRouter routed/date fallbacks) →
7
+ * exact canonical id → exact bare id → retired variant alias →
8
+ * provider-scoped fuzzy → substring with alias-vs-dated pick.
9
+ * - `parseModelPatternWithContext`/`parseModelPattern` layer the selector
10
+ * grammar on top: trailing `:level` thinking suffixes (`splitThinkingSuffix`)
11
+ * and `@upstream` provider routing (`splitUpstreamRouting`).
12
+ * - Everything else (`resolveModelFromString`, `resolveModelOverride*`,
13
+ * `resolveRoleSelection`, `resolveModelScope`, `resolveCliModel`,
14
+ * `findSmolModel`/`findSlowModel`) adapts inputs — roles, settings patterns,
15
+ * CLI flags, scope globs — onto that pipeline.
3
16
  */
4
17
 
5
18
  import { ThinkingLevel } from "@prometheus-ai/agent-core";
6
- import {
7
- type Api,
8
- clampThinkingLevelForModel,
9
- DEFAULT_MODEL_PER_PROVIDER,
10
- type Effort,
11
- type KnownProvider,
12
- type Model,
13
- modelsAreEqual,
14
- } from "@prometheus-ai/ai";
19
+ import type { Api, Effort, KnownProvider, Model, ModelSpec } from "@prometheus-ai/ai";
20
+ import { buildModel } from "@prometheus-ai/catalog/build";
21
+ import { modelMatchesHost } from "@prometheus-ai/catalog/hosts";
22
+ import { buildModelProviderPriorityRank } from "@prometheus-ai/catalog/identity";
23
+ import { stripThinkingVariantToken } from "@prometheus-ai/catalog/identity/family";
24
+ import { clampThinkingLevelForModel } from "@prometheus-ai/catalog/model-thinking";
25
+ import { modelsAreEqual } from "@prometheus-ai/catalog/models";
26
+ import { DEFAULT_MODEL_PER_PROVIDER } from "@prometheus-ai/catalog/provider-models";
27
+ import { resolveBareVariantAlias, resolveVariantAlias } from "@prometheus-ai/catalog/variant-collapse";
15
28
  import { fuzzyMatch } from "@prometheus-ai/tui";
16
29
  import { logger } from "@prometheus-ai/utils";
17
30
  import chalk from "chalk";
18
31
  import MODEL_PRIO from "../priority.json" with { type: "json" };
19
32
  import { parseThinkingLevel, resolveThinkingLevelForModel } from "../thinking";
20
- import { isAuthenticated, kNoAuth, MODEL_ROLE_IDS, type ModelRegistry, type ModelRole } from "./model-registry";
33
+ import { isAuthenticated, kNoAuth, type ModelRegistry } from "./model-registry";
34
+ import { MODEL_ROLE_IDS, type ModelRole } from "./model-roles";
21
35
  import type { Settings } from "./settings";
22
36
 
23
- /** Default model IDs for each known provider */
24
- export const defaultModelPerProvider: Record<KnownProvider, string> = DEFAULT_MODEL_PER_PROVIDER;
37
+ /**
38
+ * Pick the first available model matching a known provider's default id
39
+ * (catalog table order), falling back to the first available model.
40
+ */
41
+ function pickDefaultAvailableModel(availableModels: Model<Api>[]): Model<Api> | undefined {
42
+ for (const provider of Object.keys(DEFAULT_MODEL_PER_PROVIDER) as KnownProvider[]) {
43
+ const defaultId = DEFAULT_MODEL_PER_PROVIDER[provider];
44
+ const match = availableModels.find(m => m.provider === provider && m.id === defaultId);
45
+ if (match) return match;
46
+ }
47
+ return availableModels[0];
48
+ }
25
49
 
26
50
  export interface ScopedModel {
27
51
  model: Model<Api>;
@@ -29,6 +53,22 @@ export interface ScopedModel {
29
53
  explicitThinkingLevel: boolean;
30
54
  }
31
55
 
56
+ /**
57
+ * Split a trailing `:<level>` thinking selector off a model pattern.
58
+ *
59
+ * `level` is set only when the suffix parses as a valid thinking level, in
60
+ * which case `base` has the suffix stripped; otherwise `base` is the input.
61
+ * `minColonIndex` requires the colon to appear strictly after that index —
62
+ * role-alias callers pass `LEGACY_MODEL_ROLE_PREFIX.length` so the base is at
63
+ * least as long as the shortest role prefix.
64
+ */
65
+ function splitThinkingSuffix(pattern: string, minColonIndex = -1): { base: string; level?: ThinkingLevel } {
66
+ const colonIdx = pattern.lastIndexOf(":");
67
+ if (colonIdx <= minColonIndex) return { base: pattern };
68
+ const level = parseThinkingLevel(pattern.slice(colonIdx + 1));
69
+ return level ? { base: pattern.slice(0, colonIdx), level } : { base: pattern };
70
+ }
71
+
32
72
  /**
33
73
  * Parse a model string in "provider/modelId" format.
34
74
  * Returns undefined if the format is invalid.
@@ -41,15 +81,8 @@ export function parseModelString(
41
81
  const id = modelStr.slice(slashIdx + 1);
42
82
  const provider = modelStr.slice(0, slashIdx);
43
83
  // Strip valid thinking level suffix (e.g., "claude-sonnet-4-6:high" -> id "claude-sonnet-4-6", thinkingLevel "high")
44
- const colonIdx = id.lastIndexOf(":");
45
- if (colonIdx !== -1) {
46
- const suffix = id.slice(colonIdx + 1);
47
- const thinkingLevel = parseThinkingLevel(suffix);
48
- if (thinkingLevel) {
49
- return { provider, id: id.slice(0, colonIdx), thinkingLevel };
50
- }
51
- }
52
- return { provider, id };
84
+ const { base, level } = splitThinkingSuffix(id);
85
+ return level ? { provider, id: base, thinkingLevel: level } : { provider, id };
53
86
  }
54
87
 
55
88
  /**
@@ -117,6 +150,45 @@ function cloneModelWithRequestedId(model: Model<Api>, requestedId: string): Mode
117
150
  };
118
151
  }
119
152
 
153
+ const UPSTREAM_ROUTING_SLUG = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
154
+
155
+ /**
156
+ * Split a trailing `@<upstream>` provider-routing selector off a model pattern.
157
+ *
158
+ * `openrouter/z-ai/glm-4.7@cerebras` -> base `openrouter/z-ai/glm-4.7`, upstream
159
+ * `cerebras`. A `:thinking` suffix after the slug is kept on the base
160
+ * (`...@cerebras:high` -> base `...:high`). Returns undefined when there is no
161
+ * `@` or the suffix is not a bare provider slug, so model ids that legitimately
162
+ * contain `@` (`claude-opus-4-8@default`, `workers-ai/@cf/...`) are never split.
163
+ */
164
+ function splitUpstreamRouting(pattern: string): { base: string; upstream: string } | undefined {
165
+ const at = pattern.lastIndexOf("@");
166
+ if (at <= 0) return undefined;
167
+ const rest = pattern.slice(at + 1);
168
+ const colon = rest.indexOf(":");
169
+ const upstream = colon === -1 ? rest : rest.slice(0, colon);
170
+ if (!UPSTREAM_ROUTING_SLUG.test(upstream)) return undefined;
171
+ const trailing = colon === -1 ? "" : rest.slice(colon);
172
+ return { base: pattern.slice(0, at) + trailing, upstream };
173
+ }
174
+
175
+ /** OpenRouter and Vercel AI Gateway are the aggregators that honor per-request upstream routing. */
176
+ function supportsUpstreamRouting(model: Model<Api>): boolean {
177
+ return modelMatchesHost(model, "openrouter") || modelMatchesHost(model, "vercelAIGateway");
178
+ }
179
+
180
+ /** Pin a resolved aggregator model to a single upstream provider via its compat routing block. */
181
+ function applyUpstreamRouting(model: Model<Api>, upstream: string): Model<Api> {
182
+ const aggregatorModel = model as Model<"openai-completions">;
183
+ const routing = { only: [upstream] };
184
+ return buildModel({
185
+ ...model,
186
+ compat: modelMatchesHost(model, "vercelAIGateway")
187
+ ? { ...aggregatorModel.compatConfig, vercelGatewayRouting: routing }
188
+ : { ...aggregatorModel.compatConfig, openRouterRouting: routing },
189
+ } as ModelSpec<Api>);
190
+ }
191
+
120
192
  const kProviderModelIndex = Symbol("model-resolver.providerIndex");
121
193
  type ModelsWithProviderIndex = readonly Model<Api>[] & {
122
194
  [kProviderModelIndex]?: Map<string, Model<Api> | null>;
@@ -159,6 +231,18 @@ export function resolveProviderModelReference(
159
231
  return exact;
160
232
  }
161
233
 
234
+ // Retired effort-tier variant ids resolve to their collapsed logical
235
+ // model: hand-table aliases first, then the `X-thinking` → `X` grammar
236
+ // for auto-derived pairs. Exact lookup above always wins while raw is live.
237
+ const variantAliasId =
238
+ resolveVariantAlias(normalizedProvider, normalizedModelId) ?? stripThinkingVariantToken(normalizedModelId);
239
+ if (variantAliasId) {
240
+ const aliased = index.get(`${normalizedProvider}\u0000${variantAliasId.toLowerCase()}`);
241
+ if (aliased) {
242
+ return aliased;
243
+ }
244
+ }
245
+
162
246
  if (normalizedProvider !== "openrouter") {
163
247
  return undefined;
164
248
  }
@@ -179,7 +263,9 @@ export function resolveProviderModelReference(
179
263
  export interface ModelMatchPreferences {
180
264
  /** Most-recently-used model keys (provider/modelId) to prefer when ambiguous. */
181
265
  usageOrder?: string[];
182
- /** Providers to deprioritize when no recent usage is available. */
266
+ /** Provider precedence used for ambiguous unqualified model patterns. */
267
+ providerOrder?: readonly string[];
268
+ /** Providers to deprioritize when no recent usage or provider priority is available. */
183
269
  deprioritizeProviders?: string[];
184
270
  }
185
271
 
@@ -194,6 +280,7 @@ type RestorableModelRegistry = Pick<ModelRegistry, "getAvailable" | "find" | "ge
194
280
  interface ModelPreferenceContext {
195
281
  modelUsageRank: Map<string, number>;
196
282
  providerUsageRank: Map<string, number>;
283
+ providerPriorityRank: Map<string, number>;
197
284
  deprioritizedProviders: Set<string>;
198
285
  modelOrder: Map<string, number>;
199
286
  }
@@ -215,14 +302,35 @@ function buildPreferenceContext(
215
302
  providerUsageRank.set(parsed.provider, i);
216
303
  }
217
304
  }
218
-
219
- const deprioritizedProviders = new Set(preferences?.deprioritizeProviders ?? ["openrouter"]);
305
+ const providerPriorityRank = buildModelProviderPriorityRank(preferences?.providerOrder);
306
+ const deprioritizedProviders = new Set(preferences?.deprioritizeProviders ?? []);
220
307
  const modelOrder = new Map<string, number>();
221
308
  for (let i = 0; i < availableModels.length; i += 1) {
222
309
  modelOrder.set(formatModelString(availableModels[i]), i);
223
310
  }
224
311
 
225
- return { modelUsageRank, providerUsageRank, deprioritizedProviders, modelOrder };
312
+ return { modelUsageRank, providerUsageRank, providerPriorityRank, deprioritizedProviders, modelOrder };
313
+ }
314
+
315
+ export function getModelMatchPreferences(
316
+ settings?: Partial<Pick<Settings, "get" | "getStorage">>,
317
+ ): ModelMatchPreferences {
318
+ return {
319
+ usageOrder: settings?.getStorage?.()?.getModelUsageOrder(),
320
+ providerOrder: settings?.get?.("modelProviderOrder"),
321
+ };
322
+ }
323
+
324
+ function mergeModelMatchPreferences(
325
+ settings: Settings | undefined,
326
+ preferences: ModelMatchPreferences | undefined,
327
+ ): ModelMatchPreferences {
328
+ const settingsPreferences = getModelMatchPreferences(settings);
329
+ return {
330
+ usageOrder: preferences?.usageOrder ?? settingsPreferences.usageOrder,
331
+ providerOrder: preferences?.providerOrder ?? settingsPreferences.providerOrder,
332
+ deprioritizeProviders: preferences?.deprioritizeProviders,
333
+ };
226
334
  }
227
335
 
228
336
  function pickPreferredModel(candidates: Model<Api>[], context: ModelPreferenceContext): Model<Api> {
@@ -236,6 +344,12 @@ function pickPreferredModel(candidates: Model<Api>[], context: ModelPreferenceCo
236
344
  return (aUsage ?? Number.POSITIVE_INFINITY) - (bUsage ?? Number.POSITIVE_INFINITY);
237
345
  }
238
346
 
347
+ const aProviderPriority = context.providerPriorityRank.get(a.provider.toLowerCase());
348
+ const bProviderPriority = context.providerPriorityRank.get(b.provider.toLowerCase());
349
+ if (aProviderPriority !== undefined || bProviderPriority !== undefined) {
350
+ return (aProviderPriority ?? Number.POSITIVE_INFINITY) - (bProviderPriority ?? Number.POSITIVE_INFINITY);
351
+ }
352
+
239
353
  const aProviderUsage = context.providerUsageRank.get(a.provider);
240
354
  const bProviderUsage = context.providerUsageRank.get(b.provider);
241
355
  if (aProviderUsage !== undefined || bProviderUsage !== undefined) {
@@ -271,10 +385,7 @@ function isAlias(id: string): boolean {
271
385
  * Find an exact explicit provider/model match.
272
386
  * Bare model ids are handled separately so canonical ids can coalesce variants.
273
387
  */
274
- export function findExactModelReferenceMatch(
275
- modelReference: string,
276
- availableModels: Model<Api>[],
277
- ): Model<Api> | undefined {
388
+ function findExactModelReferenceMatch(modelReference: string, availableModels: Model<Api>[]): Model<Api> | undefined {
278
389
  const trimmedReference = modelReference.trim();
279
390
  if (!trimmedReference) {
280
391
  return undefined;
@@ -310,10 +421,17 @@ function findExactCanonicalModelMatch(
310
421
  }
311
422
 
312
423
  /**
313
- * Try to match a pattern to a model from the available models list.
424
+ * The single model-matching engine. Tries, in order:
425
+ * 1. exact `provider/id` reference (variant-alias and OpenRouter routed/date
426
+ * fallbacks included),
427
+ * 2. exact canonical id (coalesces provider variants),
428
+ * 3. exact bare id (preference-ranked),
429
+ * 4. retired effort-tier variant alias (collapsed catalog entries),
430
+ * 5. provider-scoped fuzzy match,
431
+ * 6. substring match with the alias-vs-dated pick.
314
432
  * Returns the matched model or undefined if no match found.
315
433
  */
316
- function tryMatchModel(
434
+ function matchModel(
317
435
  modelPattern: string,
318
436
  availableModels: Model<Api>[],
319
437
  context: ModelPreferenceContext,
@@ -339,6 +457,20 @@ function tryMatchModel(
339
457
  if (exactMatches.length > 0) {
340
458
  return pickPreferredModel(exactMatches, context);
341
459
  }
460
+
461
+ // Retired effort-tier variant ids (bare, no provider prefix) resolve to
462
+ // their collapsed logical model; models from the providers whose table
463
+ // declared the alias win ties. Auto-derived `X-thinking` pairs resolve
464
+ // through the grammar fallback.
465
+ const bareAlias = resolveBareVariantAlias(modelPattern);
466
+ const bareAliasTargetId = bareAlias?.id ?? stripThinkingVariantToken(modelPattern);
467
+ if (bareAliasTargetId) {
468
+ const aliasMatches = availableModels.filter(m => m.id.toLowerCase() === bareAliasTargetId.toLowerCase());
469
+ if (aliasMatches.length > 0) {
470
+ const preferred = bareAlias ? aliasMatches.filter(m => bareAlias.providers.includes(m.provider)) : [];
471
+ return pickPreferredModel(preferred.length > 0 ? preferred : aliasMatches, context);
472
+ }
473
+ }
342
474
  // Check for provider/modelId format — fuzzy match within provider only.
343
475
  const slashIndex = modelPattern.indexOf("/");
344
476
  if (slashIndex !== -1) {
@@ -411,6 +543,8 @@ export interface ParsedModelResult {
411
543
  model: Model<Api> | undefined;
412
544
  /** Thinking level if explicitly specified in pattern, undefined otherwise */
413
545
  thinkingLevel?: ThinkingLevel;
546
+ /** Upstream provider slug from an `@upstream` routing selector, if present. */
547
+ upstream?: string;
414
548
  warning: string | undefined;
415
549
  explicitThinkingLevel: boolean;
416
550
  }
@@ -435,31 +569,21 @@ function parseModelPatternWithContext(
435
569
  options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
436
570
  ): ParsedModelResult {
437
571
  // Try exact match first
438
- const exactMatch = tryMatchModel(pattern, availableModels, context, options);
572
+ const exactMatch = matchModel(pattern, availableModels, context, options);
439
573
  if (exactMatch) {
440
574
  return { model: exactMatch, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
441
575
  }
442
576
 
443
- // No match - try splitting on last colon if present
444
- const lastColonIndex = pattern.lastIndexOf(":");
445
- if (lastColonIndex === -1) {
446
- // No colons, pattern simply doesn't match any model
447
- return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
448
- }
449
-
450
- const prefix = pattern.substring(0, lastColonIndex);
451
- const suffix = pattern.substring(lastColonIndex + 1);
452
-
453
- const parsedThinkingLevel = parseThinkingLevel(suffix);
454
- if (parsedThinkingLevel) {
455
- // Valid thinking level - recurse on prefix and use this level
456
- const result = parseModelPatternWithContext(prefix, availableModels, context, options);
577
+ // No match - try stripping a valid thinking suffix and recursing
578
+ const { base, level } = splitThinkingSuffix(pattern);
579
+ if (level) {
580
+ const result = parseModelPatternWithContext(base, availableModels, context, options);
457
581
  if (result.model) {
458
582
  // Only use this thinking level if no warning from inner recursion
459
583
  const explicitThinkingLevel = !result.warning;
460
584
  return {
461
585
  model: result.model,
462
- thinkingLevel: explicitThinkingLevel ? parsedThinkingLevel : undefined,
586
+ thinkingLevel: explicitThinkingLevel ? level : undefined,
463
587
  warning: result.warning,
464
588
  explicitThinkingLevel,
465
589
  };
@@ -467,6 +591,14 @@ function parseModelPatternWithContext(
467
591
  return result;
468
592
  }
469
593
 
594
+ const lastColonIndex = pattern.lastIndexOf(":");
595
+ if (lastColonIndex === -1) {
596
+ // No colons, pattern simply doesn't match any model
597
+ return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
598
+ }
599
+ const prefix = pattern.substring(0, lastColonIndex);
600
+ const suffix = pattern.substring(lastColonIndex + 1);
601
+
470
602
  const allowFallback = options?.allowInvalidThinkingSelectorFallback ?? true;
471
603
  if (!allowFallback) {
472
604
  return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
@@ -492,19 +624,35 @@ export function parseModelPattern(
492
624
  options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
493
625
  ): ParsedModelResult {
494
626
  const context = buildPreferenceContext(availableModels, preferences);
495
- return parseModelPatternWithContext(pattern, availableModels, context, options);
627
+ const direct = parseModelPatternWithContext(pattern, availableModels, context, options);
628
+ if (direct.model) return direct;
629
+
630
+ // No direct match: a trailing `@upstream` may be a provider-routing selector.
631
+ // Only honor it when the base resolves to an aggregator model (OpenRouter /
632
+ // Vercel Gateway); otherwise `@` stays part of the id and `direct` stands.
633
+ const routing = splitUpstreamRouting(pattern);
634
+ if (routing) {
635
+ const routed = parseModelPatternWithContext(routing.base, availableModels, context, options);
636
+ if (routed.model && supportsUpstreamRouting(routed.model)) {
637
+ return { ...routed, model: applyUpstreamRouting(routed.model, routing.upstream), upstream: routing.upstream };
638
+ }
639
+ }
640
+ return direct;
496
641
  }
497
642
 
498
- const PREFIX_MODEL_ROLE = "prometheus/";
643
+ const LEGACY_MODEL_ROLE_PREFIX = "pi/";
644
+ const PROMETHEUS_MODEL_ROLE_PREFIX = "prometheus/";
645
+ const MODEL_ROLE_PREFIXES = [LEGACY_MODEL_ROLE_PREFIX, PROMETHEUS_MODEL_ROLE_PREFIX] as const;
499
646
  const DEFAULT_MODEL_ROLE = "default";
500
647
 
501
648
  function getModelRoleAlias(value: string): ModelRole | undefined {
502
649
  const normalized = value.trim();
503
- if (!normalized.startsWith(PREFIX_MODEL_ROLE)) return undefined;
504
-
505
- const candidate = normalized.slice(PREFIX_MODEL_ROLE.length);
506
- for (const role of MODEL_ROLE_IDS) {
507
- if (candidate === role) return role;
650
+ for (const prefix of MODEL_ROLE_PREFIXES) {
651
+ if (!normalized.startsWith(prefix)) continue;
652
+ const candidate = normalized.slice(prefix.length);
653
+ for (const role of MODEL_ROLE_IDS) {
654
+ if (candidate === role) return role;
655
+ }
508
656
  }
509
657
  return undefined;
510
658
  }
@@ -518,26 +666,84 @@ function normalizeModelPatternList(value: string | string[] | undefined): string
518
666
  function isSessionInheritedAgentPattern(value: string): boolean {
519
667
  return (
520
668
  value === DEFAULT_MODEL_ROLE ||
521
- value === `${PREFIX_MODEL_ROLE}${DEFAULT_MODEL_ROLE}` ||
522
- value === `${PREFIX_MODEL_ROLE}task`
669
+ MODEL_ROLE_PREFIXES.some(prefix => value === `${prefix}${DEFAULT_MODEL_ROLE}` || value === `${prefix}task`)
523
670
  );
524
671
  }
525
672
 
526
- function resolveConfiguredRolePattern(value: string, settings?: Settings): string[] | undefined {
673
+ function shouldInheritDefaultBeforePriority(role: ModelRole): boolean {
674
+ return role === "smol" || role === "slow" || role === "designer";
675
+ }
676
+
677
+ function resolveDefaultInheritedPatterns(
678
+ role: ModelRole,
679
+ configuredDefault: string | undefined,
680
+ roleDefaults: string[],
681
+ settings: Settings | undefined,
682
+ visited: Set<ModelRole>,
683
+ ): string[] {
684
+ if (!shouldInheritDefaultBeforePriority(role) || !configuredDefault) return [];
685
+
686
+ const resolved: string[] = [];
687
+ for (const pattern of normalizeModelPatternList(configuredDefault)) {
688
+ const { base: aliasCandidate, level: thinkingLevel } = splitThinkingSuffix(
689
+ pattern,
690
+ LEGACY_MODEL_ROLE_PREFIX.length,
691
+ );
692
+ const aliasRole = getModelRoleAlias(aliasCandidate);
693
+ if (aliasRole === role) {
694
+ // Self-alias (e.g. modelRoles.default = "pi/smol" or "prometheus/smol")
695
+ // would loop back to the same unset role; collapse straight to the
696
+ // built-in priority chain.
697
+ resolved.push(
698
+ ...(thinkingLevel
699
+ ? roleDefaults.map(defaultPattern => `${defaultPattern}:${thinkingLevel}`)
700
+ : roleDefaults),
701
+ );
702
+ continue;
703
+ }
704
+ if (aliasRole && !visited.has(aliasRole)) {
705
+ // Cross-role alias (e.g. modelRoles.default = "pi/slow" or
706
+ // "prometheus/slow"): resolve the target role's patterns now so
707
+ // downstream one-layer expanders see concrete model patterns instead of
708
+ // another role alias.
709
+ const recursed = resolveConfiguredRolePattern(pattern, settings, new Set(visited));
710
+ if (recursed && recursed.length > 0) {
711
+ resolved.push(...recursed);
712
+ continue;
713
+ }
714
+ }
715
+ resolved.push(pattern);
716
+ }
717
+ return resolved;
718
+ }
719
+
720
+ function resolveConfiguredRolePattern(
721
+ value: string,
722
+ settings?: Settings,
723
+ visited: Set<ModelRole> = new Set(),
724
+ ): string[] | undefined {
527
725
  const normalized = value.trim();
528
726
  if (!normalized) return undefined;
529
727
 
530
- const lastColonIndex = normalized.lastIndexOf(":");
531
- const thinkingLevel =
532
- lastColonIndex > PREFIX_MODEL_ROLE.length ? parseThinkingLevel(normalized.slice(lastColonIndex + 1)) : undefined;
533
- const aliasCandidate = thinkingLevel ? normalized.slice(0, lastColonIndex) : normalized;
728
+ const { base: aliasCandidate, level: thinkingLevel } = splitThinkingSuffix(
729
+ normalized,
730
+ LEGACY_MODEL_ROLE_PREFIX.length,
731
+ );
534
732
  const role = getModelRoleAlias(aliasCandidate);
535
733
  if (!role) return [normalized];
734
+ if (visited.has(role)) return undefined;
735
+ visited.add(role);
536
736
 
537
737
  const configured = settings?.getModelRole(role)?.trim();
738
+ const configuredDefault = settings?.getModelRole(DEFAULT_MODEL_ROLE)?.trim();
538
739
  const roleDefaults = normalizeModelPatternList(MODEL_PRIO[role as keyof typeof MODEL_PRIO]);
539
- const resolved = configured ? normalizeModelPatternList(configured) : roleDefaults;
540
- if (!resolved || resolved.length === 0) {
740
+ const resolved = configured
741
+ ? normalizeModelPatternList(configured)
742
+ : resolveDefaultInheritedPatterns(role, configuredDefault, roleDefaults, settings, visited);
743
+ if (resolved.length === 0) {
744
+ resolved.push(...roleDefaults);
745
+ }
746
+ if (resolved.length === 0) {
541
747
  return undefined;
542
748
  }
543
749
 
@@ -545,7 +751,8 @@ function resolveConfiguredRolePattern(value: string, settings?: Settings): strin
545
751
  }
546
752
 
547
753
  /**
548
- * Expand a role alias like "prometheus/smol" to the configured model string.
754
+ * Expand a role alias like "pi/smol" or "prometheus/smol" to the configured
755
+ * model string.
549
756
  */
550
757
  export function expandRoleAlias(value: string, settings?: Settings): string {
551
758
  const normalized = value.trim();
@@ -584,7 +791,7 @@ export function resolveAgentModelPatterns(options: AgentModelPatternResolutionOp
584
791
  const agentInheritsSessionModel = singleAgentPattern ? isSessionInheritedAgentPattern(singleAgentPattern) : false;
585
792
  if (configuredAgentPatterns.length > 0) {
586
793
  if (!agentInheritsSessionModel) return configuredAgentPatterns;
587
- if (singleAgentPattern === `${PREFIX_MODEL_ROLE}task`) return configuredAgentPatterns;
794
+ if (singleAgentPattern === "pi/task") return configuredAgentPatterns;
588
795
  }
589
796
 
590
797
  const fallback =
@@ -616,14 +823,15 @@ export function resolveModelRoleValue(
616
823
  return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
617
824
  }
618
825
 
619
- const effectivePatterns = resolveConfiguredRolePattern(normalized, options?.settings);
826
+ const effectivePatterns = resolveConfiguredModelPatterns(normalized, options?.settings);
620
827
  if (!effectivePatterns || effectivePatterns.length === 0) {
621
828
  return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
622
829
  }
623
830
 
624
831
  let warning: string | undefined;
832
+ const matchPreferences = mergeModelMatchPreferences(options?.settings, options?.matchPreferences);
625
833
  for (const effectivePattern of effectivePatterns) {
626
- const resolved = parseModelPattern(effectivePattern, availableModels, options?.matchPreferences, {
834
+ const resolved = parseModelPattern(effectivePattern, availableModels, matchPreferences, {
627
835
  modelRegistry: options?.modelRegistry,
628
836
  });
629
837
  if (resolved.model) {
@@ -656,9 +864,7 @@ export function extractExplicitThinkingSelector(
656
864
  let current = normalized;
657
865
  while (!visited.has(current)) {
658
866
  visited.add(current);
659
- const lastColonIndex = current.lastIndexOf(":");
660
- const thinkingSelector =
661
- lastColonIndex > PREFIX_MODEL_ROLE.length ? parseThinkingLevel(current.slice(lastColonIndex + 1)) : undefined;
867
+ const thinkingSelector = splitThinkingSuffix(current, LEGACY_MODEL_ROLE_PREFIX.length).level;
662
868
  if (thinkingSelector) {
663
869
  return thinkingSelector;
664
870
  }
@@ -724,7 +930,7 @@ export function resolveModelOverride(
724
930
  ): { model?: Model<Api>; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } {
725
931
  if (modelPatterns.length === 0) return { explicitThinkingLevel: false };
726
932
  const availableModels = modelRegistry.getAvailable();
727
- const matchPreferences = { usageOrder: settings?.getStorage()?.getModelUsageOrder() };
933
+ const matchPreferences = getModelMatchPreferences(settings);
728
934
  for (const pattern of modelPatterns) {
729
935
  const { model, thinkingLevel, explicitThinkingLevel } = resolveModelRoleValue(pattern, availableModels, {
730
936
  settings,
@@ -804,7 +1010,7 @@ export function resolveRoleSelection(
804
1010
  availableModels: Model<Api>[],
805
1011
  modelRegistry?: CanonicalModelRegistry,
806
1012
  ): { model: Model<Api>; thinkingLevel?: ThinkingLevel } | undefined {
807
- const matchPreferences = { usageOrder: settings.getStorage()?.getModelUsageOrder() };
1013
+ const matchPreferences = getModelMatchPreferences(settings);
808
1014
  for (const role of roles) {
809
1015
  const resolved = resolveModelRoleValue(settings.getModelRole(role), availableModels, {
810
1016
  settings,
@@ -823,20 +1029,8 @@ function resolveExactCanonicalScopePattern(
823
1029
  modelRegistry: Pick<ModelRegistry, "getCanonicalVariants">,
824
1030
  availableModels: Model<Api>[],
825
1031
  ): { models: Model<Api>[]; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } | undefined {
826
- const lastColonIndex = pattern.lastIndexOf(":");
827
- let canonicalId = pattern;
828
- let thinkingLevel: ThinkingLevel | undefined;
829
- let explicitThinkingLevel = false;
830
-
831
- if (lastColonIndex !== -1) {
832
- const suffix = pattern.substring(lastColonIndex + 1);
833
- const parsedThinkingLevel = parseThinkingLevel(suffix);
834
- if (parsedThinkingLevel) {
835
- canonicalId = pattern.substring(0, lastColonIndex);
836
- thinkingLevel = parsedThinkingLevel;
837
- explicitThinkingLevel = true;
838
- }
839
- }
1032
+ const { base: canonicalId, level: thinkingLevel } = splitThinkingSuffix(pattern);
1033
+ const explicitThinkingLevel = thinkingLevel !== undefined;
840
1034
 
841
1035
  const variants = modelRegistry
842
1036
  .getCanonicalVariants(canonicalId, { availableOnly: true, candidates: availableModels })
@@ -867,25 +1061,23 @@ export async function resolveModelScope(
867
1061
  const availableModels = modelRegistry.getAvailable();
868
1062
  const context = buildPreferenceContext(availableModels, preferences);
869
1063
  const scopedModels: ScopedModel[] = [];
1064
+ const addScopedModel = (model: Model<Api>, thinkingLevel: ThinkingLevel | undefined, explicit: boolean) => {
1065
+ if (scopedModels.some(sm => modelsAreEqual(sm.model, model))) return;
1066
+ scopedModels.push({
1067
+ model,
1068
+ thinkingLevel: explicit
1069
+ ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
1070
+ : thinkingLevel,
1071
+ explicitThinkingLevel: explicit,
1072
+ });
1073
+ };
870
1074
 
871
1075
  for (const pattern of patterns) {
872
1076
  // Check if pattern contains glob characters
873
1077
  if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
874
1078
  // Extract optional thinking level suffix (e.g., "provider/*:high")
875
- const colonIdx = pattern.lastIndexOf(":");
876
- let globPattern = pattern;
877
- let thinkingLevel: ThinkingLevel | undefined;
878
- let explicitThinkingLevel = false;
879
-
880
- if (colonIdx !== -1) {
881
- const suffix = pattern.substring(colonIdx + 1);
882
- const parsedThinkingLevel = parseThinkingLevel(suffix);
883
- if (parsedThinkingLevel) {
884
- thinkingLevel = parsedThinkingLevel;
885
- explicitThinkingLevel = true;
886
- globPattern = pattern.substring(0, colonIdx);
887
- }
888
- }
1079
+ const { base: globPattern, level: thinkingLevel } = splitThinkingSuffix(pattern);
1080
+ const explicitThinkingLevel = thinkingLevel !== undefined;
889
1081
 
890
1082
  // Match against "provider/modelId" format OR just model ID
891
1083
  // This allows "*sonnet*" to match without requiring "anthropic/*sonnet*"
@@ -901,15 +1093,7 @@ export async function resolveModelScope(
901
1093
  }
902
1094
 
903
1095
  for (const model of matchingModels) {
904
- if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
905
- scopedModels.push({
906
- model,
907
- thinkingLevel: explicitThinkingLevel
908
- ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
909
- : thinkingLevel,
910
- explicitThinkingLevel,
911
- });
912
- }
1096
+ addScopedModel(model, thinkingLevel, explicitThinkingLevel);
913
1097
  }
914
1098
  continue;
915
1099
  }
@@ -917,16 +1101,7 @@ export async function resolveModelScope(
917
1101
  const exactCanonical = resolveExactCanonicalScopePattern(pattern, modelRegistry, availableModels);
918
1102
  if (exactCanonical) {
919
1103
  for (const model of exactCanonical.models) {
920
- if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
921
- scopedModels.push({
922
- model,
923
- thinkingLevel: exactCanonical.explicitThinkingLevel
924
- ? (resolveThinkingLevelForModel(model, exactCanonical.thinkingLevel) ??
925
- exactCanonical.thinkingLevel)
926
- : exactCanonical.thinkingLevel,
927
- explicitThinkingLevel: exactCanonical.explicitThinkingLevel,
928
- });
929
- }
1104
+ addScopedModel(model, exactCanonical.thinkingLevel, exactCanonical.explicitThinkingLevel);
930
1105
  }
931
1106
  continue;
932
1107
  }
@@ -947,16 +1122,7 @@ export async function resolveModelScope(
947
1122
  continue;
948
1123
  }
949
1124
 
950
- // Avoid duplicates
951
- if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
952
- scopedModels.push({
953
- model,
954
- thinkingLevel: explicitThinkingLevel
955
- ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
956
- : thinkingLevel,
957
- explicitThinkingLevel,
958
- });
959
- }
1125
+ addScopedModel(model, thinkingLevel, explicitThinkingLevel);
960
1126
  }
961
1127
 
962
1128
  return scopedModels;
@@ -992,6 +1158,66 @@ export async function resolveAllowedModels(
992
1158
  return available.filter(model => allowed.has(`${model.provider}/${model.id}`));
993
1159
  }
994
1160
 
1161
+ /**
1162
+ * Synchronous subset of {@link resolveAllowedModels} for contexts where async is unavailable
1163
+ * (e.g. `getAvailableModels()` which is called from the ACP model-list advertisement, RPC
1164
+ * `get_available_models`, and the `/model` slash command). Uses the same effective
1165
+ * `enabledModels` scope semantics as startup resolution:
1166
+ *
1167
+ * - Glob selectors match `provider/modelId` and bare model id
1168
+ * - Exact canonical ids expand to all available concrete variants
1169
+ * - Exact `provider/modelId`, bare ids, provider-scoped fuzzy, and substring selectors
1170
+ * resolve through the shared model-pattern matcher
1171
+ * - Optional `:thinkingLevel` suffixes are stripped only when valid
1172
+ *
1173
+ * When no pattern resolves to any model (misconfiguration / typo) an empty list is returned,
1174
+ * consistent with the empty-list contract of {@link resolveAllowedModels}. Callers that render
1175
+ * a UI picker should treat an empty list as "hide the picker entry", matching how the SDK
1176
+ * surfaces the same misconfiguration during session initialization.
1177
+ */
1178
+ export function filterAvailableModelsByEnabledPatterns(
1179
+ available: Model<Api>[],
1180
+ patterns: readonly string[],
1181
+ registry: Pick<ModelRegistry, "getCanonicalVariants">,
1182
+ ): Model<Api>[] {
1183
+ if (patterns.length === 0) return available;
1184
+
1185
+ const context = buildPreferenceContext(available, undefined);
1186
+ const allowed = new Set<string>();
1187
+ const addAllowed = (model: Model<Api>) => {
1188
+ allowed.add(`${model.provider}/${model.id}`);
1189
+ };
1190
+
1191
+ for (const pattern of patterns) {
1192
+ if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
1193
+ const { base: globPattern } = splitThinkingSuffix(pattern);
1194
+ const glob = new Bun.Glob(globPattern.toLowerCase());
1195
+ for (const model of available) {
1196
+ const fullId = `${model.provider}/${model.id}`.toLowerCase();
1197
+ if (glob.match(fullId) || glob.match(model.id.toLowerCase())) {
1198
+ addAllowed(model);
1199
+ }
1200
+ }
1201
+ continue;
1202
+ }
1203
+
1204
+ const exactCanonical = resolveExactCanonicalScopePattern(pattern, registry, available);
1205
+ if (exactCanonical) {
1206
+ for (const model of exactCanonical.models) {
1207
+ addAllowed(model);
1208
+ }
1209
+ continue;
1210
+ }
1211
+
1212
+ const { model } = parseModelPatternWithContext(pattern, available, context, { modelRegistry: registry });
1213
+ if (model) {
1214
+ addAllowed(model);
1215
+ }
1216
+ }
1217
+
1218
+ return allowed.size === 0 ? [] : available.filter(model => allowed.has(`${model.provider}/${model.id}`));
1219
+ }
1220
+
995
1221
  export interface ResolveCliModelResult {
996
1222
  model: Model<Api> | undefined;
997
1223
  selector?: string;
@@ -1036,7 +1262,7 @@ export function resolveCliModel(options: {
1036
1262
  model: undefined,
1037
1263
  selector: undefined,
1038
1264
  warning: undefined,
1039
- error: `Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`,
1265
+ error: `Unknown provider "${cliProvider}". Run "prometheus models" to see available providers/models.`,
1040
1266
  };
1041
1267
  }
1042
1268
 
@@ -1047,14 +1273,11 @@ export function resolveCliModel(options: {
1047
1273
  // provider+id match over flat id match. Without this, a model with id
1048
1274
  // "zai/glm-5" on provider "vercel-ai-gateway" wins over provider "zai"
1049
1275
  // with id "glm-5", because Array.find returns the first catalog hit.
1050
- const slashIdx = lower.indexOf("/");
1051
- let exact: (typeof availableModels)[number] | undefined;
1052
- if (slashIdx !== -1) {
1053
- const prefix = lower.substring(0, slashIdx);
1054
- const suffix = trimmedModel.substring(slashIdx + 1);
1055
- exact = resolveProviderModelReference(prefix, suffix, availableModels);
1056
- }
1276
+ let exact = findExactModelReferenceMatch(trimmedModel, availableModels);
1057
1277
  if (!exact && !trimmedModel.includes(":")) {
1278
+ // CLI flags address the full catalog, so unlike the engine's canonical
1279
+ // step this lookup is unrestricted; the `:`-guard defers suffixed
1280
+ // selectors (thinking levels, ollama-style ids) to the grammar below.
1058
1281
  const canonicalMatch = modelRegistry.resolveCanonicalModel?.(trimmedModel, { availableOnly: false });
1059
1282
  if (canonicalMatch) {
1060
1283
  return {
@@ -1067,6 +1290,8 @@ export function resolveCliModel(options: {
1067
1290
  }
1068
1291
  }
1069
1292
  if (!exact) {
1293
+ // Flat exact id (or full selector) by catalog order: CLI resolution
1294
+ // stays deterministic across runs regardless of usage-based ranking.
1070
1295
  exact = availableModels.find(
1071
1296
  model => model.id.toLowerCase() === lower || `${model.provider}/${model.id}`.toLowerCase() === lower,
1072
1297
  );
@@ -1115,7 +1340,7 @@ export function resolveCliModel(options: {
1115
1340
  }
1116
1341
 
1117
1342
  const candidates = provider ? availableModels.filter(model => model.provider === provider) : availableModels;
1118
- const { model, thinkingLevel, warning } = parseModelPattern(pattern, candidates, preferences, {
1343
+ const { model, thinkingLevel, warning, upstream } = parseModelPattern(pattern, candidates, preferences, {
1119
1344
  allowInvalidThinkingSelectorFallback: false,
1120
1345
  modelRegistry,
1121
1346
  });
@@ -1127,17 +1352,13 @@ export function resolveCliModel(options: {
1127
1352
  selector: undefined,
1128
1353
  thinkingLevel: undefined,
1129
1354
  warning,
1130
- error: `Model "${display}" not found. Use --list-models to see available models.`,
1355
+ error: `Model "${display}" not found. Run "prometheus models" to see available models.`,
1131
1356
  };
1132
1357
  }
1133
1358
 
1134
1359
  let selector = provider ? formatModelString(model) : undefined;
1135
1360
  if (!provider) {
1136
- const lastColonIndex = pattern.lastIndexOf(":");
1137
- const canonicalCandidate =
1138
- lastColonIndex !== -1 && parseThinkingLevel(pattern.substring(lastColonIndex + 1))
1139
- ? pattern.substring(0, lastColonIndex)
1140
- : pattern;
1361
+ const canonicalCandidate = splitThinkingSuffix(pattern).base;
1141
1362
  if (!canonicalCandidate.includes("/")) {
1142
1363
  const canonicalResolved = modelRegistry.resolveCanonicalModel?.(canonicalCandidate, { availableOnly: false });
1143
1364
  if (canonicalResolved && canonicalResolved.provider === model.provider && canonicalResolved.id === model.id) {
@@ -1145,6 +1366,9 @@ export function resolveCliModel(options: {
1145
1366
  }
1146
1367
  }
1147
1368
  }
1369
+ if (selector !== undefined && upstream) {
1370
+ selector = `${selector}@${upstream}`;
1371
+ }
1148
1372
 
1149
1373
  return {
1150
1374
  model,
@@ -1233,18 +1457,9 @@ export async function findInitialModel(options: {
1233
1457
  // 4. Try first available model with valid API key
1234
1458
  const availableModels = modelRegistry.getAvailable();
1235
1459
 
1236
- if (availableModels.length > 0) {
1237
- // Try to find a default model from known providers
1238
- for (const provider of Object.keys(defaultModelPerProvider) as KnownProvider[]) {
1239
- const defaultId = defaultModelPerProvider[provider];
1240
- const match = availableModels.find(m => m.provider === provider && m.id === defaultId);
1241
- if (match) {
1242
- return { model: match, thinkingLevel: undefined, fallbackMessage: undefined };
1243
- }
1244
- }
1245
-
1246
- // If no default found, use first available
1247
- return { model: availableModels[0], thinkingLevel: undefined, fallbackMessage: undefined };
1460
+ const fallback = pickDefaultAvailableModel(availableModels);
1461
+ if (fallback) {
1462
+ return { model: fallback, thinkingLevel: undefined, fallbackMessage: undefined };
1248
1463
  }
1249
1464
 
1250
1465
  // 5. No model found
@@ -1294,23 +1509,8 @@ export async function restoreModelFromSession(
1294
1509
  // Try to find any available model
1295
1510
  const availableModels = modelRegistry.getAvailable();
1296
1511
 
1297
- if (availableModels.length > 0) {
1298
- // Try to find a default model from known providers
1299
- let fallbackModel: Model<Api> | undefined;
1300
- for (const provider of Object.keys(defaultModelPerProvider) as KnownProvider[]) {
1301
- const defaultId = defaultModelPerProvider[provider];
1302
- const match = availableModels.find(m => m.provider === provider && m.id === defaultId);
1303
- if (match) {
1304
- fallbackModel = match;
1305
- break;
1306
- }
1307
- }
1308
-
1309
- // If no default found, use first available
1310
- if (!fallbackModel) {
1311
- fallbackModel = availableModels[0];
1312
- }
1313
-
1512
+ const fallbackModel = pickDefaultAvailableModel(availableModels);
1513
+ if (fallbackModel) {
1314
1514
  if (shouldPrintMessages) {
1315
1515
  console.log(chalk.dim(`Falling back to: ${fallbackModel.provider}/${fallbackModel.id}`));
1316
1516
  }