@oh-my-pi/pi-coding-agent 16.3.5 → 16.3.7

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 (785) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/dist/cli.js +3625 -3596
  3. package/dist/types/advisor/index.d.ts +6 -6
  4. package/dist/types/advisor/runtime.d.ts +1 -1
  5. package/dist/types/advisor/watchdog.d.ts +1 -1
  6. package/dist/types/async/index.d.ts +1 -1
  7. package/dist/types/auto-thinking/classifier.d.ts +2 -2
  8. package/dist/types/autolearn/controller.d.ts +2 -2
  9. package/dist/types/autoresearch/dashboard.d.ts +2 -2
  10. package/dist/types/autoresearch/git.d.ts +1 -1
  11. package/dist/types/autoresearch/helpers.d.ts +1 -1
  12. package/dist/types/autoresearch/index.d.ts +1 -1
  13. package/dist/types/autoresearch/state.d.ts +3 -3
  14. package/dist/types/autoresearch/storage.d.ts +1 -1
  15. package/dist/types/autoresearch/tools/init-experiment.d.ts +2 -2
  16. package/dist/types/autoresearch/tools/log-experiment.d.ts +2 -2
  17. package/dist/types/autoresearch/tools/run-experiment.d.ts +2 -2
  18. package/dist/types/autoresearch/tools/update-notes.d.ts +2 -2
  19. package/dist/types/autoresearch/types.d.ts +3 -3
  20. package/dist/types/capability/context-file.d.ts +2 -2
  21. package/dist/types/capability/extension-module.d.ts +2 -2
  22. package/dist/types/capability/extension.d.ts +3 -3
  23. package/dist/types/capability/hook.d.ts +2 -2
  24. package/dist/types/capability/index.d.ts +3 -3
  25. package/dist/types/capability/instruction.d.ts +2 -2
  26. package/dist/types/capability/mcp.d.ts +2 -2
  27. package/dist/types/capability/prompt.d.ts +2 -2
  28. package/dist/types/capability/rule-buckets.d.ts +2 -2
  29. package/dist/types/capability/rule.d.ts +2 -2
  30. package/dist/types/capability/settings.d.ts +2 -2
  31. package/dist/types/capability/skill.d.ts +2 -2
  32. package/dist/types/capability/slash-command.d.ts +2 -2
  33. package/dist/types/capability/ssh.d.ts +2 -2
  34. package/dist/types/capability/system-prompt.d.ts +2 -2
  35. package/dist/types/capability/tool.d.ts +2 -2
  36. package/dist/types/cli/args.d.ts +1 -1
  37. package/dist/types/cli/bench-cli.d.ts +2 -2
  38. package/dist/types/cli/dry-balance-cli.d.ts +1 -1
  39. package/dist/types/cli/extension-flags.d.ts +1 -1
  40. package/dist/types/cli/flag-tables.d.ts +2 -2
  41. package/dist/types/cli/gallery-cli.d.ts +1 -1
  42. package/dist/types/cli/gallery-fixtures/agentic.d.ts +1 -1
  43. package/dist/types/cli/gallery-fixtures/codeintel.d.ts +1 -1
  44. package/dist/types/cli/gallery-fixtures/edit.d.ts +1 -1
  45. package/dist/types/cli/gallery-fixtures/fs.d.ts +1 -1
  46. package/dist/types/cli/gallery-fixtures/index.d.ts +2 -2
  47. package/dist/types/cli/gallery-fixtures/interaction.d.ts +1 -1
  48. package/dist/types/cli/gallery-fixtures/memory.d.ts +1 -1
  49. package/dist/types/cli/gallery-fixtures/misc.d.ts +1 -1
  50. package/dist/types/cli/gallery-fixtures/search.d.ts +1 -1
  51. package/dist/types/cli/gallery-fixtures/shell.d.ts +1 -1
  52. package/dist/types/cli/gallery-fixtures/types.d.ts +1 -1
  53. package/dist/types/cli/gallery-fixtures/web.d.ts +1 -1
  54. package/dist/types/cli/gallery-screenshot.d.ts +1 -1
  55. package/dist/types/cli/initial-message.d.ts +1 -1
  56. package/dist/types/cli/models-cli.d.ts +1 -1
  57. package/dist/types/cli/plugin-cli.d.ts +1 -1
  58. package/dist/types/cli/session-picker.d.ts +1 -1
  59. package/dist/types/cli/startup-cwd.d.ts +1 -1
  60. package/dist/types/cli/tiny-models-cli.d.ts +1 -1
  61. package/dist/types/cli/web-search-cli.d.ts +1 -1
  62. package/dist/types/collab/crypto.d.ts +1 -1
  63. package/dist/types/collab/display-name.d.ts +1 -1
  64. package/dist/types/collab/guest.d.ts +4 -4
  65. package/dist/types/collab/host.d.ts +2 -2
  66. package/dist/types/collab/protocol.d.ts +3 -3
  67. package/dist/types/collab/relay-client.d.ts +1 -1
  68. package/dist/types/commands/auth-broker.d.ts +1 -1
  69. package/dist/types/commands/auth-gateway.d.ts +1 -1
  70. package/dist/types/commands/config.d.ts +1 -1
  71. package/dist/types/commands/plugin.d.ts +1 -1
  72. package/dist/types/commands/setup.d.ts +2 -2
  73. package/dist/types/commands/ssh.d.ts +1 -1
  74. package/dist/types/commands/tiny-models.d.ts +1 -1
  75. package/dist/types/commands/ttsr.d.ts +2 -2
  76. package/dist/types/commit/agentic/agent.d.ts +4 -4
  77. package/dist/types/commit/agentic/fallback.d.ts +2 -2
  78. package/dist/types/commit/agentic/index.d.ts +1 -1
  79. package/dist/types/commit/agentic/state.d.ts +1 -1
  80. package/dist/types/commit/agentic/tools/analyze-file.d.ts +5 -5
  81. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +2 -2
  82. package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
  83. package/dist/types/commit/agentic/tools/git-overview.d.ts +2 -2
  84. package/dist/types/commit/agentic/tools/index.d.ts +5 -5
  85. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +2 -2
  86. package/dist/types/commit/agentic/tools/propose-commit.d.ts +2 -2
  87. package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
  88. package/dist/types/commit/agentic/tools/split-commit.d.ts +2 -2
  89. package/dist/types/commit/agentic/topo-sort.d.ts +1 -1
  90. package/dist/types/commit/agentic/trivial.d.ts +1 -1
  91. package/dist/types/commit/agentic/validation.d.ts +1 -1
  92. package/dist/types/commit/analysis/conventional.d.ts +1 -1
  93. package/dist/types/commit/analysis/index.d.ts +4 -4
  94. package/dist/types/commit/analysis/scope.d.ts +1 -1
  95. package/dist/types/commit/analysis/summary.d.ts +1 -1
  96. package/dist/types/commit/analysis/validation.d.ts +1 -1
  97. package/dist/types/commit/changelog/detect.d.ts +1 -1
  98. package/dist/types/commit/changelog/generate.d.ts +1 -1
  99. package/dist/types/commit/changelog/parse.d.ts +1 -1
  100. package/dist/types/commit/cli.d.ts +1 -1
  101. package/dist/types/commit/git/diff.d.ts +1 -1
  102. package/dist/types/commit/index.d.ts +1 -1
  103. package/dist/types/commit/map-reduce/index.d.ts +1 -1
  104. package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
  105. package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
  106. package/dist/types/commit/message.d.ts +1 -1
  107. package/dist/types/commit/model-selection.d.ts +3 -3
  108. package/dist/types/commit/pipeline.d.ts +1 -1
  109. package/dist/types/commit/shared-llm.d.ts +1 -1
  110. package/dist/types/commit/utils.d.ts +1 -1
  111. package/dist/types/config/model-discovery.d.ts +1 -1
  112. package/dist/types/config/model-registry.d.ts +3 -3
  113. package/dist/types/config/model-resolver.d.ts +4 -4
  114. package/dist/types/config/model-roles.d.ts +2 -2
  115. package/dist/types/config/models-config.d.ts +2 -2
  116. package/dist/types/config/service-tier.d.ts +1 -1
  117. package/dist/types/config/settings-schema.d.ts +7 -13
  118. package/dist/types/config/settings.d.ts +7 -7
  119. package/dist/types/config.d.ts +1 -1
  120. package/dist/types/dap/client.d.ts +1 -1
  121. package/dist/types/dap/config.d.ts +1 -1
  122. package/dist/types/dap/index.d.ts +4 -4
  123. package/dist/types/dap/session.d.ts +3 -3
  124. package/dist/types/debug/index.d.ts +1 -1
  125. package/dist/types/debug/log-viewer.d.ts +1 -1
  126. package/dist/types/debug/raw-sse.d.ts +1 -1
  127. package/dist/types/debug/report-bundle.d.ts +1 -1
  128. package/dist/types/discovery/agents.d.ts +1 -1
  129. package/dist/types/discovery/helpers.d.ts +4 -4
  130. package/dist/types/discovery/index.d.ts +47 -47
  131. package/dist/types/discovery/omp-extension-roots.d.ts +1 -1
  132. package/dist/types/edit/apply-patch/index.d.ts +2 -2
  133. package/dist/types/edit/apply-patch/parser.d.ts +1 -1
  134. package/dist/types/edit/diff.d.ts +1 -1
  135. package/dist/types/edit/file-snapshot-store.d.ts +4 -2
  136. package/dist/types/edit/hashline/execute.d.ts +4 -4
  137. package/dist/types/edit/hashline/filesystem.d.ts +3 -3
  138. package/dist/types/edit/hashline/index.d.ts +5 -5
  139. package/dist/types/edit/index.d.ts +19 -19
  140. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  141. package/dist/types/edit/modes/patch.d.ts +3 -3
  142. package/dist/types/edit/modes/replace.d.ts +3 -3
  143. package/dist/types/edit/renderer.d.ts +15 -16
  144. package/dist/types/edit/snapshot-details.d.ts +1 -1
  145. package/dist/types/edit/streaming.d.ts +2 -2
  146. package/dist/types/eval/agent-bridge.d.ts +4 -4
  147. package/dist/types/eval/backend-helpers.d.ts +3 -3
  148. package/dist/types/eval/backend.d.ts +2 -2
  149. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  150. package/dist/types/eval/budget-bridge.d.ts +2 -2
  151. package/dist/types/eval/completion-bridge.d.ts +2 -2
  152. package/dist/types/eval/concurrency-bridge.d.ts +2 -2
  153. package/dist/types/eval/executor-base.d.ts +3 -3
  154. package/dist/types/eval/index.d.ts +6 -6
  155. package/dist/types/eval/jl/executor.d.ts +4 -4
  156. package/dist/types/eval/jl/index.d.ts +2 -2
  157. package/dist/types/eval/jl/kernel.d.ts +5 -5
  158. package/dist/types/eval/js/context-manager.d.ts +4 -4
  159. package/dist/types/eval/js/executor.d.ts +3 -3
  160. package/dist/types/eval/js/index.d.ts +2 -2
  161. package/dist/types/eval/js/shared/helpers.d.ts +1 -1
  162. package/dist/types/eval/js/shared/runtime.d.ts +2 -2
  163. package/dist/types/eval/js/tool-bridge.d.ts +5 -5
  164. package/dist/types/eval/js/worker-core.d.ts +1 -1
  165. package/dist/types/eval/js/worker-protocol.d.ts +2 -2
  166. package/dist/types/eval/kernel-base.d.ts +1 -1
  167. package/dist/types/eval/py/executor.d.ts +3 -3
  168. package/dist/types/eval/py/index.d.ts +2 -2
  169. package/dist/types/eval/py/kernel.d.ts +5 -5
  170. package/dist/types/eval/py/tool-bridge.d.ts +2 -2
  171. package/dist/types/eval/rb/executor.d.ts +3 -3
  172. package/dist/types/eval/rb/index.d.ts +2 -2
  173. package/dist/types/eval/rb/kernel.d.ts +6 -6
  174. package/dist/types/eval/session-id.d.ts +1 -1
  175. package/dist/types/eval/types.d.ts +1 -1
  176. package/dist/types/exa/index.d.ts +2 -2
  177. package/dist/types/exa/mcp-client.d.ts +3 -3
  178. package/dist/types/exec/bash-executor.d.ts +1 -1
  179. package/dist/types/export/html/index.d.ts +2 -2
  180. package/dist/types/export/share.d.ts +3 -3
  181. package/dist/types/export/ttsr.d.ts +2 -2
  182. package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +2 -2
  183. package/dist/types/extensibility/custom-commands/bundled/review/index.d.ts +2 -2
  184. package/dist/types/extensibility/custom-commands/index.d.ts +2 -2
  185. package/dist/types/extensibility/custom-commands/loader.d.ts +1 -1
  186. package/dist/types/extensibility/custom-commands/types.d.ts +3 -3
  187. package/dist/types/extensibility/custom-tools/index.d.ts +3 -3
  188. package/dist/types/extensibility/custom-tools/loader.d.ts +3 -3
  189. package/dist/types/extensibility/custom-tools/types.d.ts +13 -11
  190. package/dist/types/extensibility/custom-tools/wrapper.d.ts +2 -2
  191. package/dist/types/extensibility/extensions/compact-handler.d.ts +1 -1
  192. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +5 -5
  193. package/dist/types/extensibility/extensions/index.d.ts +5 -5
  194. package/dist/types/extensibility/extensions/loader.d.ts +2 -2
  195. package/dist/types/extensibility/extensions/model-api.d.ts +3 -3
  196. package/dist/types/extensibility/extensions/runner.d.ts +6 -6
  197. package/dist/types/extensibility/extensions/types.d.ts +43 -31
  198. package/dist/types/extensibility/extensions/wrapper.d.ts +2 -2
  199. package/dist/types/extensibility/hooks/index.d.ts +6 -6
  200. package/dist/types/extensibility/hooks/loader.d.ts +4 -4
  201. package/dist/types/extensibility/hooks/runner.d.ts +5 -5
  202. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +1 -1
  203. package/dist/types/extensibility/hooks/types.d.ts +18 -18
  204. package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +12 -4
  205. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +194 -5
  206. package/dist/types/extensibility/plugins/doctor.d.ts +1 -1
  207. package/dist/types/extensibility/plugins/index.d.ts +7 -7
  208. package/dist/types/extensibility/plugins/installer.d.ts +1 -1
  209. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +1 -1
  210. package/dist/types/extensibility/plugins/loader.d.ts +1 -1
  211. package/dist/types/extensibility/plugins/manager.d.ts +1 -1
  212. package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +1 -1
  213. package/dist/types/extensibility/plugins/marketplace/index.d.ts +6 -6
  214. package/dist/types/extensibility/plugins/marketplace/manager.d.ts +1 -1
  215. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +1 -1
  216. package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +1 -1
  217. package/dist/types/extensibility/plugins/runtime-config.d.ts +1 -1
  218. package/dist/types/extensibility/session-handler-types.d.ts +1 -1
  219. package/dist/types/extensibility/shared-events.d.ts +12 -5
  220. package/dist/types/extensibility/skills.d.ts +3 -3
  221. package/dist/types/extensibility/slash-commands.d.ts +1 -1
  222. package/dist/types/extensibility/typebox.d.ts +1 -1
  223. package/dist/types/extensibility/utils.d.ts +1 -1
  224. package/dist/types/goals/guided-setup.d.ts +1 -1
  225. package/dist/types/goals/index.d.ts +3 -3
  226. package/dist/types/goals/runtime.d.ts +1 -1
  227. package/dist/types/goals/state.d.ts +1 -1
  228. package/dist/types/goals/tools/goal-tool.d.ts +4 -4
  229. package/dist/types/hindsight/backend.d.ts +2 -2
  230. package/dist/types/hindsight/bank.d.ts +2 -2
  231. package/dist/types/hindsight/client.d.ts +1 -1
  232. package/dist/types/hindsight/config.d.ts +1 -1
  233. package/dist/types/hindsight/index.d.ts +8 -8
  234. package/dist/types/hindsight/mental-models.d.ts +3 -3
  235. package/dist/types/hindsight/state.d.ts +5 -5
  236. package/dist/types/hindsight/transcript.d.ts +2 -2
  237. package/dist/types/index.d.ts +38 -38
  238. package/dist/types/internal-urls/agent-protocol.d.ts +1 -1
  239. package/dist/types/internal-urls/artifact-protocol.d.ts +1 -1
  240. package/dist/types/internal-urls/filesystem-resource.d.ts +1 -1
  241. package/dist/types/internal-urls/history-protocol.d.ts +1 -1
  242. package/dist/types/internal-urls/index.d.ts +16 -16
  243. package/dist/types/internal-urls/issue-pr-protocol.d.ts +1 -1
  244. package/dist/types/internal-urls/local-protocol.d.ts +1 -1
  245. package/dist/types/internal-urls/mcp-protocol.d.ts +1 -1
  246. package/dist/types/internal-urls/memory-protocol.d.ts +1 -1
  247. package/dist/types/internal-urls/omp-protocol.d.ts +1 -1
  248. package/dist/types/internal-urls/parse.d.ts +1 -1
  249. package/dist/types/internal-urls/router.d.ts +1 -1
  250. package/dist/types/internal-urls/rule-protocol.d.ts +1 -1
  251. package/dist/types/internal-urls/skill-protocol.d.ts +1 -1
  252. package/dist/types/internal-urls/ssh-protocol.d.ts +1 -1
  253. package/dist/types/internal-urls/types.d.ts +2 -2
  254. package/dist/types/internal-urls/vault-protocol.d.ts +1 -1
  255. package/dist/types/irc/bus.d.ts +2 -2
  256. package/dist/types/lib/xai-http.d.ts +1 -1
  257. package/dist/types/lsp/client.d.ts +23 -1
  258. package/dist/types/lsp/clients/biome-client.d.ts +1 -1
  259. package/dist/types/lsp/clients/index.d.ts +4 -4
  260. package/dist/types/lsp/clients/lsp-linter-client.d.ts +1 -1
  261. package/dist/types/lsp/clients/swiftlint-client.d.ts +1 -1
  262. package/dist/types/lsp/config.d.ts +1 -1
  263. package/dist/types/lsp/diagnostics-ledger.d.ts +1 -1
  264. package/dist/types/lsp/edits.d.ts +1 -1
  265. package/dist/types/lsp/index.d.ts +6 -6
  266. package/dist/types/lsp/render.d.ts +2 -2
  267. package/dist/types/lsp/startup-events.d.ts +1 -1
  268. package/dist/types/lsp/utils.d.ts +2 -2
  269. package/dist/types/main.d.ts +12 -12
  270. package/dist/types/markit/converters/docx.d.ts +1 -1
  271. package/dist/types/markit/converters/epub.d.ts +1 -1
  272. package/dist/types/markit/converters/pdf/columns.d.ts +1 -1
  273. package/dist/types/markit/converters/pdf/extract.d.ts +1 -1
  274. package/dist/types/markit/converters/pdf/grid.d.ts +1 -1
  275. package/dist/types/markit/converters/pdf/headers.d.ts +1 -1
  276. package/dist/types/markit/converters/pdf/index.d.ts +1 -1
  277. package/dist/types/markit/converters/pdf/render.d.ts +1 -1
  278. package/dist/types/markit/converters/pptx.d.ts +1 -1
  279. package/dist/types/markit/converters/xlsx.d.ts +1 -1
  280. package/dist/types/markit/index.d.ts +2 -2
  281. package/dist/types/markit/registry.d.ts +1 -1
  282. package/dist/types/mcp/client.d.ts +1 -1
  283. package/dist/types/mcp/config-writer.d.ts +1 -1
  284. package/dist/types/mcp/config.d.ts +2 -2
  285. package/dist/types/mcp/index.d.ts +12 -12
  286. package/dist/types/mcp/loader.d.ts +5 -5
  287. package/dist/types/mcp/manager.d.ts +7 -7
  288. package/dist/types/mcp/oauth-credentials.d.ts +3 -3
  289. package/dist/types/mcp/oauth-flow.d.ts +1 -1
  290. package/dist/types/mcp/render.d.ts +3 -3
  291. package/dist/types/mcp/smithery-registry.d.ts +1 -1
  292. package/dist/types/mcp/tool-bridge.d.ts +5 -5
  293. package/dist/types/mcp/tool-cache.d.ts +2 -2
  294. package/dist/types/mcp/transports/http.d.ts +1 -1
  295. package/dist/types/mcp/transports/index.d.ts +3 -3
  296. package/dist/types/mcp/transports/sse.d.ts +1 -1
  297. package/dist/types/mcp/transports/stdio.d.ts +1 -1
  298. package/dist/types/mcp/types.d.ts +1 -1
  299. package/dist/types/memories/index.d.ts +4 -4
  300. package/dist/types/memory-backend/index.d.ts +7 -7
  301. package/dist/types/memory-backend/local-backend.d.ts +1 -1
  302. package/dist/types/memory-backend/off-backend.d.ts +1 -1
  303. package/dist/types/memory-backend/resolve.d.ts +2 -2
  304. package/dist/types/memory-backend/runtime.d.ts +2 -2
  305. package/dist/types/memory-backend/types.d.ts +5 -5
  306. package/dist/types/mnemopi/backend.d.ts +2 -2
  307. package/dist/types/mnemopi/config.d.ts +1 -1
  308. package/dist/types/mnemopi/embed-client.d.ts +2 -2
  309. package/dist/types/mnemopi/embed-worker.d.ts +1 -1
  310. package/dist/types/mnemopi/index.d.ts +3 -3
  311. package/dist/types/mnemopi/state.d.ts +38 -2
  312. package/dist/types/modes/acp/acp-agent.d.ts +2 -2
  313. package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -1
  314. package/dist/types/modes/acp/acp-event-mapper.d.ts +1 -1
  315. package/dist/types/modes/acp/acp-mode.d.ts +1 -1
  316. package/dist/types/modes/acp/index.d.ts +2 -2
  317. package/dist/types/modes/components/advisor-config.d.ts +3 -3
  318. package/dist/types/modes/components/advisor-message.d.ts +2 -2
  319. package/dist/types/modes/components/agent-dashboard.d.ts +2 -2
  320. package/dist/types/modes/components/agent-hub.d.ts +11 -9
  321. package/dist/types/modes/components/agent-transcript-viewer.d.ts +6 -6
  322. package/dist/types/modes/components/assistant-message.d.ts +17 -12
  323. package/dist/types/modes/components/background-tan-message.d.ts +2 -2
  324. package/dist/types/modes/components/bash-execution.d.ts +7 -1
  325. package/dist/types/modes/components/bordered-loader.d.ts +1 -1
  326. package/dist/types/modes/components/chat-transcript-builder.d.ts +3 -3
  327. package/dist/types/modes/components/collab-prompt-message.d.ts +2 -2
  328. package/dist/types/modes/components/compaction-summary-message.d.ts +1 -1
  329. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  330. package/dist/types/modes/components/custom-editor.d.ts +1 -1
  331. package/dist/types/modes/components/custom-message.d.ts +2 -2
  332. package/dist/types/modes/components/eval-execution.d.ts +7 -1
  333. package/dist/types/modes/components/execution-shared.d.ts +1 -1
  334. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +2 -2
  335. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  336. package/dist/types/modes/components/extensions/index.d.ts +5 -5
  337. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  338. package/dist/types/modes/components/extensions/state-manager.d.ts +1 -1
  339. package/dist/types/modes/components/extensions/types.d.ts +1 -1
  340. package/dist/types/modes/components/footer.d.ts +1 -1
  341. package/dist/types/modes/components/history-search.d.ts +1 -1
  342. package/dist/types/modes/components/hook-message.d.ts +2 -2
  343. package/dist/types/modes/components/index.d.ts +38 -38
  344. package/dist/types/modes/components/keybinding-hints.d.ts +1 -1
  345. package/dist/types/modes/components/logout-account-selector.d.ts +1 -1
  346. package/dist/types/modes/components/mcp-add-wizard.d.ts +1 -1
  347. package/dist/types/modes/components/message-frame.d.ts +1 -1
  348. package/dist/types/modes/components/model-selector.d.ts +3 -3
  349. package/dist/types/modes/components/oauth-selector.d.ts +1 -1
  350. package/dist/types/modes/components/plan-review-overlay.d.ts +1 -1
  351. package/dist/types/modes/components/plugin-settings.d.ts +3 -3
  352. package/dist/types/modes/components/read-tool-group.d.ts +1 -1
  353. package/dist/types/modes/components/reset-usage-selector.d.ts +1 -1
  354. package/dist/types/modes/components/segment-track.d.ts +1 -1
  355. package/dist/types/modes/components/session-selector.d.ts +1 -1
  356. package/dist/types/modes/components/settings-defs.d.ts +1 -1
  357. package/dist/types/modes/components/settings-selector.d.ts +2 -2
  358. package/dist/types/modes/components/skill-message.d.ts +1 -1
  359. package/dist/types/modes/components/status-line/component.d.ts +2 -2
  360. package/dist/types/modes/components/status-line/context-thresholds.d.ts +1 -1
  361. package/dist/types/modes/components/status-line/index.d.ts +5 -5
  362. package/dist/types/modes/components/status-line/presets.d.ts +1 -1
  363. package/dist/types/modes/components/status-line/segments.d.ts +2 -2
  364. package/dist/types/modes/components/status-line/separators.d.ts +2 -2
  365. package/dist/types/modes/components/status-line/types.d.ts +8 -4
  366. package/dist/types/modes/components/tiny-title-download-progress.d.ts +2 -2
  367. package/dist/types/modes/components/todo-reminder.d.ts +1 -1
  368. package/dist/types/modes/components/tool-execution.d.ts +4 -14
  369. package/dist/types/modes/components/transcript-container.d.ts +26 -28
  370. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  371. package/dist/types/modes/components/ttsr-notification.d.ts +1 -1
  372. package/dist/types/modes/controllers/btw-controller.d.ts +1 -1
  373. package/dist/types/modes/controllers/command-controller-shared.d.ts +2 -2
  374. package/dist/types/modes/controllers/command-controller.d.ts +7 -7
  375. package/dist/types/modes/controllers/event-controller.d.ts +3 -3
  376. package/dist/types/modes/controllers/extension-ui-controller.d.ts +5 -5
  377. package/dist/types/modes/controllers/extension-ui-controller.test.d.ts +1 -0
  378. package/dist/types/modes/controllers/input-controller.d.ts +2 -2
  379. package/dist/types/modes/controllers/mcp-command-controller.d.ts +1 -1
  380. package/dist/types/modes/controllers/omfg-controller.d.ts +1 -1
  381. package/dist/types/modes/controllers/omfg-rule.d.ts +1 -1
  382. package/dist/types/modes/controllers/selector-controller.d.ts +2 -2
  383. package/dist/types/modes/controllers/session-focus-controller.d.ts +4 -4
  384. package/dist/types/modes/controllers/ssh-command-controller.d.ts +1 -1
  385. package/dist/types/modes/controllers/streaming-reveal.d.ts +11 -3
  386. package/dist/types/modes/controllers/tan-command-controller.d.ts +1 -1
  387. package/dist/types/modes/controllers/todo-command-controller.d.ts +1 -1
  388. package/dist/types/modes/controllers/tool-args-reveal.d.ts +6 -2
  389. package/dist/types/modes/image-references.d.ts +1 -1
  390. package/dist/types/modes/index.d.ts +3 -3
  391. package/dist/types/modes/interactive-mode.d.ts +34 -34
  392. package/dist/types/modes/orchestrate.d.ts +1 -1
  393. package/dist/types/modes/print-mode.d.ts +1 -1
  394. package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -1
  395. package/dist/types/modes/rpc/host-tools.d.ts +1 -1
  396. package/dist/types/modes/rpc/host-uris.d.ts +3 -3
  397. package/dist/types/modes/rpc/rpc-client.d.ts +3 -3
  398. package/dist/types/modes/rpc/rpc-mode.d.ts +6 -6
  399. package/dist/types/modes/rpc/rpc-subagents.d.ts +3 -3
  400. package/dist/types/modes/rpc/rpc-types.d.ts +7 -7
  401. package/dist/types/modes/running-subagent-badge.d.ts +1 -1
  402. package/dist/types/modes/runtime-init.d.ts +2 -2
  403. package/dist/types/modes/session-observer-registry.d.ts +2 -2
  404. package/dist/types/modes/setup-wizard/index.d.ts +6 -6
  405. package/dist/types/modes/setup-wizard/lazy.d.ts +1 -1
  406. package/dist/types/modes/setup-wizard/scenes/glyph.d.ts +1 -1
  407. package/dist/types/modes/setup-wizard/scenes/providers.d.ts +1 -1
  408. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
  409. package/dist/types/modes/setup-wizard/scenes/theme.d.ts +1 -1
  410. package/dist/types/modes/setup-wizard/scenes/types.d.ts +1 -1
  411. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
  412. package/dist/types/modes/setup-wizard/startup-splash.d.ts +1 -1
  413. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +2 -2
  414. package/dist/types/modes/shared.d.ts +1 -1
  415. package/dist/types/modes/skill-command.d.ts +2 -2
  416. package/dist/types/modes/theme/shimmer.d.ts +1 -1
  417. package/dist/types/modes/theme/theme.d.ts +1 -1
  418. package/dist/types/modes/types.d.ts +31 -31
  419. package/dist/types/modes/ultrathink.d.ts +1 -1
  420. package/dist/types/modes/utils/context-usage.d.ts +5 -5
  421. package/dist/types/modes/utils/hotkeys-markdown.d.ts +1 -1
  422. package/dist/types/modes/utils/interactive-context-helpers.d.ts +2 -2
  423. package/dist/types/modes/utils/tools-markdown.d.ts +1 -1
  424. package/dist/types/modes/utils/transcript-render-helpers.d.ts +25 -8
  425. package/dist/types/modes/utils/transcript-render-helpers.test.d.ts +1 -0
  426. package/dist/types/modes/utils/ui-helpers.d.ts +2 -2
  427. package/dist/types/modes/workflow.d.ts +1 -1
  428. package/dist/types/plan-mode/plan-handoff.d.ts +1 -1
  429. package/dist/types/registry/agent-lifecycle.d.ts +2 -2
  430. package/dist/types/registry/agent-registry.d.ts +1 -1
  431. package/dist/types/sdk.d.ts +40 -36
  432. package/dist/types/secrets/index.d.ts +2 -2
  433. package/dist/types/secrets/obfuscator.d.ts +1 -1
  434. package/dist/types/session/agent-session.d.ts +57 -41
  435. package/dist/types/session/agent-storage.d.ts +1 -1
  436. package/dist/types/session/auth-broker-config.d.ts +1 -1
  437. package/dist/types/session/codex-auto-reset.d.ts +1 -1
  438. package/dist/types/session/exit-diagnostics.d.ts +1 -1
  439. package/dist/types/session/indexed-session-storage.d.ts +2 -2
  440. package/dist/types/session/messages.d.ts +22 -3
  441. package/dist/types/session/redis-session-storage.d.ts +1 -1
  442. package/dist/types/session/session-context.d.ts +1 -1
  443. package/dist/types/session/session-entries.d.ts +4 -0
  444. package/dist/types/session/session-listing.d.ts +1 -1
  445. package/dist/types/session/session-loader.d.ts +4 -4
  446. package/dist/types/session/session-manager.d.ts +9 -8
  447. package/dist/types/session/session-migrations.d.ts +1 -1
  448. package/dist/types/session/session-paths.d.ts +1 -1
  449. package/dist/types/session/session-persistence.d.ts +2 -2
  450. package/dist/types/session/session-storage.d.ts +1 -1
  451. package/dist/types/session/session-title-slot.d.ts +1 -1
  452. package/dist/types/session/settings-stream-fn.d.ts +1 -1
  453. package/dist/types/session/sql-session-storage.d.ts +1 -1
  454. package/dist/types/session/unexpected-stop-classifier.d.ts +2 -2
  455. package/dist/types/slash-commands/acp-builtins.d.ts +2 -2
  456. package/dist/types/slash-commands/available-commands.d.ts +5 -5
  457. package/dist/types/slash-commands/builtin-registry.d.ts +2 -2
  458. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +1 -1
  459. package/dist/types/slash-commands/helpers/context-report.d.ts +1 -1
  460. package/dist/types/slash-commands/helpers/format.d.ts +1 -1
  461. package/dist/types/slash-commands/helpers/logout.d.ts +1 -1
  462. package/dist/types/slash-commands/helpers/marketplace-manager.d.ts +2 -2
  463. package/dist/types/slash-commands/helpers/mcp.d.ts +1 -1
  464. package/dist/types/slash-commands/helpers/parse.d.ts +1 -1
  465. package/dist/types/slash-commands/helpers/reset-usage.d.ts +1 -1
  466. package/dist/types/slash-commands/helpers/ssh.d.ts +1 -1
  467. package/dist/types/slash-commands/helpers/todo.d.ts +1 -1
  468. package/dist/types/slash-commands/helpers/usage-report.d.ts +1 -1
  469. package/dist/types/slash-commands/types.d.ts +6 -4
  470. package/dist/types/ssh/file-transfer.d.ts +1 -1
  471. package/dist/types/ssh/ssh-executor.d.ts +1 -1
  472. package/dist/types/ssh/sshfs-mount.d.ts +1 -1
  473. package/dist/types/stt/asr-client.d.ts +3 -3
  474. package/dist/types/stt/asr-protocol.d.ts +1 -1
  475. package/dist/types/stt/asr-worker.d.ts +1 -1
  476. package/dist/types/stt/downloader.d.ts +1 -1
  477. package/dist/types/stt/index.d.ts +8 -8
  478. package/dist/types/stt/models.d.ts +1 -1
  479. package/dist/types/system-prompt.d.ts +4 -4
  480. package/dist/types/task/agents.d.ts +1 -1
  481. package/dist/types/task/discovery.d.ts +1 -1
  482. package/dist/types/task/executor.d.ts +20 -20
  483. package/dist/types/task/index.d.ts +11 -11
  484. package/dist/types/task/isolation-runner.d.ts +7 -6
  485. package/dist/types/task/persisted-revive.d.ts +5 -5
  486. package/dist/types/task/provider-concurrency.d.ts +2 -2
  487. package/dist/types/task/render.d.ts +3 -3
  488. package/dist/types/task/renderer.d.ts +1 -1
  489. package/dist/types/task/repair-args.d.ts +1 -1
  490. package/dist/types/task/subprocess-tool-registry.d.ts +1 -1
  491. package/dist/types/task/types.d.ts +2 -2
  492. package/dist/types/task/yield-assembly.d.ts +1 -1
  493. package/dist/types/tiny/title-client.d.ts +2 -2
  494. package/dist/types/tiny/title-protocol.d.ts +1 -1
  495. package/dist/types/tiny/worker.d.ts +1 -1
  496. package/dist/types/tool-discovery/mode.d.ts +2 -2
  497. package/dist/types/tools/__tests__/glob.test.d.ts +1 -0
  498. package/dist/types/tools/acp-bridge.d.ts +2 -2
  499. package/dist/types/tools/ask.d.ts +3 -3
  500. package/dist/types/tools/ast-edit.d.ts +4 -4
  501. package/dist/types/tools/ast-grep.d.ts +4 -4
  502. package/dist/types/tools/bash-command-fixup.d.ts +3 -11
  503. package/dist/types/tools/bash-interactive.d.ts +1 -1
  504. package/dist/types/tools/bash-interceptor.d.ts +1 -1
  505. package/dist/types/tools/bash-skill-urls.d.ts +3 -3
  506. package/dist/types/tools/bash.d.ts +4 -6
  507. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +6 -6
  508. package/dist/types/tools/browser/cmux/rpc.d.ts +1 -1
  509. package/dist/types/tools/browser/registry.d.ts +3 -3
  510. package/dist/types/tools/browser/render.d.ts +3 -3
  511. package/dist/types/tools/browser/tab-supervisor.d.ts +14 -4
  512. package/dist/types/tools/browser/tab-worker.d.ts +1 -1
  513. package/dist/types/tools/browser.d.ts +9 -9
  514. package/dist/types/tools/checkpoint.d.ts +2 -2
  515. package/dist/types/tools/conflict-detect.d.ts +1 -1
  516. package/dist/types/tools/context.d.ts +2 -2
  517. package/dist/types/tools/debug.d.ts +4 -4
  518. package/dist/types/tools/eval-backends.d.ts +1 -1
  519. package/dist/types/tools/eval-render.d.ts +3 -5
  520. package/dist/types/tools/eval.d.ts +3 -3
  521. package/dist/types/tools/fetch.d.ts +7 -7
  522. package/dist/types/tools/gh-renderer.d.ts +3 -3
  523. package/dist/types/tools/gh.d.ts +5 -5
  524. package/dist/types/tools/github-cache.d.ts +1 -1
  525. package/dist/types/tools/glob.d.ts +7 -5
  526. package/dist/types/tools/grep.d.ts +5 -5
  527. package/dist/types/tools/image-gen.d.ts +2 -2
  528. package/dist/types/tools/index.d.ts +70 -70
  529. package/dist/types/tools/inspect-image-renderer.d.ts +2 -2
  530. package/dist/types/tools/inspect-image.d.ts +2 -2
  531. package/dist/types/tools/irc.d.ts +5 -5
  532. package/dist/types/tools/job.d.ts +3 -3
  533. package/dist/types/tools/json-tree.d.ts +1 -1
  534. package/dist/types/tools/learn.d.ts +1 -1
  535. package/dist/types/tools/list-limit.d.ts +1 -1
  536. package/dist/types/tools/manage-skill.d.ts +1 -1
  537. package/dist/types/tools/memory-edit.d.ts +1 -1
  538. package/dist/types/tools/memory-recall.d.ts +1 -1
  539. package/dist/types/tools/memory-reflect.d.ts +1 -1
  540. package/dist/types/tools/memory-render.d.ts +2 -2
  541. package/dist/types/tools/memory-retain.d.ts +1 -1
  542. package/dist/types/tools/output-meta.d.ts +3 -3
  543. package/dist/types/tools/path-utils.d.ts +2 -2
  544. package/dist/types/tools/plan-mode-guard.d.ts +1 -1
  545. package/dist/types/tools/read.d.ts +7 -7
  546. package/dist/types/tools/render-utils.d.ts +3 -3
  547. package/dist/types/tools/renderers.d.ts +2 -22
  548. package/dist/types/tools/report-tool-issue.d.ts +2 -2
  549. package/dist/types/tools/resolve.d.ts +3 -3
  550. package/dist/types/tools/review.d.ts +2 -2
  551. package/dist/types/tools/search-tool-bm25.d.ts +4 -4
  552. package/dist/types/tools/ssh.d.ts +5 -7
  553. package/dist/types/tools/todo.d.ts +4 -4
  554. package/dist/types/tools/tool-result.d.ts +2 -2
  555. package/dist/types/tools/tts.d.ts +1 -1
  556. package/dist/types/tools/write.d.ts +8 -8
  557. package/dist/types/tools/yield.d.ts +1 -1
  558. package/dist/types/tts/index.d.ts +10 -10
  559. package/dist/types/tts/models.d.ts +1 -1
  560. package/dist/types/tts/speech-enhancer.d.ts +2 -2
  561. package/dist/types/tts/streaming-player.d.ts +1 -1
  562. package/dist/types/tts/tts-client.d.ts +2 -2
  563. package/dist/types/tts/tts-protocol.d.ts +1 -1
  564. package/dist/types/tts/tts-worker.d.ts +1 -1
  565. package/dist/types/tts/vocalizer.d.ts +7 -1
  566. package/dist/types/tui/code-cell.d.ts +1 -1
  567. package/dist/types/tui/file-list.d.ts +1 -1
  568. package/dist/types/tui/index.d.ts +9 -9
  569. package/dist/types/tui/output-block.d.ts +2 -2
  570. package/dist/types/tui/status-line.d.ts +2 -2
  571. package/dist/types/tui/tree-list.d.ts +2 -2
  572. package/dist/types/tui/types.d.ts +1 -1
  573. package/dist/types/tui/utils.d.ts +2 -2
  574. package/dist/types/utils/changelog.d.ts +1 -1
  575. package/dist/types/utils/commit-message-generator.d.ts +2 -2
  576. package/dist/types/utils/git.d.ts +1 -1
  577. package/dist/types/utils/image-loading.d.ts +1 -1
  578. package/dist/types/utils/image-vision-fallback.d.ts +3 -3
  579. package/dist/types/utils/markit.d.ts +1 -1
  580. package/dist/types/utils/title-generator.d.ts +2 -2
  581. package/dist/types/web/parallel.d.ts +1 -1
  582. package/dist/types/web/scrapers/artifacthub.d.ts +1 -1
  583. package/dist/types/web/scrapers/arxiv.d.ts +1 -1
  584. package/dist/types/web/scrapers/aur.d.ts +1 -1
  585. package/dist/types/web/scrapers/biorxiv.d.ts +1 -1
  586. package/dist/types/web/scrapers/bluesky.d.ts +1 -1
  587. package/dist/types/web/scrapers/brew.d.ts +1 -1
  588. package/dist/types/web/scrapers/cheatsh.d.ts +1 -1
  589. package/dist/types/web/scrapers/chocolatey.d.ts +1 -1
  590. package/dist/types/web/scrapers/choosealicense.d.ts +1 -1
  591. package/dist/types/web/scrapers/cisa-kev.d.ts +1 -1
  592. package/dist/types/web/scrapers/clojars.d.ts +1 -1
  593. package/dist/types/web/scrapers/coingecko.d.ts +1 -1
  594. package/dist/types/web/scrapers/crates-io.d.ts +1 -1
  595. package/dist/types/web/scrapers/crossref.d.ts +1 -1
  596. package/dist/types/web/scrapers/devto.d.ts +1 -1
  597. package/dist/types/web/scrapers/discogs.d.ts +1 -1
  598. package/dist/types/web/scrapers/discourse.d.ts +1 -1
  599. package/dist/types/web/scrapers/dockerhub.d.ts +1 -1
  600. package/dist/types/web/scrapers/docs-rs.d.ts +8 -1
  601. package/dist/types/web/scrapers/fdroid.d.ts +1 -1
  602. package/dist/types/web/scrapers/firefox-addons.d.ts +1 -1
  603. package/dist/types/web/scrapers/flathub.d.ts +1 -1
  604. package/dist/types/web/scrapers/github-gist.d.ts +1 -1
  605. package/dist/types/web/scrapers/github.d.ts +1 -1
  606. package/dist/types/web/scrapers/gitlab.d.ts +1 -1
  607. package/dist/types/web/scrapers/go-pkg.d.ts +1 -1
  608. package/dist/types/web/scrapers/hackage.d.ts +1 -1
  609. package/dist/types/web/scrapers/hackernews.d.ts +1 -1
  610. package/dist/types/web/scrapers/hex.d.ts +1 -1
  611. package/dist/types/web/scrapers/huggingface.d.ts +1 -1
  612. package/dist/types/web/scrapers/iacr.d.ts +1 -1
  613. package/dist/types/web/scrapers/index.d.ts +77 -77
  614. package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +1 -1
  615. package/dist/types/web/scrapers/lemmy.d.ts +1 -1
  616. package/dist/types/web/scrapers/lobsters.d.ts +1 -1
  617. package/dist/types/web/scrapers/mastodon.d.ts +1 -1
  618. package/dist/types/web/scrapers/maven.d.ts +1 -1
  619. package/dist/types/web/scrapers/mdn.d.ts +1 -1
  620. package/dist/types/web/scrapers/metacpan.d.ts +1 -1
  621. package/dist/types/web/scrapers/musicbrainz.d.ts +1 -1
  622. package/dist/types/web/scrapers/npm.d.ts +1 -1
  623. package/dist/types/web/scrapers/nuget.d.ts +1 -1
  624. package/dist/types/web/scrapers/nvd.d.ts +1 -1
  625. package/dist/types/web/scrapers/ollama.d.ts +1 -1
  626. package/dist/types/web/scrapers/open-vsx.d.ts +1 -1
  627. package/dist/types/web/scrapers/opencorporates.d.ts +1 -1
  628. package/dist/types/web/scrapers/openlibrary.d.ts +1 -1
  629. package/dist/types/web/scrapers/orcid.d.ts +1 -1
  630. package/dist/types/web/scrapers/osv.d.ts +1 -1
  631. package/dist/types/web/scrapers/packagist.d.ts +1 -1
  632. package/dist/types/web/scrapers/pub-dev.d.ts +1 -1
  633. package/dist/types/web/scrapers/pubmed.d.ts +1 -1
  634. package/dist/types/web/scrapers/pypi.d.ts +1 -1
  635. package/dist/types/web/scrapers/rawg.d.ts +1 -1
  636. package/dist/types/web/scrapers/readthedocs.d.ts +1 -1
  637. package/dist/types/web/scrapers/reddit.d.ts +1 -1
  638. package/dist/types/web/scrapers/repology.d.ts +1 -1
  639. package/dist/types/web/scrapers/rfc.d.ts +1 -1
  640. package/dist/types/web/scrapers/rubygems.d.ts +1 -1
  641. package/dist/types/web/scrapers/searchcode.d.ts +1 -1
  642. package/dist/types/web/scrapers/sec-edgar.d.ts +1 -1
  643. package/dist/types/web/scrapers/semantic-scholar.d.ts +1 -1
  644. package/dist/types/web/scrapers/snapcraft.d.ts +1 -1
  645. package/dist/types/web/scrapers/sourcegraph.d.ts +1 -1
  646. package/dist/types/web/scrapers/spdx.d.ts +1 -1
  647. package/dist/types/web/scrapers/spotify.d.ts +1 -1
  648. package/dist/types/web/scrapers/stackoverflow.d.ts +1 -1
  649. package/dist/types/web/scrapers/terraform.d.ts +1 -1
  650. package/dist/types/web/scrapers/tldr.d.ts +1 -1
  651. package/dist/types/web/scrapers/twitter.d.ts +1 -1
  652. package/dist/types/web/scrapers/types.d.ts +1 -1
  653. package/dist/types/web/scrapers/vimeo.d.ts +1 -1
  654. package/dist/types/web/scrapers/vscode-marketplace.d.ts +1 -1
  655. package/dist/types/web/scrapers/w3c.d.ts +1 -1
  656. package/dist/types/web/scrapers/wikidata.d.ts +1 -1
  657. package/dist/types/web/scrapers/wikipedia.d.ts +1 -1
  658. package/dist/types/web/scrapers/youtube.d.ts +1 -1
  659. package/dist/types/web/search/index.d.ts +7 -7
  660. package/dist/types/web/search/provider.d.ts +5 -5
  661. package/dist/types/web/search/providers/anthropic.d.ts +3 -3
  662. package/dist/types/web/search/providers/base.d.ts +1 -1
  663. package/dist/types/web/search/providers/brave.d.ts +3 -3
  664. package/dist/types/web/search/providers/codex.d.ts +3 -3
  665. package/dist/types/web/search/providers/duckduckgo.d.ts +3 -3
  666. package/dist/types/web/search/providers/exa.d.ts +3 -3
  667. package/dist/types/web/search/providers/firecrawl.d.ts +3 -3
  668. package/dist/types/web/search/providers/gemini.d.ts +3 -3
  669. package/dist/types/web/search/providers/jina.d.ts +3 -3
  670. package/dist/types/web/search/providers/kagi.d.ts +3 -3
  671. package/dist/types/web/search/providers/kimi.d.ts +3 -3
  672. package/dist/types/web/search/providers/parallel.d.ts +3 -3
  673. package/dist/types/web/search/providers/perplexity.d.ts +3 -3
  674. package/dist/types/web/search/providers/searxng.d.ts +3 -3
  675. package/dist/types/web/search/providers/synthetic.d.ts +3 -3
  676. package/dist/types/web/search/providers/tavily.d.ts +3 -3
  677. package/dist/types/web/search/providers/tinyfish.d.ts +3 -3
  678. package/dist/types/web/search/providers/utils.d.ts +2 -2
  679. package/dist/types/web/search/providers/xai.d.ts +3 -3
  680. package/dist/types/web/search/providers/zai.d.ts +3 -3
  681. package/dist/types/web/search/render.d.ts +3 -3
  682. package/package.json +12 -12
  683. package/src/advisor/__tests__/advisor.test.ts +59 -0
  684. package/src/auto-thinking/classifier.ts +6 -5
  685. package/src/collab/relay-client.ts +73 -7
  686. package/src/config/model-registry.ts +43 -2
  687. package/src/config/model-resolver.ts +1 -1
  688. package/src/config/settings-schema.ts +5 -12
  689. package/src/config/settings.ts +25 -5
  690. package/src/edit/file-snapshot-store.ts +5 -2
  691. package/src/edit/hashline/filesystem.ts +19 -1
  692. package/src/edit/modes/patch.ts +9 -1
  693. package/src/edit/modes/replace.ts +1 -1
  694. package/src/edit/renderer.ts +42 -35
  695. package/src/eval/__tests__/agent-bridge.test.ts +19 -0
  696. package/src/eval/__tests__/budget-bridge.test.ts +12 -1
  697. package/src/eval/agent-bridge.ts +27 -19
  698. package/src/eval/js/context-manager.ts +3 -0
  699. package/src/export/ttsr.ts +10 -0
  700. package/src/extensibility/custom-tools/types.ts +2 -0
  701. package/src/extensibility/extensions/loader.ts +2 -2
  702. package/src/extensibility/extensions/types.ts +16 -4
  703. package/src/extensibility/hooks/loader.ts +3 -3
  704. package/src/extensibility/hooks/types.ts +4 -4
  705. package/src/extensibility/legacy-pi-ai-shim.ts +17 -4
  706. package/src/extensibility/legacy-pi-coding-agent-shim.ts +554 -2
  707. package/src/extensibility/plugins/legacy-pi-compat.ts +190 -58
  708. package/src/extensibility/shared-events.ts +9 -1
  709. package/src/internal-urls/docs-index.generated.txt +1 -1
  710. package/src/internal-urls/memory-protocol.ts +105 -3
  711. package/src/lsp/client.ts +70 -0
  712. package/src/lsp/index.ts +65 -12
  713. package/src/main.ts +5 -3
  714. package/src/markit/converters/pdf/extract.ts +26 -2
  715. package/src/mnemopi/state.ts +76 -0
  716. package/src/modes/acp/acp-agent.ts +5 -1
  717. package/src/modes/components/agent-hub.ts +27 -9
  718. package/src/modes/components/assistant-message.ts +134 -82
  719. package/src/modes/components/bash-execution.ts +9 -0
  720. package/src/modes/components/chat-transcript-builder.ts +15 -7
  721. package/src/modes/components/copy-selector.ts +16 -4
  722. package/src/modes/components/eval-execution.ts +9 -0
  723. package/src/modes/components/model-selector.ts +17 -17
  724. package/src/modes/components/session-selector.ts +12 -4
  725. package/src/modes/components/status-line/component.ts +4 -0
  726. package/src/modes/components/status-line/segments.ts +6 -5
  727. package/src/modes/components/status-line/types.ts +4 -0
  728. package/src/modes/components/tool-execution.ts +12 -53
  729. package/src/modes/components/transcript-container.ts +82 -432
  730. package/src/modes/components/tree-selector.ts +9 -3
  731. package/src/modes/controllers/command-controller.ts +10 -3
  732. package/src/modes/controllers/event-controller.ts +78 -17
  733. package/src/modes/controllers/extension-ui-controller.test.ts +58 -0
  734. package/src/modes/controllers/extension-ui-controller.ts +12 -7
  735. package/src/modes/controllers/input-controller.ts +12 -10
  736. package/src/modes/controllers/selector-controller.ts +18 -9
  737. package/src/modes/controllers/streaming-reveal.ts +12 -5
  738. package/src/modes/controllers/tool-args-reveal.ts +13 -6
  739. package/src/modes/interactive-mode.ts +66 -36
  740. package/src/modes/prompt-action-autocomplete.ts +18 -0
  741. package/src/modes/theme/shimmer.ts +37 -1
  742. package/src/modes/utils/transcript-render-helpers.test.ts +38 -0
  743. package/src/modes/utils/transcript-render-helpers.ts +54 -13
  744. package/src/modes/utils/ui-helpers.ts +17 -8
  745. package/src/prompts/system/workflow-notice.md +1 -1
  746. package/src/prompts/tools/bash.md +9 -7
  747. package/src/prompts/tools/grep.md +1 -1
  748. package/src/prompts/tools/memory-edit.md +2 -0
  749. package/src/prompts/tools/recall.md +2 -0
  750. package/src/sdk.ts +113 -12
  751. package/src/session/agent-session.ts +350 -61
  752. package/src/session/messages.ts +102 -2
  753. package/src/session/session-context.ts +67 -10
  754. package/src/session/session-entries.ts +4 -0
  755. package/src/session/session-history-format.ts +12 -0
  756. package/src/session/session-manager.ts +129 -10
  757. package/src/session/settings-stream-fn.ts +1 -0
  758. package/src/session/unexpected-stop-classifier.ts +6 -3
  759. package/src/slash-commands/builtin-registry.ts +7 -4
  760. package/src/slash-commands/helpers/usage-report.ts +3 -0
  761. package/src/slash-commands/types.ts +2 -0
  762. package/src/task/executor.ts +23 -3
  763. package/src/task/isolation-runner.ts +38 -9
  764. package/src/tools/__tests__/glob.test.ts +37 -0
  765. package/src/tools/acp-bridge.ts +11 -1
  766. package/src/tools/bash-command-fixup.ts +3 -36
  767. package/src/tools/bash.ts +4 -17
  768. package/src/tools/browser/render.ts +6 -4
  769. package/src/tools/browser/tab-supervisor.ts +47 -3
  770. package/src/tools/eval-render.ts +0 -20
  771. package/src/tools/glob.ts +11 -1
  772. package/src/tools/index.ts +1 -1
  773. package/src/tools/inspect-image-renderer.ts +5 -4
  774. package/src/tools/read.ts +76 -28
  775. package/src/tools/render-utils.ts +4 -1
  776. package/src/tools/renderers.ts +0 -20
  777. package/src/tools/ssh.ts +0 -16
  778. package/src/tools/write.ts +22 -13
  779. package/src/tts/speech-enhancer.ts +7 -5
  780. package/src/tts/vocalizer.ts +9 -0
  781. package/src/utils/commit-message-generator.ts +7 -5
  782. package/src/utils/shell-snapshot.ts +10 -0
  783. package/src/utils/title-generator.ts +12 -7
  784. package/src/web/scrapers/docs-rs.ts +12 -1
  785. package/src/web/search/providers/xai.ts +43 -47
package/src/tools/read.ts CHANGED
@@ -334,6 +334,24 @@ function contiguousLineNumbers(startLine: number, count: number): number[] {
334
334
  return lines;
335
335
  }
336
336
 
337
+ function lineNumbersFromSpans(spans: readonly { startLine: number; endLine: number }[]): number[] {
338
+ const lines: number[] = [];
339
+ for (const span of spans) {
340
+ for (let line = span.startLine; line <= span.endLine; line++) lines.push(line);
341
+ }
342
+ return lines;
343
+ }
344
+
345
+ function recordInMemorySeenLines(
346
+ session: ToolSession,
347
+ absolutePath: string | undefined,
348
+ fullText: string,
349
+ seenLines: readonly number[] | undefined,
350
+ ): void {
351
+ if (!absolutePath || !path.isAbsolute(absolutePath) || !seenLines || seenLines.length === 0) return;
352
+ getFileSnapshotStore(session).record(canonicalSnapshotKey(absolutePath), normalizeToLF(fullText), seenLines);
353
+ }
354
+
337
355
  function lineNumbersFromEntries(entries: readonly LineEntry[]): number[] {
338
356
  const lines: number[] = [];
339
357
  for (const entry of entries) {
@@ -1319,6 +1337,7 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
1319
1337
  : undefined;
1320
1338
  let emittedHashlineHeader = false;
1321
1339
  let seenLines: number[] | undefined;
1340
+ let rawSeenLines: number[] | undefined;
1322
1341
  const formatText = (content: string, startNum: number): string => {
1323
1342
  const lineCount = countTextLines(content);
1324
1343
  details.displayContent = {
@@ -1382,10 +1401,12 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
1382
1401
  } else if (truncation.truncated) {
1383
1402
  const outputLines = truncation.outputLines ?? countTextLines(truncation.content);
1384
1403
  const endLineDisplay = startLineDisplay + Math.max(0, outputLines - 1);
1385
- outputText =
1386
- options.raw === true
1387
- ? formatText(truncation.content, startLineDisplay)
1388
- : formatLineEntries(buildLineEntries(endLineDisplay), startLineDisplay);
1404
+ if (options.raw === true) {
1405
+ rawSeenLines = contiguousLineNumbers(startLineDisplay, outputLines);
1406
+ outputText = formatText(truncation.content, startLineDisplay);
1407
+ } else {
1408
+ outputText = formatLineEntries(buildLineEntries(endLineDisplay), startLineDisplay);
1409
+ }
1389
1410
  details.truncation = truncation;
1390
1411
  truncationInfo = {
1391
1412
  result: truncation,
@@ -1395,21 +1416,28 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
1395
1416
  const remaining = allLines.length - (startLine + userLimitedLines);
1396
1417
  const nextOffset = startLine + userLimitedLines + 1;
1397
1418
 
1398
- outputText =
1399
- options.raw === true
1400
- ? formatText(selectedContent, startLineDisplay)
1401
- : formatLineEntries(buildLineEntries(endLine), startLineDisplay);
1419
+ if (options.raw === true) {
1420
+ rawSeenLines = contiguousLineNumbers(startLineDisplay, userLimitedLines);
1421
+ outputText = formatText(selectedContent, startLineDisplay);
1422
+ } else {
1423
+ outputText = formatLineEntries(buildLineEntries(endLine), startLineDisplay);
1424
+ }
1402
1425
  outputText += `\n\n[${remaining} more lines in ${options.entityLabel}. Use :${nextOffset} to continue]`;
1403
1426
  } else {
1404
- outputText =
1405
- options.raw === true
1406
- ? formatText(truncation.content, startLineDisplay)
1407
- : formatLineEntries(buildLineEntries(endLine), startLineDisplay);
1427
+ if (options.raw === true) {
1428
+ rawSeenLines = contiguousLineNumbers(startLineDisplay, endLine - startLine);
1429
+ outputText = formatText(truncation.content, startLineDisplay);
1430
+ } else {
1431
+ outputText = formatLineEntries(buildLineEntries(endLine), startLineDisplay);
1432
+ }
1408
1433
  }
1409
1434
 
1410
1435
  if (hashContext?.tag && options.sourcePath && seenLines) {
1411
1436
  recordSeenLines(this.session, options.sourcePath, hashContext.tag, seenLines);
1412
1437
  }
1438
+ if (options.raw === true && options.sourcePath && options.immutable !== true && rawSeenLines) {
1439
+ recordInMemorySeenLines(this.session, options.sourcePath, text, rawSeenLines);
1440
+ }
1413
1441
  resultBuilder.text(outputText);
1414
1442
  if (truncationInfo) {
1415
1443
  resultBuilder.truncation(truncationInfo.result, truncationInfo.options);
@@ -1503,6 +1531,9 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
1503
1531
  if (hashContext?.tag && options.sourcePath && seenLines) {
1504
1532
  recordSeenLines(this.session, options.sourcePath, hashContext.tag, seenLines);
1505
1533
  }
1534
+ if (options.raw === true && options.sourcePath && options.immutable !== true && visibleSpans.length > 0) {
1535
+ recordInMemorySeenLines(this.session, options.sourcePath, text, lineNumbersFromSpans(visibleSpans));
1536
+ }
1506
1537
  resultBuilder.text(finalText);
1507
1538
  return resultBuilder.done();
1508
1539
  }
@@ -1615,14 +1646,16 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
1615
1646
  }
1616
1647
  if (cloned) displayLines = cloned;
1617
1648
  }
1618
- const endLine = range.startLine + Math.max(0, displayLines.length - 1);
1619
- visibleSpans.push({ startLine: range.startLine, endLine });
1620
- for (let i = 0; i < displayLines.length; i++) {
1621
- displayLineByNumber.set(range.startLine + i, displayLines[i] ?? "");
1622
- }
1623
- if (!fullLines || rawSelector) {
1624
- const blockText = displayLines.join("\n");
1625
- blocks.push(formatTextWithMode(blockText, range.startLine, shouldAddHashLines, shouldAddLineNumbers));
1649
+ if (displayLines.length > 0) {
1650
+ const endLine = range.startLine + displayLines.length - 1;
1651
+ visibleSpans.push({ startLine: range.startLine, endLine });
1652
+ for (let i = 0; i < displayLines.length; i++) {
1653
+ displayLineByNumber.set(range.startLine + i, displayLines[i] ?? "");
1654
+ }
1655
+ if (!fullLines || rawSelector) {
1656
+ const blockText = displayLines.join("\n");
1657
+ blocks.push(formatTextWithMode(blockText, range.startLine, shouldAddHashLines, shouldAddLineNumbers));
1658
+ }
1626
1659
  }
1627
1660
  }
1628
1661
 
@@ -1662,6 +1695,9 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
1662
1695
  recordSeenLinesFromBody(this.session, absolutePath, tag, outputText, clippedLines);
1663
1696
  outputText = `${formatReadHashlineHeader(formatPathRelativeToCwd(absolutePath, this.session.cwd), tag)}\n${outputText}`;
1664
1697
  }
1698
+ } else if (rawSelector && visibleSpans.length > 0) {
1699
+ const rawSeenLines = lineNumbersFromSpans(visibleSpans);
1700
+ if (rawSeenLines.length > 0) await recordFileSnapshot(this.session, absolutePath, rawSeenLines);
1665
1701
  }
1666
1702
  if (notices.length > 0) {
1667
1703
  outputText = outputText ? `${outputText}\n${notices.join("\n")}` : notices.join("\n");
@@ -2669,6 +2705,13 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
2669
2705
  if (hashContext?.tag) {
2670
2706
  recordSeenLinesFromBody(this.session, absolutePath, hashContext.tag, outputText, clippedLines);
2671
2707
  }
2708
+ if (rawSelector && !firstLineExceedsLimit && collectedLines.length > 0) {
2709
+ await recordFileSnapshot(
2710
+ this.session,
2711
+ absolutePath,
2712
+ contiguousLineNumbers(startLineDisplay, collectedLines.length),
2713
+ );
2714
+ }
2672
2715
 
2673
2716
  if (capturedDisplayContent) {
2674
2717
  details.displayContent = capturedDisplayContent;
@@ -3211,8 +3254,8 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
3211
3254
  // =============================================================================
3212
3255
 
3213
3256
  interface ReadRenderArgs {
3214
- path?: string;
3215
- file_path?: string;
3257
+ path?: unknown;
3258
+ file_path?: unknown;
3216
3259
  sel?: string;
3217
3260
  // Legacy fields from old schema — tolerated for in-flight tool calls during transition
3218
3261
  offset?: number;
@@ -3277,11 +3320,12 @@ function formatReadPathLink(
3277
3320
 
3278
3321
  export const readToolRenderer = {
3279
3322
  renderCall(args: ReadRenderArgs, _options: RenderResultOptions, uiTheme: Theme): Component {
3280
- if (isReadableUrlPath(args.file_path || args.path || "")) {
3281
- return renderReadUrlCall(args, _options, uiTheme);
3323
+ const rawPath =
3324
+ typeof args.file_path === "string" ? args.file_path : typeof args.path === "string" ? args.path : "";
3325
+ if (isReadableUrlPath(rawPath)) {
3326
+ return renderReadUrlCall({ path: rawPath, raw: args.raw }, _options, uiTheme);
3282
3327
  }
3283
3328
 
3284
- const rawPath = args.file_path || args.path || "";
3285
3329
  const offset = args.offset;
3286
3330
  const limit = args.limit;
3287
3331
 
@@ -3303,7 +3347,9 @@ export const readToolRenderer = {
3303
3347
  args?: ReadRenderArgs,
3304
3348
  ): Component {
3305
3349
  const urlDetails = result.details as ReadUrlToolDetails | undefined;
3306
- if (urlDetails?.kind === "url" || isReadableUrlPath(args?.file_path || args?.path || "")) {
3350
+ const rawPathForKind =
3351
+ typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
3352
+ if (urlDetails?.kind === "url" || isReadableUrlPath(rawPathForKind)) {
3307
3353
  return renderReadUrlResult(
3308
3354
  result as {
3309
3355
  content: Array<{ type: string; text?: string }>;
@@ -3318,7 +3364,8 @@ export const readToolRenderer = {
3318
3364
  if (result.isError) {
3319
3365
  const rawErrorText = result.content?.find(c => c.type === "text")?.text ?? "";
3320
3366
  const errorText = (rawErrorText || "Unknown error").replace(/^Error:\s*/, "");
3321
- const rawPath = args?.file_path || args?.path || "";
3367
+ const rawPath =
3368
+ typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
3322
3369
  const filePath =
3323
3370
  formatReadPathLink(rawPath, { offset: args?.offset, sourcePath: readSourceFsPath(result.details) }) ||
3324
3371
  shortenPath(rawPath);
@@ -3345,7 +3392,8 @@ export const readToolRenderer = {
3345
3392
  // echo next to the styled warning line below.
3346
3393
  const contentText = details?.displayContent?.text ?? stripOutputNotice(rawText, details?.meta);
3347
3394
  const imageContent = result.content?.find(c => c.type === "image");
3348
- const rawPath = args?.file_path || args?.path || "";
3395
+ const rawPath =
3396
+ typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
3349
3397
  const renderPath = splitReadRenderPath(rawPath);
3350
3398
  const lang = getLanguageFromPath(renderPath.path);
3351
3399
 
@@ -669,7 +669,10 @@ export function truncateDiffByHunk(
669
669
  // Path Utilities
670
670
  // =============================================================================
671
671
 
672
- export function shortenPath(filePath: string, homeDir?: string): string {
672
+ export function shortenPath(filePath: unknown, homeDir?: string): string {
673
+ if (typeof filePath !== "string") {
674
+ return "";
675
+ }
673
676
  const home = homeDir ?? os.homedir();
674
677
  if (home && filePath.startsWith(home)) {
675
678
  const suffix = filePath.slice(home.length);
@@ -43,26 +43,6 @@ export type ToolRenderer = {
43
43
  mergeCallAndResult?: boolean;
44
44
  /** Render without background box, inline in the response flow */
45
45
  inline?: boolean;
46
- /**
47
- * Whether pending-call rows are provisional: useful on screen while a tool is
48
- * streaming, but not durable transcript history. `true` means every pending
49
- * shape is provisional. `"collapsed"` means only the collapsed pending shape
50
- * is provisional; expanded rendering is top-anchored/append-shaped enough to
51
- * let the transcript commit its settled prefix. Absent = the pending preview
52
- * streams rows the result render preserves.
53
- */
54
- provisionalPendingPreview?: boolean | "collapsed";
55
- /**
56
- * Whether the partial-result render is provisional: chrome rows (header
57
- * glyph, frame state) that change between `options.isPartial === true` and
58
- * the final result render. When `true`, the block is treated as
59
- * commit-unstable while a partial result is in flight, so the
60
- * stable-prefix ratchet in `deriveLiveCommitState` cannot promote the
61
- * partial chrome to native scrollback only to have the final render strand
62
- * it above the settled frame. Absent = the partial render is byte-stable
63
- * with the final render and may commit like any settled stream.
64
- */
65
- provisionalPartialResult?: boolean;
66
46
  /**
67
47
  * Whether the renderer's pending-call path visibly consumes
68
48
  * `options.spinnerFrame`. Used to avoid scheduling repaint ticks for live
package/src/tools/ssh.ts CHANGED
@@ -386,22 +386,6 @@ export const sshToolRenderer = {
386
386
  });
387
387
  },
388
388
  mergeCallAndResult: true,
389
- // Pending call preview can re-anchor wholesale when the final result inserts
390
- // the `Output` section, so no pending SSH rows may commit to native
391
- // scrollback — even when expanded. The expanded pending shape was previously
392
- // allowed to commit, which left two visible shapes in native scrollback once
393
- // the result settled: a stale `⏳ SSH: [host]` header above the final frame,
394
- // and the pending `╰──╯` footer reused in-place as the new `├── Output ──┤`
395
- // separator with a fresh footer pushed below it.
396
- provisionalPendingPreview: true,
397
- // Partial-result chrome (pending icon and frame state) differs from the
398
- // final SSH glyph/state, so the block stays commit-unstable while
399
- // `options.isPartial` holds. Without this, a long-running SSH command's
400
- // stable pending header would be promoted by the stable-prefix ratchet and
401
- // committed to native scrollback, then the final render's SSH glyph would
402
- // land below and strand a duplicate pending header above the final frame
403
- // ([#3177](https://github.com/can1357/oh-my-pi/issues/3177)).
404
- provisionalPartialResult: true,
405
389
  // Streamed args can initially render the SSH placeholder (`⏳ SSH: […]` /
406
390
  // `$ …`), then the first partial result inserts the `Output` section and
407
391
  // re-anchors the frame. Force a full repaint at that seam so placeholder rows
@@ -914,7 +914,7 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
914
914
 
915
915
  // Try ACP bridge first for editor-visible filesystem paths. Internal
916
916
  // artifacts such as local:// plans are owned by OMP, not the editor.
917
- if (await routeWriteThroughBridge(this.session, path, absolutePath, cleanContent)) {
917
+ if (await routeWriteThroughBridge(this.session, path, absolutePath, cleanContent, signal)) {
918
918
  const madeExecutable = await maybeMarkExecutableForShebang(absolutePath, cleanContent);
919
919
  const header = maybeWriteSnapshotHeader(this.session, absolutePath, cleanContent);
920
920
  const writeLine = `Successfully wrote ${cleanContent.length} bytes to ${displayPath}`;
@@ -972,9 +972,9 @@ export class WriteTool implements AgentTool<typeof writeSchema, WriteToolDetails
972
972
  // =============================================================================
973
973
 
974
974
  interface WriteRenderArgs {
975
- path?: string;
976
- file_path?: string;
977
- content?: string;
975
+ path?: unknown;
976
+ file_path?: unknown;
977
+ content?: unknown;
978
978
  }
979
979
 
980
980
  const WRITE_PREVIEW_LINES = 6;
@@ -990,8 +990,14 @@ function formatLineCountSuffix(lineCount: number, uiTheme: Theme): string {
990
990
  return uiTheme.fg("dim", ` · ${lineCount} line${lineCount === 1 ? "" : "s"}`);
991
991
  }
992
992
 
993
- function normalizeDisplayText(text: string): string {
994
- return text.replace(/\r/g, "");
993
+ function normalizeDisplayText(text: unknown): string {
994
+ let displayText = "";
995
+ if (typeof text === "string") {
996
+ displayText = text;
997
+ } else if (text !== undefined && text !== null) {
998
+ displayText = String(text);
999
+ }
1000
+ return displayText.replace(/\r/g, "");
995
1001
  }
996
1002
 
997
1003
  /**
@@ -1082,9 +1088,10 @@ function renderContentPreview(
1082
1088
 
1083
1089
  export const writeToolRenderer = {
1084
1090
  renderCall(args: WriteRenderArgs, options: RenderResultOptions, uiTheme: Theme): Component {
1085
- const rawPath = args.file_path || args.path || "";
1091
+ const rawPath =
1092
+ typeof args.file_path === "string" ? args.file_path : typeof args.path === "string" ? args.path : "";
1086
1093
  const filePath = shortenPath(rawPath);
1087
- const lang = getLanguageFromPath(rawPath) ?? "text";
1094
+ const lang = rawPath ? (getLanguageFromPath(rawPath) ?? "text") : "text";
1088
1095
  const langIcon = uiTheme.fg("muted", uiTheme.getLangIcon(lang));
1089
1096
  const pathDisplay = filePath ? uiTheme.fg("accent", filePath) : uiTheme.fg("toolOutput", "…");
1090
1097
  // No status icon on the head row: it's the head of the framed block, and
@@ -1098,11 +1105,12 @@ export const writeToolRenderer = {
1098
1105
  },
1099
1106
  uiTheme,
1100
1107
  );
1108
+ const content = normalizeDisplayText(args.content);
1101
1109
  const streamingCache = createRenderedStringCache();
1102
1110
  return framedBlock(uiTheme, width => {
1103
- const body = args.content
1111
+ const body = content
1104
1112
  ? formatStreamingContent(
1105
- args.content,
1113
+ content,
1106
1114
  Boolean(options?.expanded),
1107
1115
  lang,
1108
1116
  uiTheme,
@@ -1128,10 +1136,11 @@ export const writeToolRenderer = {
1128
1136
  uiTheme: Theme,
1129
1137
  args?: WriteRenderArgs,
1130
1138
  ): Component {
1131
- const rawPath = args?.file_path || args?.path || "";
1139
+ const rawPath =
1140
+ typeof args?.file_path === "string" ? args.file_path : typeof args?.path === "string" ? args.path : "";
1132
1141
  const filePath = shortenPath(rawPath);
1133
- const fileContent = args?.content || "";
1134
- const lang = getLanguageFromPath(rawPath);
1142
+ const fileContent = normalizeDisplayText(args?.content);
1143
+ const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
1135
1144
  const langIcon = uiTheme.fg("muted", uiTheme.getLangIcon(lang));
1136
1145
  // The header shows the cwd-relative path but links to the absolute path the
1137
1146
  // write resolved to (args.path may be relative, which would yield a broken
@@ -23,10 +23,12 @@ import type { Settings } from "../config/settings";
23
23
  import speechRewritePrompt from "../prompts/system/speech-rewrite.md" with { type: "text" };
24
24
 
25
25
  const SYSTEM_PROMPT = prompt.render(speechRewritePrompt);
26
- /** Rewrite budget: a paragraph in, a spoken paragraph (usually shorter) out. */
27
- const ANSWER_MAX_TOKENS = 512;
28
- /** Reasoning backends may burn tokens before the answer despite `disableReasoning`. */
29
- const REASONING_SAFE_MAX_TOKENS = 1536;
26
+ // Rewrite budget: a paragraph in, a spoken paragraph (usually shorter) out.
27
+ // Always reserve enough room to survive backends that ignore `disableReasoning`
28
+ // (e.g. Qwen3 via llama.cpp catalogued `reasoning: false` but still emitting
29
+ // thinking). `maxTokens` is a hard cap — non-thinking completions still return
30
+ // in a normal spoken-paragraph budget (issue #4355).
31
+ const ANSWER_MAX_TOKENS = 1536;
30
32
  /** Per-block completion deadline before falling back to mechanical cleanup. */
31
33
  const REWRITE_TIMEOUT_MS = 6000;
32
34
  /** Bound block characters sent to the model (huge diffs/code dumps get elided). */
@@ -89,7 +91,7 @@ export class SpeechEnhancer {
89
91
  },
90
92
  {
91
93
  apiKey: registry.resolver(model, sessionId),
92
- maxTokens: model.reasoning ? REASONING_SAFE_MAX_TOKENS : ANSWER_MAX_TOKENS,
94
+ maxTokens: ANSWER_MAX_TOKENS,
93
95
  disableReasoning: true,
94
96
  metadata,
95
97
  signal: signal ? AbortSignal.any([signal, timeout]) : timeout,
@@ -195,6 +195,15 @@ export class Vocalizer {
195
195
  this.#livePlayers.clear();
196
196
  }
197
197
 
198
+ /**
199
+ * True while any utterance is still audible or synthesizing — a live
200
+ * player, an unfinished stream handle, or an in-flight rewrite is enough.
201
+ * Callers (Esc handler) treat this as the "silence me" signal.
202
+ */
203
+ isSpeaking(): boolean {
204
+ return this.#livePlayers.size > 0 || this.#liveAborts.size > 0 || this.#handle !== null;
205
+ }
206
+
198
207
  /** Lower the volume while the user is speaking (push-to-talk), so speech doesn't drown them out. */
199
208
  duck(): void {
200
209
  this.#ducked = true;
@@ -16,8 +16,12 @@ import { concreteThinkingLevel, toReasoningEffort } from "../thinking";
16
16
 
17
17
  const COMMIT_SYSTEM_PROMPT = prompt.render(commitSystemPrompt);
18
18
  const MAX_DIFF_CHARS = 4000;
19
- const COMMIT_MAX_TOKENS = 60;
20
- const REASONING_SAFE_MAX_TOKENS = 1024;
19
+ // Cover the "backend ignores `disableReasoning`" case unconditionally: the
20
+ // static `model.reasoning` catalog flag can't distinguish a thinking model
21
+ // declared `reasoning: false` (e.g. Qwen3 served locally via llama.cpp) from
22
+ // one that never emits thinking. `maxTokens` is a hard cap — non-thinking
23
+ // completions still return in a handful of tokens (issue #4355).
24
+ const COMMIT_MAX_TOKENS = 1024;
21
25
 
22
26
  /** File patterns that should be excluded from commit message generation diffs. */
23
27
  const NOISE_SUFFIXES = [".lock", ".lockb", "-lock.json", "-lock.yaml"];
@@ -101,9 +105,7 @@ export async function generateCommitMessage(
101
105
  if (!apiKey) continue;
102
106
 
103
107
  try {
104
- const maxTokens = candidate.model.reasoning
105
- ? Math.max(COMMIT_MAX_TOKENS, REASONING_SAFE_MAX_TOKENS)
106
- : COMMIT_MAX_TOKENS;
108
+ const maxTokens = COMMIT_MAX_TOKENS;
107
109
  const response = await completeSimple(
108
110
  candidate.model,
109
111
  {
@@ -260,6 +260,7 @@ export async function getOrCreateSnapshot(
260
260
  // Generate and execute snapshot script
261
261
  const script = generateSnapshotScript(shell, snapshotPath, rcFile);
262
262
 
263
+ let succeeded = false;
263
264
  try {
264
265
  const snapshotEnv = sanitizeSnapshotEnv(env);
265
266
  const spawnEnv: Record<string, string> = {};
@@ -289,10 +290,19 @@ export async function getOrCreateSnapshot(
289
290
  }
290
291
  scrubSnapshotInPlace(snapshotPath);
291
292
  cachedSnapshotPaths.set(cacheKey, snapshotPath);
293
+ succeeded = true;
292
294
  return snapshotPath;
293
295
  }
294
296
  } catch {
295
297
  // Snapshot creation failed, proceed without it
298
+ } finally {
299
+ if (!succeeded) {
300
+ try {
301
+ fs.rmSync(snapshotPath, { force: true });
302
+ } catch {
303
+ // best-effort cleanup; force: true ignores ENOENT
304
+ }
305
+ }
296
306
  }
297
307
 
298
308
  return null;
@@ -23,8 +23,15 @@ const TITLE_MARKER_INSTRUCTION = prompt.render(titleMarkerInstruction);
23
23
  const DEFAULT_TERMINAL_TITLE = "π";
24
24
  const TERMINAL_TITLE_CONTROL_CHARS = /[\u0000-\u001f\u007f-\u009f]/g;
25
25
 
26
- const TITLE_MAX_TOKENS = 30;
27
- const REASONING_SAFE_MAX_TOKENS = 1024;
26
+ // Cover the "backend ignores `disableReasoning`" case unconditionally: the
27
+ // static `model.reasoning` catalog flag can't distinguish a thinking model that
28
+ // was declared with `reasoning: false` (e.g. Qwen3 served locally via llama.cpp,
29
+ // whose bundled jinja chat template forces `enable_thinking: true`) from one
30
+ // that never emits thinking. `maxTokens` is a hard cap, not a target — the
31
+ // happy-path completion still returns in a handful of tokens, so raising the
32
+ // ceiling costs nothing when thinking is genuinely suppressed and keeps the
33
+ // forced `set_title` tool call reachable when it isn't (issue #4355).
34
+ const TITLE_MAX_TOKENS = 1024;
28
35
  const SET_TITLE_TOOL_NAME = "set_title";
29
36
 
30
37
  const setTitleTool: Tool = {
@@ -212,11 +219,9 @@ export async function generateTitleOnline(
212
219
  // account_uuid rather than the snapshot-at-call-site value.
213
220
  const metadata = metadataResolver?.(model.provider);
214
221
 
215
- // Title generation is a 3-7 word task, but some reasoning backends ignore
216
- // disableReasoning. Keep the normal cheap budget for non-reasoning models
217
- // while reserving enough output room for reasoning models to still emit
218
- // the forced tool call after any unavoidable thinking tokens.
219
- const maxTokens = model.reasoning ? Math.max(TITLE_MAX_TOKENS, REASONING_SAFE_MAX_TOKENS) : TITLE_MAX_TOKENS;
222
+ // Title generation is a 3-7 word task, but the ceiling has to survive
223
+ // backends that ignore `disableReasoning` (see TITLE_MAX_TOKENS above).
224
+ const maxTokens = TITLE_MAX_TOKENS;
220
225
  logger.debug("title-generator: request", { ...modelContext, maxTokens });
221
226
 
222
227
  const response = await completeSimple(
@@ -278,6 +278,17 @@ function findItemInModule(mod_: RustdocItem, name: string, index: Record<string,
278
278
 
279
279
  const DOCS_RS_CACHE_FILENAME = "rustdoc.json";
280
280
 
281
+ /** Hard ceiling for decompressed rustdoc JSON: a 50 MB compressed payload can
282
+ * expand far enough to block the event loop or OOM without a cap. Exceeding it
283
+ * throws (RangeError), which the fetch path converts to a `null` result. */
284
+ export const MAX_RUSTDOC_GUNZIP_BYTES = 256 * 1024 * 1024;
285
+
286
+ /** Decompress a docs.rs rustdoc gzip payload with the output-size cap applied.
287
+ * `maxOutputLength` is overridable only for tests exercising the cap contract. */
288
+ export function gunzipRustdocJson(compressed: Buffer, maxOutputLength: number = MAX_RUSTDOC_GUNZIP_BYTES): string {
289
+ return gunzipSync(compressed, { maxOutputLength }).toString("utf-8");
290
+ }
291
+
281
292
  function sanitizeCacheSegment(value: string): string {
282
293
  return value.replace(/[^A-Za-z0-9._-]+/g, "_");
283
294
  }
@@ -399,7 +410,7 @@ export const handleDocsRs: SpecialHandler = async (
399
410
  }
400
411
 
401
412
  const compressed = Buffer.concat(chunks);
402
- const jsonStr = gunzipSync(compressed).toString("utf-8");
413
+ const jsonStr = gunzipRustdocJson(compressed);
403
414
  crate_ = tryParseJson<RustdocCrate>(jsonStr);
404
415
  if (crate_?.index) {
405
416
  await writeCachedRustdocCrate(target, jsonStr);
@@ -1,4 +1,5 @@
1
- import { type ApiKey, type AuthStorage, withAuth } from "@oh-my-pi/pi-ai";
1
+ import { type ApiKey, type ApiKeyResolver, type AuthStorage, withAuth } from "@oh-my-pi/pi-ai";
2
+ import { $env } from "@oh-my-pi/pi-utils";
2
3
  import type { SearchCitation, SearchResponse, SearchSource, SearchUsage } from "../../../web/search/types";
3
4
  import { SearchProviderError } from "../../../web/search/types";
4
5
  import { clampNumResults } from "../utils";
@@ -10,32 +11,6 @@ const XAI_RESPONSES_URL = "https://api.x.ai/v1/responses";
10
11
  const XAI_WEB_SEARCH_MODEL = "grok-4.3";
11
12
  const DEFAULT_NUM_RESULTS = 10;
12
13
  const MAX_NUM_RESULTS = 30;
13
- const RECENCY_DAYS: Record<NonNullable<SearchParams["recency"]>, number> = {
14
- day: 1,
15
- week: 7,
16
- month: 30,
17
- year: 365,
18
- };
19
-
20
- function formatUtcDate(date: Date): string {
21
- return date.toISOString().slice(0, 10);
22
- }
23
-
24
- function buildRecencyDateBounds(
25
- recency: NonNullable<SearchParams["recency"]>,
26
- now = new Date(),
27
- ): {
28
- from_date: string;
29
- to_date: string;
30
- } {
31
- const toDate = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
32
- const fromDate = new Date(toDate);
33
- fromDate.setUTCDate(fromDate.getUTCDate() - RECENCY_DAYS[recency]);
34
- return {
35
- from_date: formatUtcDate(fromDate),
36
- to_date: formatUtcDate(toDate),
37
- };
38
- }
39
14
 
40
15
  interface XAIUrlCitationAnnotation {
41
16
  type?: string;
@@ -86,22 +61,6 @@ function buildRequestBody(params: SearchParams): Record<string, unknown> {
86
61
  tools: [{ type: "web_search" }],
87
62
  };
88
63
 
89
- const requestedSearchResults = params.numSearchResults ?? params.limit;
90
- const searchParameters: Record<string, unknown> = {};
91
- if (requestedSearchResults !== undefined) {
92
- searchParameters.max_search_results = clampNumResults(
93
- requestedSearchResults,
94
- DEFAULT_NUM_RESULTS,
95
- MAX_NUM_RESULTS,
96
- );
97
- }
98
- if (params.recency) {
99
- Object.assign(searchParameters, buildRecencyDateBounds(params.recency));
100
- }
101
- if (Object.keys(searchParameters).length > 0) {
102
- body.search_parameters = searchParameters;
103
- }
104
-
105
64
  if (params.maxOutputTokens !== undefined) {
106
65
  body.max_output_tokens = params.maxOutputTokens;
107
66
  }
@@ -263,11 +222,48 @@ function parseResponse(response: XAIResponsesResponse, resultCap: number): Searc
263
222
  };
264
223
  }
265
224
 
266
- /** Execute xAI Responses API web search. */
267
- export async function searchXAI(params: SearchParams): Promise<SearchResponse> {
268
- const keyOrResolver: ApiKey = params.authStorage.resolver("xai", {
225
+ /**
226
+ * Prefer `xai-oauth` only when its resolver cannot be shadowed by the shared
227
+ * `XAI_API_KEY` fallback before reaching a lower-priority dedicated source.
228
+ */
229
+ function shouldPreferXAIOAuth(authStorage: AuthStorage): boolean {
230
+ if ($env.XAI_OAUTH_TOKEN) return true;
231
+
232
+ const origin = authStorage.getCredentialOrigin("xai-oauth");
233
+ if (!origin || origin.kind === "env") return false;
234
+ if ((origin.kind === "api_key" || origin.kind === "fallback") && $env.XAI_API_KEY) return false;
235
+ return true;
236
+ }
237
+
238
+ function resolveXAIWebSearchApiKey(params: SearchParams): ApiKeyResolver {
239
+ const xaiResolver = params.authStorage.resolver("xai", {
240
+ sessionId: params.sessionId,
241
+ });
242
+ const xaiOAuthOrigin = params.authStorage.getCredentialOrigin("xai-oauth");
243
+ if (!shouldPreferXAIOAuth(params.authStorage)) {
244
+ return xaiResolver;
245
+ }
246
+
247
+ const xaiOAuthResolver = params.authStorage.resolver("xai-oauth", {
269
248
  sessionId: params.sessionId,
270
249
  });
250
+ return async ctx => {
251
+ const xaiOAuthKey = await xaiOAuthResolver(ctx);
252
+ if (xaiOAuthKey) {
253
+ const borrowedSharedEnvKey =
254
+ xaiOAuthOrigin?.kind === "oauth" &&
255
+ Boolean($env.XAI_API_KEY) &&
256
+ xaiOAuthKey === $env.XAI_API_KEY &&
257
+ xaiOAuthKey !== $env.XAI_OAUTH_TOKEN;
258
+ if (!borrowedSharedEnvKey) return xaiOAuthKey;
259
+ }
260
+ return xaiResolver(ctx);
261
+ };
262
+ }
263
+
264
+ /** Execute xAI Responses API web search. */
265
+ export async function searchXAI(params: SearchParams): Promise<SearchResponse> {
266
+ const keyOrResolver: ApiKey = resolveXAIWebSearchApiKey(params);
271
267
 
272
268
  const resultCap = clampNumResults(params.numSearchResults ?? params.limit, DEFAULT_NUM_RESULTS, MAX_NUM_RESULTS);
273
269
  const response = await withAuth(keyOrResolver, (key: string) => callXAIResponses(key, params), {
@@ -283,7 +279,7 @@ export class XAIProvider extends SearchProvider {
283
279
  readonly label = "xAI";
284
280
 
285
281
  isAvailable(authStorage: AuthStorage): boolean {
286
- return authStorage.hasAuth("xai");
282
+ return shouldPreferXAIOAuth(authStorage) || authStorage.hasAuth("xai");
287
283
  }
288
284
 
289
285
  search(params: SearchParams): Promise<SearchResponse> {