@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
@@ -0,0 +1,225 @@
1
+ import { type Agent, type AgentMessage, type ThinkingLevel } from "@oh-my-pi/pi-agent-core";
2
+ import type { AssistantMessage, CodexCompactionContext, Model, ToolChoice } from "@oh-my-pi/pi-ai";
3
+ import type { ModelRegistry } from "../config/model-registry.js";
4
+ import type { Settings } from "../config/settings.js";
5
+ import type { ConfiguredThinkingLevel } from "../thinking.js";
6
+ import type { AgentSessionEvent } from "./agent-session-events.js";
7
+ import type { InitialRetryFallbackState } from "./agent-session-types.js";
8
+ import { type RetryFallbackSelector } from "./retry-fallback-chains.js";
9
+ import type { SessionManager } from "./session-manager.js";
10
+ /** Result shape shared with automatic maintenance recovery. */
11
+ export interface RecoveryCompactionResult {
12
+ deferredHandoff: boolean;
13
+ continuationScheduled: boolean;
14
+ automaticContinuationBlocked?: boolean;
15
+ historyRewritten?: boolean;
16
+ }
17
+ /** Capabilities borrowed from the owning AgentSession. */
18
+ export interface TurnRecoveryHost {
19
+ agent: Agent;
20
+ sessionManager: SessionManager;
21
+ settings: Settings;
22
+ modelRegistry: ModelRegistry;
23
+ configWarnings: string[];
24
+ model(): Model | undefined;
25
+ thinkingLevel(): ThinkingLevel | undefined;
26
+ configuredThinkingLevel(): ConfiguredThinkingLevel | undefined;
27
+ setThinkingLevel(level: ConfiguredThinkingLevel | undefined): void;
28
+ isDisposed(): boolean;
29
+ isStreaming(): boolean;
30
+ isCompacting(): boolean;
31
+ abortInProgress(): boolean;
32
+ streamingEditAbortTriggered(): boolean;
33
+ promptGeneration(): number;
34
+ sessionId(): string;
35
+ emitSessionEvent(event: AgentSessionEvent): Promise<void>;
36
+ scheduleAgentContinue(options: {
37
+ delayMs?: number;
38
+ generation?: number;
39
+ }): void;
40
+ waitForSessionMessagePersistence(message: AssistantMessage): Promise<void>;
41
+ appendSessionMessage(message: AssistantMessage): void;
42
+ sessionMessageAlreadyPersisted(message: AssistantMessage): boolean;
43
+ setModelWithProviderSessionReset(model: Model): void;
44
+ resetCurrentResponsesProviderSession(reason: string): void;
45
+ maybeAutoRedeemCodexReset(): Promise<boolean>;
46
+ runAutoCompaction(reason: "overflow" | "threshold" | "idle" | "incomplete", willRetry: boolean, deferred?: boolean, allowDefer?: boolean, options?: {
47
+ autoContinue?: boolean;
48
+ triggerContextTokens?: number;
49
+ suppressContinuation?: boolean;
50
+ suppressHandoff?: boolean;
51
+ phase?: CodexCompactionContext["phase"];
52
+ terminalTextAnswer?: boolean;
53
+ }): Promise<RecoveryCompactionResult>;
54
+ withBashBranchTransition<T>(operation: () => T): T;
55
+ }
56
+ /** Construction-time retry state restored from model selection. */
57
+ export interface TurnRecoveryOptions {
58
+ initialRetryFallback?: InitialRetryFallbackState;
59
+ }
60
+ /** Owns terminal-stop recovery, automatic retries, and fallback routing. */
61
+ export declare class TurnRecovery {
62
+ #private;
63
+ constructor(host: TurnRecoveryHost, options?: TurnRecoveryOptions);
64
+ /** Current automatic retry attempt. */
65
+ get attempt(): number;
66
+ /** Promise settled when the active retry saga finishes. */
67
+ get retryPromise(): Promise<void> | undefined;
68
+ /** Resolved selector while fallback routing owns the current model. */
69
+ get retryFallbackModel(): string | undefined;
70
+ /** Resets per-prompt recovery counters and terminal-stop acceptance. */
71
+ resetForNewPrompt(): void;
72
+ /** Sets whether one terminal empty stop is accepted for the current prompt. */
73
+ setAcceptTerminalEmptyStop(accept: boolean): void;
74
+ /** Closes a successful retry saga and annotates recovered persisted errors. */
75
+ onAssistantSettledSuccessfully(message: AssistantMessage): Promise<void>;
76
+ /** Closes a failed retry saga when no compaction continuation took ownership. */
77
+ onErrorSettledWithoutRetry(message: AssistantMessage, compaction: RecoveryCompactionResult): Promise<void>;
78
+ /** Persists an otherwise skipped terminal empty error turn. */
79
+ persistTerminalEmptyErrorTurn(message: AssistantMessage): Promise<void>;
80
+ /** Handles empty terminal assistant turns and schedules bounded recovery. */
81
+ handleEmptyAssistantStop(message: AssistantMessage): Promise<boolean>;
82
+ /** Classifies suspicious terminal stops and schedules bounded recovery. */
83
+ handleUnexpectedAssistantStop(message: AssistantMessage): Promise<boolean>;
84
+ /** Removes a persisted failed assistant turn after its persistence slot settles. */
85
+ dropPersistedAssistantTurn(message: AssistantMessage): Promise<void>;
86
+ /** Runs recovery compaction and restores the failed turn when no rewrite occurs. */
87
+ runRecoveryCompactionWithRollback(reason: "overflow" | "incomplete", message: AssistantMessage, allowDefer: boolean, options: {
88
+ autoContinue: boolean;
89
+ triggerContextTokens?: number;
90
+ }): Promise<RecoveryCompactionResult>;
91
+ /** Restores the configured primary after fallback cooldown expiry. */
92
+ maybeRestoreRetryFallbackPrimary(): Promise<void>;
93
+ /** Applies automatic retry, credential rotation, and model fallback policy. */
94
+ handleRetryableError(message: AssistantMessage, options?: {
95
+ allowModelFallback?: boolean;
96
+ fireworksFastFallback?: boolean;
97
+ hardErrorFallback?: boolean;
98
+ preserveFailedTurn?: boolean;
99
+ }): Promise<boolean>;
100
+ /** Prompts after transient overlap with a prior agent run. */
101
+ promptAgentWithIdleRetry(messages: AgentMessage[], options?: {
102
+ toolChoice?: ToolChoice;
103
+ }): Promise<void>;
104
+ /** Parses provider retry and rate-limit reset hints into a delay. */
105
+ parseRetryAfterMsFromError(errorMessage: string): number | undefined;
106
+ /** Resolve the pending retry promise */
107
+ resolveRetry(): void;
108
+ removeAssistantMessageFromActiveContext(assistantMessage: AssistantMessage, reason?: string): void;
109
+ /**
110
+ * Drop an assistant turn from BOTH the live agent context and the persisted
111
+ * session branch (reparenting the leaf to the turn's parent), so a discarded
112
+ * turn does not resurface on reload. Used for empty/reasoning-only stops and
113
+ * the Gemini header-runaway interrupt, which must not replay a partial,
114
+ * loop-fueling thinking block.
115
+ */
116
+ discardAssistantTurn(assistantMessage: AssistantMessage): void;
117
+ /**
118
+ * Retry an empty, reason-less provider abort: a turn with no content that
119
+ * carries the generic sentinel (bare `abort()`), whether the provider
120
+ * finalized it as `stopReason: "aborted"` or leaked it as `stopReason:
121
+ * "error"` (a stalled/dropped stream reported as an error rather than an
122
+ * abort — issue #5375). Only fires while the session is neither aborting nor
123
+ * tearing down. A user/lifecycle abort (`#abortInProgress`), a dispose-driven
124
+ * abort (`#isDisposed`), or a session-induced streaming-edit guard abort
125
+ * (`StreamingEditGuard.abortTriggered` — auto-generated-file guard or failed-patch
126
+ * preview) is deliberate and MUST settle the turn instead: routing it through
127
+ * retry would orphan `#retryPromise` on a continuation the guard skips
128
+ * (hanging the in-flight `prompt()`) or silently undo the guard's intended
129
+ * abort. Deliberate user interrupts (`UserInterrupt`) and silent aborts carry
130
+ * their own marker, not the generic sentinel, so they never match here.
131
+ */
132
+ isRetryableReasonlessAbort(message: AssistantMessage): boolean;
133
+ /**
134
+ * Check if an error is retryable (transient errors or usage limits).
135
+ * Context overflow is NOT retryable (handled by compaction instead).
136
+ * Usage-limit errors are retryable because the retry handler performs credential switching.
137
+ */
138
+ isRetryableError(message: AssistantMessage): boolean;
139
+ /**
140
+ * Resume a stalled turn after every emitted tool call has produced a result.
141
+ * Cursor calls must also carry the server-execution marker. The failed
142
+ * assistant/tool-result pair stays in context so completed side effects are
143
+ * continued from rather than replayed.
144
+ */
145
+ canResumeResolvedStreamStall(message: AssistantMessage): boolean;
146
+ /** Checks whether a provider error represents a classifier refusal. */
147
+ isClassifierRefusal(message: AssistantMessage): boolean;
148
+ /** Clears fallback ownership after an explicit model change. */
149
+ clearActiveRetryFallback(): void;
150
+ /** Checks whether a fallback selector remains in cooldown. */
151
+ isRetryFallbackSelectorSuppressed(selector: RetryFallbackSelector): boolean;
152
+ /** Records the cooldown that should suppress a failing selector. */
153
+ noteRetryFallbackCooldown(currentSelector: string, retryAfterMs: number | undefined, errorMessage: string): void;
154
+ /**
155
+ * Map the failing model selector to the chain key that owns it, by
156
+ * specificity: an exact model-selector key, then a `provider/*` wildcard,
157
+ * then a model role whose current assignment matches, then `default`.
158
+ * Model-oriented keys win over roles so a chain follows the model across
159
+ * role reassignments.
160
+ */
161
+ resolveRetryFallbackRole(currentSelector: string, currentModel?: Model | null | undefined): string | undefined;
162
+ /** Finds fallback candidates that follow the active selector. */
163
+ findRetryFallbackCandidates(role: string, currentSelector: string, currentModel?: Model | null | undefined): RetryFallbackSelector[];
164
+ applyRetryFallbackCandidate(role: string, selector: RetryFallbackSelector, currentSelector: string, options?: {
165
+ pinFallback?: boolean;
166
+ apiKey?: string;
167
+ signal?: AbortSignal;
168
+ }): Promise<void>;
169
+ /**
170
+ * True when the current turn failed on a Fireworks Fast (`-fast`) model in a
171
+ * way that should degrade to the reliable base (Standard) model. Fast is a
172
+ * speed-optimized router with no SLA, so any *pre-content* failure — a
173
+ * transient overload/5xx or a hard "router/model not found / unsupported" —
174
+ * is worth retrying on the base id. Skips failures the base model shares:
175
+ * context overflow (compaction's job), usage limits and auth errors (same
176
+ * account/key), and turns that already emitted a tool call (replaying would
177
+ * duplicate work). Requires the base model to exist in the registry.
178
+ */
179
+ isFireworksFastFallbackEligible(message: AssistantMessage): boolean;
180
+ /**
181
+ * True when a turn failed with a hard (non-retryable) provider error but a
182
+ * configured `retry.fallbackChains` entry covers the active model: the same
183
+ * model is not worth retrying, yet a DIFFERENT model is a fresh chance, so
184
+ * the chain is consulted before the error becomes final. Skips failures a
185
+ * model switch cannot fix or must not replay: cancellations (abort-flavored
186
+ * errors are not model faults), context overflow (compaction's job),
187
+ * classifier refusals (chain consult is handled on the retryable path with
188
+ * `pinFallback`), and turns that already emitted a tool call (replaying
189
+ * could duplicate work).
190
+ */
191
+ isHardErrorFallbackEligible(message: AssistantMessage): boolean;
192
+ /**
193
+ * Cancel in-progress retry.
194
+ */
195
+ abortRetry(): void;
196
+ /** Whether auto-retry is currently in progress */
197
+ get isRetrying(): boolean;
198
+ /** Whether auto-retry is enabled */
199
+ get autoRetryEnabled(): boolean;
200
+ /**
201
+ * Toggle auto-retry setting.
202
+ */
203
+ setAutoRetryEnabled(enabled: boolean): void;
204
+ /**
205
+ * Manually retry the last failed assistant turn.
206
+ * Removes the error message from active agent state when present and
207
+ * re-attempts with a fresh retry budget.
208
+ *
209
+ * A stream that stalls or aborts mid-tool-call ends the turn with
210
+ * `stopReason: "error" | "aborted"` and then appends one synthetic
211
+ * {@link isSyntheticToolResultMessage tool_result} per emitted tool call to
212
+ * preserve the provider's tool_use/tool_result pairing (see
213
+ * `createAbortedToolResult` in `agent-loop.ts`). Those placeholders trail the
214
+ * failed assistant turn, so the retry lookback walks back over them before
215
+ * checking the assistant message; it strips both the placeholders and the
216
+ * failed turn before re-attempting.
217
+ *
218
+ * A restored session deliberately omits failed assistant turns from provider
219
+ * context. In that case, the persisted display transcript remains the source
220
+ * of truth for whether the current branch has a retryable failed tail.
221
+ *
222
+ * @returns true if retry was initiated, false if no failed turn to retry or agent is busy
223
+ */
224
+ retry(): Promise<boolean>;
225
+ }
@@ -0,0 +1,9 @@
1
+ import type { OAuthAccountSummary } from "../../session/auth-storage.js";
2
+ /** Stored OAuth account rendered and matched by `/session pin`. */
3
+ export interface SessionPinAccount extends OAuthAccountSummary {
4
+ label: string;
5
+ }
6
+ /** Add stable user-facing labels to provider account summaries. */
7
+ export declare function toSessionPinAccounts(accounts: readonly OAuthAccountSummary[]): SessionPinAccount[];
8
+ /** Match a `/session pin` selector by 1-based position or exact account identity. */
9
+ export declare function matchSessionPinAccounts(accounts: readonly SessionPinAccount[], selector: string): SessionPinAccount[];
@@ -4,5 +4,3 @@ export * from "./downloader.js";
4
4
  export * from "./models.js";
5
5
  export * from "./stt-controller.js";
6
6
  export * from "./submit-trigger.js";
7
- export * from "./transcriber.js";
8
- export * from "./wav.js";
@@ -15,8 +15,15 @@ interface Editor {
15
15
  submit(): void;
16
16
  deleteBeforeCursor(count: number): void;
17
17
  }
18
+ interface CaptureHandle {
19
+ stop(): void;
20
+ }
21
+ type CaptureFactory = (onAudio: (error: Error | null, samples: Float32Array) => void) => CaptureHandle;
22
+ /** Coordinates native microphone capture with incremental local transcription. */
18
23
  export declare class STTController {
19
24
  #private;
25
+ /** Creates a controller; tests may replace the hardware capture boundary. */
26
+ constructor(createCapture?: CaptureFactory);
20
27
  get state(): SttState;
21
28
  toggle(editor: Editor, options: ToggleOptions): Promise<void>;
22
29
  dispose(): void;
@@ -72,6 +72,8 @@ export interface BuildSystemPromptOptions {
72
72
  skillsSettings?: SkillsSettings;
73
73
  /** Working directory. Default: getProjectDir() */
74
74
  cwd?: string;
75
+ /** Additional workspace directories beyond cwd (multi-root), absolute. Injected into the project prompt. */
76
+ additionalWorkspaceRoots?: string[];
75
77
  /** Pre-loaded context files (skips discovery if provided). */
76
78
  contextFiles?: Array<{
77
79
  path: string;
@@ -17,6 +17,7 @@ import type { HindsightSessionState } from "../hindsight/state.js";
17
17
  import type { LocalProtocolOptions } from "../internal-urls/index.js";
18
18
  import type { MCPManager } from "../mcp/manager.js";
19
19
  import type { MnemopiSessionState } from "../mnemopi/state.js";
20
+ import { type AgentReviver } from "../registry/agent-lifecycle.js";
20
21
  import type { AgentSession } from "../session/agent-session.js";
21
22
  import type { ArtifactManager } from "../session/artifacts.js";
22
23
  import type { AuthStorage } from "../session/auth-storage.js";
@@ -44,6 +45,8 @@ export declare function buildBudgetNotice(requests: number, budget: number): str
44
45
  /** Options for subagent execution */
45
46
  export interface ExecutorOptions {
46
47
  cwd: string;
48
+ /** Additional workspace directories to seed on the subagent session (multi-root). */
49
+ additionalDirectories?: string[];
47
50
  worktree?: string;
48
51
  agent: AgentDefinition;
49
52
  task: string;
@@ -249,7 +252,7 @@ export declare function finalizeSubagentLifecycle(args: {
249
252
  keepAlive: boolean;
250
253
  isolated: boolean;
251
254
  agentIdleTtlMs: number;
252
- reviveSession: (() => Promise<AgentSession>) | null;
255
+ reviveSession: AgentReviver | null;
253
256
  }): Promise<void>;
254
257
  /** Options for {@link runSubagentFollowUpTurn}. */
255
258
  export interface FollowUpTurnOptions {
@@ -3,13 +3,15 @@
3
3
  *
4
4
  * The first allocation of a given name keeps the name as-is; subsequent
5
5
  * allocations of the same name get a `-2`, `-3`, … suffix. On resume, scans
6
- * existing output files so previously written outputs are never overwritten.
6
+ * existing output and child-session files so prior state is never overwritten.
7
7
  */
8
8
  export declare class AgentOutputManager {
9
9
  #private;
10
10
  constructor(getArtifactsDir: () => string | null, options?: {
11
11
  parentPrefix?: string;
12
12
  });
13
+ /** Reserve final IDs discovered outside the output directory scan. */
14
+ reserve(ids: Iterable<string>): Promise<void>;
13
15
  /**
14
16
  * Allocate a unique ID.
15
17
  *
@@ -50,6 +50,16 @@ export declare class TinyTitleClient {
50
50
  #private;
51
51
  constructor(spawnWorker?: () => RefCountedWorkerHandle<TinyTitleWorkerInbound, TinyTitleWorkerOutbound>);
52
52
  onProgress(listener: (event: TinyTitleProgressEvent) => void): () => void;
53
+ /**
54
+ * Spawn the tiny-model worker ahead of first use without loading any model.
55
+ * Called from idle TUI startup so the first {@link generate} reuses a live,
56
+ * unref'd subprocess instead of paying subprocess-spawn latency on the submit
57
+ * hot path (issue #6462). No-ops for online / non-local keys and for models
58
+ * already marked failed. A no-op `ping` round-trips the transport to fault in
59
+ * the worker's module graph; no pending request is registered, so
60
+ * {@link #syncWorkerRef} leaves the worker unref'd and idle sessions still exit.
61
+ */
62
+ prewarm(modelKey: string): void;
53
63
  generate(modelKey: string, message: string, signal?: AbortSignal): Promise<string | null>;
54
64
  generate(modelKey: string, message: string, options?: TinyTitleGenerateOptions): Promise<string | null>;
55
65
  complete(modelKey: string, prompt: string, options?: {
@@ -16,6 +16,7 @@ export interface ResolvedApproval {
16
16
  tier: ToolTier;
17
17
  reason?: string;
18
18
  override: boolean;
19
+ source?: "tool" | "user" | "mode";
19
20
  }
20
21
  /**
21
22
  * Evaluate a tool's own approval declaration against `args` and return the
@@ -14,6 +14,7 @@ export declare const BROWSER_PROTOCOL_TIMEOUT_MS = 60000;
14
14
  export declare function loadPuppeteer(): Promise<typeof Puppeteer>;
15
15
  export declare function loadPuppeteerInWorker(safeDir: string): Promise<typeof Puppeteer>;
16
16
  export declare function ensureChromiumExecutable(): Promise<string | undefined>;
17
+ /** Options shared by headless Chromium consumers. */
17
18
  export interface LaunchHeadlessOptions {
18
19
  headless: boolean;
19
20
  viewport?: {
@@ -21,6 +22,10 @@ export interface LaunchHeadlessOptions {
21
22
  height: number;
22
23
  deviceScaleFactor?: number;
23
24
  };
25
+ /** Additional Chromium arguments merged with the centralized launch defaults. */
26
+ args?: readonly string[];
27
+ /** Additional exact Puppeteer default arguments to suppress. */
28
+ ignoreDefaultArgs?: readonly string[];
24
29
  }
25
30
  export declare function launchHeadlessBrowser(opts: LaunchHeadlessOptions): Promise<Browser>;
26
31
  export declare function applyViewport(page: Page, viewport?: {
@@ -1,4 +1,4 @@
1
- export declare const BUILTIN_TOOL_NAMES: readonly ["read", "bash", "edit", "ast_grep", "ast_edit", "ask", "debug", "eval", "github", "glob", "grep", "lsp", "inspect_image", "browser", "checkpoint", "rewind", "task", "hub", "todo", "web_search", "write", "memory_edit", "retain", "recall", "reflect", "learn", "manage_skill"];
1
+ export declare const BUILTIN_TOOL_NAMES: readonly ["read", "bash", "edit", "ast_grep", "ast_edit", "ask", "debug", "eval", "github", "glob", "grep", "lsp", "inspect_image", "browser", "computer", "checkpoint", "rewind", "task", "hub", "todo", "web_search", "write", "memory_edit", "retain", "recall", "reflect", "learn", "manage_skill"];
2
2
  export type BuiltinToolName = (typeof BUILTIN_TOOL_NAMES)[number];
3
3
  /** Hidden built-ins: constructible and `--tools`-addressable, but never part of the default active set. */
4
4
  export declare const HIDDEN_TOOL_NAMES: readonly ["yield", "goal"];
@@ -0,0 +1,43 @@
1
+ import type { DesktopAction, DesktopCapabilities, DesktopCapture, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
2
+ export declare const COMPUTER_WORKER_ARG = "__omp_worker_computer";
3
+ export type ComputerWorkerInbound = {
4
+ type: "ping";
5
+ id: string;
6
+ } | {
7
+ type: "init";
8
+ options: DesktopSessionOptions;
9
+ } | {
10
+ type: "execute";
11
+ id: string;
12
+ actions: DesktopAction[];
13
+ } | {
14
+ type: "close";
15
+ };
16
+ export type ComputerWorkerOutbound = {
17
+ type: "pong";
18
+ id: string;
19
+ } | {
20
+ type: "ready";
21
+ capabilities: DesktopCapabilities;
22
+ } | {
23
+ type: "result";
24
+ id: string;
25
+ capture: DesktopCapture;
26
+ capabilities: DesktopCapabilities;
27
+ } | {
28
+ type: "error";
29
+ id?: string;
30
+ error: ComputerWorkerError;
31
+ } | {
32
+ type: "closed";
33
+ };
34
+ export interface ComputerWorkerError {
35
+ name: string;
36
+ message: string;
37
+ stack?: string;
38
+ }
39
+ export interface ComputerWorkerTransport {
40
+ send(message: ComputerWorkerOutbound, transfer?: Bun.Transferable[]): void;
41
+ onMessage(handler: (message: ComputerWorkerInbound) => void): () => void;
42
+ close(): void;
43
+ }
@@ -0,0 +1,32 @@
1
+ import type { DesktopAction, DesktopCapabilities, DesktopCapture, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
2
+ import { type ComputerWorkerInbound, type ComputerWorkerOutbound } from "./protocol.js";
3
+ export interface ComputerController {
4
+ readonly capabilities: DesktopCapabilities | undefined;
5
+ execute(actions: DesktopAction[], signal?: AbortSignal): Promise<DesktopCapture>;
6
+ close(): Promise<void>;
7
+ }
8
+ export interface ComputerWorkerHandle {
9
+ send(message: ComputerWorkerInbound): void;
10
+ onMessage(handler: (message: ComputerWorkerOutbound) => void): () => void;
11
+ onError(handler: (error: Error) => void): () => void;
12
+ terminate(): Promise<void>;
13
+ }
14
+ export interface ComputerSupervisorTimeouts {
15
+ startMs: number;
16
+ closeMs: number;
17
+ }
18
+ export type ComputerWorkerFactory = () => ComputerWorkerHandle;
19
+ export declare function spawnComputerWorker(): ComputerWorkerHandle;
20
+ export declare class ComputerSupervisor implements ComputerController {
21
+ #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>;
28
+ close(): Promise<void>;
29
+ }
30
+ export declare function registerComputerController(ownerId: string | undefined, controller: ComputerController): () => void;
31
+ export declare function releaseComputerSessionsForOwner(ownerId: string | undefined): Promise<void>;
32
+ export declare function smokeTestComputerWorker(timeoutMs?: number): Promise<void>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { type DesktopAction, type DesktopCapture, DesktopSession, type DesktopSessionOptions } from "@oh-my-pi/pi-natives";
2
+ import type { ComputerWorkerTransport } from "./protocol.js";
3
+ export interface NativeDesktopSession {
4
+ readonly capabilities: DesktopSession["capabilities"];
5
+ capture(): Promise<DesktopCapture>;
6
+ execute(actions: DesktopAction[]): Promise<DesktopCapture>;
7
+ close(): Promise<void>;
8
+ }
9
+ export type NativeDesktopSessionFactory = (options: DesktopSessionOptions) => NativeDesktopSession;
10
+ export declare class ComputerWorkerCore {
11
+ #private;
12
+ private readonly transport;
13
+ private readonly createSession;
14
+ constructor(transport: ComputerWorkerTransport, createSession?: NativeDesktopSessionFactory);
15
+ }
@@ -0,0 +1,22 @@
1
+ import type { Component } from "@oh-my-pi/pi-tui";
2
+ import type { RenderResultOptions } from "../extensibility/custom-tools/types.js";
3
+ import type { Theme } from "../modes/theme/theme.js";
4
+ interface ComputerRenderArgs {
5
+ actions?: Array<{
6
+ type?: unknown;
7
+ }>;
8
+ }
9
+ interface ComputerRenderResult {
10
+ content: Array<{
11
+ type: string;
12
+ text?: string;
13
+ }>;
14
+ details?: unknown;
15
+ isError?: boolean;
16
+ }
17
+ export declare const computerToolRenderer: {
18
+ mergeCallAndResult: boolean;
19
+ renderCall(args: ComputerRenderArgs, _options: RenderResultOptions, theme: Theme): Component;
20
+ renderResult(result: ComputerRenderResult, options: RenderResultOptions, theme: Theme, args?: ComputerRenderArgs): Component;
21
+ };
22
+ export {};
@@ -0,0 +1,71 @@
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";
4
+ import { type ComputerController } from "./computer/supervisor.js";
5
+ import type { ToolSession } from "./index.js";
6
+ declare const computerSchema: import("arktype/internal/variants/object.ts").ObjectType<{
7
+ actions?: {
8
+ type: "click" | "double_click" | "drag" | "keypress" | "move" | "screenshot" | "scroll" | "type" | "wait";
9
+ x?: number | undefined;
10
+ y?: number | undefined;
11
+ button?: "back" | "forward" | "left" | "right" | "wheel" | undefined;
12
+ path?: {
13
+ x: number;
14
+ y: number;
15
+ }[] | undefined;
16
+ keys?: string[] | null | undefined;
17
+ scroll_x?: number | undefined;
18
+ scroll_y?: number | undefined;
19
+ text?: string | undefined;
20
+ }[] | undefined;
21
+ }, {}>;
22
+ export type ComputerParams = typeof computerSchema.infer;
23
+ export interface ComputerToolDetails {
24
+ width: number;
25
+ height: number;
26
+ backend: DesktopCapture["backend"];
27
+ displayServer?: string;
28
+ capturePermission: string;
29
+ inputPermission: string;
30
+ displays: DesktopDisplay[];
31
+ capabilities?: DesktopCapabilities;
32
+ actions: ComputerAction["type"][];
33
+ }
34
+ export type ComputerControllerFactory = (options: DesktopSessionOptions) => ComputerController;
35
+ export declare function computerApproval(args: unknown): ToolApprovalDecision;
36
+ export declare class ComputerTool implements AgentTool<typeof computerSchema, ComputerToolDetails> {
37
+ #private;
38
+ readonly session: ToolSession;
39
+ readonly name = "computer";
40
+ readonly native: {
41
+ readonly type: "computer";
42
+ };
43
+ readonly label = "Computer";
44
+ readonly loadMode: "essential";
45
+ readonly concurrency: "exclusive";
46
+ readonly summary = "Capture and control the host desktop through native OS APIs";
47
+ readonly parameters: import("arktype/internal/variants/object.ts").ObjectType<{
48
+ actions?: {
49
+ type: "click" | "double_click" | "drag" | "keypress" | "move" | "screenshot" | "scroll" | "type" | "wait";
50
+ x?: number | undefined;
51
+ y?: number | undefined;
52
+ button?: "back" | "forward" | "left" | "right" | "wheel" | undefined;
53
+ path?: {
54
+ x: number;
55
+ y: number;
56
+ }[] | undefined;
57
+ keys?: string[] | null | undefined;
58
+ scroll_x?: number | undefined;
59
+ scroll_y?: number | undefined;
60
+ text?: string | undefined;
61
+ }[] | undefined;
62
+ }, {}>;
63
+ readonly strict = false;
64
+ readonly approval: typeof computerApproval;
65
+ readonly formatApprovalDetails: (args: unknown) => string[];
66
+ constructor(session: ToolSession, createController?: ComputerControllerFactory);
67
+ get description(): string;
68
+ execute(_toolCallId: string, params: ComputerParams, signal?: AbortSignal, _onUpdate?: AgentToolUpdateCallback<ComputerToolDetails>, context?: AgentToolContext): Promise<AgentToolResult<ComputerToolDetails>>;
69
+ close(): Promise<void>;
70
+ }
71
+ export {};
@@ -12,6 +12,8 @@ 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
+ /** Set only after an interactive prompt approves provider computer safety checks. */
16
+ providerSafetyApproved?: boolean;
15
17
  }
16
18
  }
17
19
  export declare class ToolContextStore {
@@ -0,0 +1,21 @@
1
+ import type { Component } from "@oh-my-pi/pi-tui";
2
+ import type { RenderResultOptions } from "../extensibility/custom-tools/types.js";
3
+ import type { Theme } from "../modes/theme/theme.js";
4
+ /** Inputs rendered by the fallback card used when a tool has no bespoke renderer. */
5
+ export interface DefaultToolRenderInput {
6
+ /** Human-readable tool label. */
7
+ label: string;
8
+ /** Tool arguments, shown inline when collapsed and as a tree when expanded. */
9
+ args: unknown;
10
+ /** Settled or streaming result; omitted while only the call is available. */
11
+ result?: {
12
+ output: string;
13
+ isError?: boolean;
14
+ };
15
+ /** Current expansion and lifecycle state. */
16
+ options: RenderResultOptions;
17
+ }
18
+ /** Format one generic tool call/result card at the available content width. */
19
+ export declare function formatDefaultToolExecution(input: DefaultToolRenderInput, contentWidth: number, uiTheme: Theme): string;
20
+ /** Render the generic fallback as the state-tinted card used by direct custom tools. */
21
+ export declare function renderDefaultToolExecution(input: DefaultToolRenderInput, uiTheme: Theme): Component;
@@ -1,7 +1,8 @@
1
1
  import { type Model } from "@oh-my-pi/pi-ai";
2
2
  import { type ModelRegistry } from "../config/model-registry.js";
3
3
  import type { CustomTool } from "../extensibility/custom-tools/types.js";
4
- export type ImageProvider = "antigravity" | "gemini" | "openai" | "openai-codex" | "openrouter" | "xai";
4
+ import { type ImageProvider } from "./image-providers.js";
5
+ export type { ImageProvider } from "./image-providers.js";
5
6
  export type ImageProviderPreference = ImageProvider | "auto";
6
7
  declare const responseModalitySchema: import("arktype/internal/variants/string.ts").StringType<"IMAGE" | "TEXT", {}>;
7
8
  export declare const imageGenSchema: import("arktype/internal/variants/object.ts").ObjectType<{
@@ -59,9 +60,8 @@ interface InlineImageData {
59
60
  mimeType: string;
60
61
  }
61
62
  export declare function isImageProviderPreference(value: unknown): value is ImageProviderPreference;
62
- /** Set the preferred image provider from settings */
63
- export declare function setPreferredImageProvider(provider: ImageProviderPreference): void;
63
+ /** Set the configured image-provider priority from settings; invalid IDs are dropped. */
64
+ export declare function setImageProviderOrder(providers: readonly string[]): void;
64
65
  export declare const imageGenTool: CustomTool<typeof imageGenSchema, ImageGenToolDetails>;
65
66
  export declare function getImageGenTools(_modelRegistry?: ModelRegistry, _activeModel?: Model): Promise<Array<CustomTool<typeof imageGenSchema, ImageGenToolDetails>>>;
66
67
  export declare function getImageGenToolsWithRegistry(_modelRegistry: ModelRegistry, _activeModel?: Model): Promise<Array<CustomTool<typeof imageGenSchema, ImageGenToolDetails>>>;
67
- export {};