@oh-my-pi/pi-coding-agent 16.3.6 → 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 (771) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/cli.js +3052 -3037
  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/hashline/execute.d.ts +4 -4
  136. package/dist/types/edit/hashline/filesystem.d.ts +3 -3
  137. package/dist/types/edit/hashline/index.d.ts +5 -5
  138. package/dist/types/edit/index.d.ts +19 -19
  139. package/dist/types/edit/modes/apply-patch.d.ts +1 -1
  140. package/dist/types/edit/modes/patch.d.ts +3 -3
  141. package/dist/types/edit/modes/replace.d.ts +3 -3
  142. package/dist/types/edit/renderer.d.ts +15 -15
  143. package/dist/types/edit/snapshot-details.d.ts +1 -1
  144. package/dist/types/edit/streaming.d.ts +2 -2
  145. package/dist/types/eval/agent-bridge.d.ts +4 -4
  146. package/dist/types/eval/backend-helpers.d.ts +3 -3
  147. package/dist/types/eval/backend.d.ts +2 -2
  148. package/dist/types/eval/bridge-timeout.d.ts +1 -1
  149. package/dist/types/eval/budget-bridge.d.ts +2 -2
  150. package/dist/types/eval/completion-bridge.d.ts +2 -2
  151. package/dist/types/eval/concurrency-bridge.d.ts +2 -2
  152. package/dist/types/eval/executor-base.d.ts +3 -3
  153. package/dist/types/eval/index.d.ts +6 -6
  154. package/dist/types/eval/jl/executor.d.ts +4 -4
  155. package/dist/types/eval/jl/index.d.ts +2 -2
  156. package/dist/types/eval/jl/kernel.d.ts +5 -5
  157. package/dist/types/eval/js/context-manager.d.ts +4 -4
  158. package/dist/types/eval/js/executor.d.ts +3 -3
  159. package/dist/types/eval/js/index.d.ts +2 -2
  160. package/dist/types/eval/js/shared/helpers.d.ts +1 -1
  161. package/dist/types/eval/js/shared/runtime.d.ts +2 -2
  162. package/dist/types/eval/js/tool-bridge.d.ts +5 -5
  163. package/dist/types/eval/js/worker-core.d.ts +1 -1
  164. package/dist/types/eval/js/worker-protocol.d.ts +2 -2
  165. package/dist/types/eval/kernel-base.d.ts +1 -1
  166. package/dist/types/eval/py/executor.d.ts +3 -3
  167. package/dist/types/eval/py/index.d.ts +2 -2
  168. package/dist/types/eval/py/kernel.d.ts +5 -5
  169. package/dist/types/eval/py/tool-bridge.d.ts +2 -2
  170. package/dist/types/eval/rb/executor.d.ts +3 -3
  171. package/dist/types/eval/rb/index.d.ts +2 -2
  172. package/dist/types/eval/rb/kernel.d.ts +6 -6
  173. package/dist/types/eval/session-id.d.ts +1 -1
  174. package/dist/types/eval/types.d.ts +1 -1
  175. package/dist/types/exa/index.d.ts +2 -2
  176. package/dist/types/exa/mcp-client.d.ts +3 -3
  177. package/dist/types/exec/bash-executor.d.ts +1 -1
  178. package/dist/types/export/html/index.d.ts +2 -2
  179. package/dist/types/export/share.d.ts +3 -3
  180. package/dist/types/export/ttsr.d.ts +2 -2
  181. package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +2 -2
  182. package/dist/types/extensibility/custom-commands/bundled/review/index.d.ts +2 -2
  183. package/dist/types/extensibility/custom-commands/index.d.ts +2 -2
  184. package/dist/types/extensibility/custom-commands/loader.d.ts +1 -1
  185. package/dist/types/extensibility/custom-commands/types.d.ts +3 -3
  186. package/dist/types/extensibility/custom-tools/index.d.ts +3 -3
  187. package/dist/types/extensibility/custom-tools/loader.d.ts +3 -3
  188. package/dist/types/extensibility/custom-tools/types.d.ts +12 -12
  189. package/dist/types/extensibility/custom-tools/wrapper.d.ts +2 -2
  190. package/dist/types/extensibility/extensions/compact-handler.d.ts +1 -1
  191. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +5 -5
  192. package/dist/types/extensibility/extensions/index.d.ts +5 -5
  193. package/dist/types/extensibility/extensions/loader.d.ts +2 -2
  194. package/dist/types/extensibility/extensions/model-api.d.ts +3 -3
  195. package/dist/types/extensibility/extensions/runner.d.ts +6 -6
  196. package/dist/types/extensibility/extensions/types.d.ts +43 -31
  197. package/dist/types/extensibility/extensions/wrapper.d.ts +2 -2
  198. package/dist/types/extensibility/hooks/index.d.ts +6 -6
  199. package/dist/types/extensibility/hooks/loader.d.ts +4 -4
  200. package/dist/types/extensibility/hooks/runner.d.ts +5 -5
  201. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +1 -1
  202. package/dist/types/extensibility/hooks/types.d.ts +18 -18
  203. package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +12 -4
  204. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +194 -5
  205. package/dist/types/extensibility/plugins/doctor.d.ts +1 -1
  206. package/dist/types/extensibility/plugins/index.d.ts +7 -7
  207. package/dist/types/extensibility/plugins/installer.d.ts +1 -1
  208. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +1 -1
  209. package/dist/types/extensibility/plugins/loader.d.ts +1 -1
  210. package/dist/types/extensibility/plugins/manager.d.ts +1 -1
  211. package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +1 -1
  212. package/dist/types/extensibility/plugins/marketplace/index.d.ts +6 -6
  213. package/dist/types/extensibility/plugins/marketplace/manager.d.ts +1 -1
  214. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +1 -1
  215. package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +1 -1
  216. package/dist/types/extensibility/plugins/runtime-config.d.ts +1 -1
  217. package/dist/types/extensibility/session-handler-types.d.ts +1 -1
  218. package/dist/types/extensibility/shared-events.d.ts +4 -4
  219. package/dist/types/extensibility/skills.d.ts +3 -3
  220. package/dist/types/extensibility/slash-commands.d.ts +1 -1
  221. package/dist/types/extensibility/typebox.d.ts +1 -1
  222. package/dist/types/extensibility/utils.d.ts +1 -1
  223. package/dist/types/goals/guided-setup.d.ts +1 -1
  224. package/dist/types/goals/index.d.ts +3 -3
  225. package/dist/types/goals/runtime.d.ts +1 -1
  226. package/dist/types/goals/state.d.ts +1 -1
  227. package/dist/types/goals/tools/goal-tool.d.ts +4 -4
  228. package/dist/types/hindsight/backend.d.ts +2 -2
  229. package/dist/types/hindsight/bank.d.ts +2 -2
  230. package/dist/types/hindsight/client.d.ts +1 -1
  231. package/dist/types/hindsight/config.d.ts +1 -1
  232. package/dist/types/hindsight/index.d.ts +8 -8
  233. package/dist/types/hindsight/mental-models.d.ts +3 -3
  234. package/dist/types/hindsight/state.d.ts +5 -5
  235. package/dist/types/hindsight/transcript.d.ts +2 -2
  236. package/dist/types/index.d.ts +38 -38
  237. package/dist/types/internal-urls/agent-protocol.d.ts +1 -1
  238. package/dist/types/internal-urls/artifact-protocol.d.ts +1 -1
  239. package/dist/types/internal-urls/filesystem-resource.d.ts +1 -1
  240. package/dist/types/internal-urls/history-protocol.d.ts +1 -1
  241. package/dist/types/internal-urls/index.d.ts +16 -16
  242. package/dist/types/internal-urls/issue-pr-protocol.d.ts +1 -1
  243. package/dist/types/internal-urls/local-protocol.d.ts +1 -1
  244. package/dist/types/internal-urls/mcp-protocol.d.ts +1 -1
  245. package/dist/types/internal-urls/memory-protocol.d.ts +1 -1
  246. package/dist/types/internal-urls/omp-protocol.d.ts +1 -1
  247. package/dist/types/internal-urls/parse.d.ts +1 -1
  248. package/dist/types/internal-urls/router.d.ts +1 -1
  249. package/dist/types/internal-urls/rule-protocol.d.ts +1 -1
  250. package/dist/types/internal-urls/skill-protocol.d.ts +1 -1
  251. package/dist/types/internal-urls/ssh-protocol.d.ts +1 -1
  252. package/dist/types/internal-urls/types.d.ts +2 -2
  253. package/dist/types/internal-urls/vault-protocol.d.ts +1 -1
  254. package/dist/types/irc/bus.d.ts +2 -2
  255. package/dist/types/lib/xai-http.d.ts +1 -1
  256. package/dist/types/lsp/client.d.ts +23 -1
  257. package/dist/types/lsp/clients/biome-client.d.ts +1 -1
  258. package/dist/types/lsp/clients/index.d.ts +4 -4
  259. package/dist/types/lsp/clients/lsp-linter-client.d.ts +1 -1
  260. package/dist/types/lsp/clients/swiftlint-client.d.ts +1 -1
  261. package/dist/types/lsp/config.d.ts +1 -1
  262. package/dist/types/lsp/diagnostics-ledger.d.ts +1 -1
  263. package/dist/types/lsp/edits.d.ts +1 -1
  264. package/dist/types/lsp/index.d.ts +6 -6
  265. package/dist/types/lsp/render.d.ts +2 -2
  266. package/dist/types/lsp/startup-events.d.ts +1 -1
  267. package/dist/types/lsp/utils.d.ts +2 -2
  268. package/dist/types/main.d.ts +12 -12
  269. package/dist/types/markit/converters/docx.d.ts +1 -1
  270. package/dist/types/markit/converters/epub.d.ts +1 -1
  271. package/dist/types/markit/converters/pdf/columns.d.ts +1 -1
  272. package/dist/types/markit/converters/pdf/extract.d.ts +1 -1
  273. package/dist/types/markit/converters/pdf/grid.d.ts +1 -1
  274. package/dist/types/markit/converters/pdf/headers.d.ts +1 -1
  275. package/dist/types/markit/converters/pdf/index.d.ts +1 -1
  276. package/dist/types/markit/converters/pdf/render.d.ts +1 -1
  277. package/dist/types/markit/converters/pptx.d.ts +1 -1
  278. package/dist/types/markit/converters/xlsx.d.ts +1 -1
  279. package/dist/types/markit/index.d.ts +2 -2
  280. package/dist/types/markit/registry.d.ts +1 -1
  281. package/dist/types/mcp/client.d.ts +1 -1
  282. package/dist/types/mcp/config-writer.d.ts +1 -1
  283. package/dist/types/mcp/config.d.ts +2 -2
  284. package/dist/types/mcp/index.d.ts +12 -12
  285. package/dist/types/mcp/loader.d.ts +5 -5
  286. package/dist/types/mcp/manager.d.ts +7 -7
  287. package/dist/types/mcp/oauth-credentials.d.ts +3 -3
  288. package/dist/types/mcp/oauth-flow.d.ts +1 -1
  289. package/dist/types/mcp/render.d.ts +3 -3
  290. package/dist/types/mcp/smithery-registry.d.ts +1 -1
  291. package/dist/types/mcp/tool-bridge.d.ts +5 -5
  292. package/dist/types/mcp/tool-cache.d.ts +2 -2
  293. package/dist/types/mcp/transports/http.d.ts +1 -1
  294. package/dist/types/mcp/transports/index.d.ts +3 -3
  295. package/dist/types/mcp/transports/sse.d.ts +1 -1
  296. package/dist/types/mcp/transports/stdio.d.ts +1 -1
  297. package/dist/types/mcp/types.d.ts +1 -1
  298. package/dist/types/memories/index.d.ts +4 -4
  299. package/dist/types/memory-backend/index.d.ts +7 -7
  300. package/dist/types/memory-backend/local-backend.d.ts +1 -1
  301. package/dist/types/memory-backend/off-backend.d.ts +1 -1
  302. package/dist/types/memory-backend/resolve.d.ts +2 -2
  303. package/dist/types/memory-backend/runtime.d.ts +2 -2
  304. package/dist/types/memory-backend/types.d.ts +5 -5
  305. package/dist/types/mnemopi/backend.d.ts +2 -2
  306. package/dist/types/mnemopi/config.d.ts +1 -1
  307. package/dist/types/mnemopi/embed-client.d.ts +2 -2
  308. package/dist/types/mnemopi/embed-worker.d.ts +1 -1
  309. package/dist/types/mnemopi/index.d.ts +3 -3
  310. package/dist/types/mnemopi/state.d.ts +38 -2
  311. package/dist/types/modes/acp/acp-agent.d.ts +2 -2
  312. package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -1
  313. package/dist/types/modes/acp/acp-event-mapper.d.ts +1 -1
  314. package/dist/types/modes/acp/acp-mode.d.ts +1 -1
  315. package/dist/types/modes/acp/index.d.ts +2 -2
  316. package/dist/types/modes/components/advisor-config.d.ts +3 -3
  317. package/dist/types/modes/components/advisor-message.d.ts +2 -2
  318. package/dist/types/modes/components/agent-dashboard.d.ts +2 -2
  319. package/dist/types/modes/components/agent-hub.d.ts +11 -9
  320. package/dist/types/modes/components/agent-transcript-viewer.d.ts +6 -6
  321. package/dist/types/modes/components/assistant-message.d.ts +2 -2
  322. package/dist/types/modes/components/background-tan-message.d.ts +2 -2
  323. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  324. package/dist/types/modes/components/bordered-loader.d.ts +1 -1
  325. package/dist/types/modes/components/chat-transcript-builder.d.ts +3 -3
  326. package/dist/types/modes/components/collab-prompt-message.d.ts +2 -2
  327. package/dist/types/modes/components/compaction-summary-message.d.ts +1 -1
  328. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  329. package/dist/types/modes/components/custom-editor.d.ts +1 -1
  330. package/dist/types/modes/components/custom-message.d.ts +2 -2
  331. package/dist/types/modes/components/eval-execution.d.ts +1 -1
  332. package/dist/types/modes/components/execution-shared.d.ts +1 -1
  333. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +2 -2
  334. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  335. package/dist/types/modes/components/extensions/index.d.ts +5 -5
  336. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  337. package/dist/types/modes/components/extensions/state-manager.d.ts +1 -1
  338. package/dist/types/modes/components/extensions/types.d.ts +1 -1
  339. package/dist/types/modes/components/footer.d.ts +1 -1
  340. package/dist/types/modes/components/history-search.d.ts +1 -1
  341. package/dist/types/modes/components/hook-message.d.ts +2 -2
  342. package/dist/types/modes/components/index.d.ts +38 -38
  343. package/dist/types/modes/components/keybinding-hints.d.ts +1 -1
  344. package/dist/types/modes/components/logout-account-selector.d.ts +1 -1
  345. package/dist/types/modes/components/mcp-add-wizard.d.ts +1 -1
  346. package/dist/types/modes/components/message-frame.d.ts +1 -1
  347. package/dist/types/modes/components/model-selector.d.ts +3 -3
  348. package/dist/types/modes/components/oauth-selector.d.ts +1 -1
  349. package/dist/types/modes/components/plan-review-overlay.d.ts +1 -1
  350. package/dist/types/modes/components/plugin-settings.d.ts +3 -3
  351. package/dist/types/modes/components/read-tool-group.d.ts +1 -1
  352. package/dist/types/modes/components/reset-usage-selector.d.ts +1 -1
  353. package/dist/types/modes/components/segment-track.d.ts +1 -1
  354. package/dist/types/modes/components/session-selector.d.ts +1 -1
  355. package/dist/types/modes/components/settings-defs.d.ts +1 -1
  356. package/dist/types/modes/components/settings-selector.d.ts +2 -2
  357. package/dist/types/modes/components/skill-message.d.ts +1 -1
  358. package/dist/types/modes/components/status-line/component.d.ts +2 -2
  359. package/dist/types/modes/components/status-line/context-thresholds.d.ts +1 -1
  360. package/dist/types/modes/components/status-line/index.d.ts +5 -5
  361. package/dist/types/modes/components/status-line/presets.d.ts +1 -1
  362. package/dist/types/modes/components/status-line/segments.d.ts +2 -2
  363. package/dist/types/modes/components/status-line/separators.d.ts +2 -2
  364. package/dist/types/modes/components/status-line/types.d.ts +8 -4
  365. package/dist/types/modes/components/tiny-title-download-progress.d.ts +2 -2
  366. package/dist/types/modes/components/todo-reminder.d.ts +1 -1
  367. package/dist/types/modes/components/tool-execution.d.ts +1 -1
  368. package/dist/types/modes/components/tree-selector.d.ts +2 -2
  369. package/dist/types/modes/components/ttsr-notification.d.ts +1 -1
  370. package/dist/types/modes/controllers/btw-controller.d.ts +1 -1
  371. package/dist/types/modes/controllers/command-controller-shared.d.ts +2 -2
  372. package/dist/types/modes/controllers/command-controller.d.ts +7 -7
  373. package/dist/types/modes/controllers/event-controller.d.ts +3 -3
  374. package/dist/types/modes/controllers/extension-ui-controller.d.ts +5 -5
  375. package/dist/types/modes/controllers/extension-ui-controller.test.d.ts +1 -0
  376. package/dist/types/modes/controllers/input-controller.d.ts +2 -2
  377. package/dist/types/modes/controllers/mcp-command-controller.d.ts +1 -1
  378. package/dist/types/modes/controllers/omfg-controller.d.ts +1 -1
  379. package/dist/types/modes/controllers/omfg-rule.d.ts +1 -1
  380. package/dist/types/modes/controllers/selector-controller.d.ts +2 -2
  381. package/dist/types/modes/controllers/session-focus-controller.d.ts +4 -4
  382. package/dist/types/modes/controllers/ssh-command-controller.d.ts +1 -1
  383. package/dist/types/modes/controllers/streaming-reveal.d.ts +11 -3
  384. package/dist/types/modes/controllers/tan-command-controller.d.ts +1 -1
  385. package/dist/types/modes/controllers/todo-command-controller.d.ts +1 -1
  386. package/dist/types/modes/controllers/tool-args-reveal.d.ts +6 -2
  387. package/dist/types/modes/image-references.d.ts +1 -1
  388. package/dist/types/modes/index.d.ts +3 -3
  389. package/dist/types/modes/interactive-mode.d.ts +34 -34
  390. package/dist/types/modes/orchestrate.d.ts +1 -1
  391. package/dist/types/modes/print-mode.d.ts +1 -1
  392. package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -1
  393. package/dist/types/modes/rpc/host-tools.d.ts +1 -1
  394. package/dist/types/modes/rpc/host-uris.d.ts +3 -3
  395. package/dist/types/modes/rpc/rpc-client.d.ts +3 -3
  396. package/dist/types/modes/rpc/rpc-mode.d.ts +6 -6
  397. package/dist/types/modes/rpc/rpc-subagents.d.ts +3 -3
  398. package/dist/types/modes/rpc/rpc-types.d.ts +7 -7
  399. package/dist/types/modes/running-subagent-badge.d.ts +1 -1
  400. package/dist/types/modes/runtime-init.d.ts +2 -2
  401. package/dist/types/modes/session-observer-registry.d.ts +2 -2
  402. package/dist/types/modes/setup-wizard/index.d.ts +6 -6
  403. package/dist/types/modes/setup-wizard/lazy.d.ts +1 -1
  404. package/dist/types/modes/setup-wizard/scenes/glyph.d.ts +1 -1
  405. package/dist/types/modes/setup-wizard/scenes/providers.d.ts +1 -1
  406. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
  407. package/dist/types/modes/setup-wizard/scenes/theme.d.ts +1 -1
  408. package/dist/types/modes/setup-wizard/scenes/types.d.ts +1 -1
  409. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
  410. package/dist/types/modes/setup-wizard/startup-splash.d.ts +1 -1
  411. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +2 -2
  412. package/dist/types/modes/shared.d.ts +1 -1
  413. package/dist/types/modes/skill-command.d.ts +2 -2
  414. package/dist/types/modes/theme/shimmer.d.ts +1 -1
  415. package/dist/types/modes/theme/theme.d.ts +1 -1
  416. package/dist/types/modes/types.d.ts +31 -31
  417. package/dist/types/modes/ultrathink.d.ts +1 -1
  418. package/dist/types/modes/utils/context-usage.d.ts +5 -5
  419. package/dist/types/modes/utils/hotkeys-markdown.d.ts +1 -1
  420. package/dist/types/modes/utils/interactive-context-helpers.d.ts +2 -2
  421. package/dist/types/modes/utils/tools-markdown.d.ts +1 -1
  422. package/dist/types/modes/utils/transcript-render-helpers.d.ts +10 -2
  423. package/dist/types/modes/utils/transcript-render-helpers.test.d.ts +1 -0
  424. package/dist/types/modes/utils/ui-helpers.d.ts +2 -2
  425. package/dist/types/modes/workflow.d.ts +1 -1
  426. package/dist/types/plan-mode/plan-handoff.d.ts +1 -1
  427. package/dist/types/registry/agent-lifecycle.d.ts +2 -2
  428. package/dist/types/registry/agent-registry.d.ts +1 -1
  429. package/dist/types/sdk.d.ts +40 -36
  430. package/dist/types/secrets/index.d.ts +2 -2
  431. package/dist/types/secrets/obfuscator.d.ts +1 -1
  432. package/dist/types/session/agent-session.d.ts +56 -42
  433. package/dist/types/session/agent-storage.d.ts +1 -1
  434. package/dist/types/session/auth-broker-config.d.ts +1 -1
  435. package/dist/types/session/codex-auto-reset.d.ts +1 -1
  436. package/dist/types/session/exit-diagnostics.d.ts +1 -1
  437. package/dist/types/session/indexed-session-storage.d.ts +2 -2
  438. package/dist/types/session/messages.d.ts +22 -3
  439. package/dist/types/session/redis-session-storage.d.ts +1 -1
  440. package/dist/types/session/session-context.d.ts +1 -1
  441. package/dist/types/session/session-entries.d.ts +4 -0
  442. package/dist/types/session/session-listing.d.ts +1 -1
  443. package/dist/types/session/session-loader.d.ts +4 -4
  444. package/dist/types/session/session-manager.d.ts +9 -8
  445. package/dist/types/session/session-migrations.d.ts +1 -1
  446. package/dist/types/session/session-paths.d.ts +1 -1
  447. package/dist/types/session/session-persistence.d.ts +2 -2
  448. package/dist/types/session/session-storage.d.ts +1 -1
  449. package/dist/types/session/session-title-slot.d.ts +1 -1
  450. package/dist/types/session/settings-stream-fn.d.ts +1 -1
  451. package/dist/types/session/sql-session-storage.d.ts +1 -1
  452. package/dist/types/session/unexpected-stop-classifier.d.ts +2 -2
  453. package/dist/types/slash-commands/acp-builtins.d.ts +2 -2
  454. package/dist/types/slash-commands/available-commands.d.ts +5 -5
  455. package/dist/types/slash-commands/builtin-registry.d.ts +2 -2
  456. package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +1 -1
  457. package/dist/types/slash-commands/helpers/context-report.d.ts +1 -1
  458. package/dist/types/slash-commands/helpers/format.d.ts +1 -1
  459. package/dist/types/slash-commands/helpers/logout.d.ts +1 -1
  460. package/dist/types/slash-commands/helpers/marketplace-manager.d.ts +2 -2
  461. package/dist/types/slash-commands/helpers/mcp.d.ts +1 -1
  462. package/dist/types/slash-commands/helpers/parse.d.ts +1 -1
  463. package/dist/types/slash-commands/helpers/reset-usage.d.ts +1 -1
  464. package/dist/types/slash-commands/helpers/ssh.d.ts +1 -1
  465. package/dist/types/slash-commands/helpers/todo.d.ts +1 -1
  466. package/dist/types/slash-commands/helpers/usage-report.d.ts +1 -1
  467. package/dist/types/slash-commands/types.d.ts +6 -4
  468. package/dist/types/ssh/file-transfer.d.ts +1 -1
  469. package/dist/types/ssh/ssh-executor.d.ts +1 -1
  470. package/dist/types/ssh/sshfs-mount.d.ts +1 -1
  471. package/dist/types/stt/asr-client.d.ts +3 -3
  472. package/dist/types/stt/asr-protocol.d.ts +1 -1
  473. package/dist/types/stt/asr-worker.d.ts +1 -1
  474. package/dist/types/stt/downloader.d.ts +1 -1
  475. package/dist/types/stt/index.d.ts +8 -8
  476. package/dist/types/stt/models.d.ts +1 -1
  477. package/dist/types/system-prompt.d.ts +4 -4
  478. package/dist/types/task/agents.d.ts +1 -1
  479. package/dist/types/task/discovery.d.ts +1 -1
  480. package/dist/types/task/executor.d.ts +20 -20
  481. package/dist/types/task/index.d.ts +11 -11
  482. package/dist/types/task/isolation-runner.d.ts +7 -6
  483. package/dist/types/task/persisted-revive.d.ts +5 -5
  484. package/dist/types/task/provider-concurrency.d.ts +2 -2
  485. package/dist/types/task/render.d.ts +3 -3
  486. package/dist/types/task/renderer.d.ts +1 -1
  487. package/dist/types/task/repair-args.d.ts +1 -1
  488. package/dist/types/task/subprocess-tool-registry.d.ts +1 -1
  489. package/dist/types/task/types.d.ts +2 -2
  490. package/dist/types/task/yield-assembly.d.ts +1 -1
  491. package/dist/types/tiny/title-client.d.ts +2 -2
  492. package/dist/types/tiny/title-protocol.d.ts +1 -1
  493. package/dist/types/tiny/worker.d.ts +1 -1
  494. package/dist/types/tool-discovery/mode.d.ts +2 -2
  495. package/dist/types/tools/__tests__/glob.test.d.ts +1 -0
  496. package/dist/types/tools/acp-bridge.d.ts +2 -2
  497. package/dist/types/tools/ask.d.ts +3 -3
  498. package/dist/types/tools/ast-edit.d.ts +4 -4
  499. package/dist/types/tools/ast-grep.d.ts +4 -4
  500. package/dist/types/tools/bash-command-fixup.d.ts +3 -11
  501. package/dist/types/tools/bash-interactive.d.ts +1 -1
  502. package/dist/types/tools/bash-interceptor.d.ts +1 -1
  503. package/dist/types/tools/bash-skill-urls.d.ts +3 -3
  504. package/dist/types/tools/bash.d.ts +4 -4
  505. package/dist/types/tools/browser/cmux/cmux-tab.d.ts +6 -6
  506. package/dist/types/tools/browser/cmux/rpc.d.ts +1 -1
  507. package/dist/types/tools/browser/registry.d.ts +3 -3
  508. package/dist/types/tools/browser/render.d.ts +3 -3
  509. package/dist/types/tools/browser/tab-supervisor.d.ts +4 -4
  510. package/dist/types/tools/browser/tab-worker.d.ts +1 -1
  511. package/dist/types/tools/browser.d.ts +9 -9
  512. package/dist/types/tools/checkpoint.d.ts +2 -2
  513. package/dist/types/tools/conflict-detect.d.ts +1 -1
  514. package/dist/types/tools/context.d.ts +2 -2
  515. package/dist/types/tools/debug.d.ts +4 -4
  516. package/dist/types/tools/eval-backends.d.ts +1 -1
  517. package/dist/types/tools/eval-render.d.ts +3 -3
  518. package/dist/types/tools/eval.d.ts +3 -3
  519. package/dist/types/tools/fetch.d.ts +7 -7
  520. package/dist/types/tools/gh-renderer.d.ts +3 -3
  521. package/dist/types/tools/gh.d.ts +5 -5
  522. package/dist/types/tools/github-cache.d.ts +1 -1
  523. package/dist/types/tools/glob.d.ts +7 -5
  524. package/dist/types/tools/grep.d.ts +5 -5
  525. package/dist/types/tools/image-gen.d.ts +2 -2
  526. package/dist/types/tools/index.d.ts +70 -70
  527. package/dist/types/tools/inspect-image-renderer.d.ts +2 -2
  528. package/dist/types/tools/inspect-image.d.ts +2 -2
  529. package/dist/types/tools/irc.d.ts +5 -5
  530. package/dist/types/tools/job.d.ts +3 -3
  531. package/dist/types/tools/json-tree.d.ts +1 -1
  532. package/dist/types/tools/learn.d.ts +1 -1
  533. package/dist/types/tools/list-limit.d.ts +1 -1
  534. package/dist/types/tools/manage-skill.d.ts +1 -1
  535. package/dist/types/tools/memory-edit.d.ts +1 -1
  536. package/dist/types/tools/memory-recall.d.ts +1 -1
  537. package/dist/types/tools/memory-reflect.d.ts +1 -1
  538. package/dist/types/tools/memory-render.d.ts +2 -2
  539. package/dist/types/tools/memory-retain.d.ts +1 -1
  540. package/dist/types/tools/output-meta.d.ts +3 -3
  541. package/dist/types/tools/path-utils.d.ts +2 -2
  542. package/dist/types/tools/plan-mode-guard.d.ts +1 -1
  543. package/dist/types/tools/read.d.ts +7 -7
  544. package/dist/types/tools/render-utils.d.ts +3 -3
  545. package/dist/types/tools/renderers.d.ts +2 -2
  546. package/dist/types/tools/report-tool-issue.d.ts +2 -2
  547. package/dist/types/tools/resolve.d.ts +3 -3
  548. package/dist/types/tools/review.d.ts +2 -2
  549. package/dist/types/tools/search-tool-bm25.d.ts +4 -4
  550. package/dist/types/tools/ssh.d.ts +5 -5
  551. package/dist/types/tools/todo.d.ts +4 -4
  552. package/dist/types/tools/tool-result.d.ts +2 -2
  553. package/dist/types/tools/tts.d.ts +1 -1
  554. package/dist/types/tools/write.d.ts +7 -7
  555. package/dist/types/tools/yield.d.ts +1 -1
  556. package/dist/types/tts/index.d.ts +10 -10
  557. package/dist/types/tts/models.d.ts +1 -1
  558. package/dist/types/tts/speech-enhancer.d.ts +2 -2
  559. package/dist/types/tts/streaming-player.d.ts +1 -1
  560. package/dist/types/tts/tts-client.d.ts +2 -2
  561. package/dist/types/tts/tts-protocol.d.ts +1 -1
  562. package/dist/types/tts/tts-worker.d.ts +1 -1
  563. package/dist/types/tts/vocalizer.d.ts +7 -1
  564. package/dist/types/tui/code-cell.d.ts +1 -1
  565. package/dist/types/tui/file-list.d.ts +1 -1
  566. package/dist/types/tui/index.d.ts +9 -9
  567. package/dist/types/tui/output-block.d.ts +2 -2
  568. package/dist/types/tui/status-line.d.ts +2 -2
  569. package/dist/types/tui/tree-list.d.ts +2 -2
  570. package/dist/types/tui/types.d.ts +1 -1
  571. package/dist/types/tui/utils.d.ts +2 -2
  572. package/dist/types/utils/changelog.d.ts +1 -1
  573. package/dist/types/utils/commit-message-generator.d.ts +2 -2
  574. package/dist/types/utils/git.d.ts +1 -1
  575. package/dist/types/utils/image-loading.d.ts +1 -1
  576. package/dist/types/utils/image-vision-fallback.d.ts +3 -3
  577. package/dist/types/utils/markit.d.ts +1 -1
  578. package/dist/types/utils/title-generator.d.ts +2 -2
  579. package/dist/types/web/parallel.d.ts +1 -1
  580. package/dist/types/web/scrapers/artifacthub.d.ts +1 -1
  581. package/dist/types/web/scrapers/arxiv.d.ts +1 -1
  582. package/dist/types/web/scrapers/aur.d.ts +1 -1
  583. package/dist/types/web/scrapers/biorxiv.d.ts +1 -1
  584. package/dist/types/web/scrapers/bluesky.d.ts +1 -1
  585. package/dist/types/web/scrapers/brew.d.ts +1 -1
  586. package/dist/types/web/scrapers/cheatsh.d.ts +1 -1
  587. package/dist/types/web/scrapers/chocolatey.d.ts +1 -1
  588. package/dist/types/web/scrapers/choosealicense.d.ts +1 -1
  589. package/dist/types/web/scrapers/cisa-kev.d.ts +1 -1
  590. package/dist/types/web/scrapers/clojars.d.ts +1 -1
  591. package/dist/types/web/scrapers/coingecko.d.ts +1 -1
  592. package/dist/types/web/scrapers/crates-io.d.ts +1 -1
  593. package/dist/types/web/scrapers/crossref.d.ts +1 -1
  594. package/dist/types/web/scrapers/devto.d.ts +1 -1
  595. package/dist/types/web/scrapers/discogs.d.ts +1 -1
  596. package/dist/types/web/scrapers/discourse.d.ts +1 -1
  597. package/dist/types/web/scrapers/dockerhub.d.ts +1 -1
  598. package/dist/types/web/scrapers/docs-rs.d.ts +8 -1
  599. package/dist/types/web/scrapers/fdroid.d.ts +1 -1
  600. package/dist/types/web/scrapers/firefox-addons.d.ts +1 -1
  601. package/dist/types/web/scrapers/flathub.d.ts +1 -1
  602. package/dist/types/web/scrapers/github-gist.d.ts +1 -1
  603. package/dist/types/web/scrapers/github.d.ts +1 -1
  604. package/dist/types/web/scrapers/gitlab.d.ts +1 -1
  605. package/dist/types/web/scrapers/go-pkg.d.ts +1 -1
  606. package/dist/types/web/scrapers/hackage.d.ts +1 -1
  607. package/dist/types/web/scrapers/hackernews.d.ts +1 -1
  608. package/dist/types/web/scrapers/hex.d.ts +1 -1
  609. package/dist/types/web/scrapers/huggingface.d.ts +1 -1
  610. package/dist/types/web/scrapers/iacr.d.ts +1 -1
  611. package/dist/types/web/scrapers/index.d.ts +77 -77
  612. package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +1 -1
  613. package/dist/types/web/scrapers/lemmy.d.ts +1 -1
  614. package/dist/types/web/scrapers/lobsters.d.ts +1 -1
  615. package/dist/types/web/scrapers/mastodon.d.ts +1 -1
  616. package/dist/types/web/scrapers/maven.d.ts +1 -1
  617. package/dist/types/web/scrapers/mdn.d.ts +1 -1
  618. package/dist/types/web/scrapers/metacpan.d.ts +1 -1
  619. package/dist/types/web/scrapers/musicbrainz.d.ts +1 -1
  620. package/dist/types/web/scrapers/npm.d.ts +1 -1
  621. package/dist/types/web/scrapers/nuget.d.ts +1 -1
  622. package/dist/types/web/scrapers/nvd.d.ts +1 -1
  623. package/dist/types/web/scrapers/ollama.d.ts +1 -1
  624. package/dist/types/web/scrapers/open-vsx.d.ts +1 -1
  625. package/dist/types/web/scrapers/opencorporates.d.ts +1 -1
  626. package/dist/types/web/scrapers/openlibrary.d.ts +1 -1
  627. package/dist/types/web/scrapers/orcid.d.ts +1 -1
  628. package/dist/types/web/scrapers/osv.d.ts +1 -1
  629. package/dist/types/web/scrapers/packagist.d.ts +1 -1
  630. package/dist/types/web/scrapers/pub-dev.d.ts +1 -1
  631. package/dist/types/web/scrapers/pubmed.d.ts +1 -1
  632. package/dist/types/web/scrapers/pypi.d.ts +1 -1
  633. package/dist/types/web/scrapers/rawg.d.ts +1 -1
  634. package/dist/types/web/scrapers/readthedocs.d.ts +1 -1
  635. package/dist/types/web/scrapers/reddit.d.ts +1 -1
  636. package/dist/types/web/scrapers/repology.d.ts +1 -1
  637. package/dist/types/web/scrapers/rfc.d.ts +1 -1
  638. package/dist/types/web/scrapers/rubygems.d.ts +1 -1
  639. package/dist/types/web/scrapers/searchcode.d.ts +1 -1
  640. package/dist/types/web/scrapers/sec-edgar.d.ts +1 -1
  641. package/dist/types/web/scrapers/semantic-scholar.d.ts +1 -1
  642. package/dist/types/web/scrapers/snapcraft.d.ts +1 -1
  643. package/dist/types/web/scrapers/sourcegraph.d.ts +1 -1
  644. package/dist/types/web/scrapers/spdx.d.ts +1 -1
  645. package/dist/types/web/scrapers/spotify.d.ts +1 -1
  646. package/dist/types/web/scrapers/stackoverflow.d.ts +1 -1
  647. package/dist/types/web/scrapers/terraform.d.ts +1 -1
  648. package/dist/types/web/scrapers/tldr.d.ts +1 -1
  649. package/dist/types/web/scrapers/twitter.d.ts +1 -1
  650. package/dist/types/web/scrapers/types.d.ts +1 -1
  651. package/dist/types/web/scrapers/vimeo.d.ts +1 -1
  652. package/dist/types/web/scrapers/vscode-marketplace.d.ts +1 -1
  653. package/dist/types/web/scrapers/w3c.d.ts +1 -1
  654. package/dist/types/web/scrapers/wikidata.d.ts +1 -1
  655. package/dist/types/web/scrapers/wikipedia.d.ts +1 -1
  656. package/dist/types/web/scrapers/youtube.d.ts +1 -1
  657. package/dist/types/web/search/index.d.ts +7 -7
  658. package/dist/types/web/search/provider.d.ts +5 -5
  659. package/dist/types/web/search/providers/anthropic.d.ts +3 -3
  660. package/dist/types/web/search/providers/base.d.ts +1 -1
  661. package/dist/types/web/search/providers/brave.d.ts +3 -3
  662. package/dist/types/web/search/providers/codex.d.ts +3 -3
  663. package/dist/types/web/search/providers/duckduckgo.d.ts +3 -3
  664. package/dist/types/web/search/providers/exa.d.ts +3 -3
  665. package/dist/types/web/search/providers/firecrawl.d.ts +3 -3
  666. package/dist/types/web/search/providers/gemini.d.ts +3 -3
  667. package/dist/types/web/search/providers/jina.d.ts +3 -3
  668. package/dist/types/web/search/providers/kagi.d.ts +3 -3
  669. package/dist/types/web/search/providers/kimi.d.ts +3 -3
  670. package/dist/types/web/search/providers/parallel.d.ts +3 -3
  671. package/dist/types/web/search/providers/perplexity.d.ts +3 -3
  672. package/dist/types/web/search/providers/searxng.d.ts +3 -3
  673. package/dist/types/web/search/providers/synthetic.d.ts +3 -3
  674. package/dist/types/web/search/providers/tavily.d.ts +3 -3
  675. package/dist/types/web/search/providers/tinyfish.d.ts +3 -3
  676. package/dist/types/web/search/providers/utils.d.ts +2 -2
  677. package/dist/types/web/search/providers/xai.d.ts +3 -3
  678. package/dist/types/web/search/providers/zai.d.ts +3 -3
  679. package/dist/types/web/search/render.d.ts +3 -3
  680. package/package.json +12 -12
  681. package/src/advisor/__tests__/advisor.test.ts +59 -0
  682. package/src/auto-thinking/classifier.ts +6 -5
  683. package/src/collab/relay-client.ts +73 -7
  684. package/src/config/model-registry.ts +43 -2
  685. package/src/config/model-resolver.ts +1 -1
  686. package/src/config/settings-schema.ts +5 -12
  687. package/src/config/settings.ts +25 -5
  688. package/src/edit/hashline/filesystem.ts +19 -1
  689. package/src/edit/modes/patch.ts +9 -1
  690. package/src/edit/modes/replace.ts +1 -1
  691. package/src/edit/renderer.ts +42 -30
  692. package/src/eval/__tests__/agent-bridge.test.ts +19 -0
  693. package/src/eval/__tests__/budget-bridge.test.ts +12 -1
  694. package/src/eval/agent-bridge.ts +27 -19
  695. package/src/eval/js/context-manager.ts +3 -0
  696. package/src/export/ttsr.ts +10 -0
  697. package/src/extensibility/extensions/loader.ts +2 -2
  698. package/src/extensibility/extensions/types.ts +16 -4
  699. package/src/extensibility/hooks/loader.ts +3 -3
  700. package/src/extensibility/hooks/types.ts +4 -4
  701. package/src/extensibility/legacy-pi-ai-shim.ts +17 -4
  702. package/src/extensibility/legacy-pi-coding-agent-shim.ts +554 -2
  703. package/src/extensibility/plugins/legacy-pi-compat.ts +190 -58
  704. package/src/internal-urls/docs-index.generated.txt +1 -1
  705. package/src/internal-urls/memory-protocol.ts +105 -3
  706. package/src/lsp/client.ts +70 -0
  707. package/src/lsp/index.ts +65 -12
  708. package/src/main.ts +5 -3
  709. package/src/markit/converters/pdf/extract.ts +26 -2
  710. package/src/mnemopi/state.ts +76 -0
  711. package/src/modes/acp/acp-agent.ts +5 -1
  712. package/src/modes/components/agent-hub.ts +27 -9
  713. package/src/modes/components/chat-transcript-builder.ts +7 -3
  714. package/src/modes/components/copy-selector.ts +16 -4
  715. package/src/modes/components/model-selector.ts +17 -17
  716. package/src/modes/components/session-selector.ts +12 -4
  717. package/src/modes/components/status-line/component.ts +4 -0
  718. package/src/modes/components/status-line/segments.ts +6 -5
  719. package/src/modes/components/status-line/types.ts +4 -0
  720. package/src/modes/components/tool-execution.ts +8 -3
  721. package/src/modes/controllers/command-controller.ts +10 -0
  722. package/src/modes/controllers/event-controller.ts +4 -3
  723. package/src/modes/controllers/extension-ui-controller.test.ts +58 -0
  724. package/src/modes/controllers/extension-ui-controller.ts +12 -6
  725. package/src/modes/controllers/input-controller.ts +8 -0
  726. package/src/modes/controllers/selector-controller.ts +18 -9
  727. package/src/modes/controllers/streaming-reveal.ts +12 -5
  728. package/src/modes/controllers/tool-args-reveal.ts +13 -6
  729. package/src/modes/interactive-mode.ts +54 -28
  730. package/src/modes/prompt-action-autocomplete.ts +18 -0
  731. package/src/modes/theme/shimmer.ts +37 -1
  732. package/src/modes/utils/transcript-render-helpers.test.ts +38 -0
  733. package/src/modes/utils/transcript-render-helpers.ts +14 -0
  734. package/src/modes/utils/ui-helpers.ts +5 -1
  735. package/src/prompts/system/workflow-notice.md +1 -1
  736. package/src/prompts/tools/bash.md +9 -7
  737. package/src/prompts/tools/grep.md +1 -1
  738. package/src/prompts/tools/memory-edit.md +2 -0
  739. package/src/prompts/tools/recall.md +2 -0
  740. package/src/sdk.ts +112 -12
  741. package/src/session/agent-session.ts +203 -61
  742. package/src/session/messages.ts +102 -2
  743. package/src/session/session-context.ts +60 -10
  744. package/src/session/session-entries.ts +4 -0
  745. package/src/session/session-history-format.ts +12 -0
  746. package/src/session/session-manager.ts +129 -10
  747. package/src/session/settings-stream-fn.ts +1 -0
  748. package/src/session/unexpected-stop-classifier.ts +6 -3
  749. package/src/slash-commands/builtin-registry.ts +7 -4
  750. package/src/slash-commands/helpers/usage-report.ts +3 -0
  751. package/src/slash-commands/types.ts +2 -0
  752. package/src/task/executor.ts +23 -3
  753. package/src/task/isolation-runner.ts +38 -9
  754. package/src/tools/__tests__/glob.test.ts +37 -0
  755. package/src/tools/acp-bridge.ts +11 -1
  756. package/src/tools/bash-command-fixup.ts +3 -36
  757. package/src/tools/bash.ts +4 -13
  758. package/src/tools/browser/render.ts +6 -4
  759. package/src/tools/glob.ts +11 -1
  760. package/src/tools/index.ts +1 -1
  761. package/src/tools/inspect-image-renderer.ts +5 -4
  762. package/src/tools/read.ts +13 -8
  763. package/src/tools/render-utils.ts +4 -1
  764. package/src/tools/write.ts +9 -7
  765. package/src/tts/speech-enhancer.ts +7 -5
  766. package/src/tts/vocalizer.ts +9 -0
  767. package/src/utils/commit-message-generator.ts +7 -5
  768. package/src/utils/shell-snapshot.ts +10 -0
  769. package/src/utils/title-generator.ts +12 -7
  770. package/src/web/scrapers/docs-rs.ts +12 -1
  771. package/src/web/search/providers/xai.ts +43 -47
@@ -29,6 +29,7 @@ import type { SessionMessageEntry } from "../../session/session-entries";
29
29
  import { theme } from "../theme/theme";
30
30
  import {
31
31
  assistantHasVisibleContent,
32
+ assistantUsageIsBilled,
32
33
  buildAsyncResultBlock,
33
34
  buildFileMentionBlock,
34
35
  buildIrcMessageCard,
@@ -270,13 +271,15 @@ export class ChatTranscriptBuilder {
270
271
  }
271
272
 
272
273
  #appendAssistantMessage(message: Extract<AgentMessage, { role: "assistant" }>): void {
274
+ const hideThinkingBlock = this.deps.hideThinkingBlock?.() ?? false;
275
+ const proseOnlyThinking = this.deps.proseOnlyThinking ? this.deps.proseOnlyThinking() : true;
273
276
  const assistantComponent = new AssistantMessageComponent(
274
277
  message,
275
- this.deps.hideThinkingBlock?.() ?? false,
278
+ hideThinkingBlock,
276
279
  () => this.deps.requestRender(),
277
280
  this.deps.getMessageRenderer ? undefined : [], // placeholder for thinkingRenderers
278
281
  undefined, // placeholder for imageBudget
279
- this.deps.proseOnlyThinking ? this.deps.proseOnlyThinking() : true,
282
+ proseOnlyThinking,
280
283
  );
281
284
  this.container.addChild(assistantComponent);
282
285
 
@@ -354,7 +357,8 @@ export class ChatTranscriptBuilder {
354
357
  }
355
358
  }
356
359
 
357
- this.#pendingUsage = settings.get("display.showTokenUsage") ? message.usage : undefined;
360
+ this.#pendingUsage =
361
+ settings.get("display.showTokenUsage") && assistantUsageIsBilled(message.usage) ? message.usage : undefined;
358
362
  this.#pendingUsageDuration = message.duration;
359
363
  this.#pendingUsageTtft = message.ttft;
360
364
  }
@@ -53,6 +53,8 @@ function gutterCells(hasNext: boolean): string {
53
53
  export class CopySelectorComponent implements Component {
54
54
  #roots: CopyTarget[];
55
55
  #cursorId: string;
56
+ #lastSourceTarget?: CopyTarget;
57
+ #lastSource?: string;
56
58
  #treeRows = MIN_TREE_ROWS;
57
59
  // Reused across renders to wrap preview content to the pane width.
58
60
  #previewText = new Text("", 0, 0);
@@ -65,7 +67,10 @@ export class CopySelectorComponent implements Component {
65
67
  this.#cursorId = roots[0]?.id ?? "";
66
68
  }
67
69
 
68
- invalidate(): void {}
70
+ invalidate(): void {
71
+ this.#lastSourceTarget = undefined;
72
+ this.#lastSource = undefined;
73
+ }
69
74
 
70
75
  #flatten(): FlatNode[] {
71
76
  const out: FlatNode[] = [];
@@ -153,9 +158,16 @@ export class CopySelectorComponent implements Component {
153
158
  // Code/command previews are syntax-highlighted; everything else is shown
154
159
  // as plain text. Both are wrapped (not hard-truncated) to the pane width.
155
160
  const isCode = target.language !== undefined;
156
- const source = isCode
157
- ? highlightCode(replaceTabs(target.preview), target.language).join("\n")
158
- : replaceTabs(target.preview);
161
+ let source: string;
162
+ if (target === this.#lastSourceTarget && this.#lastSource !== undefined) {
163
+ source = this.#lastSource;
164
+ } else {
165
+ source = isCode
166
+ ? highlightCode(replaceTabs(target.preview), target.language).join("\n")
167
+ : replaceTabs(target.preview);
168
+ this.#lastSourceTarget = target;
169
+ this.#lastSource = source;
170
+ }
159
171
  this.#previewText.setText(source);
160
172
  const wrapped = this.#previewText.render(Math.max(1, width - 4));
161
173
 
@@ -704,29 +704,22 @@ export class ModelSelectorComponent extends Container {
704
704
  #filterModels(query: string): void {
705
705
  const activeProviderId = this.#getActiveProviderId();
706
706
 
707
- let baseModels = this.#allModels;
708
- if (activeProviderId) {
709
- baseModels = this.#allModels.filter(m => m.provider === activeProviderId);
710
- }
707
+ const baseModels = activeProviderId
708
+ ? this.#allModels.filter(m => m.provider === activeProviderId)
709
+ : this.#allModels;
711
710
 
712
711
  if (query.trim()) {
713
- // If user is searching from a provider tab, auto-switch to ALL to show global provider results.
714
- if (activeProviderId) {
715
- this.#activeTabIndex = 0;
716
- if (this.#tabBar && this.#tabBar.getActiveIndex() !== 0) {
717
- this.#tabBar.setActiveIndex(0);
718
- return;
719
- }
720
- this.#updateTabBar();
721
- baseModels = this.#allModels;
722
- }
723
-
724
712
  // Match against the displayed "provider/id" string so the user can
725
713
  // type what they see: bare names (`mimo`, `kimi`), provider prefixes
726
714
  // (`openrouter`), or scoped queries (`openrouter/mimo`) all flow
727
715
  // through the same fuzzy matcher. The score is biased by provider-
728
716
  // prefix length, so re-sort by MRU/version afterwards; skip role
729
717
  // rank so a weakly matching default doesn't trump a stronger match.
718
+ //
719
+ // Search stays scoped to the active provider tab. Auto-escaping to
720
+ // ALL on non-empty queries used to let the user pick a same-named
721
+ // model from a different provider and silently persist it under
722
+ // their default role — see issue #4522.
730
723
  const fuzzyMatches = fuzzyFilter(baseModels, query, ({ id, provider }) => `${provider}/${id}`);
731
724
  this.#sortModels(fuzzyMatches, { skipRoleRank: true });
732
725
  this.#filteredModels = fuzzyMatches;
@@ -891,8 +884,15 @@ export class ModelSelectorComponent extends Container {
891
884
  this.#listContainer.addChild(new Text(theme.fg("error", line), 0, 0));
892
885
  }
893
886
  } else if (visibleItems.length === 0) {
894
- const statusMessage = this.#getProviderEmptyStateMessage();
895
- this.#listContainer.addChild(new Text(theme.fg("muted", statusMessage ?? " No matching models"), 0, 0));
887
+ const providerStatus = this.#getProviderEmptyStateMessage();
888
+ const activeProviderId = this.#getActiveProviderId();
889
+ const searching = this.#searchInput.getValue().trim().length > 0;
890
+ const message =
891
+ providerStatus ??
892
+ (searching && activeProviderId
893
+ ? ` No matching models in ${formatProviderTabLabel(activeProviderId)}. Switch to ALL to search every provider.`
894
+ : " No matching models");
895
+ this.#listContainer.addChild(new Text(theme.fg("muted", message), 0, 0));
896
896
  } else {
897
897
  const selected = visibleItems[this.#selectedIndex];
898
898
  if (!selected) {
@@ -414,15 +414,23 @@ class SessionList implements Component {
414
414
  }
415
415
 
416
416
  handleInput(keyData: string): void {
417
- // Delete key - request delete confirmation from parent
418
- if (matchesKey(keyData, "delete")) {
417
+ // Delete key or Backspace on an empty search query — request delete
418
+ // confirmation from the parent. macOS laptops have no dedicated Forward
419
+ // Delete key: Fn+Backspace is the only way to send \e[3~, and many macOS
420
+ // terminals (Terminal.app, some iTerm2 profiles) deliver \x7f for that
421
+ // combo instead. Regular Backspace on an empty query means "delete
422
+ // session"; with a typed query it stays bound to the search Input so users
423
+ // can still edit their filter text.
424
+ if (
425
+ matchesKey(keyData, "delete") ||
426
+ (matchesKey(keyData, "backspace") && this.#searchInput.getValue().length === 0)
427
+ ) {
419
428
  const selected = this.#filteredSessions[this.#selectedIndex];
420
429
  if (selected && this.onDeleteRequest) {
421
430
  this.onDeleteRequest(selected);
422
431
  }
423
432
  return;
424
433
  }
425
-
426
434
  // Up arrow
427
435
  if (matchesSelectUp(keyData)) {
428
436
  this.#selectedIndex = Math.max(0, this.#selectedIndex - 1);
@@ -702,7 +710,7 @@ export class SessionSelectorComponent extends Container {
702
710
  /** Blank · keybinding hint · bottom border. Rendered by {@link render}. */
703
711
  #footerLines(width: number): string[] {
704
712
  const scopeHint = this.#scope === "all" ? "current folder" : "all projects";
705
- const hint = theme.fg("muted", ` [Del delete · Enter select · Tab ${scopeHint} · Esc cancel]`);
713
+ const hint = theme.fg("muted", ` [Del/⌫ delete · Enter select · Tab ${scopeHint} · Esc cancel]`);
706
714
  return ["", hint, "", ...this.#bottomBorder.render(width)];
707
715
  }
708
716
 
@@ -998,6 +998,10 @@ export class StatusLineComponent implements Component {
998
998
  output: 0,
999
999
  cacheRead: 0,
1000
1000
  cacheWrite: 0,
1001
+ totalTokens: 0,
1002
+ orchestrationInput: 0,
1003
+ orchestrationOutput: 0,
1004
+ orchestrationCacheRead: 0,
1001
1005
  premiumRequests: 0,
1002
1006
  cost: 0,
1003
1007
  };
@@ -362,10 +362,11 @@ const tokenTotalSegment: StatusLineSegment = {
362
362
  id: "token_total",
363
363
  render(ctx) {
364
364
  // Excludes cacheRead: that field re-reads the full cached context every
365
- // turn, making the cumulative sum N×context_size. The dedicated cache_read
366
- // segment handles cache monitoring; the cost segment handles billing.
367
- const { input, output, cacheWrite } = ctx.usageStats;
368
- const total = input + output + cacheWrite;
365
+ // turn, making the cumulative sum N×context_size. Orchestration cache read
366
+ // follows the same rule; orchestration input/output remain in the total so
367
+ // provider-side service work is preserved without labeling it prompt input.
368
+ const { input, output, cacheWrite, orchestrationInput, orchestrationOutput } = ctx.usageStats;
369
+ const total = input + output + cacheWrite + orchestrationInput + orchestrationOutput;
369
370
  if (!total) return { content: "", visible: false };
370
371
 
371
372
  const content = withIcon(theme.icon.tokens, formatNumber(total));
@@ -379,7 +380,7 @@ const tokenRateSegment: StatusLineSegment = {
379
380
  const { tokensPerSecond } = ctx.usageStats;
380
381
  if (!tokensPerSecond) return { content: "", visible: false };
381
382
 
382
- const content = withIcon(theme.icon.throughput, `${tokensPerSecond.toFixed(1)}/s`);
383
+ const content = withIcon(theme.icon.throughput, `${tokensPerSecond.toFixed(1)} tok/s`);
383
384
  return { content: theme.fg("statusLineOutput", content), visible: true };
384
385
  },
385
386
  };
@@ -74,6 +74,10 @@ export interface SegmentContext {
74
74
  output: number;
75
75
  cacheRead: number;
76
76
  cacheWrite: number;
77
+ totalTokens: number;
78
+ orchestrationInput: number;
79
+ orchestrationOutput: number;
80
+ orchestrationCacheRead: number;
77
81
  premiumRequests: number;
78
82
  cost: number;
79
83
  tokensPerSecond: number | null;
@@ -167,7 +167,7 @@ export interface ToolExecutionOptions {
167
167
  liveRegion?: TranscriptLiveRegionProbe;
168
168
  }
169
169
 
170
- export interface ToolExecutionHandle {
170
+ export interface ToolExecutionHandle extends Component {
171
171
  updateArgs(args: any, toolCallId?: string): void;
172
172
  updateResult(
173
173
  result: {
@@ -622,7 +622,10 @@ export class ToolExecutionComponent extends Container implements NativeScrollbac
622
622
  const frameCount = theme.spinnerFrames.length;
623
623
  this.#spinnerFrame = sharedSpinnerFrame(frameCount, now);
624
624
  this.#renderState.spinnerFrame = this.#spinnerFrame;
625
- this.#ui.requestRender();
625
+ // Component-scoped: a spinner tick only changes this tool block, so
626
+ // the TUI reuses every other root subtree instead of walking the
627
+ // whole tree (issue #4377).
628
+ this.#ui.requestComponentRender(this);
626
629
  }, SPINNER_RENDER_INTERVAL_MS);
627
630
  } else if (!needsSpinner && this.#spinnerInterval) {
628
631
  clearInterval(this.#spinnerInterval);
@@ -679,7 +682,9 @@ export class ToolExecutionComponent extends Container implements NativeScrollbac
679
682
  this.#spinnerFrame = nextFrame;
680
683
  this.#renderState.spinnerFrame = nextFrame;
681
684
  }
682
- this.#ui.requestRender();
685
+ // Component-scoped: strike animation only mutates this tool block's
686
+ // glyph, so the TUI reuses every other root subtree (issue #4377).
687
+ this.#ui.requestComponentRender(this);
683
688
  }, 65);
684
689
  }
685
690
 
@@ -1121,6 +1121,7 @@ export class CommandController {
1121
1121
  customInstructions?: string,
1122
1122
  mode?: CompactMode,
1123
1123
  beforeFlush?: (outcome: CompactionOutcome) => void | Promise<void>,
1124
+ internalGuidance?: string,
1124
1125
  ): Promise<CompactionOutcome> {
1125
1126
  const entries = this.ctx.sessionManager.getEntries();
1126
1127
  const messageCount = entries.filter(e => e.type === "message").length;
@@ -1130,6 +1131,15 @@ export class CommandController {
1130
1131
  return "ok";
1131
1132
  }
1132
1133
 
1134
+ // `internalGuidance` is a private summarizer directive (plan-mode
1135
+ // "Approve and compact context") that MUST stay off the public
1136
+ // `customInstructions` channel of the `session_before_compact` extension
1137
+ // hook — extensions treat that field as user focus and would otherwise
1138
+ // bias the summary toward the plan boilerplate (issue #4359). Ride it
1139
+ // through as a CompactOptions field instead.
1140
+ if (internalGuidance) {
1141
+ return this.executeCompaction({ internalGuidance, ...(mode ? { mode } : {}) }, false, beforeFlush, mode);
1142
+ }
1133
1143
  return this.executeCompaction(customInstructions, false, beforeFlush, mode);
1134
1144
  }
1135
1145
 
@@ -32,6 +32,7 @@ import { vocalizer } from "../../tts/vocalizer";
32
32
  import { canonicalizeMessage } from "../../utils/thinking-display";
33
33
  import { interruptHint } from "../shared";
34
34
  import { createAssistantMessageComponent } from "../utils/interactive-context-helpers";
35
+ import { assistantUsageIsBilled } from "../utils/transcript-render-helpers";
35
36
  import { StreamingRevealController } from "./streaming-reveal";
36
37
  import { streamingStringKeysForTool, ToolArgsRevealController } from "./tool-args-reveal";
37
38
 
@@ -133,11 +134,11 @@ export class EventController {
133
134
  getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
134
135
  getHideThinkingBlock: () => this.ctx.effectiveHideThinkingBlock,
135
136
  getProseOnlyThinking: () => this.ctx.proseOnlyThinking,
136
- requestRender: () => this.ctx.ui.requestRender(),
137
+ requestRender: component => this.ctx.ui.requestComponentRender(component),
137
138
  });
138
139
  this.#toolArgsReveal = new ToolArgsRevealController({
139
140
  getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
140
- requestRender: () => this.ctx.ui.requestRender(),
141
+ requestRender: component => this.ctx.ui.requestComponentRender(component),
141
142
  });
142
143
  this.#handlers = {
143
144
  agent_start: e => this.#handleAgentStart(e),
@@ -849,7 +850,7 @@ export class EventController {
849
850
  }
850
851
  this.#lastAssistantComponent = this.ctx.streamingComponent;
851
852
  this.#lastAssistantComponent.markTranscriptBlockFinalized();
852
- if (settings.get("display.showTokenUsage")) {
853
+ if (settings.get("display.showTokenUsage") && assistantUsageIsBilled(event.message.usage)) {
853
854
  this.ctx.chatContainer.addChild(
854
855
  createUsageRowBlock(event.message.usage, event.message.duration, event.message.ttft),
855
856
  );
@@ -0,0 +1,58 @@
1
+ import { describe, expect, it, vi } from "bun:test";
2
+ import type { ExtensionUIContext } from "../../extensibility/extensions";
3
+ import { CustomEditor } from "../components/custom-editor";
4
+ import { getEditorTheme } from "../theme/theme";
5
+ import type { InteractiveModeContext } from "../types";
6
+ import { ExtensionUiController } from "./extension-ui-controller";
7
+
8
+ function makeHarness() {
9
+ const editor = new CustomEditor(getEditorTheme());
10
+ const requestRender = vi.fn();
11
+ let uiContext: ExtensionUIContext | undefined;
12
+ const ctx = {
13
+ editor,
14
+ ui: {
15
+ requestRender,
16
+ },
17
+ session: {
18
+ extensionRunner: undefined,
19
+ },
20
+ setToolUIContext(context: ExtensionUIContext, hasUI: boolean): void {
21
+ expect(hasUI).toBe(true);
22
+ uiContext = context;
23
+ },
24
+ } as unknown as InteractiveModeContext;
25
+
26
+ return {
27
+ editor,
28
+ requestRender,
29
+ async init(): Promise<ExtensionUIContext> {
30
+ await new ExtensionUiController(ctx).initHooksAndCustomTools();
31
+ expect(uiContext).toBeDefined();
32
+ return uiContext!;
33
+ },
34
+ };
35
+ }
36
+
37
+ describe("ExtensionUiController editor UI", () => {
38
+ it("requests a render after extension pasteToEditor mutates the prompt", async () => {
39
+ const harness = makeHarness();
40
+ const ui = await harness.init();
41
+
42
+ ui.pasteToEditor("hello");
43
+ ui.pasteToEditor(" world");
44
+
45
+ expect(harness.editor.getText()).toBe("hello world");
46
+ expect(harness.requestRender).toHaveBeenCalledTimes(2);
47
+ });
48
+
49
+ it("requests a render after extension setEditorText replaces the prompt", async () => {
50
+ const harness = makeHarness();
51
+ const ui = await harness.init();
52
+
53
+ ui.setEditorText("hello");
54
+
55
+ expect(harness.editor.getText()).toBe("hello");
56
+ expect(harness.requestRender).toHaveBeenCalledTimes(1);
57
+ });
58
+ });
@@ -24,7 +24,7 @@ import { HookInputComponent } from "../../modes/components/hook-input";
24
24
  import { HookSelectorComponent, type HookSelectorSlider } from "../../modes/components/hook-selector";
25
25
  import { getAvailableThemesWithPaths, getThemeByName, setTheme, type Theme, theme } from "../../modes/theme/theme";
26
26
  import type { InteractiveModeContext, InteractiveSelectorDialogOptions } from "../../modes/types";
27
- import { USER_INTERRUPT_LABEL } from "../../session/messages";
27
+ import { normalizeCustomMessagePayload, USER_INTERRUPT_LABEL } from "../../session/messages";
28
28
  import { setSessionTerminalTitle, setTerminalTitle } from "../../utils/title-generator";
29
29
 
30
30
  const MAX_WIDGET_LINES = 10;
@@ -71,9 +71,13 @@ export class ExtensionUiController {
71
71
  setWidget: (key, content, options) => this.setHookWidget(key, content, options),
72
72
  setTitle: title => setTerminalTitle(title),
73
73
  custom: (factory, options) => this.showHookCustom(factory, options),
74
- setEditorText: text => this.ctx.editor.setText(text),
74
+ setEditorText: text => {
75
+ this.ctx.editor.setText(text);
76
+ this.ctx.ui.requestRender();
77
+ },
75
78
  pasteToEditor: text => {
76
79
  this.ctx.editor.handleInput(`\x1b[200~${text}\x1b[201~`);
80
+ this.ctx.ui.requestRender();
77
81
  },
78
82
  getEditorText: () => this.ctx.editor.getText(),
79
83
  editor: (title, prefill, dialogOptions, editorOptions) =>
@@ -106,9 +110,10 @@ export class ExtensionUiController {
106
110
  const actions: ExtensionActions = {
107
111
  sendMessage: (message, options) => {
108
112
  const wasStreaming = this.ctx.session.isStreaming;
113
+ const normalized = normalizeCustomMessagePayload(message);
109
114
  this.ctx.session
110
- .sendCustomMessage(message, options)
111
- .then(() => this.#applyCustomMessageDisplay(wasStreaming, message.display))
115
+ .sendCustomMessage(normalized, options)
116
+ .then(() => this.#applyCustomMessageDisplay(wasStreaming, normalized.display))
112
117
  .catch((err: unknown) => {
113
118
  this.ctx.showError(
114
119
  `Extension sendMessage failed: ${err instanceof Error ? err.message : String(err)}`,
@@ -342,9 +347,10 @@ export class ExtensionUiController {
342
347
  const actions: ExtensionActions = {
343
348
  sendMessage: (message, options) => {
344
349
  const wasStreaming = this.ctx.session.isStreaming;
350
+ const normalized = normalizeCustomMessagePayload(message);
345
351
  this.ctx.session
346
- .sendCustomMessage(message, options)
347
- .then(() => this.#applyCustomMessageDisplay(wasStreaming, message.display))
352
+ .sendCustomMessage(normalized, options)
353
+ .then(() => this.#applyCustomMessageDisplay(wasStreaming, normalized.display))
348
354
  .catch((err: unknown) => {
349
355
  const errorText = `Extension sendMessage failed: ${err instanceof Error ? err.message : String(err)}`;
350
356
  this.ctx.showError(errorText);
@@ -23,6 +23,7 @@ import { isLowSignalTitleInput } from "../../tiny/text";
23
23
  import { tinyTitleClient } from "../../tiny/title-client";
24
24
  import type { TinyTitleProgressEvent } from "../../tiny/title-protocol";
25
25
  import { shortenPath, TRUNCATE_LENGTHS, truncateToWidth } from "../../tools/render-utils";
26
+ import { vocalizer } from "../../tts/vocalizer";
26
27
  import {
27
28
  copyToClipboard,
28
29
  readImageFromClipboard,
@@ -390,6 +391,13 @@ export class InputController {
390
391
  // Esc must not destroy an in-progress draft; it only disarms a previous empty-editor Esc.
391
392
  this.ctx.lastEscapeTime = 0;
392
393
  this.#clearStreamingEscapeArm();
394
+ } else if (vocalizer.isSpeaking()) {
395
+ // TTS buffers seconds of PCM past the streaming abort, so an Esc
396
+ // arriving after the model stopped would otherwise fall through to
397
+ // the double-Esc gesture while Kokoro reads on. Silence first;
398
+ // tree/branch stays reachable via a second Esc.
399
+ vocalizer.clear();
400
+ this.ctx.lastEscapeTime = 0;
393
401
  } else {
394
402
  // Double-interrupt with empty editor triggers /tree, /branch, or nothing based on setting
395
403
  const action = settings.get("doubleEscapeAction");
@@ -1426,18 +1426,27 @@ export class SelectorController {
1426
1426
  sessionFile: this.ctx.sessionManager.getSessionFile() ?? null,
1427
1427
  });
1428
1428
 
1429
- // The double-← gesture passes requireContent so it stays inert when there
1430
- // are no subagents to show; the explicit hub/observe keys still open the
1431
- // empty roster. The freshly built hub already ran the persisted-subagent
1432
- // scan, so its row count is the authoritative "is there anything to show".
1429
+ const showReadyHub = () => {
1430
+ // The double-← gesture passes requireContent so it stays inert when
1431
+ // neither live nor persisted subagents are available. Persisted rows now
1432
+ // load asynchronously, so defer the gate until that scan has refreshed the
1433
+ // hub instead of treating the initial empty table as authoritative.
1434
+ if (options?.requireContent && hub.isEmpty) {
1435
+ hub.dispose();
1436
+ return;
1437
+ }
1438
+
1439
+ this.ctx.editorContainer.clear();
1440
+ this.ctx.editorContainer.addChild(hub);
1441
+ this.ctx.ui.setFocus(hub);
1442
+ this.ctx.ui.requestRender();
1443
+ };
1444
+
1433
1445
  if (options?.requireContent && hub.isEmpty) {
1434
- hub.dispose();
1446
+ void hub.persistedSubagentsReady.then(showReadyHub);
1435
1447
  return;
1436
1448
  }
1437
1449
 
1438
- this.ctx.editorContainer.clear();
1439
- this.ctx.editorContainer.addChild(hub);
1440
- this.ctx.ui.setFocus(hub);
1441
- this.ctx.ui.requestRender();
1450
+ showReadyHub();
1442
1451
  }
1443
1452
  }
@@ -1,5 +1,5 @@
1
1
  import type { AssistantMessage } from "@oh-my-pi/pi-ai";
2
- import { getSegmenter } from "@oh-my-pi/pi-tui";
2
+ import { type Component, getSegmenter } from "@oh-my-pi/pi-tui";
3
3
  import { LRUCache } from "lru-cache/raw";
4
4
  import { formatThinkingForDisplay, hasDisplayableThinking } from "../../utils/thinking-display";
5
5
  import type { AssistantMessageComponent } from "../components/assistant-message";
@@ -10,14 +10,21 @@ export const CATCHUP_FRAMES = 8;
10
10
 
11
11
  type AssistantContentBlock = AssistantMessage["content"][number];
12
12
  type DisplayThinkingContentBlock = Extract<AssistantContentBlock, { type: "thinking" }> & { rawThinking?: string };
13
- type StreamingRevealComponent = Pick<AssistantMessageComponent, "updateContent">;
13
+ /** The concrete streaming-reveal target is an {@link AssistantMessageComponent}; the
14
+ * Component intersection is what lets the reveal request component-scoped renders
15
+ * through {@link TUI.requestComponentRender} instead of forcing a full-tree walk. */
16
+ type StreamingRevealComponent = Pick<AssistantMessageComponent, "updateContent"> & Component;
14
17
  type GraphemeSlicer = (index: number, text: string, units: number) => string;
15
18
 
16
19
  type StreamingRevealControllerOptions = {
17
20
  getSmoothStreaming(): boolean;
18
21
  getHideThinkingBlock(): boolean;
19
22
  getProseOnlyThinking(): boolean;
20
- requestRender(): void;
23
+ /** Called after each reveal tick with the component whose subtree changed;
24
+ * callers scope the render to that subtree (a full tree walk here at 30fps
25
+ * costs 5% of CPU on its own and drives the Box/Container overhead that
26
+ * cascades into another ~15% — see issue #4377). */
27
+ requestRender(component: Component): void;
21
28
  };
22
29
 
23
30
  const graphemeCountCache = new LRUCache<string, number>({ max: 128 });
@@ -210,7 +217,7 @@ export class StreamingRevealController {
210
217
  readonly #getSmoothStreaming: () => boolean;
211
218
  readonly #getHideThinkingBlock: () => boolean;
212
219
  readonly #getProseOnlyThinking: () => boolean;
213
- readonly #requestRender: () => void;
220
+ readonly #requestRender: (component: Component) => void;
214
221
  #target: AssistantMessage | undefined;
215
222
  #component: StreamingRevealComponent | undefined;
216
223
  #timer: NodeJS.Timeout | undefined;
@@ -384,7 +391,7 @@ export class StreamingRevealController {
384
391
  component.updateContent(this.#build(target, this.#revealed), {
385
392
  transient: true,
386
393
  });
387
- this.#requestRender();
394
+ this.#requestRender(component);
388
395
  if (this.#revealed >= total) {
389
396
  this.#stopTimer();
390
397
  }
@@ -1,8 +1,9 @@
1
+ import type { Component } from "@oh-my-pi/pi-tui";
1
2
  import { parseStreamingJson, parseStreamingJsonThrottled, STREAMING_JSON_PARSE_MIN_GROWTH } from "@oh-my-pi/pi-utils";
2
3
  import { nextStep, STREAMING_REVEAL_FRAME_MS } from "./streaming-reveal";
3
4
 
4
5
  /** Minimal component surface the reveal pushes frames into. */
5
- type ToolArgsRevealComponent = {
6
+ type ToolArgsRevealComponent = Component & {
6
7
  updateArgs(args: unknown, toolCallId?: string): void;
7
8
  };
8
9
 
@@ -25,7 +26,10 @@ export function streamingStringKeysForTool(toolName: string, rawInput: boolean):
25
26
 
26
27
  type ToolArgsRevealControllerOptions = {
27
28
  getSmoothStreaming(): boolean;
28
- requestRender(): void;
29
+ /** Called after each reveal tick with the component whose subtree changed;
30
+ * callers scope the render to that subtree instead of forcing a full-tree
31
+ * walk at 30fps (issue #4377). */
32
+ requestRender(component: Component): void;
29
33
  };
30
34
 
31
35
  type StreamingJsonStringExtractorResult = {
@@ -438,7 +442,7 @@ export function decodeStreamedToolArgs(partialJson: string, source: StreamedTool
438
442
  */
439
443
  export class ToolArgsRevealController {
440
444
  readonly #getSmoothStreaming: () => boolean;
441
- readonly #requestRender: () => void;
445
+ readonly #requestRender: (component: Component) => void;
442
446
  readonly #entries = new Map<string, RevealEntry>();
443
447
  #timer: NodeJS.Timeout | undefined;
444
448
 
@@ -560,7 +564,10 @@ export class ToolArgsRevealController {
560
564
 
561
565
  #tick(): void {
562
566
  let advanced = false;
563
- let rendered = false;
567
+ // Collect components with changed display args; render each subtree once
568
+ // per tick even when multiple entries share a component (they don't
569
+ // today, but the API contract doesn't prevent it).
570
+ const rendered = new Set<ToolArgsRevealComponent>();
564
571
  for (const [id, entry] of this.#entries) {
565
572
  const backlog = entry.target.length - entry.revealed;
566
573
  if (backlog <= 0 || !entry.component) continue;
@@ -568,12 +575,12 @@ export class ToolArgsRevealController {
568
575
  const display = displayArgsForPrefix(entry, entry.target.slice(0, entry.revealed));
569
576
  if (display.changed) {
570
577
  entry.component.updateArgs(display.args, id);
571
- rendered = true;
578
+ rendered.add(entry.component);
572
579
  }
573
580
  advanced = true;
574
581
  }
575
582
  if (advanced) {
576
- if (rendered) this.#requestRender();
583
+ for (const component of rendered) this.#requestRender(component);
577
584
  } else {
578
585
  // Every entry caught up (or unbound); setTarget restarts on growth.
579
586
  this.#stopTimer();