@oh-my-pi/pi-coding-agent 17.2.3 → 17.2.5

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 (375) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/dist/{CHANGELOG-c5hpqt9r.md → CHANGELOG-q2w43aw3.md} +92 -0
  3. package/dist/cli.js +3979 -3548
  4. package/dist/{template-8vdv6xb4.js → template-c2hyaytt.js} +8 -26
  5. package/dist/types/advisor/advise-tool.d.ts +6 -0
  6. package/dist/types/advisor/runtime.d.ts +4 -4
  7. package/dist/types/capability/mcp.d.ts +9 -0
  8. package/dist/types/cli/args.d.ts +4 -1
  9. package/dist/types/cli/browser-relay-cli.d.ts +15 -0
  10. package/dist/types/cli/command-help.d.ts +99 -0
  11. package/dist/types/cli/help-extra.d.ts +2 -0
  12. package/dist/types/cli/models-cli.d.ts +1 -1
  13. package/dist/types/cli/thinking-levels.d.ts +5 -0
  14. package/dist/types/cli/update-cli.d.ts +13 -0
  15. package/dist/types/commands/browser-relay.d.ts +38 -0
  16. package/dist/types/commands/commit.d.ts +3 -0
  17. package/dist/types/commands/complete.d.ts +1 -1
  18. package/dist/types/commands/completions.d.ts +6 -0
  19. package/dist/types/commands/grep.d.ts +3 -0
  20. package/dist/types/commands/join.d.ts +4 -0
  21. package/dist/types/commands/launch-help.d.ts +171 -0
  22. package/dist/types/commands/launch.d.ts +5 -1
  23. package/dist/types/commands/models.d.ts +3 -0
  24. package/dist/types/commands/say.d.ts +10 -0
  25. package/dist/types/commands/worktree.d.ts +3 -0
  26. package/dist/types/config/keybindings.d.ts +6 -1
  27. package/dist/types/config/model-discovery.d.ts +2 -2
  28. package/dist/types/config/models-config-schema-bundle.d.ts +3 -0
  29. package/dist/types/config/models-config-schema.d.ts +2 -0
  30. package/dist/types/config/models-config.d.ts +1 -0
  31. package/dist/types/config/service-tier.d.ts +2 -0
  32. package/dist/types/config/settings-schema.d.ts +70 -22
  33. package/dist/types/cursor-bridge-tools.d.ts +1 -1
  34. package/dist/types/cursor.d.ts +7 -4
  35. package/dist/types/discovery/helpers.d.ts +6 -0
  36. package/dist/types/discovery/omp-extension-roots.d.ts +21 -2
  37. package/dist/types/edit/index.d.ts +3 -3
  38. package/dist/types/edit/modes/replace.d.ts +22 -15
  39. package/dist/types/edit/renderer.d.ts +1 -1
  40. package/dist/types/eval/py/kernel.d.ts +3 -1
  41. package/dist/types/eval/py/spawn-options.d.ts +12 -16
  42. package/dist/types/extensibility/extensions/loader.d.ts +6 -2
  43. package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +8 -1
  44. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +1 -1
  45. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +2 -0
  46. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +2 -2
  47. package/dist/types/launch/broker.d.ts +1 -1
  48. package/dist/types/launch/client.d.ts +6 -3
  49. package/dist/types/launch/ensure.d.ts +8 -0
  50. package/dist/types/launch/paths.d.ts +3 -2
  51. package/dist/types/launch/protocol.d.ts +2 -2
  52. package/dist/types/lsp/client.d.ts +2 -0
  53. package/dist/types/lsp/mux/daemon.d.ts +15 -0
  54. package/dist/types/lsp/mux/protocol.d.ts +57 -0
  55. package/dist/types/lsp/mux/server.d.ts +18 -0
  56. package/dist/types/lsp/types.d.ts +22 -2
  57. package/dist/types/main.d.ts +2 -0
  58. package/dist/types/mcp/request-id.d.ts +19 -0
  59. package/dist/types/mcp/types.d.ts +14 -0
  60. package/dist/types/memory-backend/index.d.ts +1 -0
  61. package/dist/types/memory-backend/messages.d.ts +15 -0
  62. package/dist/types/mnemopi/embed-client.d.ts +1 -1
  63. package/dist/types/mnemopi/state.d.ts +0 -23
  64. package/dist/types/modes/components/assistant-message.d.ts +2 -0
  65. package/dist/types/modes/components/custom-editor.d.ts +2 -1
  66. package/dist/types/modes/components/model-browser.d.ts +7 -5
  67. package/dist/types/modes/components/model-picker.d.ts +9 -3
  68. package/dist/types/modes/components/read-tool-group.d.ts +11 -0
  69. package/dist/types/modes/components/stripped-tool-calls-placeholder.d.ts +12 -0
  70. package/dist/types/modes/components/tool-execution.d.ts +2 -0
  71. package/dist/types/modes/controllers/input-controller.d.ts +1 -0
  72. package/dist/types/modes/interactive-mode.d.ts +1 -0
  73. package/dist/types/modes/types.d.ts +2 -1
  74. package/dist/types/modes/workflow.d.ts +2 -1
  75. package/dist/types/registry/agent-lifecycle.d.ts +14 -5
  76. package/dist/types/registry/agent-registry.d.ts +4 -3
  77. package/dist/types/sdk.d.ts +4 -2
  78. package/dist/types/secrets/index.d.ts +7 -9
  79. package/dist/types/session/agent-session-types.d.ts +3 -1
  80. package/dist/types/session/agent-session.d.ts +6 -1
  81. package/dist/types/session/indexed-session-storage.d.ts +1 -0
  82. package/dist/types/session/model-controls.d.ts +0 -1
  83. package/dist/types/session/session-advisors.d.ts +8 -1
  84. package/dist/types/session/session-context.d.ts +2 -1
  85. package/dist/types/session/session-maintenance.d.ts +2 -0
  86. package/dist/types/session/session-manager.d.ts +16 -5
  87. package/dist/types/session/session-stats.d.ts +10 -0
  88. package/dist/types/session/session-storage.d.ts +15 -3
  89. package/dist/types/system-prompt.d.ts +6 -1
  90. package/dist/types/task/index.d.ts +2 -1
  91. package/dist/types/task/spawn-policy.d.ts +5 -0
  92. package/dist/types/thinking.d.ts +1 -7
  93. package/dist/types/tools/ast-grep.d.ts +1 -1
  94. package/dist/types/tools/browser/registry.d.ts +2 -1
  95. package/dist/types/tools/browser/relay/bridge.d.ts +35 -0
  96. package/dist/types/tools/browser/relay/daemon.d.ts +16 -0
  97. package/dist/types/tools/browser/relay/kind.d.ts +19 -0
  98. package/dist/types/tools/browser/relay/protocol.d.ts +97 -0
  99. package/dist/types/tools/browser/relay/server.d.ts +35 -0
  100. package/dist/types/tools/browser/render.d.ts +1 -0
  101. package/dist/types/tools/browser.d.ts +3 -0
  102. package/dist/types/tools/computer/exposure.d.ts +9 -7
  103. package/dist/types/tools/computer/protocol.d.ts +70 -17
  104. package/dist/types/tools/computer/supervisor.d.ts +23 -10
  105. package/dist/types/tools/computer/worker-entry.d.ts +1 -0
  106. package/dist/types/tools/computer/worker.d.ts +42 -7
  107. package/dist/types/tools/computer-renderer.d.ts +7 -5
  108. package/dist/types/tools/computer.d.ts +25 -44
  109. package/dist/types/tools/context.d.ts +3 -0
  110. package/dist/types/tools/default-renderer.d.ts +3 -0
  111. package/dist/types/tools/glob.d.ts +1 -1
  112. package/dist/types/tools/grep.d.ts +1 -1
  113. package/dist/types/tools/render-utils.d.ts +2 -0
  114. package/dist/types/tools/{browser/run-cancellation.d.ts → run-scope.d.ts} +8 -8
  115. package/dist/types/tools/tool-timeouts.d.ts +5 -0
  116. package/dist/types/tools/xdev.d.ts +8 -0
  117. package/dist/types/utils/clipboard.d.ts +2 -2
  118. package/dist/types/web/kagi.d.ts +1 -0
  119. package/dist/types/web/search/index.d.ts +1 -1
  120. package/dist/types/web/search/providers/anthropic.d.ts +1 -0
  121. package/dist/types/web/search/providers/base.d.ts +2 -0
  122. package/dist/types/web/search/providers/brave.d.ts +1 -0
  123. package/dist/types/web/search/providers/browser-page.d.ts +1 -0
  124. package/dist/types/web/search/providers/codex.d.ts +1 -0
  125. package/dist/types/web/search/providers/exa.d.ts +1 -0
  126. package/dist/types/web/search/providers/firecrawl.d.ts +1 -0
  127. package/dist/types/web/search/providers/gemini.d.ts +1 -0
  128. package/dist/types/web/search/providers/jina.d.ts +1 -0
  129. package/dist/types/web/search/providers/kagi.d.ts +1 -0
  130. package/dist/types/web/search/providers/kimi.d.ts +1 -0
  131. package/dist/types/web/search/providers/parallel.d.ts +1 -0
  132. package/dist/types/web/search/providers/perplexity.d.ts +1 -0
  133. package/dist/types/web/search/providers/searxng.d.ts +1 -0
  134. package/dist/types/web/search/providers/tavily.d.ts +1 -0
  135. package/dist/types/web/search/providers/tinyfish.d.ts +1 -0
  136. package/dist/types/web/search/providers/utils.d.ts +6 -9
  137. package/dist/types/web/search/providers/zai.d.ts +1 -0
  138. package/dist/types/web/search/types.d.ts +4 -0
  139. package/package.json +12 -12
  140. package/scripts/legacy-pi-virtual-module.ts +12 -2
  141. package/src/advisor/advise-tool.ts +18 -0
  142. package/src/advisor/runtime.ts +6 -6
  143. package/src/capability/mcp.ts +7 -0
  144. package/src/cli/args.ts +7 -87
  145. package/src/cli/browser-relay-cli.ts +119 -0
  146. package/src/cli/command-help.ts +103 -0
  147. package/src/cli/completion-gen.ts +5 -5
  148. package/src/cli/flag-tables.ts +9 -0
  149. package/src/cli/help-extra.ts +89 -0
  150. package/src/cli/models-cli.ts +13 -16
  151. package/src/cli/setup-cli.ts +13 -21
  152. package/src/cli/thinking-levels.ts +7 -0
  153. package/src/cli/update-cli.ts +26 -7
  154. package/src/cli-commands.ts +170 -33
  155. package/src/cli.ts +17 -5
  156. package/src/collab/host.ts +1 -1
  157. package/src/commands/acp.ts +3 -1
  158. package/src/commands/agents.ts +3 -2
  159. package/src/commands/auth-broker.ts +3 -2
  160. package/src/commands/auth-gateway.ts +3 -2
  161. package/src/commands/bench.ts +2 -3
  162. package/src/commands/browser-relay.ts +53 -0
  163. package/src/commands/cleanse.ts +2 -2
  164. package/src/commands/commit.ts +3 -2
  165. package/src/commands/complete.ts +2 -1
  166. package/src/commands/completions.ts +3 -2
  167. package/src/commands/config.ts +3 -2
  168. package/src/commands/dry-balance.ts +2 -2
  169. package/src/commands/gallery.ts +3 -2
  170. package/src/commands/gc.ts +3 -2
  171. package/src/commands/grep.ts +3 -2
  172. package/src/commands/grievances.ts +3 -2
  173. package/src/commands/install.ts +2 -2
  174. package/src/commands/join.ts +3 -2
  175. package/src/commands/launch-help.ts +116 -0
  176. package/src/commands/launch.ts +7 -191
  177. package/src/commands/models.ts +3 -2
  178. package/src/commands/plugin.ts +3 -2
  179. package/src/commands/read.ts +3 -2
  180. package/src/commands/say.ts +3 -2
  181. package/src/commands/setup.ts +3 -2
  182. package/src/commands/shell.ts +3 -2
  183. package/src/commands/ssh.ts +3 -2
  184. package/src/commands/stats.ts +3 -2
  185. package/src/commands/tiny-models.ts +2 -2
  186. package/src/commands/token.ts +2 -2
  187. package/src/commands/ttsr.ts +2 -2
  188. package/src/commands/update.ts +3 -2
  189. package/src/commands/usage.ts +3 -2
  190. package/src/commands/web-search.ts +3 -2
  191. package/src/commands/worktree.ts +3 -2
  192. package/src/config/keybindings.ts +19 -9
  193. package/src/config/mcp-schema.json +5 -0
  194. package/src/config/model-discovery.ts +30 -13
  195. package/src/config/model-registry.ts +16 -6
  196. package/src/config/models-config-schema-bundle.ts +9 -0
  197. package/src/config/resolve-config-value.ts +2 -1
  198. package/src/config/service-tier.ts +5 -0
  199. package/src/config/settings-schema.ts +73 -21
  200. package/src/cursor-bridge-tools.ts +1 -1
  201. package/src/cursor.ts +10 -14
  202. package/src/discovery/builtin.ts +10 -0
  203. package/src/discovery/helpers.ts +10 -0
  204. package/src/discovery/mcp-json.ts +11 -1
  205. package/src/discovery/omp-extension-roots.ts +79 -20
  206. package/src/discovery/omp-plugins.ts +10 -1
  207. package/src/edit/diff.ts +17 -8
  208. package/src/edit/index.ts +20 -7
  209. package/src/edit/modes/replace.ts +93 -40
  210. package/src/edit/renderer.ts +1 -1
  211. package/src/edit/streaming.ts +14 -17
  212. package/src/eval/py/kernel.ts +2 -1
  213. package/src/eval/py/spawn-options.ts +24 -29
  214. package/src/export/html/template.js +8 -26
  215. package/src/extensibility/extensions/loader.ts +66 -28
  216. package/src/extensibility/extensions/wrapper.ts +1 -0
  217. package/src/extensibility/legacy-pi-ai-shim.ts +22 -1
  218. package/src/extensibility/legacy-pi-coding-agent-shim.ts +7 -6
  219. package/src/extensibility/plugins/legacy-pi-compat.ts +124 -57
  220. package/src/extensibility/plugins/marketplace/registry.ts +4 -8
  221. package/src/extensibility/skills.ts +11 -0
  222. package/src/extensibility/utils.ts +10 -2
  223. package/src/launch/broker.ts +1 -1
  224. package/src/launch/client.ts +32 -13
  225. package/src/launch/ensure.ts +73 -0
  226. package/src/launch/paths.ts +3 -6
  227. package/src/launch/protocol.ts +2 -2
  228. package/src/lsp/client.ts +23 -2
  229. package/src/lsp/index.ts +8 -0
  230. package/src/lsp/mux/daemon.ts +348 -0
  231. package/src/lsp/mux/protocol.ts +96 -0
  232. package/src/lsp/mux/server.ts +797 -0
  233. package/src/lsp/types.ts +28 -2
  234. package/src/main.ts +31 -24
  235. package/src/mcp/config.ts +1 -0
  236. package/src/mcp/oauth-flow.ts +11 -1
  237. package/src/mcp/request-id.ts +24 -0
  238. package/src/mcp/transports/http.ts +4 -2
  239. package/src/mcp/transports/sse.ts +4 -2
  240. package/src/mcp/transports/stdio.ts +4 -2
  241. package/src/mcp/types.ts +15 -0
  242. package/src/memory-backend/index.ts +1 -0
  243. package/src/memory-backend/messages.ts +19 -0
  244. package/src/mnemopi/embed-client.ts +49 -2
  245. package/src/mnemopi/state.ts +57 -23
  246. package/src/modes/components/agent-hub.ts +1 -1
  247. package/src/modes/components/assistant-message.ts +11 -0
  248. package/src/modes/components/chat-transcript-builder.ts +4 -0
  249. package/src/modes/components/custom-editor.ts +10 -1
  250. package/src/modes/components/model-browser.ts +25 -17
  251. package/src/modes/components/model-picker.ts +10 -6
  252. package/src/modes/components/read-tool-group.ts +36 -0
  253. package/src/modes/components/status-line/component.ts +1 -1
  254. package/src/modes/components/stripped-tool-calls-placeholder.ts +35 -0
  255. package/src/modes/components/tool-execution.ts +85 -20
  256. package/src/modes/components/tree-selector.ts +46 -48
  257. package/src/modes/controllers/command-controller.ts +2 -2
  258. package/src/modes/controllers/event-controller.ts +199 -10
  259. package/src/modes/controllers/input-controller.ts +39 -1
  260. package/src/modes/controllers/mcp-command-controller.ts +11 -5
  261. package/src/modes/controllers/selector-controller.ts +47 -6
  262. package/src/modes/interactive-mode.ts +2 -0
  263. package/src/modes/types.ts +6 -1
  264. package/src/modes/utils/hotkeys-markdown.ts +1 -0
  265. package/src/modes/utils/interactive-context-helpers.ts +1 -0
  266. package/src/modes/utils/ui-helpers.ts +6 -10
  267. package/src/modes/workflow.ts +8 -2
  268. package/src/prompts/agents/init.md +1 -1
  269. package/src/prompts/system/plan-mode-active.md +2 -2
  270. package/src/prompts/system/system-prompt.md +26 -52
  271. package/src/prompts/system/workflow-notice.md +3 -3
  272. package/src/prompts/tools/ast-grep.md +1 -1
  273. package/src/prompts/tools/bash.md +1 -1
  274. package/src/prompts/tools/browser.md +1 -0
  275. package/src/prompts/tools/computer.md +21 -21
  276. package/src/prompts/tools/glob.md +1 -1
  277. package/src/prompts/tools/grep.md +1 -1
  278. package/src/prompts/tools/replace.md +5 -4
  279. package/src/prompts/tools/task.md +4 -4
  280. package/src/registry/agent-lifecycle.ts +36 -11
  281. package/src/registry/agent-registry.ts +12 -5
  282. package/src/sdk.ts +102 -35
  283. package/src/secrets/index.ts +16 -18
  284. package/src/session/agent-session-types.ts +3 -1
  285. package/src/session/agent-session.ts +23 -2
  286. package/src/session/agent-storage.ts +6 -4
  287. package/src/session/history-storage.ts +4 -2
  288. package/src/session/indexed-session-storage.ts +9 -0
  289. package/src/session/messages.ts +31 -7
  290. package/src/session/model-controls.ts +0 -1
  291. package/src/session/prewalk.ts +24 -2
  292. package/src/session/session-advisors.ts +21 -3
  293. package/src/session/session-context.ts +16 -12
  294. package/src/session/session-dump-format.ts +1 -1
  295. package/src/session/session-maintenance.ts +41 -4
  296. package/src/session/session-manager.ts +181 -94
  297. package/src/session/session-paths.ts +118 -55
  298. package/src/session/session-stats.ts +48 -3
  299. package/src/session/session-storage.ts +30 -22
  300. package/src/session/session-tools.ts +25 -23
  301. package/src/session/stream-guards.ts +1 -1
  302. package/src/slash-commands/builtin-registry.ts +29 -26
  303. package/src/system-prompt.ts +14 -4
  304. package/src/task/executor.ts +8 -1
  305. package/src/task/index.ts +23 -8
  306. package/src/task/spawn-policy.ts +14 -0
  307. package/src/thinking.ts +2 -8
  308. package/src/tiny/text.ts +12 -0
  309. package/src/tools/ast-grep.ts +10 -4
  310. package/src/tools/browser/cmux/cmux-tab.ts +5 -10
  311. package/src/tools/browser/cmux/rpc.ts +2 -8
  312. package/src/tools/browser/registry.ts +53 -2
  313. package/src/tools/browser/relay/bridge.ts +945 -0
  314. package/src/tools/browser/relay/daemon.ts +117 -0
  315. package/src/tools/browser/relay/extension-assets/background.js.txt +242 -0
  316. package/src/tools/browser/relay/extension-assets/manifest.json.txt +14 -0
  317. package/src/tools/browser/relay/extension-assets/options.html.txt +53 -0
  318. package/src/tools/browser/relay/extension-assets/options.js.txt +23 -0
  319. package/src/tools/browser/relay/kind.ts +41 -0
  320. package/src/tools/browser/relay/protocol.ts +54 -0
  321. package/src/tools/browser/relay/server.ts +141 -0
  322. package/src/tools/browser/render.ts +4 -1
  323. package/src/tools/browser/shared-daemon.ts +7 -58
  324. package/src/tools/browser/tab-supervisor.ts +5 -4
  325. package/src/tools/browser/tab-worker.ts +33 -12
  326. package/src/tools/browser.ts +26 -1
  327. package/src/tools/computer/exposure.ts +11 -35
  328. package/src/tools/computer/protocol.ts +51 -10
  329. package/src/tools/computer/supervisor.ts +227 -124
  330. package/src/tools/computer/worker-entry.ts +11 -6
  331. package/src/tools/computer/worker.ts +695 -81
  332. package/src/tools/computer-renderer.ts +104 -65
  333. package/src/tools/computer.ts +134 -428
  334. package/src/tools/context.ts +3 -0
  335. package/src/tools/default-renderer.ts +19 -4
  336. package/src/tools/glob.ts +9 -2
  337. package/src/tools/grep.ts +12 -6
  338. package/src/tools/index.ts +10 -6
  339. package/src/tools/inspect-image.ts +32 -6
  340. package/src/tools/render-utils.ts +2 -0
  341. package/src/tools/{browser/run-cancellation.ts → run-scope.ts} +11 -11
  342. package/src/tools/tool-timeouts.ts +1 -0
  343. package/src/tools/xdev.ts +29 -2
  344. package/src/utils/clipboard.ts +40 -14
  345. package/src/utils/command-args.ts +26 -28
  346. package/src/utils/tool-choice.ts +0 -13
  347. package/src/web/kagi.ts +2 -1
  348. package/src/web/search/index.ts +18 -2
  349. package/src/web/search/providers/anthropic.ts +7 -2
  350. package/src/web/search/providers/base.ts +2 -0
  351. package/src/web/search/providers/brave.ts +3 -1
  352. package/src/web/search/providers/browser-page.ts +6 -4
  353. package/src/web/search/providers/codex.ts +4 -1
  354. package/src/web/search/providers/duckduckgo.ts +2 -1
  355. package/src/web/search/providers/ecosia.ts +2 -1
  356. package/src/web/search/providers/exa.ts +4 -2
  357. package/src/web/search/providers/firecrawl.ts +3 -1
  358. package/src/web/search/providers/gemini.ts +8 -2
  359. package/src/web/search/providers/google.ts +2 -1
  360. package/src/web/search/providers/jina.ts +12 -2
  361. package/src/web/search/providers/kagi.ts +3 -0
  362. package/src/web/search/providers/kimi.ts +5 -1
  363. package/src/web/search/providers/mojeek.ts +2 -1
  364. package/src/web/search/providers/parallel.ts +5 -1
  365. package/src/web/search/providers/perplexity.ts +6 -3
  366. package/src/web/search/providers/public.ts +1 -1
  367. package/src/web/search/providers/searxng.ts +11 -5
  368. package/src/web/search/providers/startpage.ts +10 -4
  369. package/src/web/search/providers/synthetic.ts +11 -5
  370. package/src/web/search/providers/tavily.ts +3 -1
  371. package/src/web/search/providers/tinyfish.ts +3 -1
  372. package/src/web/search/providers/utils.ts +12 -10
  373. package/src/web/search/providers/xai.ts +2 -2
  374. package/src/web/search/providers/zai.ts +18 -3
  375. package/src/web/search/types.ts +6 -0
@@ -1,32 +1,45 @@
1
- import type { DesktopAction, DesktopCapabilities, DesktopCapture, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
2
- import { type ComputerWorkerInbound, type ComputerWorkerOutbound } from "./protocol.js";
1
+ import type { DesktopCapabilities } from "@oh-my-pi/pi-natives";
2
+ import type { ToolSession } from "../index.js";
3
+ import { type ComputerRunOk, type ComputerSessionSnapshot, type ComputerWorkerInbound, type ComputerWorkerOutbound } from "./protocol.js";
4
+ /** Runs desktop scripts and owns their persistent worker session. */
3
5
  export interface ComputerController {
4
- readonly capabilities: DesktopCapabilities | undefined;
5
- execute(actions: DesktopAction[], signal?: AbortSignal): Promise<DesktopCapture>;
6
+ run(code: string, timeoutMs: number, snapshot: ComputerSessionSnapshot, signal?: AbortSignal): Promise<ComputerRunOk>;
7
+ capabilities(): Promise<DesktopCapabilities | undefined>;
6
8
  close(): Promise<void>;
7
9
  }
10
+ /** Minimal Bun worker lifecycle surface used by the supervisor. */
8
11
  export interface ComputerWorkerHandle {
9
12
  send(message: ComputerWorkerInbound): void;
10
13
  onMessage(handler: (message: ComputerWorkerOutbound) => void): () => void;
11
14
  onError(handler: (error: Error) => void): () => void;
12
15
  terminate(): Promise<void>;
13
16
  }
17
+ /** Startup and shutdown deadlines for a computer worker. */
14
18
  export interface ComputerSupervisorTimeouts {
15
19
  startMs: number;
16
20
  closeMs: number;
17
21
  }
22
+ /** Dispatches a tool call requested from desktop JavaScript. */
23
+ export type ComputerSessionToolCaller = (name: string, args: unknown, options: {
24
+ session: ToolSession;
25
+ signal?: AbortSignal;
26
+ emitStatus?: () => void;
27
+ }) => Promise<unknown>;
28
+ /** Creates an isolated computer worker handle. */
18
29
  export type ComputerWorkerFactory = () => ComputerWorkerHandle;
30
+ /** Spawns the computer worker through the active CLI host when available. */
19
31
  export declare function spawnComputerWorker(): ComputerWorkerHandle;
32
+ /** Supervises one lazy, crash-isolated computer worker per agent session. */
20
33
  export declare class ComputerSupervisor implements ComputerController {
21
34
  #private;
22
- private readonly options;
23
- private readonly createWorker;
24
- private readonly timeouts;
25
- constructor(options: DesktopSessionOptions, createWorker?: ComputerWorkerFactory, timeouts?: ComputerSupervisorTimeouts);
26
- get capabilities(): DesktopCapabilities | undefined;
27
- execute(actions: DesktopAction[], signal?: AbortSignal): Promise<DesktopCapture>;
35
+ constructor(session: ToolSession, createWorker?: ComputerWorkerFactory, timeouts?: ComputerSupervisorTimeouts, callSessionTool?: ComputerSessionToolCaller);
36
+ capabilities(): Promise<DesktopCapabilities | undefined>;
37
+ run(code: string, timeoutMs: number, snapshot: ComputerSessionSnapshot, signal?: AbortSignal): Promise<ComputerRunOk>;
28
38
  close(): Promise<void>;
29
39
  }
40
+ /** Registers a controller for owner-scoped session cleanup. */
30
41
  export declare function registerComputerController(ownerId: string | undefined, controller: ComputerController): () => void;
42
+ /** Closes every computer session owned by an agent session. */
31
43
  export declare function releaseComputerSessionsForOwner(ownerId: string | undefined): Promise<void>;
44
+ /** Verifies computer worker startup, messaging, and bounded shutdown. */
32
45
  export declare function smokeTestComputerWorker(timeoutMs?: number, createWorker?: ComputerWorkerFactory): Promise<void>;
@@ -1 +1,2 @@
1
+ /** Starts the computer worker once when running inside a Bun worker thread. */
1
2
  export declare function startComputerWorker(): void;
@@ -1,15 +1,50 @@
1
- import type { DesktopAction, DesktopCapture, DesktopSession, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
2
- import type { ComputerWorkerTransport } from "./protocol.js";
1
+ import type { AxNode, AxQuery, AxSnapshotOptions, DesktopCapabilities, DesktopDisplay, DesktopPoint, DesktopSessionOptions, DesktopWindow, PointerOptions } from "@oh-my-pi/pi-natives";
2
+ import type { ComputerWorkerInbound, ComputerWorkerTransport } from "./protocol.js";
3
+ /** Native desktop operations consumed by the script runtime. */
3
4
  export interface NativeDesktopSession {
4
- readonly capabilities: DesktopSession["capabilities"];
5
- capture(): Promise<DesktopCapture>;
6
- execute(actions: DesktopAction[]): Promise<DesktopCapture>;
5
+ readonly capabilities: DesktopCapabilities;
6
+ listDisplays(): Promise<DesktopDisplay[]>;
7
+ listWindows(): Promise<DesktopWindow[]>;
8
+ capture(target: string, caps?: {
9
+ maxWidth?: number;
10
+ maxHeight?: number;
11
+ } | null): Promise<{
12
+ data: Uint8Array;
13
+ width: number;
14
+ height: number;
15
+ sourceWidth: number;
16
+ sourceHeight: number;
17
+ target: string;
18
+ }>;
19
+ click(target: string, x: number, y: number, opts?: PointerOptions | null): Promise<void>;
20
+ moveMouse(target: string, x: number, y: number, opts?: PointerOptions | null): Promise<void>;
21
+ drag(target: string, points: DesktopPoint[], opts?: PointerOptions | null): Promise<void>;
22
+ scroll(target: string, x: number, y: number, dx: number, dy: number, opts?: PointerOptions | null): Promise<void>;
23
+ typeText(target: string, text: string, opts?: PointerOptions | null): Promise<void>;
24
+ keyChord(target: string, keys: string[], opts?: PointerOptions | null): Promise<void>;
25
+ raiseWindow(windowId: string): Promise<void>;
26
+ axSnapshot(target: string, opts?: AxSnapshotOptions | null): Promise<{
27
+ text: string;
28
+ }>;
29
+ axQuery(target: string, query: AxQuery): Promise<AxNode[]>;
30
+ axElementAt(target: string, x: number, y: number): Promise<AxNode | null | undefined>;
31
+ axFocused(): Promise<AxNode | null | undefined>;
32
+ axNode(ref: string): Promise<AxNode>;
33
+ axAttributes(ref: string): Promise<Array<[string, string]>>;
34
+ axChildren(ref: string): Promise<AxNode[]>;
35
+ axParent(ref: string): Promise<AxNode | null | undefined>;
36
+ axPerform(ref: string, action: string): Promise<void>;
37
+ axSetValue(ref: string, value: string): Promise<void>;
38
+ axFocus(ref: string): Promise<void>;
39
+ axClick(ref: string, opts?: PointerOptions | null): Promise<void>;
7
40
  close(): Promise<void>;
8
41
  }
42
+ /** Creates the native session co-located with the computer worker runtime. */
9
43
  export type NativeDesktopSessionFactory = (options: DesktopSessionOptions) => NativeDesktopSession;
44
+ /** Hosts the persistent JavaScript runtime and native desktop session. */
10
45
  export declare class ComputerWorkerCore {
11
46
  #private;
12
- private readonly transport;
13
- private readonly createSession;
14
47
  constructor(transport: ComputerWorkerTransport, createSession?: NativeDesktopSessionFactory);
48
+ /** Routes one supervisor command into the persistent worker state. */
49
+ handle(message: ComputerWorkerInbound): void;
15
50
  }
@@ -2,21 +2,23 @@ import type { Component } from "@oh-my-pi/pi-tui";
2
2
  import type { RenderResultOptions } from "../extensibility/custom-tools/types.js";
3
3
  import type { Theme } from "../modes/theme/theme.js";
4
4
  interface ComputerRenderArgs {
5
- actions?: Array<{
6
- type?: unknown;
7
- }>;
5
+ code?: unknown;
6
+ read_only?: unknown;
7
+ window?: unknown;
8
+ actions?: unknown;
8
9
  }
9
10
  interface ComputerRenderResult {
10
- content: Array<{
11
+ content?: Array<{
11
12
  type: string;
12
13
  text?: string;
13
14
  }>;
14
15
  details?: unknown;
15
16
  isError?: boolean;
16
17
  }
18
+ /** Renders computer scripts, run state, screenshots, and failures in the TUI. */
17
19
  export declare const computerToolRenderer: {
18
20
  mergeCallAndResult: boolean;
19
- renderCall(args: ComputerRenderArgs, _options: RenderResultOptions, theme: Theme): Component;
21
+ renderCall(args: ComputerRenderArgs, options: RenderResultOptions, theme: Theme): Component;
20
22
  renderResult(result: ComputerRenderResult, options: RenderResultOptions, theme: Theme, args?: ComputerRenderArgs): Component;
21
23
  };
22
24
  export {};
@@ -1,66 +1,47 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback, ToolApprovalDecision } from "@oh-my-pi/pi-agent-core";
2
- import type { ComputerAction } from "@oh-my-pi/pi-ai";
3
- import type { DesktopCapabilities, DesktopCapture, DesktopDisplay, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
2
+ import type { DesktopCapabilities } from "@oh-my-pi/pi-natives";
4
3
  import { type Type } from "arktype";
4
+ import type { ComputerScreenshot } from "./computer/protocol.js";
5
5
  import { type ComputerController } from "./computer/supervisor.js";
6
6
  import type { ToolSession } from "./index.js";
7
- type ComputerSchemaPoint = {
8
- x: number;
9
- y: number;
10
- };
11
- type ComputerSchemaAction = {
12
- type: ComputerAction["type"];
13
- x?: number;
14
- y?: number;
15
- button?: "left" | "right" | "wheel" | "back" | "forward";
16
- path?: ComputerSchemaPoint[];
17
- keys?: string[] | null;
18
- scroll_x?: number;
19
- scroll_y?: number;
20
- text?: string;
21
- };
22
- export type ComputerParams = {
23
- actions?: ComputerSchemaAction[];
24
- };
25
- type IsSameType<Left, Right> = [Left] extends [Right] ? ([Right] extends [Left] ? true : false) : false;
26
- type ComputerSchema<Schema extends Type = Type<ComputerParams>> = IsSameType<ComputerParams, Schema["infer"]> extends true ? Schema : never;
7
+ interface ComputerToolInput {
8
+ code: string;
9
+ read_only?: boolean;
10
+ timeout?: number;
11
+ }
12
+ type ComputerSchema = Type<ComputerToolInput>;
13
+ /** Renderer and artifact metadata produced by a computer tool run. */
27
14
  export interface ComputerToolDetails {
28
- width: number;
29
- height: number;
30
- backend: DesktopCapture["backend"];
31
- displayServer?: string;
32
- capturePermission: string;
33
- inputPermission: string;
34
- displays: DesktopDisplay[];
35
- capabilities?: DesktopCapabilities;
36
- actions: ComputerAction["type"][];
15
+ code?: string;
16
+ readOnly?: boolean;
17
+ screenshots: ComputerScreenshot[];
18
+ returnValue?: string;
19
+ backend?: string;
20
+ capturePermission?: string;
21
+ inputPermission?: string;
22
+ axPermission?: string;
37
23
  }
38
- export type ComputerControllerFactory = (options: DesktopSessionOptions) => ComputerController;
24
+ /** Creates the session-scoped controller used by the computer tool. */
25
+ export type ComputerControllerFactory = (session: ToolSession) => ComputerController;
26
+ /** Maps inspection-only runs to read approval and all other runs to execution approval. */
39
27
  export declare function computerApproval(args: unknown): ToolApprovalDecision;
28
+ /** Executes persistent desktop JavaScript through one lazy worker session. */
40
29
  export declare class ComputerTool implements AgentTool<ComputerSchema, ComputerToolDetails> {
41
30
  #private;
42
31
  readonly session: ToolSession;
43
32
  readonly name = "computer";
44
- readonly native: {
45
- readonly type: "computer";
46
- };
47
33
  readonly label = "Computer";
48
34
  readonly loadMode: "essential";
49
35
  readonly concurrency: "exclusive";
50
- readonly summary = "Capture and control the host desktop through native OS APIs";
51
- get parameters(): ComputerSchema;
36
+ readonly summary = "Control the host desktop with persistent JavaScript and OS accessibility APIs";
52
37
  readonly strict = false;
53
38
  readonly approval: typeof computerApproval;
54
39
  readonly formatApprovalDetails: (args: unknown) => string[];
55
- /**
56
- * Settings snapshot used to create the tool's current controller; refreshed
57
- * when a model switch crosses the coordinate-safe sizing boundary. Surfaced
58
- * by `/computer status`.
59
- */
60
- effectiveConfiguration: Readonly<DesktopSessionOptions>;
61
40
  constructor(session: ToolSession, createController?: ComputerControllerFactory);
41
+ get parameters(): ComputerSchema;
62
42
  get description(): string;
63
- execute(_toolCallId: string, params: ComputerParams, signal?: AbortSignal, _onUpdate?: AgentToolUpdateCallback<ComputerToolDetails>, context?: AgentToolContext): Promise<AgentToolResult<ComputerToolDetails>>;
43
+ execute(_toolCallId: string, params: ComputerToolInput, signal?: AbortSignal, _onUpdate?: AgentToolUpdateCallback<ComputerToolDetails>, _context?: AgentToolContext): Promise<AgentToolResult<ComputerToolDetails>>;
44
+ capabilities(): Promise<DesktopCapabilities | undefined>;
64
45
  close(): Promise<void>;
65
46
  }
66
47
  export {};
@@ -12,6 +12,9 @@ declare module "@oh-my-pi/pi-agent-core" {
12
12
  * wrapper must not re-prompt for the same action (explicit per-tool
13
13
  * policies and overrides still apply). */
14
14
  xdevApproved?: boolean;
15
+ /** Reports the approval tier resolved after an extension rewrites an
16
+ * xd:// device call, so dispatch metadata describes the input that ran. */
17
+ xdevTierResolved?(tier: "read" | "write" | "exec"): void;
15
18
  /** Set only after an interactive prompt approves provider computer safety checks. */
16
19
  providerSafetyApproved?: boolean;
17
20
  }
@@ -11,6 +11,9 @@ export interface DefaultToolRenderInput {
11
11
  result?: {
12
12
  output: string;
13
13
  isError?: boolean;
14
+ /** Synthetic placeholder for a call skipped mid-batch to service steering/peer
15
+ * input — the tool never ran, so it renders neutral (info) rather than as an error. */
16
+ skipped?: boolean;
14
17
  };
15
18
  /** Current expansion and lifecycle state. */
16
19
  options: RenderResultOptions;
@@ -64,7 +64,7 @@ export declare class GlobTool implements AgentTool<typeof findSchema, GlobToolDe
64
64
  readonly approval: "read";
65
65
  readonly loadMode = "essential";
66
66
  readonly label = "Glob";
67
- readonly description: string;
67
+ get description(): string;
68
68
  readonly parameters: import("arktype/internal/variants/object.ts").ObjectType<{
69
69
  path?: string | undefined;
70
70
  hidden?: boolean | undefined;
@@ -78,7 +78,7 @@ export declare class GrepTool implements AgentTool<typeof searchSchema, GrepTool
78
78
  readonly label = "Grep";
79
79
  readonly loadMode = "discoverable";
80
80
  readonly summary = "Grep file contents using ripgrep (fast regex search)";
81
- readonly description: string;
81
+ get description(): string;
82
82
  readonly parameters: import("arktype/internal/variants/object.ts").ObjectType<{
83
83
  pattern: string;
84
84
  path?: string | undefined;
@@ -28,6 +28,8 @@ export declare const PREVIEW_LIMITS: {
28
28
  readonly OUTPUT_COLLAPSED: 3;
29
29
  /** Output preview lines in expanded view */
30
30
  readonly OUTPUT_EXPANDED: 10;
31
+ /** Computer script lines shown in collapsed view */
32
+ readonly COMPUTER_CODE_COLLAPSED: 10;
31
33
  /** Max hunks shown when collapsed (edit tool) */
32
34
  readonly DIFF_COLLAPSED_HUNKS: 8;
33
35
  /** Max diff lines shown when collapsed (edit tool) */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Marks a run-scoped promise as observed without changing its behavior for awaited callers.
3
3
  *
4
- * Browser run teardown aborts can reject promises created for evaluated code after user code
4
+ * Run teardown aborts can reject promises created for evaluated code after user code
5
5
  * has stopped observing them (for example fire-and-forget `wait()`/facade calls). In 16.3.0
6
6
  * those zero-consumer rejections reached the process-level `unhandledRejection` handler and
7
7
  * killed every subagent sharing the process (issues #4499/#4672). Attaching a no-op rejection
@@ -23,19 +23,19 @@ export interface WaitPredicateOptions {
23
23
  /**
24
24
  * Effective `wait(predicate)` deadline for a given cell budget. Always strictly below
25
25
  * the cell budget so the named `wait(predicate) timed out` error wins the race against
26
- * the opaque whole-cell "Browser code execution timed out". `0`/`Infinity` ("disable")
27
- * map to the largest bounded deadline; negative/NaN garbage falls back to the default.
26
+ * the opaque whole-cell execution timeout. `0`/`Infinity` ("disable") map to the largest
27
+ * bounded deadline; negative/NaN garbage falls back to the default.
28
28
  */
29
29
  export declare function resolvePredicateTimeout(cellTimeoutMs: number, explicit?: number): number;
30
30
  /**
31
- * Run-scoped `wait()` helper for evaluated browser code, honoring the owning run's
32
- * cancellation signal.
31
+ * Run-scoped `wait()` helper for evaluated code (browser and computer workers), honoring
32
+ * the owning run's cancellation signal.
33
33
  *
34
34
  * - `wait(ms)` sleeps for `ms` milliseconds.
35
35
  * - `wait(fn, { timeout?, interval? })` polls `fn` (sync or async) until it returns a
36
36
  * truthy value and resolves with that value; throws a named `ToolError` on timeout
37
37
  * instead of stalling into the whole-cell deadline. Predicate errors propagate.
38
38
  */
39
- export declare function waitForBrowserRun(msOrPredicate: number | (() => unknown), signal: AbortSignal, opts?: WaitPredicateOptions): Promise<unknown>;
40
- /** Binds a long-lived browser facade to one evaluated run's abort signal. */
41
- export declare function bindBrowserRunFacade<T extends object>(target: T, signal: AbortSignal): T;
39
+ export declare function waitForRun(msOrPredicate: number | (() => unknown), signal: AbortSignal, opts?: WaitPredicateOptions): Promise<unknown>;
40
+ /** Binds a long-lived scope facade (page/tab/desktop objects) to one evaluated run's abort signal. */
41
+ export declare function bindRunFacade<T extends object>(target: T, signal: AbortSignal): T;
@@ -22,6 +22,11 @@ export declare const TOOL_TIMEOUTS: {
22
22
  readonly min: 1;
23
23
  readonly max: 300;
24
24
  };
25
+ readonly computer: {
26
+ readonly default: 120;
27
+ readonly min: 1;
28
+ readonly max: 300;
29
+ };
25
30
  readonly ssh: {
26
31
  readonly default: 60;
27
32
  readonly min: 1;
@@ -32,6 +32,7 @@ import type { AgentToolContext, AgentToolResult, AgentToolUpdateCallback, ToolLo
32
32
  import { type Component } from "@oh-my-pi/pi-tui";
33
33
  import type { RenderResultOptions } from "../extensibility/custom-tools/types.js";
34
34
  import type { Theme } from "../modes/theme/theme.js";
35
+ import { type ToolTier } from "./approval.js";
35
36
  import type { Tool } from "./index.js";
36
37
  import type { ToolRenderer } from "./renderers.js";
37
38
  /**
@@ -71,6 +72,13 @@ export interface XdevDispatch {
71
72
  mode: "help" | "execute";
72
73
  /** Validated inner args, kept for renderer delegation on result rebuilds. */
73
74
  args?: Record<string, unknown>;
75
+ /**
76
+ * Approval tier of the wrapped tool for {@link args} (`read` = no workspace
77
+ * mutation). Absent for `help` dispatches and calls whose tier could not be
78
+ * resolved. Consumed by the prewalk coordinator to skip read-only device
79
+ * calls when deciding the model hand-off (issue #7312).
80
+ */
81
+ tier?: ToolTier;
74
82
  /** Details object returned by the wrapped tool, when executed. */
75
83
  inner?: unknown;
76
84
  }
@@ -1,4 +1,4 @@
1
- import type { ClipboardImage } from "@oh-my-pi/pi-natives";
1
+ import { type ClipboardImage } from "@oh-my-pi/pi-natives/clipboard";
2
2
  /**
3
3
  * Read file paths from the macOS pasteboard's `public.file-url` representation.
4
4
  *
@@ -28,7 +28,7 @@ export declare function copyToClipboard(text: string): Promise<void>;
28
28
  * because terminal clipboard paths can leave image payloads invisible to the
29
29
  * native bridge.
30
30
  *
31
- * @returns PNG payload or null when no image is available.
31
+ * @returns A supported image payload or null when no image is available.
32
32
  */
33
33
  export declare function readImageFromClipboard(): Promise<ClipboardImage | null>;
34
34
  /**
@@ -82,6 +82,7 @@ export interface KagiSearchOptions {
82
82
  recency?: "day" | "week" | "month" | "year";
83
83
  sessionId?: string;
84
84
  signal?: AbortSignal;
85
+ timeoutMs?: number;
85
86
  fetch?: FetchImpl;
86
87
  }
87
88
  export interface KagiSearchSource {
@@ -10,7 +10,7 @@ import { ModelRegistry } from "../../config/model-registry.js";
10
10
  import type { CustomTool } from "../../extensibility/custom-tools/types.js";
11
11
  import type { ToolSession } from "../../tools/index.js";
12
12
  import { type SearchRenderDetails } from "./render.js";
13
- import type { SearchProviderId } from "./types.js";
13
+ import { type SearchProviderId } from "./types.js";
14
14
  /** Web search tool parameters schema */
15
15
  export declare const webSearchSchema: import("arktype/internal/variants/object.ts").ObjectType<{
16
16
  query: string;
@@ -15,6 +15,7 @@ export interface AnthropicSearchParams {
15
15
  max_tokens?: number;
16
16
  temperature?: number;
17
17
  signal?: AbortSignal;
18
+ timeoutMs?: number;
18
19
  fetch?: FetchImpl;
19
20
  }
20
21
  /**
@@ -46,6 +46,8 @@ export interface SearchParams {
46
46
  recency?: "day" | "week" | "month" | "year";
47
47
  systemPrompt: string;
48
48
  signal?: AbortSignal;
49
+ /** Hard timeout for this provider's search transport, in milliseconds. */
50
+ timeoutMs?: number;
49
51
  fetch?: FetchImpl;
50
52
  maxOutputTokens?: number;
51
53
  numSearchResults?: number;
@@ -15,6 +15,7 @@ export interface BraveSearchParams {
15
15
  recency?: "day" | "week" | "month" | "year";
16
16
  parsedQuery?: StructuredQuery;
17
17
  signal?: AbortSignal;
18
+ timeoutMs?: number;
18
19
  fetch?: FetchImpl;
19
20
  }
20
21
  /** Find BRAVE_API_KEY from environment or .env files. */
@@ -21,6 +21,7 @@ interface BrowserFallbackOptions {
21
21
  export interface BrowserFetchOptions {
22
22
  fetch?: FetchImpl;
23
23
  signal: AbortSignal;
24
+ timeoutMs?: number;
24
25
  randomizeHeaders?: boolean;
25
26
  referer?: string;
26
27
  init?: Omit<RequestInit, "headers" | "signal">;
@@ -4,6 +4,7 @@ import type { SearchParams } from "./base.js";
4
4
  import { SearchProvider } from "./base.js";
5
5
  export interface CodexSearchParams {
6
6
  signal?: AbortSignal;
7
+ timeoutMs?: number;
7
8
  fetch?: FetchImpl;
8
9
  query: string;
9
10
  system_prompt?: string;
@@ -23,6 +23,7 @@ export interface ExaSearchParams {
23
23
  start_published_date?: string;
24
24
  end_published_date?: string;
25
25
  signal?: AbortSignal;
26
+ timeoutMs?: number;
26
27
  fetch?: FetchImpl;
27
28
  /**
28
29
  * Credential source. Resolved before falling back to `EXA_API_KEY` so
@@ -15,6 +15,7 @@ export interface FirecrawlSearchParams {
15
15
  /** Explicit `tbs` (custom date range); takes precedence over `recency`. */
16
16
  tbs?: string;
17
17
  signal?: AbortSignal;
18
+ timeoutMs?: number;
18
19
  fetch?: FetchImpl;
19
20
  }
20
21
  /** Resolve Firecrawl API key through the shared auth storage pipeline. */
@@ -31,6 +31,7 @@ export interface GeminiSearchParams extends GeminiToolParams {
31
31
  /** Sampling temperature (0–1). Lower = more focused/factual. */
32
32
  temperature?: number;
33
33
  signal?: AbortSignal;
34
+ timeoutMs?: number;
34
35
  authStorage: AuthStorage;
35
36
  sessionId?: string;
36
37
  fetch?: FetchImpl;
@@ -17,6 +17,7 @@ export interface JinaSearchParams {
17
17
  /** Single bare host for Jina's `X-Site` in-site search header. */
18
18
  site?: string;
19
19
  signal?: AbortSignal;
20
+ timeoutMs?: number;
20
21
  fetch?: FetchImpl;
21
22
  }
22
23
  /** Find JINA_API_KEY from environment or .env files. */
@@ -18,6 +18,7 @@ export declare function searchKagi(params: {
18
18
  recency?: SearchParams["recency"];
19
19
  parsedQuery?: StructuredQuery;
20
20
  signal?: AbortSignal;
21
+ timeoutMs?: number;
21
22
  authStorage: AuthStorage;
22
23
  sessionId?: string;
23
24
  fetch?: FetchImpl;
@@ -21,6 +21,7 @@ export interface KimiSearchParams {
21
21
  num_results?: number;
22
22
  include_content?: boolean;
23
23
  signal?: AbortSignal;
24
+ timeoutMs?: number;
24
25
  authStorage: AuthStorage;
25
26
  sessionId?: string;
26
27
  fetch?: FetchImpl;
@@ -7,6 +7,7 @@ export declare function searchParallel(params: {
7
7
  query: string;
8
8
  num_results?: number;
9
9
  signal?: AbortSignal;
10
+ timeoutMs?: number;
10
11
  fetch?: FetchImpl;
11
12
  parsedQuery?: StructuredQuery;
12
13
  }, authStorage: AuthStorage, sessionId?: string): Promise<SearchResponse>;
@@ -14,6 +14,7 @@ import type { SearchParams } from "./base.js";
14
14
  import { SearchProvider } from "./base.js";
15
15
  export interface PerplexitySearchParams {
16
16
  signal?: AbortSignal;
17
+ timeoutMs?: number;
17
18
  query: string;
18
19
  system_prompt?: string;
19
20
  /** Pre-parsed view of `query` from the search pipeline; parsed locally when absent. */
@@ -44,6 +44,7 @@ export declare function searchSearXNG(params: {
44
44
  num_results?: number;
45
45
  recency?: "day" | "week" | "month" | "year";
46
46
  signal?: AbortSignal;
47
+ timeoutMs?: number;
47
48
  fetch?: FetchImpl;
48
49
  }): Promise<SearchResponse>;
49
50
  /** Search provider for SearXNG web search. */
@@ -21,6 +21,7 @@ export interface TavilySearchParams {
21
21
  /** `before:` upper bound, ISO `YYYY-MM-DD`, mapped to `end_date`. */
22
22
  end_date?: string;
23
23
  signal?: AbortSignal;
24
+ timeoutMs?: number;
24
25
  fetch?: FetchImpl;
25
26
  }
26
27
  /** Find Tavily API key through AuthStorage's unified refresh pipeline. */
@@ -14,6 +14,7 @@ export interface TinyFishSearchParams {
14
14
  recency?: SearchParams["recency"];
15
15
  page?: number;
16
16
  signal?: AbortSignal;
17
+ timeoutMs?: number;
17
18
  fetch?: FetchImpl;
18
19
  }
19
20
  /** Resolve TinyFish API key through the shared auth storage pipeline. */
@@ -15,16 +15,13 @@ import { SearchProviderError, type SearchProviderId, type SearchSource } from ".
15
15
  */
16
16
  export declare function findCredential(storage: AgentStorage | null | undefined, envKey: string | null | undefined, ...storageProviders: string[]): string | null;
17
17
  /**
18
- * Default hard ceiling for a single web-search round-trip. 60s tolerates
19
- * legitimate slow LLM-mediated responses (anthropic web_search_20250305,
20
- * perplexity, gemini, codex) while still guaranteeing the session unfreezes
21
- * within a minute if Bun's `AbortSignal` fails to propagate on Windows.
22
- *
23
- * Pure search APIs (brave, exa, jina, tavily, searxng, synthetic, zai)
24
- * settle far faster in practice; reusing the same ceiling keeps the wiring
25
- * uniform without compromising correctness.
18
+ * The 60-second default tolerates legitimate slow LLM-mediated responses
19
+ * (Anthropic web_search_20250305, Perplexity, Gemini, Codex) while bounding
20
+ * Windows stalls when Bun's `AbortSignal` fails to propagate. Callers may
21
+ * configure a longer provider deadline, capped at five minutes by the
22
+ * dispatcher; pure search APIs typically settle far faster.
26
23
  */
27
- export declare const SEARCH_HARD_TIMEOUT_MS = 60000;
24
+ export declare const SEARCH_HARD_TIMEOUT_MS: number;
28
25
  /**
29
26
  * Compose a caller-supplied {@link AbortSignal} with a hard timeout so an
30
27
  * outbound `fetch()` is guaranteed to settle within `ms` even when the
@@ -12,6 +12,7 @@ export interface ZaiSearchParams {
12
12
  query: string;
13
13
  num_results?: number;
14
14
  signal?: AbortSignal;
15
+ timeoutMs?: number;
15
16
  fetch?: FetchImpl;
16
17
  authStorage: AuthStorage;
17
18
  sessionId?: string;
@@ -100,6 +100,10 @@ export declare const SEARCH_PROVIDER_OPTIONS: readonly [{
100
100
  readonly label: "Public Web";
101
101
  readonly description: "Queries every credential-free engine in parallel and consolidates deduplicated results";
102
102
  }];
103
+ /** Default hard timeout for each web-search provider transport. */
104
+ export declare const DEFAULT_WEB_SEARCH_TIMEOUT_SECONDS = 60;
105
+ /** Maximum configurable hard timeout for each web-search provider transport. */
106
+ export declare const MAX_WEB_SEARCH_TIMEOUT_SECONDS = 300;
103
107
  /** Supported web search providers (every option except `auto`). */
104
108
  export type SearchProviderId = Exclude<(typeof SEARCH_PROVIDER_OPTIONS)[number]["value"], "auto">;
105
109
  /**