@prometheus-ai/agent 0.5.3 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1160) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/cli.js +25110 -0
  3. package/dist/types/async/index.d.ts +0 -1
  4. package/dist/types/async/job-manager.d.ts +33 -0
  5. package/dist/types/autolearn/controller.d.ts +25 -0
  6. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  7. package/dist/types/autoresearch/state.d.ts +1 -1
  8. package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
  9. package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
  10. package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
  11. package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
  12. package/dist/types/autoresearch/types.d.ts +1 -1
  13. package/dist/types/capability/context-file.d.ts +0 -13
  14. package/dist/types/capability/mcp.d.ts +1 -0
  15. package/dist/types/capability/rule-buckets.d.ts +1 -1
  16. package/dist/types/capability/rule.d.ts +6 -1
  17. package/dist/types/capability/types.d.ts +0 -4
  18. package/dist/types/cli/args.d.ts +23 -3
  19. package/dist/types/cli/bench-cli.d.ts +78 -0
  20. package/dist/types/cli/claude-trace-cli.d.ts +7 -0
  21. package/dist/types/cli/dry-balance-cli.d.ts +16 -2
  22. package/dist/types/cli/gallery-cli.d.ts +43 -0
  23. package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
  24. package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
  25. package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
  26. package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
  27. package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
  28. package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
  29. package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
  30. package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
  31. package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
  32. package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
  33. package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
  34. package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
  35. package/dist/types/cli/gallery-screenshot.d.ts +35 -0
  36. package/dist/types/cli/gateway-cli.d.ts +4 -0
  37. package/dist/types/cli/grievances-cli.d.ts +1 -1
  38. package/dist/types/cli/list-models.d.ts +6 -14
  39. package/dist/types/cli/models-cli.d.ts +49 -0
  40. package/dist/types/cli/session-picker.d.ts +1 -1
  41. package/dist/types/cli/setup-cli.d.ts +1 -1
  42. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  43. package/dist/types/cli/startup-cwd.d.ts +2 -0
  44. package/dist/types/cli/update-cli.d.ts +13 -40
  45. package/dist/types/cli/usage-cli.d.ts +81 -0
  46. package/dist/types/cli-commands.d.ts +12 -0
  47. package/dist/types/collab/crypto.d.ts +7 -0
  48. package/dist/types/collab/guest.d.ts +37 -0
  49. package/dist/types/collab/host.d.ts +29 -0
  50. package/dist/types/collab/protocol.d.ts +119 -0
  51. package/dist/types/collab/relay-client.d.ts +22 -0
  52. package/dist/types/commands/bench.d.ts +29 -0
  53. package/dist/types/commands/gallery.d.ts +47 -0
  54. package/dist/types/commands/gateway.d.ts +3 -0
  55. package/dist/types/commands/install.d.ts +1 -1
  56. package/dist/types/commands/join.d.ts +12 -0
  57. package/dist/types/commands/launch.d.ts +8 -4
  58. package/dist/types/commands/models.d.ts +33 -0
  59. package/dist/types/commands/read.d.ts +1 -1
  60. package/dist/types/commands/say.d.ts +24 -0
  61. package/dist/types/commands/token.d.ts +25 -0
  62. package/dist/types/commands/usage.d.ts +34 -0
  63. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  64. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  65. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  66. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  67. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  68. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  69. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  70. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  71. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  72. package/dist/types/commit/analysis/conventional.d.ts +2 -2
  73. package/dist/types/commit/analysis/summary.d.ts +2 -2
  74. package/dist/types/commit/changelog/generate.d.ts +3 -3
  75. package/dist/types/commit/changelog/index.d.ts +2 -2
  76. package/dist/types/commit/map-reduce/index.d.ts +3 -3
  77. package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
  78. package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
  79. package/dist/types/commit/model-selection.d.ts +10 -4
  80. package/dist/types/commit/shared-llm.d.ts +1 -1
  81. package/dist/types/config/api-key-resolver.d.ts +43 -0
  82. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  83. package/dist/types/config/keybindings.d.ts +12 -7
  84. package/dist/types/config/model-discovery.d.ts +57 -0
  85. package/dist/types/config/model-equivalence.d.ts +1 -1
  86. package/dist/types/config/model-registry.d.ts +86 -222
  87. package/dist/types/config/model-resolver.d.ts +43 -12
  88. package/dist/types/config/model-roles.d.ts +29 -0
  89. package/dist/types/config/models-config-schema.d.ts +536 -43
  90. package/dist/types/config/models-config.d.ts +391 -0
  91. package/dist/types/config/settings-schema.d.ts +1211 -324
  92. package/dist/types/config/settings.d.ts +15 -3
  93. package/dist/types/dap/config.d.ts +14 -1
  94. package/dist/types/dap/types.d.ts +10 -0
  95. package/dist/types/debug/log-viewer.d.ts +1 -1
  96. package/dist/types/debug/raw-sse.d.ts +1 -1
  97. package/dist/types/debug/report-bundle.d.ts +3 -0
  98. package/dist/types/debug/terminal-info.d.ts +0 -1
  99. package/dist/types/discovery/at-imports.d.ts +15 -0
  100. package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
  101. package/dist/types/edit/diff.d.ts +3 -2
  102. package/dist/types/edit/file-snapshot-store.d.ts +18 -0
  103. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  104. package/dist/types/edit/hashline/params.d.ts +1 -1
  105. package/dist/types/edit/index.d.ts +0 -1
  106. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  107. package/dist/types/edit/modes/patch.d.ts +1 -1
  108. package/dist/types/edit/modes/replace.d.ts +1 -1
  109. package/dist/types/edit/renderer.d.ts +1 -0
  110. package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
  111. package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
  112. package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
  113. package/dist/types/eval/backend.d.ts +7 -2
  114. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  115. package/dist/types/eval/completion-bridge.d.ts +25 -0
  116. package/dist/types/eval/idle-timeout.d.ts +1 -5
  117. package/dist/types/eval/js/context-manager.d.ts +1 -0
  118. package/dist/types/eval/js/executor.d.ts +2 -0
  119. package/dist/types/eval/js/index.d.ts +1 -1
  120. package/dist/types/eval/js/shared/helpers.d.ts +7 -1
  121. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  122. package/dist/types/eval/js/shared/runtime.d.ts +6 -1
  123. package/dist/types/eval/js/worker-protocol.d.ts +6 -0
  124. package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
  125. package/dist/types/eval/py/executor.d.ts +12 -0
  126. package/dist/types/eval/py/index.d.ts +1 -1
  127. package/dist/types/eval/py/kernel.d.ts +6 -1
  128. package/dist/types/eval/py/runtime.d.ts +9 -0
  129. package/dist/types/exa/index.d.ts +1 -19
  130. package/dist/types/exa/mcp-client.d.ts +10 -3
  131. package/dist/types/exa/types.d.ts +0 -83
  132. package/dist/types/exec/bash-executor.d.ts +7 -0
  133. package/dist/types/export/custom-share.d.ts +1 -2
  134. package/dist/types/export/html/index.d.ts +39 -0
  135. package/dist/types/export/html/template-js.d.ts +2 -0
  136. package/dist/types/export/share.d.ts +61 -0
  137. package/dist/types/export/ttsr.d.ts +14 -0
  138. package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
  139. package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
  140. package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
  141. package/dist/types/extensibility/extensions/index.d.ts +1 -1
  142. package/dist/types/extensibility/extensions/loader.d.ts +20 -1
  143. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  144. package/dist/types/extensibility/extensions/runner.d.ts +5 -2
  145. package/dist/types/extensibility/extensions/types.d.ts +72 -11
  146. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  147. package/dist/types/extensibility/hooks/loader.d.ts +1 -1
  148. package/dist/types/extensibility/hooks/types.d.ts +11 -5
  149. package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
  150. package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
  151. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  152. package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
  153. package/dist/types/extensibility/plugins/types.d.ts +2 -2
  154. package/dist/types/extensibility/shared-events.d.ts +3 -3
  155. package/dist/types/extensibility/skills.d.ts +10 -0
  156. package/dist/types/extensibility/slash-commands.d.ts +1 -11
  157. package/dist/types/gateway/adapters/telegram/access.d.ts +4 -1
  158. package/dist/types/gateway/adapters/telegram/setup-api.d.ts +1 -1
  159. package/dist/types/gateway/adapters/telegram/webhook.d.ts +1 -1
  160. package/dist/types/gateway/types.d.ts +1 -1
  161. package/dist/types/goals/guided-setup.d.ts +18 -0
  162. package/dist/types/goals/state.d.ts +1 -1
  163. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  164. package/dist/types/hindsight/mental-models.d.ts +17 -8
  165. package/dist/types/hindsight/transcript.d.ts +1 -1
  166. package/dist/types/index.d.ts +5 -0
  167. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  168. package/dist/types/internal-urls/history-protocol.d.ts +14 -0
  169. package/dist/types/internal-urls/index.d.ts +1 -0
  170. package/dist/types/internal-urls/local-protocol.d.ts +14 -2
  171. package/dist/types/internal-urls/types.d.ts +1 -1
  172. package/dist/types/irc/bus.d.ts +79 -0
  173. package/dist/types/lib/xai-http.d.ts +1 -1
  174. package/dist/types/lsp/client.d.ts +10 -0
  175. package/dist/types/lsp/config.d.ts +2 -2
  176. package/dist/types/lsp/edits.d.ts +9 -0
  177. package/dist/types/lsp/format-options.d.ts +32 -0
  178. package/dist/types/lsp/index.d.ts +2 -7
  179. package/dist/types/lsp/types.d.ts +13 -1
  180. package/dist/types/lsp/utils.d.ts +6 -2
  181. package/dist/types/main.d.ts +23 -8
  182. package/dist/types/mcp/json-rpc.d.ts +5 -0
  183. package/dist/types/mcp/manager.d.ts +8 -0
  184. package/dist/types/mcp/oauth-discovery.d.ts +6 -1
  185. package/dist/types/mcp/oauth-flow.d.ts +13 -3
  186. package/dist/types/mcp/startup-events.d.ts +11 -0
  187. package/dist/types/mcp/tool-bridge.d.ts +2 -0
  188. package/dist/types/mcp/transports/stdio.d.ts +13 -0
  189. package/dist/types/mcp/types.d.ts +2 -0
  190. package/dist/types/memories/index.d.ts +7 -15
  191. package/dist/types/memories/storage.d.ts +0 -10
  192. package/dist/types/memory-backend/index.d.ts +3 -1
  193. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  194. package/dist/types/memory-backend/resolve.d.ts +2 -2
  195. package/dist/types/memory-backend/runtime.d.ts +4 -0
  196. package/dist/types/memory-backend/types.d.ts +67 -2
  197. package/dist/types/mnemopi/config.d.ts +31 -1
  198. package/dist/types/mnemopi/state.d.ts +40 -2
  199. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  200. package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
  201. package/dist/types/modes/components/agent-hub.d.ts +82 -0
  202. package/dist/types/modes/components/assistant-message.d.ts +5 -12
  203. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  204. package/dist/types/modes/components/chat-block.d.ts +64 -0
  205. package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
  206. package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
  207. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  208. package/dist/types/modes/components/custom-editor.d.ts +49 -2
  209. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  210. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  211. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  212. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  213. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  214. package/dist/types/modes/components/footer.d.ts +1 -1
  215. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  216. package/dist/types/modes/components/hook-input.d.ts +4 -0
  217. package/dist/types/modes/components/hook-selector.d.ts +5 -7
  218. package/dist/types/modes/components/index.d.ts +1 -0
  219. package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
  220. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  221. package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
  222. package/dist/types/modes/components/model-selector.d.ts +1 -1
  223. package/dist/types/modes/components/oauth-selector.d.ts +10 -1
  224. package/dist/types/modes/components/overlay-box.d.ts +17 -0
  225. package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
  226. package/dist/types/modes/components/plan-toc.d.ts +41 -0
  227. package/dist/types/modes/components/read-tool-group.d.ts +8 -0
  228. package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
  229. package/dist/types/modes/components/segment-track.d.ts +11 -6
  230. package/dist/types/modes/components/session-selector.d.ts +18 -9
  231. package/dist/types/modes/components/settings-defs.d.ts +9 -2
  232. package/dist/types/modes/components/settings-selector.d.ts +17 -4
  233. package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
  234. package/dist/types/modes/components/status-line/component.d.ts +61 -0
  235. package/dist/types/modes/components/status-line/index.d.ts +1 -0
  236. package/dist/types/modes/components/status-line/types.d.ts +47 -3
  237. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  238. package/dist/types/modes/components/tool-execution.d.ts +49 -2
  239. package/dist/types/modes/components/transcript-container.d.ts +76 -26
  240. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  241. package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
  242. package/dist/types/modes/components/usage-row.d.ts +3 -0
  243. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  244. package/dist/types/modes/components/user-message.d.ts +2 -1
  245. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  246. package/dist/types/modes/components/welcome.d.ts +12 -2
  247. package/dist/types/modes/controllers/command-controller.d.ts +3 -2
  248. package/dist/types/modes/controllers/event-controller.d.ts +7 -1
  249. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
  250. package/dist/types/modes/controllers/input-controller.d.ts +25 -3
  251. package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
  252. package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
  253. package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
  254. package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
  255. package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
  256. package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
  257. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  258. package/dist/types/modes/image-references.d.ts +14 -3
  259. package/dist/types/modes/index.d.ts +8 -7
  260. package/dist/types/modes/interactive-mode.d.ts +92 -16
  261. package/dist/types/modes/magic-keywords.d.ts +14 -2
  262. package/dist/types/modes/markdown-prose.d.ts +1 -1
  263. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  264. package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
  265. package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
  266. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  267. package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
  268. package/dist/types/modes/runtime-init.d.ts +4 -0
  269. package/dist/types/modes/session-observer-registry.d.ts +9 -0
  270. package/dist/types/modes/setup-version.d.ts +11 -0
  271. package/dist/types/modes/setup-wizard/index.d.ts +7 -2
  272. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  273. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
  274. package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
  275. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
  276. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  277. package/dist/types/modes/theme/theme.d.ts +42 -7
  278. package/dist/types/modes/types.d.ts +62 -13
  279. package/dist/types/modes/utils/context-usage.d.ts +6 -1
  280. package/dist/types/modes/utils/copy-targets.d.ts +21 -1
  281. package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
  282. package/dist/types/modes/workflow.d.ts +3 -3
  283. package/dist/types/plan-mode/approved-plan.d.ts +27 -8
  284. package/dist/types/plan-mode/plan-protection.d.ts +4 -4
  285. package/dist/types/registry/agent-lifecycle.d.ts +51 -0
  286. package/dist/types/registry/agent-registry.d.ts +33 -5
  287. package/dist/types/sdk.d.ts +46 -4
  288. package/dist/types/secrets/index.d.ts +1 -1
  289. package/dist/types/secrets/obfuscator.d.ts +9 -3
  290. package/dist/types/session/agent-session.d.ts +136 -66
  291. package/dist/types/session/agent-storage.d.ts +2 -1
  292. package/dist/types/session/auth-broker-config.d.ts +4 -0
  293. package/dist/types/session/auth-storage.d.ts +1 -1
  294. package/dist/types/session/codex-auto-reset.d.ts +111 -0
  295. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  296. package/dist/types/session/messages.d.ts +26 -15
  297. package/dist/types/session/session-context.d.ts +39 -0
  298. package/dist/types/session/session-entries.d.ts +159 -0
  299. package/dist/types/session/session-history-format.d.ts +12 -0
  300. package/dist/types/session/session-listing.d.ts +69 -0
  301. package/dist/types/session/session-loader.d.ts +16 -0
  302. package/dist/types/session/session-manager.d.ts +107 -440
  303. package/dist/types/session/session-migrations.d.ts +12 -0
  304. package/dist/types/session/session-paths.d.ts +25 -0
  305. package/dist/types/session/session-persistence.d.ts +8 -0
  306. package/dist/types/session/session-storage.d.ts +11 -7
  307. package/dist/types/session/snapcompact-inline.d.ts +145 -0
  308. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  309. package/dist/types/session/streaming-output.d.ts +46 -0
  310. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  311. package/dist/types/session/yield-queue.d.ts +10 -1
  312. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  313. package/dist/types/slash-commands/available-commands.d.ts +34 -0
  314. package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
  315. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
  316. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  317. package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
  318. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  319. package/dist/types/slash-commands/types.d.ts +5 -9
  320. package/dist/types/ssh/connection-manager.d.ts +8 -0
  321. package/dist/types/stt/asr-client.d.ts +90 -0
  322. package/dist/types/stt/asr-protocol.d.ts +97 -0
  323. package/dist/types/stt/asr-worker.d.ts +2 -0
  324. package/dist/types/stt/downloader.d.ts +38 -0
  325. package/dist/types/stt/endpointer.d.ts +59 -0
  326. package/dist/types/stt/index.d.ts +5 -1
  327. package/dist/types/stt/models.d.ts +120 -0
  328. package/dist/types/stt/recorder.d.ts +17 -0
  329. package/dist/types/stt/stt-controller.d.ts +6 -0
  330. package/dist/types/stt/transcriber.d.ts +5 -7
  331. package/dist/types/stt/wav.d.ts +29 -0
  332. package/dist/types/system-prompt.d.ts +9 -1
  333. package/dist/types/task/commands.d.ts +1 -1
  334. package/dist/types/task/discovery.d.ts +1 -2
  335. package/dist/types/task/executor.d.ts +61 -2
  336. package/dist/types/task/index.d.ts +37 -6
  337. package/dist/types/task/output-manager.d.ts +0 -7
  338. package/dist/types/task/parallel.d.ts +2 -2
  339. package/dist/types/task/prometheus-command.d.ts +2 -2
  340. package/dist/types/task/render.d.ts +20 -7
  341. package/dist/types/task/repair-args.d.ts +8 -7
  342. package/dist/types/task/types.d.ts +109 -52
  343. package/dist/types/task/worktree.d.ts +2 -0
  344. package/dist/types/telemetry-export.d.ts +2 -2
  345. package/dist/types/thinking.d.ts +4 -0
  346. package/dist/types/tiny/models.d.ts +1 -1
  347. package/dist/types/tiny/title-client.d.ts +12 -1
  348. package/dist/types/tiny/title-protocol.d.ts +1 -0
  349. package/dist/types/tools/archive-reader.d.ts +5 -0
  350. package/dist/types/tools/ask.d.ts +6 -1
  351. package/dist/types/tools/ast-edit.d.ts +4 -1
  352. package/dist/types/tools/ast-grep.d.ts +4 -1
  353. package/dist/types/tools/bash.d.ts +5 -2
  354. package/dist/types/tools/browser/attach.d.ts +4 -4
  355. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  356. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  357. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  358. package/dist/types/tools/browser/registry.d.ts +17 -3
  359. package/dist/types/tools/browser/render.d.ts +2 -0
  360. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  361. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  362. package/dist/types/tools/browser/tab-worker.d.ts +18 -1
  363. package/dist/types/tools/browser.d.ts +3 -1
  364. package/dist/types/tools/checkpoint.d.ts +1 -1
  365. package/dist/types/tools/conflict-detect.d.ts +16 -0
  366. package/dist/types/tools/debug.d.ts +1 -1
  367. package/dist/types/tools/eval-render.d.ts +1 -8
  368. package/dist/types/tools/eval.d.ts +9 -1
  369. package/dist/types/tools/fetch.d.ts +17 -8
  370. package/dist/types/tools/find.d.ts +1 -8
  371. package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
  372. package/dist/types/tools/gh.d.ts +4 -1
  373. package/dist/types/tools/github-cache.d.ts +19 -0
  374. package/dist/types/tools/grouped-file-output.d.ts +46 -12
  375. package/dist/types/tools/image-gen.d.ts +1 -1
  376. package/dist/types/tools/index.d.ts +89 -8
  377. package/dist/types/tools/inspect-image.d.ts +1 -1
  378. package/dist/types/tools/irc.d.ts +79 -39
  379. package/dist/types/tools/job.d.ts +8 -2
  380. package/dist/types/tools/learn.d.ts +51 -0
  381. package/dist/types/tools/manage-skill.d.ts +40 -0
  382. package/dist/types/tools/memory-edit.d.ts +2 -2
  383. package/dist/types/tools/memory-recall.d.ts +1 -1
  384. package/dist/types/tools/memory-reflect.d.ts +1 -1
  385. package/dist/types/tools/memory-render.d.ts +4 -1
  386. package/dist/types/tools/memory-retain.d.ts +1 -1
  387. package/dist/types/tools/path-utils.d.ts +17 -5
  388. package/dist/types/tools/plan-mode-guard.d.ts +18 -9
  389. package/dist/types/tools/read.d.ts +3 -2
  390. package/dist/types/tools/render-mermaid.d.ts +1 -1
  391. package/dist/types/tools/render-utils.d.ts +47 -27
  392. package/dist/types/tools/renderers.d.ts +10 -2
  393. package/dist/types/tools/report-tool-issue.d.ts +6 -1
  394. package/dist/types/tools/resolve.d.ts +1 -1
  395. package/dist/types/tools/review.d.ts +1 -1
  396. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  397. package/dist/types/tools/search.d.ts +7 -3
  398. package/dist/types/tools/sqlite-reader.d.ts +4 -0
  399. package/dist/types/tools/ssh.d.ts +2 -1
  400. package/dist/types/tools/todo.d.ts +7 -15
  401. package/dist/types/tools/tool-result.d.ts +2 -0
  402. package/dist/types/tools/tool-timeouts.d.ts +1 -1
  403. package/dist/types/tools/tts.d.ts +26 -1
  404. package/dist/types/tools/write.d.ts +6 -3
  405. package/dist/types/tools/yield.d.ts +8 -0
  406. package/dist/types/tts/downloader.d.ts +20 -0
  407. package/dist/types/tts/index.d.ts +8 -0
  408. package/dist/types/tts/models.d.ts +82 -0
  409. package/dist/types/tts/player.d.ts +32 -0
  410. package/dist/types/tts/runtime.d.ts +6 -0
  411. package/dist/types/tts/streaming-player.d.ts +41 -0
  412. package/dist/types/tts/tts-client.d.ts +93 -0
  413. package/dist/types/tts/tts-protocol.d.ts +95 -0
  414. package/dist/types/tts/tts-worker.d.ts +2 -0
  415. package/dist/types/tts/vocalizer.d.ts +41 -0
  416. package/dist/types/tts/wav.d.ts +8 -0
  417. package/dist/types/tui/code-cell.d.ts +0 -2
  418. package/dist/types/tui/hyperlink.d.ts +13 -7
  419. package/dist/types/tui/output-block.d.ts +16 -22
  420. package/dist/types/tui/status-line.d.ts +3 -0
  421. package/dist/types/utils/block-context.d.ts +35 -0
  422. package/dist/types/utils/changelog.d.ts +8 -0
  423. package/dist/types/utils/clipboard.d.ts +4 -3
  424. package/dist/types/utils/enhanced-paste.d.ts +20 -0
  425. package/dist/types/utils/file-mentions.d.ts +7 -0
  426. package/dist/types/utils/git.d.ts +22 -3
  427. package/dist/types/utils/image-loading.d.ts +30 -1
  428. package/dist/types/utils/session-color.d.ts +15 -3
  429. package/dist/types/utils/thinking-display.d.ts +17 -0
  430. package/dist/types/utils/title-generator.d.ts +3 -2
  431. package/dist/types/utils/tool-choice.d.ts +8 -0
  432. package/dist/types/utils/tools-manager.d.ts +2 -1
  433. package/dist/types/web/kagi.d.ts +2 -2
  434. package/dist/types/web/parallel.d.ts +3 -0
  435. package/dist/types/web/scrapers/github.d.ts +22 -0
  436. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  437. package/dist/types/web/scrapers/types.d.ts +12 -0
  438. package/dist/types/web/search/index.d.ts +1 -1
  439. package/dist/types/web/search/providers/anthropic.d.ts +2 -1
  440. package/dist/types/web/search/providers/base.d.ts +2 -1
  441. package/dist/types/web/search/providers/brave.d.ts +2 -1
  442. package/dist/types/web/search/providers/codex.d.ts +2 -1
  443. package/dist/types/web/search/providers/exa.d.ts +2 -1
  444. package/dist/types/web/search/providers/gemini.d.ts +10 -6
  445. package/dist/types/web/search/providers/jina.d.ts +7 -2
  446. package/dist/types/web/search/providers/kagi.d.ts +7 -2
  447. package/dist/types/web/search/providers/kimi.d.ts +7 -2
  448. package/dist/types/web/search/providers/parallel.d.ts +2 -1
  449. package/dist/types/web/search/providers/perplexity.d.ts +10 -2
  450. package/dist/types/web/search/providers/searxng.d.ts +2 -1
  451. package/dist/types/web/search/providers/synthetic.d.ts +7 -3
  452. package/dist/types/web/search/providers/tavily.d.ts +2 -1
  453. package/dist/types/web/search/providers/zai.d.ts +2 -1
  454. package/dist/types/web/search/types.d.ts +1 -1
  455. package/examples/extensions/api-demo.ts +2 -2
  456. package/package.json +41 -15
  457. package/scripts/bench-guard.ts +71 -0
  458. package/scripts/build-binary.ts +24 -25
  459. package/scripts/bundle-dist.ts +97 -0
  460. package/scripts/generate-share-viewer.ts +34 -0
  461. package/scripts/prometheus +42 -0
  462. package/scripts/prometheus.ts +20 -0
  463. package/src/async/index.ts +0 -1
  464. package/src/async/job-manager.ts +106 -3
  465. package/src/auto-thinking/classifier.ts +2 -1
  466. package/src/autolearn/controller.ts +139 -0
  467. package/src/autolearn/managed-skills.ts +257 -0
  468. package/src/autoresearch/dashboard.ts +1 -1
  469. package/src/autoresearch/prompt-setup.md +6 -6
  470. package/src/autoresearch/prompt.md +6 -6
  471. package/src/autoresearch/state.ts +1 -1
  472. package/src/autoresearch/storage.ts +2 -1
  473. package/src/autoresearch/tools/init-experiment.ts +1 -1
  474. package/src/autoresearch/tools/log-experiment.ts +1 -1
  475. package/src/autoresearch/tools/run-experiment.ts +1 -1
  476. package/src/autoresearch/tools/update-notes.ts +1 -1
  477. package/src/autoresearch/types.ts +1 -1
  478. package/src/capability/context-file.ts +0 -14
  479. package/src/capability/fs.ts +10 -0
  480. package/src/capability/index.ts +1 -6
  481. package/src/capability/mcp.ts +1 -0
  482. package/src/capability/rule-buckets.ts +4 -2
  483. package/src/capability/rule.ts +10 -1
  484. package/src/capability/types.ts +0 -4
  485. package/src/cli/args.ts +66 -13
  486. package/src/cli/auth-broker-cli.ts +6 -7
  487. package/src/cli/auth-gateway-cli.ts +8 -9
  488. package/src/cli/bench-cli.ts +437 -0
  489. package/src/cli/claude-trace-cli.ts +28 -50
  490. package/src/cli/completion-gen.ts +28 -28
  491. package/src/cli/dry-balance-cli.ts +56 -23
  492. package/src/cli/gallery-cli.ts +231 -0
  493. package/src/cli/gallery-fixtures/agentic.ts +407 -0
  494. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  495. package/src/cli/gallery-fixtures/edit.ts +194 -0
  496. package/src/cli/gallery-fixtures/fs.ts +220 -0
  497. package/src/cli/gallery-fixtures/index.ts +40 -0
  498. package/src/cli/gallery-fixtures/interaction.ts +49 -0
  499. package/src/cli/gallery-fixtures/memory.ts +81 -0
  500. package/src/cli/gallery-fixtures/misc.ts +250 -0
  501. package/src/cli/gallery-fixtures/search.ts +213 -0
  502. package/src/cli/gallery-fixtures/shell.ts +167 -0
  503. package/src/cli/gallery-fixtures/types.ts +57 -0
  504. package/src/cli/gallery-fixtures/web.ts +158 -0
  505. package/src/cli/gallery-screenshot.ts +279 -0
  506. package/src/cli/gateway-cli.ts +32 -2
  507. package/src/cli/grievances-cli.ts +1 -1
  508. package/src/cli/list-models.ts +16 -174
  509. package/src/cli/models-cli.ts +429 -0
  510. package/src/cli/session-picker.ts +2 -1
  511. package/src/cli/setup-cli.ts +148 -47
  512. package/src/cli/setup-model-picker.ts +43 -0
  513. package/src/cli/startup-cwd.ts +68 -0
  514. package/src/cli/update-cli.ts +144 -272
  515. package/src/cli/usage-cli.ts +774 -0
  516. package/src/cli-commands.ts +36 -0
  517. package/src/cli.ts +141 -32
  518. package/src/collab/crypto.ts +63 -0
  519. package/src/collab/guest.ts +451 -0
  520. package/src/collab/host.ts +565 -0
  521. package/src/collab/protocol.ts +241 -0
  522. package/src/collab/relay-client.ts +216 -0
  523. package/src/commands/bench.ts +42 -0
  524. package/src/commands/complete.ts +1 -1
  525. package/src/commands/gallery.ts +52 -0
  526. package/src/commands/gateway.ts +4 -0
  527. package/src/commands/install.ts +1 -1
  528. package/src/commands/join.ts +39 -0
  529. package/src/commands/launch.ts +8 -4
  530. package/src/commands/models.ts +61 -0
  531. package/src/commands/read.ts +6 -3
  532. package/src/commands/say.ts +102 -0
  533. package/src/commands/setup.ts +1 -1
  534. package/src/commands/token.ts +89 -0
  535. package/src/commands/usage.ts +43 -0
  536. package/src/commit/agentic/agent.ts +2 -1
  537. package/src/commit/agentic/tools/analyze-file.ts +42 -20
  538. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  539. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  540. package/src/commit/agentic/tools/git-overview.ts +1 -1
  541. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  542. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  543. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  544. package/src/commit/agentic/tools/schemas.ts +1 -1
  545. package/src/commit/agentic/tools/split-commit.ts +9 -2
  546. package/src/commit/analysis/conventional.ts +2 -2
  547. package/src/commit/analysis/summary.ts +3 -3
  548. package/src/commit/changelog/generate.ts +3 -3
  549. package/src/commit/changelog/index.ts +2 -2
  550. package/src/commit/map-reduce/index.ts +3 -3
  551. package/src/commit/map-reduce/map-phase.ts +2 -2
  552. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  553. package/src/commit/model-selection.ts +35 -12
  554. package/src/commit/pipeline.ts +4 -4
  555. package/src/commit/shared-llm.ts +1 -1
  556. package/src/config/api-key-resolver.ts +67 -0
  557. package/src/config/append-only-context-mode.ts +6 -12
  558. package/src/config/keybindings.ts +9 -4
  559. package/src/config/mcp-schema.json +4 -0
  560. package/src/config/model-discovery.ts +574 -0
  561. package/src/config/model-equivalence.ts +5 -4
  562. package/src/config/model-registry.ts +659 -1093
  563. package/src/config/model-resolver.ts +374 -174
  564. package/src/config/model-roles.ts +88 -0
  565. package/src/config/models-config-schema.ts +61 -9
  566. package/src/config/models-config.ts +130 -0
  567. package/src/config/settings-schema.ts +1445 -382
  568. package/src/config/settings.ts +261 -69
  569. package/src/dap/client.ts +138 -53
  570. package/src/dap/config.ts +41 -2
  571. package/src/dap/defaults.json +1 -0
  572. package/src/dap/session.ts +263 -161
  573. package/src/dap/types.ts +10 -0
  574. package/src/debug/index.ts +50 -60
  575. package/src/debug/log-viewer.ts +1 -1
  576. package/src/debug/protocol-probe.ts +1 -1
  577. package/src/debug/raw-sse-buffer.ts +7 -4
  578. package/src/debug/raw-sse.ts +1 -1
  579. package/src/debug/report-bundle.ts +9 -0
  580. package/src/debug/terminal-info.ts +0 -3
  581. package/src/discovery/agents-md.ts +25 -21
  582. package/src/discovery/agents.ts +9 -15
  583. package/src/discovery/at-imports.ts +273 -0
  584. package/src/discovery/builtin-rules/index.ts +4 -0
  585. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  586. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  587. package/src/discovery/builtin.ts +45 -23
  588. package/src/discovery/claude-plugins.ts +44 -5
  589. package/src/discovery/helpers.ts +50 -9
  590. package/src/discovery/prometheus-extension-roots.ts +10 -10
  591. package/src/discovery/prometheus-plugins.ts +10 -10
  592. package/src/edit/diff.ts +191 -4
  593. package/src/edit/file-snapshot-store.ts +34 -1
  594. package/src/edit/hashline/block-resolver.ts +20 -1
  595. package/src/edit/hashline/diff.ts +123 -2
  596. package/src/edit/hashline/execute.ts +60 -4
  597. package/src/edit/hashline/filesystem.ts +2 -1
  598. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  599. package/src/edit/hashline/params.ts +1 -1
  600. package/src/edit/index.ts +47 -18
  601. package/src/edit/modes/apply-patch.ts +1 -1
  602. package/src/edit/modes/patch.ts +59 -3
  603. package/src/edit/modes/replace.ts +58 -24
  604. package/src/edit/notebook.ts +22 -2
  605. package/src/edit/renderer.ts +315 -151
  606. package/src/eval/__tests__/agent-bridge.test.ts +105 -39
  607. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  608. package/src/eval/__tests__/completion-bridge.test.ts +412 -0
  609. package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
  610. package/src/eval/__tests__/js-context-manager.test.ts +241 -0
  611. package/src/eval/__tests__/llm-bridge.test.ts +6 -4
  612. package/src/eval/__tests__/shared-executors.test.ts +34 -92
  613. package/src/eval/agent-bridge.ts +39 -23
  614. package/src/eval/backend.ts +15 -2
  615. package/src/eval/bridge-timeout.ts +1 -1
  616. package/src/eval/completion-bridge.ts +203 -0
  617. package/src/eval/idle-timeout.ts +3 -10
  618. package/src/eval/js/context-manager.ts +108 -31
  619. package/src/eval/js/executor.ts +9 -2
  620. package/src/eval/js/index.ts +7 -3
  621. package/src/eval/js/shared/helpers.ts +59 -13
  622. package/src/eval/js/shared/local-module-loader.ts +2 -2
  623. package/src/eval/js/shared/prelude.txt +167 -30
  624. package/src/eval/js/shared/rewrite-imports.ts +58 -34
  625. package/src/eval/js/shared/runtime.ts +24 -16
  626. package/src/eval/js/tool-bridge.ts +4 -0
  627. package/src/eval/js/worker-core.ts +1 -0
  628. package/src/eval/js/worker-entry.ts +6 -0
  629. package/src/eval/js/worker-protocol.ts +6 -0
  630. package/src/eval/llm-bridge.ts +2 -1
  631. package/src/eval/py/__tests__/prelude.test.ts +19 -0
  632. package/src/eval/py/executor.ts +70 -26
  633. package/src/eval/py/index.ts +13 -4
  634. package/src/eval/py/kernel.ts +48 -9
  635. package/src/eval/py/prelude.py +73 -24
  636. package/src/eval/py/runner.py +133 -28
  637. package/src/eval/py/runtime.ts +38 -1
  638. package/src/exa/index.ts +1 -26
  639. package/src/exa/mcp-client.ts +10 -10
  640. package/src/exa/types.ts +0 -97
  641. package/src/exec/bash-executor.ts +104 -7
  642. package/src/export/custom-share.ts +1 -1
  643. package/src/export/html/index.ts +119 -17
  644. package/src/export/html/share-loader.js +102 -0
  645. package/src/export/html/template-js.ts +6 -0
  646. package/src/export/html/template.css +745 -459
  647. package/src/export/html/template.css.d.ts +2 -0
  648. package/src/export/html/template.html +6 -3
  649. package/src/export/html/template.js +277 -891
  650. package/src/export/html/tool-views.generated.d.ts +2 -0
  651. package/src/export/html/tool-views.generated.js +38 -0
  652. package/src/export/share.ts +269 -0
  653. package/src/export/ttsr.ts +122 -1
  654. package/src/extensibility/custom-commands/loader.ts +7 -4
  655. package/src/extensibility/custom-commands/types.ts +9 -4
  656. package/src/extensibility/custom-tools/loader.ts +51 -23
  657. package/src/extensibility/custom-tools/types.ts +16 -8
  658. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  659. package/src/extensibility/extensions/index.ts +1 -0
  660. package/src/extensibility/extensions/loader.ts +70 -20
  661. package/src/extensibility/extensions/model-api.ts +41 -0
  662. package/src/extensibility/extensions/runner.ts +12 -2
  663. package/src/extensibility/extensions/types.ts +83 -11
  664. package/src/extensibility/extensions/wrapper.ts +41 -5
  665. package/src/extensibility/hooks/index.ts +2 -1
  666. package/src/extensibility/hooks/loader.ts +6 -3
  667. package/src/extensibility/hooks/types.ts +11 -5
  668. package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
  669. package/src/extensibility/plugins/doctor.ts +1 -2
  670. package/src/extensibility/plugins/installer.ts +2 -2
  671. package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
  672. package/src/extensibility/plugins/loader.ts +34 -23
  673. package/src/extensibility/plugins/manager.ts +226 -95
  674. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  675. package/src/extensibility/plugins/types.ts +3 -3
  676. package/src/extensibility/shared-events.ts +3 -3
  677. package/src/extensibility/skills.ts +113 -9
  678. package/src/extensibility/slash-commands.ts +1 -97
  679. package/src/gateway/adapters/telegram/access.ts +39 -4
  680. package/src/gateway/adapters/telegram/normalize.ts +16 -1
  681. package/src/gateway/adapters/telegram/setup-api.ts +7 -1
  682. package/src/gateway/adapters/telegram/webhook.ts +26 -5
  683. package/src/gateway/context.ts +9 -1
  684. package/src/gateway/types.ts +1 -1
  685. package/src/goals/guided-setup.ts +133 -0
  686. package/src/goals/state.ts +1 -1
  687. package/src/goals/tools/goal-tool.ts +38 -28
  688. package/src/hindsight/bank.ts +17 -2
  689. package/src/hindsight/client.ts +27 -2
  690. package/src/hindsight/mental-models.ts +59 -12
  691. package/src/hindsight/state.ts +12 -3
  692. package/src/hindsight/transcript.ts +1 -1
  693. package/src/index.ts +5 -0
  694. package/src/internal-urls/artifact-protocol.ts +11 -2
  695. package/src/internal-urls/docs-index.generated.ts +11 -9
  696. package/src/internal-urls/history-protocol.ts +113 -0
  697. package/src/internal-urls/index.ts +1 -0
  698. package/src/internal-urls/issue-pr-protocol.ts +22 -9
  699. package/src/internal-urls/local-protocol.ts +42 -7
  700. package/src/internal-urls/memory-protocol.ts +4 -31
  701. package/src/internal-urls/router.ts +3 -1
  702. package/src/internal-urls/types.ts +1 -1
  703. package/src/irc/bus.ts +303 -0
  704. package/src/lib/xai-http.ts +3 -3
  705. package/src/lsp/client.ts +245 -104
  706. package/src/lsp/clients/biome-client.ts +101 -39
  707. package/src/lsp/clients/lsp-linter-client.ts +2 -10
  708. package/src/lsp/config.ts +15 -5
  709. package/src/lsp/defaults.json +6 -0
  710. package/src/lsp/edits.ts +143 -95
  711. package/src/lsp/format-options.ts +119 -0
  712. package/src/lsp/index.ts +233 -93
  713. package/src/lsp/render.ts +11 -35
  714. package/src/lsp/types.ts +13 -1
  715. package/src/lsp/utils.ts +31 -12
  716. package/src/main.ts +396 -216
  717. package/src/mcp/config-writer.ts +7 -3
  718. package/src/mcp/json-rpc.ts +35 -5
  719. package/src/mcp/manager.ts +31 -16
  720. package/src/mcp/oauth-discovery.ts +34 -4
  721. package/src/mcp/oauth-flow.ts +61 -8
  722. package/src/mcp/render.ts +7 -1
  723. package/src/mcp/startup-events.ts +21 -0
  724. package/src/mcp/tool-bridge.ts +2 -0
  725. package/src/mcp/transports/stdio.ts +224 -4
  726. package/src/mcp/types.ts +2 -0
  727. package/src/memories/index.ts +174 -1128
  728. package/src/memories/storage.ts +2 -41
  729. package/src/memory-backend/index.ts +14 -1
  730. package/src/memory-backend/local-backend.ts +18 -3
  731. package/src/memory-backend/off-backend.ts +9 -0
  732. package/src/memory-backend/resolve.ts +4 -6
  733. package/src/memory-backend/runtime.ts +66 -0
  734. package/src/memory-backend/types.ts +82 -2
  735. package/src/mnemopi/backend.ts +220 -28
  736. package/src/mnemopi/config.ts +138 -33
  737. package/src/mnemopi/state.ts +91 -11
  738. package/src/modes/acp/acp-agent.ts +149 -142
  739. package/src/modes/acp/acp-event-mapper.ts +5 -1
  740. package/src/modes/components/agent-dashboard.ts +17 -11
  741. package/src/modes/components/agent-hub.ts +1346 -0
  742. package/src/modes/components/assistant-message.ts +190 -80
  743. package/src/modes/components/bash-execution.ts +1 -1
  744. package/src/modes/components/btw-panel.ts +5 -1
  745. package/src/modes/components/chat-block.ts +111 -0
  746. package/src/modes/components/collab-prompt-message.ts +30 -0
  747. package/src/modes/components/compaction-summary-message.ts +168 -33
  748. package/src/modes/components/copy-selector.ts +2 -45
  749. package/src/modes/components/custom-editor.test.ts +96 -0
  750. package/src/modes/components/custom-editor.ts +405 -118
  751. package/src/modes/components/custom-message.ts +1 -3
  752. package/src/modes/components/diff.ts +13 -2
  753. package/src/modes/components/dynamic-border.ts +12 -3
  754. package/src/modes/components/execution-shared.ts +1 -2
  755. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  756. package/src/modes/components/extensions/extension-list.ts +1 -1
  757. package/src/modes/components/extensions/inspector-panel.ts +7 -3
  758. package/src/modes/components/extensions/state-manager.ts +36 -41
  759. package/src/modes/components/footer.ts +4 -2
  760. package/src/modes/components/history-search.ts +1 -1
  761. package/src/modes/components/hook-editor.ts +8 -0
  762. package/src/modes/components/hook-input.ts +8 -0
  763. package/src/modes/components/hook-message.ts +1 -3
  764. package/src/modes/components/hook-selector.ts +6 -7
  765. package/src/modes/components/index.ts +1 -0
  766. package/src/modes/components/late-diagnostics-message.ts +60 -0
  767. package/src/modes/components/login-dialog.ts +1 -1
  768. package/src/modes/components/logout-account-selector.ts +130 -0
  769. package/src/modes/components/mcp-add-wizard.ts +14 -1
  770. package/src/modes/components/model-selector.ts +177 -75
  771. package/src/modes/components/oauth-selector.ts +102 -16
  772. package/src/modes/components/overlay-box.ts +108 -0
  773. package/src/modes/components/plan-review-overlay.ts +845 -0
  774. package/src/modes/components/plan-toc.ts +138 -0
  775. package/src/modes/components/plugin-settings.ts +22 -5
  776. package/src/modes/components/read-tool-group.ts +442 -39
  777. package/src/modes/components/reset-usage-selector.ts +161 -0
  778. package/src/modes/components/segment-track.ts +44 -7
  779. package/src/modes/components/session-selector.ts +97 -37
  780. package/src/modes/components/settings-defs.ts +28 -6
  781. package/src/modes/components/settings-selector.ts +541 -93
  782. package/src/modes/components/skill-message.ts +0 -1
  783. package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
  784. package/src/modes/components/snapcompact-shape-preview.ts +193 -0
  785. package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
  786. package/src/modes/components/status-line/index.ts +1 -0
  787. package/src/modes/components/status-line/presets.ts +3 -3
  788. package/src/modes/components/status-line/segments.ts +26 -7
  789. package/src/modes/components/status-line/types.ts +40 -9
  790. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  791. package/src/modes/components/tips.txt +7 -3
  792. package/src/modes/components/todo-reminder.ts +0 -2
  793. package/src/modes/components/tool-execution.ts +236 -103
  794. package/src/modes/components/transcript-container.ts +724 -99
  795. package/src/modes/components/tree-selector.ts +19 -4
  796. package/src/modes/components/ttsr-notification.ts +72 -30
  797. package/src/modes/components/usage-row.ts +18 -0
  798. package/src/modes/components/user-message-selector.ts +1 -1
  799. package/src/modes/components/user-message.ts +28 -12
  800. package/src/modes/components/visual-truncate.ts +1 -1
  801. package/src/modes/components/welcome.ts +80 -22
  802. package/src/modes/controllers/command-controller-shared.ts +7 -6
  803. package/src/modes/controllers/command-controller.ts +210 -180
  804. package/src/modes/controllers/event-controller.ts +352 -142
  805. package/src/modes/controllers/extension-ui-controller.ts +167 -208
  806. package/src/modes/controllers/input-controller.ts +778 -162
  807. package/src/modes/controllers/mcp-command-controller.ts +232 -80
  808. package/src/modes/controllers/selector-controller.ts +284 -145
  809. package/src/modes/controllers/session-focus-controller.ts +112 -0
  810. package/src/modes/controllers/ssh-command-controller.ts +2 -2
  811. package/src/modes/controllers/streaming-reveal.ts +295 -0
  812. package/src/modes/controllers/tan-command-controller.ts +173 -0
  813. package/src/modes/controllers/tool-args-reveal.ts +174 -0
  814. package/src/modes/gradient-highlight.ts +21 -9
  815. package/src/modes/image-references.ts +33 -7
  816. package/src/modes/index.ts +8 -25
  817. package/src/modes/interactive-mode.ts +840 -186
  818. package/src/modes/magic-keywords.ts +28 -6
  819. package/src/modes/markdown-prose.ts +1 -1
  820. package/src/modes/oauth-manual-input.ts +30 -3
  821. package/src/modes/rpc/rpc-client.ts +186 -3
  822. package/src/modes/rpc/rpc-mode.ts +318 -24
  823. package/src/modes/rpc/rpc-subagents.ts +265 -0
  824. package/src/modes/rpc/rpc-types.ts +111 -2
  825. package/src/modes/runtime-init.ts +28 -3
  826. package/src/modes/session-observer-registry.ts +72 -3
  827. package/src/modes/setup-version.ts +11 -0
  828. package/src/modes/setup-wizard/index.ts +16 -4
  829. package/src/modes/setup-wizard/lazy.ts +16 -0
  830. package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
  831. package/src/modes/setup-wizard/scenes/providers.ts +45 -12
  832. package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
  833. package/src/modes/setup-wizard/scenes/splash.ts +1 -1
  834. package/src/modes/setup-wizard/scenes/telegram.ts +77 -22
  835. package/src/modes/setup-wizard/scenes/theme.ts +29 -2
  836. package/src/modes/setup-wizard/scenes/types.ts +11 -2
  837. package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
  838. package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
  839. package/src/modes/shared.ts +2 -0
  840. package/src/modes/theme/defaults/dark-poimandres.json +1 -1
  841. package/src/modes/theme/defaults/light-poimandres.json +1 -1
  842. package/src/modes/theme/shimmer.ts +20 -9
  843. package/src/modes/theme/theme-schema.json +1 -1
  844. package/src/modes/theme/theme.ts +342 -82
  845. package/src/modes/types.ts +60 -18
  846. package/src/modes/utils/context-usage.ts +88 -8
  847. package/src/modes/utils/copy-targets.ts +133 -27
  848. package/src/modes/utils/hotkeys-markdown.ts +3 -2
  849. package/src/modes/utils/ui-helpers.ts +191 -110
  850. package/src/modes/workflow.ts +10 -10
  851. package/src/plan-mode/approved-plan.ts +66 -43
  852. package/src/plan-mode/plan-protection.ts +4 -4
  853. package/src/priority.json +5 -1
  854. package/src/prompts/agents/designer.md +1 -1
  855. package/src/prompts/agents/explore.md +3 -3
  856. package/src/prompts/agents/librarian.md +2 -3
  857. package/src/prompts/agents/oracle.md +2 -2
  858. package/src/prompts/agents/plan.md +6 -6
  859. package/src/prompts/agents/reviewer.md +1 -1
  860. package/src/prompts/agents/task.md +6 -5
  861. package/src/prompts/bench.md +12 -0
  862. package/src/prompts/ci-green-request.md +5 -7
  863. package/src/prompts/goals/goal-budget-limit.md +2 -2
  864. package/src/prompts/goals/goal-continuation.md +4 -4
  865. package/src/prompts/goals/goal-mode-active.md +1 -1
  866. package/src/prompts/goals/guided-goal-interview.md +8 -0
  867. package/src/prompts/goals/guided-goal-system.md +12 -0
  868. package/src/prompts/memories/consolidation.md +2 -7
  869. package/src/prompts/memories/consolidation_system.md +4 -0
  870. package/src/prompts/memories/identity_review.md +2 -2
  871. package/src/prompts/memories/read-path.md +11 -10
  872. package/src/prompts/memories/stage_one_system.md +2 -2
  873. package/src/prompts/review-custom-request.md +1 -1
  874. package/src/prompts/system/agent-creation-architect.md +2 -2
  875. package/src/prompts/system/auto-continue.md +1 -1
  876. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  877. package/src/prompts/system/autolearn-guidance.md +7 -0
  878. package/src/prompts/system/autolearn-nudge.md +3 -0
  879. package/src/prompts/system/background-tan-dispatch.md +8 -0
  880. package/src/prompts/system/btw-user.md +2 -2
  881. package/src/prompts/system/commit-message-system.md +13 -1
  882. package/src/prompts/system/custom-system-prompt.md +1 -1
  883. package/src/prompts/system/eager-task.md +7 -0
  884. package/src/prompts/system/eager-todo.md +11 -6
  885. package/src/prompts/system/empty-stop-retry.md +4 -6
  886. package/src/prompts/system/irc-autoreply.md +6 -0
  887. package/src/prompts/system/irc-incoming.md +3 -4
  888. package/src/prompts/system/manual-continue.md +7 -0
  889. package/src/prompts/system/omfg-user.md +3 -4
  890. package/src/prompts/system/orchestrate-notice.md +10 -10
  891. package/src/prompts/system/personalities/default.md +26 -0
  892. package/src/prompts/system/personalities/friendly.md +17 -0
  893. package/src/prompts/system/personalities/pragmatic.md +15 -0
  894. package/src/prompts/system/plan-mode-active.md +70 -77
  895. package/src/prompts/system/plan-mode-approved.md +1 -1
  896. package/src/prompts/system/plan-mode-subagent.md +4 -5
  897. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  898. package/src/prompts/system/project-prompt.md +2 -2
  899. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  900. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  901. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  902. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  903. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  904. package/src/prompts/system/subagent-system-prompt.md +7 -8
  905. package/src/prompts/system/system-prompt.md +28 -57
  906. package/src/prompts/system/tiny-title-system.md +1 -1
  907. package/src/prompts/system/title-marker-instruction.md +1 -0
  908. package/src/prompts/system/title-system-marker.md +16 -0
  909. package/src/prompts/system/title-system.md +16 -3
  910. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  911. package/src/prompts/system/workflow-notice.md +4 -4
  912. package/src/prompts/tools/ast-edit.md +1 -1
  913. package/src/prompts/tools/ast-grep.md +2 -2
  914. package/src/prompts/tools/bash.md +16 -8
  915. package/src/prompts/tools/browser.md +33 -43
  916. package/src/prompts/tools/debug.md +1 -1
  917. package/src/prompts/tools/eval.md +31 -51
  918. package/src/prompts/tools/find.md +0 -1
  919. package/src/prompts/tools/github.md +8 -7
  920. package/src/prompts/tools/goal.md +1 -1
  921. package/src/prompts/tools/image-gen.md +1 -1
  922. package/src/prompts/tools/inspect-image-system.md +1 -1
  923. package/src/prompts/tools/irc.md +39 -31
  924. package/src/prompts/tools/job.md +2 -1
  925. package/src/prompts/tools/learn.md +7 -0
  926. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  927. package/src/prompts/tools/lsp.md +2 -2
  928. package/src/prompts/tools/manage-skill.md +9 -0
  929. package/src/prompts/tools/memory-edit.md +1 -1
  930. package/src/prompts/tools/patch.md +2 -2
  931. package/src/prompts/tools/read.md +31 -39
  932. package/src/prompts/tools/recall.md +1 -1
  933. package/src/prompts/tools/reflect.md +1 -1
  934. package/src/prompts/tools/render-mermaid.md +2 -2
  935. package/src/prompts/tools/replace.md +4 -10
  936. package/src/prompts/tools/rewind.md +2 -2
  937. package/src/prompts/tools/search-tool-bm25.md +1 -9
  938. package/src/prompts/tools/search.md +0 -1
  939. package/src/prompts/tools/ssh.md +0 -4
  940. package/src/prompts/tools/task-summary.md +5 -16
  941. package/src/prompts/tools/task.md +47 -31
  942. package/src/prompts/tools/todo.md +6 -3
  943. package/src/registry/agent-lifecycle.ts +218 -0
  944. package/src/registry/agent-registry.ts +46 -5
  945. package/src/sdk.ts +692 -219
  946. package/src/secrets/index.ts +8 -1
  947. package/src/secrets/obfuscator.ts +40 -19
  948. package/src/session/agent-session.ts +1577 -806
  949. package/src/session/agent-storage.ts +18 -9
  950. package/src/session/auth-broker-config.ts +30 -1
  951. package/src/session/auth-storage.ts +6 -0
  952. package/src/session/codex-auto-reset.ts +202 -0
  953. package/src/session/history-storage.ts +3 -2
  954. package/src/session/indexed-session-storage.ts +7 -10
  955. package/src/session/messages.ts +59 -95
  956. package/src/session/session-context.ts +352 -0
  957. package/src/session/session-dump-format.ts +12 -3
  958. package/src/session/session-entries.ts +194 -0
  959. package/src/session/session-history-format.ts +246 -0
  960. package/src/session/session-listing.ts +588 -0
  961. package/src/session/session-loader.ts +106 -0
  962. package/src/session/session-manager.ts +1003 -2920
  963. package/src/session/session-migrations.ts +78 -0
  964. package/src/session/session-paths.ts +193 -0
  965. package/src/session/session-persistence.ts +131 -0
  966. package/src/session/session-storage.ts +91 -30
  967. package/src/session/snapcompact-inline.ts +542 -0
  968. package/src/session/snapcompact-savings-journal.ts +113 -0
  969. package/src/session/streaming-output.ts +248 -11
  970. package/src/session/tool-choice-queue.ts +23 -11
  971. package/src/session/yield-queue.ts +20 -2
  972. package/src/slash-commands/acp-builtins.ts +25 -1
  973. package/src/slash-commands/available-commands.ts +105 -0
  974. package/src/slash-commands/builtin-registry.ts +575 -49
  975. package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
  976. package/src/slash-commands/helpers/context-report.ts +28 -1
  977. package/src/slash-commands/helpers/logout.ts +88 -0
  978. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  979. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  980. package/src/slash-commands/helpers/usage-report.ts +38 -3
  981. package/src/slash-commands/types.ts +5 -9
  982. package/src/ssh/connection-manager.ts +27 -0
  983. package/src/ssh/ssh-executor.ts +60 -4
  984. package/src/stt/asr-client.ts +520 -0
  985. package/src/stt/asr-protocol.ts +65 -0
  986. package/src/stt/asr-worker.ts +790 -0
  987. package/src/stt/downloader.ts +107 -47
  988. package/src/stt/endpointer.ts +259 -0
  989. package/src/stt/index.ts +5 -1
  990. package/src/stt/models.ts +150 -0
  991. package/src/stt/recorder.ts +254 -67
  992. package/src/stt/stt-controller.ts +201 -22
  993. package/src/stt/transcriber.ts +37 -68
  994. package/src/stt/wav.ts +173 -0
  995. package/src/system-prompt.ts +52 -10
  996. package/src/task/agents.ts +3 -4
  997. package/src/task/commands.ts +3 -2
  998. package/src/task/discovery.ts +17 -24
  999. package/src/task/executor.ts +1054 -529
  1000. package/src/task/index.ts +862 -757
  1001. package/src/task/output-manager.ts +0 -11
  1002. package/src/task/parallel.ts +3 -3
  1003. package/src/task/prometheus-command.ts +2 -2
  1004. package/src/task/render.ts +529 -182
  1005. package/src/task/repair-args.ts +21 -9
  1006. package/src/task/types.ts +144 -66
  1007. package/src/task/worktree.ts +64 -56
  1008. package/src/telemetry-export.ts +27 -9
  1009. package/src/thinking.ts +9 -7
  1010. package/src/tiny/models.ts +2 -2
  1011. package/src/tiny/text.ts +5 -1
  1012. package/src/tiny/title-client.ts +72 -20
  1013. package/src/tiny/title-protocol.ts +1 -1
  1014. package/src/tiny/worker.ts +23 -99
  1015. package/src/tool-discovery/tool-index.ts +2 -0
  1016. package/src/tools/archive-reader.ts +94 -2
  1017. package/src/tools/ask.ts +234 -177
  1018. package/src/tools/ast-edit.ts +136 -80
  1019. package/src/tools/ast-grep.ts +41 -45
  1020. package/src/tools/auto-generated-guard.ts +20 -3
  1021. package/src/tools/bash-interactive.ts +28 -8
  1022. package/src/tools/bash.ts +198 -35
  1023. package/src/tools/browser/attach.ts +26 -7
  1024. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  1025. package/src/tools/browser/cmux/rpc.ts +156 -0
  1026. package/src/tools/browser/cmux/socket-client.ts +309 -0
  1027. package/src/tools/browser/launch.ts +11 -2
  1028. package/src/tools/browser/readable.ts +19 -2
  1029. package/src/tools/browser/registry.ts +52 -5
  1030. package/src/tools/browser/render.ts +13 -5
  1031. package/src/tools/browser/tab-protocol.ts +2 -0
  1032. package/src/tools/browser/tab-supervisor.ts +256 -34
  1033. package/src/tools/browser/tab-worker.ts +259 -91
  1034. package/src/tools/browser.ts +44 -2
  1035. package/src/tools/checkpoint.ts +1 -1
  1036. package/src/tools/conflict-detect.ts +50 -4
  1037. package/src/tools/debug.ts +27 -12
  1038. package/src/tools/eval-render.ts +32 -35
  1039. package/src/tools/eval.ts +26 -12
  1040. package/src/tools/fetch.ts +450 -99
  1041. package/src/tools/find.ts +182 -142
  1042. package/src/tools/gh-cache-invalidation.ts +255 -0
  1043. package/src/tools/gh-renderer.ts +104 -51
  1044. package/src/tools/gh.ts +232 -37
  1045. package/src/tools/github-cache.ts +97 -7
  1046. package/src/tools/grouped-file-output.ts +159 -52
  1047. package/src/tools/image-gen.ts +237 -132
  1048. package/src/tools/index.ts +147 -26
  1049. package/src/tools/inspect-image-renderer.ts +74 -45
  1050. package/src/tools/inspect-image.ts +12 -6
  1051. package/src/tools/irc.ts +626 -173
  1052. package/src/tools/job.ts +106 -29
  1053. package/src/tools/learn.ts +144 -0
  1054. package/src/tools/manage-skill.ts +104 -0
  1055. package/src/tools/memory-edit.ts +4 -4
  1056. package/src/tools/memory-recall.ts +7 -9
  1057. package/src/tools/memory-reflect.ts +5 -9
  1058. package/src/tools/memory-render.ts +23 -6
  1059. package/src/tools/memory-retain.ts +4 -4
  1060. package/src/tools/path-utils.ts +102 -48
  1061. package/src/tools/plan-mode-guard.ts +101 -40
  1062. package/src/tools/read.ts +475 -120
  1063. package/src/tools/render-mermaid.ts +1 -1
  1064. package/src/tools/render-utils.ts +132 -76
  1065. package/src/tools/renderers.ts +12 -1
  1066. package/src/tools/report-tool-issue.ts +14 -6
  1067. package/src/tools/resolve.ts +20 -3
  1068. package/src/tools/review.ts +2 -2
  1069. package/src/tools/search-tool-bm25.ts +37 -24
  1070. package/src/tools/search.ts +233 -115
  1071. package/src/tools/sqlite-reader.ts +26 -17
  1072. package/src/tools/ssh.ts +20 -14
  1073. package/src/tools/todo.ts +197 -191
  1074. package/src/tools/tool-result.ts +8 -0
  1075. package/src/tools/tool-timeouts.ts +1 -1
  1076. package/src/tools/tts.ts +205 -74
  1077. package/src/tools/write.ts +291 -155
  1078. package/src/tools/yield.ts +10 -1
  1079. package/src/tts/downloader.ts +64 -0
  1080. package/src/tts/index.ts +8 -0
  1081. package/src/tts/models.ts +137 -0
  1082. package/src/tts/player.ts +137 -0
  1083. package/src/tts/runtime.ts +21 -0
  1084. package/src/tts/streaming-player.ts +266 -0
  1085. package/src/tts/tts-client.ts +647 -0
  1086. package/src/tts/tts-protocol.ts +60 -0
  1087. package/src/tts/tts-worker.ts +505 -0
  1088. package/src/tts/vocalizer.ts +162 -0
  1089. package/src/tts/wav.ts +58 -0
  1090. package/src/tui/code-cell.ts +2 -7
  1091. package/src/tui/hyperlink.ts +40 -26
  1092. package/src/tui/output-block.ts +60 -108
  1093. package/src/tui/status-line.ts +5 -1
  1094. package/src/utils/block-context.ts +312 -0
  1095. package/src/utils/changelog.ts +27 -1
  1096. package/src/utils/clipboard.ts +91 -22
  1097. package/src/utils/commit-message-generator.ts +8 -3
  1098. package/src/utils/enhanced-paste.ts +230 -0
  1099. package/src/utils/file-mentions.ts +3 -1
  1100. package/src/utils/git.ts +315 -15
  1101. package/src/utils/image-loading.ts +65 -4
  1102. package/src/utils/session-color.ts +83 -9
  1103. package/src/utils/thinking-display.ts +37 -0
  1104. package/src/utils/title-generator.ts +73 -10
  1105. package/src/utils/tool-choice.ts +16 -0
  1106. package/src/utils/tools-manager.ts +19 -1
  1107. package/src/web/kagi.ts +28 -26
  1108. package/src/web/parallel.ts +7 -3
  1109. package/src/web/scrapers/arxiv.ts +1 -1
  1110. package/src/web/scrapers/github.ts +351 -3
  1111. package/src/web/scrapers/go-pkg.ts +1 -1
  1112. package/src/web/scrapers/iacr.ts +1 -1
  1113. package/src/web/scrapers/readthedocs.ts +1 -1
  1114. package/src/web/scrapers/twitter.ts +2 -1
  1115. package/src/web/scrapers/types.ts +87 -8
  1116. package/src/web/scrapers/wikipedia.ts +1 -1
  1117. package/src/web/scrapers/youtube.ts +9 -3
  1118. package/src/web/search/index.ts +15 -2
  1119. package/src/web/search/providers/anthropic.ts +62 -21
  1120. package/src/web/search/providers/base.ts +2 -1
  1121. package/src/web/search/providers/brave.ts +5 -2
  1122. package/src/web/search/providers/codex.ts +87 -51
  1123. package/src/web/search/providers/exa.ts +101 -10
  1124. package/src/web/search/providers/gemini.ts +49 -24
  1125. package/src/web/search/providers/jina.ts +15 -5
  1126. package/src/web/search/providers/kagi.ts +9 -2
  1127. package/src/web/search/providers/kimi.ts +45 -20
  1128. package/src/web/search/providers/parallel.ts +39 -24
  1129. package/src/web/search/providers/perplexity.ts +226 -63
  1130. package/src/web/search/providers/searxng.ts +19 -3
  1131. package/src/web/search/providers/synthetic.ts +16 -11
  1132. package/src/web/search/providers/tavily.ts +12 -9
  1133. package/src/web/search/providers/zai.ts +22 -9
  1134. package/src/web/search/render.ts +59 -64
  1135. package/src/web/search/types.ts +5 -1
  1136. package/dist/types/discovery/context-files.d.ts +0 -17
  1137. package/dist/types/exa/factory.d.ts +0 -13
  1138. package/dist/types/exa/render.d.ts +0 -19
  1139. package/dist/types/exa/researcher.d.ts +0 -9
  1140. package/dist/types/exa/search.d.ts +0 -9
  1141. package/dist/types/exa/websets.d.ts +0 -9
  1142. package/dist/types/export/html/template.generated.d.ts +0 -1
  1143. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  1144. package/dist/types/modes/components/status-line.d.ts +0 -77
  1145. package/dist/types/slash-commands/headless-plan.d.ts +0 -3
  1146. package/dist/types/stt/setup.d.ts +0 -18
  1147. package/scripts/generate-template.ts +0 -33
  1148. package/src/discovery/context-files.ts +0 -49
  1149. package/src/exa/factory.ts +0 -60
  1150. package/src/exa/render.ts +0 -244
  1151. package/src/exa/researcher.ts +0 -36
  1152. package/src/exa/search.ts +0 -47
  1153. package/src/exa/websets.ts +0 -248
  1154. package/src/export/html/template.generated.ts +0 -2
  1155. package/src/modes/components/session-observer-overlay.ts +0 -852
  1156. package/src/slash-commands/headless-plan.ts +0 -142
  1157. package/src/stt/setup.ts +0 -52
  1158. package/src/stt/transcribe.py +0 -70
  1159. /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
  1160. /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
@@ -1,5 +1,8 @@
1
1
  import { THINKING_EFFORTS } from "@prometheus-ai/ai";
2
- import { TASK_SIMPLE_MODES } from "../task/simple-mode";
2
+ import { SHAPE_VARIANT_NAMES } from "@prometheus-ai/snapcompact";
3
+ import { DEFAULT_SHARE_URL } from "@prometheus-ai/wire";
4
+ import { DEFAULT_RELAY_URL } from "../collab/protocol";
5
+ import { DEFAULT_STT_MODEL_KEY, STT_MODEL_OPTIONS, STT_MODEL_VALUES } from "../stt/models";
3
6
  import { AUTO_THINKING, getConfiguredThinkingLevelMetadata, getThinkingLevelMetadata } from "../thinking";
4
7
  import {
5
8
  TINY_MODEL_DEVICE_DEFAULT,
@@ -22,15 +25,27 @@ import {
22
25
  TINY_TITLE_MODEL_OPTIONS,
23
26
  TINY_TITLE_MODEL_VALUES,
24
27
  } from "../tiny/models";
28
+ import {
29
+ DEFAULT_TTS_LOCAL_MODEL_KEY,
30
+ DEFAULT_TTS_VOICE,
31
+ TTS_LOCAL_MODEL_OPTIONS,
32
+ TTS_LOCAL_MODEL_VALUES,
33
+ TTS_LOCAL_VOICE_OPTIONS,
34
+ TTS_LOCAL_VOICE_VALUES,
35
+ } from "../tts/models";
25
36
  import { EDIT_MODES } from "../utils/edit-mode";
26
37
  import { SEARCH_PROVIDER_OPTIONS, SEARCH_PROVIDER_PREFERENCES } from "../web/search/types";
27
38
 
28
39
  /** Unified settings schema - single source of truth for all settings.
29
- * Unified settings schema - single source of truth for all settings.
30
40
  *
31
41
  * Each setting is defined once here with:
32
42
  * - Type and default value
33
- * - Optional UI metadata (label, description, tab)
43
+ * - Optional UI metadata (label, description, tab, group)
44
+ *
45
+ * UI metadata places the setting in the settings panel: `tab` picks the
46
+ * panel tab, `group` the titled section within it (registered in
47
+ * TAB_GROUPS). Sections render in TAB_GROUPS order; settings within a
48
+ * section keep declaration order.
34
49
  *
35
50
  * The Settings singleton provides type-safe path-based access:
36
51
  * settings.get("compaction.enabled") // => boolean
@@ -47,7 +62,8 @@ export type SettingTab =
47
62
  | "interaction"
48
63
  | "context"
49
64
  | "memory"
50
- | "editing"
65
+ | "files"
66
+ | "shell"
51
67
  | "tools"
52
68
  | "tasks"
53
69
  | "providers"
@@ -63,7 +79,8 @@ export const SETTING_TABS: SettingTab[] = [
63
79
  "interaction",
64
80
  "context",
65
81
  "memory",
66
- "editing",
82
+ "files",
83
+ "shell",
67
84
  "tools",
68
85
  "tasks",
69
86
  "providers",
@@ -77,16 +94,54 @@ export const TAB_METADATA: Record<SettingTab, { label: string; icon: `tab.${stri
77
94
  interaction: { label: "Interaction", icon: "tab.interaction" },
78
95
  context: { label: "Context", icon: "tab.context" },
79
96
  memory: { label: "Memory", icon: "tab.memory" },
80
- editing: { label: "Editing", icon: "tab.editing" },
97
+ files: { label: "Files", icon: "tab.files" },
98
+ shell: { label: "Shell", icon: "tab.shell" },
81
99
  tools: { label: "Tools", icon: "tab.tools" },
82
100
  tasks: { label: "Tasks", icon: "tab.tasks" },
83
101
  providers: { label: "Providers", icon: "tab.providers" },
84
102
  channels: { label: "Channels", icon: "tab.channels" },
85
103
  };
86
104
 
105
+ /**
106
+ * Ordered section groups per tab. Settings declare their section via `ui.group`;
107
+ * the settings UI renders groups in this order with a heading row between them.
108
+ * Ungrouped settings render first, before any section heading.
109
+ */
110
+ export const TAB_GROUPS: Record<SettingTab, readonly string[]> = {
111
+ appearance: ["Theme", "Status Line", "Display", "Images"],
112
+ model: ["Thinking", "Sampling", "Prompt", "Retry & Fallback"],
113
+ interaction: [
114
+ "Input",
115
+ "Approvals",
116
+ "Notifications",
117
+ "Speech",
118
+ "Collab",
119
+ "Magic Keywords",
120
+ "Startup & Updates",
121
+ "Power (macOS)",
122
+ ],
123
+ context: ["General", "Compaction", "Rules (TTSR)", "Experimental"],
124
+ memory: ["General", "Auto-Learn", "Mnemopi", "Hindsight", "Self Improvement"],
125
+ files: ["Editing", "Reading", "Read Summaries", "LSP"],
126
+ shell: ["Bash", "Eval & Python"],
127
+ tools: [
128
+ "Available Tools",
129
+ "Todos",
130
+ "Search & Browser",
131
+ "GitHub",
132
+ "Output Limits",
133
+ "Execution",
134
+ "Discovery & MCP",
135
+ "Developer",
136
+ ],
137
+ tasks: ["Modes", "Subagents", "Isolation", "Commands & Skills"],
138
+ providers: ["Services", "Tiny Model", "Protocol", "Privacy"],
139
+ channels: ["Telegram"],
140
+ };
141
+
87
142
  /** Status line segment identifiers */
88
143
  export type StatusLineSegmentId =
89
- | "prometheus"
144
+ | "pi"
90
145
  | "model"
91
146
  | "mode"
92
147
  | "path"
@@ -108,7 +163,8 @@ export type StatusLineSegmentId =
108
163
  | "cache_write"
109
164
  | "cache_hit"
110
165
  | "session_name"
111
- | "usage";
166
+ | "usage"
167
+ | "collab";
112
168
 
113
169
  /** Submenu choice metadata. */
114
170
  export type SubmenuOption<V extends string = string> = {
@@ -119,6 +175,8 @@ export type SubmenuOption<V extends string = string> = {
119
175
 
120
176
  interface UiBase {
121
177
  tab: SettingTab;
178
+ /** Section within the tab; must be listed in TAB_GROUPS[tab]. Ungrouped settings render at the top. */
179
+ group?: string;
122
180
  label: string;
123
181
  description: string;
124
182
  /** Condition function name - setting only shown when true */
@@ -154,7 +212,7 @@ export type AnyUiMetadata = UiBase & {
154
212
 
155
213
  interface BooleanDef {
156
214
  type: "boolean";
157
- default: boolean;
215
+ default: boolean | undefined;
158
216
  ui?: UiBoolean;
159
217
  }
160
218
 
@@ -204,6 +262,8 @@ type SettingDef =
204
262
  export interface ModelTagDef {
205
263
  name: string;
206
264
  color?: string;
265
+ /** If true, the role is functional but not shown in the model selector UI. */
266
+ hidden?: boolean;
207
267
  }
208
268
 
209
269
  export interface ModelTagsSettings {
@@ -250,7 +310,11 @@ export const DEFAULT_BASH_INTERCEPTOR_RULES: BashInterceptorRule[] = [
250
310
  message: "Use the `edit` tool instead of awk -i inplace. It provides diff preview and fuzzy matching.",
251
311
  },
252
312
  {
253
- pattern: "^\\s*(echo|printf|cat\\s*<<)\\s+.*[^|]>\\s*\\S",
313
+ // `>` must sit outside quoted regions (so `echo "a -> b"` passes) and be
314
+ // followed by a plausible filename — including `$VAR` targets; `>|`
315
+ // (clobber) counts as a redirect; `>&2`/`2>&1` style fd duplication is
316
+ // not matched.
317
+ pattern: "^\\s*(echo|printf|cat\\s*<<)\\s+(?:[^\"'>]|\"[^\"]*\"|'[^']*')*(?<!\\|)>{1,2}\\|?\\s*[$\\w./~\"'-]",
254
318
  tool: "write",
255
319
  message: "Use the `write` tool instead of echo/cat redirection. It handles encoding and provides confirmation.",
256
320
  },
@@ -260,7 +324,6 @@ export const SETTINGS_SCHEMA = {
260
324
  // ────────────────────────────────────────────────────────────────────────
261
325
  // General settings (no UI)
262
326
  // ────────────────────────────────────────────────────────────────────────
263
- lastChangelogVersion: { type: "string", default: undefined },
264
327
  setupVersion: { type: "number", default: 0 },
265
328
 
266
329
  // Auth broker — credentials proxied through a remote `prometheus auth-broker serve`
@@ -277,6 +340,7 @@ export const SETTINGS_SCHEMA = {
277
340
  default: false,
278
341
  ui: {
279
342
  tab: "channels",
343
+ group: "Telegram",
280
344
  label: "Telegram Gateway",
281
345
  description: "Use the configured Telegram Bot API gateway when serving Prometheus externally",
282
346
  },
@@ -287,6 +351,7 @@ export const SETTINGS_SCHEMA = {
287
351
  default: "webhook",
288
352
  ui: {
289
353
  tab: "channels",
354
+ group: "Telegram",
290
355
  label: "Telegram Connection Mode",
291
356
  description: "Use webhook ingress or Bot API long polling for Telegram updates",
292
357
  options: [
@@ -304,6 +369,7 @@ export const SETTINGS_SCHEMA = {
304
369
  default: undefined,
305
370
  ui: {
306
371
  tab: "channels",
372
+ group: "Telegram",
307
373
  label: "Telegram Bot Username",
308
374
  description: "Telegram bot username without @; setup can fill this from getMe",
309
375
  },
@@ -313,6 +379,7 @@ export const SETTINGS_SCHEMA = {
313
379
  default: undefined,
314
380
  ui: {
315
381
  tab: "channels",
382
+ group: "Telegram",
316
383
  label: "Telegram Public URL",
317
384
  description: "HTTPS public base URL that Telegram should call through the tunnel",
318
385
  },
@@ -322,6 +389,7 @@ export const SETTINGS_SCHEMA = {
322
389
  default: "/telegram/webhook",
323
390
  ui: {
324
391
  tab: "channels",
392
+ group: "Telegram",
325
393
  label: "Telegram Webhook Path",
326
394
  description: "HTTP path that receives Telegram webhook updates",
327
395
  },
@@ -331,16 +399,28 @@ export const SETTINGS_SCHEMA = {
331
399
  default: undefined,
332
400
  ui: {
333
401
  tab: "channels",
402
+ group: "Telegram",
334
403
  label: "Telegram Allowed Users",
335
404
  description: "Comma-separated Telegram user IDs allowed to use the gateway",
336
405
  },
337
406
  },
407
+ "gateway.telegram.allowedChats": {
408
+ type: "string",
409
+ default: undefined,
410
+ ui: {
411
+ tab: "channels",
412
+ group: "Telegram",
413
+ label: "Telegram Allowed Chats",
414
+ description: "Comma-separated Telegram chat IDs allowed to use the gateway",
415
+ },
416
+ },
338
417
  "gateway.telegram.groupScope": {
339
418
  type: "enum",
340
419
  values: ["shared", "per-user"] as const,
341
420
  default: "shared",
342
421
  ui: {
343
422
  tab: "channels",
423
+ group: "Telegram",
344
424
  label: "Telegram Group Scope",
345
425
  description: "Session sharing for non-threaded group chats",
346
426
  options: [
@@ -355,6 +435,7 @@ export const SETTINGS_SCHEMA = {
355
435
  default: "shared",
356
436
  ui: {
357
437
  tab: "channels",
438
+ group: "Telegram",
358
439
  label: "Telegram Thread Scope",
359
440
  description: "Session sharing for Telegram topics and direct-message topics",
360
441
  options: [
@@ -369,6 +450,7 @@ export const SETTINGS_SCHEMA = {
369
450
  default: "none",
370
451
  ui: {
371
452
  tab: "channels",
453
+ group: "Telegram",
372
454
  label: "Telegram Parse Mode",
373
455
  description: "Telegram parse_mode for bot replies",
374
456
  options: [
@@ -384,6 +466,7 @@ export const SETTINGS_SCHEMA = {
384
466
  default: false,
385
467
  ui: {
386
468
  tab: "channels",
469
+ group: "Telegram",
387
470
  label: "Telegram Silent Replies",
388
471
  description: "Send Telegram replies without notification sound",
389
472
  },
@@ -393,6 +476,7 @@ export const SETTINGS_SCHEMA = {
393
476
  default: true,
394
477
  ui: {
395
478
  tab: "channels",
479
+ group: "Telegram",
396
480
  label: "Telegram HD Previews",
397
481
  description: "Ask Telegram to use larger media previews where the Bot API supports it",
398
482
  },
@@ -402,6 +486,7 @@ export const SETTINGS_SCHEMA = {
402
486
  default: false,
403
487
  ui: {
404
488
  tab: "channels",
489
+ group: "Telegram",
405
490
  label: "Telegram Bot Messages",
406
491
  description: "Allow Telegram messages sent by bot accounts",
407
492
  },
@@ -411,6 +496,7 @@ export const SETTINGS_SCHEMA = {
411
496
  default: false,
412
497
  ui: {
413
498
  tab: "channels",
499
+ group: "Telegram",
414
500
  label: "Telegram Raw Payloads",
415
501
  description: "Attach raw Telegram update payloads to gateway events for debugging",
416
502
  },
@@ -420,6 +506,7 @@ export const SETTINGS_SCHEMA = {
420
506
  default: true,
421
507
  ui: {
422
508
  tab: "channels",
509
+ group: "Telegram",
423
510
  label: "Telegram Expressions",
424
511
  description: "Allow Prometheus to attach matching Telegram expression intents to replies",
425
512
  },
@@ -429,6 +516,7 @@ export const SETTINGS_SCHEMA = {
429
516
  default: 2,
430
517
  ui: {
431
518
  tab: "channels",
519
+ group: "Telegram",
432
520
  label: "Telegram Expression Match",
433
521
  description: "Minimum local catalog match score before attaching a Telegram expression",
434
522
  options: [
@@ -443,6 +531,7 @@ export const SETTINGS_SCHEMA = {
443
531
  default: EMPTY_UNKNOWN_RECORD,
444
532
  ui: {
445
533
  tab: "channels",
534
+ group: "Telegram",
446
535
  label: "Telegram Expression Catalog",
447
536
  description: "Searchable Telegram expression intents with sticker/GIF variants",
448
537
  },
@@ -452,6 +541,7 @@ export const SETTINGS_SCHEMA = {
452
541
  default: undefined,
453
542
  ui: {
454
543
  tab: "channels",
544
+ group: "Telegram",
455
545
  label: "Telegram Expression File",
456
546
  description: "Optional JSON catalog path for Telegram expression intents",
457
547
  },
@@ -462,6 +552,7 @@ export const SETTINGS_SCHEMA = {
462
552
  default: false,
463
553
  ui: {
464
554
  tab: "interaction",
555
+ group: "Startup & Updates",
465
556
  label: "Auto Resume",
466
557
  description: "Automatically resume the most recent session in the current directory",
467
558
  },
@@ -473,8 +564,9 @@ export const SETTINGS_SCHEMA = {
473
564
  default: true,
474
565
  ui: {
475
566
  tab: "interaction",
476
- label: "Prevent Idle Sleep (macOS)",
477
- description: "caffeinate -i: keep the system awake while a session is open",
567
+ group: "Power (macOS)",
568
+ label: "Prevent Idle Sleep",
569
+ description: "Keep the system awake while a session is open (caffeinate -i)",
478
570
  },
479
571
  },
480
572
  "power.preventSystemSleep": {
@@ -482,8 +574,9 @@ export const SETTINGS_SCHEMA = {
482
574
  default: false,
483
575
  ui: {
484
576
  tab: "interaction",
485
- label: "Prevent System Sleep on AC (macOS)",
486
- description: "caffeinate -s: block all system sleep while on AC power",
577
+ group: "Power (macOS)",
578
+ label: "Prevent System Sleep on AC",
579
+ description: "Block all system sleep while on AC power (caffeinate -s)",
487
580
  },
488
581
  },
489
582
  "power.declareUserActive": {
@@ -491,8 +584,9 @@ export const SETTINGS_SCHEMA = {
491
584
  default: false,
492
585
  ui: {
493
586
  tab: "interaction",
494
- label: "Declare User Active (macOS)",
495
- description: "caffeinate -u: keep the display lit and treat the user as active",
587
+ group: "Power (macOS)",
588
+ label: "Declare User Active",
589
+ description: "Keep the display lit and treat the user as active (caffeinate -u)",
496
590
  },
497
591
  },
498
592
  "power.preventDisplaySleep": {
@@ -500,30 +594,15 @@ export const SETTINGS_SCHEMA = {
500
594
  default: false,
501
595
  ui: {
502
596
  tab: "interaction",
503
- label: "Prevent Display Sleep (macOS)",
504
- description: "caffeinate -d: keep the display from idle-sleeping while a session is open",
597
+ group: "Power (macOS)",
598
+ label: "Prevent Display Sleep",
599
+ description: "Keep the display from idle-sleeping while a session is open (caffeinate -d)",
505
600
  },
506
601
  },
507
602
  shellPath: { type: "string", default: undefined },
508
603
 
509
604
  extensions: { type: "array", default: EMPTY_STRING_ARRAY },
510
605
 
511
- "marketplace.autoUpdate": {
512
- type: "enum",
513
- values: ["off", "notify", "auto"] as const,
514
- default: "notify",
515
- ui: {
516
- tab: "tools",
517
- label: "Marketplace Auto-Update",
518
- description: "Check for plugin updates on startup (off/notify/auto)",
519
- options: [
520
- { value: "off", label: "Off", description: "Don't check for plugin updates" },
521
- { value: "notify", label: "Notify", description: "Check on startup and notify when updates are available" },
522
- { value: "auto", label: "Auto", description: "Check on startup and auto-install updates" },
523
- ],
524
- },
525
- },
526
-
527
606
  enabledModels: { type: "array", default: EMPTY_STRING_ARRAY },
528
607
 
529
608
  disabledProviders: { type: "array", default: EMPTY_STRING_ARRAY },
@@ -548,8 +627,9 @@ export const SETTINGS_SCHEMA = {
548
627
  default: "titanium",
549
628
  ui: {
550
629
  tab: "appearance",
630
+ group: "Theme",
551
631
  label: "Dark Theme",
552
- description: "Theme used when terminal has dark background",
632
+ description: "Theme used when the terminal has a dark background",
553
633
  options: "runtime",
554
634
  },
555
635
  },
@@ -559,8 +639,9 @@ export const SETTINGS_SCHEMA = {
559
639
  default: "light",
560
640
  ui: {
561
641
  tab: "appearance",
642
+ group: "Theme",
562
643
  label: "Light Theme",
563
- description: "Theme used when terminal has light background",
644
+ description: "Theme used when the terminal has a light background",
564
645
  options: "runtime",
565
646
  },
566
647
  },
@@ -571,8 +652,9 @@ export const SETTINGS_SCHEMA = {
571
652
  default: "unicode",
572
653
  ui: {
573
654
  tab: "appearance",
655
+ group: "Theme",
574
656
  label: "Symbol Preset",
575
- description: "Icon/symbol style",
657
+ description: "Glyph set for icons and symbols (Unicode, Nerd Font, or ASCII)",
576
658
  options: [
577
659
  { value: "unicode", label: "Unicode", description: "Standard symbols (default)" },
578
660
  { value: "nerd", label: "Nerd Font", description: "Requires Nerd Font" },
@@ -586,6 +668,7 @@ export const SETTINGS_SCHEMA = {
586
668
  default: false,
587
669
  ui: {
588
670
  tab: "appearance",
671
+ group: "Theme",
589
672
  label: "Color-Blind Mode",
590
673
  description: "Use blue instead of green for diff additions",
591
674
  },
@@ -598,6 +681,7 @@ export const SETTINGS_SCHEMA = {
598
681
  default: "default",
599
682
  ui: {
600
683
  tab: "appearance",
684
+ group: "Status Line",
601
685
  label: "Status Line Preset",
602
686
  description: "Pre-built status line configurations",
603
687
  options: [
@@ -618,6 +702,7 @@ export const SETTINGS_SCHEMA = {
618
702
  default: "powerline-thin",
619
703
  ui: {
620
704
  tab: "appearance",
705
+ group: "Status Line",
621
706
  label: "Status Line Separator",
622
707
  description: "Style of separators between segments",
623
708
  options: [
@@ -637,16 +722,30 @@ export const SETTINGS_SCHEMA = {
637
722
  default: true,
638
723
  ui: {
639
724
  tab: "appearance",
725
+ group: "Status Line",
640
726
  label: "Session Accent",
641
727
  description: "Use the session name color for the editor border and status line gap",
642
728
  },
643
729
  },
730
+
731
+ "statusLine.transparent": {
732
+ type: "boolean",
733
+ default: false,
734
+ ui: {
735
+ tab: "appearance",
736
+ group: "Status Line",
737
+ label: "Transparent Status Line",
738
+ description:
739
+ "Use the terminal's default background for the status line instead of the theme's `statusLineBg`. Powerline end caps are dropped because they need a contrasting fill to bridge into the surrounding terminal.",
740
+ },
741
+ },
644
742
  "tools.artifactSpillThreshold": {
645
743
  type: "number",
646
744
  default: 50,
647
745
  ui: {
648
746
  tab: "tools",
649
- label: "Artifact spill threshold (KB)",
747
+ group: "Output Limits",
748
+ label: "Artifact Spill Threshold (KB)",
650
749
  description: "Tool output above this size is saved as an artifact; tail is kept inline",
651
750
  options: [
652
751
  { value: "1", label: "1 KB", description: "~250 tokens" },
@@ -669,7 +768,8 @@ export const SETTINGS_SCHEMA = {
669
768
  default: 20,
670
769
  ui: {
671
770
  tab: "tools",
672
- label: "Artifact tail size (KB)",
771
+ group: "Output Limits",
772
+ label: "Artifact Tail Size (KB)",
673
773
  description: "Amount of tail content kept inline when output spills to artifact",
674
774
  options: [
675
775
  { value: "1", label: "1 KB", description: "~250 tokens" },
@@ -688,7 +788,8 @@ export const SETTINGS_SCHEMA = {
688
788
  default: 20,
689
789
  ui: {
690
790
  tab: "tools",
691
- label: "Artifact head size (KB)",
791
+ group: "Output Limits",
792
+ label: "Artifact Head Size (KB)",
692
793
  description:
693
794
  "Amount of head content kept inline alongside the tail when output spills to artifact (middle elision). 0 disables — keep tail only.",
694
795
  options: [
@@ -709,7 +810,8 @@ export const SETTINGS_SCHEMA = {
709
810
  default: 768,
710
811
  ui: {
711
812
  tab: "tools",
712
- label: "Output column cap",
813
+ group: "Output Limits",
814
+ label: "Output Column Cap",
713
815
  description:
714
816
  "Per-line byte cap for streaming tool outputs (bash, ssh, python, js eval) and `read`. Lines wider than this are ellipsis-truncated; remaining bytes up to the next newline are dropped. 0 disables.",
715
817
  options: [
@@ -728,7 +830,8 @@ export const SETTINGS_SCHEMA = {
728
830
  default: 500,
729
831
  ui: {
730
832
  tab: "tools",
731
- label: "Artifact tail lines",
833
+ group: "Output Limits",
834
+ label: "Artifact Tail Lines",
732
835
  description: "Maximum lines of tail content kept inline when output spills to artifact",
733
836
  options: [
734
837
  { value: "50", label: "50 lines", description: "~250 tokens" },
@@ -747,8 +850,9 @@ export const SETTINGS_SCHEMA = {
747
850
  default: true,
748
851
  ui: {
749
852
  tab: "appearance",
853
+ group: "Status Line",
750
854
  label: "Show Hook Status",
751
- description: "Display hook status messages below status line",
855
+ description: "Display hook status messages below the status line",
752
856
  },
753
857
  },
754
858
 
@@ -764,8 +868,9 @@ export const SETTINGS_SCHEMA = {
764
868
  default: true,
765
869
  ui: {
766
870
  tab: "appearance",
871
+ group: "Images",
767
872
  label: "Show Inline Images",
768
- description: "Render images inline in terminal",
873
+ description: "Render images inline in the terminal",
769
874
  condition: "hasImageProtocol",
770
875
  },
771
876
  },
@@ -775,6 +880,7 @@ export const SETTINGS_SCHEMA = {
775
880
  default: true,
776
881
  ui: {
777
882
  tab: "appearance",
883
+ group: "Images",
778
884
  label: "Auto-Resize Images",
779
885
  description: "Resize large images to 2000x2000 max for better model compatibility",
780
886
  },
@@ -783,7 +889,12 @@ export const SETTINGS_SCHEMA = {
783
889
  "images.blockImages": {
784
890
  type: "boolean",
785
891
  default: false,
786
- ui: { tab: "appearance", label: "Block Images", description: "Prevent images from being sent to LLM providers" },
892
+ ui: {
893
+ tab: "appearance",
894
+ group: "Images",
895
+ label: "Block Images",
896
+ description: "Prevent images from being sent to LLM providers",
897
+ },
787
898
  },
788
899
 
789
900
  "tui.maxInlineImageColumns": {
@@ -812,6 +923,7 @@ export const SETTINGS_SCHEMA = {
812
923
  default: false,
813
924
  ui: {
814
925
  tab: "appearance",
926
+ group: "Display",
815
927
  label: "Large Headings (Kitty)",
816
928
  description:
817
929
  "Render Markdown H1 headings at 2x scale using Kitty's OSC 66 text-sizing protocol. Only takes effect on Kitty terminals; ignored everywhere else. Off by default.",
@@ -824,6 +936,7 @@ export const SETTINGS_SCHEMA = {
824
936
  default: "auto",
825
937
  ui: {
826
938
  tab: "appearance",
939
+ group: "Display",
827
940
  label: "Terminal Hyperlinks",
828
941
  description:
829
942
  "Wrap paths and URLs in OSC 8 hyperlinks for terminal-native click-to-open (auto: detect support; off: never; always: unconditional)",
@@ -841,6 +954,7 @@ export const SETTINGS_SCHEMA = {
841
954
  default: "classic",
842
955
  ui: {
843
956
  tab: "appearance",
957
+ group: "Display",
844
958
  label: "Shimmer",
845
959
  description: "Animation style for working/loading messages",
846
960
  options: [
@@ -851,11 +965,23 @@ export const SETTINGS_SCHEMA = {
851
965
  },
852
966
  },
853
967
 
968
+ "display.smoothStreaming": {
969
+ type: "boolean",
970
+ default: true,
971
+ ui: {
972
+ tab: "appearance",
973
+ group: "Display",
974
+ label: "Smooth Streaming",
975
+ description: "Reveal assistant text and streamed tool input smoothly while chunks arrive",
976
+ },
977
+ },
978
+
854
979
  "display.showTokenUsage": {
855
980
  type: "boolean",
856
981
  default: false,
857
982
  ui: {
858
983
  tab: "appearance",
984
+ group: "Display",
859
985
  label: "Show Token Usage",
860
986
  description: "Show per-turn token usage on assistant messages",
861
987
  },
@@ -864,16 +990,11 @@ export const SETTINGS_SCHEMA = {
864
990
  showHardwareCursor: {
865
991
  type: "boolean",
866
992
  default: true, // will be computed based on platform if undefined
867
- ui: { tab: "appearance", label: "Show Hardware Cursor", description: "Show terminal cursor for IME support" },
868
- },
869
-
870
- clearOnShrink: {
871
- type: "boolean",
872
- default: false,
873
993
  ui: {
874
994
  tab: "appearance",
875
- label: "Clear on Shrink",
876
- description: "Clear empty rows when content shrinks (may cause flicker)",
995
+ group: "Display",
996
+ label: "Show Hardware Cursor",
997
+ description: "Show terminal cursor for IME support",
877
998
  },
878
999
  },
879
1000
 
@@ -888,6 +1009,7 @@ export const SETTINGS_SCHEMA = {
888
1009
  default: "high",
889
1010
  ui: {
890
1011
  tab: "model",
1012
+ group: "Thinking",
891
1013
  label: "Thinking Level",
892
1014
  description: "Reasoning depth for thinking-capable models",
893
1015
  options: [
@@ -900,7 +1022,12 @@ export const SETTINGS_SCHEMA = {
900
1022
  hideThinkingBlock: {
901
1023
  type: "boolean",
902
1024
  default: false,
903
- ui: { tab: "model", label: "Hide Thinking Blocks", description: "Hide thinking blocks in assistant responses" },
1025
+ ui: {
1026
+ tab: "model",
1027
+ group: "Thinking",
1028
+ label: "Hide Thinking Blocks",
1029
+ description: "Hide thinking blocks in assistant responses",
1030
+ },
904
1031
  },
905
1032
 
906
1033
  repeatToolDescriptions: {
@@ -908,6 +1035,7 @@ export const SETTINGS_SCHEMA = {
908
1035
  default: false,
909
1036
  ui: {
910
1037
  tab: "model",
1038
+ group: "Prompt",
911
1039
  label: "Repeat Tool Descriptions",
912
1040
  description: "Render full tool descriptions in the system prompt instead of a tool name list",
913
1041
  },
@@ -918,17 +1046,49 @@ export const SETTINGS_SCHEMA = {
918
1046
  default: true,
919
1047
  ui: {
920
1048
  tab: "model",
921
- label: "Include Model In Prompt",
1049
+ group: "Prompt",
1050
+ label: "Include Model in Prompt",
922
1051
  description: "Surface the active model identifier in the system prompt so the agent knows which model it is",
923
1052
  },
924
1053
  },
925
1054
 
1055
+ personality: {
1056
+ type: "enum",
1057
+ values: ["default", "friendly", "pragmatic", "none"] as const,
1058
+ default: "default",
1059
+ ui: {
1060
+ tab: "model",
1061
+ group: "Prompt",
1062
+ label: "Personality",
1063
+ description: "Communication style rendered into the system prompt's personality block",
1064
+ options: [
1065
+ {
1066
+ value: "default",
1067
+ label: "Default",
1068
+ description: "Terse, evidence-first engineer; dense, action-oriented replies",
1069
+ },
1070
+ {
1071
+ value: "friendly",
1072
+ label: "Friendly",
1073
+ description: "Warm, encouraging collaborator focused on momentum and morale",
1074
+ },
1075
+ {
1076
+ value: "pragmatic",
1077
+ label: "Pragmatic",
1078
+ description: "Direct, efficient engineer focused on clarity and rigor",
1079
+ },
1080
+ { value: "none", label: "None", description: "Omit the personality block entirely" },
1081
+ ],
1082
+ },
1083
+ },
1084
+
926
1085
  // Sampling
927
1086
  temperature: {
928
1087
  type: "number",
929
1088
  default: -1,
930
1089
  ui: {
931
1090
  tab: "model",
1091
+ group: "Sampling",
932
1092
  label: "Temperature",
933
1093
  description: "Sampling temperature (0 = deterministic, 1 = creative, -1 = provider default)",
934
1094
  options: [
@@ -947,6 +1107,7 @@ export const SETTINGS_SCHEMA = {
947
1107
  default: -1,
948
1108
  ui: {
949
1109
  tab: "model",
1110
+ group: "Sampling",
950
1111
  label: "Top P",
951
1112
  description: "Nucleus sampling cutoff (0-1, -1 = provider default)",
952
1113
  options: [
@@ -965,6 +1126,7 @@ export const SETTINGS_SCHEMA = {
965
1126
  default: -1,
966
1127
  ui: {
967
1128
  tab: "model",
1129
+ group: "Sampling",
968
1130
  label: "Top K",
969
1131
  description: "Sample from top-K tokens (-1 = provider default)",
970
1132
  options: [
@@ -982,6 +1144,7 @@ export const SETTINGS_SCHEMA = {
982
1144
  default: -1,
983
1145
  ui: {
984
1146
  tab: "model",
1147
+ group: "Sampling",
985
1148
  label: "Min P",
986
1149
  description: "Minimum probability threshold (0-1, -1 = provider default)",
987
1150
  options: [
@@ -998,6 +1161,7 @@ export const SETTINGS_SCHEMA = {
998
1161
  default: -1,
999
1162
  ui: {
1000
1163
  tab: "model",
1164
+ group: "Sampling",
1001
1165
  label: "Presence Penalty",
1002
1166
  description: "Penalty for introducing already-present tokens (-1 = provider default)",
1003
1167
  options: [
@@ -1015,6 +1179,7 @@ export const SETTINGS_SCHEMA = {
1015
1179
  default: -1,
1016
1180
  ui: {
1017
1181
  tab: "model",
1182
+ group: "Sampling",
1018
1183
  label: "Repetition Penalty",
1019
1184
  description: "Penalty for repeated tokens (-1 = provider default)",
1020
1185
  options: [
@@ -1034,6 +1199,7 @@ export const SETTINGS_SCHEMA = {
1034
1199
  default: "none",
1035
1200
  ui: {
1036
1201
  tab: "model",
1202
+ group: "Sampling",
1037
1203
  label: "Service Tier",
1038
1204
  description:
1039
1205
  'Processing priority hint (none = omit). OpenAI accepts the tier values directly; Anthropic realizes `priority` as `speed: "fast"` on supported Opus models. Scoped values target one family.',
@@ -1062,14 +1228,41 @@ export const SETTINGS_SCHEMA = {
1062
1228
  },
1063
1229
  },
1064
1230
 
1231
+ fastModeScope: {
1232
+ type: "enum",
1233
+ values: ["both", "openai", "claude"] as const,
1234
+ default: "both",
1235
+ ui: {
1236
+ tab: "model",
1237
+ group: "Sampling",
1238
+ label: "Fast Mode Scope",
1239
+ description:
1240
+ 'Which providers `/fast on` (and the fast-mode toggle) target. "both" = priority on every supported provider; "openai"/"claude" scope it to one family (mirrors serviceTier openai-only/claude-only).',
1241
+ options: [
1242
+ { value: "both", label: "Both", description: "Priority on every supported provider" },
1243
+ {
1244
+ value: "openai",
1245
+ label: "OpenAI only",
1246
+ description: "Priority on OpenAI/OpenAI-Codex requests; ignored elsewhere",
1247
+ },
1248
+ {
1249
+ value: "claude",
1250
+ label: "Claude only",
1251
+ description: "Anthropic fast mode on direct Claude requests; ignored elsewhere",
1252
+ },
1253
+ ],
1254
+ },
1255
+ },
1256
+
1065
1257
  // Retries
1066
1258
  "retry.enabled": { type: "boolean", default: true },
1067
1259
 
1068
1260
  "retry.maxRetries": {
1069
1261
  type: "number",
1070
- default: 3,
1262
+ default: 10,
1071
1263
  ui: {
1072
1264
  tab: "model",
1265
+ group: "Retry & Fallback",
1073
1266
  label: "Retry Attempts",
1074
1267
  description: "Maximum retry attempts on API errors",
1075
1268
  options: [
@@ -1082,12 +1275,13 @@ export const SETTINGS_SCHEMA = {
1082
1275
  },
1083
1276
  },
1084
1277
 
1085
- "retry.baseDelayMs": { type: "number", default: 2000 },
1278
+ "retry.baseDelayMs": { type: "number", default: 500 },
1086
1279
  "retry.maxDelayMs": {
1087
1280
  type: "number",
1088
1281
  default: 5 * 60 * 1000,
1089
1282
  ui: {
1090
1283
  tab: "model",
1284
+ group: "Retry & Fallback",
1091
1285
  label: "Max Retry Delay",
1092
1286
  description:
1093
1287
  "Maximum wait between retries, in ms. When the provider asks us to wait longer than this and no credential or model fallback succeeds, the request fails fast instead of sleeping (e.g. 3-hour Anthropic rate-limit windows).",
@@ -1098,6 +1292,7 @@ export const SETTINGS_SCHEMA = {
1098
1292
  default: true,
1099
1293
  ui: {
1100
1294
  tab: "model",
1295
+ group: "Retry & Fallback",
1101
1296
  label: "Retry Model Fallback",
1102
1297
  description: "Allow retry recovery to switch to configured fallback models",
1103
1298
  },
@@ -1109,6 +1304,7 @@ export const SETTINGS_SCHEMA = {
1109
1304
  default: "cooldown-expiry",
1110
1305
  ui: {
1111
1306
  tab: "model",
1307
+ group: "Retry & Fallback",
1112
1308
  label: "Fallback Revert Policy",
1113
1309
  description: "When to return to the primary model after a fallback",
1114
1310
  options: [
@@ -1133,6 +1329,7 @@ export const SETTINGS_SCHEMA = {
1133
1329
  default: "one-at-a-time",
1134
1330
  ui: {
1135
1331
  tab: "interaction",
1332
+ group: "Input",
1136
1333
  label: "Steering Mode",
1137
1334
  description: "How to process queued messages while agent is working",
1138
1335
  },
@@ -1144,6 +1341,7 @@ export const SETTINGS_SCHEMA = {
1144
1341
  default: "one-at-a-time",
1145
1342
  ui: {
1146
1343
  tab: "interaction",
1344
+ group: "Input",
1147
1345
  label: "Follow-Up Mode",
1148
1346
  description: "How to drain follow-up messages after a turn completes",
1149
1347
  },
@@ -1155,6 +1353,7 @@ export const SETTINGS_SCHEMA = {
1155
1353
  default: "immediate",
1156
1354
  ui: {
1157
1355
  tab: "interaction",
1356
+ group: "Input",
1158
1357
  label: "Interrupt Mode",
1159
1358
  description: "When steering messages interrupt tool execution",
1160
1359
  },
@@ -1166,6 +1365,7 @@ export const SETTINGS_SCHEMA = {
1166
1365
  default: "prompt",
1167
1366
  ui: {
1168
1367
  tab: "interaction",
1368
+ group: "Input",
1169
1369
  label: "Loop Mode",
1170
1370
  description: "What happens between /loop iterations before re-submitting the prompt",
1171
1371
  options: [
@@ -1191,6 +1391,7 @@ export const SETTINGS_SCHEMA = {
1191
1391
  default: "tree",
1192
1392
  ui: {
1193
1393
  tab: "interaction",
1394
+ group: "Input",
1194
1395
  label: "Double-Escape Action",
1195
1396
  description: "Action when pressing Escape twice with empty editor",
1196
1397
  },
@@ -1202,6 +1403,7 @@ export const SETTINGS_SCHEMA = {
1202
1403
  default: "default",
1203
1404
  ui: {
1204
1405
  tab: "interaction",
1406
+ group: "Input",
1205
1407
  label: "Session Tree Filter",
1206
1408
  description: "Default filter mode when opening the session tree",
1207
1409
  },
@@ -1212,6 +1414,7 @@ export const SETTINGS_SCHEMA = {
1212
1414
  default: 5,
1213
1415
  ui: {
1214
1416
  tab: "interaction",
1417
+ group: "Input",
1215
1418
  label: "Autocomplete Items",
1216
1419
  description: "Max visible items in autocomplete dropdown (3-20)",
1217
1420
  options: [
@@ -1230,16 +1433,37 @@ export const SETTINGS_SCHEMA = {
1230
1433
  default: true,
1231
1434
  ui: {
1232
1435
  tab: "interaction",
1436
+ group: "Input",
1233
1437
  label: "Emoji Autocomplete",
1234
1438
  description: "Suggest emojis from `:name:` shortcodes and expand text emoticons like `:D` or `:-)`",
1235
1439
  },
1236
1440
  },
1237
1441
 
1442
+ "paste.largeMenuThreshold": {
1443
+ type: "number",
1444
+ default: 100,
1445
+ ui: {
1446
+ tab: "interaction",
1447
+ group: "Input",
1448
+ label: "Large Paste Menu",
1449
+ description:
1450
+ "When a paste reaches this many lines, offer a menu to wrap it in a code block, wrap it in XML tags, or save it to a file. 0 disables the menu (large pastes still collapse to a [Paste] marker).",
1451
+ options: [
1452
+ { value: "0", label: "Off" },
1453
+ { value: "100", label: "100 lines" },
1454
+ { value: "250", label: "250 lines" },
1455
+ { value: "500", label: "500 lines" },
1456
+ { value: "1000", label: "1000 lines" },
1457
+ ],
1458
+ },
1459
+ },
1460
+
1238
1461
  "startup.quiet": {
1239
1462
  type: "boolean",
1240
1463
  default: false,
1241
1464
  ui: {
1242
1465
  tab: "interaction",
1466
+ group: "Startup & Updates",
1243
1467
  label: "Quiet Startup",
1244
1468
  description: "Skip welcome screen and startup status messages",
1245
1469
  },
@@ -1250,6 +1474,7 @@ export const SETTINGS_SCHEMA = {
1250
1474
  default: true,
1251
1475
  ui: {
1252
1476
  tab: "interaction",
1477
+ group: "Startup & Updates",
1253
1478
  label: "Setup Wizard",
1254
1479
  description: "Show newly added onboarding steps once per setup version",
1255
1480
  },
@@ -1260,15 +1485,82 @@ export const SETTINGS_SCHEMA = {
1260
1485
  default: true,
1261
1486
  ui: {
1262
1487
  tab: "interaction",
1488
+ group: "Startup & Updates",
1263
1489
  label: "Check for Updates",
1264
- description: "If false, skip update check",
1490
+ description: "Check for prometheus updates on startup",
1491
+ },
1492
+ },
1493
+
1494
+ "marketplace.autoUpdate": {
1495
+ type: "enum",
1496
+ values: ["off", "notify", "auto"] as const,
1497
+ default: "notify",
1498
+ ui: {
1499
+ tab: "interaction",
1500
+ group: "Startup & Updates",
1501
+ label: "Marketplace Auto-Update",
1502
+ description: "Check for plugin updates on startup",
1503
+ options: [
1504
+ { value: "off", label: "Off", description: "Don't check for plugin updates" },
1505
+ { value: "notify", label: "Notify", description: "Check on startup and notify when updates are available" },
1506
+ { value: "auto", label: "Auto", description: "Check on startup and auto-install updates" },
1507
+ ],
1265
1508
  },
1266
1509
  },
1267
1510
 
1268
1511
  collapseChangelog: {
1269
1512
  type: "boolean",
1270
1513
  default: false,
1271
- ui: { tab: "interaction", label: "Collapse Changelog", description: "Show condensed changelog after updates" },
1514
+ ui: {
1515
+ tab: "interaction",
1516
+ group: "Startup & Updates",
1517
+ label: "Collapse Changelog",
1518
+ description: "Show condensed changelog after updates",
1519
+ },
1520
+ },
1521
+
1522
+ "magicKeywords.enabled": {
1523
+ type: "boolean",
1524
+ default: true,
1525
+ ui: {
1526
+ tab: "interaction",
1527
+ group: "Magic Keywords",
1528
+ label: "Magic Keywords",
1529
+ description: "Enable hidden notices for standalone ultrathink, orchestrate, and workflowz keywords",
1530
+ },
1531
+ },
1532
+
1533
+ "magicKeywords.ultrathink": {
1534
+ type: "boolean",
1535
+ default: true,
1536
+ ui: {
1537
+ tab: "interaction",
1538
+ group: "Magic Keywords",
1539
+ label: "Ultrathink Keyword",
1540
+ description: "Let standalone ultrathink request maximum automatic thinking and append its hidden notice",
1541
+ },
1542
+ },
1543
+
1544
+ "magicKeywords.orchestrate": {
1545
+ type: "boolean",
1546
+ default: true,
1547
+ ui: {
1548
+ tab: "interaction",
1549
+ group: "Magic Keywords",
1550
+ label: "Orchestrate Keyword",
1551
+ description: "Let standalone orchestrate append its hidden multi-agent orchestration notice",
1552
+ },
1553
+ },
1554
+
1555
+ "magicKeywords.workflow": {
1556
+ type: "boolean",
1557
+ default: true,
1558
+ ui: {
1559
+ tab: "interaction",
1560
+ group: "Magic Keywords",
1561
+ label: "Workflow Keyword",
1562
+ description: "Let standalone workflowz append its hidden eval workflow notice",
1563
+ },
1272
1564
  },
1273
1565
 
1274
1566
  // Notifications
@@ -1276,7 +1568,12 @@ export const SETTINGS_SCHEMA = {
1276
1568
  type: "enum",
1277
1569
  values: ["on", "off"] as const,
1278
1570
  default: "on",
1279
- ui: { tab: "interaction", label: "Completion Notification", description: "Notify when the agent completes" },
1571
+ ui: {
1572
+ tab: "interaction",
1573
+ group: "Notifications",
1574
+ label: "Completion Notification",
1575
+ description: "Notify when the agent finishes a turn",
1576
+ },
1280
1577
  },
1281
1578
 
1282
1579
  "ask.timeout": {
@@ -1284,8 +1581,9 @@ export const SETTINGS_SCHEMA = {
1284
1581
  default: 0,
1285
1582
  ui: {
1286
1583
  tab: "interaction",
1584
+ group: "Notifications",
1287
1585
  label: "Ask Timeout",
1288
- description: "Auto-select recommended option after timeout (0 to disable)",
1586
+ description: "Auto-select the recommended ask option after this many seconds (0 disables)",
1289
1587
  options: [
1290
1588
  { value: "0", label: "Disabled" },
1291
1589
  { value: "15", label: "15 seconds" },
@@ -1300,14 +1598,70 @@ export const SETTINGS_SCHEMA = {
1300
1598
  type: "enum",
1301
1599
  values: ["on", "off"] as const,
1302
1600
  default: "on",
1303
- ui: { tab: "interaction", label: "Ask Notification", description: "Notify when ask tool is waiting for input" },
1601
+ ui: {
1602
+ tab: "interaction",
1603
+ group: "Notifications",
1604
+ label: "Ask Notification",
1605
+ description: "Notify when the ask tool is waiting for input",
1606
+ },
1607
+ },
1608
+
1609
+ // Collab
1610
+ "collab.relayUrl": {
1611
+ type: "string",
1612
+ default: DEFAULT_RELAY_URL,
1613
+ ui: {
1614
+ tab: "interaction",
1615
+ group: "Collab",
1616
+ label: "Relay URL",
1617
+ description: "Relay used by /collab (wss://host[:port])",
1618
+ },
1619
+ },
1620
+
1621
+ "collab.displayName": {
1622
+ type: "string",
1623
+ default: "",
1624
+ ui: {
1625
+ tab: "interaction",
1626
+ group: "Collab",
1627
+ label: "Display Name",
1628
+ description: "Name shown to other collab participants (default: OS username)",
1629
+ },
1630
+ },
1631
+
1632
+ "share.serverUrl": {
1633
+ type: "string",
1634
+ default: DEFAULT_SHARE_URL,
1635
+ ui: {
1636
+ tab: "interaction",
1637
+ group: "Collab",
1638
+ label: "Share Server",
1639
+ description:
1640
+ "Share viewer/upload base used by /share (encrypted blob upload + viewer; links are <base>/<id>#<key>)",
1641
+ },
1642
+ },
1643
+
1644
+ "share.redactSecrets": {
1645
+ type: "boolean",
1646
+ default: true,
1647
+ ui: {
1648
+ tab: "interaction",
1649
+ group: "Collab",
1650
+ label: "Share Secret Redaction",
1651
+ description: "Run the secret obfuscator over /share snapshots before upload (uses the secrets.* config)",
1652
+ },
1304
1653
  },
1305
1654
 
1306
1655
  // Speech-to-text
1307
1656
  "stt.enabled": {
1308
1657
  type: "boolean",
1309
1658
  default: false,
1310
- ui: { tab: "interaction", label: "Speech-to-Text", description: "Enable speech-to-text input via microphone" },
1659
+ ui: {
1660
+ tab: "interaction",
1661
+ group: "Speech",
1662
+ label: "Speech-to-Text",
1663
+ description: "Enable speech-to-text input via microphone",
1664
+ },
1311
1665
  },
1312
1666
 
1313
1667
  "stt.language": {
@@ -1317,23 +1671,15 @@ export const SETTINGS_SCHEMA = {
1317
1671
 
1318
1672
  "stt.modelName": {
1319
1673
  type: "enum",
1320
- values: ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large"] as const,
1321
- default: "base.en",
1674
+ values: STT_MODEL_VALUES,
1675
+ default: DEFAULT_STT_MODEL_KEY,
1322
1676
  ui: {
1323
1677
  tab: "interaction",
1678
+ group: "Speech",
1324
1679
  label: "Speech Model",
1325
- description: "Whisper model size (larger = more accurate but slower)",
1326
- options: [
1327
- { value: "tiny", label: "tiny", description: "Multilingual; fastest, lowest accuracy" },
1328
- { value: "tiny.en", label: "tiny.en", description: "English-only; fastest" },
1329
- { value: "base", label: "base", description: "Multilingual; small and fast" },
1330
- { value: "base.en", label: "base.en", description: "English-only; default" },
1331
- { value: "small", label: "small", description: "Multilingual; balanced" },
1332
- { value: "small.en", label: "small.en", description: "English-only; balanced" },
1333
- { value: "medium", label: "medium", description: "Multilingual; accurate but slower" },
1334
- { value: "medium.en", label: "medium.en", description: "English-only; accurate but slower" },
1335
- { value: "large", label: "large", description: "Multilingual; most accurate" },
1336
- ],
1680
+ description:
1681
+ "Local on-device speech model. Parakeet TDT v3 (sherpa-onnx) is the SoTA default; Whisper base/small/large-v3-turbo tiers (transformers.js) trade size for multilingual coverage. Downloaded on first use.",
1682
+ options: STT_MODEL_OPTIONS,
1337
1683
  },
1338
1684
  },
1339
1685
 
@@ -1347,6 +1693,7 @@ export const SETTINGS_SCHEMA = {
1347
1693
  default: true,
1348
1694
  ui: {
1349
1695
  tab: "context",
1696
+ group: "General",
1350
1697
  label: "Auto-Promote Context",
1351
1698
  description: "Promote to a larger-context model on context overflow instead of compacting",
1352
1699
  },
@@ -1358,6 +1705,7 @@ export const SETTINGS_SCHEMA = {
1358
1705
  default: true,
1359
1706
  ui: {
1360
1707
  tab: "context",
1708
+ group: "Compaction",
1361
1709
  label: "Auto-Compact",
1362
1710
  description: "Automatically compact context when it gets too large",
1363
1711
  },
@@ -1365,13 +1713,14 @@ export const SETTINGS_SCHEMA = {
1365
1713
 
1366
1714
  "compaction.strategy": {
1367
1715
  type: "enum",
1368
- values: ["context-full", "handoff", "shake", "off"] as const,
1716
+ values: ["context-full", "handoff", "shake", "snapcompact", "off"] as const,
1369
1717
  default: "context-full",
1370
1718
  ui: {
1371
1719
  tab: "context",
1720
+ group: "Compaction",
1372
1721
  label: "Compaction Strategy",
1373
1722
  description:
1374
- "Choose in-place context-full maintenance, auto-handoff, surgical shake (drop heavy content), or disable auto maintenance (off)",
1723
+ "Choose in-place context-full maintenance, auto-handoff, surgical shake (drop heavy content), snapcompact (archive history as dense images), or disable auto maintenance (off)",
1375
1724
  options: [
1376
1725
  {
1377
1726
  value: "context-full",
@@ -1384,6 +1733,11 @@ export const SETTINGS_SCHEMA = {
1384
1733
  label: "Shake",
1385
1734
  description: "Drop heavy content (tool results + large blocks) in place; recover via artifact",
1386
1735
  },
1736
+ {
1737
+ value: "snapcompact",
1738
+ label: "Snapcompact",
1739
+ description: "Archive history onto dense bitmap images the model reads back; no LLM call",
1740
+ },
1387
1741
  {
1388
1742
  value: "off",
1389
1743
  label: "Off",
@@ -1398,6 +1752,7 @@ export const SETTINGS_SCHEMA = {
1398
1752
  default: -1,
1399
1753
  ui: {
1400
1754
  tab: "context",
1755
+ group: "Compaction",
1401
1756
  label: "Compaction Threshold",
1402
1757
  description: "Percent threshold for context maintenance; set to Default to use legacy reserve-based behavior",
1403
1758
  options: [
@@ -1422,6 +1777,7 @@ export const SETTINGS_SCHEMA = {
1422
1777
  default: -1,
1423
1778
  ui: {
1424
1779
  tab: "context",
1780
+ group: "Compaction",
1425
1781
  label: "Compaction Token Limit",
1426
1782
  description: "Fixed token limit for context maintenance; overrides percentage if set",
1427
1783
  options: [
@@ -1442,6 +1798,7 @@ export const SETTINGS_SCHEMA = {
1442
1798
  default: false,
1443
1799
  ui: {
1444
1800
  tab: "context",
1801
+ group: "Compaction",
1445
1802
  label: "Save Handoff Docs",
1446
1803
  description: "Save generated handoff documents to markdown files for the auto-handoff flow",
1447
1804
  },
@@ -1452,6 +1809,7 @@ export const SETTINGS_SCHEMA = {
1452
1809
  default: true,
1453
1810
  ui: {
1454
1811
  tab: "context",
1812
+ group: "Compaction",
1455
1813
  label: "Remote Compaction",
1456
1814
  description: "Use remote compaction endpoints when available instead of local summarization",
1457
1815
  },
@@ -1471,6 +1829,7 @@ export const SETTINGS_SCHEMA = {
1471
1829
  default: false,
1472
1830
  ui: {
1473
1831
  tab: "context",
1832
+ group: "Compaction",
1474
1833
  label: "Idle Compaction",
1475
1834
  description: "Compact context while idle when token count exceeds threshold",
1476
1835
  },
@@ -1481,6 +1840,7 @@ export const SETTINGS_SCHEMA = {
1481
1840
  default: 200000,
1482
1841
  ui: {
1483
1842
  tab: "context",
1843
+ group: "Compaction",
1484
1844
  label: "Idle Compaction Threshold",
1485
1845
  description: "Token count above which idle compaction triggers",
1486
1846
  options: [
@@ -1502,6 +1862,7 @@ export const SETTINGS_SCHEMA = {
1502
1862
  default: 300,
1503
1863
  ui: {
1504
1864
  tab: "context",
1865
+ group: "Compaction",
1505
1866
  label: "Idle Compaction Delay",
1506
1867
  description: "Seconds to wait while idle before compacting",
1507
1868
  options: [
@@ -1514,87 +1875,288 @@ export const SETTINGS_SCHEMA = {
1514
1875
  ],
1515
1876
  },
1516
1877
  },
1517
- // Branch summaries
1518
- "branchSummary.enabled": {
1878
+
1879
+ "compaction.supersedeReads": {
1519
1880
  type: "boolean",
1520
- default: false,
1521
- ui: { tab: "context", label: "Branch Summaries", description: "Prompt to summarize when leaving a branch" },
1881
+ default: true,
1882
+ ui: {
1883
+ tab: "context",
1884
+ group: "Compaction",
1885
+ label: "Supersede Stale Reads",
1886
+ description: "Prune older read results when the same file is read again (cache-aware, runs every turn)",
1887
+ },
1522
1888
  },
1523
1889
 
1524
- "branchSummary.reserveTokens": { type: "number", default: 16384 },
1525
-
1526
- // Memories
1527
- // Legacy local-memory enable flag kept only for back-compat migration.
1528
- // Hidden from UI — users should use `memory.backend` instead.
1529
- "memories.enabled": {
1890
+ "compaction.dropUseless": {
1530
1891
  type: "boolean",
1531
- default: false,
1892
+ default: true,
1893
+ ui: {
1894
+ tab: "context",
1895
+ group: "Compaction",
1896
+ label: "Elide Uneventful Results",
1897
+ description:
1898
+ "Prune tool results flagged contextually useless (no matches, timed-out waits) once consumed (cache-aware)",
1899
+ },
1532
1900
  },
1533
1901
 
1534
- "memories.maxRolloutsPerStartup": { type: "number", default: 64 },
1535
-
1536
- "memories.maxRolloutAgeDays": { type: "number", default: 30 },
1537
-
1538
- "memories.minRolloutIdleHours": { type: "number", default: 12 },
1539
-
1540
- "memories.threadScanLimit": { type: "number", default: 300 },
1541
-
1542
- "memories.maxRawMemoriesForGlobal": { type: "number", default: 200 },
1543
-
1544
- "memories.stage1Concurrency": { type: "number", default: 8 },
1545
-
1546
- "memories.stage1LeaseSeconds": { type: "number", default: 120 },
1547
-
1548
- "memories.stage1RetryDelaySeconds": { type: "number", default: 120 },
1549
-
1550
- "memories.phase2LeaseSeconds": { type: "number", default: 180 },
1551
-
1552
- "memories.phase2RetryDelaySeconds": { type: "number", default: 180 },
1553
-
1554
- "memories.phase2HeartbeatSeconds": { type: "number", default: 30 },
1555
-
1556
- "memories.rolloutPayloadPercent": { type: "number", default: 0.7 },
1557
-
1558
- "memories.phase1InputTokenLimit": { type: "number", default: 4000 },
1559
-
1560
- "memories.fallbackTokenLimit": { type: "number", default: 16000 },
1561
-
1562
- "memories.summaryInjectionTokenLimit": { type: "number", default: 5000 },
1563
-
1564
- // Memory backend selector — picks between local memories pipeline,
1565
- // Prometheus Memory local SQLite, Hindsight remote memory, or off. Legacy
1566
- // `memories.enabled` keeps gating the local backend; see config/settings.ts
1567
- // migration for details.
1568
- "memory.backend": {
1902
+ // Experimental: snapcompact inline imaging (transient, per-request; never persisted)
1903
+ "snapcompact.systemPrompt": {
1569
1904
  type: "enum",
1570
- values: ["off", "local", "hindsight", "prometheus-memory"] as const,
1571
- default: "off",
1905
+ values: ["none", "agents-md", "all"] as const,
1906
+ default: "none",
1572
1907
  ui: {
1573
- tab: "memory",
1574
- label: "Memory Backend",
1575
- description: "Off, local summary pipeline, Prometheus Memory SQLite, or Hindsight remote memory",
1908
+ tab: "context",
1909
+ group: "Experimental",
1910
+ label: "Snapcompact System Prompt",
1911
+ description:
1912
+ "Experimental: render selected system prompt text as dense PNG image(s) and attach to the first user message (vision models only). Saves tokens; loses prompt caching for imaged text.",
1576
1913
  options: [
1577
- { value: "off", label: "Off", description: "No memory subsystem runs" },
1578
- { value: "local", label: "Local", description: "Local rollout summarisation pipeline (memory_summary.md)" },
1579
- { value: "hindsight", label: "Hindsight", description: "Vectorize Hindsight remote memory service" },
1914
+ { value: "none", label: "None", description: "Keep the system prompt as text." },
1580
1915
  {
1581
- value: "prometheus-memory",
1582
- label: "Prometheus Memory",
1583
- description: "Local SQLite recall/retain backend with optional embeddings",
1916
+ value: "agents-md",
1917
+ label: "AGENTS.md",
1918
+ description: "Only move loaded context-file instructions to images, when that saves tokens.",
1919
+ },
1920
+ {
1921
+ value: "all",
1922
+ label: "All",
1923
+ description: "Move the full system prompt to images, when that saves tokens.",
1584
1924
  },
1585
1925
  ],
1586
1926
  },
1587
1927
  },
1588
1928
 
1589
- // Self-improvement trajectory. This deliberately follows the proven
1590
- // Hermes-style split: automatic learning is allowed for memory, user
1591
- // profile, and generated skills; SOUL/identity stays stable and proposal-only.
1592
- "selfImprovement.mode": {
1593
- type: "enum",
1594
- values: ["memory-and-skills", "off"] as const,
1595
- default: "memory-and-skills",
1929
+ "snapcompact.toolResults": {
1930
+ type: "boolean",
1931
+ default: false,
1596
1932
  ui: {
1597
- tab: "memory",
1933
+ tab: "context",
1934
+ group: "Experimental",
1935
+ label: "Snapcompact Tool Results",
1936
+ description:
1937
+ "Experimental: render large historical tool results as dense PNG image(s) instead of text (vision models only). Saves tokens on accumulated read/search output.",
1938
+ },
1939
+ },
1940
+
1941
+ "snapcompact.shape": {
1942
+ type: "enum",
1943
+ values: ["auto", ...SHAPE_VARIANT_NAMES] as const,
1944
+ default: "auto",
1945
+ ui: {
1946
+ tab: "context",
1947
+ group: "Experimental",
1948
+ label: "Snapcompact Shape",
1949
+ description:
1950
+ "Frame shape snapcompact prints text with (compaction archive and inline imaging). Auto picks a shape tuned for the current model.",
1951
+ options: [
1952
+ {
1953
+ value: "auto",
1954
+ label: "Auto",
1955
+ description: "Picks a shape tuned for the current model, falling back to its provider family.",
1956
+ },
1957
+ {
1958
+ value: "8x8r-bw",
1959
+ label: "8x8 repeated, black",
1960
+ description:
1961
+ "unscii square cell, black ink, every line printed twice with the copy on a pale highlight band.",
1962
+ },
1963
+ {
1964
+ value: "8x8r-sent",
1965
+ label: "8x8 repeated, sentence hues",
1966
+ description: "Repeated grid with ink cycling six hues at sentence boundaries.",
1967
+ },
1968
+ {
1969
+ value: "8x8u-bw",
1970
+ label: "8x8, black",
1971
+ description: "Plain unscii square cell, single-printed lines, black ink.",
1972
+ },
1973
+ {
1974
+ value: "8x8u-sent",
1975
+ label: "8x8, sentence hues",
1976
+ description: "Plain unscii square cell with sentence-hue ink.",
1977
+ },
1978
+ {
1979
+ value: "6x6u-bw",
1980
+ label: "6x6 dense, black",
1981
+ description: "unscii squeezed to 6x6 — densest readable cell, fewest frames — in black ink.",
1982
+ },
1983
+ {
1984
+ value: "6x6u-sent",
1985
+ label: "6x6 dense, sentence hues",
1986
+ description: "Densest cell with sentence-hue ink.",
1987
+ },
1988
+ {
1989
+ value: "5x8-bw",
1990
+ label: "5x8 legacy, black",
1991
+ description: "Original X.org 5x8 glyphs on the 2576px frame, black ink.",
1992
+ },
1993
+ {
1994
+ value: "5x8-sent",
1995
+ label: "5x8 legacy, sentence hues",
1996
+ description: "The original snapcompact shape (pre-shape-table sessions rendered this).",
1997
+ },
1998
+ {
1999
+ value: "6x12-dim",
2000
+ label: "6x12, dimmed stopwords",
2001
+ description: "X.org 6x12 glyphs, black ink, function words dimmed gray.",
2002
+ },
2003
+ {
2004
+ value: "8x13-bw",
2005
+ label: "8x13, black",
2006
+ description: "X.org 8x13 glyphs, black ink.",
2007
+ },
2008
+ {
2009
+ value: "8on16-bw",
2010
+ label: "8x13 on 16px pitch, black",
2011
+ description: "8x13 glyphs on an 8x16 cell (extra leading), black ink.",
2012
+ },
2013
+ {
2014
+ value: "8on22-bw",
2015
+ label: "8x13 on 22px pitch (leading), black",
2016
+ description:
2017
+ "8x13 glyphs on an 8x22 cell — extra line spacing so rows don't crowd. Default for OpenAI/Google.",
2018
+ },
2019
+ {
2020
+ value: "11on16-bw",
2021
+ label: "8x13 on 11px advance (tracking), black",
2022
+ description:
2023
+ "8x13 glyphs on an 11x16 cell — extra letter spacing so characters don't merge. Default for Anthropic.",
2024
+ },
2025
+ {
2026
+ value: "doc-8on16-bw",
2027
+ label: "Doc 8on16, black",
2028
+ description: "Two word-wrapped newspaper columns of 8x13 glyphs on a 16px pitch, black ink.",
2029
+ },
2030
+ {
2031
+ value: "doc-8on16-sent",
2032
+ label: "Doc 8on16, sentence hues",
2033
+ description: "Two-column doc layout with sentence-hue ink.",
2034
+ },
2035
+ {
2036
+ value: "doc-8on16-sent-dim",
2037
+ label: "Doc 8on16, sentence hues + dimmed stopwords",
2038
+ description: "Two-column doc layout, sentence-hue ink, function words dimmed gray.",
2039
+ },
2040
+ ],
2041
+ },
2042
+ },
2043
+
2044
+ // Branch summaries
2045
+ "branchSummary.enabled": {
2046
+ type: "boolean",
2047
+ default: false,
2048
+ ui: {
2049
+ tab: "context",
2050
+ group: "General",
2051
+ label: "Branch Summaries",
2052
+ description: "Prompt to summarize when leaving a branch",
2053
+ },
2054
+ },
2055
+
2056
+ "branchSummary.reserveTokens": { type: "number", default: 16384 },
2057
+
2058
+ // Memories
2059
+ // Legacy local-memory enable flag kept only for back-compat migration.
2060
+ // Hidden from UI — users should use `memory.backend` instead.
2061
+ "memories.enabled": {
2062
+ type: "boolean",
2063
+ default: false,
2064
+ },
2065
+
2066
+ "memories.maxRolloutsPerStartup": { type: "number", default: 64 },
2067
+
2068
+ "memories.maxRolloutAgeDays": { type: "number", default: 30 },
2069
+
2070
+ "memories.minRolloutIdleHours": { type: "number", default: 12 },
2071
+
2072
+ "memories.threadScanLimit": { type: "number", default: 300 },
2073
+
2074
+ "memories.maxRawMemoriesForGlobal": { type: "number", default: 200 },
2075
+
2076
+ "memories.stage1Concurrency": { type: "number", default: 8 },
2077
+
2078
+ "memories.stage1LeaseSeconds": { type: "number", default: 120 },
2079
+
2080
+ "memories.stage1RetryDelaySeconds": { type: "number", default: 120 },
2081
+
2082
+ "memories.phase2LeaseSeconds": { type: "number", default: 180 },
2083
+
2084
+ "memories.phase2RetryDelaySeconds": { type: "number", default: 180 },
2085
+
2086
+ "memories.phase2HeartbeatSeconds": { type: "number", default: 30 },
2087
+
2088
+ "memories.rolloutPayloadPercent": { type: "number", default: 0.7 },
2089
+
2090
+ "memories.phase1InputTokenLimit": { type: "number", default: 4000 },
2091
+
2092
+ "memories.fallbackTokenLimit": { type: "number", default: 16000 },
2093
+
2094
+ "memories.summaryInjectionTokenLimit": { type: "number", default: 5000 },
2095
+
2096
+ // Memory backend selector — picks between local memories pipeline,
2097
+ // Mnemopi local SQLite, Hindsight remote memory, or off. Legacy
2098
+ // `memories.enabled` keeps gating the local backend; see config/settings.ts
2099
+ // migration for details.
2100
+ "memory.backend": {
2101
+ type: "enum",
2102
+ values: ["off", "local", "hindsight", "mnemopi"] as const,
2103
+ default: "off",
2104
+ ui: {
2105
+ tab: "memory",
2106
+ group: "General",
2107
+ label: "Memory Backend",
2108
+ description: "Off, local summary pipeline, Mnemopi SQLite, or Hindsight remote memory",
2109
+ options: [
2110
+ { value: "off", label: "Off", description: "No memory subsystem runs" },
2111
+ { value: "local", label: "Local", description: "Local rollout summarisation pipeline (memory_summary.md)" },
2112
+ { value: "hindsight", label: "Hindsight", description: "Vectorize Hindsight remote memory service" },
2113
+ {
2114
+ value: "mnemopi",
2115
+ label: "Mnemopi",
2116
+ description: "Local SQLite recall/retain backend with optional embeddings",
2117
+ },
2118
+ ],
2119
+ },
2120
+ },
2121
+
2122
+ // Auto-Learn (experimental): post-stop nudge to capture lessons to memory
2123
+ // and mint/enhance isolated managed skills under ~/.prometheus/agent/managed-skills.
2124
+ // Master flag is default-off -> zero footprint; sub-flags gate behaviour.
2125
+ "autolearn.enabled": {
2126
+ type: "boolean",
2127
+ default: false,
2128
+ ui: {
2129
+ tab: "memory",
2130
+ group: "Auto-Learn",
2131
+ label: "Auto-Learn (experimental)",
2132
+ description:
2133
+ "After the agent stops, nudge it to capture lessons to memory and create/enhance isolated managed skills",
2134
+ },
2135
+ },
2136
+ "autolearn.autoContinue": {
2137
+ type: "boolean",
2138
+ default: false,
2139
+ ui: {
2140
+ tab: "memory",
2141
+ group: "Auto-Learn",
2142
+ label: "Auto-run capture at stop",
2143
+ description:
2144
+ "When on, auto-run one capture turn at stop (uses extra tokens). Off = passive reminder on your next turn.",
2145
+ condition: "autolearnActive",
2146
+ },
2147
+ },
2148
+ // Config-file-only knob (numbers without `options` are hidden from the UI).
2149
+ "autolearn.minToolCalls": { type: "number", default: 5 },
2150
+
2151
+ // Self-improvement trajectory. Automatic learning may update memory, user
2152
+ // profile, and generated skills; SOUL/identity stays stable and proposal-only.
2153
+ "selfImprovement.mode": {
2154
+ type: "enum",
2155
+ values: ["memory-and-skills", "off"] as const,
2156
+ default: "memory-and-skills",
2157
+ ui: {
2158
+ tab: "memory",
2159
+ group: "Self Improvement",
1598
2160
  label: "Self Improvement",
1599
2161
  description:
1600
2162
  "Hermes-style native learning: memory, user profile, and skills update automatically; SOUL stays stable",
@@ -1614,6 +2176,7 @@ export const SETTINGS_SCHEMA = {
1614
2176
  default: "memory-and-skills",
1615
2177
  ui: {
1616
2178
  tab: "memory",
2179
+ group: "Self Improvement",
1617
2180
  label: "Post-Turn Review",
1618
2181
  description:
1619
2182
  "Hermes-style background review after settled turns, routed through the native Prometheus memory pipeline",
@@ -1633,6 +2196,7 @@ export const SETTINGS_SCHEMA = {
1633
2196
  default: 10,
1634
2197
  ui: {
1635
2198
  tab: "memory",
2199
+ group: "Self Improvement",
1636
2200
  label: "Review Turn Interval",
1637
2201
  description: "User turns between post-turn self-improvement reviews; 10 mirrors Hermes",
1638
2202
  },
@@ -1643,6 +2207,7 @@ export const SETTINGS_SCHEMA = {
1643
2207
  default: "propose",
1644
2208
  ui: {
1645
2209
  tab: "memory",
2210
+ group: "Self Improvement",
1646
2211
  label: "Identity Review",
1647
2212
  description: "Proposal-only SOUL review; never rewrites SOUL.md automatically",
1648
2213
  options: [
@@ -1661,6 +2226,7 @@ export const SETTINGS_SCHEMA = {
1661
2226
  default: "dry-run",
1662
2227
  ui: {
1663
2228
  tab: "memory",
2229
+ group: "Self Improvement",
1664
2230
  label: "Skill Curator",
1665
2231
  description: "Report-only generated-skill curation with recoverable archive lifecycle",
1666
2232
  options: [
@@ -1678,6 +2244,7 @@ export const SETTINGS_SCHEMA = {
1678
2244
  default: 30,
1679
2245
  ui: {
1680
2246
  tab: "memory",
2247
+ group: "Self Improvement",
1681
2248
  label: "Skill Stale Days",
1682
2249
  description: "Days of no generated-skill activity before the dry-run curator marks it stale",
1683
2250
  },
@@ -1687,51 +2254,55 @@ export const SETTINGS_SCHEMA = {
1687
2254
  default: 90,
1688
2255
  ui: {
1689
2256
  tab: "memory",
2257
+ group: "Self Improvement",
1690
2258
  label: "Skill Archive Days",
1691
2259
  description: "Days of no generated-skill activity before the dry-run curator suggests archive",
1692
2260
  },
1693
2261
  },
1694
2262
 
1695
- // Prometheus Memory local SQLite memory backend.
1696
- "prometheusMemory.dbPath": {
2263
+ // Mnemopi local SQLite memory backend.
2264
+ "mnemopi.dbPath": {
1697
2265
  type: "string",
1698
2266
  default: undefined,
1699
2267
  ui: {
1700
2268
  tab: "memory",
1701
- label: "Prometheus Memory DB Path",
2269
+ group: "Mnemopi",
2270
+ label: "Mnemopi DB Path",
1702
2271
  description: "Optional SQLite DB path. Defaults to the agent memories directory.",
1703
- condition: "prometheusMemoryActive",
2272
+ condition: "mnemopiActive",
1704
2273
  },
1705
2274
  },
1706
- "prometheusMemory.bank": {
2275
+ "mnemopi.bank": {
1707
2276
  type: "string",
1708
2277
  default: undefined,
1709
2278
  ui: {
1710
2279
  tab: "memory",
1711
- label: "Prometheus Memory Bank",
2280
+ group: "Mnemopi",
2281
+ label: "Mnemopi Bank",
1712
2282
  description: "Optional shared bank base name. Per-project modes derive project-local banks from it.",
1713
- condition: "prometheusMemoryActive",
2283
+ condition: "mnemopiActive",
1714
2284
  },
1715
2285
  },
1716
- "prometheusMemory.scoping": {
2286
+ "mnemopi.scoping": {
1717
2287
  type: "enum",
1718
2288
  values: ["global", "per-project", "per-project-tagged"] as const,
1719
2289
  default: "per-project",
1720
2290
  ui: {
1721
2291
  tab: "memory",
1722
- label: "Prometheus Memory Scoping",
2292
+ group: "Mnemopi",
2293
+ label: "Mnemopi Scoping",
1723
2294
  description:
1724
2295
  "global = one shared bank; per-project = isolated bank per cwd; per-project-tagged = project-local writes plus global recall visibility",
1725
2296
  options: [
1726
2297
  {
1727
2298
  value: "global",
1728
2299
  label: "Global",
1729
- description: "One shared Prometheus Memory bank for every project",
2300
+ description: "One shared Mnemopi bank for every project",
1730
2301
  },
1731
2302
  {
1732
2303
  value: "per-project",
1733
2304
  label: "Per project",
1734
- description: "Project-local Prometheus Memory bank per cwd basename",
2305
+ description: "Project-local Mnemopi bank per cwd basename",
1735
2306
  },
1736
2307
  {
1737
2308
  value: "per-project-tagged",
@@ -1739,121 +2310,179 @@ export const SETTINGS_SCHEMA = {
1739
2310
  description: "Write to a project-local bank but merge project + shared recall results",
1740
2311
  },
1741
2312
  ],
1742
- condition: "prometheusMemoryActive",
2313
+ condition: "mnemopiActive",
1743
2314
  },
1744
2315
  },
1745
- "prometheusMemory.autoRecall": {
2316
+ "mnemopi.embeddingVariant": {
2317
+ type: "enum",
2318
+ values: ["en", "multilingual"] as const,
2319
+ default: "en",
2320
+ ui: {
2321
+ tab: "memory",
2322
+ group: "Mnemopi",
2323
+ label: "Embedding variant",
2324
+ description:
2325
+ "Local embedding model family. en = stronger English model; multilingual = cross-language model. Changing this rebuilds existing memory embeddings on next start.",
2326
+ options: [
2327
+ {
2328
+ value: "en",
2329
+ label: "English (bge-base-en-v1.5)",
2330
+ description: "BAAI/bge-base-en-v1.5 (768d), English-only",
2331
+ },
2332
+ {
2333
+ value: "multilingual",
2334
+ label: "Multilingual (multilingual-e5-large)",
2335
+ description: "intfloat/multilingual-e5-large (1024d), cross-language recall",
2336
+ },
2337
+ ],
2338
+ condition: "mnemopiActive",
2339
+ },
2340
+ },
2341
+ "mnemopi.autoRecall": {
1746
2342
  type: "boolean",
1747
2343
  default: true,
1748
2344
  ui: {
1749
2345
  tab: "memory",
1750
- label: "Prometheus Memory Auto Recall",
2346
+ group: "Mnemopi",
2347
+ label: "Mnemopi Auto Recall",
1751
2348
  description: "Recall local memories into the first turn of each session",
1752
- condition: "prometheusMemoryActive",
2349
+ condition: "mnemopiActive",
1753
2350
  },
1754
2351
  },
1755
- "prometheusMemory.autoRetain": {
2352
+ "mnemopi.autoRetain": {
1756
2353
  type: "boolean",
1757
2354
  default: true,
1758
2355
  ui: {
1759
2356
  tab: "memory",
1760
- label: "Prometheus Memory Auto Retain",
1761
- description: "Retain completed conversation turns into local Prometheus Memory",
1762
- condition: "prometheusMemoryActive",
2357
+ group: "Mnemopi",
2358
+ label: "Mnemopi Auto Retain",
2359
+ description: "Retain completed conversation turns into local Mnemopi memory",
2360
+ condition: "mnemopiActive",
2361
+ },
2362
+ },
2363
+ "mnemopi.polyphonicRecall": {
2364
+ type: "boolean",
2365
+ default: false,
2366
+ ui: {
2367
+ tab: "memory",
2368
+ group: "Mnemopi",
2369
+ label: "Mnemopi Polyphonic Recall",
2370
+ description: "Enable 4-voice recall (vector, graph, fact, temporal) fused with reciprocal rank fusion",
2371
+ condition: "mnemopiActive",
2372
+ },
2373
+ },
2374
+ "mnemopi.enhancedRecall": {
2375
+ type: "boolean",
2376
+ default: false,
2377
+ ui: {
2378
+ tab: "memory",
2379
+ group: "Mnemopi",
2380
+ label: "Mnemopi Enhanced Recall",
2381
+ description: "Enable the tiered query result cache for repeated and similar recall queries",
2382
+ condition: "mnemopiActive",
1763
2383
  },
1764
2384
  },
1765
- "prometheusMemory.noEmbeddings": {
2385
+ "mnemopi.noEmbeddings": {
1766
2386
  type: "boolean",
1767
2387
  default: false,
1768
2388
  ui: {
1769
2389
  tab: "memory",
1770
- label: "Prometheus Memory Disable Embeddings",
2390
+ group: "Mnemopi",
2391
+ label: "Mnemopi Disable Embeddings",
1771
2392
  description: "Force deterministic FTS-only recall instead of vector embeddings",
1772
- condition: "prometheusMemoryActive",
2393
+ condition: "mnemopiActive",
1773
2394
  },
1774
2395
  },
1775
- "prometheusMemory.embeddingModel": {
2396
+ "mnemopi.embeddingModel": {
1776
2397
  type: "string",
1777
2398
  default: undefined,
1778
2399
  ui: {
1779
2400
  tab: "memory",
1780
- label: "Prometheus Memory Embedding Model",
1781
- description: "Optional embedding model override passed to Prometheus Memory",
1782
- condition: "prometheusMemoryActive",
2401
+ group: "Mnemopi",
2402
+ label: "Mnemopi Embedding Model",
2403
+ description:
2404
+ "Advanced: explicit embedding model id that overrides the variant. Leave empty to use mnemopi.embeddingVariant.",
2405
+ condition: "mnemopiActive",
1783
2406
  },
1784
2407
  },
1785
- "prometheusMemory.embeddingApiUrl": {
2408
+ "mnemopi.embeddingApiUrl": {
1786
2409
  type: "string",
1787
2410
  default: undefined,
1788
2411
  ui: {
1789
2412
  tab: "memory",
1790
- label: "Prometheus Memory Embedding API URL",
1791
- description: "Optional OpenAI-compatible embedding endpoint passed to Prometheus Memory",
1792
- condition: "prometheusMemoryActive",
2413
+ group: "Mnemopi",
2414
+ label: "Mnemopi Embedding API URL",
2415
+ description: "Optional OpenAI-compatible embedding endpoint passed to Mnemopi",
2416
+ condition: "mnemopiActive",
1793
2417
  },
1794
2418
  },
1795
- "prometheusMemory.embeddingApiKey": {
2419
+ "mnemopi.embeddingApiKey": {
1796
2420
  type: "string",
1797
2421
  default: undefined,
1798
2422
  ui: {
1799
2423
  tab: "memory",
1800
- label: "Prometheus Memory Embedding API Key",
1801
- description: "Optional embedding API key passed to Prometheus Memory",
1802
- condition: "prometheusMemoryActive",
2424
+ group: "Mnemopi",
2425
+ label: "Mnemopi Embedding API Key",
2426
+ description: "Optional embedding API key passed to Mnemopi",
2427
+ condition: "mnemopiActive",
1803
2428
  },
1804
2429
  },
1805
- "prometheusMemory.llmMode": {
2430
+ "mnemopi.llmMode": {
1806
2431
  type: "enum",
1807
2432
  values: ["none", "smol", "remote"] as const,
1808
2433
  default: "smol",
1809
2434
  ui: {
1810
2435
  tab: "memory",
1811
- label: "Prometheus Memory LLM Mode",
2436
+ group: "Mnemopi",
2437
+ label: "Mnemopi LLM Mode",
1812
2438
  description: "Use no LLM, the configured smol model, or a remote OpenAI-compatible endpoint",
1813
- condition: "prometheusMemoryActive",
2439
+ condition: "mnemopiActive",
1814
2440
  options: [
1815
- { value: "none", label: "None", description: "Disable Prometheus Memory LLM-backed extraction" },
2441
+ { value: "none", label: "None", description: "Disable Mnemopi LLM-backed extraction" },
1816
2442
  { value: "smol", label: "Smol", description: "Use the configured Prometheus smol model" },
1817
- { value: "remote", label: "Remote", description: "Use the Prometheus Memory remote LLM settings below" },
2443
+ { value: "remote", label: "Remote", description: "Use the Mnemopi remote LLM settings below" },
1818
2444
  ],
1819
2445
  },
1820
2446
  },
1821
- "prometheusMemory.llmBaseUrl": {
2447
+ "mnemopi.llmBaseUrl": {
1822
2448
  type: "string",
1823
2449
  default: undefined,
1824
2450
  ui: {
1825
2451
  tab: "memory",
1826
- label: "Prometheus Memory LLM Base URL",
1827
- description: "Optional OpenAI-compatible LLM endpoint for Prometheus Memory remote mode",
1828
- condition: "prometheusMemoryActive",
2452
+ group: "Mnemopi",
2453
+ label: "Mnemopi LLM Base URL",
2454
+ description: "Optional OpenAI-compatible LLM endpoint for Mnemopi remote mode",
2455
+ condition: "mnemopiActive",
1829
2456
  },
1830
2457
  },
1831
- "prometheusMemory.llmApiKey": {
2458
+ "mnemopi.llmApiKey": {
1832
2459
  type: "string",
1833
2460
  default: undefined,
1834
2461
  ui: {
1835
2462
  tab: "memory",
1836
- label: "Prometheus Memory LLM API Key",
1837
- description: "Optional LLM API key for Prometheus Memory remote mode",
1838
- condition: "prometheusMemoryActive",
2463
+ group: "Mnemopi",
2464
+ label: "Mnemopi LLM API Key",
2465
+ description: "Optional LLM API key for Mnemopi remote mode",
2466
+ condition: "mnemopiActive",
1839
2467
  },
1840
2468
  },
1841
- "prometheusMemory.llmModel": {
2469
+ "mnemopi.llmModel": {
1842
2470
  type: "string",
1843
2471
  default: undefined,
1844
2472
  ui: {
1845
2473
  tab: "memory",
1846
- label: "Prometheus Memory LLM Model",
1847
- description: "Optional LLM model name for Prometheus Memory remote mode",
1848
- condition: "prometheusMemoryActive",
2474
+ group: "Mnemopi",
2475
+ label: "Mnemopi LLM Model",
2476
+ description: "Optional LLM model name for Mnemopi remote mode",
2477
+ condition: "mnemopiActive",
1849
2478
  },
1850
2479
  },
1851
- "prometheusMemory.retainEveryNTurns": { type: "number", default: 4 },
1852
- "prometheusMemory.recallLimit": { type: "number", default: 8 },
1853
- "prometheusMemory.recallContextTurns": { type: "number", default: 3 },
1854
- "prometheusMemory.recallMaxQueryChars": { type: "number", default: 4000 },
1855
- "prometheusMemory.injectionTokenLimit": { type: "number", default: 5000 },
1856
- "prometheusMemory.debug": { type: "boolean", default: false },
2480
+ "mnemopi.retainEveryNTurns": { type: "number", default: 4 },
2481
+ "mnemopi.recallLimit": { type: "number", default: 8 },
2482
+ "mnemopi.recallContextTurns": { type: "number", default: 3 },
2483
+ "mnemopi.recallMaxQueryChars": { type: "number", default: 4000 },
2484
+ "mnemopi.injectionTokenLimit": { type: "number", default: 5000 },
2485
+ "mnemopi.debug": { type: "boolean", default: false },
1857
2486
 
1858
2487
  // Hindsight (https://hindsight.vectorize.io)
1859
2488
  "hindsight.apiUrl": {
@@ -1861,6 +2490,7 @@ export const SETTINGS_SCHEMA = {
1861
2490
  default: "http://localhost:8888",
1862
2491
  ui: {
1863
2492
  tab: "memory",
2493
+ group: "Hindsight",
1864
2494
  label: "Hindsight API URL",
1865
2495
  description: "Hindsight server URL (Cloud or self-hosted)",
1866
2496
  condition: "hindsightActive",
@@ -1874,6 +2504,7 @@ export const SETTINGS_SCHEMA = {
1874
2504
  default: undefined,
1875
2505
  ui: {
1876
2506
  tab: "memory",
2507
+ group: "Hindsight",
1877
2508
  label: "Hindsight Bank ID",
1878
2509
  description: "Memory bank identifier (default: project name)",
1879
2510
  condition: "hindsightActive",
@@ -1887,6 +2518,7 @@ export const SETTINGS_SCHEMA = {
1887
2518
  default: "per-project-tagged",
1888
2519
  ui: {
1889
2520
  tab: "memory",
2521
+ group: "Hindsight",
1890
2522
  label: "Hindsight Scoping",
1891
2523
  description:
1892
2524
  "global = one shared bank; per-project = isolated bank per cwd; per-project-tagged = shared bank with project tags so global + project memories merge on recall",
@@ -1919,6 +2551,7 @@ export const SETTINGS_SCHEMA = {
1919
2551
  default: true,
1920
2552
  ui: {
1921
2553
  tab: "memory",
2554
+ group: "Hindsight",
1922
2555
  label: "Hindsight Auto Recall",
1923
2556
  description: "Recall memories on the first turn of each session",
1924
2557
  condition: "hindsightActive",
@@ -1929,6 +2562,7 @@ export const SETTINGS_SCHEMA = {
1929
2562
  default: true,
1930
2563
  ui: {
1931
2564
  tab: "memory",
2565
+ group: "Hindsight",
1932
2566
  label: "Hindsight Auto Retain",
1933
2567
  description: "Retain transcript every N turns and at session boundaries",
1934
2568
  condition: "hindsightActive",
@@ -1941,6 +2575,7 @@ export const SETTINGS_SCHEMA = {
1941
2575
  default: "full-session",
1942
2576
  ui: {
1943
2577
  tab: "memory",
2578
+ group: "Hindsight",
1944
2579
  label: "Hindsight Retain Mode",
1945
2580
  description: "full-session = upsert one document per session, last-turn = chunked",
1946
2581
  options: [
@@ -1975,6 +2610,7 @@ export const SETTINGS_SCHEMA = {
1975
2610
  default: true,
1976
2611
  ui: {
1977
2612
  tab: "memory",
2613
+ group: "Hindsight",
1978
2614
  label: "Hindsight Mental Models",
1979
2615
  description:
1980
2616
  "Read curated reflect summaries (mental models) into developer instructions at boot. Loads existing models on the bank — does not write. Pair with hindsight.mentalModelAutoSeed to also auto-create the built-in seed set.",
@@ -1986,6 +2622,7 @@ export const SETTINGS_SCHEMA = {
1986
2622
  default: true,
1987
2623
  ui: {
1988
2624
  tab: "memory",
2625
+ group: "Hindsight",
1989
2626
  label: "Hindsight Mental Model Auto-Seed",
1990
2627
  description:
1991
2628
  "At session start, create any built-in mental models (project-conventions, project-decisions, user-preferences) that do not yet exist on the bank.",
@@ -2001,8 +2638,9 @@ export const SETTINGS_SCHEMA = {
2001
2638
  default: true,
2002
2639
  ui: {
2003
2640
  tab: "context",
2641
+ group: "Rules (TTSR)",
2004
2642
  label: "TTSR",
2005
- description: "Time Traveling Stream Rules: interrupt agent when output matches patterns",
2643
+ description: "Interrupt the agent mid-stream when output matches rule patterns (Time-Traveling Stream Rules)",
2006
2644
  },
2007
2645
  },
2008
2646
 
@@ -2012,6 +2650,7 @@ export const SETTINGS_SCHEMA = {
2012
2650
  default: "discard",
2013
2651
  ui: {
2014
2652
  tab: "context",
2653
+ group: "Rules (TTSR)",
2015
2654
  label: "TTSR Context Mode",
2016
2655
  description: "What to do with partial output when TTSR triggers",
2017
2656
  },
@@ -2023,6 +2662,7 @@ export const SETTINGS_SCHEMA = {
2023
2662
  default: "always",
2024
2663
  ui: {
2025
2664
  tab: "context",
2665
+ group: "Rules (TTSR)",
2026
2666
  label: "TTSR Interrupt Mode",
2027
2667
  description: "When to interrupt mid-stream vs inject warning after completion",
2028
2668
  options: [
@@ -2040,6 +2680,7 @@ export const SETTINGS_SCHEMA = {
2040
2680
  default: "once",
2041
2681
  ui: {
2042
2682
  tab: "context",
2683
+ group: "Rules (TTSR)",
2043
2684
  label: "TTSR Repeat Mode",
2044
2685
  description: "How rules can repeat: once per session or after a message gap",
2045
2686
  },
@@ -2050,6 +2691,7 @@ export const SETTINGS_SCHEMA = {
2050
2691
  default: 10,
2051
2692
  ui: {
2052
2693
  tab: "context",
2694
+ group: "Rules (TTSR)",
2053
2695
  label: "TTSR Repeat Gap",
2054
2696
  description: "Messages before a rule can trigger again",
2055
2697
  options: [
@@ -2067,7 +2709,8 @@ export const SETTINGS_SCHEMA = {
2067
2709
  default: true,
2068
2710
  ui: {
2069
2711
  tab: "context",
2070
- label: "Builtin Rules",
2712
+ group: "Rules (TTSR)",
2713
+ label: "Built-in Rules",
2071
2714
  description: "Load the default rules shipped with the agent (override individually with ttsr.disabledRules)",
2072
2715
  },
2073
2716
  },
@@ -2077,6 +2720,7 @@ export const SETTINGS_SCHEMA = {
2077
2720
  default: [] as string[],
2078
2721
  ui: {
2079
2722
  tab: "context",
2723
+ group: "Rules (TTSR)",
2080
2724
  label: "Disabled Rules",
2081
2725
  description: "Rule names to ignore entirely (applies to bundled defaults and your own rules)",
2082
2726
  },
@@ -2092,7 +2736,8 @@ export const SETTINGS_SCHEMA = {
2092
2736
  values: EDIT_MODES,
2093
2737
  default: "hashline",
2094
2738
  ui: {
2095
- tab: "editing",
2739
+ tab: "files",
2740
+ group: "Editing",
2096
2741
  label: "Edit Mode",
2097
2742
  description: "Select the edit tool variant (replace, patch, hashline, or apply_patch)",
2098
2743
  },
@@ -2102,7 +2747,8 @@ export const SETTINGS_SCHEMA = {
2102
2747
  type: "boolean",
2103
2748
  default: true,
2104
2749
  ui: {
2105
- tab: "editing",
2750
+ tab: "files",
2751
+ group: "Editing",
2106
2752
  label: "Fuzzy Match",
2107
2753
  description: "Accept high-confidence fuzzy matches for whitespace differences",
2108
2754
  },
@@ -2112,9 +2758,10 @@ export const SETTINGS_SCHEMA = {
2112
2758
  type: "number",
2113
2759
  default: 0.95,
2114
2760
  ui: {
2115
- tab: "editing",
2761
+ tab: "files",
2762
+ group: "Editing",
2116
2763
  label: "Fuzzy Match Threshold",
2117
- description: "Similarity threshold for fuzzy matches",
2764
+ description: "Similarity threshold (0-1) for accepting fuzzy matches",
2118
2765
  options: [
2119
2766
  { value: "0.85", label: "0.85", description: "Lenient" },
2120
2767
  { value: "0.90", label: "0.90", description: "Moderate" },
@@ -2128,7 +2775,8 @@ export const SETTINGS_SCHEMA = {
2128
2775
  type: "boolean",
2129
2776
  default: false,
2130
2777
  ui: {
2131
- tab: "editing",
2778
+ tab: "files",
2779
+ group: "Editing",
2132
2780
  label: "Abort on Failed Preview",
2133
2781
  description: "Abort streaming edit tool calls when patch preview fails",
2134
2782
  },
@@ -2138,7 +2786,8 @@ export const SETTINGS_SCHEMA = {
2138
2786
  type: "boolean",
2139
2787
  default: true,
2140
2788
  ui: {
2141
- tab: "editing",
2789
+ tab: "files",
2790
+ group: "Editing",
2142
2791
  label: "Block Auto-Generated Files",
2143
2792
  description: "Prevent editing of files that appear to be auto-generated (protoc, sqlc, swagger, etc.)",
2144
2793
  },
@@ -2148,7 +2797,8 @@ export const SETTINGS_SCHEMA = {
2148
2797
  type: "boolean",
2149
2798
  default: false,
2150
2799
  ui: {
2151
- tab: "editing",
2800
+ tab: "files",
2801
+ group: "Reading",
2152
2802
  label: "Line Numbers",
2153
2803
  description: "Prepend line numbers to read tool output by default",
2154
2804
  },
@@ -2158,7 +2808,8 @@ export const SETTINGS_SCHEMA = {
2158
2808
  type: "boolean",
2159
2809
  default: true,
2160
2810
  ui: {
2161
- tab: "editing",
2811
+ tab: "files",
2812
+ group: "Reading",
2162
2813
  label: "Hash Lines",
2163
2814
  description:
2164
2815
  "Include snapshot-tag headers and line numbers in read output for hashline edit mode ([PATH#TAG] plus LINE:content)",
@@ -2169,7 +2820,8 @@ export const SETTINGS_SCHEMA = {
2169
2820
  type: "number",
2170
2821
  default: 300,
2171
2822
  ui: {
2172
- tab: "editing",
2823
+ tab: "files",
2824
+ group: "Reading",
2173
2825
  label: "Default Read Limit",
2174
2826
  description: "Default number of lines returned when agent calls read without a limit",
2175
2827
  options: [
@@ -2186,7 +2838,8 @@ export const SETTINGS_SCHEMA = {
2186
2838
  type: "boolean",
2187
2839
  default: true,
2188
2840
  ui: {
2189
- tab: "editing",
2841
+ tab: "files",
2842
+ group: "Read Summaries",
2190
2843
  label: "Read Summaries",
2191
2844
  description: "Return structural code summaries when read is called without an explicit selector",
2192
2845
  },
@@ -2196,7 +2849,8 @@ export const SETTINGS_SCHEMA = {
2196
2849
  type: "boolean",
2197
2850
  default: false,
2198
2851
  ui: {
2199
- tab: "editing",
2852
+ tab: "files",
2853
+ group: "Read Summaries",
2200
2854
  label: "Prose Summaries",
2201
2855
  description: "Return structural summaries for Markdown and plain text reads",
2202
2856
  },
@@ -2206,7 +2860,8 @@ export const SETTINGS_SCHEMA = {
2206
2860
  type: "number",
2207
2861
  default: 4,
2208
2862
  ui: {
2209
- tab: "editing",
2863
+ tab: "files",
2864
+ group: "Read Summaries",
2210
2865
  label: "Read Summary Body Lines",
2211
2866
  description: "Minimum multiline body or literal length before read summaries collapse it",
2212
2867
  },
@@ -2216,7 +2871,8 @@ export const SETTINGS_SCHEMA = {
2216
2871
  type: "number",
2217
2872
  default: 6,
2218
2873
  ui: {
2219
- tab: "editing",
2874
+ tab: "files",
2875
+ group: "Read Summaries",
2220
2876
  label: "Read Summary Comment Lines",
2221
2877
  description: "Minimum multiline block comment length before read summaries collapse it",
2222
2878
  },
@@ -2226,7 +2882,8 @@ export const SETTINGS_SCHEMA = {
2226
2882
  type: "number",
2227
2883
  default: 100,
2228
2884
  ui: {
2229
- tab: "editing",
2885
+ tab: "files",
2886
+ group: "Read Summaries",
2230
2887
  label: "Read Summary Minimum File Length",
2231
2888
  description: "Files with fewer total lines are read verbatim instead of structurally summarized",
2232
2889
  },
@@ -2236,7 +2893,8 @@ export const SETTINGS_SCHEMA = {
2236
2893
  type: "number",
2237
2894
  default: 50,
2238
2895
  ui: {
2239
- tab: "editing",
2896
+ tab: "files",
2897
+ group: "Read Summaries",
2240
2898
  label: "Read Summary Unfold Target",
2241
2899
  description:
2242
2900
  "BFS-unfold elidable spans until the summary is at least this many visible lines. 0 keeps only the outermost elisions.",
@@ -2247,7 +2905,8 @@ export const SETTINGS_SCHEMA = {
2247
2905
  type: "number",
2248
2906
  default: 100,
2249
2907
  ui: {
2250
- tab: "editing",
2908
+ tab: "files",
2909
+ group: "Read Summaries",
2251
2910
  label: "Read Summary Unfold Ceiling",
2252
2911
  description:
2253
2912
  "Hard ceiling on summary size while BFS-unfolding. An unfold that would exceed this is reverted and unfolding stops.",
@@ -2258,7 +2917,8 @@ export const SETTINGS_SCHEMA = {
2258
2917
  type: "boolean",
2259
2918
  default: false,
2260
2919
  ui: {
2261
- tab: "editing",
2920
+ tab: "files",
2921
+ group: "Reading",
2262
2922
  label: "Inline Read Previews",
2263
2923
  description: "Render read tool results inline in the transcript instead of summary rows",
2264
2924
  },
@@ -2268,14 +2928,32 @@ export const SETTINGS_SCHEMA = {
2268
2928
  "lsp.enabled": {
2269
2929
  type: "boolean",
2270
2930
  default: true,
2271
- ui: { tab: "editing", label: "LSP", description: "Enable the lsp tool for language server protocol" },
2931
+ ui: {
2932
+ tab: "files",
2933
+ group: "LSP",
2934
+ label: "LSP",
2935
+ description: "Enable the lsp tool for code intelligence (definitions, references, diagnostics, rename)",
2936
+ },
2937
+ },
2938
+
2939
+ "lsp.lazy": {
2940
+ type: "boolean",
2941
+ default: true,
2942
+ ui: {
2943
+ tab: "files",
2944
+ group: "LSP",
2945
+ label: "Lazy LSP Startup",
2946
+ description:
2947
+ "Start language servers on first use (lsp tool or editing a matching file type) instead of at session startup",
2948
+ },
2272
2949
  },
2273
2950
 
2274
2951
  "lsp.formatOnWrite": {
2275
2952
  type: "boolean",
2276
2953
  default: false,
2277
2954
  ui: {
2278
- tab: "editing",
2955
+ tab: "files",
2956
+ group: "LSP",
2279
2957
  label: "Format on Write",
2280
2958
  description: "Automatically format code files using LSP after writing",
2281
2959
  },
@@ -2285,7 +2963,8 @@ export const SETTINGS_SCHEMA = {
2285
2963
  type: "boolean",
2286
2964
  default: true,
2287
2965
  ui: {
2288
- tab: "editing",
2966
+ tab: "files",
2967
+ group: "LSP",
2289
2968
  label: "Diagnostics on Write",
2290
2969
  description: "Return LSP diagnostics after writing code files",
2291
2970
  },
@@ -2295,7 +2974,8 @@ export const SETTINGS_SCHEMA = {
2295
2974
  type: "boolean",
2296
2975
  default: false,
2297
2976
  ui: {
2298
- tab: "editing",
2977
+ tab: "files",
2978
+ group: "LSP",
2299
2979
  label: "Diagnostics on Edit",
2300
2980
  description: "Return LSP diagnostics after editing code files",
2301
2981
  },
@@ -2305,17 +2985,45 @@ export const SETTINGS_SCHEMA = {
2305
2985
  type: "boolean",
2306
2986
  default: true,
2307
2987
  ui: {
2308
- tab: "editing",
2988
+ tab: "files",
2989
+ group: "LSP",
2309
2990
  label: "Deduplicate Diagnostics",
2310
2991
  description: "Suppress post-edit LSP diagnostics already shown for a file; only surface new or changed ones",
2311
2992
  },
2312
2993
  },
2313
2994
 
2995
+ "bash.enabled": {
2996
+ type: "boolean",
2997
+ default: true,
2998
+ ui: {
2999
+ tab: "shell",
3000
+ group: "Bash",
3001
+ label: "Bash",
3002
+ description: "Enable the bash tool for shell command execution",
3003
+ },
3004
+ },
3005
+
3006
+ "bash.autoBackground.enabled": {
3007
+ type: "boolean",
3008
+ default: false,
3009
+ ui: {
3010
+ tab: "shell",
3011
+ group: "Bash",
3012
+ label: "Bash Auto-Background",
3013
+ description: "Automatically background long-running bash commands and deliver the result later",
3014
+ },
3015
+ },
3016
+
2314
3017
  // Bash interceptor
2315
3018
  "bashInterceptor.enabled": {
2316
3019
  type: "boolean",
2317
3020
  default: false,
2318
- ui: { tab: "editing", label: "Bash Interceptor", description: "Block shell commands that have dedicated tools" },
3021
+ ui: {
3022
+ tab: "shell",
3023
+ group: "Bash",
3024
+ label: "Bash Interceptor",
3025
+ description: "Block shell commands that have dedicated tools",
3026
+ },
2319
3027
  },
2320
3028
  "bashInterceptor.patterns": { type: "array", default: DEFAULT_BASH_INTERCEPTOR_RULES },
2321
3029
 
@@ -2323,8 +3031,9 @@ export const SETTINGS_SCHEMA = {
2323
3031
  type: "boolean",
2324
3032
  default: true,
2325
3033
  ui: {
2326
- tab: "editing",
2327
- label: "Strip Trailing head/tail",
3034
+ tab: "shell",
3035
+ group: "Bash",
3036
+ label: "Strip head/tail Pipes",
2328
3037
  description:
2329
3038
  "Silently drop trailing `| head`/`| tail` pipes from single-line bash commands. Output is already truncated automatically.",
2330
3039
  },
@@ -2335,7 +3044,8 @@ export const SETTINGS_SCHEMA = {
2335
3044
  type: "boolean",
2336
3045
  default: true,
2337
3046
  ui: {
2338
- tab: "editing",
3047
+ tab: "shell",
3048
+ group: "Bash",
2339
3049
  label: "Shell Minimizer",
2340
3050
  description: "Compress verbose shell output (git, npm, cargo, etc.) before returning it to the agent",
2341
3051
  },
@@ -2350,15 +3060,31 @@ export const SETTINGS_SCHEMA = {
2350
3060
  type: "number",
2351
3061
  default: 4 * 1024 * 1024,
2352
3062
  },
3063
+ "shellMinimizer.sourceOutlineLevel": {
3064
+ type: "enum",
3065
+ values: ["default", "aggressive"] as const,
3066
+ default: "default",
3067
+ ui: {
3068
+ tab: "shell",
3069
+ group: "Bash",
3070
+ label: "Shell Minimizer Source Outline",
3071
+ description: "Source outline mode for cat/read of source files: default or aggressive",
3072
+ },
3073
+ },
3074
+ "shellMinimizer.legacyFilters": {
3075
+ type: "boolean",
3076
+ default: undefined,
3077
+ },
2353
3078
 
2354
3079
  // Eval (per-backend toggles; add more as new backends ship, e.g. eval.ts)
2355
3080
  "eval.py": {
2356
3081
  type: "boolean",
2357
3082
  default: true,
2358
3083
  ui: {
2359
- tab: "editing",
2360
- label: "Eval: Python backend",
2361
- description: "Allow the eval tool to dispatch to the IPython kernel",
3084
+ tab: "shell",
3085
+ group: "Eval & Python",
3086
+ label: "Python Eval Backend",
3087
+ description: "Allow the eval tool to dispatch Python cells to the IPython kernel",
2362
3088
  },
2363
3089
  },
2364
3090
 
@@ -2366,9 +3092,10 @@ export const SETTINGS_SCHEMA = {
2366
3092
  type: "boolean",
2367
3093
  default: true,
2368
3094
  ui: {
2369
- tab: "editing",
2370
- label: "Eval: JavaScript backend",
2371
- description: "Allow the eval tool to dispatch to the in-process JavaScript runtime",
3095
+ tab: "shell",
3096
+ group: "Eval & Python",
3097
+ label: "JavaScript Eval Backend",
3098
+ description: "Allow the eval tool to dispatch JavaScript cells to the in-process runtime",
2372
3099
  },
2373
3100
  },
2374
3101
 
@@ -2378,9 +3105,21 @@ export const SETTINGS_SCHEMA = {
2378
3105
  values: ["session", "per-call"] as const,
2379
3106
  default: "session",
2380
3107
  ui: {
2381
- tab: "editing",
3108
+ tab: "shell",
3109
+ group: "Eval & Python",
2382
3110
  label: "Python Kernel Mode",
2383
- description: "Whether to keep IPython kernel alive across calls",
3111
+ description: "Keep the IPython kernel alive across eval calls or start fresh each time",
3112
+ },
3113
+ },
3114
+ "python.interpreter": {
3115
+ type: "string",
3116
+ default: "",
3117
+ ui: {
3118
+ tab: "shell",
3119
+ group: "Eval & Python",
3120
+ label: "Python Interpreter",
3121
+ description:
3122
+ "Optional path to an exact Python executable. When set, automatic Python runtime discovery is skipped.",
2384
3123
  },
2385
3124
  },
2386
3125
 
@@ -2393,7 +3132,8 @@ export const SETTINGS_SCHEMA = {
2393
3132
  type: "record",
2394
3133
  default: {},
2395
3134
  ui: {
2396
- tab: "tools",
3135
+ tab: "interaction",
3136
+ group: "Approvals",
2397
3137
  label: "Tool Approval Policies",
2398
3138
  description:
2399
3139
  "Per-tool approval policies. Set to 'allow' to auto-approve, 'prompt' to require confirmation, or 'deny' to block. Overrides are honored in every approval mode.",
@@ -2410,9 +3150,10 @@ export const SETTINGS_SCHEMA = {
2410
3150
  default: "yolo",
2411
3151
  ui: {
2412
3152
  tab: "interaction",
3153
+ group: "Approvals",
2413
3154
  label: "Tool Approval",
2414
3155
  description:
2415
- "Default approval behaviour for tool calls. 'Always ask' auto-approves read-only tools only. 'Write' auto-approves read and workspace-write tools. 'Yolo' auto-approves all tiers; user policy may still prompt or block.",
3156
+ "Default approval behavior for tool calls. 'Always ask' auto-approves read-only tools only. 'Write' auto-approves read and workspace-write tools. 'Yolo' auto-approves all tiers; user policy may still prompt or block.",
2416
3157
  options: [
2417
3158
  {
2418
3159
  value: "always-ask",
@@ -2439,13 +3180,23 @@ export const SETTINGS_SCHEMA = {
2439
3180
  "todo.enabled": {
2440
3181
  type: "boolean",
2441
3182
  default: true,
2442
- ui: { tab: "tools", label: "Todos", description: "Enable the todo tool for task tracking" },
3183
+ ui: {
3184
+ tab: "tools",
3185
+ group: "Available Tools",
3186
+ label: "Todos",
3187
+ description: "Enable the todo tool for task tracking",
3188
+ },
2443
3189
  },
2444
3190
 
2445
3191
  "todo.reminders": {
2446
3192
  type: "boolean",
2447
3193
  default: true,
2448
- ui: { tab: "tools", label: "Todo Reminders", description: "Remind agent to complete todos before stopping" },
3194
+ ui: {
3195
+ tab: "tools",
3196
+ group: "Todos",
3197
+ label: "Todo Reminders",
3198
+ description: "Remind the agent to complete todos before stopping",
3199
+ },
2449
3200
  },
2450
3201
 
2451
3202
  "todo.reminders.max": {
@@ -2453,8 +3204,9 @@ export const SETTINGS_SCHEMA = {
2453
3204
  default: 3,
2454
3205
  ui: {
2455
3206
  tab: "tools",
3207
+ group: "Todos",
2456
3208
  label: "Todo Reminder Limit",
2457
- description: "Maximum reminders to complete todos before giving up",
3209
+ description: "Maximum number of todo reminders before giving up",
2458
3210
  options: [
2459
3211
  { value: "1", label: "1 reminder" },
2460
3212
  { value: "2", label: "2 reminders" },
@@ -2465,12 +3217,23 @@ export const SETTINGS_SCHEMA = {
2465
3217
  },
2466
3218
 
2467
3219
  "todo.eager": {
2468
- type: "boolean",
2469
- default: false,
3220
+ type: "enum",
3221
+ values: ["default", "preferred", "always"] as const,
3222
+ default: "default",
2470
3223
  ui: {
2471
3224
  tab: "tools",
3225
+ group: "Todos",
2472
3226
  label: "Create Todos Automatically",
2473
- description: "Automatically create a comprehensive todo list after the first message",
3227
+ description: "How strongly to push automatic todo-list creation after the first message",
3228
+ options: [
3229
+ { value: "default", label: "Default", description: "Model decides; no automatic todo list" },
3230
+ {
3231
+ value: "preferred",
3232
+ label: "Preferred",
3233
+ description: "Suggests a todo list on the first message (reminder, not forced)",
3234
+ },
3235
+ { value: "always", label: "Always", description: "Forces a comprehensive todo list on the first message" },
3236
+ ],
2474
3237
  },
2475
3238
  },
2476
3239
 
@@ -2478,13 +3241,23 @@ export const SETTINGS_SCHEMA = {
2478
3241
  "find.enabled": {
2479
3242
  type: "boolean",
2480
3243
  default: true,
2481
- ui: { tab: "tools", label: "Find", description: "Enable the find tool for file searching" },
3244
+ ui: {
3245
+ tab: "tools",
3246
+ group: "Available Tools",
3247
+ label: "Find",
3248
+ description: "Enable the find tool for glob-based file lookup",
3249
+ },
2482
3250
  },
2483
3251
 
2484
3252
  "search.enabled": {
2485
3253
  type: "boolean",
2486
3254
  default: true,
2487
- ui: { tab: "tools", label: "Search", description: "Enable the search tool for content searching" },
3255
+ ui: {
3256
+ tab: "tools",
3257
+ group: "Available Tools",
3258
+ label: "Search",
3259
+ description: "Enable the search tool for regex content search",
3260
+ },
2488
3261
  },
2489
3262
 
2490
3263
  "search.contextBefore": {
@@ -2492,6 +3265,7 @@ export const SETTINGS_SCHEMA = {
2492
3265
  default: 1,
2493
3266
  ui: {
2494
3267
  tab: "tools",
3268
+ group: "Search & Browser",
2495
3269
  label: "Search Context Before",
2496
3270
  description: "Lines of context before each search match",
2497
3271
  options: [
@@ -2509,6 +3283,7 @@ export const SETTINGS_SCHEMA = {
2509
3283
  default: 3,
2510
3284
  ui: {
2511
3285
  tab: "tools",
3286
+ group: "Search & Browser",
2512
3287
  label: "Search Context After",
2513
3288
  description: "Lines of context after each search match",
2514
3289
  options: [
@@ -2527,6 +3302,7 @@ export const SETTINGS_SCHEMA = {
2527
3302
  default: true,
2528
3303
  ui: {
2529
3304
  tab: "tools",
3305
+ group: "Available Tools",
2530
3306
  label: "AST Grep",
2531
3307
  description: "Enable the ast_grep tool for structural AST search",
2532
3308
  },
@@ -2537,39 +3313,12 @@ export const SETTINGS_SCHEMA = {
2537
3313
  default: true,
2538
3314
  ui: {
2539
3315
  tab: "tools",
3316
+ group: "Available Tools",
2540
3317
  label: "AST Edit",
2541
3318
  description: "Enable the ast_edit tool for structural AST rewrites",
2542
3319
  },
2543
3320
  },
2544
3321
 
2545
- "irc.enabled": {
2546
- type: "boolean",
2547
- default: true,
2548
- ui: {
2549
- tab: "tools",
2550
- label: "IRC",
2551
- description: "Enable agent-to-agent IRC messaging via the irc tool",
2552
- },
2553
- },
2554
-
2555
- "irc.timeoutMs": {
2556
- type: "number",
2557
- default: 120_000,
2558
- ui: {
2559
- tab: "tools",
2560
- label: "IRC Timeout",
2561
- description:
2562
- "Drop IRC messages whose recipient does not respond within this many milliseconds (0 disables the timeout)",
2563
- options: [
2564
- { value: "0", label: "Disabled" },
2565
- { value: "30000", label: "30 seconds" },
2566
- { value: "60000", label: "1 minute" },
2567
- { value: "120000", label: "2 minutes" },
2568
- { value: "300000", label: "5 minutes" },
2569
- ],
2570
- },
2571
- },
2572
-
2573
3322
  // Optional tools
2574
3323
 
2575
3324
  "renderMermaid.enabled": {
@@ -2577,6 +3326,7 @@ export const SETTINGS_SCHEMA = {
2577
3326
  default: false,
2578
3327
  ui: {
2579
3328
  tab: "tools",
3329
+ group: "Available Tools",
2580
3330
  label: "Render Mermaid",
2581
3331
  description: "Enable the render_mermaid tool for Mermaid-to-ASCII rendering",
2582
3332
  },
@@ -2587,18 +3337,20 @@ export const SETTINGS_SCHEMA = {
2587
3337
  default: true,
2588
3338
  ui: {
2589
3339
  tab: "tools",
3340
+ group: "Available Tools",
2590
3341
  label: "Debug",
2591
3342
  description: "Enable the debug tool for DAP-based debugging",
2592
3343
  },
2593
3344
  },
2594
3345
 
2595
- "tts.enabled": {
3346
+ "speechgen.enabled": {
2596
3347
  type: "boolean",
2597
3348
  default: false,
2598
3349
  ui: {
2599
3350
  tab: "tools",
2600
- label: "Text-to-Speech",
2601
- description: "Enable the tts tool for xAI Grok Voice speech synthesis",
3351
+ group: "Available Tools",
3352
+ label: "Speech Generation",
3353
+ description: "Enable the tts tool for on-device (Kokoro) or xAI Grok Voice speech-file synthesis",
2602
3354
  },
2603
3355
  },
2604
3356
 
@@ -2607,6 +3359,7 @@ export const SETTINGS_SCHEMA = {
2607
3359
  default: false,
2608
3360
  ui: {
2609
3361
  tab: "tools",
3362
+ group: "Available Tools",
2610
3363
  label: "Inspect Image",
2611
3364
  description: "Enable the inspect_image tool, delegating image understanding to a vision-capable model",
2612
3365
  },
@@ -2617,6 +3370,7 @@ export const SETTINGS_SCHEMA = {
2617
3370
  default: false,
2618
3371
  ui: {
2619
3372
  tab: "tools",
3373
+ group: "Available Tools",
2620
3374
  label: "Checkpoint/Rewind",
2621
3375
  description: "Enable the checkpoint and rewind tools for context checkpointing",
2622
3376
  },
@@ -2626,7 +3380,12 @@ export const SETTINGS_SCHEMA = {
2626
3380
  "fetch.enabled": {
2627
3381
  type: "boolean",
2628
3382
  default: true,
2629
- ui: { tab: "tools", label: "Read URLs", description: "Allow the read tool to fetch and process URLs" },
3383
+ ui: {
3384
+ tab: "tools",
3385
+ group: "Available Tools",
3386
+ label: "Read URLs",
3387
+ description: "Allow the read tool to fetch and process URLs",
3388
+ },
2630
3389
  },
2631
3390
 
2632
3391
  "vault.enabled": {
@@ -2634,6 +3393,7 @@ export const SETTINGS_SCHEMA = {
2634
3393
  default: false,
2635
3394
  ui: {
2636
3395
  tab: "tools",
3396
+ group: "Available Tools",
2637
3397
  label: "Obsidian Vault",
2638
3398
  description:
2639
3399
  "Enable the vault:// internal URL for reading and editing Obsidian vault content via the Obsidian CLI. When disabled, vault:// resolution is refused and the vault:// entry is omitted from the system prompt.",
@@ -2645,6 +3405,7 @@ export const SETTINGS_SCHEMA = {
2645
3405
  default: false,
2646
3406
  ui: {
2647
3407
  tab: "tools",
3408
+ group: "Available Tools",
2648
3409
  label: "GitHub CLI",
2649
3410
  description:
2650
3411
  "Enable the github tool (op-based dispatch for repository, issue, pull request, diff, search, checkout, push, and Actions watch workflows)",
@@ -2656,7 +3417,8 @@ export const SETTINGS_SCHEMA = {
2656
3417
  default: true,
2657
3418
  ui: {
2658
3419
  tab: "tools",
2659
- label: "GitHub view cache",
3420
+ group: "GitHub",
3421
+ label: "GitHub View Cache",
2660
3422
  description:
2661
3423
  "Cache rendered issue/PR view output in ~/.prometheus/cache/github-cache.db so repeated reads are free",
2662
3424
  },
@@ -2667,8 +3429,10 @@ export const SETTINGS_SCHEMA = {
2667
3429
  default: 300,
2668
3430
  ui: {
2669
3431
  tab: "tools",
2670
- label: "GitHub cache soft TTL (seconds)",
2671
- description: "Within this window, cached issue/PR view rows are returned directly. Default 5 minutes.",
3432
+ group: "GitHub",
3433
+ label: "GitHub Cache Soft TTL",
3434
+ description:
3435
+ "Within this window, cached issue/PR view rows are returned directly (seconds; default 5 minutes)",
2672
3436
  },
2673
3437
  },
2674
3438
 
@@ -2677,16 +3441,22 @@ export const SETTINGS_SCHEMA = {
2677
3441
  default: 604800,
2678
3442
  ui: {
2679
3443
  tab: "tools",
2680
- label: "GitHub cache hard TTL (seconds)",
3444
+ group: "GitHub",
3445
+ label: "GitHub Cache Hard TTL",
2681
3446
  description:
2682
- "Past soft TTL but within hard TTL, the tool returns the cached row and refreshes it in the background. Past hard TTL, the row is dropped. Default 7 days.",
3447
+ "Past the soft TTL the cached row is returned and refreshed in the background; past the hard TTL it is dropped (seconds; default 7 days)",
2683
3448
  },
2684
3449
  },
2685
3450
 
2686
3451
  "web_search.enabled": {
2687
3452
  type: "boolean",
2688
3453
  default: true,
2689
- ui: { tab: "tools", label: "Web Search", description: "Enable the web_search tool for web searching" },
3454
+ ui: {
3455
+ tab: "tools",
3456
+ group: "Available Tools",
3457
+ label: "Web Search",
3458
+ description: "Enable the web_search tool for live web results",
3459
+ },
2690
3460
  },
2691
3461
 
2692
3462
  "browser.enabled": {
@@ -2694,8 +3464,9 @@ export const SETTINGS_SCHEMA = {
2694
3464
  default: true,
2695
3465
  ui: {
2696
3466
  tab: "tools",
3467
+ group: "Available Tools",
2697
3468
  label: "Browser",
2698
- description: "Enable the browser tool (Ulixee Hero)",
3469
+ description: "Enable the browser tool for scripted Chromium automation (puppeteer)",
2699
3470
  },
2700
3471
  },
2701
3472
 
@@ -2704,16 +3475,30 @@ export const SETTINGS_SCHEMA = {
2704
3475
  default: true,
2705
3476
  ui: {
2706
3477
  tab: "tools",
3478
+ group: "Search & Browser",
2707
3479
  label: "Headless Browser",
2708
3480
  description: "Launch browser in headless mode (disable to show browser UI)",
2709
3481
  },
2710
3482
  },
3483
+
3484
+ "browser.cmux": {
3485
+ type: "boolean",
3486
+ default: true,
3487
+ ui: {
3488
+ tab: "tools",
3489
+ group: "Search & Browser",
3490
+ label: "cmux Browser",
3491
+ description:
3492
+ "Use cmux WKWebView surfaces for browser automation when a cmux socket is available. Set PROMETHEUS_BROWSER_CMUX=0 or PROMETHEUS_BROWSER_CMUX=1 to override.",
3493
+ },
3494
+ },
2711
3495
  "browser.screenshotDir": {
2712
3496
  type: "string",
2713
3497
  default: undefined,
2714
3498
  ui: {
2715
3499
  tab: "tools",
2716
- label: "Screenshot directory",
3500
+ group: "Search & Browser",
3501
+ label: "Screenshot Directory",
2717
3502
  description:
2718
3503
  "Directory to save screenshots. If unset, screenshots go to a temp file. Supports ~. Examples: ~/Downloads, ~/Desktop, /sdcard/Download (Android)",
2719
3504
  },
@@ -2725,6 +3510,7 @@ export const SETTINGS_SCHEMA = {
2725
3510
  default: true,
2726
3511
  ui: {
2727
3512
  tab: "tools",
3513
+ group: "Execution",
2728
3514
  label: "Intent Tracing",
2729
3515
  description: "Ask the agent to describe the intent of each tool call before executing it",
2730
3516
  },
@@ -2735,6 +3521,7 @@ export const SETTINGS_SCHEMA = {
2735
3521
  default: 0,
2736
3522
  ui: {
2737
3523
  tab: "tools",
3524
+ group: "Execution",
2738
3525
  label: "Max Tool Timeout",
2739
3526
  description: "Maximum timeout in seconds the agent can set for any tool (0 = no limit)",
2740
3527
  options: [
@@ -2751,9 +3538,10 @@ export const SETTINGS_SCHEMA = {
2751
3538
  // Async jobs
2752
3539
  "async.enabled": {
2753
3540
  type: "boolean",
2754
- default: false,
3541
+ default: true,
2755
3542
  ui: {
2756
3543
  tab: "tools",
3544
+ group: "Execution",
2757
3545
  label: "Async Execution",
2758
3546
  description: "Enable async bash commands and background task execution",
2759
3547
  },
@@ -2766,29 +3554,40 @@ export const SETTINGS_SCHEMA = {
2766
3554
 
2767
3555
  "async.pollWaitDuration": {
2768
3556
  type: "enum",
2769
- values: ["5s", "10s", "30s", "1m", "5m"] as const,
2770
- default: "30s",
3557
+ values: ["5s", "10s", "30s", "1m", "5m", "smart"] as const,
3558
+ default: "smart",
2771
3559
  ui: {
2772
3560
  tab: "tools",
2773
- label: "Poll Wait Duration",
2774
- description: "How long the poll tool waits for background job updates before returning the current state",
3561
+ group: "Execution",
3562
+ label: "Max Poll Time",
3563
+ description:
3564
+ "How long the poll tool waits for background job updates before returning the current state. A fixed value waits that exact duration every time. `smart` adapts: it starts at 5s and lengthens with each back-to-back poll (up to 5m), then resets to 5s after about a minute without polling.",
2775
3565
  options: [
2776
3566
  { value: "5s", label: "5 seconds" },
2777
3567
  { value: "10s", label: "10 seconds" },
2778
- { value: "30s", label: "30 seconds", description: "Default" },
3568
+ { value: "30s", label: "30 seconds" },
2779
3569
  { value: "1m", label: "1 minute" },
2780
3570
  { value: "5m", label: "5 minutes" },
3571
+ { value: "smart", label: "Smart", description: "Default — adaptive 5s→5m, resets when you stop polling" },
2781
3572
  ],
2782
3573
  },
2783
3574
  },
2784
3575
 
2785
- "bash.autoBackground.enabled": {
2786
- type: "boolean",
2787
- default: false,
3576
+ "irc.timeoutMs": {
3577
+ type: "number",
3578
+ default: 120_000,
2788
3579
  ui: {
2789
3580
  tab: "tools",
2790
- label: "Bash Auto-Background",
2791
- description: "Automatically background long-running bash commands and deliver the result later",
3581
+ group: "Execution",
3582
+ label: "IRC Timeout",
3583
+ description: "Default timeout for irc wait (and send await:true) in milliseconds; 0 disables the timeout",
3584
+ options: [
3585
+ { value: "0", label: "Disabled" },
3586
+ { value: "30000", label: "30 seconds" },
3587
+ { value: "60000", label: "1 minute" },
3588
+ { value: "120000", label: "2 minutes" },
3589
+ { value: "300000", label: "5 minutes" },
3590
+ ],
2792
3591
  },
2793
3592
  },
2794
3593
 
@@ -2804,6 +3603,7 @@ export const SETTINGS_SCHEMA = {
2804
3603
  default: "auto",
2805
3604
  ui: {
2806
3605
  tab: "tools",
3606
+ group: "Discovery & MCP",
2807
3607
  label: "Tool Discovery",
2808
3608
  description:
2809
3609
  "Hide tools behind a search tool to save tokens. 'auto' hides MCP tools once the tool set has more than 40 tools; 'mcp-only' always hides MCP tools; 'all' hides all non-essential built-ins too.",
@@ -2815,6 +3615,7 @@ export const SETTINGS_SCHEMA = {
2815
3615
  default: [] as string[],
2816
3616
  ui: {
2817
3617
  tab: "tools",
3618
+ group: "Discovery & MCP",
2818
3619
  label: "Essential Tools Override",
2819
3620
  description:
2820
3621
  "Override the always-loaded built-in tools (default: read, bash, edit). Leave empty to use defaults.",
@@ -2825,7 +3626,12 @@ export const SETTINGS_SCHEMA = {
2825
3626
  "mcp.enableProjectConfig": {
2826
3627
  type: "boolean",
2827
3628
  default: true,
2828
- ui: { tab: "tools", label: "MCP Project Config", description: "Load .mcp.json/mcp.json from project root" },
3629
+ ui: {
3630
+ tab: "tools",
3631
+ group: "Discovery & MCP",
3632
+ label: "MCP Project Config",
3633
+ description: "Load .mcp.json/mcp.json from project root",
3634
+ },
2829
3635
  },
2830
3636
 
2831
3637
  "mcp.discoveryMode": {
@@ -2833,6 +3639,7 @@ export const SETTINGS_SCHEMA = {
2833
3639
  default: false,
2834
3640
  ui: {
2835
3641
  tab: "tools",
3642
+ group: "Discovery & MCP",
2836
3643
  label: "MCP Tool Discovery",
2837
3644
  description: "Hide MCP tools by default and expose them through a tool discovery tool",
2838
3645
  },
@@ -2843,6 +3650,7 @@ export const SETTINGS_SCHEMA = {
2843
3650
  default: [] as string[],
2844
3651
  ui: {
2845
3652
  tab: "tools",
3653
+ group: "Discovery & MCP",
2846
3654
  label: "MCP Discovery Default Servers",
2847
3655
  description: "Keep MCP tools from these servers visible while discovery mode hides other MCP tools",
2848
3656
  },
@@ -2853,6 +3661,7 @@ export const SETTINGS_SCHEMA = {
2853
3661
  default: false,
2854
3662
  ui: {
2855
3663
  tab: "tools",
3664
+ group: "Discovery & MCP",
2856
3665
  label: "MCP Update Injection",
2857
3666
  description: "Inject MCP resource updates into the agent conversation",
2858
3667
  },
@@ -2863,8 +3672,10 @@ export const SETTINGS_SCHEMA = {
2863
3672
  default: 500,
2864
3673
  ui: {
2865
3674
  tab: "tools",
3675
+ group: "Discovery & MCP",
2866
3676
  label: "MCP Notification Debounce",
2867
- description: "Debounce window for MCP resource update notifications before injecting into conversation",
3677
+ description:
3678
+ "Debounce window in milliseconds for MCP resource updates before injecting them into the conversation",
2868
3679
  },
2869
3680
  },
2870
3681
 
@@ -2878,6 +3689,7 @@ export const SETTINGS_SCHEMA = {
2878
3689
  default: true,
2879
3690
  ui: {
2880
3691
  tab: "tasks",
3692
+ group: "Modes",
2881
3693
  label: "Plan Mode",
2882
3694
  description: "Enable plan mode for read-only exploration and planning before execution",
2883
3695
  },
@@ -2888,6 +3700,7 @@ export const SETTINGS_SCHEMA = {
2888
3700
  default: true,
2889
3701
  ui: {
2890
3702
  tab: "tasks",
3703
+ group: "Modes",
2891
3704
  label: "Goal Mode",
2892
3705
  description: "Enable per-session goal mode and the hidden goal tool",
2893
3706
  },
@@ -2898,7 +3711,8 @@ export const SETTINGS_SCHEMA = {
2898
3711
  default: true,
2899
3712
  ui: {
2900
3713
  tab: "tasks",
2901
- label: "Goal Status In Footer",
3714
+ group: "Modes",
3715
+ label: "Goal Status in Footer",
2902
3716
  description: "Show token budget alongside the goal indicator in the status line",
2903
3717
  },
2904
3718
  },
@@ -2908,6 +3722,7 @@ export const SETTINGS_SCHEMA = {
2908
3722
  default: ["interactive"],
2909
3723
  ui: {
2910
3724
  tab: "tasks",
3725
+ group: "Modes",
2911
3726
  label: "Goal Continuation Modes",
2912
3727
  description: "Run modes where active goals may auto-continue between turns",
2913
3728
  },
@@ -2931,6 +3746,7 @@ export const SETTINGS_SCHEMA = {
2931
3746
  default: "none",
2932
3747
  ui: {
2933
3748
  tab: "tasks",
3749
+ group: "Isolation",
2934
3750
  label: "Isolation Mode",
2935
3751
  description:
2936
3752
  'Isolation backend for subagents. "auto" lets the native PAL pick the best available backend (CoW-aware filesystems, then overlayfs/ProjFS, then a git worktree / recursive-copy fallback).',
@@ -2967,6 +3783,7 @@ export const SETTINGS_SCHEMA = {
2967
3783
  default: "patch",
2968
3784
  ui: {
2969
3785
  tab: "tasks",
3786
+ group: "Isolation",
2970
3787
  label: "Isolation Merge Strategy",
2971
3788
  description: "How isolated task changes are integrated (patch apply or branch merge)",
2972
3789
  options: [
@@ -2982,6 +3799,7 @@ export const SETTINGS_SCHEMA = {
2982
3799
  default: "generic",
2983
3800
  ui: {
2984
3801
  tab: "tasks",
3802
+ group: "Isolation",
2985
3803
  label: "Isolation Commit Style",
2986
3804
  description: "Commit message style for nested repo changes (generic or AI-generated)",
2987
3805
  options: [
@@ -2992,40 +3810,31 @@ export const SETTINGS_SCHEMA = {
2992
3810
  },
2993
3811
 
2994
3812
  "task.eager": {
2995
- type: "boolean",
2996
- default: false,
3813
+ type: "enum",
3814
+ values: ["default", "preferred", "always"] as const,
3815
+ default: "default",
2997
3816
  ui: {
2998
3817
  tab: "tasks",
3818
+ group: "Subagents",
2999
3819
  label: "Prefer Task Delegation",
3000
- description: "Encourage the agent to delegate work to subagents unless changes are trivial",
3820
+ description: "How strongly to push delegating work to subagents",
3821
+ options: [
3822
+ { value: "default", label: "Default", description: "Model decides when to delegate" },
3823
+ { value: "preferred", label: "Preferred", description: "Adds delegation guidance to the system prompt" },
3824
+ { value: "always", label: "Always", description: "Prompt guidance plus a first-turn delegation reminder" },
3825
+ ],
3001
3826
  },
3002
3827
  },
3003
3828
 
3004
- "task.simple": {
3005
- type: "enum",
3006
- values: TASK_SIMPLE_MODES,
3007
- default: "schema-free",
3829
+ "task.batch": {
3830
+ type: "boolean",
3831
+ default: true,
3008
3832
  ui: {
3009
3833
  tab: "tasks",
3010
- label: "Task Input Mode",
3011
- description: "How much shared structure the task tool accepts (default, schema-free, or independent)",
3012
- options: [
3013
- {
3014
- value: "default",
3015
- label: "Default",
3016
- description: "Shared context and custom task schema are available",
3017
- },
3018
- {
3019
- value: "schema-free",
3020
- label: "Schema-free",
3021
- description: "Shared context stays available, but custom task schema is disabled",
3022
- },
3023
- {
3024
- value: "independent",
3025
- label: "Independent",
3026
- description: "No shared context or custom task schema; each task must stand alone",
3027
- },
3028
- ],
3834
+ group: "Subagents",
3835
+ label: "Batch Task Calls",
3836
+ description:
3837
+ "Switch the task tool to its batch shape: one call carries { agent, context, tasks[] } — one subagent per item (with per-item isolation) and a required shared context prepended to every assignment. With async.enabled=true, each spawn runs as an independent background agent with the normal idle/parked lifecycle; otherwise the call blocks for merged results. Disable to restore the flat single-spawn schema.",
3029
3838
  },
3030
3839
  },
3031
3840
 
@@ -3034,8 +3843,9 @@ export const SETTINGS_SCHEMA = {
3034
3843
  default: 32,
3035
3844
  ui: {
3036
3845
  tab: "tasks",
3846
+ group: "Subagents",
3037
3847
  label: "Max Concurrent Tasks",
3038
- description: "Concurrent limit for subagents",
3848
+ description: "Maximum number of subagents running concurrently",
3039
3849
  options: [
3040
3850
  { value: "0", label: "Unlimited" },
3041
3851
  { value: "1", label: "1 task" },
@@ -3054,6 +3864,7 @@ export const SETTINGS_SCHEMA = {
3054
3864
  default: false,
3055
3865
  ui: {
3056
3866
  tab: "tasks",
3867
+ group: "Subagents",
3057
3868
  label: "LSP in Subagents",
3058
3869
  description:
3059
3870
  "Allow subagents spawned via the task tool to use the lsp tool. Off by default to keep subagents cheap; enable when LSP-aware delegation is worth the extra tokens.",
@@ -3065,6 +3876,7 @@ export const SETTINGS_SCHEMA = {
3065
3876
  default: 2,
3066
3877
  ui: {
3067
3878
  tab: "tasks",
3879
+ group: "Subagents",
3068
3880
  label: "Max Task Recursion",
3069
3881
  description: "How many levels deep subagents can spawn their own subagents",
3070
3882
  options: [
@@ -3082,6 +3894,7 @@ export const SETTINGS_SCHEMA = {
3082
3894
  default: 0,
3083
3895
  ui: {
3084
3896
  tab: "tasks",
3897
+ group: "Subagents",
3085
3898
  label: "Max Subagent Runtime",
3086
3899
  description:
3087
3900
  "Hard wall-clock limit per subagent (ms). 0 disables it. Defense-in-depth against provider-side stream hangs that escape the inference-layer watchdog; triggers a normal subagent abort with a 'timed out' reason.",
@@ -3095,6 +3908,36 @@ export const SETTINGS_SCHEMA = {
3095
3908
  },
3096
3909
  },
3097
3910
 
3911
+ "task.agentIdleTtlMs": {
3912
+ type: "number",
3913
+ default: 420_000,
3914
+ ui: {
3915
+ tab: "tasks",
3916
+ group: "Subagents",
3917
+ label: "Agent Idle TTL",
3918
+ description:
3919
+ "How long an idle subagent stays live in memory before being parked to disk (ms). Parked agents are revived automatically when messaged or resumed. 0 keeps idle agents live until exit.",
3920
+ },
3921
+ },
3922
+
3923
+ "task.softRequestBudget": {
3924
+ type: "number",
3925
+ default: 90,
3926
+ ui: {
3927
+ tab: "tasks",
3928
+ group: "Subagents",
3929
+ label: "Soft Subagent Request Budget",
3930
+ description:
3931
+ "Soft per-subagent request budget (assistant requests per run). Crossing it injects one steering notice asking the subagent to wrap up; at 1.5x the budget the run is aborted gracefully, salvaging partial output. 0 disables the guard. Bundled explore/quick_task agents use a lower built-in budget.",
3932
+ options: [
3933
+ { value: "0", label: "Disabled" },
3934
+ { value: "40", label: "40 requests" },
3935
+ { value: "90", label: "90 requests", description: "Default" },
3936
+ { value: "150", label: "150 requests" },
3937
+ ],
3938
+ },
3939
+ },
3940
+
3098
3941
  "task.disabledAgents": {
3099
3942
  type: "array",
3100
3943
  default: [] as string[],
@@ -3109,9 +3952,10 @@ export const SETTINGS_SCHEMA = {
3109
3952
  type: "number",
3110
3953
  default: 60,
3111
3954
  ui: {
3112
- tab: "tasks",
3113
- label: "Todo auto-clear delay",
3114
- description: "How long to wait before removing completed/abandoned tasks from the list",
3955
+ tab: "tools",
3956
+ group: "Todos",
3957
+ label: "Todo Auto-Clear Delay",
3958
+ description: "Delay before completed or abandoned todos are removed from the todo widget",
3115
3959
  options: [
3116
3960
  { value: "0", label: "Instant" },
3117
3961
  { value: "60", label: "1 minute", description: "Default" },
@@ -3129,6 +3973,7 @@ export const SETTINGS_SCHEMA = {
3129
3973
  default: false,
3130
3974
  ui: {
3131
3975
  tab: "appearance",
3976
+ group: "Display",
3132
3977
  label: "Show Resolved Model Badge",
3133
3978
  description: "Display the actual model ID used by each subagent in the task widget status line",
3134
3979
  },
@@ -3140,7 +3985,12 @@ export const SETTINGS_SCHEMA = {
3140
3985
  "skills.enableSkillCommands": {
3141
3986
  type: "boolean",
3142
3987
  default: true,
3143
- ui: { tab: "tasks", label: "Skill Commands", description: "Register skills as /skill:name commands" },
3988
+ ui: {
3989
+ tab: "tasks",
3990
+ group: "Commands & Skills",
3991
+ label: "Skill Commands",
3992
+ description: "Register skills as /skill:name commands",
3993
+ },
3144
3994
  },
3145
3995
 
3146
3996
  "skills.enableCodexUser": { type: "boolean", default: true },
@@ -3149,9 +3999,13 @@ export const SETTINGS_SCHEMA = {
3149
3999
 
3150
4000
  "skills.enableClaudeProject": { type: "boolean", default: true },
3151
4001
 
3152
- "skills.enablePrometheusUser": { type: "boolean", default: true },
4002
+ "skills.enablePiUser": { type: "boolean", default: true },
4003
+
4004
+ "skills.enablePiProject": { type: "boolean", default: true },
4005
+
4006
+ "skills.enableAgentsUser": { type: "boolean", default: true },
3153
4007
 
3154
- "skills.enablePrometheusProject": { type: "boolean", default: true },
4008
+ "skills.enableAgentsProject": { type: "boolean", default: true },
3155
4009
 
3156
4010
  "skills.customDirectories": { type: "array", default: [] as string[] },
3157
4011
 
@@ -3163,13 +4017,23 @@ export const SETTINGS_SCHEMA = {
3163
4017
  "commands.enableClaudeUser": {
3164
4018
  type: "boolean",
3165
4019
  default: true,
3166
- ui: { tab: "tasks", label: "Claude User Commands", description: "Load commands from ~/.claude/commands/" },
4020
+ ui: {
4021
+ tab: "tasks",
4022
+ group: "Commands & Skills",
4023
+ label: "Claude User Commands",
4024
+ description: "Load commands from ~/.claude/commands/",
4025
+ },
3167
4026
  },
3168
4027
 
3169
4028
  "commands.enableClaudeProject": {
3170
4029
  type: "boolean",
3171
4030
  default: true,
3172
- ui: { tab: "tasks", label: "Claude Project Commands", description: "Load commands from .claude/commands/" },
4031
+ ui: {
4032
+ tab: "tasks",
4033
+ group: "Commands & Skills",
4034
+ label: "Claude Project Commands",
4035
+ description: "Load commands from .claude/commands/",
4036
+ },
3173
4037
  },
3174
4038
 
3175
4039
  "commands.enableOpencodeUser": {
@@ -3177,6 +4041,7 @@ export const SETTINGS_SCHEMA = {
3177
4041
  default: true,
3178
4042
  ui: {
3179
4043
  tab: "tasks",
4044
+ group: "Commands & Skills",
3180
4045
  label: "OpenCode User Commands",
3181
4046
  description: "Load commands from ~/.config/opencode/commands/",
3182
4047
  },
@@ -3185,7 +4050,12 @@ export const SETTINGS_SCHEMA = {
3185
4050
  "commands.enableOpencodeProject": {
3186
4051
  type: "boolean",
3187
4052
  default: true,
3188
- ui: { tab: "tasks", label: "OpenCode Project Commands", description: "Load commands from .opencode/commands/" },
4053
+ ui: {
4054
+ tab: "tasks",
4055
+ group: "Commands & Skills",
4056
+ label: "OpenCode Project Commands",
4057
+ description: "Load commands from .opencode/commands/",
4058
+ },
3189
4059
  },
3190
4060
 
3191
4061
  // ────────────────────────────────────────────────────────────────────────
@@ -3196,7 +4066,12 @@ export const SETTINGS_SCHEMA = {
3196
4066
  "secrets.enabled": {
3197
4067
  type: "boolean",
3198
4068
  default: false,
3199
- ui: { tab: "providers", label: "Hide Secrets", description: "Obfuscate secrets before sending to AI providers" },
4069
+ ui: {
4070
+ tab: "providers",
4071
+ group: "Privacy",
4072
+ label: "Hide Secrets",
4073
+ description: "Obfuscate secrets before sending to AI providers",
4074
+ },
3200
4075
  },
3201
4076
 
3202
4077
  // Provider selection
@@ -3206,8 +4081,9 @@ export const SETTINGS_SCHEMA = {
3206
4081
  default: "auto",
3207
4082
  ui: {
3208
4083
  tab: "providers",
4084
+ group: "Services",
3209
4085
  label: "Web Search Provider",
3210
- description: "Provider for web search tool",
4086
+ description: "Preferred provider for the web_search tool",
3211
4087
  options: SEARCH_PROVIDER_OPTIONS,
3212
4088
  },
3213
4089
  },
@@ -3217,8 +4093,9 @@ export const SETTINGS_SCHEMA = {
3217
4093
  default: "auto",
3218
4094
  ui: {
3219
4095
  tab: "providers",
4096
+ group: "Services",
3220
4097
  label: "Image Provider",
3221
- description: "Provider for image generation tool",
4098
+ description: "Preferred provider for image generation",
3222
4099
  options: [
3223
4100
  {
3224
4101
  value: "auto",
@@ -3234,21 +4111,109 @@ export const SETTINGS_SCHEMA = {
3234
4111
  {
3235
4112
  value: "xai",
3236
4113
  label: "xAI Grok Imagine",
3237
- description: "Requires xAI Grok OAuth or XAI_API_KEY",
4114
+ description: "Requires xAI Grok OAuth or XAI_APROMETHEUS_KEY",
3238
4115
  },
3239
- { value: "gemini", label: "Gemini", description: "Requires GEMINI_API_KEY" },
3240
- { value: "openrouter", label: "OpenRouter", description: "Requires OPENROUTER_API_KEY" },
4116
+ { value: "gemini", label: "Gemini", description: "Requires GEMINI_APROMETHEUS_KEY" },
4117
+ { value: "openrouter", label: "OpenRouter", description: "Requires OPENROUTER_APROMETHEUS_KEY" },
4118
+ ],
4119
+ },
4120
+ },
4121
+ "providers.tts": {
4122
+ type: "enum",
4123
+ values: ["auto", "local", "xai"] as const,
4124
+ default: "auto",
4125
+ ui: {
4126
+ tab: "providers",
4127
+ group: "Services",
4128
+ label: "Text-to-Speech Provider",
4129
+ description: "Backend for the tts tool: local on-device neural TTS (Kokoro-82M) or xAI Grok Voice",
4130
+ options: [
4131
+ {
4132
+ value: "auto",
4133
+ label: "Auto",
4134
+ description: "Prefer local on-device TTS; route .mp3 output to xAI when credentials exist",
4135
+ },
4136
+ { value: "local", label: "Local", description: "On-device neural TTS (Kokoro-82M); output is WAV/PCM16" },
4137
+ {
4138
+ value: "xai",
4139
+ label: "xAI Grok Voice",
4140
+ description: "Requires xAI Grok OAuth or XAI_APROMETHEUS_KEY; MP3 or WAV",
4141
+ },
4142
+ ],
4143
+ },
4144
+ },
4145
+ "tts.localModel": {
4146
+ type: "enum",
4147
+ values: TTS_LOCAL_MODEL_VALUES,
4148
+ default: DEFAULT_TTS_LOCAL_MODEL_KEY,
4149
+ ui: {
4150
+ tab: "providers",
4151
+ group: "Services",
4152
+ label: "Local TTS Model",
4153
+ description: "On-device neural TTS model (Kokoro-82M) used by the local TTS backend",
4154
+ options: TTS_LOCAL_MODEL_OPTIONS,
4155
+ },
4156
+ },
4157
+ "tts.localVoice": {
4158
+ type: "enum",
4159
+ values: TTS_LOCAL_VOICE_VALUES,
4160
+ default: DEFAULT_TTS_VOICE,
4161
+ ui: {
4162
+ tab: "providers",
4163
+ group: "Services",
4164
+ label: "Local TTS Voice",
4165
+ description: "Kokoro voice used by the local TTS backend (American/British, female/male)",
4166
+ options: TTS_LOCAL_VOICE_OPTIONS,
4167
+ },
4168
+ },
4169
+ "speech.enabled": {
4170
+ type: "boolean",
4171
+ default: false,
4172
+ ui: {
4173
+ tab: "providers",
4174
+ group: "Services",
4175
+ label: "Speech Vocalization",
4176
+ description: "Speak the assistant's output aloud through the speakers as it streams",
4177
+ },
4178
+ },
4179
+ "speech.mode": {
4180
+ type: "enum",
4181
+ values: ["all", "assistant", "yield"] as const,
4182
+ default: "assistant",
4183
+ ui: {
4184
+ tab: "providers",
4185
+ group: "Services",
4186
+ label: "Speech Vocalization Mode",
4187
+ description:
4188
+ "What to speak: all = assistant messages + thinking; assistant = messages only; yield = only the final message at turn end",
4189
+ options: [
4190
+ { value: "all", label: "All (messages + thinking)" },
4191
+ { value: "assistant", label: "Assistant messages" },
4192
+ { value: "yield", label: "Final message only" },
3241
4193
  ],
3242
4194
  },
3243
4195
  },
4196
+ "speech.voice": {
4197
+ type: "enum",
4198
+ values: TTS_LOCAL_VOICE_VALUES,
4199
+ default: DEFAULT_TTS_VOICE,
4200
+ ui: {
4201
+ tab: "providers",
4202
+ group: "Services",
4203
+ label: "Speech Vocalization Voice",
4204
+ description: "Kokoro voice used when speaking the assistant's output aloud",
4205
+ options: TTS_LOCAL_VOICE_OPTIONS,
4206
+ },
4207
+ },
3244
4208
  "providers.tinyModel": {
3245
4209
  type: "enum",
3246
4210
  values: TINY_TITLE_MODEL_VALUES,
3247
4211
  default: ONLINE_TINY_TITLE_MODEL_KEY,
3248
4212
  ui: {
3249
4213
  tab: "providers",
4214
+ group: "Tiny Model",
3250
4215
  label: "Tiny Model",
3251
- description: "Session-title model: online prometheus/smol by default, or a local on-device model",
4216
+ description: "Session-title model: online pi/smol by default, or a local on-device model",
3252
4217
  options: TINY_TITLE_MODEL_OPTIONS,
3253
4218
  },
3254
4219
  },
@@ -3258,6 +4223,7 @@ export const SETTINGS_SCHEMA = {
3258
4223
  default: TINY_MODEL_DEVICE_DEFAULT,
3259
4224
  ui: {
3260
4225
  tab: "providers",
4226
+ group: "Tiny Model",
3261
4227
  label: "Tiny Model Device",
3262
4228
  description:
3263
4229
  "ONNX execution provider for local tiny models (titles + memory). Default uses CPU-only inference. The PROMETHEUS_TINY_DEVICE env var overrides this.",
@@ -3270,6 +4236,7 @@ export const SETTINGS_SCHEMA = {
3270
4236
  default: TINY_MODEL_DTYPE_DEFAULT,
3271
4237
  ui: {
3272
4238
  tab: "providers",
4239
+ group: "Tiny Model",
3273
4240
  label: "Tiny Model Precision",
3274
4241
  description:
3275
4242
  "ONNX quantization/precision for local tiny models. Default uses each model's shipped dtype (q4); lower precision is faster, higher is more faithful. The PROMETHEUS_TINY_DTYPE env var overrides this.",
@@ -3282,10 +4249,11 @@ export const SETTINGS_SCHEMA = {
3282
4249
  default: ONLINE_MEMORY_MODEL_KEY,
3283
4250
  ui: {
3284
4251
  tab: "memory",
4252
+ group: "General",
3285
4253
  label: "Memory Model",
3286
4254
  description:
3287
- "Prometheus Memory LLM for fact extraction + consolidation: online (smol/remote) by default, or a local on-device model",
3288
- condition: "prometheusMemoryActive",
4255
+ "Mnemopi LLM for fact extraction + consolidation: online (smol/remote) by default, or a local on-device model",
4256
+ condition: "mnemopiActive",
3289
4257
  options: TINY_MEMORY_MODEL_OPTIONS,
3290
4258
  },
3291
4259
  },
@@ -3296,6 +4264,7 @@ export const SETTINGS_SCHEMA = {
3296
4264
  default: ONLINE_AUTO_THINKING_MODEL_KEY,
3297
4265
  ui: {
3298
4266
  tab: "model",
4267
+ group: "Thinking",
3299
4268
  label: "Auto Thinking Model",
3300
4269
  description:
3301
4270
  "Difficulty classifier for the `auto` thinking level: online smol by default, or a local on-device model",
@@ -3310,6 +4279,7 @@ export const SETTINGS_SCHEMA = {
3310
4279
  default: "anthropic",
3311
4280
  ui: {
3312
4281
  tab: "providers",
4282
+ group: "Protocol",
3313
4283
  label: "Kimi API Format",
3314
4284
  description: "API format for Kimi Code provider",
3315
4285
  options: [
@@ -3325,6 +4295,7 @@ export const SETTINGS_SCHEMA = {
3325
4295
  default: "auto",
3326
4296
  ui: {
3327
4297
  tab: "providers",
4298
+ group: "Protocol",
3328
4299
  label: "OpenAI WebSockets",
3329
4300
  description: "Websocket policy for OpenAI Codex models (auto uses model defaults, on forces, off disables)",
3330
4301
  options: [
@@ -3341,6 +4312,7 @@ export const SETTINGS_SCHEMA = {
3341
4312
  default: "default",
3342
4313
  ui: {
3343
4314
  tab: "providers",
4315
+ group: "Protocol",
3344
4316
  label: "OpenRouter Routing",
3345
4317
  description:
3346
4318
  "Default routing-variant suffix appended to OpenRouter model IDs (overridden when the selector already names a variant)",
@@ -3357,13 +4329,70 @@ export const SETTINGS_SCHEMA = {
3357
4329
  ],
3358
4330
  },
3359
4331
  },
3360
- "providers.parallelFetch": {
3361
- type: "boolean",
3362
- default: true,
4332
+ "providers.fetch": {
4333
+ type: "enum",
4334
+ values: ["auto", "native", "trafilatura", "lynx", "parallel", "jina"] as const,
4335
+ default: "auto",
3363
4336
  ui: {
3364
4337
  tab: "providers",
3365
- label: "Parallel Fetch",
3366
- description: "Use Parallel extract API for URL fetching when credentials are available",
4338
+ group: "Services",
4339
+ label: "Fetch Provider",
4340
+ description: "Reader backend priority for the fetch/read URL tool",
4341
+ options: [
4342
+ {
4343
+ value: "auto",
4344
+ label: "Auto",
4345
+ description: "Priority: native > trafilatura > lynx > parallel > jina",
4346
+ },
4347
+ { value: "native", label: "Native", description: "In-process HTML→Markdown converter (always available)" },
4348
+ { value: "trafilatura", label: "Trafilatura", description: "Auto-installs via uv/pip" },
4349
+ { value: "lynx", label: "Lynx", description: "Requires lynx system package" },
4350
+ { value: "parallel", label: "Parallel", description: "Requires PARALLEL_APROMETHEUS_KEY" },
4351
+ { value: "jina", label: "Jina", description: "Uses r.jina.ai reader (JINA_APROMETHEUS_KEY optional)" },
4352
+ ],
4353
+ },
4354
+ },
4355
+ // Codex saved rate-limit resets (auto-redeem)
4356
+ "codexResets.autoRedeem": {
4357
+ type: "enum",
4358
+ values: ["unset", "yes", "no"] as const,
4359
+ default: "unset" as const,
4360
+ ui: {
4361
+ tab: "providers",
4362
+ group: "Services",
4363
+ label: "Codex Auto-Redeem Saved Resets",
4364
+ description:
4365
+ "When a turn is blocked by the Codex weekly limit on the active account and no other account is available, run the conservative saved-reset check. unset asks before spending the first eligible reset, yes spends eligible resets without prompting, and no disables the check entirely. Requires retries enabled.",
4366
+ options: [
4367
+ {
4368
+ value: "unset",
4369
+ label: "Unset",
4370
+ description: "Check eligibility, then ask before spending the first saved reset.",
4371
+ },
4372
+ { value: "yes", label: "Yes", description: "Spend eligible saved resets without prompting." },
4373
+ { value: "no", label: "No", description: "Do not run the saved-reset auto-redeem check." },
4374
+ ],
4375
+ },
4376
+ },
4377
+ "codexResets.minBlockedMinutes": {
4378
+ type: "number",
4379
+ default: 60,
4380
+ ui: {
4381
+ tab: "providers",
4382
+ group: "Services",
4383
+ label: "Codex Auto-Redeem Min Block",
4384
+ description:
4385
+ "Only auto-redeem when the natural weekly reset is at least this many minutes away (don't spend a ~30-day credit to save a short wait).",
4386
+ },
4387
+ },
4388
+ "codexResets.keepCredits": {
4389
+ type: "number",
4390
+ default: 0,
4391
+ ui: {
4392
+ tab: "providers",
4393
+ group: "Services",
4394
+ label: "Codex Auto-Redeem Reserve",
4395
+ description: "Never auto-spend below this many saved resets (0 = the last credit may be spent automatically).",
3367
4396
  },
3368
4397
  },
3369
4398
  "provider.appendOnlyContext": {
@@ -3372,6 +4401,7 @@ export const SETTINGS_SCHEMA = {
3372
4401
  default: "auto",
3373
4402
  ui: {
3374
4403
  tab: "providers",
4404
+ group: "Protocol",
3375
4405
  label: "Append-Only Context",
3376
4406
  description:
3377
4407
  "Cache system prompt + tool specs and keep an append-only message log so provider prefix caches (DeepSeek, Xiaomi/SGLang, Anthropic) hit at maximum rate. Auto enables for known prefix-cache providers.",
@@ -3387,25 +4417,40 @@ export const SETTINGS_SCHEMA = {
3387
4417
  "exa.enabled": {
3388
4418
  type: "boolean",
3389
4419
  default: true,
3390
- ui: { tab: "providers", label: "Exa", description: "Master toggle for all Exa search tools" },
4420
+ ui: { tab: "providers", group: "Services", label: "Exa", description: "Master toggle for all Exa search tools" },
3391
4421
  },
3392
4422
 
3393
4423
  "exa.enableSearch": {
3394
4424
  type: "boolean",
3395
4425
  default: true,
3396
- ui: { tab: "providers", label: "Exa Search", description: "Basic search, deep search, code search, crawl" },
4426
+ ui: {
4427
+ tab: "providers",
4428
+ group: "Services",
4429
+ label: "Exa Search",
4430
+ description: "Enable Exa basic search, deep search, code search, and crawl tools",
4431
+ },
3397
4432
  },
3398
4433
 
3399
4434
  "exa.enableResearcher": {
3400
4435
  type: "boolean",
3401
4436
  default: false,
3402
- ui: { tab: "providers", label: "Exa Researcher", description: "AI-powered deep research tasks" },
4437
+ ui: {
4438
+ tab: "providers",
4439
+ group: "Services",
4440
+ label: "Exa Researcher",
4441
+ description: "Enable the Exa researcher tool for AI-powered deep research",
4442
+ },
3403
4443
  },
3404
4444
 
3405
4445
  "exa.enableWebsets": {
3406
4446
  type: "boolean",
3407
4447
  default: false,
3408
- ui: { tab: "providers", label: "Exa Websets", description: "Webset management and enrichment tools" },
4448
+ ui: {
4449
+ tab: "providers",
4450
+ group: "Services",
4451
+ label: "Exa Websets",
4452
+ description: "Enable Exa webset management and enrichment tools",
4453
+ },
3409
4454
  },
3410
4455
 
3411
4456
  // SearXNG
@@ -3414,8 +4459,9 @@ export const SETTINGS_SCHEMA = {
3414
4459
  default: undefined,
3415
4460
  ui: {
3416
4461
  tab: "providers",
4462
+ group: "Services",
3417
4463
  label: "SearXNG Endpoint",
3418
- description: "Self-hosted search base URL",
4464
+ description: "Base URL of a self-hosted SearXNG instance used for web search",
3419
4465
  },
3420
4466
  },
3421
4467
 
@@ -3461,6 +4507,7 @@ export const SETTINGS_SCHEMA = {
3461
4507
  default: false,
3462
4508
  ui: {
3463
4509
  tab: "tools",
4510
+ group: "Developer",
3464
4511
  label: "Auto QA",
3465
4512
  description: "Enable automated tool issue reporting (report_tool_issue) for all agents",
3466
4513
  },
@@ -3468,15 +4515,12 @@ export const SETTINGS_SCHEMA = {
3468
4515
 
3469
4516
  "dev.autoqaPush.endpoint": {
3470
4517
  type: "string",
3471
- // Bundled QA collector — runs `/work/prometheus-www/autoqa` behind qa.prometheus.trivlab.com.
3472
- // Override via `PROMETHEUS_AUTO_QA_PUSH_URL` or `dev.autoqaPush.endpoint`
3473
- // in `config.yml` to point at a self-hosted instance.
3474
- default: "https://qa.prometheus.trivlab.com/v1/grievances" as const,
4518
+ default: "https://qa.prometheus.sh/v1/grievances" as const,
3475
4519
  ui: {
3476
4520
  tab: "tools",
4521
+ group: "Developer",
3477
4522
  label: "Auto QA Push Endpoint",
3478
- description:
3479
- "Full URL that receives the JSON payload (default ships to https://qa.prometheus.trivlab.com/v1/grievances)",
4523
+ description: "Full URL receiving Auto QA JSON reports (default https://qa.prometheus.sh/v1/grievances)",
3480
4524
  },
3481
4525
  },
3482
4526
 
@@ -3523,21 +4567,23 @@ type Schema = typeof SETTINGS_SCHEMA;
3523
4567
  export type SettingPath = keyof Schema;
3524
4568
 
3525
4569
  /** Infer the value type for a setting path */
3526
- export type SettingValue<P extends SettingPath> = Schema[P] extends { type: "boolean" }
3527
- ? boolean
3528
- : Schema[P] extends { type: "string" }
3529
- ? string | undefined
3530
- : Schema[P] extends { type: "number" }
3531
- ? number
3532
- : Schema[P] extends { type: "enum"; values: infer V }
3533
- ? V extends readonly string[]
3534
- ? V[number]
3535
- : never
3536
- : Schema[P] extends { type: "array"; default: infer D }
3537
- ? D
3538
- : Schema[P] extends { type: "record"; default: infer D }
4570
+ export type SettingValue<P extends SettingPath> = Schema[P] extends { type: "boolean"; default: undefined }
4571
+ ? boolean | undefined
4572
+ : Schema[P] extends { type: "boolean" }
4573
+ ? boolean
4574
+ : Schema[P] extends { type: "string" }
4575
+ ? string | undefined
4576
+ : Schema[P] extends { type: "number" }
4577
+ ? number
4578
+ : Schema[P] extends { type: "enum"; values: infer V }
4579
+ ? V extends readonly string[]
4580
+ ? V[number]
4581
+ : never
4582
+ : Schema[P] extends { type: "array"; default: infer D }
3539
4583
  ? D
3540
- : never;
4584
+ : Schema[P] extends { type: "record"; default: infer D }
4585
+ ? D
4586
+ : never;
3541
4587
 
3542
4588
  /** Get the default value for a setting path */
3543
4589
  export function getDefault<P extends SettingPath>(path: P): SettingValue<P> {
@@ -3587,13 +4633,16 @@ export type StatusLineSeparatorStyle = SettingValue<"statusLine.separator">;
3587
4633
  /** Tree selector filter mode - derived from schema */
3588
4634
  export type TreeFilterMode = SettingValue<"treeFilterMode">;
3589
4635
 
4636
+ /** Personality preset - derived from schema */
4637
+ export type Personality = SettingValue<"personality">;
4638
+
3590
4639
  // ═══════════════════════════════════════════════════════════════════════════
3591
4640
  // Typed Group Definitions
3592
4641
  // ═══════════════════════════════════════════════════════════════════════════
3593
4642
 
3594
4643
  export interface CompactionSettings {
3595
4644
  enabled: boolean;
3596
- strategy: "context-full" | "handoff" | "shake" | "off";
4645
+ strategy: "context-full" | "handoff" | "shake" | "snapcompact" | "off";
3597
4646
  thresholdPercent: number;
3598
4647
  thresholdTokens: number;
3599
4648
  reserveTokens: number;
@@ -3605,6 +4654,8 @@ export interface CompactionSettings {
3605
4654
  idleEnabled: boolean;
3606
4655
  idleThresholdTokens: number;
3607
4656
  idleTimeoutSeconds: number;
4657
+ supersedeReads: boolean;
4658
+ dropUseless: boolean;
3608
4659
  }
3609
4660
 
3610
4661
  export interface ContextPromotionSettings {
@@ -3652,8 +4703,10 @@ export interface SkillsSettings {
3652
4703
  enableCodexUser?: boolean;
3653
4704
  enableClaudeUser?: boolean;
3654
4705
  enableClaudeProject?: boolean;
3655
- enablePrometheusUser?: boolean;
3656
- enablePrometheusProject?: boolean;
4706
+ enablePiUser?: boolean;
4707
+ enablePiProject?: boolean;
4708
+ enableAgentsUser?: boolean;
4709
+ enableAgentsProject?: boolean;
3657
4710
  customDirectories?: string[];
3658
4711
  ignoredSkills?: string[];
3659
4712
  includeSkills?: string[];
@@ -3692,6 +4745,7 @@ export interface StatusLineSettings {
3692
4745
  preset: StatusLinePreset;
3693
4746
  separator: StatusLineSeparatorStyle;
3694
4747
  showHookStatus: boolean;
4748
+ transparent: boolean;
3695
4749
  leftSegments: StatusLineSegmentId[];
3696
4750
  rightSegments: StatusLineSegmentId[];
3697
4751
  segmentOptions: Record<string, unknown>;
@@ -3709,8 +4763,7 @@ export interface SttSettings {
3709
4763
  enabled: boolean;
3710
4764
  language: string | undefined;
3711
4765
  modelName: string;
3712
- whisperPath: string | undefined;
3713
- modelPath: string | undefined;
4766
+ streaming: boolean;
3714
4767
  }
3715
4768
 
3716
4769
  export interface BashInterceptorRule {
@@ -3727,6 +4780,15 @@ export interface ShellMinimizerSettings {
3727
4780
  only: string[];
3728
4781
  except: string[];
3729
4782
  maxCaptureBytes: number;
4783
+ sourceOutlineLevel: "default" | "aggressive";
4784
+ legacyFilters: boolean | undefined;
4785
+ }
4786
+ export type CodexAutoRedeemMode = "unset" | "yes" | "no";
4787
+
4788
+ export interface CodexResetsSettings {
4789
+ autoRedeem: CodexAutoRedeemMode;
4790
+ minBlockedMinutes: number;
4791
+ keepCredits: number;
3730
4792
  }
3731
4793
 
3732
4794
  /** Map group prefix -> typed settings interface */
@@ -3747,6 +4809,7 @@ export interface GroupTypeMap {
3747
4809
  modelTags: ModelTagsSettings;
3748
4810
  cycleOrder: string[];
3749
4811
  shellMinimizer: ShellMinimizerSettings;
4812
+ codexResets: CodexResetsSettings;
3750
4813
  }
3751
4814
 
3752
4815
  export type GroupPrefix = keyof GroupTypeMap;