@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
@@ -81,6 +81,21 @@ export declare class AsyncJobManager {
81
81
  hasPendingDeliveries(filter?: AsyncJobFilter): boolean;
82
82
  watchJobs(jobIds: string[]): number;
83
83
  unwatchJobs(jobIds: string[]): number;
84
+ /**
85
+ * Compute the next adaptive ("smart") wait (ms) for a blocking `job` poll by
86
+ * the given owner. Consecutive polls — those starting within
87
+ * POLL_ESCALATION_RESET_MS of the previous poll returning — climb
88
+ * POLL_WAIT_LADDER_MS so a tight wait loop backs off; a longer gap means the
89
+ * agent left to do real work, so the wait resets to the floor. Pair each call
90
+ * with `recordPollWaitEnd()` once the wait returns.
91
+ */
92
+ nextPollWaitMs(ownerId: string | undefined, now?: number): number;
93
+ /**
94
+ * Mark a blocking poll wait as finished so the idle-reset window is measured
95
+ * from now. Polling again before POLL_ESCALATION_RESET_MS elapses keeps
96
+ * climbing the ladder; waiting longer resets it to the floor.
97
+ */
98
+ recordPollWaitEnd(ownerId: string | undefined, now?: number): void;
84
99
  acknowledgeDeliveries(jobIds: string[]): number;
85
100
  /**
86
101
  * Lift a foreground-wait suppression set via `acknowledgeDeliveries`. If the
@@ -0,0 +1,25 @@
1
+ import type { Settings } from "../config/settings";
2
+ import type { AgentSession } from "../session/agent-session";
3
+ /**
4
+ * Build the standing auto-learn guidance for the system prompt from the tools
5
+ * actually present in the active set, or null when `manage_skill` is absent.
6
+ *
7
+ * Driven by tool presence rather than live settings: the `learn`/`manage_skill`
8
+ * registry is built ONCE at session start (and only for top-level sessions), so
9
+ * keying the guidance on `autolearn.enabled` would let a mid-session enable — or
10
+ * a subagent that filtered the tools out — inject guidance pointing at tools the
11
+ * session never built. The `learn` addendum is included only when the `learn`
12
+ * tool is present (it requires a memory backend).
13
+ */
14
+ export declare function buildAutoLearnInstructions(available: {
15
+ manageSkill: boolean;
16
+ learn: boolean;
17
+ }): string | null;
18
+ export interface AutoLearnControllerOptions {
19
+ session: AgentSession;
20
+ settings: Settings;
21
+ }
22
+ export declare class AutoLearnController {
23
+ #private;
24
+ constructor(options: AutoLearnControllerOptions);
25
+ }
@@ -0,0 +1,45 @@
1
+ /** Provider id stamped on discovered managed skills (distinguishes them from authored). */
2
+ export declare const MANAGED_SKILLS_PROVIDER_ID = "omp-managed";
3
+ /** Hard cap on a managed SKILL.md body to keep generated skills bounded. */
4
+ export declare const MAX_MANAGED_SKILL_BYTES = 64000;
5
+ /** Resolve the isolated managed-skills directory (`~/.omp/agent/managed-skills`). */
6
+ export declare function getManagedSkillsDir(home?: string): string;
7
+ /**
8
+ * Validate + normalize a managed-skill name. Throws on anything outside the
9
+ * strict allowlist so a bad name can never escape `getManagedSkillsDir()`
10
+ * (blocks `..`, slashes, empty, and uppercase).
11
+ */
12
+ export declare function sanitizeSkillName(raw: string): string;
13
+ /**
14
+ * Whether `name` is a safe managed-skill name (the exact post-sanitize shape).
15
+ * Used to validate names read from disk at discovery time — a managed
16
+ * `SKILL.md` whose `frontmatter.name` was not produced by `sanitizeSkillName`
17
+ * (e.g. hand-placed) must not render unescaped into the system prompt.
18
+ */
19
+ export declare function isValidManagedSkillName(name: string): boolean;
20
+ /**
21
+ * Neutralize a machine-generated managed-skill description so it cannot break
22
+ * out of the system prompt's `<skills>` listing. Managed descriptions are
23
+ * generated from prior task content and persist across sessions, so this is a
24
+ * trust boundary: strip control/format chars, angle brackets (`<system-directive>`
25
+ * / `</skills>`), and Markdown fence delimiters (backticks, `~~~`), then collapse
26
+ * to a single line. Applied on BOTH write and read so existing files are safe too.
27
+ */
28
+ export declare function sanitizeManagedDescription(raw: string): string;
29
+ /**
30
+ * Serialize the minimal `name`/`description` frontmatter block via the repo's
31
+ * YAML helper (round-trips through `parseFrontmatter`).
32
+ */
33
+ export declare function toSkillFrontmatter(name: string, description: string): string;
34
+ export interface WriteManagedSkillInput {
35
+ action: "create" | "update";
36
+ name: string;
37
+ description: string;
38
+ body: string;
39
+ }
40
+ /** Create or update a managed `SKILL.md`. Returns the resolved file path. */
41
+ export declare function writeManagedSkill(input: WriteManagedSkillInput): Promise<{
42
+ path: string;
43
+ }>;
44
+ /** Delete a managed skill directory. Throws when it does not exist. */
45
+ export declare function deleteManagedSkill(name: string): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { SessionEntry } from "../session/session-manager";
1
+ import type { SessionEntry } from "../session/session-entries";
2
2
  import type { RunRow, SessionRow } from "./storage";
3
3
  import type { AutoresearchRuntime, ExperimentResult, ExperimentState, MetricDef, MetricDirection, NumericMetricMap, ReconstructedControlState, RuntimeStore } from "./types";
4
4
  export declare function createExperimentState(): ExperimentState;
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { ToolDefinition } from "../../extensibility/extensions";
3
3
  import type { AutoresearchToolFactoryOptions, ExperimentState } from "../types";
4
4
  export declare const HARNESS_FILENAME = "autoresearch.sh";
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { ToolDefinition } from "../../extensibility/extensions";
3
3
  import type { AutoresearchToolFactoryOptions, LogDetails } from "../types";
4
4
  declare const logExperimentSchema: z.ZodObject<{
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { ToolDefinition } from "../../extensibility/extensions";
3
3
  import type { AutoresearchToolFactoryOptions, RunDetails, RunExperimentProgressDetails } from "../types";
4
4
  declare const runExperimentSchema: z.ZodObject<{
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { ToolDefinition } from "../../extensibility/extensions";
3
3
  import type { AutoresearchToolFactoryOptions } from "../types";
4
4
  declare const updateNotesSchema: z.ZodObject<{
@@ -1,6 +1,6 @@
1
1
  import type { AgentToolResult } from "@oh-my-pi/pi-agent-core";
2
2
  import type { ExtensionAPI, ExtensionContext } from "../extensibility/extensions";
3
- import type { SessionEntry } from "../session/session-manager";
3
+ import type { SessionEntry } from "../session/session-entries";
4
4
  import type { TruncationResult } from "../session/streaming-output";
5
5
  export type MetricDirection = "lower" | "higher";
6
6
  export type ExperimentStatus = "keep" | "discard" | "crash" | "checks_failed";
@@ -42,17 +42,34 @@ export interface Args {
42
42
  noSkills?: boolean;
43
43
  skills?: string[];
44
44
  noRules?: boolean;
45
- listModels?: string | true;
46
45
  noTitle?: boolean;
47
46
  autoApprove?: boolean;
48
47
  approvalMode?: "always-ask" | "write" | "yolo";
49
48
  messages: string[];
50
49
  fileArgs: string[];
51
- /** Unknown flags (potentially extension flags) - map of flag name to value */
50
+ /** Extension-registered flags this parse recognized name to value. */
52
51
  unknownFlags: Map<string, boolean | string>;
52
+ /**
53
+ * `--`/`-` prefixed tokens this parse could not match against any built-in
54
+ * or {@link extensionFlags} entry. The startup parse runs *before*
55
+ * extensions load, so it always lists every extension-registered flag here;
56
+ * the post-extension reparse in {@link applyExtensionFlags} clears those
57
+ * once the real flag set is known. Anything still present after that
58
+ * reparse is a genuine typo or stale flag and {@link reportUnrecognizedFlags}
59
+ * surfaces it as a hard error so the agent does not silently start a
60
+ * session with the misparsed positionals as a prompt (issue #2459).
61
+ */
62
+ unrecognizedFlags: string[];
53
63
  }
54
64
  export declare function parseArgs(inputArgs: string[], extensionFlags?: Map<string, {
55
65
  type: "boolean" | "string";
56
66
  }>): Args;
67
+ /**
68
+ * Emit a stderr error listing the unrecognized flags and return `true` when
69
+ * there were any. Caller is expected to exit with a non-zero status. Splitting
70
+ * the print from the exit keeps the helper unit-testable without forking a
71
+ * process (issue #2459).
72
+ */
73
+ export declare function reportUnrecognizedFlags(args: Pick<Args, "unrecognizedFlags">, write?: (text: string) => void): boolean;
57
74
  export declare function getExtraHelpText(): string;
58
75
  export declare function printHelp(): void;
@@ -0,0 +1,49 @@
1
+ import { ModelRegistry } from "../config/model-registry";
2
+ export type ModelsAction = "ls" | "find" | "refresh" | "canonical";
3
+ export interface ModelsCommandArgs {
4
+ action: ModelsAction;
5
+ /** Search substring for `find`, or optional filter for `ls`. */
6
+ pattern?: string;
7
+ flags: {
8
+ json?: boolean;
9
+ /** CLI `-e <path>` extension paths to load before listing (issue #905). */
10
+ extensions?: string[];
11
+ /** Skip extension discovery; only load explicit `extensions`. */
12
+ noExtensions?: boolean;
13
+ /** Extra `config.yml` overlays to apply for this invocation. */
14
+ config?: string[];
15
+ };
16
+ }
17
+ /** Resolve the two positional args into an action + filter (provider names fall through to `ls`). */
18
+ export declare function resolveModelsArgs(first: string | undefined, second: string | undefined): {
19
+ action: ModelsAction;
20
+ pattern: string | undefined;
21
+ };
22
+ /**
23
+ * Options for {@link runModelsListing}: render the catalog from a caller-supplied
24
+ * registry. Loads extensions (CLI `-e` paths and configured `settings.extensions`)
25
+ * and discovers their providers before rendering so extension-contributed models
26
+ * appear (issue #905). The caller is responsible for refreshing built-in providers.
27
+ */
28
+ export interface RunModelsListingOptions {
29
+ modelRegistry: ModelRegistry;
30
+ cwd: string;
31
+ action?: ModelsAction;
32
+ pattern?: string;
33
+ json?: boolean;
34
+ /** CLI-supplied extension paths (e.g. from `-e <path>`). */
35
+ additionalExtensionPaths?: string[];
36
+ /** Extension paths configured under `extensions:` in user settings. */
37
+ settingsExtensions?: string[];
38
+ /** Disabled extension ids from settings (`disabledExtensions`). */
39
+ disabledExtensionIds?: string[];
40
+ /** When true, skip discovery and only load `additionalExtensionPaths`. */
41
+ disableExtensionDiscovery?: boolean;
42
+ }
43
+ export declare function runModelsListing(options: RunModelsListingOptions): Promise<void>;
44
+ /**
45
+ * Entry point for the standalone `omp models` command: bootstraps auth storage,
46
+ * settings, and the model registry, force/cache-refreshes built-in providers per
47
+ * the chosen action, then delegates to {@link runModelsListing}.
48
+ */
49
+ export declare function runModelsCommand(command: ModelsCommandArgs): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { type SessionInfo } from "../session/session-manager";
1
+ import type { SessionInfo } from "../session/session-listing";
2
2
  /**
3
3
  * Show the TUI session selector and return the selected session, or null if
4
4
  * cancelled. Tab toggles between current-folder and all-projects scope; the
@@ -1,4 +1,4 @@
1
- export type SetupComponent = "python" | "stt";
1
+ export type SetupComponent = "python" | "speech";
2
2
  export interface SetupCommandArgs {
3
3
  component: SetupComponent;
4
4
  flags: {
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Standalone TUI model picker used by `omp setup speech`.
3
+ *
4
+ * Mirrors {@link ./session-picker.ts} for the standalone-TUI lifecycle: spin up
5
+ * a one-shot {@link TUI} over a {@link SelectList}, resolve on select/cancel, and
6
+ * tear the UI down. The standalone TUI auto-renders on input, so no manual
7
+ * render wiring is needed beyond `addChild`/`setFocus`/`start`.
8
+ */
9
+ import { type SelectItem } from "@oh-my-pi/pi-tui";
10
+ /**
11
+ * Show a single-column model picker and resolve with the chosen item's value,
12
+ * or `null` if the user cancelled. `currentValue` pre-selects the matching row.
13
+ */
14
+ export declare function selectSetupModel(title: string, items: SelectItem[], currentValue: string): Promise<string | null>;
@@ -11,7 +11,7 @@ import type { BusChannel, GuestFrame, ParsedCollabLink, Participant, SessionStat
11
11
  import { DEFAULT_RELAY_URL, ENVELOPE_HEADER_LENGTH, ROOM_ID_BYTES } from "@oh-my-pi/pi-wire";
12
12
  import type { ContextUsage } from "../extensibility/extensions/types";
13
13
  import type { AgentSessionEvent } from "../session/agent-session";
14
- import type { SessionEntry, SessionHeader } from "../session/session-manager";
14
+ import type { SessionEntry, SessionHeader } from "../session/session-entries";
15
15
  export type { CollabPromptDetails, ParsedCollabLink, RelayControlMessage, RelayControlToGuest, RelayControlToHost, } from "@oh-my-pi/pi-wire";
16
16
  export { COLLAB_PROMPT_MESSAGE_TYPE, COLLAB_PROTO } from "@oh-my-pi/pi-wire";
17
17
  export { DEFAULT_RELAY_URL, ENVELOPE_HEADER_LENGTH, ROOM_ID_BYTES };
@@ -115,9 +115,6 @@ export default class Index extends Command {
115
115
  export: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
116
116
  description: string;
117
117
  };
118
- "list-models": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
119
- description: string;
120
- };
121
118
  "no-title": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
122
119
  description: string;
123
120
  };
@@ -0,0 +1,33 @@
1
+ import { Command } from "@oh-my-pi/pi-utils/cli";
2
+ export default class Models extends Command {
3
+ static description: string;
4
+ static args: {
5
+ action: import("@oh-my-pi/pi-utils/cli").ArgDescriptor & {
6
+ description: string;
7
+ required: false;
8
+ };
9
+ pattern: import("@oh-my-pi/pi-utils/cli").ArgDescriptor & {
10
+ description: string;
11
+ required: false;
12
+ };
13
+ };
14
+ static flags: {
15
+ json: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
16
+ description: string;
17
+ };
18
+ extension: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
19
+ char: string;
20
+ description: string;
21
+ multiple: true;
22
+ };
23
+ "no-extensions": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
24
+ description: string;
25
+ };
26
+ config: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
27
+ description: string;
28
+ multiple: true;
29
+ };
30
+ };
31
+ static examples: string[];
32
+ run(): Promise<void>;
33
+ }
@@ -0,0 +1,24 @@
1
+ import { Command } from "@oh-my-pi/pi-utils/cli";
2
+ export default class Say extends Command {
3
+ static description: string;
4
+ static args: {
5
+ text: import("@oh-my-pi/pi-utils/cli").ArgDescriptor & {
6
+ required: true;
7
+ description: string;
8
+ };
9
+ };
10
+ static flags: {
11
+ voice: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
12
+ description: string;
13
+ };
14
+ model: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
15
+ description: string;
16
+ };
17
+ out: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
18
+ char: string;
19
+ description: string;
20
+ };
21
+ };
22
+ static examples: string[];
23
+ run(): Promise<void>;
24
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Get the API key or OAuth token for a provider.
3
+ */
4
+ import { Command } from "@oh-my-pi/pi-utils/cli";
5
+ export default class Token extends Command {
6
+ static description: string;
7
+ static args: {
8
+ provider: import("@oh-my-pi/pi-utils/cli").ArgDescriptor & {
9
+ description: string;
10
+ required: true;
11
+ };
12
+ };
13
+ static flags: {
14
+ raw: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
15
+ description: string;
16
+ default: boolean;
17
+ };
18
+ "force-refresh": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
19
+ description: string;
20
+ default: boolean;
21
+ };
22
+ };
23
+ static examples: string[];
24
+ run(): Promise<void>;
25
+ }
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CommitAgentState } from "../../../commit/agentic/state";
3
3
  import type { ModelRegistry } from "../../../config/model-registry";
4
4
  import type { Settings } from "../../../config/settings";
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CommitAgentState } from "../../../commit/agentic/state";
3
3
  import type { CustomTool } from "../../../extensibility/custom-tools/types";
4
4
  export declare function getFilePriority(filename: string): number;
@@ -1,4 +1,4 @@
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
  declare const gitHunkSchema: z.ZodObject<{
4
4
  file: z.ZodString;
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CommitAgentState } from "../../../commit/agentic/state";
3
3
  import type { CustomTool } from "../../../extensibility/custom-tools/types";
4
4
  declare const gitOverviewSchema: z.ZodObject<{
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CommitAgentState } from "../../../commit/agentic/state";
3
3
  import type { CustomTool } from "../../../extensibility/custom-tools/types";
4
4
  declare const proposeChangelogSchema: z.ZodObject<{
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CommitAgentState } from "../../../commit/agentic/state";
3
3
  import type { CustomTool } from "../../../extensibility/custom-tools/types";
4
4
  declare const proposeCommitSchema: z.ZodObject<{
@@ -1,4 +1,4 @@
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
  declare const recentCommitsSchema: z.ZodObject<{
4
4
  count: z.ZodOptional<z.ZodNumber>;
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  export declare const commitTypeSchema: z.ZodEnum<{
3
3
  build: "build";
4
4
  chore: "chore";
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  import type { CommitAgentState } from "../../../commit/agentic/state";
3
3
  import type { CustomTool } from "../../../extensibility/custom-tools/types";
4
4
  declare const splitCommitSchema: z.ZodObject<{
@@ -1,6 +1,6 @@
1
1
  import type { ThinkingLevel } from "@oh-my-pi/pi-agent-core";
2
2
  import type { Api, ApiKey, Model } from "@oh-my-pi/pi-ai";
3
- import * as z from "zod/v4";
3
+ import { z } from "zod/v4";
4
4
  import { type ChangelogGenerationResult } from "../../commit/types";
5
5
  export declare const changelogTool: {
6
6
  name: string;
@@ -1,5 +1,5 @@
1
1
  import type { AssistantMessage } from "@oh-my-pi/pi-ai";
2
- import * as z from "zod/v4";
2
+ import { z } from "zod/v4";
3
3
  import type { ConventionalAnalysis } from "./types";
4
4
  /**
5
5
  * Shared Zod schema for the `create_conventional_analysis` tool used by
@@ -138,7 +138,7 @@ export declare const KEYBINDINGS: {
138
138
  readonly description: "Undo";
139
139
  };
140
140
  readonly "tui.input.newLine": {
141
- readonly defaultKeys: "shift+enter";
141
+ readonly defaultKeys: ["shift+enter", "ctrl+j"];
142
142
  readonly description: "Insert newline";
143
143
  };
144
144
  readonly "tui.input.submit": {
@@ -314,8 +314,8 @@ export declare const KEYBINDINGS: {
314
314
  readonly description: "Search history";
315
315
  };
316
316
  readonly "app.stt.toggle": {
317
- readonly defaultKeys: "alt+h";
318
- readonly description: "Toggle speech-to-text";
317
+ readonly defaultKeys: [];
318
+ readonly description: "Toggle speech-to-text (default gesture: hold Space)";
319
319
  };
320
320
  };
321
321
  declare function migrateKeybindingsConfigFile(agentDir: string): void;
@@ -29,9 +29,19 @@ interface ProviderOverride {
29
29
  * `token-plan-sgp.xiaomimimo.com` at discovery time)
30
30
  * 3. Existing bundled baseUrl (the host baked into `models.json`)
31
31
  *
32
+ * `transport` resolution priority:
33
+ * 1. `providerOverride.transport` (e.g. `pi-native` for auth-gateway users)
34
+ * 2. `existing.transport` (carried over from boot-time override application)
35
+ * 3. `model.transport` (rarely set — discovery defaults omit it)
36
+ *
32
37
  * Without (1), the user's override would lose to discovery; without (2)
33
38
  * preferred over (3), the bundled `api.xiaomimimo.com` would shadow the
34
39
  * tp- token-plan host and produce 401s on the first stream call.
40
+ * Without explicit transport propagation, an openrouter (or any) entry
41
+ * marked `transport: pi-native` in models.yml silently reverts to the
42
+ * default openai-completions transport after the background catalog
43
+ * refresh — so the first `/model` switch after boot hits the raw OpenAI
44
+ * chat-completions URL instead of the gateway's `/v1/pi/stream` (#2555).
35
45
  * See `xiaomi-tp-discovery-merge.test.ts` and the `refresh()` baseUrl-override
36
46
  * regression in `model-registry.test.ts`.
37
47
  */
@@ -123,6 +133,13 @@ export declare class ModelRegistry {
123
133
  * paths that pre-flight auth before model resolution) can probe a model
124
134
  * without resolving an API key. Returns true for keyless providers as well
125
135
  * as providers with stored credentials. See issue #993.
136
+ *
137
+ * Side-effect-free and synchronous: a command-backed key (`!cmd`) counts as
138
+ * configured by its presence alone — the program is NOT executed — and OAuth
139
+ * tokens are NOT refreshed (`authStorage.hasAuth`). This is what keeps the
140
+ * model-switch pre-flight off the event loop's hot path; the real key
141
+ * (command execution + OAuth refresh) is resolved lazily per request via
142
+ * {@link ModelRegistry.resolver}.
126
143
  */
127
144
  hasConfiguredAuth(model: Model<Api>): boolean;
128
145
  getDiscoverableProviders(): string[];
@@ -1,4 +1,4 @@
1
- import * as z from "zod/v4";
1
+ import { z } from "zod/v4";
2
2
  export declare const OpenAICompatSchema: z.ZodObject<{
3
3
  supportsStore: z.ZodOptional<z.ZodBoolean>;
4
4
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
@@ -29,6 +29,7 @@ export declare const OpenAICompatSchema: z.ZodObject<{
29
29
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
30
30
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
31
31
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
32
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
32
33
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
33
34
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
34
35
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -92,6 +93,7 @@ export declare const OpenAICompatSchema: z.ZodObject<{
92
93
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
93
94
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
94
95
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
96
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
95
97
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
96
98
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
97
99
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -254,6 +256,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
254
256
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
255
257
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
256
258
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
259
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
257
260
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
258
261
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
259
262
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -317,6 +320,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
317
320
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
318
321
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
319
322
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
323
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
320
324
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
321
325
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
322
326
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -378,6 +382,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
378
382
  api: z.ZodOptional<z.ZodEnum<{
379
383
  "anthropic-messages": "anthropic-messages";
380
384
  "azure-openai-responses": "azure-openai-responses";
385
+ "google-gemini-cli": "google-gemini-cli";
381
386
  "google-generative-ai": "google-generative-ai";
382
387
  "google-vertex": "google-vertex";
383
388
  "openai-codex-responses": "openai-codex-responses";
@@ -415,6 +420,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
415
420
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
416
421
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
417
422
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
423
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
418
424
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
419
425
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
420
426
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -478,6 +484,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
478
484
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
479
485
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
480
486
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
487
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
481
488
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
482
489
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
483
490
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -534,6 +541,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
534
541
  api: z.ZodOptional<z.ZodEnum<{
535
542
  "anthropic-messages": "anthropic-messages";
536
543
  "azure-openai-responses": "azure-openai-responses";
544
+ "google-gemini-cli": "google-gemini-cli";
537
545
  "google-generative-ai": "google-generative-ai";
538
546
  "google-vertex": "google-vertex";
539
547
  "openai-codex-responses": "openai-codex-responses";
@@ -666,6 +674,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
666
674
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
667
675
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
668
676
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
677
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
669
678
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
670
679
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
671
680
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -729,6 +738,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
729
738
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
730
739
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
731
740
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
741
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
732
742
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
733
743
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
734
744
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -893,6 +903,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
893
903
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
894
904
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
895
905
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
906
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
896
907
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
897
908
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
898
909
  thinkingFormat: z.ZodOptional<z.ZodEnum<{
@@ -956,6 +967,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
956
967
  allowsSyntheticReasoningContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
957
968
  requiresAssistantContentForToolCalls: z.ZodOptional<z.ZodBoolean>;
958
969
  supportsToolChoice: z.ZodOptional<z.ZodBoolean>;
970
+ supportsForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
959
971
  disableReasoningOnForcedToolChoice: z.ZodOptional<z.ZodBoolean>;
960
972
  disableReasoningOnToolChoice: z.ZodOptional<z.ZodBoolean>;
961
973
  thinkingFormat: z.ZodOptional<z.ZodEnum<{