@oh-my-pi/pi-coding-agent 15.12.3 → 15.13.0

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 (457) hide show
  1. package/CHANGELOG.md +347 -7
  2. package/dist/cli.js +1615 -1231
  3. package/dist/types/async/job-manager.d.ts +15 -0
  4. package/dist/types/autolearn/controller.d.ts +25 -0
  5. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  6. package/dist/types/autoresearch/state.d.ts +1 -1
  7. package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
  8. package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
  9. package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
  10. package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
  11. package/dist/types/autoresearch/types.d.ts +1 -1
  12. package/dist/types/cli/args.d.ts +19 -2
  13. package/dist/types/cli/models-cli.d.ts +49 -0
  14. package/dist/types/cli/session-picker.d.ts +1 -1
  15. package/dist/types/cli/setup-cli.d.ts +1 -1
  16. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  17. package/dist/types/collab/protocol.d.ts +1 -1
  18. package/dist/types/commands/launch.d.ts +0 -3
  19. package/dist/types/commands/models.d.ts +33 -0
  20. package/dist/types/commands/say.d.ts +24 -0
  21. package/dist/types/commands/token.d.ts +25 -0
  22. package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
  23. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
  24. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  25. package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
  26. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
  27. package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
  28. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  29. package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
  30. package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
  31. package/dist/types/commit/changelog/generate.d.ts +1 -1
  32. package/dist/types/commit/shared-llm.d.ts +1 -1
  33. package/dist/types/config/keybindings.d.ts +3 -3
  34. package/dist/types/config/model-registry.d.ts +17 -0
  35. package/dist/types/config/models-config-schema.d.ts +13 -1
  36. package/dist/types/config/models-config.d.ts +8 -2
  37. package/dist/types/config/settings-schema.d.ts +281 -58
  38. package/dist/types/edit/hashline/params.d.ts +1 -1
  39. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  40. package/dist/types/edit/modes/patch.d.ts +1 -1
  41. package/dist/types/edit/modes/replace.d.ts +1 -1
  42. package/dist/types/export/html/index.d.ts +2 -1
  43. package/dist/types/extensibility/custom-commands/types.d.ts +2 -2
  44. package/dist/types/extensibility/custom-tools/types.d.ts +2 -2
  45. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  46. package/dist/types/extensibility/extensions/runner.d.ts +3 -1
  47. package/dist/types/extensibility/extensions/types.d.ts +49 -3
  48. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  49. package/dist/types/extensibility/hooks/types.d.ts +2 -2
  50. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +9 -0
  51. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  52. package/dist/types/extensibility/shared-events.d.ts +1 -1
  53. package/dist/types/extensibility/skills.d.ts +10 -0
  54. package/dist/types/goals/guided-setup.d.ts +18 -0
  55. package/dist/types/goals/state.d.ts +1 -1
  56. package/dist/types/goals/tools/goal-tool.d.ts +1 -1
  57. package/dist/types/hindsight/transcript.d.ts +1 -1
  58. package/dist/types/index.d.ts +5 -0
  59. package/dist/types/internal-urls/local-protocol.d.ts +4 -2
  60. package/dist/types/lsp/types.d.ts +1 -1
  61. package/dist/types/main.d.ts +4 -3
  62. package/dist/types/mcp/manager.d.ts +8 -0
  63. package/dist/types/mcp/startup-events.d.ts +11 -0
  64. package/dist/types/memories/index.d.ts +7 -0
  65. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  66. package/dist/types/mnemopi/config.d.ts +28 -0
  67. package/dist/types/modes/acp/acp-agent.d.ts +1 -2
  68. package/dist/types/modes/components/agent-hub.d.ts +6 -0
  69. package/dist/types/modes/components/assistant-message.d.ts +1 -2
  70. package/dist/types/modes/components/compaction-summary-message.d.ts +15 -1
  71. package/dist/types/modes/components/custom-editor.d.ts +39 -1
  72. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  73. package/dist/types/modes/components/index.d.ts +1 -0
  74. package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
  75. package/dist/types/modes/components/session-selector.d.ts +1 -1
  76. package/dist/types/modes/components/status-line/component.d.ts +9 -5
  77. package/dist/types/modes/components/status-line/types.d.ts +2 -1
  78. package/dist/types/modes/components/tool-execution.d.ts +26 -16
  79. package/dist/types/modes/components/transcript-container.d.ts +23 -2
  80. package/dist/types/modes/components/tree-selector.d.ts +1 -1
  81. package/dist/types/modes/components/usage-row.d.ts +3 -0
  82. package/dist/types/modes/controllers/command-controller.d.ts +2 -2
  83. package/dist/types/modes/controllers/event-controller.d.ts +0 -17
  84. package/dist/types/modes/controllers/input-controller.d.ts +14 -0
  85. package/dist/types/modes/controllers/selector-controller.d.ts +3 -1
  86. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  87. package/dist/types/modes/image-references.d.ts +6 -0
  88. package/dist/types/modes/interactive-mode.d.ts +27 -6
  89. package/dist/types/modes/magic-keywords.d.ts +13 -1
  90. package/dist/types/modes/rpc/rpc-mode.d.ts +35 -1
  91. package/dist/types/modes/rpc/rpc-types.d.ts +9 -1
  92. package/dist/types/modes/runtime-init.d.ts +4 -0
  93. package/dist/types/modes/theme/theme.d.ts +13 -2
  94. package/dist/types/modes/types.d.ts +8 -7
  95. package/dist/types/modes/utils/ui-helpers.d.ts +1 -1
  96. package/dist/types/registry/agent-registry.d.ts +17 -0
  97. package/dist/types/secrets/obfuscator.d.ts +1 -1
  98. package/dist/types/session/agent-session.d.ts +28 -35
  99. package/dist/types/session/agent-storage.d.ts +2 -1
  100. package/dist/types/session/indexed-session-storage.d.ts +3 -3
  101. package/dist/types/session/messages.d.ts +8 -10
  102. package/dist/types/session/session-context.d.ts +39 -0
  103. package/dist/types/session/session-entries.d.ts +159 -0
  104. package/dist/types/session/session-listing.d.ts +69 -0
  105. package/dist/types/session/session-loader.d.ts +16 -0
  106. package/dist/types/session/session-manager.d.ts +85 -462
  107. package/dist/types/session/session-migrations.d.ts +12 -0
  108. package/dist/types/session/session-paths.d.ts +25 -0
  109. package/dist/types/session/session-persistence.d.ts +8 -0
  110. package/dist/types/session/session-storage.d.ts +11 -7
  111. package/dist/types/session/snapcompact-inline.d.ts +12 -1
  112. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  113. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  114. package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
  115. package/dist/types/stt/asr-client.d.ts +90 -0
  116. package/dist/types/stt/asr-protocol.d.ts +97 -0
  117. package/dist/types/stt/asr-worker.d.ts +2 -0
  118. package/dist/types/stt/downloader.d.ts +38 -0
  119. package/dist/types/stt/endpointer.d.ts +59 -0
  120. package/dist/types/stt/index.d.ts +5 -1
  121. package/dist/types/stt/models.d.ts +120 -0
  122. package/dist/types/stt/recorder.d.ts +17 -0
  123. package/dist/types/stt/stt-controller.d.ts +6 -0
  124. package/dist/types/stt/transcriber.d.ts +5 -7
  125. package/dist/types/stt/wav.d.ts +29 -0
  126. package/dist/types/system-prompt.d.ts +4 -0
  127. package/dist/types/task/executor.d.ts +2 -0
  128. package/dist/types/task/index.d.ts +9 -1
  129. package/dist/types/task/types.d.ts +37 -1
  130. package/dist/types/tools/ask.d.ts +1 -1
  131. package/dist/types/tools/ast-edit.d.ts +1 -1
  132. package/dist/types/tools/ast-grep.d.ts +1 -1
  133. package/dist/types/tools/bash.d.ts +3 -3
  134. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
  135. package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
  136. package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
  137. package/dist/types/tools/browser/registry.d.ts +16 -3
  138. package/dist/types/tools/browser/render.d.ts +2 -0
  139. package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
  140. package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
  141. package/dist/types/tools/browser.d.ts +3 -1
  142. package/dist/types/tools/checkpoint.d.ts +1 -1
  143. package/dist/types/tools/debug.d.ts +1 -1
  144. package/dist/types/tools/eval-render.d.ts +1 -1
  145. package/dist/types/tools/eval.d.ts +1 -1
  146. package/dist/types/tools/find.d.ts +1 -1
  147. package/dist/types/tools/gh.d.ts +1 -1
  148. package/dist/types/tools/image-gen.d.ts +1 -1
  149. package/dist/types/tools/index.d.ts +14 -2
  150. package/dist/types/tools/inspect-image.d.ts +1 -1
  151. package/dist/types/tools/irc.d.ts +2 -1
  152. package/dist/types/tools/job.d.ts +1 -1
  153. package/dist/types/tools/learn.d.ts +51 -0
  154. package/dist/types/tools/manage-skill.d.ts +40 -0
  155. package/dist/types/tools/memory-edit.d.ts +1 -1
  156. package/dist/types/tools/memory-recall.d.ts +1 -1
  157. package/dist/types/tools/memory-reflect.d.ts +1 -1
  158. package/dist/types/tools/memory-retain.d.ts +1 -1
  159. package/dist/types/tools/plan-mode-guard.d.ts +10 -0
  160. package/dist/types/tools/read.d.ts +1 -1
  161. package/dist/types/tools/render-mermaid.d.ts +1 -1
  162. package/dist/types/tools/renderers.d.ts +7 -11
  163. package/dist/types/tools/resolve.d.ts +1 -1
  164. package/dist/types/tools/review.d.ts +1 -1
  165. package/dist/types/tools/search-tool-bm25.d.ts +1 -1
  166. package/dist/types/tools/search.d.ts +1 -1
  167. package/dist/types/tools/ssh.d.ts +2 -2
  168. package/dist/types/tools/todo.d.ts +2 -2
  169. package/dist/types/tools/tts.d.ts +26 -1
  170. package/dist/types/tools/write.d.ts +2 -2
  171. package/dist/types/tts/downloader.d.ts +20 -0
  172. package/dist/types/tts/index.d.ts +8 -0
  173. package/dist/types/tts/models.d.ts +82 -0
  174. package/dist/types/tts/player.d.ts +32 -0
  175. package/dist/types/tts/runtime.d.ts +6 -0
  176. package/dist/types/tts/streaming-player.d.ts +41 -0
  177. package/dist/types/tts/tts-client.d.ts +93 -0
  178. package/dist/types/tts/tts-protocol.d.ts +95 -0
  179. package/dist/types/tts/tts-worker.d.ts +2 -0
  180. package/dist/types/tts/vocalizer.d.ts +41 -0
  181. package/dist/types/tts/wav.d.ts +8 -0
  182. package/dist/types/utils/clipboard.d.ts +4 -3
  183. package/dist/types/utils/image-loading.d.ts +18 -1
  184. package/dist/types/utils/thinking-display.d.ts +17 -0
  185. package/dist/types/utils/tool-choice.d.ts +8 -0
  186. package/dist/types/utils/tools-manager.d.ts +2 -1
  187. package/dist/types/utils/tools-manager.test.d.ts +1 -0
  188. package/dist/types/web/scrapers/github.d.ts +1 -1
  189. package/dist/types/web/search/index.d.ts +1 -1
  190. package/package.json +17 -16
  191. package/src/async/job-manager.ts +49 -0
  192. package/src/autolearn/controller.ts +139 -0
  193. package/src/autolearn/managed-skills.ts +257 -0
  194. package/src/autoresearch/state.ts +1 -1
  195. package/src/autoresearch/storage.ts +2 -1
  196. package/src/autoresearch/tools/init-experiment.ts +1 -1
  197. package/src/autoresearch/tools/log-experiment.ts +1 -1
  198. package/src/autoresearch/tools/run-experiment.ts +1 -1
  199. package/src/autoresearch/tools/update-notes.ts +1 -1
  200. package/src/autoresearch/types.ts +1 -1
  201. package/src/cli/args.ts +56 -10
  202. package/src/cli/auth-gateway-cli.ts +1 -1
  203. package/src/cli/bench-cli.ts +1 -1
  204. package/src/cli/dry-balance-cli.ts +1 -1
  205. package/src/cli/models-cli.ts +427 -0
  206. package/src/cli/session-picker.ts +2 -1
  207. package/src/cli/setup-cli.ts +148 -47
  208. package/src/cli/setup-model-picker.ts +43 -0
  209. package/src/cli-commands.ts +3 -0
  210. package/src/cli.ts +45 -13
  211. package/src/collab/host.ts +10 -13
  212. package/src/collab/protocol.ts +1 -1
  213. package/src/commands/launch.ts +0 -3
  214. package/src/commands/models.ts +61 -0
  215. package/src/commands/say.ts +102 -0
  216. package/src/commands/setup.ts +1 -1
  217. package/src/commands/token.ts +89 -0
  218. package/src/commit/agentic/tools/analyze-file.ts +4 -1
  219. package/src/commit/agentic/tools/git-file-diff.ts +1 -1
  220. package/src/commit/agentic/tools/git-hunk.ts +1 -1
  221. package/src/commit/agentic/tools/git-overview.ts +1 -1
  222. package/src/commit/agentic/tools/propose-changelog.ts +1 -1
  223. package/src/commit/agentic/tools/propose-commit.ts +1 -1
  224. package/src/commit/agentic/tools/recent-commits.ts +1 -1
  225. package/src/commit/agentic/tools/schemas.ts +1 -1
  226. package/src/commit/agentic/tools/split-commit.ts +1 -1
  227. package/src/commit/analysis/summary.ts +1 -1
  228. package/src/commit/changelog/generate.ts +1 -1
  229. package/src/commit/shared-llm.ts +1 -1
  230. package/src/config/keybindings.ts +2 -2
  231. package/src/config/model-discovery.ts +11 -5
  232. package/src/config/model-registry.ts +79 -21
  233. package/src/config/model-resolver.ts +2 -2
  234. package/src/config/models-config-schema.ts +5 -2
  235. package/src/config/models-config.ts +2 -1
  236. package/src/config/settings-schema.ts +266 -32
  237. package/src/config/settings.ts +10 -0
  238. package/src/discovery/builtin.ts +23 -1
  239. package/src/discovery/claude-plugins.ts +44 -5
  240. package/src/discovery/helpers.ts +41 -1
  241. package/src/edit/hashline/params.ts +1 -1
  242. package/src/edit/modes/apply-patch.ts +1 -1
  243. package/src/edit/modes/patch.ts +1 -1
  244. package/src/edit/modes/replace.ts +1 -1
  245. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  246. package/src/eval/agent-bridge.ts +1 -1
  247. package/src/eval/completion-bridge.ts +1 -1
  248. package/src/eval/js/shared/prelude.txt +69 -17
  249. package/src/export/html/index.ts +3 -6
  250. package/src/export/html/template.js +24 -2
  251. package/src/export/html/tool-views.generated.js +2 -2
  252. package/src/extensibility/custom-commands/loader.ts +1 -1
  253. package/src/extensibility/custom-commands/types.ts +2 -2
  254. package/src/extensibility/custom-tools/loader.ts +1 -1
  255. package/src/extensibility/custom-tools/types.ts +2 -2
  256. package/src/extensibility/extensions/loader.ts +2 -2
  257. package/src/extensibility/extensions/model-api.ts +41 -0
  258. package/src/extensibility/extensions/runner.ts +4 -0
  259. package/src/extensibility/extensions/types.ts +54 -3
  260. package/src/extensibility/extensions/wrapper.ts +41 -5
  261. package/src/extensibility/hooks/index.ts +2 -1
  262. package/src/extensibility/hooks/loader.ts +1 -1
  263. package/src/extensibility/hooks/types.ts +2 -2
  264. package/src/extensibility/plugins/legacy-pi-compat.ts +43 -13
  265. package/src/extensibility/plugins/loader.ts +30 -19
  266. package/src/extensibility/plugins/manager.ts +221 -90
  267. package/src/extensibility/shared-events.ts +1 -1
  268. package/src/extensibility/skills.ts +101 -5
  269. package/src/goals/guided-setup.ts +133 -0
  270. package/src/goals/state.ts +1 -1
  271. package/src/goals/tools/goal-tool.ts +1 -1
  272. package/src/hindsight/transcript.ts +1 -1
  273. package/src/index.ts +5 -0
  274. package/src/internal-urls/docs-index.generated.ts +13 -10
  275. package/src/internal-urls/history-protocol.ts +1 -1
  276. package/src/internal-urls/local-protocol.ts +29 -7
  277. package/src/lsp/types.ts +1 -1
  278. package/src/main.ts +27 -32
  279. package/src/mcp/config-writer.ts +7 -3
  280. package/src/mcp/manager.ts +11 -0
  281. package/src/mcp/startup-events.ts +21 -0
  282. package/src/mcp/transports/stdio.ts +2 -1
  283. package/src/memories/index.ts +149 -12
  284. package/src/memories/storage.ts +2 -1
  285. package/src/memory-backend/local-backend.ts +11 -5
  286. package/src/mnemopi/backend.ts +1 -0
  287. package/src/mnemopi/config.ts +112 -12
  288. package/src/modes/acp/acp-agent.ts +8 -53
  289. package/src/modes/acp/acp-event-mapper.ts +5 -1
  290. package/src/modes/components/agent-hub.ts +51 -5
  291. package/src/modes/components/assistant-message.ts +12 -44
  292. package/src/modes/components/compaction-summary-message.ts +125 -26
  293. package/src/modes/components/custom-editor.test.ts +96 -0
  294. package/src/modes/components/custom-editor.ts +164 -8
  295. package/src/modes/components/index.ts +1 -0
  296. package/src/modes/components/logout-account-selector.ts +130 -0
  297. package/src/modes/components/mcp-add-wizard.ts +1 -1
  298. package/src/modes/components/model-selector.ts +2 -2
  299. package/src/modes/components/session-selector.ts +1 -1
  300. package/src/modes/components/settings-defs.ts +7 -0
  301. package/src/modes/components/status-line/component.ts +54 -157
  302. package/src/modes/components/status-line/segments.ts +1 -1
  303. package/src/modes/components/status-line/types.ts +2 -1
  304. package/src/modes/components/tool-execution.ts +82 -43
  305. package/src/modes/components/transcript-container.ts +70 -1
  306. package/src/modes/components/tree-selector.ts +1 -1
  307. package/src/modes/components/usage-row.ts +18 -0
  308. package/src/modes/components/user-message.ts +4 -2
  309. package/src/modes/controllers/command-controller.ts +14 -16
  310. package/src/modes/controllers/event-controller.ts +101 -73
  311. package/src/modes/controllers/extension-ui-controller.ts +6 -0
  312. package/src/modes/controllers/input-controller.ts +311 -57
  313. package/src/modes/controllers/mcp-command-controller.ts +44 -3
  314. package/src/modes/controllers/selector-controller.ts +68 -12
  315. package/src/modes/controllers/streaming-reveal.ts +4 -3
  316. package/src/modes/gradient-highlight.ts +21 -9
  317. package/src/modes/image-references.ts +20 -0
  318. package/src/modes/interactive-mode.ts +288 -48
  319. package/src/modes/magic-keywords.ts +27 -5
  320. package/src/modes/rpc/rpc-mode.ts +146 -14
  321. package/src/modes/rpc/rpc-subagents.ts +2 -2
  322. package/src/modes/rpc/rpc-types.ts +8 -2
  323. package/src/modes/runtime-init.ts +28 -3
  324. package/src/modes/theme/theme.ts +99 -51
  325. package/src/modes/types.ts +6 -7
  326. package/src/modes/utils/hotkeys-markdown.ts +1 -1
  327. package/src/modes/utils/ui-helpers.ts +36 -7
  328. package/src/priority.json +5 -1
  329. package/src/prompts/agents/task.md +1 -0
  330. package/src/prompts/goals/guided-goal-interview.md +8 -0
  331. package/src/prompts/goals/guided-goal-system.md +12 -0
  332. package/src/prompts/memories/read-path.md +6 -0
  333. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  334. package/src/prompts/system/autolearn-guidance.md +7 -0
  335. package/src/prompts/system/autolearn-nudge.md +3 -0
  336. package/src/prompts/system/eager-task.md +7 -0
  337. package/src/prompts/system/eager-todo.md +11 -6
  338. package/src/prompts/system/empty-stop-retry.md +4 -6
  339. package/src/prompts/system/subagent-system-prompt.md +4 -0
  340. package/src/prompts/system/system-prompt.md +10 -5
  341. package/src/prompts/system/title-marker-instruction.md +1 -0
  342. package/src/prompts/system/title-system-marker.md +16 -0
  343. package/src/prompts/tools/job.md +1 -0
  344. package/src/prompts/tools/learn.md +7 -0
  345. package/src/prompts/tools/manage-skill.md +9 -0
  346. package/src/prompts/tools/task.md +3 -0
  347. package/src/registry/agent-registry.ts +30 -0
  348. package/src/sdk.ts +103 -43
  349. package/src/secrets/obfuscator.ts +1 -1
  350. package/src/session/agent-session.ts +331 -318
  351. package/src/session/agent-storage.ts +18 -9
  352. package/src/session/history-storage.ts +3 -2
  353. package/src/session/indexed-session-storage.ts +7 -10
  354. package/src/session/messages.ts +9 -11
  355. package/src/session/session-context.ts +352 -0
  356. package/src/session/session-dump-format.ts +4 -2
  357. package/src/session/session-entries.ts +194 -0
  358. package/src/session/session-listing.ts +588 -0
  359. package/src/session/session-loader.ts +106 -0
  360. package/src/session/session-manager.ts +968 -3064
  361. package/src/session/session-migrations.ts +78 -0
  362. package/src/session/session-paths.ts +193 -0
  363. package/src/session/session-persistence.ts +131 -0
  364. package/src/session/session-storage.ts +91 -30
  365. package/src/session/snapcompact-inline.ts +21 -1
  366. package/src/session/snapcompact-savings-journal.ts +113 -0
  367. package/src/session/tool-choice-queue.ts +23 -11
  368. package/src/slash-commands/builtin-registry.ts +40 -4
  369. package/src/slash-commands/helpers/logout.ts +88 -0
  370. package/src/stt/asr-client.ts +520 -0
  371. package/src/stt/asr-protocol.ts +65 -0
  372. package/src/stt/asr-worker.ts +790 -0
  373. package/src/stt/downloader.ts +107 -47
  374. package/src/stt/endpointer.ts +259 -0
  375. package/src/stt/index.ts +5 -1
  376. package/src/stt/models.ts +150 -0
  377. package/src/stt/recorder.ts +247 -60
  378. package/src/stt/stt-controller.ts +201 -22
  379. package/src/stt/transcriber.ts +37 -68
  380. package/src/stt/wav.ts +173 -0
  381. package/src/system-prompt.ts +8 -0
  382. package/src/task/agents.ts +1 -2
  383. package/src/task/executor.ts +49 -15
  384. package/src/task/index.ts +60 -6
  385. package/src/task/render.ts +83 -8
  386. package/src/task/types.ts +54 -1
  387. package/src/tools/ask.ts +9 -1
  388. package/src/tools/ast-edit.ts +1 -1
  389. package/src/tools/ast-grep.ts +1 -1
  390. package/src/tools/bash.ts +5 -4
  391. package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
  392. package/src/tools/browser/cmux/rpc.ts +156 -0
  393. package/src/tools/browser/cmux/socket-client.ts +309 -0
  394. package/src/tools/browser/registry.ts +37 -3
  395. package/src/tools/browser/render.ts +6 -1
  396. package/src/tools/browser/tab-protocol.ts +2 -0
  397. package/src/tools/browser/tab-supervisor.ts +189 -18
  398. package/src/tools/browser/tab-worker.ts +1 -1
  399. package/src/tools/browser.ts +16 -1
  400. package/src/tools/checkpoint.ts +1 -1
  401. package/src/tools/debug.ts +1 -1
  402. package/src/tools/eval-render.ts +4 -3
  403. package/src/tools/eval.ts +11 -6
  404. package/src/tools/fetch.ts +13 -2
  405. package/src/tools/find.ts +1 -1
  406. package/src/tools/gh.ts +1 -1
  407. package/src/tools/github-cache.ts +2 -1
  408. package/src/tools/image-gen.ts +1 -1
  409. package/src/tools/index.ts +43 -5
  410. package/src/tools/inspect-image.ts +3 -1
  411. package/src/tools/irc.ts +11 -3
  412. package/src/tools/job.ts +15 -3
  413. package/src/tools/learn.ts +144 -0
  414. package/src/tools/manage-skill.ts +104 -0
  415. package/src/tools/memory-edit.ts +1 -1
  416. package/src/tools/memory-recall.ts +1 -1
  417. package/src/tools/memory-reflect.ts +1 -1
  418. package/src/tools/memory-retain.ts +1 -1
  419. package/src/tools/plan-mode-guard.ts +53 -19
  420. package/src/tools/read.ts +8 -2
  421. package/src/tools/render-mermaid.ts +1 -1
  422. package/src/tools/renderers.ts +7 -11
  423. package/src/tools/report-tool-issue.ts +3 -2
  424. package/src/tools/resolve.ts +1 -1
  425. package/src/tools/review.ts +1 -1
  426. package/src/tools/search-tool-bm25.ts +1 -1
  427. package/src/tools/search.ts +1 -1
  428. package/src/tools/ssh.ts +5 -4
  429. package/src/tools/todo.ts +2 -2
  430. package/src/tools/tts.ts +204 -93
  431. package/src/tools/write.ts +19 -3
  432. package/src/tts/downloader.ts +64 -0
  433. package/src/tts/index.ts +8 -0
  434. package/src/tts/models.ts +137 -0
  435. package/src/tts/player.ts +137 -0
  436. package/src/tts/runtime.ts +21 -0
  437. package/src/tts/streaming-player.ts +266 -0
  438. package/src/tts/tts-client.ts +647 -0
  439. package/src/tts/tts-protocol.ts +60 -0
  440. package/src/tts/tts-worker.ts +497 -0
  441. package/src/tts/vocalizer.ts +162 -0
  442. package/src/tts/wav.ts +58 -0
  443. package/src/utils/clipboard.ts +35 -18
  444. package/src/utils/image-loading.ts +35 -4
  445. package/src/utils/thinking-display.ts +37 -0
  446. package/src/utils/title-generator.ts +48 -5
  447. package/src/utils/tool-choice.ts +16 -0
  448. package/src/utils/tools-manager.test.ts +25 -0
  449. package/src/utils/tools-manager.ts +19 -1
  450. package/src/web/scrapers/github.ts +96 -0
  451. package/src/web/search/index.ts +14 -1
  452. package/src/web/search/providers/searxng.ts +13 -1
  453. package/dist/types/cli/list-models.d.ts +0 -30
  454. package/dist/types/stt/setup.d.ts +0 -18
  455. package/src/cli/list-models.ts +0 -194
  456. package/src/stt/setup.ts +0 -52
  457. package/src/stt/transcribe.py +0 -70
@@ -1,5 +1,6 @@
1
1
  import type { ToolSession } from "../../sdk";
2
- import { type BrowserHandle, type BrowserKindTag } from "./registry";
2
+ import { CmuxTab } from "./cmux/cmux-tab";
3
+ import { type BrowserHandle, type BrowserKindTag, type CmuxBrowserHandle, type PuppeteerBrowserHandle } from "./registry";
3
4
  import type { ReadyInfo, RunResultOk, Transferable, WorkerInbound, WorkerInitPayload, WorkerOutbound } from "./tab-protocol";
4
5
  interface WorkerHandle {
5
6
  send(msg: WorkerInbound, transferList?: Transferable[]): void;
@@ -16,17 +17,27 @@ export interface PendingRun {
16
17
  signal?: AbortSignal;
17
18
  toolCalls: Map<string, AbortController>;
18
19
  }
19
- export interface TabSession {
20
+ interface TabSessionBase<TBrowser extends BrowserHandle = BrowserHandle> {
20
21
  name: string;
21
- browser: BrowserHandle;
22
+ browser: TBrowser;
22
23
  targetId: string;
23
- worker: WorkerHandle;
24
24
  state: "alive" | "dead";
25
25
  info: ReadyInfo;
26
26
  pending: Map<string, PendingRun>;
27
27
  dialogPolicy?: DialogPolicy;
28
28
  kindTag: BrowserKindTag;
29
29
  }
30
+ export interface WorkerTabSession extends TabSessionBase<PuppeteerBrowserHandle> {
31
+ backend: "worker";
32
+ worker: WorkerHandle;
33
+ }
34
+ export interface CmuxTabSession extends TabSessionBase<CmuxBrowserHandle> {
35
+ backend: "cmux";
36
+ cmuxTab: CmuxTab;
37
+ cmuxOwnsSurface: boolean;
38
+ cmuxAttachedSurface?: string;
39
+ }
40
+ export type TabSession = WorkerTabSession | CmuxTabSession;
30
41
  export interface AcquireTabOptions {
31
42
  url?: string;
32
43
  waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
@@ -39,6 +50,7 @@ export interface AcquireTabOptions {
39
50
  signal?: AbortSignal;
40
51
  timeoutMs: number;
41
52
  dialogs?: DialogPolicy;
53
+ cmuxSurface?: string;
42
54
  }
43
55
  export interface AcquireTabResult {
44
56
  tab: TabSession;
@@ -1,9 +1,11 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from "../sdk";
4
4
  import { type BrowserKindTag } from "./browser/registry";
5
5
  import type { Observation, ScreenshotResult } from "./browser/tab-protocol";
6
6
  import type { OutputMeta } from "./output-meta";
7
+ export { cmuxSnapshotToObservation, mapWaitUntil, resolveCmuxKind, serializeEval } from "./browser/cmux/rpc";
8
+ export { CmuxSocketClient } from "./browser/cmux/socket-client";
7
9
  export { extractReadableFromHtml, type ReadableFormat, type ReadableResult } from "./browser/readable";
8
10
  export type { Observation, ObservationEntry } from "./browser/tab-protocol";
9
11
  declare const browserSchema: z.ZodObject<{
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from ".";
4
4
  import type { OutputMeta } from "./output-meta";
5
5
  export interface CheckpointState {
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback, RenderResultOptions, ToolApprovalDecision } from "@oh-my-pi/pi-agent-core";
2
2
  import { type Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import { type DapBreakpointRecord, type DapContinueOutcome, type DapDataBreakpointInfoResponse, type DapDataBreakpointRecord, type DapDisassembledInstruction, type DapEvaluateResponse, type DapFunctionBreakpointRecord, type DapInstructionBreakpointRecord, type DapModule, type DapScope, type DapSessionSummary, type DapSource, type DapStackFrame, type DapThread, type DapVariable } from "../dap";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import type { ToolSession } from ".";
@@ -48,6 +48,6 @@ export declare const evalToolRenderer: {
48
48
  }, uiTheme: Theme, _args?: EvalRenderArgs): Component;
49
49
  mergeCallAndResult: boolean;
50
50
  inline: boolean;
51
- provisionalPendingPreview: boolean;
51
+ provisionalPendingPreview: string;
52
52
  };
53
53
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { EvalToolDetails } from "../eval/types";
4
4
  import type { ToolSession } from ".";
5
5
  export { EVAL_DEFAULT_PREVIEW_LINES, evalToolRenderer } from "./eval-render";
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import { type TruncationResult } from "../session/streaming-output";
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback, ToolApprovalDecision } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { Settings } from "../config/settings";
4
4
  import * as git from "../utils/git";
5
5
  import type { ToolSession } from ".";
@@ -1,5 +1,5 @@
1
1
  import { type Model } from "@oh-my-pi/pi-ai";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import { type ModelRegistry } from "../config/model-registry";
4
4
  import type { CustomTool } from "../extensibility/custom-tools/types";
5
5
  export type ImageProvider = "antigravity" | "gemini" | "openai" | "openai-codex" | "openrouter" | "xai";
@@ -1,6 +1,6 @@
1
1
  import type { InMemorySnapshotStore } from "@oh-my-pi/hashline";
2
2
  import type { AgentTelemetryConfig, AgentTool } from "@oh-my-pi/pi-agent-core";
3
- import type { FetchImpl, ToolChoice } from "@oh-my-pi/pi-ai";
3
+ import type { FetchImpl, Model, ToolChoice } from "@oh-my-pi/pi-ai";
4
4
  import type { AsyncJobManager } from "../async/job-manager";
5
5
  import type { Rule } from "../capability/rule";
6
6
  import type { PromptTemplate } from "../config/prompt-templates";
@@ -17,6 +17,7 @@ import type { AgentRegistry } from "../registry/agent-registry";
17
17
  import type { ArtifactManager } from "../session/artifacts";
18
18
  import type { ClientBridge } from "../session/client-bridge";
19
19
  import type { CustomMessage } from "../session/messages";
20
+ import type { UsageStatistics } from "../session/session-entries";
20
21
  import type { ToolChoiceQueue } from "../session/tool-choice-queue";
21
22
  import type { AgentOutputManager } from "../task/output-manager";
22
23
  import type { DiscoverableTool, DiscoverableToolSearchIndex } from "../tool-discovery/tool-index";
@@ -45,6 +46,8 @@ export * from "./image-gen";
45
46
  export * from "./inspect-image";
46
47
  export * from "./irc";
47
48
  export * from "./job";
49
+ export * from "./learn";
50
+ export * from "./manage-skill";
48
51
  export * from "./memory-edit";
49
52
  export * from "./memory-recall";
50
53
  export * from "./memory-reflect";
@@ -97,6 +100,13 @@ export interface ToolSession {
97
100
  cwd: string;
98
101
  /** Whether UI is available */
99
102
  hasUI: boolean;
103
+ /**
104
+ * Suppress the spawn specialization/coordination advisory appended to `task`
105
+ * results. Set by internal/programmatic callers (e.g. the commit agent's
106
+ * file-analysis fan-out) whose results are consumed by code — not by a model
107
+ * orchestrating further spawns — so the nudge would only be noise.
108
+ */
109
+ suppressSpawnAdvisory?: boolean;
100
110
  /** Optional fetch implementation injected into the URL read pipeline (tests, proxies). Defaults to global fetch. */
101
111
  fetch?: FetchImpl;
102
112
  /** Skip Python kernel availability check and warmup */
@@ -173,6 +183,8 @@ export interface ToolSession {
173
183
  getModelString?: () => string | undefined;
174
184
  /** Get the current session model string, regardless of how it was chosen */
175
185
  getActiveModelString?: () => string | undefined;
186
+ /** Get the current session model object (provider/api capabilities), regardless of how it was chosen. */
187
+ getActiveModel?: () => Model | undefined;
176
188
  /** Auth storage for passing to subagents (avoids re-discovery) */
177
189
  authStorage?: import("../session/auth-storage").AuthStorage;
178
190
  /** Model registry for passing to subagents (avoids re-discovery) */
@@ -209,7 +221,7 @@ export interface ToolSession {
209
221
  /** Goal runtime for the active agent session. */
210
222
  getGoalRuntime?: () => GoalRuntime | undefined;
211
223
  /** Get cumulative session usage statistics (input/output tokens, cost). */
212
- getUsageStatistics?: () => import("../session/session-manager").UsageStatistics;
224
+ getUsageStatistics?: () => UsageStatistics;
213
225
  /** Current per-turn token budget {total, spent, hard} for the eval `budget` helper. */
214
226
  getTurnBudget?: () => {
215
227
  total: number | null;
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import { completeSimple } from "@oh-my-pi/pi-ai";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { ToolSession } from "./index";
5
5
  declare const inspectImageSchema: z.ZodObject<{
6
6
  path: z.ZodString;
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
12
12
  import { type Component } from "@oh-my-pi/pi-tui";
13
- import * as z from "zod/v4";
13
+ import { z } from "zod/v4";
14
14
  import type { Settings } from "../config/settings";
15
15
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
16
16
  import { type IrcDeliveryReceipt, type IrcMessage } from "../irc/bus";
@@ -47,6 +47,7 @@ interface IrcPeerInfo {
47
47
  parentId?: string;
48
48
  unread: number;
49
49
  lastActivity: number;
50
+ activity?: string;
50
51
  }
51
52
  export interface IrcDetails {
52
53
  op: "send" | "wait" | "inbox" | "list";
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import type { ToolSession } from "./index";
@@ -0,0 +1,51 @@
1
+ import type { AgentTool, AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
+ import { z } from "zod/v4";
3
+ import type { ToolSession } from ".";
4
+ declare const learnSchema: z.ZodObject<{
5
+ memory: z.ZodString;
6
+ context: z.ZodOptional<z.ZodString>;
7
+ skill: z.ZodOptional<z.ZodObject<{
8
+ action: z.ZodEnum<{
9
+ create: "create";
10
+ update: "update";
11
+ }>;
12
+ name: z.ZodString;
13
+ description: z.ZodString;
14
+ body: z.ZodString;
15
+ }, z.core.$strip>>;
16
+ }, z.core.$strip>;
17
+ export type LearnParams = z.infer<typeof learnSchema>;
18
+ /**
19
+ * Orchestrating "learn" tool: persists a lesson to long-term memory and,
20
+ * given a `skill` payload, mints/enhances a managed skill via the shared
21
+ * `writeManagedSkill` primitive. Gated behind `autolearn.enabled` plus a live
22
+ * memory backend — `hindsight`/`mnemopi` (remote/SQLite) or `local` (the
23
+ * file-based rollout backend, where lessons append to `learned.md`).
24
+ */
25
+ export declare class LearnTool implements AgentTool<typeof learnSchema> {
26
+ private readonly session;
27
+ readonly name = "learn";
28
+ readonly approval: (args: unknown) => "read" | "write";
29
+ readonly label = "Learn";
30
+ readonly description: string;
31
+ readonly parameters: z.ZodObject<{
32
+ memory: z.ZodString;
33
+ context: z.ZodOptional<z.ZodString>;
34
+ skill: z.ZodOptional<z.ZodObject<{
35
+ action: z.ZodEnum<{
36
+ create: "create";
37
+ update: "update";
38
+ }>;
39
+ name: z.ZodString;
40
+ description: z.ZodString;
41
+ body: z.ZodString;
42
+ }, z.core.$strip>>;
43
+ }, z.core.$strip>;
44
+ readonly strict = true;
45
+ readonly loadMode: "essential";
46
+ readonly summary = "Capture a reusable lesson to memory (and optionally a managed skill)";
47
+ constructor(session: ToolSession);
48
+ static createIf(session: ToolSession): LearnTool | null;
49
+ execute(_id: string, params: LearnParams): Promise<AgentToolResult>;
50
+ }
51
+ export {};
@@ -0,0 +1,40 @@
1
+ import type { AgentTool, AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
+ import { z } from "zod/v4";
3
+ import type { ToolSession } from ".";
4
+ declare const manageSkillSchema: z.ZodObject<{
5
+ action: z.ZodEnum<{
6
+ create: "create";
7
+ delete: "delete";
8
+ update: "update";
9
+ }>;
10
+ name: z.ZodString;
11
+ description: z.ZodOptional<z.ZodString>;
12
+ body: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ export type ManageSkillParams = z.infer<typeof manageSkillSchema>;
15
+ /**
16
+ * Direct create/update/delete of isolated managed skills. Gated behind
17
+ * `autolearn.enabled`; backend-independent (the skill side is standalone).
18
+ */
19
+ export declare class ManageSkillTool implements AgentTool<typeof manageSkillSchema> {
20
+ readonly name = "manage_skill";
21
+ readonly approval: "write";
22
+ readonly label = "Manage Skill";
23
+ readonly description: string;
24
+ readonly parameters: z.ZodObject<{
25
+ action: z.ZodEnum<{
26
+ create: "create";
27
+ delete: "delete";
28
+ update: "update";
29
+ }>;
30
+ name: z.ZodString;
31
+ description: z.ZodOptional<z.ZodString>;
32
+ body: z.ZodOptional<z.ZodString>;
33
+ }, z.core.$strip>;
34
+ readonly strict = true;
35
+ readonly loadMode: "essential";
36
+ readonly summary = "Create, update, or delete an isolated managed skill";
37
+ static createIf(session: ToolSession): ManageSkillTool | null;
38
+ execute(_id: string, params: ManageSkillParams): Promise<AgentToolResult>;
39
+ }
40
+ export {};
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from ".";
4
4
  declare const memoryEditSchema: z.ZodObject<{
5
5
  op: z.ZodEnum<{
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from ".";
4
4
  declare const memoryRecallSchema: z.ZodObject<{
5
5
  query: z.ZodString;
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from ".";
4
4
  declare const memoryReflectSchema: z.ZodObject<{
5
5
  query: z.ZodString;
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from ".";
4
4
  declare const memoryRetainSchema: z.ZodObject<{
5
5
  items: z.ZodArray<z.ZodObject<{
@@ -1,7 +1,17 @@
1
1
  import type { ToolSession } from ".";
2
+ /** Strip the hashline `[path#TAG]` wrapper from a write/edit target so the inner
3
+ * filesystem path drives both authorization and resolution. Only unwraps inputs
4
+ * that match the strict hashline header shape (`[path]` or `[path#XXXX]` with a
5
+ * 4-hex tag); anything else returns the original string so the downstream
6
+ * resolver surfaces the real error. Exported for callers (e.g. `write`) that
7
+ * make scheme/bridge-routing decisions before {@link resolvePlanPath} runs. */
8
+ export declare function unwrapHashlineHeaderPath(targetPath: string): string;
2
9
  /**
3
10
  * Resolve a write/edit target to its absolute filesystem path, honoring the
4
11
  * `local://` and `vault://` schemes. Plain paths resolve against the session cwd.
12
+ * Bracketed hashline headers (`[path#TAG]`) are unwrapped first so the inner
13
+ * filesystem path drives resolution — keeping the plan-mode guard and the
14
+ * eventual write in lockstep.
5
15
  */
6
16
  export declare function resolvePlanPath(session: ToolSession, targetPath: string): string;
7
17
  /**
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import { type Theme } from "../modes/theme/theme";
6
6
  import type { ToolSession } from "../sdk";
@@ -1,5 +1,5 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ToolSession } from "./index";
4
4
  declare const renderMermaidSchema: z.ZodObject<{
5
5
  mermaid: z.ZodString;
@@ -22,17 +22,13 @@ export type ToolRenderer = {
22
22
  /** Render without background box, inline in the response flow */
23
23
  inline?: boolean;
24
24
  /**
25
- * Collapsed pending preview is provisional a tail-window or otherwise
26
- * re-anchored view the result render replaces wholesale (an edit's
27
- * streamed-diff tail, bash/ssh command caps, eval cells whose outputs
28
- * interleave under each cell). Its rows must never commit to native
29
- * scrollback mid-run; see
30
- * `ToolExecutionComponent.isTranscriptBlockCommitStable`. Absent = the
31
- * pending preview streams top-anchored append-shaped rows the result
32
- * render preserves (task context/assignment, write content), which stay
33
- * commit-eligible so a call taller than the viewport scrolls into history
34
- * instead of reading as cut off.
25
+ * Whether pending-call rows are provisional: useful on screen while a tool is
26
+ * streaming, but not durable transcript history. `true` means every pending
27
+ * shape is provisional. `"collapsed"` means only the collapsed pending shape
28
+ * is provisional; expanded rendering is top-anchored/append-shaped enough to
29
+ * let the transcript commit its settled prefix. Absent = the pending preview
30
+ * streams rows the result render preserves.
35
31
  */
36
- provisionalPendingPreview?: boolean;
32
+ provisionalPendingPreview?: boolean | "collapsed";
37
33
  };
38
34
  export declare const toolRenderers: Record<string, ToolRenderer>;
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import type { ToolSession } from ".";
@@ -6,7 +6,7 @@
6
6
  * Reviewers finish via `yield` tool with SubmitReviewDetails schema.
7
7
  */
8
8
  import type { AgentTool } from "@oh-my-pi/pi-agent-core";
9
- import * as z from "zod/v4";
9
+ import { z } from "zod/v4";
10
10
  import type { Theme, ThemeColor } from "../modes/theme/theme";
11
11
  import type { ReviewFinding } from "../task/types";
12
12
  export type FindingPriority = "P0" | "P1" | "P2" | "P3";
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import { type DiscoverableTool } from "../tool-discovery/tool-index";
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import { type TruncationResult } from "../session/streaming-output";
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { SSHHost } from "../capability/ssh";
5
5
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
6
6
  import type { Theme } from "../modes/theme/theme";
@@ -65,6 +65,6 @@ export declare const sshToolRenderer: {
65
65
  renderContext?: SshRenderContext;
66
66
  }, uiTheme: Theme, args?: SshRenderArgs): Component;
67
67
  mergeCallAndResult: boolean;
68
- provisionalPendingPreview: boolean;
68
+ provisionalPendingPreview: string;
69
69
  };
70
70
  export {};
@@ -1,10 +1,10 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import type { Theme } from "../modes/theme/theme";
6
6
  import type { ToolSession } from "../sdk";
7
- import type { SessionEntry } from "../session/session-manager";
7
+ import type { SessionEntry } from "../session/session-entries";
8
8
  export type TodoStatus = "pending" | "in_progress" | "completed" | "abandoned";
9
9
  export interface TodoItem {
10
10
  content: string;
@@ -1,6 +1,7 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CustomTool } from "../extensibility/custom-tools/types";
3
3
  type TtsCodec = "mp3" | "wav";
4
+ type TtsBackend = "local" | "xai";
4
5
  declare const ttsSchema: z.ZodObject<{
5
6
  text: z.ZodString;
6
7
  voice_id: z.ZodDefault<z.ZodString>;
@@ -13,6 +14,30 @@ interface TtsToolDetails {
13
14
  bytes: number;
14
15
  voiceId: string;
15
16
  codec: TtsCodec;
17
+ backend: TtsBackend;
16
18
  }
19
+ /**
20
+ * Pick the synthesis backend. Pure for testability.
21
+ *
22
+ * - `xai` / `local` are honored verbatim (the xAI path still surfaces its own
23
+ * "no credentials" error when creds are missing).
24
+ * - `auto` prefers the local on-device backend, except when the caller asked for
25
+ * an `.mp3` and xAI credentials exist — only the cloud path can emit MP3, so we
26
+ * route there to satisfy the requested container rather than substituting WAV.
27
+ */
28
+ export declare function resolveTtsBackend(opts: {
29
+ preference: string;
30
+ wantsMp3: boolean;
31
+ hasXaiCreds: boolean;
32
+ }): TtsBackend;
33
+ /**
34
+ * Resolve the on-disk path for local synthesis. Local output is always WAV (no
35
+ * MP3 encoder is bundled), so an `.mp3` (or any non-`.wav`) request is rewritten
36
+ * to a sibling `.wav` and flagged so the tool result can note the substitution.
37
+ */
38
+ export declare function resolveLocalWavPath(outputPath: string): {
39
+ wavPath: string;
40
+ substituted: boolean;
41
+ };
17
42
  export declare const ttsTool: CustomTool<typeof ttsSchema, TtsToolDetails>;
18
43
  export {};
@@ -1,6 +1,6 @@
1
1
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Component } from "@oh-my-pi/pi-tui";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import { type FileDiagnosticsResult } from "../lsp";
6
6
  import { type Theme } from "../modes/theme/theme";
@@ -46,7 +46,7 @@ export declare class WriteTool implements AgentTool<typeof writeSchema, WriteToo
46
46
  /** Stream matchers should see the real file content, not its JSON-escaped argument encoding. */
47
47
  matcherDigest(args: unknown): string | undefined;
48
48
  constructor(session: ToolSession);
49
- execute(_toolCallId: string, { path, content }: WriteParams, signal?: AbortSignal, _onUpdate?: AgentToolUpdateCallback<WriteToolDetails>, context?: AgentToolContext): Promise<AgentToolResult<WriteToolDetails>>;
49
+ execute(_toolCallId: string, { path: rawPath, content }: WriteParams, signal?: AbortSignal, _onUpdate?: AgentToolUpdateCallback<WriteToolDetails>, context?: AgentToolContext): Promise<AgentToolResult<WriteToolDetails>>;
50
50
  }
51
51
  interface WriteRenderArgs {
52
52
  path?: string;
@@ -0,0 +1,20 @@
1
+ export interface TtsDownloadProgress {
2
+ stage: string;
3
+ /** Integer 0–100 download percent when known. */
4
+ percent?: number;
5
+ }
6
+ /**
7
+ * Whether the selected local TTS model and the side Kokoro runtime are already
8
+ * present. transformers.js stores `main`-revision files at
9
+ * `<cacheDir>/<repo>/...`, so any `.onnx` weight under the repo dir means the
10
+ * model weights can load without a network fetch; the Kokoro package runtime is
11
+ * version-keyed separately and must also exist before setup can report ready.
12
+ */
13
+ export declare function isTtsModelCached(modelKey: string): Promise<boolean>;
14
+ /**
15
+ * Ensure the selected local TTS model is downloaded into the transformers.js
16
+ * cache (and warm in the worker), streaming integer-percent Hub progress. The
17
+ * worker resolves the request once every model file is cached. Returns `false`
18
+ * if the worker is unavailable or the download failed.
19
+ */
20
+ export declare function downloadTtsModel(modelKey: string, onProgress?: (progress: TtsDownloadProgress) => void, signal?: AbortSignal): Promise<boolean>;
@@ -0,0 +1,8 @@
1
+ export * from "./downloader";
2
+ export * from "./models";
3
+ export * from "./runtime";
4
+ export * from "./tts-client";
5
+ export * from "./tts-protocol";
6
+ export * from "./tts-worker";
7
+ export * from "./vocalizer";
8
+ export * from "./wav";