@f5xc-salesdemos/xcsh 2.2.0 → 14.0.2

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 (1518) hide show
  1. package/CHANGELOG.md +6854 -24
  2. package/README.md +11 -610
  3. package/examples/README.md +8 -15
  4. package/examples/custom-tools/README.md +109 -0
  5. package/examples/custom-tools/hello/index.ts +20 -0
  6. package/examples/custom-tools/todo/index.ts +206 -0
  7. package/examples/extensions/README.md +78 -143
  8. package/examples/extensions/api-demo.ts +89 -0
  9. package/examples/extensions/chalk-logger.ts +25 -0
  10. package/examples/extensions/hello.ts +24 -18
  11. package/examples/extensions/pirate.ts +5 -9
  12. package/examples/extensions/plan-mode.ts +551 -0
  13. package/examples/extensions/reload-runtime.ts +1 -1
  14. package/examples/extensions/todo.ts +18 -19
  15. package/examples/extensions/tools.ts +23 -19
  16. package/examples/extensions/with-deps/index.ts +5 -1
  17. package/examples/extensions/with-deps/package-lock.json +2 -2
  18. package/examples/extensions/with-deps/package.json +2 -8
  19. package/examples/hooks/README.md +56 -0
  20. package/examples/hooks/auto-commit-on-exit.ts +48 -0
  21. package/examples/hooks/confirm-destructive.ts +58 -0
  22. package/examples/hooks/custom-compaction.ts +115 -0
  23. package/examples/hooks/dirty-repo-guard.ts +51 -0
  24. package/examples/hooks/file-trigger.ts +40 -0
  25. package/examples/hooks/git-checkpoint.ts +52 -0
  26. package/examples/hooks/handoff.ts +149 -0
  27. package/examples/hooks/permission-gate.ts +33 -0
  28. package/examples/hooks/protected-paths.ts +29 -0
  29. package/examples/hooks/qna.ts +118 -0
  30. package/examples/hooks/status-line.ts +39 -0
  31. package/examples/sdk/01-minimal.ts +3 -4
  32. package/examples/sdk/02-custom-model.ts +9 -9
  33. package/examples/sdk/03-custom-prompt.ts +11 -23
  34. package/examples/sdk/04-skills.ts +23 -32
  35. package/examples/sdk/06-extensions.ts +14 -22
  36. package/examples/sdk/06-hooks.ts +61 -0
  37. package/examples/sdk/07-context-files.ts +18 -23
  38. package/examples/sdk/08-prompt-templates.ts +14 -21
  39. package/examples/sdk/08-slash-commands.ts +46 -0
  40. package/examples/sdk/09-api-keys-and-oauth.ts +15 -9
  41. package/examples/sdk/11-sessions.ts +3 -4
  42. package/examples/sdk/README.md +117 -92
  43. package/package.json +507 -82
  44. package/scripts/format-prompts.ts +68 -0
  45. package/scripts/generate-docs-index.ts +40 -0
  46. package/scripts/generate-template.ts +32 -0
  47. package/src/async/index.ts +1 -0
  48. package/src/async/job-manager.ts +383 -0
  49. package/src/autoresearch/apply-contract-to-state.ts +24 -0
  50. package/src/autoresearch/command-resume.md +17 -0
  51. package/src/autoresearch/contract.ts +288 -0
  52. package/src/autoresearch/dashboard.ts +446 -0
  53. package/src/autoresearch/git.ts +329 -0
  54. package/src/autoresearch/helpers.ts +507 -0
  55. package/src/autoresearch/index.ts +534 -0
  56. package/src/autoresearch/prompt.md +244 -0
  57. package/src/autoresearch/resume-message.md +16 -0
  58. package/src/autoresearch/state.ts +380 -0
  59. package/src/autoresearch/tools/init-experiment.ts +395 -0
  60. package/src/autoresearch/tools/log-experiment.ts +778 -0
  61. package/src/autoresearch/tools/run-experiment.ts +678 -0
  62. package/src/autoresearch/types.ts +218 -0
  63. package/src/bun-imports.d.ts +22 -0
  64. package/src/capability/context-file.ts +44 -0
  65. package/src/capability/extension-module.ts +34 -0
  66. package/src/capability/extension.ts +47 -0
  67. package/src/capability/fs.ts +107 -0
  68. package/src/capability/hook.ts +40 -0
  69. package/src/capability/index.ts +436 -0
  70. package/src/capability/instruction.ts +37 -0
  71. package/src/capability/mcp.ts +74 -0
  72. package/src/capability/prompt.ts +35 -0
  73. package/src/capability/rule.ts +224 -0
  74. package/src/capability/settings.ts +34 -0
  75. package/src/capability/skill.ts +49 -0
  76. package/src/capability/slash-command.ts +40 -0
  77. package/src/capability/ssh.ts +41 -0
  78. package/src/capability/system-prompt.ts +34 -0
  79. package/src/capability/tool.ts +38 -0
  80. package/src/capability/types.ts +168 -0
  81. package/src/cli/agents-cli.ts +138 -0
  82. package/src/cli/args.ts +283 -0
  83. package/src/cli/classify-install-target.ts +50 -0
  84. package/src/cli/commands/init-xdg.ts +27 -0
  85. package/src/cli/config-cli.ts +418 -0
  86. package/src/cli/file-processor.ts +123 -0
  87. package/src/cli/grep-cli.ts +160 -0
  88. package/src/cli/grievances-cli.ts +78 -0
  89. package/src/cli/initial-message.ts +58 -0
  90. package/src/cli/jupyter-cli.ts +106 -0
  91. package/src/cli/list-models.ts +89 -0
  92. package/src/cli/plugin-cli.ts +964 -0
  93. package/src/cli/read-cli.ts +67 -0
  94. package/src/cli/session-picker.ts +52 -0
  95. package/src/cli/setup-cli.ts +376 -0
  96. package/src/cli/shell-cli.ts +174 -0
  97. package/src/cli/ssh-cli.ts +179 -0
  98. package/src/cli/stats-cli.ts +182 -0
  99. package/src/cli/update-cli.ts +342 -0
  100. package/src/cli/web-search-cli.ts +133 -0
  101. package/src/cli.ts +96 -0
  102. package/src/commands/agents.ts +57 -0
  103. package/src/commands/commit.ts +36 -0
  104. package/src/commands/config.ts +51 -0
  105. package/src/commands/grep.ts +48 -0
  106. package/src/commands/grievances.ts +20 -0
  107. package/src/commands/jupyter.ts +32 -0
  108. package/src/commands/launch.ts +141 -0
  109. package/src/commands/plugin.ts +78 -0
  110. package/src/commands/read.ts +33 -0
  111. package/src/commands/setup.ts +42 -0
  112. package/src/commands/shell.ts +29 -0
  113. package/src/commands/ssh.ts +60 -0
  114. package/src/commands/stats.ts +29 -0
  115. package/src/commands/update.ts +21 -0
  116. package/src/commands/web-search.ts +42 -0
  117. package/src/commit/agentic/agent.ts +314 -0
  118. package/src/commit/agentic/fallback.ts +96 -0
  119. package/src/commit/agentic/index.ts +354 -0
  120. package/src/commit/agentic/prompts/analyze-file.md +22 -0
  121. package/src/commit/agentic/prompts/session-user.md +25 -0
  122. package/src/commit/agentic/prompts/split-confirm.md +1 -0
  123. package/src/commit/agentic/prompts/system.md +38 -0
  124. package/src/commit/agentic/state.ts +60 -0
  125. package/src/commit/agentic/tools/analyze-file.ts +128 -0
  126. package/src/commit/agentic/tools/git-file-diff.ts +191 -0
  127. package/src/commit/agentic/tools/git-hunk.ts +50 -0
  128. package/src/commit/agentic/tools/git-overview.ts +81 -0
  129. package/src/commit/agentic/tools/index.ts +54 -0
  130. package/src/commit/agentic/tools/propose-changelog.ts +139 -0
  131. package/src/commit/agentic/tools/propose-commit.ts +122 -0
  132. package/src/commit/agentic/tools/recent-commits.ts +81 -0
  133. package/src/commit/agentic/tools/schemas.ts +31 -0
  134. package/src/commit/agentic/tools/split-commit.ts +251 -0
  135. package/src/commit/agentic/topo-sort.ts +44 -0
  136. package/src/commit/agentic/trivial.ts +51 -0
  137. package/src/commit/agentic/validation.ts +183 -0
  138. package/src/commit/analysis/conventional.ts +122 -0
  139. package/src/commit/analysis/index.ts +4 -0
  140. package/src/commit/analysis/scope.ts +242 -0
  141. package/src/commit/analysis/summary.ts +105 -0
  142. package/src/commit/analysis/validation.ts +66 -0
  143. package/src/commit/changelog/detect.ts +40 -0
  144. package/src/commit/changelog/generate.ts +101 -0
  145. package/src/commit/changelog/index.ts +234 -0
  146. package/src/commit/changelog/parse.ts +44 -0
  147. package/src/commit/cli.ts +85 -0
  148. package/src/commit/git/diff.ts +148 -0
  149. package/src/commit/index.ts +5 -0
  150. package/src/commit/map-reduce/index.ts +69 -0
  151. package/src/commit/map-reduce/map-phase.ts +193 -0
  152. package/src/commit/map-reduce/reduce-phase.ts +108 -0
  153. package/src/commit/map-reduce/utils.ts +9 -0
  154. package/src/commit/message.ts +11 -0
  155. package/src/commit/model-selection.ts +63 -0
  156. package/src/commit/pipeline.ts +242 -0
  157. package/src/commit/prompts/analysis-system.md +148 -0
  158. package/src/commit/prompts/analysis-user.md +38 -0
  159. package/src/commit/prompts/changelog-system.md +50 -0
  160. package/src/commit/prompts/changelog-user.md +18 -0
  161. package/src/commit/prompts/file-observer-system.md +24 -0
  162. package/src/commit/prompts/file-observer-user.md +8 -0
  163. package/src/commit/prompts/reduce-system.md +50 -0
  164. package/src/commit/prompts/reduce-user.md +17 -0
  165. package/src/commit/prompts/summary-retry.md +3 -0
  166. package/src/commit/prompts/summary-system.md +38 -0
  167. package/src/commit/prompts/summary-user.md +13 -0
  168. package/src/commit/prompts/types-description.md +2 -0
  169. package/src/commit/types.ts +118 -0
  170. package/src/commit/utils/exclusions.ts +42 -0
  171. package/src/commit/utils.ts +44 -0
  172. package/src/config/file-lock.ts +121 -0
  173. package/src/config/keybindings.ts +493 -0
  174. package/src/config/mcp-schema.json +230 -0
  175. package/src/config/model-registry.ts +1917 -0
  176. package/src/config/model-resolver.ts +1064 -0
  177. package/src/config/prompt-templates.ts +255 -0
  178. package/src/config/resolve-config-value.ts +94 -0
  179. package/src/config/settings-schema.ts +1929 -0
  180. package/src/config/settings.ts +701 -0
  181. package/src/config.ts +419 -0
  182. package/src/cursor.ts +304 -0
  183. package/src/dap/client.ts +674 -0
  184. package/src/dap/config.ts +150 -0
  185. package/src/dap/defaults.json +211 -0
  186. package/src/dap/index.ts +4 -0
  187. package/src/dap/session.ts +1255 -0
  188. package/src/dap/types.ts +600 -0
  189. package/src/debug/index.ts +438 -0
  190. package/src/debug/log-formatting.ts +58 -0
  191. package/src/debug/log-viewer.ts +908 -0
  192. package/src/debug/profiler.ts +158 -0
  193. package/src/debug/report-bundle.ts +365 -0
  194. package/src/debug/system-info.ts +107 -0
  195. package/src/discovery/agents-md.ts +67 -0
  196. package/src/discovery/agents.ts +219 -0
  197. package/src/discovery/builtin.ts +851 -0
  198. package/src/discovery/claude-plugins.ts +296 -0
  199. package/src/discovery/claude.ts +543 -0
  200. package/src/discovery/cline.ts +83 -0
  201. package/src/discovery/codex.ts +535 -0
  202. package/src/discovery/cursor.ts +220 -0
  203. package/src/discovery/gemini.ts +396 -0
  204. package/src/discovery/github.ts +118 -0
  205. package/src/discovery/helpers.ts +968 -0
  206. package/src/discovery/index.ts +79 -0
  207. package/src/discovery/mcp-json.ts +171 -0
  208. package/src/discovery/opencode.ts +393 -0
  209. package/src/discovery/plugin-dir-roots.ts +28 -0
  210. package/src/discovery/ssh.ts +153 -0
  211. package/src/discovery/substitute-plugin-root.ts +29 -0
  212. package/src/discovery/vscode.ts +105 -0
  213. package/src/discovery/windsurf.ts +147 -0
  214. package/src/edit/diff.ts +818 -0
  215. package/src/edit/index.ts +314 -0
  216. package/src/edit/line-hash.ts +67 -0
  217. package/src/edit/modes/chunk.ts +454 -0
  218. package/src/edit/modes/hashline.ts +1341 -0
  219. package/src/edit/modes/patch.ts +1785 -0
  220. package/src/edit/modes/replace.ts +1107 -0
  221. package/src/edit/normalize.ts +375 -0
  222. package/src/edit/renderer.ts +467 -0
  223. package/src/exa/factory.ts +59 -0
  224. package/src/exa/index.ts +27 -0
  225. package/src/exa/mcp-client.ts +291 -0
  226. package/src/exa/render.ts +244 -0
  227. package/src/exa/researcher.ts +47 -0
  228. package/src/exa/search.ts +86 -0
  229. package/src/exa/types.ts +166 -0
  230. package/src/exa/websets.ts +247 -0
  231. package/src/exec/bash-executor.ts +240 -0
  232. package/src/exec/exec.ts +53 -0
  233. package/src/exec/idle-timeout-watchdog.ts +126 -0
  234. package/src/exec/non-interactive-env.ts +48 -0
  235. package/src/export/custom-share.ts +65 -0
  236. package/src/export/html/index.ts +161 -0
  237. package/src/export/html/template.css +919 -0
  238. package/src/export/html/template.generated.ts +2 -0
  239. package/src/export/html/template.html +46 -0
  240. package/src/export/html/template.js +1458 -0
  241. package/src/export/html/template.macro.ts +24 -0
  242. package/src/export/ttsr.ts +434 -0
  243. package/src/extensibility/custom-commands/bundled/ci-green/index.ts +25 -0
  244. package/src/extensibility/custom-commands/bundled/review/index.ts +435 -0
  245. package/src/extensibility/custom-commands/index.ts +2 -0
  246. package/src/extensibility/custom-commands/loader.ts +236 -0
  247. package/src/extensibility/custom-commands/types.ts +111 -0
  248. package/src/extensibility/custom-tools/index.ts +7 -0
  249. package/src/extensibility/custom-tools/loader.ts +238 -0
  250. package/src/extensibility/custom-tools/types.ts +255 -0
  251. package/src/extensibility/custom-tools/wrapper.ts +47 -0
  252. package/src/extensibility/extensions/index.ts +15 -0
  253. package/src/extensibility/extensions/loader.ts +516 -0
  254. package/src/extensibility/extensions/runner.ts +841 -0
  255. package/src/extensibility/extensions/types.ts +1366 -0
  256. package/src/extensibility/extensions/wrapper.ts +191 -0
  257. package/src/extensibility/hooks/index.ts +5 -0
  258. package/src/extensibility/hooks/loader.ts +255 -0
  259. package/src/extensibility/hooks/runner.ts +425 -0
  260. package/src/extensibility/hooks/tool-wrapper.ts +108 -0
  261. package/src/extensibility/hooks/types.ts +822 -0
  262. package/src/extensibility/plugins/doctor.ts +66 -0
  263. package/src/extensibility/plugins/git-url.ts +281 -0
  264. package/src/extensibility/plugins/index.ts +9 -0
  265. package/src/extensibility/plugins/installer.ts +192 -0
  266. package/src/extensibility/plugins/loader.ts +267 -0
  267. package/src/extensibility/plugins/manager.ts +731 -0
  268. package/src/extensibility/plugins/marketplace/cache.ts +136 -0
  269. package/src/extensibility/plugins/marketplace/fetcher.ts +317 -0
  270. package/src/extensibility/plugins/marketplace/index.ts +6 -0
  271. package/src/extensibility/plugins/marketplace/manager.ts +751 -0
  272. package/src/extensibility/plugins/marketplace/registry.ts +196 -0
  273. package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
  274. package/src/extensibility/plugins/marketplace/types.ts +191 -0
  275. package/src/extensibility/plugins/parser.ts +105 -0
  276. package/src/extensibility/plugins/types.ts +194 -0
  277. package/src/extensibility/skills.ts +252 -0
  278. package/src/extensibility/slash-commands.ts +227 -0
  279. package/src/extensibility/tool-proxy.ts +25 -0
  280. package/src/extensibility/utils.ts +38 -0
  281. package/src/index.ts +61 -0
  282. package/src/internal-urls/agent-protocol.ts +136 -0
  283. package/src/internal-urls/artifact-protocol.ts +97 -0
  284. package/src/internal-urls/docs-index.generated.ts +57 -0
  285. package/src/internal-urls/index.ts +35 -0
  286. package/src/internal-urls/jobs-protocol.ts +118 -0
  287. package/src/internal-urls/json-query.ts +126 -0
  288. package/src/internal-urls/local-protocol.ts +206 -0
  289. package/src/internal-urls/mcp-protocol.ts +156 -0
  290. package/src/internal-urls/memory-protocol.ts +133 -0
  291. package/src/internal-urls/parse.ts +72 -0
  292. package/src/internal-urls/pi-protocol.ts +84 -0
  293. package/src/internal-urls/router.ts +54 -0
  294. package/src/internal-urls/rule-protocol.ts +55 -0
  295. package/src/internal-urls/skill-protocol.ts +111 -0
  296. package/src/internal-urls/types.ts +52 -0
  297. package/src/ipy/cancellation.ts +28 -0
  298. package/src/ipy/executor.ts +762 -0
  299. package/src/ipy/gateway-coordinator.ts +424 -0
  300. package/src/ipy/kernel.ts +1065 -0
  301. package/src/ipy/modules.ts +144 -0
  302. package/src/ipy/prelude.py +849 -0
  303. package/src/ipy/prelude.ts +3 -0
  304. package/src/ipy/runtime.ts +221 -0
  305. package/src/lsp/client.ts +878 -0
  306. package/src/lsp/clients/biome-client.ts +202 -0
  307. package/src/lsp/clients/index.ts +50 -0
  308. package/src/lsp/clients/lsp-linter-client.ts +93 -0
  309. package/src/lsp/clients/swiftlint-client.ts +120 -0
  310. package/src/lsp/config.ts +402 -0
  311. package/src/lsp/defaults.json +998 -0
  312. package/src/lsp/edits.ts +109 -0
  313. package/src/lsp/index.ts +1743 -0
  314. package/src/lsp/lspmux.ts +233 -0
  315. package/src/lsp/render.ts +683 -0
  316. package/src/lsp/startup-events.ts +13 -0
  317. package/src/lsp/types.ts +438 -0
  318. package/src/lsp/utils.ts +807 -0
  319. package/src/main.ts +914 -0
  320. package/src/mcp/client.ts +482 -0
  321. package/src/mcp/config-writer.ts +225 -0
  322. package/src/mcp/config.ts +365 -0
  323. package/src/mcp/discoverable-tool-metadata.ts +202 -0
  324. package/src/mcp/index.ts +29 -0
  325. package/src/mcp/json-rpc.ts +84 -0
  326. package/src/mcp/loader.ts +124 -0
  327. package/src/mcp/manager.ts +1152 -0
  328. package/src/mcp/oauth-discovery.ts +349 -0
  329. package/src/mcp/oauth-flow.ts +387 -0
  330. package/src/mcp/render.ts +130 -0
  331. package/src/mcp/smithery-auth.ts +104 -0
  332. package/src/mcp/smithery-connect.ts +145 -0
  333. package/src/mcp/smithery-registry.ts +477 -0
  334. package/src/mcp/tool-bridge.ts +417 -0
  335. package/src/mcp/tool-cache.ts +117 -0
  336. package/src/mcp/transports/http.ts +475 -0
  337. package/src/mcp/transports/index.ts +6 -0
  338. package/src/mcp/transports/stdio.ts +325 -0
  339. package/src/mcp/types.ts +423 -0
  340. package/src/memories/index.ts +1114 -0
  341. package/src/memories/storage.ts +577 -0
  342. package/src/modes/acp/acp-agent.ts +1358 -0
  343. package/src/modes/acp/acp-event-mapper.ts +538 -0
  344. package/src/modes/acp/acp-mode.ts +15 -0
  345. package/src/modes/acp/index.ts +2 -0
  346. package/src/modes/components/agent-dashboard.ts +1120 -0
  347. package/src/modes/components/assistant-message.ts +206 -0
  348. package/src/modes/components/bash-execution.ts +247 -0
  349. package/src/modes/components/bordered-loader.ts +41 -0
  350. package/src/modes/components/branch-summary-message.ts +45 -0
  351. package/src/modes/components/btw-panel.ts +104 -0
  352. package/src/modes/components/compaction-summary-message.ts +51 -0
  353. package/src/modes/components/countdown-timer.ts +75 -0
  354. package/src/modes/components/custom-editor.ts +238 -0
  355. package/src/modes/components/custom-message.ts +91 -0
  356. package/src/modes/components/diff.ts +210 -0
  357. package/src/modes/components/dynamic-border.ts +25 -0
  358. package/src/modes/components/extensions/extension-dashboard.ts +326 -0
  359. package/src/modes/components/extensions/extension-list.ts +492 -0
  360. package/src/modes/components/extensions/index.ts +9 -0
  361. package/src/modes/components/extensions/inspector-panel.ts +317 -0
  362. package/src/modes/components/extensions/state-manager.ts +587 -0
  363. package/src/modes/components/extensions/types.ts +191 -0
  364. package/src/modes/components/footer.ts +262 -0
  365. package/src/modes/components/history-search.ts +158 -0
  366. package/src/modes/components/hook-editor.ts +151 -0
  367. package/src/modes/components/hook-input.ts +79 -0
  368. package/src/modes/components/hook-message.ts +100 -0
  369. package/src/modes/components/hook-selector.ts +190 -0
  370. package/src/modes/components/index.ts +36 -0
  371. package/src/modes/components/keybinding-hints.ts +65 -0
  372. package/src/modes/components/login-dialog.ts +164 -0
  373. package/src/modes/components/mcp-add-wizard.ts +1314 -0
  374. package/src/modes/components/model-selector.ts +789 -0
  375. package/src/modes/components/oauth-selector.ts +211 -0
  376. package/src/modes/components/plugin-selector.ts +95 -0
  377. package/src/modes/components/plugin-settings.ts +477 -0
  378. package/src/modes/components/python-execution.ts +181 -0
  379. package/src/modes/components/queue-mode-selector.ts +56 -0
  380. package/src/modes/components/read-tool-group.ts +152 -0
  381. package/src/modes/components/session-observer-overlay.ts +472 -0
  382. package/src/modes/components/session-selector.ts +343 -0
  383. package/src/modes/components/settings-defs.ts +547 -0
  384. package/src/modes/components/settings-selector.ts +624 -0
  385. package/src/modes/components/show-images-selector.ts +45 -0
  386. package/src/modes/components/skill-message.ts +90 -0
  387. package/src/modes/components/status-line/context-thresholds.ts +68 -0
  388. package/src/modes/components/status-line/git-utils.ts +42 -0
  389. package/src/modes/components/status-line/index.ts +4 -0
  390. package/src/modes/components/status-line/presets.ts +94 -0
  391. package/src/modes/components/status-line/segments.ts +392 -0
  392. package/src/modes/components/status-line/separators.ts +55 -0
  393. package/src/modes/components/status-line/token-rate.ts +66 -0
  394. package/src/modes/components/status-line/types.ts +82 -0
  395. package/src/modes/components/status-line-segment-editor.ts +358 -0
  396. package/src/modes/components/status-line.ts +499 -0
  397. package/src/modes/components/theme-selector.ts +63 -0
  398. package/src/modes/components/thinking-selector.ts +52 -0
  399. package/src/modes/components/todo-reminder.ts +47 -0
  400. package/src/modes/components/tool-execution.ts +697 -0
  401. package/src/modes/components/tree-selector.ts +908 -0
  402. package/src/modes/components/ttsr-notification.ts +80 -0
  403. package/src/modes/components/user-message-selector.ts +141 -0
  404. package/src/modes/components/user-message.ts +38 -0
  405. package/src/modes/components/visual-truncate.ts +63 -0
  406. package/src/modes/components/welcome.ts +248 -0
  407. package/src/modes/controllers/btw-controller.ts +193 -0
  408. package/src/modes/controllers/command-controller.ts +1195 -0
  409. package/src/modes/controllers/event-controller.ts +644 -0
  410. package/src/modes/controllers/extension-ui-controller.ts +960 -0
  411. package/src/modes/controllers/input-controller.ts +762 -0
  412. package/src/modes/controllers/mcp-command-controller.ts +1926 -0
  413. package/src/modes/controllers/selector-controller.ts +991 -0
  414. package/src/modes/controllers/ssh-command-controller.ts +421 -0
  415. package/src/modes/index.ts +34 -0
  416. package/src/modes/interactive-mode.ts +1664 -0
  417. package/src/modes/oauth-manual-input.ts +42 -0
  418. package/src/modes/print-mode.ts +192 -0
  419. package/src/modes/prompt-action-autocomplete.ts +233 -0
  420. package/src/modes/rpc/host-tools.ts +186 -0
  421. package/src/modes/rpc/rpc-client.ts +750 -0
  422. package/src/modes/rpc/rpc-mode.ts +825 -0
  423. package/src/modes/rpc/rpc-types.ts +297 -0
  424. package/src/modes/session-observer-registry.ts +146 -0
  425. package/src/modes/shared.ts +30 -0
  426. package/src/modes/theme/dark.json +95 -0
  427. package/src/modes/theme/defaults/alabaster.json +93 -0
  428. package/src/modes/theme/defaults/amethyst.json +96 -0
  429. package/src/modes/theme/defaults/anthracite.json +93 -0
  430. package/src/modes/theme/defaults/basalt.json +91 -0
  431. package/src/modes/theme/defaults/birch.json +95 -0
  432. package/src/modes/theme/defaults/dark-abyss.json +91 -0
  433. package/src/modes/theme/defaults/dark-arctic.json +104 -0
  434. package/src/modes/theme/defaults/dark-aurora.json +95 -0
  435. package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
  436. package/src/modes/theme/defaults/dark-cavern.json +91 -0
  437. package/src/modes/theme/defaults/dark-copper.json +95 -0
  438. package/src/modes/theme/defaults/dark-cosmos.json +90 -0
  439. package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
  440. package/src/modes/theme/defaults/dark-dracula.json +98 -0
  441. package/src/modes/theme/defaults/dark-eclipse.json +91 -0
  442. package/src/modes/theme/defaults/dark-ember.json +95 -0
  443. package/src/modes/theme/defaults/dark-equinox.json +90 -0
  444. package/src/modes/theme/defaults/dark-forest.json +96 -0
  445. package/src/modes/theme/defaults/dark-github.json +105 -0
  446. package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
  447. package/src/modes/theme/defaults/dark-lavender.json +95 -0
  448. package/src/modes/theme/defaults/dark-lunar.json +89 -0
  449. package/src/modes/theme/defaults/dark-midnight.json +95 -0
  450. package/src/modes/theme/defaults/dark-monochrome.json +94 -0
  451. package/src/modes/theme/defaults/dark-monokai.json +98 -0
  452. package/src/modes/theme/defaults/dark-nebula.json +90 -0
  453. package/src/modes/theme/defaults/dark-nord.json +97 -0
  454. package/src/modes/theme/defaults/dark-ocean.json +101 -0
  455. package/src/modes/theme/defaults/dark-one.json +100 -0
  456. package/src/modes/theme/defaults/dark-poimandres.json +138 -0
  457. package/src/modes/theme/defaults/dark-rainforest.json +91 -0
  458. package/src/modes/theme/defaults/dark-reef.json +91 -0
  459. package/src/modes/theme/defaults/dark-retro.json +92 -0
  460. package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
  461. package/src/modes/theme/defaults/dark-sakura.json +95 -0
  462. package/src/modes/theme/defaults/dark-slate.json +95 -0
  463. package/src/modes/theme/defaults/dark-solarized.json +97 -0
  464. package/src/modes/theme/defaults/dark-solstice.json +90 -0
  465. package/src/modes/theme/defaults/dark-starfall.json +91 -0
  466. package/src/modes/theme/defaults/dark-sunset.json +99 -0
  467. package/src/modes/theme/defaults/dark-swamp.json +90 -0
  468. package/src/modes/theme/defaults/dark-synthwave.json +103 -0
  469. package/src/modes/theme/defaults/dark-taiga.json +91 -0
  470. package/src/modes/theme/defaults/dark-terminal.json +95 -0
  471. package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
  472. package/src/modes/theme/defaults/dark-tundra.json +91 -0
  473. package/src/modes/theme/defaults/dark-twilight.json +91 -0
  474. package/src/modes/theme/defaults/dark-volcanic.json +91 -0
  475. package/src/modes/theme/defaults/graphite.json +92 -0
  476. package/src/modes/theme/defaults/index.ts +203 -0
  477. package/src/modes/theme/defaults/light-arctic.json +107 -0
  478. package/src/modes/theme/defaults/light-aurora-day.json +91 -0
  479. package/src/modes/theme/defaults/light-canyon.json +91 -0
  480. package/src/modes/theme/defaults/light-catppuccin.json +106 -0
  481. package/src/modes/theme/defaults/light-cirrus.json +90 -0
  482. package/src/modes/theme/defaults/light-coral.json +95 -0
  483. package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
  484. package/src/modes/theme/defaults/light-dawn.json +90 -0
  485. package/src/modes/theme/defaults/light-dunes.json +91 -0
  486. package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
  487. package/src/modes/theme/defaults/light-forest.json +100 -0
  488. package/src/modes/theme/defaults/light-frost.json +95 -0
  489. package/src/modes/theme/defaults/light-github.json +115 -0
  490. package/src/modes/theme/defaults/light-glacier.json +91 -0
  491. package/src/modes/theme/defaults/light-gruvbox.json +108 -0
  492. package/src/modes/theme/defaults/light-haze.json +90 -0
  493. package/src/modes/theme/defaults/light-honeycomb.json +95 -0
  494. package/src/modes/theme/defaults/light-lagoon.json +91 -0
  495. package/src/modes/theme/defaults/light-lavender.json +95 -0
  496. package/src/modes/theme/defaults/light-meadow.json +91 -0
  497. package/src/modes/theme/defaults/light-mint.json +95 -0
  498. package/src/modes/theme/defaults/light-monochrome.json +101 -0
  499. package/src/modes/theme/defaults/light-ocean.json +99 -0
  500. package/src/modes/theme/defaults/light-one.json +99 -0
  501. package/src/modes/theme/defaults/light-opal.json +91 -0
  502. package/src/modes/theme/defaults/light-orchard.json +91 -0
  503. package/src/modes/theme/defaults/light-paper.json +95 -0
  504. package/src/modes/theme/defaults/light-poimandres.json +138 -0
  505. package/src/modes/theme/defaults/light-prism.json +90 -0
  506. package/src/modes/theme/defaults/light-retro.json +98 -0
  507. package/src/modes/theme/defaults/light-sand.json +95 -0
  508. package/src/modes/theme/defaults/light-savanna.json +91 -0
  509. package/src/modes/theme/defaults/light-solarized.json +102 -0
  510. package/src/modes/theme/defaults/light-soleil.json +90 -0
  511. package/src/modes/theme/defaults/light-sunset.json +99 -0
  512. package/src/modes/theme/defaults/light-synthwave.json +98 -0
  513. package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
  514. package/src/modes/theme/defaults/light-wetland.json +91 -0
  515. package/src/modes/theme/defaults/light-zenith.json +89 -0
  516. package/src/modes/theme/defaults/limestone.json +94 -0
  517. package/src/modes/theme/defaults/mahogany.json +97 -0
  518. package/src/modes/theme/defaults/marble.json +93 -0
  519. package/src/modes/theme/defaults/obsidian.json +91 -0
  520. package/src/modes/theme/defaults/onyx.json +91 -0
  521. package/src/modes/theme/defaults/pearl.json +93 -0
  522. package/src/modes/theme/defaults/porcelain.json +91 -0
  523. package/src/modes/theme/defaults/quartz.json +96 -0
  524. package/src/modes/theme/defaults/sandstone.json +95 -0
  525. package/src/modes/theme/defaults/titanium.json +90 -0
  526. package/src/modes/theme/defaults/xcsh-dark.json +89 -0
  527. package/src/modes/theme/defaults/xcsh-light.json +91 -0
  528. package/src/modes/theme/light.json +93 -0
  529. package/src/modes/theme/mermaid-cache.ts +70 -0
  530. package/src/modes/theme/theme-schema.json +429 -0
  531. package/src/modes/theme/theme.ts +2541 -0
  532. package/src/modes/types.ts +269 -0
  533. package/src/modes/utils/hotkeys-markdown.ts +59 -0
  534. package/src/modes/utils/keybinding-matchers.ts +30 -0
  535. package/src/modes/utils/tools-markdown.ts +27 -0
  536. package/src/modes/utils/ui-helpers.ts +620 -0
  537. package/src/plan-mode/approved-plan.ts +55 -0
  538. package/src/plan-mode/state.ts +6 -0
  539. package/src/priority.json +29 -0
  540. package/src/prompts/agents/designer.md +68 -0
  541. package/src/prompts/agents/explore.md +60 -0
  542. package/src/prompts/agents/frontmatter.md +10 -0
  543. package/src/prompts/agents/init.md +36 -0
  544. package/src/prompts/agents/librarian.md +121 -0
  545. package/src/prompts/agents/plan.md +49 -0
  546. package/src/prompts/agents/reviewer.md +127 -0
  547. package/src/prompts/agents/task.md +16 -0
  548. package/src/prompts/ci-green-request.md +36 -0
  549. package/src/prompts/compaction/branch-summary-context.md +5 -0
  550. package/src/prompts/compaction/branch-summary-preamble.md +2 -0
  551. package/src/prompts/compaction/branch-summary.md +30 -0
  552. package/src/prompts/compaction/compaction-short-summary.md +9 -0
  553. package/src/prompts/compaction/compaction-summary-context.md +5 -0
  554. package/src/prompts/compaction/compaction-summary.md +38 -0
  555. package/src/prompts/compaction/compaction-turn-prefix.md +17 -0
  556. package/src/prompts/compaction/compaction-update-summary.md +45 -0
  557. package/src/prompts/memories/consolidation.md +30 -0
  558. package/src/prompts/memories/read-path.md +11 -0
  559. package/src/prompts/memories/stage_one_input.md +6 -0
  560. package/src/prompts/memories/stage_one_system.md +21 -0
  561. package/src/prompts/review-request.md +64 -0
  562. package/src/prompts/system/agent-creation-architect.md +65 -0
  563. package/src/prompts/system/agent-creation-user.md +6 -0
  564. package/src/prompts/system/auto-handoff-threshold-focus.md +1 -0
  565. package/src/prompts/system/btw-user.md +8 -0
  566. package/src/prompts/system/commit-message-system.md +2 -0
  567. package/src/prompts/system/custom-system-prompt.md +68 -0
  568. package/src/prompts/system/eager-todo.md +13 -0
  569. package/src/prompts/system/file-operations.md +10 -0
  570. package/src/prompts/system/handoff-document.md +46 -0
  571. package/src/prompts/system/plan-mode-active.md +107 -0
  572. package/src/prompts/system/plan-mode-approved.md +23 -0
  573. package/src/prompts/system/plan-mode-reference.md +14 -0
  574. package/src/prompts/system/plan-mode-subagent.md +34 -0
  575. package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
  576. package/src/prompts/system/subagent-submit-reminder.md +11 -0
  577. package/src/prompts/system/subagent-system-prompt.md +35 -0
  578. package/src/prompts/system/subagent-user-prompt.md +12 -0
  579. package/src/prompts/system/summarization-system.md +3 -0
  580. package/src/prompts/system/system-prompt.md +333 -0
  581. package/src/prompts/system/title-system.md +2 -0
  582. package/src/prompts/system/ttsr-interrupt.md +7 -0
  583. package/src/prompts/system/web-search.md +28 -0
  584. package/src/prompts/tools/ask.md +28 -0
  585. package/src/prompts/tools/ast-edit.md +48 -0
  586. package/src/prompts/tools/ast-grep.md +54 -0
  587. package/src/prompts/tools/async-result.md +5 -0
  588. package/src/prompts/tools/await.md +5 -0
  589. package/src/prompts/tools/bash.md +47 -0
  590. package/src/prompts/tools/browser.md +24 -0
  591. package/src/prompts/tools/calculator.md +10 -0
  592. package/src/prompts/tools/cancel-job.md +5 -0
  593. package/src/prompts/tools/checkpoint.md +16 -0
  594. package/src/prompts/tools/chunk-edit.md +219 -0
  595. package/src/prompts/tools/debug.md +43 -0
  596. package/src/prompts/tools/exit-plan-mode.md +41 -0
  597. package/src/prompts/tools/find.md +26 -0
  598. package/src/prompts/tools/gemini-image.md +7 -0
  599. package/src/prompts/tools/gh-issue-view.md +11 -0
  600. package/src/prompts/tools/gh-pr-checkout.md +12 -0
  601. package/src/prompts/tools/gh-pr-diff.md +12 -0
  602. package/src/prompts/tools/gh-pr-push.md +11 -0
  603. package/src/prompts/tools/gh-pr-view.md +11 -0
  604. package/src/prompts/tools/gh-repo-view.md +11 -0
  605. package/src/prompts/tools/gh-run-watch.md +12 -0
  606. package/src/prompts/tools/gh-search-issues.md +11 -0
  607. package/src/prompts/tools/gh-search-prs.md +11 -0
  608. package/src/prompts/tools/grep.md +29 -0
  609. package/src/prompts/tools/hashline.md +131 -0
  610. package/src/prompts/tools/inspect-image-system.md +20 -0
  611. package/src/prompts/tools/inspect-image.md +32 -0
  612. package/src/prompts/tools/lsp.md +33 -0
  613. package/src/prompts/tools/patch.md +72 -0
  614. package/src/prompts/tools/python.md +60 -0
  615. package/src/prompts/tools/read-chunk.md +17 -0
  616. package/src/prompts/tools/read.md +54 -0
  617. package/src/prompts/tools/render-mermaid.md +9 -0
  618. package/src/prompts/tools/replace.md +36 -0
  619. package/src/prompts/tools/resolve.md +8 -0
  620. package/src/prompts/tools/rewind.md +13 -0
  621. package/src/prompts/tools/search-tool-bm25.md +34 -0
  622. package/src/prompts/tools/ssh.md +44 -0
  623. package/src/prompts/tools/task-summary.md +28 -0
  624. package/src/prompts/tools/task.md +131 -0
  625. package/src/prompts/tools/todo-write.md +89 -0
  626. package/src/prompts/tools/web-search.md +10 -0
  627. package/src/prompts/tools/write.md +13 -0
  628. package/src/sdk.ts +1694 -0
  629. package/src/secrets/index.ts +116 -0
  630. package/src/secrets/obfuscator.ts +277 -0
  631. package/src/secrets/regex.ts +21 -0
  632. package/src/session/agent-session.ts +6506 -0
  633. package/src/session/agent-storage.ts +451 -0
  634. package/src/session/artifacts.ts +132 -0
  635. package/src/session/auth-storage.ts +17 -0
  636. package/src/session/blob-store.ts +135 -0
  637. package/src/session/compaction/branch-summarization.ts +322 -0
  638. package/src/session/compaction/compaction.ts +1388 -0
  639. package/src/session/compaction/index.ts +7 -0
  640. package/src/session/compaction/pruning.ts +91 -0
  641. package/src/session/compaction/utils.ts +184 -0
  642. package/src/session/history-storage.ts +253 -0
  643. package/src/session/messages.ts +373 -0
  644. package/src/session/session-dump-format.ts +203 -0
  645. package/src/session/session-manager.ts +2728 -0
  646. package/src/session/session-storage.ts +367 -0
  647. package/src/session/streaming-output.ts +752 -0
  648. package/src/session/tool-choice-queue.ts +213 -0
  649. package/src/slash-commands/builtin-registry.ts +981 -0
  650. package/src/slash-commands/marketplace-install-parser.ts +99 -0
  651. package/src/ssh/config-writer.ts +183 -0
  652. package/src/ssh/connection-manager.ts +445 -0
  653. package/src/ssh/ssh-executor.ts +128 -0
  654. package/src/ssh/sshfs-mount.ts +137 -0
  655. package/src/ssh/utils.ts +8 -0
  656. package/src/stt/downloader.ts +71 -0
  657. package/src/stt/index.ts +3 -0
  658. package/src/stt/recorder.ts +351 -0
  659. package/src/stt/setup.ts +52 -0
  660. package/src/stt/stt-controller.ts +160 -0
  661. package/src/stt/transcribe.py +70 -0
  662. package/src/stt/transcriber.ts +91 -0
  663. package/src/system-prompt.ts +620 -0
  664. package/src/task/agents.ts +166 -0
  665. package/src/task/commands.ts +131 -0
  666. package/src/task/discovery.ts +126 -0
  667. package/src/task/executor.ts +1293 -0
  668. package/src/task/index.ts +1199 -0
  669. package/src/task/isolation-backend.ts +72 -0
  670. package/src/task/name-generator.ts +1577 -0
  671. package/src/task/output-manager.ts +107 -0
  672. package/src/task/parallel.ts +116 -0
  673. package/src/task/render.ts +1021 -0
  674. package/src/task/subprocess-tool-registry.ts +88 -0
  675. package/src/task/template.ts +33 -0
  676. package/src/task/types.ts +230 -0
  677. package/src/task/worktree.ts +580 -0
  678. package/src/task/xcsh-command.ts +26 -0
  679. package/src/thinking.ts +87 -0
  680. package/src/tools/archive-reader.ts +315 -0
  681. package/src/tools/ask.ts +795 -0
  682. package/src/tools/ast-edit.ts +495 -0
  683. package/src/tools/ast-grep.ts +456 -0
  684. package/src/tools/auto-generated-guard.ts +305 -0
  685. package/src/tools/await-tool.ts +170 -0
  686. package/src/tools/bash-interactive.ts +377 -0
  687. package/src/tools/bash-interceptor.ts +67 -0
  688. package/src/tools/bash-normalize.ts +107 -0
  689. package/src/tools/bash-skill-urls.ts +246 -0
  690. package/src/tools/bash.ts +600 -0
  691. package/src/tools/browser.ts +1473 -0
  692. package/src/tools/calculator.ts +537 -0
  693. package/src/tools/cancel-job.ts +99 -0
  694. package/src/tools/checkpoint.ts +133 -0
  695. package/src/tools/context.ts +39 -0
  696. package/src/tools/debug.ts +1007 -0
  697. package/src/tools/exit-plan-mode.ts +101 -0
  698. package/src/tools/fetch.ts +1463 -0
  699. package/src/tools/find.ts +495 -0
  700. package/src/tools/fs-cache-invalidation.ts +33 -0
  701. package/src/tools/gemini-image.ts +896 -0
  702. package/src/tools/gh-renderer.ts +305 -0
  703. package/src/tools/gh.ts +2546 -0
  704. package/src/tools/grep.ts +625 -0
  705. package/src/tools/index.ts +426 -0
  706. package/src/tools/inspect-image-renderer.ts +103 -0
  707. package/src/tools/inspect-image.ts +173 -0
  708. package/src/tools/json-tree.ts +243 -0
  709. package/src/tools/jtd-to-json-schema.ts +199 -0
  710. package/src/tools/jtd-to-typescript.ts +136 -0
  711. package/src/tools/jtd-utils.ts +102 -0
  712. package/src/tools/list-limit.ts +40 -0
  713. package/src/tools/notebook.ts +288 -0
  714. package/src/tools/output-meta.ts +588 -0
  715. package/src/tools/path-utils.ts +560 -0
  716. package/src/tools/plan-mode-guard.ts +41 -0
  717. package/src/tools/puppeteer/00_stealth_tampering.txt +63 -0
  718. package/src/tools/puppeteer/01_stealth_activity.txt +20 -0
  719. package/src/tools/puppeteer/02_stealth_hairline.txt +11 -0
  720. package/src/tools/puppeteer/03_stealth_botd.txt +384 -0
  721. package/src/tools/puppeteer/04_stealth_iframe.txt +81 -0
  722. package/src/tools/puppeteer/05_stealth_webgl.txt +75 -0
  723. package/src/tools/puppeteer/06_stealth_screen.txt +72 -0
  724. package/src/tools/puppeteer/07_stealth_fonts.txt +97 -0
  725. package/src/tools/puppeteer/08_stealth_audio.txt +51 -0
  726. package/src/tools/puppeteer/09_stealth_locale.txt +46 -0
  727. package/src/tools/puppeteer/10_stealth_plugins.txt +206 -0
  728. package/src/tools/puppeteer/11_stealth_hardware.txt +8 -0
  729. package/src/tools/puppeteer/12_stealth_codecs.txt +40 -0
  730. package/src/tools/puppeteer/13_stealth_worker.txt +74 -0
  731. package/src/tools/python.ts +1135 -0
  732. package/src/tools/read.ts +1375 -0
  733. package/src/tools/render-mermaid.ts +71 -0
  734. package/src/tools/render-utils.ts +618 -0
  735. package/src/tools/renderers.ts +68 -0
  736. package/src/tools/report-tool-issue.ts +80 -0
  737. package/src/tools/resolve.ts +192 -0
  738. package/src/tools/review.ts +238 -0
  739. package/src/tools/search-tool-bm25.ts +283 -0
  740. package/src/tools/ssh.ts +320 -0
  741. package/src/tools/submit-result.ts +226 -0
  742. package/src/tools/todo-write.ts +450 -0
  743. package/src/tools/tool-errors.ts +62 -0
  744. package/src/tools/tool-result.ts +86 -0
  745. package/src/tools/tool-timeouts.ts +30 -0
  746. package/src/tools/write.ts +479 -0
  747. package/src/tui/code-cell.ts +113 -0
  748. package/src/tui/file-list.ts +47 -0
  749. package/src/tui/index.ts +11 -0
  750. package/src/tui/output-block.ts +150 -0
  751. package/src/tui/status-line.ts +39 -0
  752. package/src/tui/tree-list.ts +84 -0
  753. package/src/tui/types.ts +15 -0
  754. package/src/tui/utils.ts +103 -0
  755. package/src/utils/changelog.ts +98 -0
  756. package/src/utils/clipboard.ts +80 -0
  757. package/src/utils/command-args.ts +76 -0
  758. package/src/utils/commit-message-generator.ts +136 -0
  759. package/src/utils/edit-mode.ts +49 -0
  760. package/src/utils/event-bus.ts +33 -0
  761. package/src/utils/external-editor.ts +65 -0
  762. package/src/utils/file-display-mode.ts +37 -0
  763. package/src/utils/file-mentions.ts +376 -0
  764. package/src/utils/fuzzy.ts +108 -0
  765. package/src/utils/git.ts +1400 -0
  766. package/src/utils/image-convert.ts +27 -0
  767. package/src/utils/image-loading.ts +98 -0
  768. package/src/utils/image-resize.ts +236 -0
  769. package/src/utils/markit.ts +81 -0
  770. package/src/utils/open.ts +20 -0
  771. package/src/utils/shell-snapshot.ts +188 -0
  772. package/src/utils/sixel.ts +69 -0
  773. package/src/utils/title-generator.ts +184 -0
  774. package/src/utils/tool-choice.ts +28 -0
  775. package/src/utils/tools-manager.ts +356 -0
  776. package/src/web/kagi.ts +174 -0
  777. package/src/web/parallel.ts +346 -0
  778. package/src/web/scrapers/artifacthub.ts +207 -0
  779. package/src/web/scrapers/arxiv.ts +83 -0
  780. package/src/web/scrapers/aur.ts +162 -0
  781. package/src/web/scrapers/biorxiv.ts +133 -0
  782. package/src/web/scrapers/bluesky.ts +262 -0
  783. package/src/web/scrapers/brew.ts +172 -0
  784. package/src/web/scrapers/cheatsh.ts +68 -0
  785. package/src/web/scrapers/chocolatey.ts +196 -0
  786. package/src/web/scrapers/choosealicense.ts +95 -0
  787. package/src/web/scrapers/cisa-kev.ts +87 -0
  788. package/src/web/scrapers/clojars.ts +154 -0
  789. package/src/web/scrapers/coingecko.ts +177 -0
  790. package/src/web/scrapers/crates-io.ts +110 -0
  791. package/src/web/scrapers/crossref.ts +136 -0
  792. package/src/web/scrapers/devto.ts +147 -0
  793. package/src/web/scrapers/discogs.ts +306 -0
  794. package/src/web/scrapers/discourse.ts +197 -0
  795. package/src/web/scrapers/dockerhub.ts +138 -0
  796. package/src/web/scrapers/docs-rs.ts +653 -0
  797. package/src/web/scrapers/fdroid.ts +134 -0
  798. package/src/web/scrapers/firefox-addons.ts +191 -0
  799. package/src/web/scrapers/flathub.ts +223 -0
  800. package/src/web/scrapers/github-gist.ts +58 -0
  801. package/src/web/scrapers/github.ts +452 -0
  802. package/src/web/scrapers/gitlab.ts +401 -0
  803. package/src/web/scrapers/go-pkg.ts +266 -0
  804. package/src/web/scrapers/hackage.ts +140 -0
  805. package/src/web/scrapers/hackernews.ts +189 -0
  806. package/src/web/scrapers/hex.ts +105 -0
  807. package/src/web/scrapers/huggingface.ts +321 -0
  808. package/src/web/scrapers/iacr.ts +89 -0
  809. package/src/web/scrapers/index.ts +252 -0
  810. package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
  811. package/src/web/scrapers/lemmy.ts +203 -0
  812. package/src/web/scrapers/lobsters.ts +175 -0
  813. package/src/web/scrapers/mastodon.ts +292 -0
  814. package/src/web/scrapers/maven.ts +138 -0
  815. package/src/web/scrapers/mdn.ts +169 -0
  816. package/src/web/scrapers/metacpan.ts +222 -0
  817. package/src/web/scrapers/musicbrainz.ts +250 -0
  818. package/src/web/scrapers/npm.ts +98 -0
  819. package/src/web/scrapers/nuget.ts +183 -0
  820. package/src/web/scrapers/nvd.ts +222 -0
  821. package/src/web/scrapers/ollama.ts +239 -0
  822. package/src/web/scrapers/open-vsx.ts +106 -0
  823. package/src/web/scrapers/opencorporates.ts +292 -0
  824. package/src/web/scrapers/openlibrary.ts +336 -0
  825. package/src/web/scrapers/orcid.ts +286 -0
  826. package/src/web/scrapers/osv.ts +176 -0
  827. package/src/web/scrapers/packagist.ts +160 -0
  828. package/src/web/scrapers/pub-dev.ts +143 -0
  829. package/src/web/scrapers/pubmed.ts +211 -0
  830. package/src/web/scrapers/pypi.ts +112 -0
  831. package/src/web/scrapers/rawg.ts +110 -0
  832. package/src/web/scrapers/readthedocs.ts +120 -0
  833. package/src/web/scrapers/reddit.ts +95 -0
  834. package/src/web/scrapers/repology.ts +251 -0
  835. package/src/web/scrapers/rfc.ts +201 -0
  836. package/src/web/scrapers/rubygems.ts +103 -0
  837. package/src/web/scrapers/searchcode.ts +190 -0
  838. package/src/web/scrapers/sec-edgar.ts +261 -0
  839. package/src/web/scrapers/semantic-scholar.ts +171 -0
  840. package/src/web/scrapers/snapcraft.ts +187 -0
  841. package/src/web/scrapers/sourcegraph.ts +336 -0
  842. package/src/web/scrapers/spdx.ts +108 -0
  843. package/src/web/scrapers/spotify.ts +198 -0
  844. package/src/web/scrapers/stackoverflow.ts +120 -0
  845. package/src/web/scrapers/terraform.ts +277 -0
  846. package/src/web/scrapers/tldr.ts +47 -0
  847. package/src/web/scrapers/twitter.ts +93 -0
  848. package/src/web/scrapers/types.ts +267 -0
  849. package/src/web/scrapers/utils.ts +109 -0
  850. package/src/web/scrapers/vimeo.ts +133 -0
  851. package/src/web/scrapers/vscode-marketplace.ts +187 -0
  852. package/src/web/scrapers/w3c.ts +156 -0
  853. package/src/web/scrapers/wikidata.ts +344 -0
  854. package/src/web/scrapers/wikipedia.ts +84 -0
  855. package/src/web/scrapers/youtube.ts +313 -0
  856. package/src/web/search/index.ts +268 -0
  857. package/src/web/search/provider.ts +86 -0
  858. package/src/web/search/providers/anthropic.ts +286 -0
  859. package/src/web/search/providers/base.ts +25 -0
  860. package/src/web/search/providers/brave.ts +150 -0
  861. package/src/web/search/providers/codex.ts +383 -0
  862. package/src/web/search/providers/exa.ts +264 -0
  863. package/src/web/search/providers/gemini.ts +566 -0
  864. package/src/web/search/providers/jina.ts +99 -0
  865. package/src/web/search/providers/kagi.ts +70 -0
  866. package/src/web/search/providers/kimi.ts +157 -0
  867. package/src/web/search/providers/parallel.ts +63 -0
  868. package/src/web/search/providers/perplexity.ts +546 -0
  869. package/src/web/search/providers/synthetic.ts +113 -0
  870. package/src/web/search/providers/tavily.ts +162 -0
  871. package/src/web/search/providers/utils.ts +36 -0
  872. package/src/web/search/providers/zai.ts +311 -0
  873. package/src/web/search/render.ts +299 -0
  874. package/src/web/search/types.ts +434 -0
  875. package/src/web/search/utils.ts +17 -0
  876. package/dist/bun/cli.d.ts +0 -3
  877. package/dist/bun/cli.d.ts.map +0 -1
  878. package/dist/bun/cli.js +0 -7
  879. package/dist/bun/cli.js.map +0 -1
  880. package/dist/bun/register-bedrock.d.ts +0 -2
  881. package/dist/bun/register-bedrock.d.ts.map +0 -1
  882. package/dist/bun/register-bedrock.js +0 -4
  883. package/dist/bun/register-bedrock.js.map +0 -1
  884. package/dist/cli/args.d.ts +0 -52
  885. package/dist/cli/args.d.ts.map +0 -1
  886. package/dist/cli/args.js +0 -326
  887. package/dist/cli/args.js.map +0 -1
  888. package/dist/cli/config-selector.d.ts +0 -14
  889. package/dist/cli/config-selector.d.ts.map +0 -1
  890. package/dist/cli/config-selector.js +0 -31
  891. package/dist/cli/config-selector.js.map +0 -1
  892. package/dist/cli/file-processor.d.ts +0 -15
  893. package/dist/cli/file-processor.d.ts.map +0 -1
  894. package/dist/cli/file-processor.js +0 -83
  895. package/dist/cli/file-processor.js.map +0 -1
  896. package/dist/cli/initial-message.d.ts +0 -18
  897. package/dist/cli/initial-message.d.ts.map +0 -1
  898. package/dist/cli/initial-message.js +0 -22
  899. package/dist/cli/initial-message.js.map +0 -1
  900. package/dist/cli/list-models.d.ts +0 -9
  901. package/dist/cli/list-models.d.ts.map +0 -1
  902. package/dist/cli/list-models.js +0 -92
  903. package/dist/cli/list-models.js.map +0 -1
  904. package/dist/cli/session-picker.d.ts +0 -9
  905. package/dist/cli/session-picker.d.ts.map +0 -1
  906. package/dist/cli/session-picker.js +0 -35
  907. package/dist/cli/session-picker.js.map +0 -1
  908. package/dist/cli.d.ts +0 -3
  909. package/dist/cli.d.ts.map +0 -1
  910. package/dist/cli.js +0 -14
  911. package/dist/cli.js.map +0 -1
  912. package/dist/config.d.ts +0 -68
  913. package/dist/config.d.ts.map +0 -1
  914. package/dist/config.js +0 -203
  915. package/dist/config.js.map +0 -1
  916. package/dist/core/agent-session-runtime.d.ts +0 -83
  917. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  918. package/dist/core/agent-session-runtime.js +0 -236
  919. package/dist/core/agent-session-runtime.js.map +0 -1
  920. package/dist/core/agent-session-services.d.ts +0 -86
  921. package/dist/core/agent-session-services.d.ts.map +0 -1
  922. package/dist/core/agent-session-services.js +0 -116
  923. package/dist/core/agent-session-services.js.map +0 -1
  924. package/dist/core/agent-session.d.ts +0 -585
  925. package/dist/core/agent-session.d.ts.map +0 -1
  926. package/dist/core/agent-session.js +0 -2497
  927. package/dist/core/agent-session.js.map +0 -1
  928. package/dist/core/auth-storage.d.ts +0 -132
  929. package/dist/core/auth-storage.d.ts.map +0 -1
  930. package/dist/core/auth-storage.js +0 -422
  931. package/dist/core/auth-storage.js.map +0 -1
  932. package/dist/core/bash-executor.d.ts +0 -46
  933. package/dist/core/bash-executor.d.ts.map +0 -1
  934. package/dist/core/bash-executor.js +0 -125
  935. package/dist/core/bash-executor.js.map +0 -1
  936. package/dist/core/compaction/branch-summarization.d.ts +0 -88
  937. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  938. package/dist/core/compaction/branch-summarization.js +0 -243
  939. package/dist/core/compaction/branch-summarization.js.map +0 -1
  940. package/dist/core/compaction/compaction.d.ts +0 -121
  941. package/dist/core/compaction/compaction.d.ts.map +0 -1
  942. package/dist/core/compaction/compaction.js +0 -613
  943. package/dist/core/compaction/compaction.js.map +0 -1
  944. package/dist/core/compaction/index.d.ts +0 -7
  945. package/dist/core/compaction/index.d.ts.map +0 -1
  946. package/dist/core/compaction/index.js +0 -7
  947. package/dist/core/compaction/index.js.map +0 -1
  948. package/dist/core/compaction/utils.d.ts +0 -38
  949. package/dist/core/compaction/utils.d.ts.map +0 -1
  950. package/dist/core/compaction/utils.js +0 -153
  951. package/dist/core/compaction/utils.js.map +0 -1
  952. package/dist/core/defaults.d.ts +0 -3
  953. package/dist/core/defaults.d.ts.map +0 -1
  954. package/dist/core/defaults.js +0 -2
  955. package/dist/core/defaults.js.map +0 -1
  956. package/dist/core/diagnostics.d.ts +0 -15
  957. package/dist/core/diagnostics.d.ts.map +0 -1
  958. package/dist/core/diagnostics.js +0 -2
  959. package/dist/core/diagnostics.js.map +0 -1
  960. package/dist/core/event-bus.d.ts +0 -9
  961. package/dist/core/event-bus.d.ts.map +0 -1
  962. package/dist/core/event-bus.js +0 -25
  963. package/dist/core/event-bus.js.map +0 -1
  964. package/dist/core/exec.d.ts +0 -29
  965. package/dist/core/exec.d.ts.map +0 -1
  966. package/dist/core/exec.js +0 -75
  967. package/dist/core/exec.js.map +0 -1
  968. package/dist/core/export-html/ansi-to-html.d.ts +0 -22
  969. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  970. package/dist/core/export-html/ansi-to-html.js +0 -249
  971. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  972. package/dist/core/export-html/index.d.ts +0 -37
  973. package/dist/core/export-html/index.d.ts.map +0 -1
  974. package/dist/core/export-html/index.js +0 -224
  975. package/dist/core/export-html/index.js.map +0 -1
  976. package/dist/core/export-html/template.css +0 -1001
  977. package/dist/core/export-html/template.html +0 -55
  978. package/dist/core/export-html/template.js +0 -1690
  979. package/dist/core/export-html/tool-renderer.d.ts +0 -40
  980. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  981. package/dist/core/export-html/tool-renderer.js +0 -95
  982. package/dist/core/export-html/tool-renderer.js.map +0 -1
  983. package/dist/core/extensions/index.d.ts +0 -12
  984. package/dist/core/extensions/index.d.ts.map +0 -1
  985. package/dist/core/extensions/index.js +0 -9
  986. package/dist/core/extensions/index.js.map +0 -1
  987. package/dist/core/extensions/loader.d.ts +0 -25
  988. package/dist/core/extensions/loader.d.ts.map +0 -1
  989. package/dist/core/extensions/loader.js +0 -436
  990. package/dist/core/extensions/loader.js.map +0 -1
  991. package/dist/core/extensions/runner.d.ts +0 -148
  992. package/dist/core/extensions/runner.d.ts.map +0 -1
  993. package/dist/core/extensions/runner.js +0 -700
  994. package/dist/core/extensions/runner.js.map +0 -1
  995. package/dist/core/extensions/types.d.ts +0 -1073
  996. package/dist/core/extensions/types.d.ts.map +0 -1
  997. package/dist/core/extensions/types.js +0 -45
  998. package/dist/core/extensions/types.js.map +0 -1
  999. package/dist/core/extensions/wrapper.d.ts +0 -20
  1000. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  1001. package/dist/core/extensions/wrapper.js +0 -22
  1002. package/dist/core/extensions/wrapper.js.map +0 -1
  1003. package/dist/core/footer-data-provider.d.ts +0 -48
  1004. package/dist/core/footer-data-provider.d.ts.map +0 -1
  1005. package/dist/core/footer-data-provider.js +0 -314
  1006. package/dist/core/footer-data-provider.js.map +0 -1
  1007. package/dist/core/index.d.ts +0 -12
  1008. package/dist/core/index.d.ts.map +0 -1
  1009. package/dist/core/index.js +0 -12
  1010. package/dist/core/index.js.map +0 -1
  1011. package/dist/core/keybindings.d.ts +0 -288
  1012. package/dist/core/keybindings.d.ts.map +0 -1
  1013. package/dist/core/keybindings.js +0 -240
  1014. package/dist/core/keybindings.js.map +0 -1
  1015. package/dist/core/messages.d.ts +0 -77
  1016. package/dist/core/messages.d.ts.map +0 -1
  1017. package/dist/core/messages.js +0 -123
  1018. package/dist/core/messages.js.map +0 -1
  1019. package/dist/core/model-registry.d.ts +0 -132
  1020. package/dist/core/model-registry.d.ts.map +0 -1
  1021. package/dist/core/model-registry.js +0 -583
  1022. package/dist/core/model-registry.js.map +0 -1
  1023. package/dist/core/model-resolver.d.ts +0 -110
  1024. package/dist/core/model-resolver.d.ts.map +0 -1
  1025. package/dist/core/model-resolver.js +0 -486
  1026. package/dist/core/model-resolver.js.map +0 -1
  1027. package/dist/core/output-guard.d.ts +0 -6
  1028. package/dist/core/output-guard.d.ts.map +0 -1
  1029. package/dist/core/output-guard.js +0 -59
  1030. package/dist/core/output-guard.js.map +0 -1
  1031. package/dist/core/package-manager.d.ts +0 -192
  1032. package/dist/core/package-manager.d.ts.map +0 -1
  1033. package/dist/core/package-manager.js +0 -1832
  1034. package/dist/core/package-manager.js.map +0 -1
  1035. package/dist/core/prompt-templates.d.ts +0 -51
  1036. package/dist/core/prompt-templates.d.ts.map +0 -1
  1037. package/dist/core/prompt-templates.js +0 -249
  1038. package/dist/core/prompt-templates.js.map +0 -1
  1039. package/dist/core/resolve-config-value.d.ts +0 -23
  1040. package/dist/core/resolve-config-value.d.ts.map +0 -1
  1041. package/dist/core/resolve-config-value.js +0 -126
  1042. package/dist/core/resolve-config-value.js.map +0 -1
  1043. package/dist/core/resource-loader.d.ts +0 -185
  1044. package/dist/core/resource-loader.d.ts.map +0 -1
  1045. package/dist/core/resource-loader.js +0 -720
  1046. package/dist/core/resource-loader.js.map +0 -1
  1047. package/dist/core/sdk.d.ts +0 -93
  1048. package/dist/core/sdk.d.ts.map +0 -1
  1049. package/dist/core/sdk.js +0 -236
  1050. package/dist/core/sdk.js.map +0 -1
  1051. package/dist/core/session-cwd.d.ts +0 -19
  1052. package/dist/core/session-cwd.d.ts.map +0 -1
  1053. package/dist/core/session-cwd.js +0 -38
  1054. package/dist/core/session-cwd.js.map +0 -1
  1055. package/dist/core/session-manager.d.ts +0 -333
  1056. package/dist/core/session-manager.d.ts.map +0 -1
  1057. package/dist/core/session-manager.js +0 -1105
  1058. package/dist/core/session-manager.js.map +0 -1
  1059. package/dist/core/settings-manager.d.ts +0 -237
  1060. package/dist/core/settings-manager.d.ts.map +0 -1
  1061. package/dist/core/settings-manager.js +0 -703
  1062. package/dist/core/settings-manager.js.map +0 -1
  1063. package/dist/core/skills.d.ts +0 -60
  1064. package/dist/core/skills.d.ts.map +0 -1
  1065. package/dist/core/skills.js +0 -409
  1066. package/dist/core/skills.js.map +0 -1
  1067. package/dist/core/slash-commands.d.ts +0 -14
  1068. package/dist/core/slash-commands.d.ts.map +0 -1
  1069. package/dist/core/slash-commands.js +0 -23
  1070. package/dist/core/slash-commands.js.map +0 -1
  1071. package/dist/core/source-info.d.ts +0 -18
  1072. package/dist/core/source-info.d.ts.map +0 -1
  1073. package/dist/core/source-info.js +0 -19
  1074. package/dist/core/source-info.js.map +0 -1
  1075. package/dist/core/system-prompt.d.ts +0 -28
  1076. package/dist/core/system-prompt.d.ts.map +0 -1
  1077. package/dist/core/system-prompt.js +0 -116
  1078. package/dist/core/system-prompt.js.map +0 -1
  1079. package/dist/core/timings.d.ts +0 -8
  1080. package/dist/core/timings.d.ts.map +0 -1
  1081. package/dist/core/timings.js +0 -31
  1082. package/dist/core/timings.js.map +0 -1
  1083. package/dist/core/tools/bash.d.ts +0 -73
  1084. package/dist/core/tools/bash.d.ts.map +0 -1
  1085. package/dist/core/tools/bash.js +0 -352
  1086. package/dist/core/tools/bash.js.map +0 -1
  1087. package/dist/core/tools/edit-diff.d.ts +0 -85
  1088. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  1089. package/dist/core/tools/edit-diff.js +0 -337
  1090. package/dist/core/tools/edit-diff.js.map +0 -1
  1091. package/dist/core/tools/edit.d.ts +0 -53
  1092. package/dist/core/tools/edit.d.ts.map +0 -1
  1093. package/dist/core/tools/edit.js +0 -196
  1094. package/dist/core/tools/edit.js.map +0 -1
  1095. package/dist/core/tools/file-mutation-queue.d.ts +0 -6
  1096. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  1097. package/dist/core/tools/file-mutation-queue.js +0 -37
  1098. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  1099. package/dist/core/tools/find.d.ts +0 -46
  1100. package/dist/core/tools/find.d.ts.map +0 -1
  1101. package/dist/core/tools/find.js +0 -258
  1102. package/dist/core/tools/find.js.map +0 -1
  1103. package/dist/core/tools/grep.d.ts +0 -56
  1104. package/dist/core/tools/grep.d.ts.map +0 -1
  1105. package/dist/core/tools/grep.js +0 -293
  1106. package/dist/core/tools/grep.js.map +0 -1
  1107. package/dist/core/tools/index.d.ts +0 -115
  1108. package/dist/core/tools/index.d.ts.map +0 -1
  1109. package/dist/core/tools/index.js +0 -86
  1110. package/dist/core/tools/index.js.map +0 -1
  1111. package/dist/core/tools/ls.d.ts +0 -46
  1112. package/dist/core/tools/ls.d.ts.map +0 -1
  1113. package/dist/core/tools/ls.js +0 -172
  1114. package/dist/core/tools/ls.js.map +0 -1
  1115. package/dist/core/tools/path-utils.d.ts +0 -8
  1116. package/dist/core/tools/path-utils.d.ts.map +0 -1
  1117. package/dist/core/tools/path-utils.js +0 -81
  1118. package/dist/core/tools/path-utils.js.map +0 -1
  1119. package/dist/core/tools/read.d.ts +0 -46
  1120. package/dist/core/tools/read.d.ts.map +0 -1
  1121. package/dist/core/tools/read.js +0 -225
  1122. package/dist/core/tools/read.js.map +0 -1
  1123. package/dist/core/tools/render-utils.d.ts +0 -21
  1124. package/dist/core/tools/render-utils.d.ts.map +0 -1
  1125. package/dist/core/tools/render-utils.js +0 -49
  1126. package/dist/core/tools/render-utils.js.map +0 -1
  1127. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  1128. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  1129. package/dist/core/tools/tool-definition-wrapper.js +0 -32
  1130. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  1131. package/dist/core/tools/truncate.d.ts +0 -70
  1132. package/dist/core/tools/truncate.d.ts.map +0 -1
  1133. package/dist/core/tools/truncate.js +0 -205
  1134. package/dist/core/tools/truncate.js.map +0 -1
  1135. package/dist/core/tools/write.d.ts +0 -35
  1136. package/dist/core/tools/write.d.ts.map +0 -1
  1137. package/dist/core/tools/write.js +0 -216
  1138. package/dist/core/tools/write.js.map +0 -1
  1139. package/dist/index.d.ts +0 -28
  1140. package/dist/index.d.ts.map +0 -1
  1141. package/dist/index.js +0 -43
  1142. package/dist/index.js.map +0 -1
  1143. package/dist/main.d.ts +0 -8
  1144. package/dist/main.d.ts.map +0 -1
  1145. package/dist/main.js +0 -593
  1146. package/dist/main.js.map +0 -1
  1147. package/dist/migrations.d.ts +0 -33
  1148. package/dist/migrations.d.ts.map +0 -1
  1149. package/dist/migrations.js +0 -281
  1150. package/dist/migrations.js.map +0 -1
  1151. package/dist/modes/index.d.ts +0 -9
  1152. package/dist/modes/index.d.ts.map +0 -1
  1153. package/dist/modes/index.js +0 -8
  1154. package/dist/modes/index.js.map +0 -1
  1155. package/dist/modes/interactive/components/armin.d.ts +0 -34
  1156. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  1157. package/dist/modes/interactive/components/armin.js +0 -333
  1158. package/dist/modes/interactive/components/armin.js.map +0 -1
  1159. package/dist/modes/interactive/components/assistant-message.d.ts +0 -18
  1160. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  1161. package/dist/modes/interactive/components/assistant-message.js +0 -107
  1162. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  1163. package/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  1164. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  1165. package/dist/modes/interactive/components/bash-execution.js +0 -175
  1166. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  1167. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  1168. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  1169. package/dist/modes/interactive/components/bordered-loader.js +0 -51
  1170. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  1171. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  1172. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  1173. package/dist/modes/interactive/components/branch-summary-message.js +0 -44
  1174. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  1175. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  1176. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  1177. package/dist/modes/interactive/components/compaction-summary-message.js +0 -45
  1178. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  1179. package/dist/modes/interactive/components/config-selector.d.ts +0 -71
  1180. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  1181. package/dist/modes/interactive/components/config-selector.js +0 -479
  1182. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  1183. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  1184. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  1185. package/dist/modes/interactive/components/countdown-timer.js +0 -33
  1186. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  1187. package/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  1188. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  1189. package/dist/modes/interactive/components/custom-editor.js +0 -70
  1190. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  1191. package/dist/modes/interactive/components/custom-message.d.ts +0 -20
  1192. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  1193. package/dist/modes/interactive/components/custom-message.js +0 -79
  1194. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  1195. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  1196. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  1197. package/dist/modes/interactive/components/daxnuts.js +0 -140
  1198. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  1199. package/dist/modes/interactive/components/diff.d.ts +0 -12
  1200. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  1201. package/dist/modes/interactive/components/diff.js +0 -133
  1202. package/dist/modes/interactive/components/diff.js.map +0 -1
  1203. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  1204. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  1205. package/dist/modes/interactive/components/dynamic-border.js +0 -21
  1206. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  1207. package/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  1208. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  1209. package/dist/modes/interactive/components/extension-editor.js +0 -111
  1210. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  1211. package/dist/modes/interactive/components/extension-input.d.ts +0 -23
  1212. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  1213. package/dist/modes/interactive/components/extension-input.js +0 -61
  1214. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  1215. package/dist/modes/interactive/components/extension-selector.d.ts +0 -24
  1216. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  1217. package/dist/modes/interactive/components/extension-selector.js +0 -78
  1218. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  1219. package/dist/modes/interactive/components/footer.d.ts +0 -27
  1220. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  1221. package/dist/modes/interactive/components/footer.js +0 -201
  1222. package/dist/modes/interactive/components/footer.js.map +0 -1
  1223. package/dist/modes/interactive/components/index.d.ts +0 -32
  1224. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  1225. package/dist/modes/interactive/components/index.js +0 -33
  1226. package/dist/modes/interactive/components/index.js.map +0 -1
  1227. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -8
  1228. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  1229. package/dist/modes/interactive/components/keybinding-hints.js +0 -22
  1230. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  1231. package/dist/modes/interactive/components/login-dialog.d.ts +0 -42
  1232. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  1233. package/dist/modes/interactive/components/login-dialog.js +0 -145
  1234. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  1235. package/dist/modes/interactive/components/model-selector.d.ts +0 -47
  1236. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  1237. package/dist/modes/interactive/components/model-selector.js +0 -275
  1238. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  1239. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  1240. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  1241. package/dist/modes/interactive/components/oauth-selector.js +0 -97
  1242. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  1243. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  1244. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  1245. package/dist/modes/interactive/components/scoped-models-selector.js +0 -275
  1246. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  1247. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  1248. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  1249. package/dist/modes/interactive/components/session-selector-search.js +0 -155
  1250. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  1251. package/dist/modes/interactive/components/session-selector.d.ts +0 -95
  1252. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  1253. package/dist/modes/interactive/components/session-selector.js +0 -848
  1254. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  1255. package/dist/modes/interactive/components/settings-selector.d.ts +0 -58
  1256. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  1257. package/dist/modes/interactive/components/settings-selector.js +0 -301
  1258. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  1259. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  1260. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  1261. package/dist/modes/interactive/components/show-images-selector.js +0 -39
  1262. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  1263. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  1264. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  1265. package/dist/modes/interactive/components/skill-invocation-message.js +0 -47
  1266. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  1267. package/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  1268. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  1269. package/dist/modes/interactive/components/theme-selector.js +0 -50
  1270. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  1271. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  1272. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  1273. package/dist/modes/interactive/components/thinking-selector.js +0 -51
  1274. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  1275. package/dist/modes/interactive/components/tool-execution.d.ts +0 -58
  1276. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  1277. package/dist/modes/interactive/components/tool-execution.js +0 -274
  1278. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  1279. package/dist/modes/interactive/components/tree-selector.d.ts +0 -89
  1280. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  1281. package/dist/modes/interactive/components/tree-selector.js +0 -1084
  1282. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  1283. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  1284. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  1285. package/dist/modes/interactive/components/user-message-selector.js +0 -113
  1286. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  1287. package/dist/modes/interactive/components/user-message.d.ts +0 -9
  1288. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  1289. package/dist/modes/interactive/components/user-message.js +0 -28
  1290. package/dist/modes/interactive/components/user-message.js.map +0 -1
  1291. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  1292. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  1293. package/dist/modes/interactive/components/visual-truncate.js +0 -33
  1294. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  1295. package/dist/modes/interactive/interactive-mode.d.ts +0 -320
  1296. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  1297. package/dist/modes/interactive/interactive-mode.js +0 -3970
  1298. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  1299. package/dist/modes/interactive/theme/dark.json +0 -85
  1300. package/dist/modes/interactive/theme/light.json +0 -84
  1301. package/dist/modes/interactive/theme/theme-schema.json +0 -335
  1302. package/dist/modes/interactive/theme/theme.d.ts +0 -81
  1303. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  1304. package/dist/modes/interactive/theme/theme.js +0 -979
  1305. package/dist/modes/interactive/theme/theme.js.map +0 -1
  1306. package/dist/modes/print-mode.d.ts +0 -28
  1307. package/dist/modes/print-mode.d.ts.map +0 -1
  1308. package/dist/modes/print-mode.js +0 -112
  1309. package/dist/modes/print-mode.js.map +0 -1
  1310. package/dist/modes/rpc/jsonl.d.ts +0 -17
  1311. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  1312. package/dist/modes/rpc/jsonl.js +0 -49
  1313. package/dist/modes/rpc/jsonl.js.map +0 -1
  1314. package/dist/modes/rpc/rpc-client.d.ts +0 -217
  1315. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  1316. package/dist/modes/rpc/rpc-client.js +0 -402
  1317. package/dist/modes/rpc/rpc-client.js.map +0 -1
  1318. package/dist/modes/rpc/rpc-mode.d.ts +0 -20
  1319. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  1320. package/dist/modes/rpc/rpc-mode.js +0 -550
  1321. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  1322. package/dist/modes/rpc/rpc-types.d.ts +0 -408
  1323. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  1324. package/dist/modes/rpc/rpc-types.js +0 -8
  1325. package/dist/modes/rpc/rpc-types.js.map +0 -1
  1326. package/dist/package-manager-cli.d.ts +0 -4
  1327. package/dist/package-manager-cli.d.ts.map +0 -1
  1328. package/dist/package-manager-cli.js +0 -234
  1329. package/dist/package-manager-cli.js.map +0 -1
  1330. package/dist/utils/changelog.d.ts +0 -21
  1331. package/dist/utils/changelog.d.ts.map +0 -1
  1332. package/dist/utils/changelog.js +0 -87
  1333. package/dist/utils/changelog.js.map +0 -1
  1334. package/dist/utils/child-process.d.ts +0 -11
  1335. package/dist/utils/child-process.d.ts.map +0 -1
  1336. package/dist/utils/child-process.js +0 -78
  1337. package/dist/utils/child-process.js.map +0 -1
  1338. package/dist/utils/clipboard-image.d.ts +0 -11
  1339. package/dist/utils/clipboard-image.d.ts.map +0 -1
  1340. package/dist/utils/clipboard-image.js +0 -245
  1341. package/dist/utils/clipboard-image.js.map +0 -1
  1342. package/dist/utils/clipboard-native.d.ts +0 -8
  1343. package/dist/utils/clipboard-native.d.ts.map +0 -1
  1344. package/dist/utils/clipboard-native.js +0 -14
  1345. package/dist/utils/clipboard-native.js.map +0 -1
  1346. package/dist/utils/clipboard.d.ts +0 -2
  1347. package/dist/utils/clipboard.d.ts.map +0 -1
  1348. package/dist/utils/clipboard.js +0 -78
  1349. package/dist/utils/clipboard.js.map +0 -1
  1350. package/dist/utils/exif-orientation.d.ts +0 -5
  1351. package/dist/utils/exif-orientation.d.ts.map +0 -1
  1352. package/dist/utils/exif-orientation.js +0 -158
  1353. package/dist/utils/exif-orientation.js.map +0 -1
  1354. package/dist/utils/frontmatter.d.ts +0 -8
  1355. package/dist/utils/frontmatter.d.ts.map +0 -1
  1356. package/dist/utils/frontmatter.js +0 -26
  1357. package/dist/utils/frontmatter.js.map +0 -1
  1358. package/dist/utils/git.d.ts +0 -26
  1359. package/dist/utils/git.d.ts.map +0 -1
  1360. package/dist/utils/git.js +0 -163
  1361. package/dist/utils/git.js.map +0 -1
  1362. package/dist/utils/image-convert.d.ts +0 -9
  1363. package/dist/utils/image-convert.d.ts.map +0 -1
  1364. package/dist/utils/image-convert.js +0 -39
  1365. package/dist/utils/image-convert.js.map +0 -1
  1366. package/dist/utils/image-resize.d.ts +0 -36
  1367. package/dist/utils/image-resize.d.ts.map +0 -1
  1368. package/dist/utils/image-resize.js +0 -137
  1369. package/dist/utils/image-resize.js.map +0 -1
  1370. package/dist/utils/mime.d.ts +0 -2
  1371. package/dist/utils/mime.d.ts.map +0 -1
  1372. package/dist/utils/mime.js +0 -26
  1373. package/dist/utils/mime.js.map +0 -1
  1374. package/dist/utils/paths.d.ts +0 -7
  1375. package/dist/utils/paths.d.ts.map +0 -1
  1376. package/dist/utils/paths.js +0 -19
  1377. package/dist/utils/paths.js.map +0 -1
  1378. package/dist/utils/photon.d.ts +0 -21
  1379. package/dist/utils/photon.d.ts.map +0 -1
  1380. package/dist/utils/photon.js +0 -121
  1381. package/dist/utils/photon.js.map +0 -1
  1382. package/dist/utils/shell.d.ts +0 -26
  1383. package/dist/utils/shell.d.ts.map +0 -1
  1384. package/dist/utils/shell.js +0 -186
  1385. package/dist/utils/shell.js.map +0 -1
  1386. package/dist/utils/sleep.d.ts +0 -5
  1387. package/dist/utils/sleep.d.ts.map +0 -1
  1388. package/dist/utils/sleep.js +0 -17
  1389. package/dist/utils/sleep.js.map +0 -1
  1390. package/dist/utils/tools-manager.d.ts +0 -3
  1391. package/dist/utils/tools-manager.d.ts.map +0 -1
  1392. package/dist/utils/tools-manager.js +0 -252
  1393. package/dist/utils/tools-manager.js.map +0 -1
  1394. package/docs/compaction.md +0 -398
  1395. package/docs/custom-provider.md +0 -597
  1396. package/docs/development.md +0 -72
  1397. package/docs/extensions.md +0 -2288
  1398. package/docs/images/doom-extension.png +0 -0
  1399. package/docs/images/exy.png +0 -0
  1400. package/docs/images/interactive-mode.png +0 -0
  1401. package/docs/images/tree-view.png +0 -0
  1402. package/docs/json.md +0 -84
  1403. package/docs/keybindings.md +0 -175
  1404. package/docs/models.md +0 -349
  1405. package/docs/packages.md +0 -219
  1406. package/docs/prompt-templates.md +0 -67
  1407. package/docs/providers.md +0 -200
  1408. package/docs/rpc.md +0 -1425
  1409. package/docs/sdk.md +0 -1136
  1410. package/docs/session.md +0 -423
  1411. package/docs/settings.md +0 -246
  1412. package/docs/shell-aliases.md +0 -13
  1413. package/docs/skills.md +0 -236
  1414. package/docs/terminal-setup.md +0 -108
  1415. package/docs/termux.md +0 -137
  1416. package/docs/themes.md +0 -296
  1417. package/docs/tmux.md +0 -61
  1418. package/docs/tree.md +0 -239
  1419. package/docs/tui.md +0 -890
  1420. package/docs/windows.md +0 -17
  1421. package/examples/extensions/antigravity-image-gen.ts +0 -418
  1422. package/examples/extensions/auto-commit-on-exit.ts +0 -49
  1423. package/examples/extensions/bash-spawn-hook.ts +0 -30
  1424. package/examples/extensions/bookmark.ts +0 -50
  1425. package/examples/extensions/built-in-tool-renderer.ts +0 -246
  1426. package/examples/extensions/claude-rules.ts +0 -86
  1427. package/examples/extensions/commands.ts +0 -72
  1428. package/examples/extensions/confirm-destructive.ts +0 -59
  1429. package/examples/extensions/custom-compaction.ts +0 -127
  1430. package/examples/extensions/custom-footer.ts +0 -64
  1431. package/examples/extensions/custom-header.ts +0 -73
  1432. package/examples/extensions/custom-provider-anthropic/index.ts +0 -604
  1433. package/examples/extensions/custom-provider-anthropic/package-lock.json +0 -24
  1434. package/examples/extensions/custom-provider-anthropic/package.json +0 -19
  1435. package/examples/extensions/custom-provider-gitlab-duo/index.ts +0 -349
  1436. package/examples/extensions/custom-provider-gitlab-duo/package.json +0 -16
  1437. package/examples/extensions/custom-provider-gitlab-duo/test.ts +0 -82
  1438. package/examples/extensions/custom-provider-qwen-cli/index.ts +0 -345
  1439. package/examples/extensions/custom-provider-qwen-cli/package.json +0 -16
  1440. package/examples/extensions/dirty-repo-guard.ts +0 -56
  1441. package/examples/extensions/doom-overlay/README.md +0 -48
  1442. package/examples/extensions/doom-overlay/doom/build/doom.js +0 -21
  1443. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  1444. package/examples/extensions/doom-overlay/doom/build.sh +0 -152
  1445. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -72
  1446. package/examples/extensions/doom-overlay/doom-component.ts +0 -132
  1447. package/examples/extensions/doom-overlay/doom-engine.ts +0 -173
  1448. package/examples/extensions/doom-overlay/doom-keys.ts +0 -104
  1449. package/examples/extensions/doom-overlay/index.ts +0 -74
  1450. package/examples/extensions/doom-overlay/wad-finder.ts +0 -51
  1451. package/examples/extensions/dynamic-resources/SKILL.md +0 -8
  1452. package/examples/extensions/dynamic-resources/dynamic.json +0 -79
  1453. package/examples/extensions/dynamic-resources/dynamic.md +0 -5
  1454. package/examples/extensions/dynamic-resources/index.ts +0 -15
  1455. package/examples/extensions/dynamic-tools.ts +0 -74
  1456. package/examples/extensions/event-bus.ts +0 -43
  1457. package/examples/extensions/file-trigger.ts +0 -41
  1458. package/examples/extensions/git-checkpoint.ts +0 -53
  1459. package/examples/extensions/handoff.ts +0 -153
  1460. package/examples/extensions/hidden-thinking-label.ts +0 -53
  1461. package/examples/extensions/inline-bash.ts +0 -94
  1462. package/examples/extensions/input-transform.ts +0 -43
  1463. package/examples/extensions/interactive-shell.ts +0 -196
  1464. package/examples/extensions/mac-system-theme.ts +0 -47
  1465. package/examples/extensions/message-renderer.ts +0 -59
  1466. package/examples/extensions/minimal-mode.ts +0 -426
  1467. package/examples/extensions/modal-editor.ts +0 -85
  1468. package/examples/extensions/model-status.ts +0 -31
  1469. package/examples/extensions/notify.ts +0 -55
  1470. package/examples/extensions/overlay-qa-tests.ts +0 -1348
  1471. package/examples/extensions/overlay-test.ts +0 -150
  1472. package/examples/extensions/permission-gate.ts +0 -34
  1473. package/examples/extensions/plan-mode/README.md +0 -69
  1474. package/examples/extensions/plan-mode/index.ts +0 -340
  1475. package/examples/extensions/plan-mode/utils.ts +0 -168
  1476. package/examples/extensions/preset.ts +0 -403
  1477. package/examples/extensions/protected-paths.ts +0 -30
  1478. package/examples/extensions/provider-payload.ts +0 -14
  1479. package/examples/extensions/qna.ts +0 -122
  1480. package/examples/extensions/question.ts +0 -264
  1481. package/examples/extensions/questionnaire.ts +0 -427
  1482. package/examples/extensions/rainbow-editor.ts +0 -88
  1483. package/examples/extensions/rpc-demo.ts +0 -118
  1484. package/examples/extensions/sandbox/index.ts +0 -321
  1485. package/examples/extensions/sandbox/package-lock.json +0 -92
  1486. package/examples/extensions/sandbox/package.json +0 -19
  1487. package/examples/extensions/send-user-message.ts +0 -97
  1488. package/examples/extensions/session-name.ts +0 -27
  1489. package/examples/extensions/shutdown-command.ts +0 -63
  1490. package/examples/extensions/snake.ts +0 -343
  1491. package/examples/extensions/space-invaders.ts +0 -560
  1492. package/examples/extensions/ssh.ts +0 -220
  1493. package/examples/extensions/status-line.ts +0 -32
  1494. package/examples/extensions/subagent/README.md +0 -181
  1495. package/examples/extensions/subagent/agents/planner.md +0 -37
  1496. package/examples/extensions/subagent/agents/reviewer.md +0 -35
  1497. package/examples/extensions/subagent/agents/scout.md +0 -50
  1498. package/examples/extensions/subagent/agents/worker.md +0 -24
  1499. package/examples/extensions/subagent/agents.ts +0 -126
  1500. package/examples/extensions/subagent/index.ts +0 -986
  1501. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  1502. package/examples/extensions/subagent/prompts/implement.md +0 -10
  1503. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
  1504. package/examples/extensions/summarize.ts +0 -206
  1505. package/examples/extensions/system-prompt-header.ts +0 -17
  1506. package/examples/extensions/timed-confirm.ts +0 -70
  1507. package/examples/extensions/titlebar-spinner.ts +0 -58
  1508. package/examples/extensions/tool-override.ts +0 -144
  1509. package/examples/extensions/trigger-compact.ts +0 -50
  1510. package/examples/extensions/truncated-tool.ts +0 -195
  1511. package/examples/extensions/widget-placement.ts +0 -9
  1512. package/examples/rpc-extension-ui.ts +0 -640
  1513. package/examples/sdk/05-tools.ts +0 -56
  1514. package/examples/sdk/10-settings.ts +0 -51
  1515. package/examples/sdk/12-full-control.ts +0 -81
  1516. package/examples/sdk/13-session-runtime.ts +0 -67
  1517. /package/{dist/core/export-html → src/export/html}/vendor/highlight.min.js +0 -0
  1518. /package/{dist/core/export-html → src/export/html}/vendor/marked.min.js +0 -0
@@ -0,0 +1,1366 @@
1
+ /**
2
+ * Extension system types.
3
+ *
4
+ * Extensions are TypeScript modules that can:
5
+ * - Subscribe to agent lifecycle events
6
+ * - Register LLM-callable tools
7
+ * - Register commands, keyboard shortcuts, and CLI flags
8
+ * - Interact with the user via UI primitives
9
+ */
10
+
11
+ import type {
12
+ AgentMessage,
13
+ AgentToolResult,
14
+ AgentToolUpdateCallback,
15
+ ThinkingLevel,
16
+ } from "@f5xc-salesdemos/pi-agent-core";
17
+ import type {
18
+ Api,
19
+ AssistantMessageEvent,
20
+ AssistantMessageEventStream,
21
+ Context,
22
+ ImageContent,
23
+ Model,
24
+ OAuthCredentials,
25
+ OAuthLoginCallbacks,
26
+ SimpleStreamOptions,
27
+ TextContent,
28
+ ToolResultMessage,
29
+ } from "@f5xc-salesdemos/pi-ai";
30
+ import type { SearchDb } from "@f5xc-salesdemos/pi-natives";
31
+ import type { AutocompleteItem, Component, EditorComponent, EditorTheme, KeyId, TUI } from "@f5xc-salesdemos/pi-tui";
32
+ import type * as piCodingAgent from "@f5xc-salesdemos/xcsh";
33
+ import type { Static, TSchema } from "@sinclair/typebox";
34
+ import type { Rule } from "../../capability/rule";
35
+ import type { KeybindingsManager } from "../../config/keybindings";
36
+ import type { ModelRegistry } from "../../config/model-registry";
37
+ import type { EditToolDetails } from "../../edit";
38
+ import type { BashResult } from "../../exec/bash-executor";
39
+ import type { ExecOptions, ExecResult } from "../../exec/exec";
40
+ import type { PythonResult } from "../../ipy/executor";
41
+ import type { Theme } from "../../modes/theme/theme";
42
+ import type { CompactionPreparation, CompactionResult } from "../../session/compaction";
43
+ import type { CustomMessage } from "../../session/messages";
44
+ import type {
45
+ BranchSummaryEntry,
46
+ CompactionEntry,
47
+ ReadonlySessionManager,
48
+ SessionEntry,
49
+ SessionManager,
50
+ } from "../../session/session-manager";
51
+ import type {
52
+ BashToolDetails,
53
+ BashToolInput,
54
+ FindToolDetails,
55
+ FindToolInput,
56
+ GrepToolDetails,
57
+ GrepToolInput,
58
+ ReadToolDetails,
59
+ ReadToolInput,
60
+ WriteToolInput,
61
+ } from "../../tools";
62
+ import type { TodoItem } from "../../tools/todo-write";
63
+ import type { EventBus } from "../../utils/event-bus";
64
+ import type { SlashCommandInfo } from "../slash-commands";
65
+
66
+ export type { AppKeybinding, KeybindingsManager } from "../../config/keybindings";
67
+ export type { ExecOptions, ExecResult } from "../../exec/exec";
68
+ export type { AgentToolResult, AgentToolUpdateCallback };
69
+
70
+ // ============================================================================
71
+ // UI Context
72
+ // ============================================================================
73
+
74
+ /**
75
+ * UI dialog options for extensions.
76
+ */
77
+ export interface ExtensionUIDialogOptions {
78
+ signal?: AbortSignal;
79
+ timeout?: number;
80
+ /** Invoked when the UI times out while waiting for a selection/input */
81
+ onTimeout?: () => void;
82
+ /** Initial cursor position for select dialogs (0-indexed) */
83
+ initialIndex?: number;
84
+ /** Render an outlined list for select dialogs */
85
+ outline?: boolean;
86
+ /** Invoked when user presses left arrow in select dialogs */
87
+ onLeft?: () => void;
88
+ /** Invoked when user presses right arrow in select dialogs */
89
+ onRight?: () => void;
90
+ /** Invoked when user presses the external editor shortcut in select dialogs */
91
+ onExternalEditor?: () => void;
92
+ /** Optional footer hint text rendered by interactive selector */
93
+ helpText?: string;
94
+ }
95
+
96
+ /** Raw terminal input listener for extensions. */
97
+ export type TerminalInputHandler = (data: string) => { consume?: boolean; data?: string } | undefined;
98
+
99
+ export type WidgetPlacement = "aboveEditor" | "belowEditor";
100
+
101
+ export interface ExtensionWidgetOptions {
102
+ placement?: WidgetPlacement;
103
+ }
104
+
105
+ export type ExtensionUiComponent = Component & { dispose?(): void };
106
+ export type ExtensionUiComponentFactory = (tui: TUI, theme: Theme) => ExtensionUiComponent;
107
+ export type ExtensionWidgetContent = string[] | ExtensionUiComponentFactory | undefined;
108
+
109
+ /**
110
+ * UI context for extensions to request interactive UI.
111
+ * Each mode (interactive, RPC, print) provides its own implementation.
112
+ */
113
+ export interface ExtensionUIContext {
114
+ /** Show a selector and return the user's choice. */
115
+ select(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
116
+
117
+ /** Show a confirmation dialog. */
118
+ confirm(title: string, message: string, dialogOptions?: ExtensionUIDialogOptions): Promise<boolean>;
119
+
120
+ /** Show a text input dialog. */
121
+ input(title: string, placeholder?: string, dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
122
+
123
+ /** Show a notification to the user. */
124
+ notify(message: string, type?: "info" | "warning" | "error"): void;
125
+
126
+ /** Listen to raw terminal input (interactive mode only). Returns an unsubscribe function. */
127
+ onTerminalInput(handler: TerminalInputHandler): () => void;
128
+
129
+ /** Set status text in the footer/status bar. Pass undefined to clear. */
130
+ setStatus(key: string, text: string | undefined): void;
131
+
132
+ /** Set the working/loading message shown during streaming. Call with no argument to restore default. */
133
+ setWorkingMessage(message?: string): void;
134
+
135
+ /** Set a widget to display above or below the editor. Accepts string array or component factory. */
136
+ setWidget(key: string, content: ExtensionWidgetContent, options?: ExtensionWidgetOptions): void;
137
+
138
+ /** Set a custom footer component, or undefined to restore the built-in footer. */
139
+ setFooter(factory: ExtensionUiComponentFactory | undefined): void;
140
+
141
+ /** Set a custom header component, or undefined to restore the built-in header. */
142
+ setHeader(factory: ExtensionUiComponentFactory | undefined): void;
143
+
144
+ /** Set the terminal window/tab title. */
145
+ setTitle(title: string): void;
146
+
147
+ /** Show a custom component with keyboard focus. */
148
+ custom<T>(
149
+ factory: (
150
+ tui: TUI,
151
+ theme: Theme,
152
+ keybindings: KeybindingsManager,
153
+ done: (result: T) => void,
154
+ ) => ExtensionUiComponent | Promise<ExtensionUiComponent>,
155
+ options?: { overlay?: boolean },
156
+ ): Promise<T>;
157
+
158
+ /** Set the text in the core input editor. */
159
+ setEditorText(text: string): void;
160
+
161
+ /**
162
+ * Paste text into the core input editor.
163
+ *
164
+ * Interactive mode should route through the editor's paste handling (e.g. large paste markers).
165
+ * Non-interactive modes may fall back to replacing the editor text.
166
+ */
167
+ pasteToEditor(text: string): void;
168
+
169
+ /** Get the current text from the core input editor. */
170
+ getEditorText(): string;
171
+
172
+ /** Show a multi-line editor for text editing. */
173
+ editor(
174
+ title: string,
175
+ prefill?: string,
176
+ dialogOptions?: ExtensionUIDialogOptions,
177
+ editorOptions?: { promptStyle?: boolean },
178
+ ): Promise<string | undefined>;
179
+
180
+ /** Set a custom editor component via factory function, or undefined to restore the default editor. */
181
+ setEditorComponent(
182
+ factory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined,
183
+ ): void;
184
+
185
+ /** Get the current theme for styling. */
186
+ readonly theme: Theme;
187
+
188
+ /** Get all available themes with names and paths. */
189
+ getAllThemes(): Promise<{ name: string; path: string | undefined }[]>;
190
+
191
+ /** Load a theme by name without switching to it. */
192
+ getTheme(name: string): Promise<Theme | undefined>;
193
+
194
+ /** Set the current theme by name or Theme object. */
195
+ setTheme(theme: string | Theme): Promise<{ success: boolean; error?: string }>;
196
+
197
+ /** Get current tool output expansion state. */
198
+ getToolsExpanded(): boolean;
199
+
200
+ /** Set tool output expansion state. */
201
+ setToolsExpanded(expanded: boolean): void;
202
+ }
203
+
204
+ // ============================================================================
205
+ // Extension Context
206
+ // ============================================================================
207
+
208
+ export interface ContextUsage {
209
+ /** Estimated context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */
210
+ tokens: number | null;
211
+ contextWindow: number;
212
+ /** Context usage as percentage of context window, or null if tokens is unknown. */
213
+ percent: number | null;
214
+ }
215
+
216
+ export interface CompactOptions {
217
+ onComplete?: (result: CompactionResult) => void;
218
+ onError?: (error: Error) => void;
219
+ }
220
+
221
+ /**
222
+ * Context passed to extension event handlers.
223
+ */
224
+ export interface ExtensionContext {
225
+ /** UI methods for user interaction */
226
+ ui: ExtensionUIContext;
227
+ /** Get current context usage for the active model. */
228
+ getContextUsage(): ContextUsage | undefined;
229
+ /** Compact the session context (interactive mode shows UI). */
230
+ compact(instructionsOrOptions?: string | CompactOptions): Promise<void>;
231
+ /** Whether UI is available (false in print/RPC mode) */
232
+ hasUI: boolean;
233
+ /** Current working directory */
234
+ cwd: string;
235
+ /** Session manager (read-only) */
236
+ sessionManager: ReadonlySessionManager;
237
+ /** Model registry for API key resolution */
238
+ modelRegistry: ModelRegistry;
239
+ /** Current model (may be undefined) */
240
+ model: Model | undefined;
241
+ /** Shared native search DB for grep/glob/fuzzyFind-backed workflows. */
242
+ searchDb?: SearchDb;
243
+ /** Whether the agent is idle (not streaming) */
244
+ isIdle(): boolean;
245
+ /** Abort the current agent operation */
246
+ abort(): void;
247
+ /** Whether there are queued messages waiting */
248
+ hasPendingMessages(): boolean;
249
+ /** Gracefully shutdown and exit. */
250
+ shutdown(): void;
251
+ /** Get the current effective system prompt. */
252
+ getSystemPrompt(): string;
253
+ /** @deprecated Use hasPendingMessages() instead */
254
+ hasQueuedMessages(): boolean;
255
+ }
256
+
257
+ /**
258
+ * Extended context for command handlers.
259
+ * Includes session control methods only safe in user-initiated commands.
260
+ */
261
+ export interface ExtensionCommandContext extends ExtensionContext {
262
+ /** Get current context usage for the active model. */
263
+ getContextUsage(): ContextUsage | undefined;
264
+
265
+ /** Wait for the agent to finish streaming */
266
+ waitForIdle(): Promise<void>;
267
+
268
+ /** Start a new session, optionally with initialization. */
269
+ newSession(options?: {
270
+ parentSession?: string;
271
+ setup?: (sessionManager: SessionManager) => Promise<void>;
272
+ }): Promise<{ cancelled: boolean }>;
273
+
274
+ /** Branch from a specific entry, creating a new session file. */
275
+ branch(entryId: string): Promise<{ cancelled: boolean }>;
276
+
277
+ /** Navigate to a different point in the session tree. */
278
+ navigateTree(targetId: string, options?: { summarize?: boolean }): Promise<{ cancelled: boolean }>;
279
+
280
+ /** Switch to a different session file. */
281
+ switchSession(sessionPath: string): Promise<{ cancelled: boolean }>;
282
+
283
+ /** Reload the current session/runtime state. */
284
+ reload(): Promise<void>;
285
+
286
+ /** Compact the session context (interactive mode shows UI). */
287
+ compact(instructionsOrOptions?: string | CompactOptions): Promise<void>;
288
+ }
289
+
290
+ // ============================================================================
291
+ // Tool Types
292
+ // ============================================================================
293
+
294
+ /** Rendering options for tool results */
295
+ export interface ToolRenderResultOptions {
296
+ /** Whether the result view is expanded */
297
+ expanded: boolean;
298
+ /** Whether this is a partial/streaming result */
299
+ isPartial: boolean;
300
+ /** Current spinner frame index for animated elements (optional) */
301
+ spinnerFrame?: number;
302
+ }
303
+
304
+ /** Session event for tool onSession lifecycle */
305
+ export interface ToolSessionEvent {
306
+ /** Reason for the session event */
307
+ reason: "start" | "switch" | "branch" | "tree" | "shutdown";
308
+ /** Previous session file path, or undefined for "start" and "shutdown" */
309
+ previousSessionFile: string | undefined;
310
+ }
311
+
312
+ /**
313
+ * Tool definition for registerTool().
314
+ */
315
+ export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = unknown> {
316
+ /** Tool name (used in LLM tool calls) */
317
+ name: string;
318
+ /** Human-readable label for UI */
319
+ label: string;
320
+ /** Description for LLM */
321
+ description: string;
322
+ /** Parameter schema (TypeBox) */
323
+ parameters: TParams;
324
+ /** If true, tool is excluded unless explicitly listed in --tools or agent's tools field */
325
+ hidden?: boolean;
326
+ /** If true, tool is registered but not auto-included in the initial active set.
327
+ * The registering extension is responsible for activating/deactivating it via setActiveTools(). */
328
+ defaultInactive?: boolean;
329
+ /** If true, tool may stage deferred changes that require explicit resolve/discard. */
330
+ deferrable?: boolean;
331
+ /** MCP server name for discovery/search metadata when this tool fronts an MCP server. */
332
+ mcpServerName?: string;
333
+ /** Original MCP tool name for discovery/search metadata. */
334
+ mcpToolName?: string;
335
+ /** Execute the tool. */
336
+ execute(
337
+ toolCallId: string,
338
+ params: Static<TParams>,
339
+ signal: AbortSignal | undefined,
340
+ onUpdate: AgentToolUpdateCallback<TDetails> | undefined,
341
+ ctx: ExtensionContext,
342
+ ): Promise<AgentToolResult<TDetails>>;
343
+
344
+ /** Called on session lifecycle events - use to reconstruct state or cleanup resources */
345
+ onSession?: (event: ToolSessionEvent, ctx: ExtensionContext) => void | Promise<void>;
346
+
347
+ /** Custom rendering for tool call display */
348
+ renderCall?: (args: Static<TParams>, options: ToolRenderResultOptions, theme: Theme) => Component;
349
+
350
+ /** Custom rendering for tool result display */
351
+ renderResult?: (
352
+ result: AgentToolResult<TDetails>,
353
+ options: ToolRenderResultOptions,
354
+ theme: Theme,
355
+ args?: Static<TParams>,
356
+ ) => Component;
357
+ }
358
+
359
+ // ============================================================================
360
+ // Resource Events
361
+ // ============================================================================
362
+
363
+ /** Fired after session_start to allow extensions to provide additional resource paths. */
364
+ export interface ResourcesDiscoverEvent {
365
+ type: "resources_discover";
366
+ cwd: string;
367
+ reason: "startup" | "reload";
368
+ }
369
+
370
+ /** Result from resources_discover event handler */
371
+ export interface ResourcesDiscoverResult {
372
+ skillPaths?: string[];
373
+ promptPaths?: string[];
374
+ themePaths?: string[];
375
+ }
376
+
377
+ // ============================================================================
378
+ // Session Events
379
+ // ============================================================================
380
+
381
+ /** Fired on initial session load */
382
+ export interface SessionStartEvent {
383
+ type: "session_start";
384
+ }
385
+
386
+ /** Fired before switching to another session (can be cancelled) */
387
+ export interface SessionBeforeSwitchEvent {
388
+ type: "session_before_switch";
389
+ reason: "new" | "resume" | "fork";
390
+ targetSessionFile?: string;
391
+ }
392
+
393
+ /** Fired after switching to another session */
394
+ export interface SessionSwitchEvent {
395
+ type: "session_switch";
396
+ reason: "new" | "resume" | "fork";
397
+ previousSessionFile: string | undefined;
398
+ }
399
+
400
+ /** Fired before branching a session (can be cancelled) */
401
+ export interface SessionBeforeBranchEvent {
402
+ type: "session_before_branch";
403
+ entryId: string;
404
+ }
405
+
406
+ /** Fired after branching a session */
407
+ export interface SessionBranchEvent {
408
+ type: "session_branch";
409
+ previousSessionFile: string | undefined;
410
+ }
411
+
412
+ /** Fired before context compaction (can be cancelled or customized) */
413
+ export interface SessionBeforeCompactEvent {
414
+ type: "session_before_compact";
415
+ preparation: CompactionPreparation;
416
+ branchEntries: SessionEntry[];
417
+ customInstructions?: string;
418
+ signal: AbortSignal;
419
+ }
420
+
421
+ /** Fired before compaction summarization to customize prompts/context */
422
+ export interface SessionCompactingEvent {
423
+ type: "session.compacting";
424
+ sessionId: string;
425
+ messages: AgentMessage[];
426
+ }
427
+
428
+ /** Fired after context compaction */
429
+ export interface SessionCompactEvent {
430
+ type: "session_compact";
431
+ compactionEntry: CompactionEntry;
432
+ fromExtension: boolean;
433
+ }
434
+
435
+ /** Fired on process exit */
436
+ export interface SessionShutdownEvent {
437
+ type: "session_shutdown";
438
+ }
439
+
440
+ /** Preparation data for tree navigation */
441
+ export interface TreePreparation {
442
+ targetId: string;
443
+ oldLeafId: string | null;
444
+ commonAncestorId: string | null;
445
+ entriesToSummarize: SessionEntry[];
446
+ userWantsSummary: boolean;
447
+ }
448
+
449
+ /** Fired before navigating in the session tree (can be cancelled) */
450
+ export interface SessionBeforeTreeEvent {
451
+ type: "session_before_tree";
452
+ preparation: TreePreparation;
453
+ signal: AbortSignal;
454
+ }
455
+
456
+ /** Fired after navigating in the session tree */
457
+ export interface SessionTreeEvent {
458
+ type: "session_tree";
459
+ newLeafId: string | null;
460
+ oldLeafId: string | null;
461
+ summaryEntry?: BranchSummaryEntry;
462
+ fromExtension?: boolean;
463
+ }
464
+
465
+ export type SessionEvent =
466
+ | SessionStartEvent
467
+ | SessionBeforeSwitchEvent
468
+ | SessionSwitchEvent
469
+ | SessionBeforeBranchEvent
470
+ | SessionBranchEvent
471
+ | SessionBeforeCompactEvent
472
+ | SessionCompactingEvent
473
+ | SessionCompactEvent
474
+ | SessionShutdownEvent
475
+ | SessionBeforeTreeEvent
476
+ | SessionTreeEvent;
477
+
478
+ // ============================================================================
479
+ // Agent Events
480
+ // ============================================================================
481
+
482
+ /** Fired before each LLM call. Can modify messages. */
483
+ export interface ContextEvent {
484
+ type: "context";
485
+ messages: AgentMessage[];
486
+ }
487
+
488
+ /** Fired before a provider request is sent. Can replace the payload. */
489
+ export interface BeforeProviderRequestEvent {
490
+ type: "before_provider_request";
491
+ payload: unknown;
492
+ }
493
+
494
+ /** Fired after user submits prompt but before agent loop. */
495
+ export interface BeforeAgentStartEvent {
496
+ type: "before_agent_start";
497
+ prompt: string;
498
+ images?: ImageContent[];
499
+ systemPrompt: string;
500
+ }
501
+
502
+ /** Fired when an agent loop starts */
503
+ export interface AgentStartEvent {
504
+ type: "agent_start";
505
+ }
506
+
507
+ /** Fired when an agent loop ends */
508
+ export interface AgentEndEvent {
509
+ type: "agent_end";
510
+ messages: AgentMessage[];
511
+ }
512
+
513
+ /** Fired at the start of each turn */
514
+ export interface TurnStartEvent {
515
+ type: "turn_start";
516
+ turnIndex: number;
517
+ timestamp: number;
518
+ }
519
+
520
+ /** Fired at the end of each turn */
521
+ export interface TurnEndEvent {
522
+ type: "turn_end";
523
+ turnIndex: number;
524
+ message: AgentMessage;
525
+ toolResults: ToolResultMessage[];
526
+ }
527
+
528
+ /** Fired when a message starts (user, assistant, or toolResult) */
529
+ export interface MessageStartEvent {
530
+ type: "message_start";
531
+ message: AgentMessage;
532
+ }
533
+
534
+ /** Fired during assistant message streaming with token-by-token updates */
535
+ export interface MessageUpdateEvent {
536
+ type: "message_update";
537
+ message: AgentMessage;
538
+ assistantMessageEvent: AssistantMessageEvent;
539
+ }
540
+
541
+ /** Fired when a message ends */
542
+ export interface MessageEndEvent {
543
+ type: "message_end";
544
+ message: AgentMessage;
545
+ }
546
+
547
+ /** Fired when a tool starts executing */
548
+ export interface ToolExecutionStartEvent {
549
+ type: "tool_execution_start";
550
+ toolCallId: string;
551
+ toolName: string;
552
+ args: unknown;
553
+ intent?: string;
554
+ }
555
+
556
+ /** Fired during tool execution with partial/streaming output */
557
+ export interface ToolExecutionUpdateEvent {
558
+ type: "tool_execution_update";
559
+ toolCallId: string;
560
+ toolName: string;
561
+ args: unknown;
562
+ partialResult: unknown;
563
+ }
564
+
565
+ /** Fired when a tool finishes executing */
566
+ export interface ToolExecutionEndEvent {
567
+ type: "tool_execution_end";
568
+ toolCallId: string;
569
+ toolName: string;
570
+ result: unknown;
571
+ isError: boolean;
572
+ }
573
+
574
+ /** Fired when auto-compaction starts */
575
+ export interface AutoCompactionStartEvent {
576
+ type: "auto_compaction_start";
577
+ reason: "threshold" | "overflow" | "idle";
578
+ action: "context-full" | "handoff";
579
+ }
580
+
581
+ /** Fired when auto-compaction ends */
582
+ export interface AutoCompactionEndEvent {
583
+ type: "auto_compaction_end";
584
+ action: "context-full" | "handoff";
585
+ result: CompactionResult | undefined;
586
+ aborted: boolean;
587
+ willRetry: boolean;
588
+ errorMessage?: string;
589
+ /** True when compaction was skipped for a benign reason (no model, no candidates, nothing to compact). */
590
+ skipped?: boolean;
591
+ }
592
+
593
+ /** Fired when auto-retry starts */
594
+ export interface AutoRetryStartEvent {
595
+ type: "auto_retry_start";
596
+ attempt: number;
597
+ maxAttempts: number;
598
+ delayMs: number;
599
+ errorMessage: string;
600
+ }
601
+
602
+ /** Fired when auto-retry ends */
603
+ export interface AutoRetryEndEvent {
604
+ type: "auto_retry_end";
605
+ success: boolean;
606
+ attempt: number;
607
+ finalError?: string;
608
+ }
609
+
610
+ /** Fired when TTSR rule matching interrupts generation */
611
+ export interface TtsrTriggeredEvent {
612
+ type: "ttsr_triggered";
613
+ rules: Rule[];
614
+ }
615
+
616
+ /** Fired when todo reminder logic detects unfinished todos */
617
+ export interface TodoReminderEvent {
618
+ type: "todo_reminder";
619
+ todos: TodoItem[];
620
+ attempt: number;
621
+ maxAttempts: number;
622
+ }
623
+
624
+ // ============================================================================
625
+ // User Bash Events
626
+ // ============================================================================
627
+
628
+ /** Fired when user executes a bash command via ! or !! prefix */
629
+ export interface UserBashEvent {
630
+ type: "user_bash";
631
+ /** The command to execute */
632
+ command: string;
633
+ /** True if !! prefix was used (excluded from LLM context) */
634
+ excludeFromContext: boolean;
635
+ /** Current working directory */
636
+ cwd: string;
637
+ }
638
+
639
+ // ============================================================================
640
+ // User Python Events
641
+ // ============================================================================
642
+
643
+ /** Fired when user executes Python code via $ or $$ prefix */
644
+ export interface UserPythonEvent {
645
+ type: "user_python";
646
+ /** The Python code to execute */
647
+ code: string;
648
+ /** True if $$ prefix was used (excluded from LLM context) */
649
+ excludeFromContext: boolean;
650
+ /** Current working directory */
651
+ cwd: string;
652
+ }
653
+
654
+ // ============================================================================
655
+ // Input Events
656
+ // ============================================================================
657
+
658
+ /** Fired when the user submits input (interactive mode only). */
659
+ export interface InputEvent {
660
+ type: "input";
661
+ text: string;
662
+ images?: ImageContent[];
663
+ source: "interactive" | "rpc" | "extension";
664
+ }
665
+
666
+ // ============================================================================
667
+ // Tool Events
668
+ // ============================================================================
669
+
670
+ interface ToolCallEventBase {
671
+ type: "tool_call";
672
+ toolCallId: string;
673
+ }
674
+
675
+ export interface BashToolCallEvent extends ToolCallEventBase {
676
+ toolName: "bash";
677
+ input: BashToolInput;
678
+ }
679
+
680
+ export interface ReadToolCallEvent extends ToolCallEventBase {
681
+ toolName: "read";
682
+ input: ReadToolInput;
683
+ }
684
+
685
+ export interface EditToolCallEvent extends ToolCallEventBase {
686
+ toolName: "edit";
687
+ input: Record<string, unknown>;
688
+ }
689
+
690
+ export interface WriteToolCallEvent extends ToolCallEventBase {
691
+ toolName: "write";
692
+ input: WriteToolInput;
693
+ }
694
+
695
+ export interface GrepToolCallEvent extends ToolCallEventBase {
696
+ toolName: "grep";
697
+ input: GrepToolInput;
698
+ }
699
+
700
+ export interface FindToolCallEvent extends ToolCallEventBase {
701
+ toolName: "find";
702
+ input: FindToolInput;
703
+ }
704
+
705
+ export interface CustomToolCallEvent extends ToolCallEventBase {
706
+ toolName: string;
707
+ input: Record<string, unknown>;
708
+ }
709
+
710
+ /** Fired before a tool executes. Can block. */
711
+ export type ToolCallEvent =
712
+ | BashToolCallEvent
713
+ | ReadToolCallEvent
714
+ | EditToolCallEvent
715
+ | WriteToolCallEvent
716
+ | GrepToolCallEvent
717
+ | FindToolCallEvent
718
+ | CustomToolCallEvent;
719
+
720
+ interface ToolResultEventBase {
721
+ type: "tool_result";
722
+ toolCallId: string;
723
+ input: Record<string, unknown>;
724
+ content: (TextContent | ImageContent)[];
725
+ isError: boolean;
726
+ }
727
+
728
+ export interface BashToolResultEvent extends ToolResultEventBase {
729
+ toolName: "bash";
730
+ details: BashToolDetails | undefined;
731
+ }
732
+
733
+ export interface ReadToolResultEvent extends ToolResultEventBase {
734
+ toolName: "read";
735
+ details: ReadToolDetails | undefined;
736
+ }
737
+
738
+ export interface EditToolResultEvent extends ToolResultEventBase {
739
+ toolName: "edit";
740
+ details: EditToolDetails | undefined;
741
+ }
742
+
743
+ export interface WriteToolResultEvent extends ToolResultEventBase {
744
+ toolName: "write";
745
+ details: undefined;
746
+ }
747
+
748
+ export interface GrepToolResultEvent extends ToolResultEventBase {
749
+ toolName: "grep";
750
+ details: GrepToolDetails | undefined;
751
+ }
752
+
753
+ export interface FindToolResultEvent extends ToolResultEventBase {
754
+ toolName: "find";
755
+ details: FindToolDetails | undefined;
756
+ }
757
+
758
+ export interface CustomToolResultEvent extends ToolResultEventBase {
759
+ toolName: string;
760
+ details: unknown;
761
+ }
762
+
763
+ /** Fired after a tool executes. Can modify result. */
764
+ export type ToolResultEvent =
765
+ | BashToolResultEvent
766
+ | ReadToolResultEvent
767
+ | EditToolResultEvent
768
+ | WriteToolResultEvent
769
+ | GrepToolResultEvent
770
+ | FindToolResultEvent
771
+ | CustomToolResultEvent;
772
+
773
+ /**
774
+ * Type guard for narrowing ToolCallEvent by tool name.
775
+ *
776
+ * Built-in tools narrow automatically (no type params needed):
777
+ * ```ts
778
+ * if (isToolCallEventType("bash", event)) {
779
+ * event.input.command; // string
780
+ * }
781
+ * ```
782
+ *
783
+ * Custom tools require explicit type parameters:
784
+ * ```ts
785
+ * if (isToolCallEventType<"my_tool", MyToolInput>("my_tool", event)) {
786
+ * event.input.action; // typed
787
+ * }
788
+ * ```
789
+ *
790
+ * Note: Direct narrowing via `event.toolName === "bash"` doesn't work because
791
+ * CustomToolCallEvent.toolName is `string` which overlaps with all literals.
792
+ */
793
+ export function isToolCallEventType(toolName: "bash", event: ToolCallEvent): event is BashToolCallEvent;
794
+ export function isToolCallEventType(toolName: "read", event: ToolCallEvent): event is ReadToolCallEvent;
795
+ export function isToolCallEventType(toolName: "edit", event: ToolCallEvent): event is EditToolCallEvent;
796
+ export function isToolCallEventType(toolName: "write", event: ToolCallEvent): event is WriteToolCallEvent;
797
+ export function isToolCallEventType(toolName: "grep", event: ToolCallEvent): event is GrepToolCallEvent;
798
+ export function isToolCallEventType(toolName: "find", event: ToolCallEvent): event is FindToolCallEvent;
799
+ export function isToolCallEventType<TName extends string, TInput extends Record<string, unknown>>(
800
+ toolName: TName,
801
+ event: ToolCallEvent,
802
+ ): event is ToolCallEvent & { toolName: TName; input: TInput };
803
+ export function isToolCallEventType(toolName: string, event: ToolCallEvent): boolean {
804
+ return event.toolName === toolName;
805
+ }
806
+
807
+ /** Union of all event types */
808
+ export type ExtensionEvent =
809
+ | ResourcesDiscoverEvent
810
+ | SessionEvent
811
+ | ContextEvent
812
+ | BeforeProviderRequestEvent
813
+ | BeforeAgentStartEvent
814
+ | AgentStartEvent
815
+ | AgentEndEvent
816
+ | TurnStartEvent
817
+ | TurnEndEvent
818
+ | MessageStartEvent
819
+ | MessageUpdateEvent
820
+ | MessageEndEvent
821
+ | ToolExecutionStartEvent
822
+ | ToolExecutionUpdateEvent
823
+ | ToolExecutionEndEvent
824
+ | AutoCompactionStartEvent
825
+ | AutoCompactionEndEvent
826
+ | AutoRetryStartEvent
827
+ | AutoRetryEndEvent
828
+ | TtsrTriggeredEvent
829
+ | TodoReminderEvent
830
+ | UserBashEvent
831
+ | UserPythonEvent
832
+ | InputEvent
833
+ | ToolCallEvent
834
+ | ToolResultEvent;
835
+
836
+ // ============================================================================
837
+ // Event Results
838
+ // ============================================================================
839
+
840
+ export interface ContextEventResult {
841
+ messages?: AgentMessage[];
842
+ }
843
+
844
+ export type BeforeProviderRequestEventResult = unknown;
845
+
846
+ export interface ToolCallEventResult {
847
+ block?: boolean;
848
+ reason?: string;
849
+ }
850
+
851
+ /** Result from input event handler */
852
+ export interface InputEventResult {
853
+ /** If true, the input was handled and should not continue through normal flow */
854
+ handled?: boolean;
855
+ /** Replace the input text */
856
+ text?: string;
857
+ /** Replace any pending images */
858
+ images?: ImageContent[];
859
+ }
860
+
861
+ /** Result from user_bash event handler */
862
+ export interface UserBashEventResult {
863
+ /** Full replacement: extension handled execution, use this result */
864
+ result?: BashResult;
865
+ }
866
+
867
+ /** Result from user_python event handler */
868
+ export interface UserPythonEventResult {
869
+ /** Full replacement: extension handled execution, use this result */
870
+ result?: PythonResult;
871
+ }
872
+
873
+ export interface ToolResultEventResult {
874
+ content?: (TextContent | ImageContent)[];
875
+ details?: unknown;
876
+ isError?: boolean;
877
+ }
878
+
879
+ export interface BeforeAgentStartEventResult {
880
+ message?: Pick<CustomMessage, "customType" | "content" | "display" | "details" | "attribution">;
881
+ /** Replace the system prompt for this turn. If multiple extensions return this, they are chained. */
882
+ systemPrompt?: string;
883
+ }
884
+
885
+ export interface SessionBeforeSwitchResult {
886
+ cancel?: boolean;
887
+ }
888
+
889
+ export interface SessionBeforeBranchResult {
890
+ cancel?: boolean;
891
+ skipConversationRestore?: boolean;
892
+ }
893
+
894
+ export interface SessionBeforeCompactResult {
895
+ cancel?: boolean;
896
+ compaction?: CompactionResult;
897
+ }
898
+
899
+ export interface SessionCompactingResult {
900
+ context?: string[];
901
+ prompt?: string;
902
+ preserveData?: Record<string, unknown>;
903
+ }
904
+
905
+ export interface SessionBeforeTreeResult {
906
+ cancel?: boolean;
907
+ summary?: {
908
+ summary: string;
909
+ details?: unknown;
910
+ };
911
+ }
912
+
913
+ // ============================================================================
914
+ // Message Rendering
915
+ // ============================================================================
916
+
917
+ export interface MessageRenderOptions {
918
+ expanded: boolean;
919
+ }
920
+
921
+ export type MessageRenderer<T = unknown> = (
922
+ message: CustomMessage<T>,
923
+ options: MessageRenderOptions,
924
+ theme: Theme,
925
+ ) => Component | undefined;
926
+
927
+ // ============================================================================
928
+ // Command Registration
929
+ // ============================================================================
930
+
931
+ export interface RegisteredCommand {
932
+ name: string;
933
+ description?: string;
934
+ getArgumentCompletions?: (argumentPrefix: string) => AutocompleteItem[] | null;
935
+ handler: (args: string, ctx: ExtensionCommandContext) => Promise<void>;
936
+ }
937
+
938
+ // ============================================================================
939
+ // Extension API
940
+ // ============================================================================
941
+
942
+ /** Handler function type for events */
943
+ // biome-ignore lint/suspicious/noConfusingVoidType: void allows bare return statements
944
+ export type ExtensionHandler<E, R = undefined> = (event: E, ctx: ExtensionContext) => Promise<R | void> | R | void;
945
+
946
+ /**
947
+ * ExtensionAPI passed to extension factory functions.
948
+ */
949
+ export interface ExtensionAPI {
950
+ // =========================================================================
951
+ // Module Access
952
+ // =========================================================================
953
+
954
+ /** File logger for error/warning/debug messages */
955
+ logger: typeof import("@f5xc-salesdemos/pi-utils").logger;
956
+
957
+ /** Injected @sinclair/typebox module for defining tool parameters */
958
+ typebox: typeof import("@sinclair/typebox");
959
+
960
+ /** Injected pi-coding-agent exports for accessing SDK utilities */
961
+ pi: typeof piCodingAgent;
962
+
963
+ // =========================================================================
964
+ // Event Subscription
965
+ // =========================================================================
966
+
967
+ on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): void;
968
+ on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): void;
969
+ on(
970
+ event: "session_before_switch",
971
+ handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>,
972
+ ): void;
973
+ on(event: "session_switch", handler: ExtensionHandler<SessionSwitchEvent>): void;
974
+ on(
975
+ event: "session_before_branch",
976
+ handler: ExtensionHandler<SessionBeforeBranchEvent, SessionBeforeBranchResult>,
977
+ ): void;
978
+ on(event: "session_branch", handler: ExtensionHandler<SessionBranchEvent>): void;
979
+ on(
980
+ event: "session_before_compact",
981
+ handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>,
982
+ ): void;
983
+ on(event: "session.compacting", handler: ExtensionHandler<SessionCompactingEvent, SessionCompactingResult>): void;
984
+ on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): void;
985
+ on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): void;
986
+ on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): void;
987
+ on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): void;
988
+ on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): void;
989
+ on(
990
+ event: "before_provider_request",
991
+ handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>,
992
+ ): void;
993
+ on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
994
+ on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
995
+ on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): void;
996
+ on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): void;
997
+ on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): void;
998
+ on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): void;
999
+ on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): void;
1000
+ on(event: "message_end", handler: ExtensionHandler<MessageEndEvent>): void;
1001
+ on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): void;
1002
+ on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): void;
1003
+ on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): void;
1004
+ on(event: "auto_compaction_start", handler: ExtensionHandler<AutoCompactionStartEvent>): void;
1005
+ on(event: "auto_compaction_end", handler: ExtensionHandler<AutoCompactionEndEvent>): void;
1006
+ on(event: "auto_retry_start", handler: ExtensionHandler<AutoRetryStartEvent>): void;
1007
+ on(event: "auto_retry_end", handler: ExtensionHandler<AutoRetryEndEvent>): void;
1008
+ on(event: "ttsr_triggered", handler: ExtensionHandler<TtsrTriggeredEvent>): void;
1009
+ on(event: "todo_reminder", handler: ExtensionHandler<TodoReminderEvent>): void;
1010
+ on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
1011
+ on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
1012
+ on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
1013
+ on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
1014
+ on(event: "user_python", handler: ExtensionHandler<UserPythonEvent, UserPythonEventResult>): void;
1015
+
1016
+ // =========================================================================
1017
+ // Tool Registration
1018
+ // =========================================================================
1019
+
1020
+ /** Register a tool that the LLM can call. */
1021
+ registerTool<TParams extends TSchema = TSchema, TDetails = unknown>(tool: ToolDefinition<TParams, TDetails>): void;
1022
+
1023
+ // =========================================================================
1024
+ // Command, Shortcut, Flag Registration
1025
+ // =========================================================================
1026
+
1027
+ /** Register a custom command. */
1028
+ registerCommand(
1029
+ name: string,
1030
+ options: {
1031
+ description?: string;
1032
+ getArgumentCompletions?: RegisteredCommand["getArgumentCompletions"];
1033
+ handler: RegisteredCommand["handler"];
1034
+ },
1035
+ ): void;
1036
+
1037
+ /** Register a keyboard shortcut. */
1038
+ registerShortcut(
1039
+ shortcut: KeyId,
1040
+ options: {
1041
+ description?: string;
1042
+ handler: (ctx: ExtensionContext) => Promise<void> | void;
1043
+ },
1044
+ ): void;
1045
+
1046
+ /** Register a CLI flag. */
1047
+ registerFlag(
1048
+ name: string,
1049
+ options: {
1050
+ description?: string;
1051
+ type: "boolean" | "string";
1052
+ default?: boolean | string;
1053
+ },
1054
+ ): void;
1055
+
1056
+ /** Set the display label for this extension, or set a label on a specific entry. */
1057
+ setLabel(entryIdOrLabel: string, label?: string | undefined): void;
1058
+
1059
+ /** Get the value of a registered CLI flag. */
1060
+ getFlag(name: string): boolean | string | undefined;
1061
+
1062
+ // =========================================================================
1063
+ // Message Rendering
1064
+ // =========================================================================
1065
+
1066
+ /** Register a custom renderer for CustomMessageEntry. */
1067
+ registerMessageRenderer<T = unknown>(customType: string, renderer: MessageRenderer<T>): void;
1068
+
1069
+ // =========================================================================
1070
+ // Actions
1071
+ // =========================================================================
1072
+
1073
+ /**
1074
+ * Send a custom message to the session.
1075
+ *
1076
+ * `deliverAs: "nextTurn"` keeps the message hidden from the editable pending-message UI.
1077
+ * If `triggerTurn` is also true while the current turn is still unwinding, the session schedules
1078
+ * an internal continuation that consumes the message on the next turn.
1079
+ */
1080
+ sendMessage<T = unknown>(
1081
+ message: Pick<CustomMessage<T>, "customType" | "content" | "display" | "details" | "attribution">,
1082
+ options?: { triggerTurn?: boolean; deliverAs?: "steer" | "followUp" | "nextTurn" },
1083
+ ): void;
1084
+
1085
+ /** Send a user message to the agent. Always triggers a turn. */
1086
+ sendUserMessage(
1087
+ content: string | (TextContent | ImageContent)[],
1088
+ options?: { deliverAs?: "steer" | "followUp" },
1089
+ ): void;
1090
+
1091
+ /** Append a custom entry to the session for state persistence (not sent to LLM). */
1092
+ appendEntry<T = unknown>(customType: string, data?: T): void;
1093
+
1094
+ /** Execute a shell command. */
1095
+ exec(command: string, args: string[], options?: ExecOptions): Promise<ExecResult>;
1096
+
1097
+ /** Get the list of currently active tool names. */
1098
+ getActiveTools(): string[];
1099
+
1100
+ /** Get all configured tools (built-in + extension tools). */
1101
+ getAllTools(): string[];
1102
+
1103
+ /** Set the active tools by name. */
1104
+ setActiveTools(toolNames: string[]): Promise<void>;
1105
+
1106
+ /** Get available slash commands in the current session. */
1107
+ getCommands(): SlashCommandInfo[];
1108
+
1109
+ /** Set the current model. Returns false if no API key available. */
1110
+ setModel(model: Model): Promise<boolean>;
1111
+
1112
+ /** Get current thinking level. */
1113
+ getThinkingLevel(): ThinkingLevel | undefined;
1114
+
1115
+ /** Set thinking level for the current session. */
1116
+ setThinkingLevel(level: ThinkingLevel): void;
1117
+
1118
+ // =========================================================================
1119
+ // Provider Registration
1120
+ // =========================================================================
1121
+
1122
+ /**
1123
+ * Register or override a model provider.
1124
+ *
1125
+ * If `models` is provided: replaces all existing models for this provider.
1126
+ * If only `baseUrl` is provided: overrides the URL for existing models.
1127
+ * If `streamSimple` is provided: registers a custom API stream handler.
1128
+ *
1129
+ * @example
1130
+ * // Register a new provider with custom models and streaming
1131
+ * pi.registerProvider("google-vertex-claude", {
1132
+ * baseUrl: "https://us-east5-aiplatform.googleapis.com",
1133
+ * apiKey: "GOOGLE_CLOUD_PROJECT",
1134
+ * api: "vertex-claude-api",
1135
+ * streamSimple: myStreamFunction,
1136
+ * models: [
1137
+ * {
1138
+ * id: "claude-sonnet-4@20250514",
1139
+ * name: "Claude Sonnet 4 (Vertex)",
1140
+ * reasoning: true,
1141
+ * thinking: { mode: "anthropic-adaptive", minLevel: "minimal", maxLevel: "high" },
1142
+ * input: ["text", "image"],
1143
+ * cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
1144
+ * contextWindow: 200000,
1145
+ * maxTokens: 64000,
1146
+ * ]
1147
+ * });
1148
+ *
1149
+ * @example
1150
+ * // Override baseUrl for an existing provider
1151
+ * pi.registerProvider("anthropic", {
1152
+ * baseUrl: "https://proxy.example.com"
1153
+ * });
1154
+ */
1155
+ registerProvider(name: string, config: ProviderConfig): void;
1156
+
1157
+ /** Shared event bus for extension communication. */
1158
+ events: EventBus;
1159
+ }
1160
+
1161
+ // ============================================================================
1162
+ // Provider Registration Types
1163
+ // ============================================================================
1164
+
1165
+ /** Configuration for registering a provider via pi.registerProvider(). */
1166
+ export interface ProviderConfig {
1167
+ /** Base URL for the API endpoint. Required when defining models. */
1168
+ baseUrl?: string;
1169
+ /** API key or environment variable name. Required when defining models unless oauth is provided. */
1170
+ apiKey?: string;
1171
+ /** API type identifier. Required when registering streamSimple or when models don't specify one. */
1172
+ api?: Api;
1173
+ /** Custom streaming function for non-built-in APIs. */
1174
+ streamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
1175
+ /** Custom headers to include in requests. */
1176
+ headers?: Record<string, string>;
1177
+ /** If true, adds Authorization: Bearer header with the resolved API key. */
1178
+ authHeader?: boolean;
1179
+ /** Models to register. If provided, replaces all existing models for this provider. */
1180
+ models?: ProviderModelConfig[];
1181
+ /** OAuth provider for /login support. */
1182
+ oauth?: {
1183
+ /** Display name in login UI. */
1184
+ name: string;
1185
+ /** Run the provider login flow and return credentials (or a plain API key) to persist. */
1186
+ login(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials | string>;
1187
+ /** Refresh expired credentials. */
1188
+ refreshToken?(credentials: OAuthCredentials): Promise<OAuthCredentials>;
1189
+ /** Convert credentials to an API key string for requests. */
1190
+ getApiKey?(credentials: OAuthCredentials): string;
1191
+ /** Optional model rewrite hook for credential-aware routing (e.g., enterprise URLs). */
1192
+ modifyModels?(models: Model<Api>[], credentials: OAuthCredentials): Model<Api>[];
1193
+ };
1194
+ }
1195
+
1196
+ /** Configuration for a model within a provider. */
1197
+ export interface ProviderModelConfig {
1198
+ /** Model ID (e.g., "claude-sonnet-4@20250514"). */
1199
+ id: string;
1200
+ /** Display name (e.g., "Claude Sonnet 4 (Vertex)"). */
1201
+ name: string;
1202
+ /** API type override for this model. */
1203
+ api?: Api;
1204
+ /** Whether the model supports extended thinking at all. */
1205
+ reasoning: boolean;
1206
+ /** Optional canonical thinking capability metadata for per-model effort support. */
1207
+ thinking?: Model["thinking"];
1208
+ /** Supported input types. */
1209
+ input: ("text" | "image")[];
1210
+ /** Cost per million tokens. */
1211
+ cost: { input: number; output: number; cacheRead: number; cacheWrite: number };
1212
+ /** Premium Copilot requests charged per user-initiated request. */
1213
+ premiumMultiplier?: number;
1214
+ /** Maximum context window size in tokens. */
1215
+ contextWindow: number;
1216
+ /** Maximum output tokens. */
1217
+ maxTokens: number;
1218
+ /** Custom headers for this model. */
1219
+ headers?: Record<string, string>;
1220
+ /** OpenAI compatibility settings. */
1221
+ compat?: Model<Api>["compat"];
1222
+ }
1223
+
1224
+ /** Extension factory function type. Supports both sync and async initialization. */
1225
+ export type ExtensionFactory = (pi: ExtensionAPI) => void | Promise<void>;
1226
+
1227
+ // ============================================================================
1228
+ // Loaded Extension Types
1229
+ // ============================================================================
1230
+
1231
+ export interface RegisteredTool<TParams extends TSchema = TSchema, TDetails = unknown> {
1232
+ definition: ToolDefinition<TParams, TDetails>;
1233
+ extensionPath: string;
1234
+ }
1235
+
1236
+ export interface ExtensionFlag {
1237
+ name: string;
1238
+ description?: string;
1239
+ type: "boolean" | "string";
1240
+ default?: boolean | string;
1241
+ extensionPath: string;
1242
+ }
1243
+
1244
+ export interface ExtensionShortcut {
1245
+ shortcut: KeyId;
1246
+ description?: string;
1247
+ handler: (ctx: ExtensionContext) => Promise<void> | void;
1248
+ extensionPath: string;
1249
+ }
1250
+
1251
+ type HandlerFn = (...args: unknown[]) => Promise<unknown>;
1252
+
1253
+ export type SendMessageHandler = <T = unknown>(
1254
+ message: Pick<CustomMessage<T>, "customType" | "content" | "display" | "details" | "attribution">,
1255
+ /**
1256
+ * `deliverAs: "nextTurn"` queues hidden custom context for the next turn.
1257
+ * When paired with `triggerTurn: true` during prompt teardown, the session schedules
1258
+ * an internal continuation without surfacing the message in the editable pending queue.
1259
+ */
1260
+ options?: { triggerTurn?: boolean; deliverAs?: "steer" | "followUp" | "nextTurn" },
1261
+ ) => void;
1262
+
1263
+ export type SendUserMessageHandler = (
1264
+ content: string | (TextContent | ImageContent)[],
1265
+ options?: { deliverAs?: "steer" | "followUp" },
1266
+ ) => void;
1267
+
1268
+ export type AppendEntryHandler = <T = unknown>(customType: string, data?: T) => void;
1269
+
1270
+ export type GetActiveToolsHandler = () => string[];
1271
+
1272
+ export type GetAllToolsHandler = () => string[];
1273
+
1274
+ export type GetCommandsHandler = () => SlashCommandInfo[];
1275
+
1276
+ export type SetActiveToolsHandler = (toolNames: string[]) => Promise<void>;
1277
+
1278
+ export type SetModelHandler = (model: Model) => Promise<boolean>;
1279
+
1280
+ export type GetThinkingLevelHandler = () => ThinkingLevel | undefined;
1281
+
1282
+ export type SetThinkingLevelHandler = (level: ThinkingLevel, persist?: boolean) => void;
1283
+
1284
+ /** Shared state created by loader, used during registration and runtime. */
1285
+ export interface ExtensionRuntimeState {
1286
+ flagValues: Map<string, boolean | string>;
1287
+ /** Provider registrations queued during extension loading, processed during session initialization */
1288
+ pendingProviderRegistrations: Array<{ name: string; config: ProviderConfig; sourceId: string }>;
1289
+ }
1290
+
1291
+ /** Action implementations for ExtensionAPI methods. */
1292
+ export interface ExtensionActions {
1293
+ sendMessage: SendMessageHandler;
1294
+ sendUserMessage: SendUserMessageHandler;
1295
+ appendEntry: AppendEntryHandler;
1296
+ setLabel: (targetId: string, label: string | undefined) => void;
1297
+ getActiveTools: GetActiveToolsHandler;
1298
+ getAllTools: GetAllToolsHandler;
1299
+ setActiveTools: SetActiveToolsHandler;
1300
+ getCommands: GetCommandsHandler;
1301
+ setModel: SetModelHandler;
1302
+ getThinkingLevel: GetThinkingLevelHandler;
1303
+ setThinkingLevel: SetThinkingLevelHandler;
1304
+ }
1305
+
1306
+ /** Actions for ExtensionContext (ctx.* in event handlers). */
1307
+ export interface ExtensionContextActions {
1308
+ getModel: () => Model | undefined;
1309
+ getSearchDb?: () => SearchDb | undefined;
1310
+ isIdle: () => boolean;
1311
+ abort: () => void;
1312
+ hasPendingMessages: () => boolean;
1313
+ shutdown: () => void;
1314
+ getContextUsage: () => ContextUsage | undefined;
1315
+ compact: (instructionsOrOptions?: string | CompactOptions) => Promise<void>;
1316
+ getSystemPrompt: () => string;
1317
+ }
1318
+
1319
+ /** Actions for ExtensionCommandContext (ctx.* in command handlers). */
1320
+ export interface ExtensionCommandContextActions {
1321
+ getContextUsage: () => ContextUsage | undefined;
1322
+ waitForIdle: () => Promise<void>;
1323
+ newSession: (options?: {
1324
+ parentSession?: string;
1325
+ setup?: (sessionManager: SessionManager) => Promise<void>;
1326
+ }) => Promise<{ cancelled: boolean }>;
1327
+ branch: (entryId: string) => Promise<{ cancelled: boolean }>;
1328
+ navigateTree: (targetId: string, options?: { summarize?: boolean }) => Promise<{ cancelled: boolean }>;
1329
+ compact: (instructionsOrOptions?: string | CompactOptions) => Promise<void>;
1330
+ switchSession: (sessionPath: string) => Promise<{ cancelled: boolean }>;
1331
+ reload: () => Promise<void>;
1332
+ }
1333
+
1334
+ /** Full runtime = state + actions. */
1335
+ export interface ExtensionRuntime extends ExtensionRuntimeState, ExtensionActions {}
1336
+
1337
+ /** Loaded extension with all registered items. */
1338
+ export interface Extension {
1339
+ path: string;
1340
+ resolvedPath: string;
1341
+ label?: string;
1342
+ handlers: Map<string, HandlerFn[]>;
1343
+ tools: Map<string, RegisteredTool<any, any>>;
1344
+ messageRenderers: Map<string, MessageRenderer>;
1345
+ commands: Map<string, RegisteredCommand>;
1346
+ flags: Map<string, ExtensionFlag>;
1347
+ shortcuts: Map<KeyId, ExtensionShortcut>;
1348
+ }
1349
+
1350
+ /** Result of loading extensions. */
1351
+ export interface LoadExtensionsResult {
1352
+ extensions: Extension[];
1353
+ errors: Array<{ path: string; error: string }>;
1354
+ runtime: ExtensionRuntime;
1355
+ }
1356
+
1357
+ // ============================================================================
1358
+ // Extension Error
1359
+ // ============================================================================
1360
+
1361
+ export interface ExtensionError {
1362
+ extensionPath: string;
1363
+ event: string;
1364
+ error: string;
1365
+ stack?: string;
1366
+ }