@oh-my-pi/pi-coding-agent 17.0.9 → 17.1.1

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 (349) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +1 -1
  3. package/dist/cli.js +4685 -4614
  4. package/dist/types/async/job-manager.d.ts +37 -1
  5. package/dist/types/cli/args.d.ts +2 -0
  6. package/dist/types/cli/bench-cli.d.ts +41 -0
  7. package/dist/types/commands/bench.d.ts +15 -3
  8. package/dist/types/commands/launch.d.ts +4 -0
  9. package/dist/types/config/model-registry.d.ts +3 -1
  10. package/dist/types/config/models-config-schema.d.ts +18 -6
  11. package/dist/types/config/models-config.d.ts +14 -5
  12. package/dist/types/config/provider-globals.d.ts +2 -2
  13. package/dist/types/config/service-tier.d.ts +5 -1
  14. package/dist/types/config/settings-schema.d.ts +374 -47
  15. package/dist/types/config/settings.d.ts +7 -0
  16. package/dist/types/dap/client.d.ts +20 -0
  17. package/dist/types/exec/bash-executor.d.ts +38 -0
  18. package/dist/types/exec/direnv.d.ts +33 -0
  19. package/dist/types/export/html/args.d.ts +15 -0
  20. package/dist/types/export/html/index.d.ts +11 -26
  21. package/dist/types/export/html/web-palette.d.ts +55 -116
  22. package/dist/types/extensibility/extensions/loader.d.ts +3 -0
  23. package/dist/types/extensibility/extensions/types.d.ts +17 -2
  24. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +3 -0
  25. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +13 -0
  26. package/dist/types/live/attestation.d.ts +2 -0
  27. package/dist/types/live/controller.d.ts +48 -0
  28. package/dist/types/live/protocol.d.ts +85 -0
  29. package/dist/types/live/protocol.test.d.ts +1 -0
  30. package/dist/types/live/transport.d.ts +35 -0
  31. package/dist/types/live/visualizer.d.ts +30 -0
  32. package/dist/types/lsp/client.d.ts +16 -1
  33. package/dist/types/mcp/config-writer.test.d.ts +1 -0
  34. package/dist/types/mcp/oauth-discovery.d.ts +2 -0
  35. package/dist/types/mcp/smithery-auth.d.ts +1 -1
  36. package/dist/types/mcp/smithery-auth.test.d.ts +1 -0
  37. package/dist/types/memory-backend/tool-names.d.ts +2 -0
  38. package/dist/types/modes/components/assistant-message.d.ts +1 -0
  39. package/dist/types/modes/components/custom-message.d.ts +1 -1
  40. package/dist/types/modes/components/login-dialog.d.ts +2 -2
  41. package/dist/types/modes/components/message-frame.d.ts +8 -4
  42. package/dist/types/modes/components/plan-review-overlay.d.ts +26 -0
  43. package/dist/types/modes/components/session-account-selector.d.ts +11 -0
  44. package/dist/types/modes/components/settings-defs.d.ts +7 -1
  45. package/dist/types/modes/components/status-line/component.jj-cache.test.d.ts +1 -0
  46. package/dist/types/modes/components/tool-execution.d.ts +9 -1
  47. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  48. package/dist/types/modes/controllers/event-controller.d.ts +6 -1
  49. package/dist/types/modes/controllers/live-command-controller.d.ts +14 -0
  50. package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
  51. package/dist/types/modes/interactive-mode.d.ts +6 -0
  52. package/dist/types/modes/theme/theme.d.ts +1 -1
  53. package/dist/types/modes/types.d.ts +4 -1
  54. package/dist/types/modes/utils/context-usage.d.ts +12 -2
  55. package/dist/types/plan-mode/plan-files.d.ts +10 -0
  56. package/dist/types/registry/agent-lifecycle.d.ts +21 -9
  57. package/dist/types/registry/agent-registry.d.ts +11 -4
  58. package/dist/types/sdk.d.ts +15 -1
  59. package/dist/types/secrets/index.d.ts +15 -2
  60. package/dist/types/secrets/obfuscator.d.ts +113 -15
  61. package/dist/types/session/acp-permission-gate.d.ts +19 -0
  62. package/dist/types/session/agent-session-events.d.ts +84 -0
  63. package/dist/types/session/agent-session-types.d.ts +321 -0
  64. package/dist/types/session/agent-session.d.ts +135 -753
  65. package/dist/types/session/async-job-delivery.d.ts +28 -0
  66. package/dist/types/session/auth-storage.d.ts +1 -1
  67. package/dist/types/session/bash-runner.d.ts +75 -0
  68. package/dist/types/session/blob-store.d.ts +11 -1
  69. package/dist/types/session/blob-store.test.d.ts +1 -0
  70. package/dist/types/session/checkpoint-entries.d.ts +28 -0
  71. package/dist/types/session/eval-runner.d.ts +51 -0
  72. package/dist/types/session/irc-bridge.d.ts +46 -0
  73. package/dist/types/session/messages.d.ts +24 -0
  74. package/dist/types/session/model-controls.d.ts +180 -0
  75. package/dist/types/session/prewalk.d.ts +46 -0
  76. package/dist/types/session/queued-messages.d.ts +22 -0
  77. package/dist/types/session/redis-session-storage.d.ts +1 -0
  78. package/dist/types/session/retry-fallback-chains.d.ts +74 -0
  79. package/dist/types/session/role-models.d.ts +15 -0
  80. package/dist/types/session/session-advisors.d.ts +228 -0
  81. package/dist/types/session/session-entries.d.ts +8 -0
  82. package/dist/types/session/session-handoff.d.ts +70 -0
  83. package/dist/types/session/session-history-format.d.ts +6 -1
  84. package/dist/types/session/session-maintenance.d.ts +246 -0
  85. package/dist/types/session/session-manager.d.ts +41 -0
  86. package/dist/types/session/session-memory.d.ts +56 -0
  87. package/dist/types/session/session-provider-boundary.d.ts +62 -0
  88. package/dist/types/session/session-stats.d.ts +48 -0
  89. package/dist/types/session/session-tools.d.ts +158 -0
  90. package/dist/types/session/session-workspace.d.ts +32 -0
  91. package/dist/types/session/stream-guards.d.ts +44 -0
  92. package/dist/types/session/streaming-output.d.ts +8 -0
  93. package/dist/types/session/todo-tracker.d.ts +56 -0
  94. package/dist/types/session/ttsr-coordinator.d.ts +51 -0
  95. package/dist/types/session/turn-recovery.d.ts +225 -0
  96. package/dist/types/slash-commands/helpers/session-pin.d.ts +9 -0
  97. package/dist/types/stt/index.d.ts +0 -2
  98. package/dist/types/stt/stt-controller.d.ts +7 -0
  99. package/dist/types/system-prompt.d.ts +2 -0
  100. package/dist/types/task/executor.d.ts +4 -1
  101. package/dist/types/task/output-manager.d.ts +3 -1
  102. package/dist/types/tiny/title-client.d.ts +10 -0
  103. package/dist/types/tools/approval.d.ts +1 -0
  104. package/dist/types/tools/browser/launch.d.ts +5 -0
  105. package/dist/types/tools/builtin-names.d.ts +1 -1
  106. package/dist/types/tools/computer/protocol.d.ts +43 -0
  107. package/dist/types/tools/computer/supervisor.d.ts +32 -0
  108. package/dist/types/tools/computer/worker-entry.d.ts +1 -0
  109. package/dist/types/tools/computer/worker.d.ts +15 -0
  110. package/dist/types/tools/computer-renderer.d.ts +22 -0
  111. package/dist/types/tools/computer.d.ts +71 -0
  112. package/dist/types/tools/context.d.ts +2 -0
  113. package/dist/types/tools/default-renderer.d.ts +21 -0
  114. package/dist/types/tools/image-gen.d.ts +4 -4
  115. package/dist/types/tools/image-providers.d.ts +38 -0
  116. package/dist/types/tools/index.d.ts +7 -0
  117. package/dist/types/tools/path-utils.d.ts +8 -0
  118. package/dist/types/tools/todo.d.ts +10 -4
  119. package/dist/types/tools/xdev.d.ts +5 -1
  120. package/dist/types/tts/streaming-player.d.ts +10 -29
  121. package/dist/types/tts/vocalizer.d.ts +5 -0
  122. package/dist/types/utils/jj.d.ts +29 -0
  123. package/dist/types/utils/lang-from-path.d.ts +1 -0
  124. package/dist/types/utils/title-generator.d.ts +30 -0
  125. package/dist/types/utils/tools-manager.d.ts +1 -2
  126. package/dist/types/vibe/runtime.d.ts +36 -8
  127. package/dist/types/web/search/index.d.ts +1 -1
  128. package/dist/types/web/search/provider.d.ts +15 -5
  129. package/dist/types/web/search/types.d.ts +94 -0
  130. package/package.json +12 -12
  131. package/scripts/generate-share-viewer.ts +4 -6
  132. package/src/advisor/__tests__/advisor.test.ts +643 -0
  133. package/src/advisor/runtime.ts +144 -43
  134. package/src/async/job-manager.ts +90 -2
  135. package/src/cli/args.ts +3 -0
  136. package/src/cli/auth-gateway-cli.ts +18 -3
  137. package/src/cli/bench-cli.ts +395 -29
  138. package/src/cli/flag-tables.ts +3 -0
  139. package/src/cli/gc-cli.ts +2 -2
  140. package/src/cli/setup-cli.ts +2 -14
  141. package/src/cli/usage-cli.ts +10 -1
  142. package/src/cli.ts +8 -0
  143. package/src/collab/host.ts +3 -2
  144. package/src/commands/bench.ts +18 -4
  145. package/src/commands/launch.ts +4 -0
  146. package/src/config/model-registry.ts +16 -2
  147. package/src/config/models-config-schema.ts +15 -4
  148. package/src/config/provider-globals.ts +9 -9
  149. package/src/config/service-tier.ts +26 -1
  150. package/src/config/settings-schema.ts +270 -51
  151. package/src/config/settings.ts +81 -2
  152. package/src/dap/client.ts +37 -4
  153. package/src/edit/index.ts +49 -12
  154. package/src/eval/executor-base.ts +1 -0
  155. package/src/eval/js/executor.ts +2 -0
  156. package/src/eval/py/executor.ts +103 -33
  157. package/src/exec/bash-executor.ts +90 -6
  158. package/src/exec/direnv.ts +145 -0
  159. package/src/export/html/args.ts +20 -0
  160. package/src/export/html/index.ts +45 -47
  161. package/src/export/html/template.css +19 -1
  162. package/src/export/html/template.html +6 -0
  163. package/src/export/html/template.js +21 -0
  164. package/src/export/html/tool-views.generated.js +31 -31
  165. package/src/export/html/web-palette.ts +116 -132
  166. package/src/export/share.ts +249 -49
  167. package/src/extensibility/extensions/loader.ts +29 -1
  168. package/src/extensibility/extensions/runner.ts +6 -0
  169. package/src/extensibility/extensions/types.ts +33 -2
  170. package/src/extensibility/extensions/wrapper.ts +68 -12
  171. package/src/extensibility/legacy-pi-coding-agent-shim.ts +7 -1
  172. package/src/extensibility/plugins/legacy-pi-compat.ts +19 -1
  173. package/src/hindsight/state.ts +64 -6
  174. package/src/internal-urls/local-protocol.ts +2 -1
  175. package/src/internal-urls/memory-protocol.ts +2 -2
  176. package/src/internal-urls/skill-protocol.ts +2 -2
  177. package/src/internal-urls/ssh-protocol.ts +2 -1
  178. package/src/internal-urls/vault-protocol.ts +2 -1
  179. package/src/live/attestation.ts +91 -0
  180. package/src/live/controller.ts +517 -0
  181. package/src/live/prompts/agent-final-message.md +3 -0
  182. package/src/live/prompts/live-instructions.md +23 -0
  183. package/src/live/protocol.test.ts +140 -0
  184. package/src/live/protocol.ts +233 -0
  185. package/src/live/transport.ts +422 -0
  186. package/src/live/visualizer.ts +214 -0
  187. package/src/lsp/client.ts +29 -9
  188. package/src/lsp/index.ts +19 -4
  189. package/src/main.ts +8 -1
  190. package/src/mcp/config-writer.test.ts +43 -0
  191. package/src/mcp/config-writer.ts +109 -82
  192. package/src/mcp/oauth-discovery.ts +10 -2
  193. package/src/mcp/smithery-auth.test.ts +29 -0
  194. package/src/mcp/smithery-auth.ts +3 -2
  195. package/src/memories/index.ts +40 -20
  196. package/src/memory-backend/tool-names.ts +2 -0
  197. package/src/mnemopi/backend.ts +24 -7
  198. package/src/modes/acp/acp-agent.ts +56 -10
  199. package/src/modes/acp/acp-event-mapper.ts +8 -1
  200. package/src/modes/components/agent-hub.ts +1 -1
  201. package/src/modes/components/assistant-message.ts +7 -2
  202. package/src/modes/components/custom-message.ts +4 -1
  203. package/src/modes/components/login-dialog.ts +14 -4
  204. package/src/modes/components/message-frame.ts +14 -8
  205. package/src/modes/components/plan-review-overlay.ts +350 -35
  206. package/src/modes/components/session-account-selector.ts +62 -0
  207. package/src/modes/components/settings-defs.ts +23 -1
  208. package/src/modes/components/settings-selector.ts +169 -1
  209. package/src/modes/components/status-line/component.jj-cache.test.ts +229 -0
  210. package/src/modes/components/status-line/component.ts +123 -2
  211. package/src/modes/components/tool-execution.ts +28 -112
  212. package/src/modes/controllers/command-controller.ts +56 -15
  213. package/src/modes/controllers/event-controller.ts +111 -16
  214. package/src/modes/controllers/extension-ui-controller.test.ts +1 -0
  215. package/src/modes/controllers/extension-ui-controller.ts +20 -4
  216. package/src/modes/controllers/input-controller.ts +47 -39
  217. package/src/modes/controllers/live-command-controller.ts +255 -0
  218. package/src/modes/controllers/mcp-command-controller.ts +10 -1
  219. package/src/modes/controllers/omfg-controller.ts +44 -40
  220. package/src/modes/controllers/selector-controller.ts +80 -10
  221. package/src/modes/controllers/session-focus-controller.ts +6 -1
  222. package/src/modes/interactive-mode.ts +176 -38
  223. package/src/modes/runtime-init.ts +2 -0
  224. package/src/modes/setup-wizard/scenes/web-search.ts +17 -9
  225. package/src/modes/theme/theme.ts +1 -1
  226. package/src/modes/types.ts +4 -1
  227. package/src/modes/utils/context-usage.ts +23 -7
  228. package/src/modes/utils/ui-helpers.ts +10 -5
  229. package/src/plan-mode/plan-files.ts +40 -0
  230. package/src/prompts/bench/cache-prefix-chunk.md +1 -0
  231. package/src/prompts/bench/cache-prefix.md +3 -0
  232. package/src/prompts/bench/cache-suffix.md +1 -0
  233. package/src/prompts/system/computer-safety.md +14 -0
  234. package/src/prompts/system/custom-system-prompt.md +1 -1
  235. package/src/prompts/system/project-prompt.md +8 -1
  236. package/src/prompts/system/subagent-async-pending.md +6 -0
  237. package/src/prompts/system/system-prompt.md +1 -1
  238. package/src/prompts/system/workflow-notice.md +48 -40
  239. package/src/prompts/system/xdev-mount-notice.md +4 -0
  240. package/src/prompts/tools/computer.md +26 -0
  241. package/src/prompts/tools/todo.md +3 -1
  242. package/src/registry/agent-lifecycle.ts +116 -46
  243. package/src/registry/agent-registry.ts +35 -8
  244. package/src/registry/persisted-agents.ts +26 -2
  245. package/src/sdk.ts +215 -136
  246. package/src/secrets/index.ts +127 -4
  247. package/src/secrets/obfuscator.ts +2328 -105
  248. package/src/session/acp-permission-gate.ts +165 -0
  249. package/src/session/agent-session-error-log.test.ts +1 -1
  250. package/src/session/agent-session-events.ts +66 -0
  251. package/src/session/agent-session-types.ts +343 -0
  252. package/src/session/agent-session.ts +1940 -12218
  253. package/src/session/artifacts.ts +6 -5
  254. package/src/session/async-job-delivery.ts +74 -0
  255. package/src/session/auth-storage.ts +1 -0
  256. package/src/session/bash-runner.ts +326 -0
  257. package/src/session/blob-store.test.ts +56 -0
  258. package/src/session/blob-store.ts +18 -2
  259. package/src/session/checkpoint-entries.ts +81 -0
  260. package/src/session/eval-runner.ts +217 -0
  261. package/src/session/indexed-session-storage.ts +9 -2
  262. package/src/session/irc-bridge.ts +203 -0
  263. package/src/session/messages.ts +266 -1
  264. package/src/session/model-controls.ts +714 -0
  265. package/src/session/prewalk.ts +252 -0
  266. package/src/session/queued-messages.ts +93 -0
  267. package/src/session/redis-session-storage.ts +51 -11
  268. package/src/session/retry-fallback-chains.ts +455 -0
  269. package/src/session/role-models.ts +85 -0
  270. package/src/session/session-advisors.ts +1679 -0
  271. package/src/session/session-context.ts +6 -3
  272. package/src/session/session-entries.ts +8 -0
  273. package/src/session/session-handoff.ts +308 -0
  274. package/src/session/session-history-format.ts +20 -9
  275. package/src/session/session-loader.ts +0 -46
  276. package/src/session/session-maintenance.ts +2983 -0
  277. package/src/session/session-manager.ts +390 -30
  278. package/src/session/session-memory.ts +222 -0
  279. package/src/session/session-provider-boundary.ts +307 -0
  280. package/src/session/session-stats.ts +293 -0
  281. package/src/session/session-tools.ts +980 -0
  282. package/src/session/session-workspace.ts +53 -0
  283. package/src/session/stream-guards.ts +417 -0
  284. package/src/session/streaming-output.ts +52 -5
  285. package/src/session/todo-tracker.ts +380 -0
  286. package/src/session/ttsr-coordinator.ts +496 -0
  287. package/src/session/turn-recovery.ts +1629 -0
  288. package/src/slash-commands/builtin-registry.ts +257 -20
  289. package/src/slash-commands/helpers/session-pin.ts +44 -0
  290. package/src/slash-commands/helpers/usage-report.ts +22 -3
  291. package/src/stt/downloader.ts +0 -2
  292. package/src/stt/index.ts +0 -2
  293. package/src/stt/stt-controller.ts +57 -146
  294. package/src/system-prompt.ts +45 -17
  295. package/src/task/executor.ts +285 -70
  296. package/src/task/index.ts +98 -105
  297. package/src/task/output-manager.ts +25 -3
  298. package/src/task/persisted-revive.ts +4 -3
  299. package/src/task/structured-subagent.ts +1 -0
  300. package/src/tiny/title-client.ts +22 -0
  301. package/src/tools/approval.ts +55 -10
  302. package/src/tools/bash-interactive.ts +116 -86
  303. package/src/tools/bash-skill-urls.ts +28 -2
  304. package/src/tools/bash.ts +339 -123
  305. package/src/tools/browser/launch.ts +9 -1
  306. package/src/tools/browser/tab-supervisor.ts +8 -5
  307. package/src/tools/browser.ts +94 -47
  308. package/src/tools/builtin-names.ts +1 -0
  309. package/src/tools/computer/protocol.ts +28 -0
  310. package/src/tools/computer/supervisor.ts +258 -0
  311. package/src/tools/computer/worker-entry.ts +25 -0
  312. package/src/tools/computer/worker.ts +135 -0
  313. package/src/tools/computer-renderer.ts +108 -0
  314. package/src/tools/computer.ts +433 -0
  315. package/src/tools/context.ts +2 -0
  316. package/src/tools/default-renderer.ts +139 -0
  317. package/src/tools/essential-tools.ts +1 -0
  318. package/src/tools/image-gen.ts +20 -28
  319. package/src/tools/image-providers.ts +50 -0
  320. package/src/tools/index.ts +14 -0
  321. package/src/tools/path-utils.ts +49 -2
  322. package/src/tools/read.ts +156 -88
  323. package/src/tools/renderers.ts +9 -1
  324. package/src/tools/todo.ts +101 -11
  325. package/src/tools/vibe.ts +1 -2
  326. package/src/tools/write.ts +51 -1
  327. package/src/tools/xdev.ts +121 -29
  328. package/src/tts/streaming-player.ts +82 -283
  329. package/src/tts/vocalizer.ts +18 -1
  330. package/src/utils/clipboard.ts +1 -30
  331. package/src/utils/jj.ts +125 -4
  332. package/src/utils/lang-from-path.ts +7 -0
  333. package/src/utils/mac-file-urls.applescript +37 -0
  334. package/src/utils/title-generator.ts +137 -1
  335. package/src/utils/tool-choice.ts +14 -0
  336. package/src/utils/tools-manager.ts +1 -19
  337. package/src/vibe/runtime.ts +852 -72
  338. package/src/web/search/index.ts +3 -6
  339. package/src/web/search/provider.ts +31 -16
  340. package/src/web/search/providers/xai.ts +7 -1
  341. package/src/web/search/types.ts +3 -0
  342. package/dist/types/stt/recorder.d.ts +0 -30
  343. package/dist/types/stt/transcriber.d.ts +0 -14
  344. package/dist/types/stt/wav.d.ts +0 -29
  345. package/dist/types/tts/player.d.ts +0 -32
  346. package/src/stt/recorder.ts +0 -551
  347. package/src/stt/transcriber.ts +0 -60
  348. package/src/stt/wav.ts +0 -173
  349. package/src/tts/player.ts +0 -137
@@ -135,11 +135,9 @@ async function executeSearch(
135
135
  let candidates: SearchProviderCandidate[];
136
136
  if (explicitProvider && explicitProvider !== "auto") {
137
137
  candidates = [{ id: explicitProvider, explicit: true }];
138
- } else if (explicitProvider === "auto") {
139
- // Explicit `--provider auto` bypasses the configured preferred provider
140
- // for this invocation; exclusions still apply.
141
- candidates = resolveProviderCandidates("auto");
142
138
  } else {
139
+ // `--provider auto` and the default both walk the configured chain;
140
+ // exclusions still apply.
143
141
  candidates = resolveProviderCandidates();
144
142
  }
145
143
 
@@ -216,7 +214,6 @@ async function executeSearch(
216
214
  // summary error), masking the cancellation.
217
215
  throwIfAborted(signal);
218
216
  failures.push({ provider: provider ?? providerMeta, error });
219
- if (candidate.explicit) break;
220
217
  }
221
218
  }
222
219
 
@@ -351,6 +348,6 @@ export function getSearchTools(): CustomTool<any, any>[] {
351
348
  return [webSearchCustomTool];
352
349
  }
353
350
 
354
- export { getSearchProvider, setExcludedSearchProviders, setPreferredSearchProvider } from "./provider";
351
+ export { getSearchProvider, setExcludedSearchProviders, setSearchProviderOrder } from "./provider";
355
352
  export type { SearchProviderId as SearchProvider, SearchResponse } from "./types";
356
353
  export { isSearchProviderId, isSearchProviderPreference } from "./types";
@@ -189,12 +189,25 @@ export async function getSearchProvider(id: SearchProviderId): Promise<SearchPro
189
189
  return provider;
190
190
  }
191
191
 
192
- /** Preferred provider set via settings (default: auto) */
193
- let preferredProvId: SearchProviderId | "auto" = "auto";
192
+ /** Provider fallback order set via settings (default: built-in order). */
193
+ let orderedProvIds: readonly SearchProviderId[] = SEARCH_PROVIDER_ORDER;
194
+ /** Providers the user explicitly listed in `providers.webSearchOrder`. */
195
+ let explicitProvIds = new Set<SearchProviderId>();
194
196
 
195
- /** Set the preferred web search provider from settings */
196
- export function setPreferredSearchProvider(provider: SearchProviderId | "auto"): void {
197
- preferredProvId = provider;
197
+ /**
198
+ * Prioritize configured providers while retaining every unlisted provider in
199
+ * its built-in relative order. Invalid IDs are ignored defensively. Listed
200
+ * providers are treated as explicit selections: they resolve through
201
+ * `isExplicitlyAvailable`, so e.g. a hand-listed Perplexity may fall back to
202
+ * anonymous search exactly like the retired single-preference setting did.
203
+ */
204
+ export function setSearchProviderOrder(providers: readonly SearchProviderId[]): void {
205
+ const prioritized = new Set(providers.filter(id => SEARCH_PROVIDER_ORDER.includes(id)));
206
+ explicitProvIds = prioritized;
207
+ orderedProvIds =
208
+ prioritized.size === 0
209
+ ? SEARCH_PROVIDER_ORDER
210
+ : [...prioritized, ...SEARCH_PROVIDER_ORDER.filter(id => !prioritized.has(id))];
198
211
  }
199
212
 
200
213
  /** Providers excluded from web search resolution via settings. */
@@ -215,19 +228,21 @@ export interface SearchProviderCandidate {
215
228
  explicit: boolean;
216
229
  }
217
230
 
218
- /** Return provider candidates in fallback order without loading their modules. */
219
- export function resolveProviderCandidates(
220
- preferredProvider: SearchProviderId | "auto" = preferredProvId,
221
- ): SearchProviderCandidate[] {
231
+ /**
232
+ * Return provider candidates in fallback order without loading their modules.
233
+ * `forcedProvider` (a per-request `provider` argument) is terminal-first and
234
+ * bypasses exclusion; configured-order entries carry `explicit: true`.
235
+ */
236
+ export function resolveProviderCandidates(forcedProvider?: SearchProviderId): SearchProviderCandidate[] {
222
237
  const candidates: SearchProviderCandidate[] = [];
223
238
 
224
- if (preferredProvider !== "auto" && !isSearchProviderExcluded(preferredProvider)) {
225
- candidates.push({ id: preferredProvider, explicit: true });
239
+ if (forcedProvider !== undefined && !isSearchProviderExcluded(forcedProvider)) {
240
+ candidates.push({ id: forcedProvider, explicit: true });
226
241
  }
227
242
 
228
- for (const id of SEARCH_PROVIDER_ORDER) {
229
- if (id === preferredProvider || isSearchProviderExcluded(id)) continue;
230
- candidates.push({ id, explicit: false });
243
+ for (const id of orderedProvIds) {
244
+ if (id === forcedProvider || isSearchProviderExcluded(id)) continue;
245
+ candidates.push({ id, explicit: explicitProvIds.has(id) });
231
246
  }
232
247
 
233
248
  return candidates;
@@ -241,11 +256,11 @@ export function resolveProviderCandidates(
241
256
  */
242
257
  export async function resolveProviderChain(
243
258
  authStorage: AuthStorage,
244
- preferredProvider: SearchProviderId | "auto" = preferredProvId,
259
+ forcedProvider?: SearchProviderId,
245
260
  ): Promise<SearchProvider[]> {
246
261
  const providers: SearchProvider[] = [];
247
262
 
248
- for (const candidate of resolveProviderCandidates(preferredProvider)) {
263
+ for (const candidate of resolveProviderCandidates(forcedProvider)) {
249
264
  const provider = await getSearchProvider(candidate.id);
250
265
  const available = candidate.explicit
251
266
  ? await provider.isExplicitlyAvailable(authStorage)
@@ -9,7 +9,12 @@ import { SearchProvider } from "./base";
9
9
  import { classifyProviderHttpError, withHardTimeout } from "./utils";
10
10
 
11
11
  const XAI_DEFAULT_BASE_URL = "https://api.x.ai/v1";
12
- const XAI_WEB_SEARCH_MODEL = "grok-4.3";
12
+ const XAI_WEB_SEARCH_MODEL = "grok-4.5";
13
+ // grok-4.5 defaults reasoning.effort to "high"; xAI documents "low" for
14
+ // latency-sensitive agentic use and simple tool calling
15
+ // (docs.x.ai/developers/model-capabilities/text/reasoning). Web search is
16
+ // exactly that and runs under a 60s hard timeout, so pin the search calls low.
17
+ const XAI_WEB_SEARCH_REASONING_EFFORT = "low";
13
18
  const DEFAULT_NUM_RESULTS = 10;
14
19
  const MAX_NUM_RESULTS = 30;
15
20
 
@@ -60,6 +65,7 @@ function buildRequestBody(params: SearchParams): Record<string, unknown> {
60
65
  { role: "user", content: params.query },
61
66
  ],
62
67
  tools: [{ type: "web_search" }],
68
+ reasoning: { effort: XAI_WEB_SEARCH_REASONING_EFFORT },
63
69
  };
64
70
 
65
71
  if (params.maxOutputTokens !== undefined) {
@@ -96,6 +96,9 @@ export const SEARCH_PROVIDER_ORDER: readonly SearchProviderId[] = SEARCH_PROVIDE
96
96
  option.value === "auto" ? [] : [option.value],
97
97
  );
98
98
 
99
+ /** Concrete provider choices (no `auto` sentinel) — for list-valued settings like order/exclude. */
100
+ export const SEARCH_PROVIDER_CHOICES = SEARCH_PROVIDER_OPTIONS.filter(option => option.value !== "auto");
101
+
99
102
  export const SEARCH_PROVIDER_PREFERENCES = ["auto", ...SEARCH_PROVIDER_ORDER] as const;
100
103
 
101
104
  /** Display labels, derived from {@link SEARCH_PROVIDER_OPTIONS}. */
@@ -1,30 +0,0 @@
1
- export interface RecordingHandle {
2
- stop(): Promise<void>;
3
- }
4
- /**
5
- * Returns available recording tools in priority order.
6
- */
7
- export declare function detectRecordingTools(): string[];
8
- export interface ResolvedRecorder {
9
- tool: "sox" | "ffmpeg" | "arecord" | "powershell";
10
- bin: string;
11
- }
12
- export declare function detectRecorder(): ResolvedRecorder | null;
13
- /**
14
- * Ensure a recorder is available, downloading the static ffmpeg binary when
15
- * nothing is already present. Returns the resolved recorder.
16
- */
17
- export declare function ensureRecorder(onProgress?: (p: {
18
- stage: string;
19
- percent?: number;
20
- }) => void, signal?: AbortSignal): Promise<ResolvedRecorder>;
21
- export declare function startRecording(outputPath: string): Promise<RecordingHandle>;
22
- /**
23
- * Verify a recorded audio file is usable.
24
- * Returns the file size in bytes, or throws.
25
- */
26
- export declare function verifyRecordingFile(filePath: string): Promise<number>;
27
- export interface StreamingRecordingHandle {
28
- stop(): Promise<void>;
29
- }
30
- export declare function startStreamingRecording(onAudio: (samples: Float32Array) => void): Promise<StreamingRecordingHandle | null>;
@@ -1,14 +0,0 @@
1
- export interface TranscribeOptions {
2
- modelName?: string;
3
- language?: string;
4
- signal?: AbortSignal;
5
- }
6
- /**
7
- * Transcribe a WAV file using the local ONNX Whisper worker.
8
- *
9
- * Decodes the WAV to a 16 kHz mono Float32Array in-process (no Python, no
10
- * ffmpeg) and routes it to the warm speech worker, which keeps the model loaded
11
- * across calls. Honors `options.signal` (abort) and applies an internal timeout
12
- * with the same semantics as the previous Python path.
13
- */
14
- export declare function transcribe(audioPath: string, options?: TranscribeOptions): Promise<string>;
@@ -1,29 +0,0 @@
1
- /**
2
- * Minimal WAV (RIFF/PCM) decoder producing the Float32Array @ 16 kHz mono that
3
- * transformers.js `automatic-speech-recognition` expects. Ports the decode/
4
- * mono-mix/resample logic from the retired Python `transcribe.py` (which read
5
- * via the stdlib `wave` module) so STT no longer shells out to Python.
6
- *
7
- * Supported sample formats: PCM uint8 (8-bit), int16 (16-bit), int32 (32-bit),
8
- * and IEEE float32 (format tag 3). Any number of channels is mixed down to mono.
9
- */
10
- /** transformers.js Whisper feature extractor operates at 16 kHz. */
11
- export declare const TARGET_SAMPLE_RATE = 16000;
12
- /**
13
- * Resample via linear interpolation, mirroring the Python `np.interp` over
14
- * `linspace(0, n-1, targetLen)` against `arange(n)`.
15
- */
16
- export declare function resampleLinear(input: Float32Array, fromRate: number, toRate: number): Float32Array;
17
- /**
18
- * Decode a WAV byte buffer into a 16 kHz mono Float32Array suitable for the
19
- * transformers.js Whisper pipeline.
20
- */
21
- export declare function decodeWavToMono16k(buffer: ArrayBuffer): Float32Array;
22
- /**
23
- * Decode interleaved little-endian signed 16-bit PCM bytes into normalized
24
- * [-1, 1] mono float samples. The live recorder streams raw s16le frames from
25
- * sox/ffmpeg/arecord stdout (no RIFF container), so this is the hot-path
26
- * counterpart to {@link decodeWavToMono16k}. `bytes` MUST be 2-byte aligned;
27
- * callers buffer any trailing odd byte across chunk boundaries.
28
- */
29
- export declare function decodePcmS16LE(bytes: Uint8Array): Float32Array;
@@ -1,32 +0,0 @@
1
- export interface PlayerCommand {
2
- cmd: string;
3
- args: string[];
4
- }
5
- /** Injection seam for {@link playerCommandsFor} — defaults to real PATH/tools lookups. */
6
- export interface PlayerLookup {
7
- which?: (bin: string) => string | null;
8
- ffmpeg?: () => string | null;
9
- }
10
- /**
11
- * Build the ordered list of playback commands to try for `filePath` on the
12
- * given platform. Pure + injectable so the selection logic is testable without
13
- * spawning anything.
14
- *
15
- * - darwin: `afplay` (always present on macOS).
16
- * - win32: PowerShell `Media.SoundPlayer.PlaySync()` (no extra deps).
17
- * - linux/other POSIX: `paplay` (PulseAudio) → `aplay` (ALSA) → the bundled
18
- * static `ffmpeg` (`-f pulse` then `-f alsa`). Empty result means nothing is
19
- * available and the caller should surface an install hint.
20
- */
21
- export declare function playerCommandsFor(platform: NodeJS.Platform, filePath: string, lookup?: PlayerLookup): PlayerCommand[];
22
- export interface PlayAudioOptions {
23
- signal?: AbortSignal;
24
- }
25
- /**
26
- * Play `filePath` through the speakers, trying each candidate command in order
27
- * and returning on the first clean exit. Throws an actionable Error if no
28
- * player exists or every candidate fails (with the collected stderr).
29
- */
30
- export declare function playAudioFile(filePath: string, options?: PlayAudioOptions): Promise<void>;
31
- /** Best-effort temp-file cleanup used by callers after playback. */
32
- export declare function removeTempFile(filePath: string): Promise<void>;