@kr78/pi-coding-agent 17.2.10

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 (1593) hide show
  1. package/CHANGELOG.md +14861 -0
  2. package/README.md +35 -0
  3. package/dist/CHANGELOG-chtdxh1z.md +14861 -0
  4. package/dist/cli.js +20483 -0
  5. package/dist/template-c2hyaytt.js +1653 -0
  6. package/dist/template-f8wx9vfn.css +1355 -0
  7. package/dist/template-qat058wr.html +55 -0
  8. package/dist/tool-views.generated-jdfmzwmn.js +35 -0
  9. package/examples/README.md +21 -0
  10. package/examples/custom-tools/README.md +104 -0
  11. package/examples/custom-tools/hello/index.ts +20 -0
  12. package/examples/extensions/README.md +142 -0
  13. package/examples/extensions/api-demo.ts +78 -0
  14. package/examples/extensions/chalk-logger.ts +25 -0
  15. package/examples/extensions/hello.ts +31 -0
  16. package/examples/extensions/pirate.ts +43 -0
  17. package/examples/extensions/plan-mode.ts +549 -0
  18. package/examples/extensions/reload-runtime.ts +38 -0
  19. package/examples/extensions/thinking-note.ts +13 -0
  20. package/examples/extensions/tools.ts +145 -0
  21. package/examples/extensions/with-deps/index.ts +36 -0
  22. package/examples/extensions/with-deps/package-lock.json +31 -0
  23. package/examples/extensions/with-deps/package.json +17 -0
  24. package/examples/hooks/README.md +56 -0
  25. package/examples/hooks/auto-commit-on-exit.ts +48 -0
  26. package/examples/hooks/confirm-destructive.ts +58 -0
  27. package/examples/hooks/custom-compaction.ts +115 -0
  28. package/examples/hooks/dirty-repo-guard.ts +51 -0
  29. package/examples/hooks/file-trigger.ts +40 -0
  30. package/examples/hooks/git-checkpoint.ts +52 -0
  31. package/examples/hooks/handoff.ts +149 -0
  32. package/examples/hooks/permission-gate.ts +33 -0
  33. package/examples/hooks/protected-paths.ts +29 -0
  34. package/examples/hooks/qna.ts +118 -0
  35. package/examples/hooks/status-line.ts +39 -0
  36. package/examples/sdk/01-minimal.ts +21 -0
  37. package/examples/sdk/02-custom-model.ts +49 -0
  38. package/examples/sdk/03-custom-prompt.ts +46 -0
  39. package/examples/sdk/04-skills.ts +43 -0
  40. package/examples/sdk/06-extensions.ts +82 -0
  41. package/examples/sdk/06-hooks.ts +61 -0
  42. package/examples/sdk/07-context-files.ts +35 -0
  43. package/examples/sdk/08-prompt-templates.ts +41 -0
  44. package/examples/sdk/08-slash-commands.ts +46 -0
  45. package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
  46. package/examples/sdk/11-sessions.ts +47 -0
  47. package/examples/sdk/12-redis-sessions.ts +54 -0
  48. package/examples/sdk/13-sql-sessions.ts +61 -0
  49. package/examples/sdk/README.md +169 -0
  50. package/package.json +587 -0
  51. package/scripts/bench-guard.ts +71 -0
  52. package/scripts/bench-title-models.ts +332 -0
  53. package/scripts/build-binary.ts +117 -0
  54. package/scripts/bundle-dist.ts +123 -0
  55. package/scripts/compile-binary.ts +69 -0
  56. package/scripts/embed-mupdf-wasm.ts +67 -0
  57. package/scripts/format-prompts.ts +68 -0
  58. package/scripts/generate-aria-snapshot.ts +134 -0
  59. package/scripts/generate-docs-index.ts +58 -0
  60. package/scripts/generate-share-viewer.ts +34 -0
  61. package/scripts/legacy-pi-virtual-module.ts +205 -0
  62. package/scripts/measure-prompt-tokens.ts +63 -0
  63. package/scripts/omp +51 -0
  64. package/scripts/omp.ts +19 -0
  65. package/scripts/security-compare.ts +40 -0
  66. package/src/advisor/advise-tool.ts +234 -0
  67. package/src/advisor/config.ts +341 -0
  68. package/src/advisor/emission-guard.ts +172 -0
  69. package/src/advisor/index.ts +6 -0
  70. package/src/advisor/runtime.ts +1412 -0
  71. package/src/advisor/transcript-recorder.ts +215 -0
  72. package/src/advisor/watchdog.ts +135 -0
  73. package/src/async/index.ts +1 -0
  74. package/src/async/job-manager.ts +847 -0
  75. package/src/auto-thinking/classifier.ts +220 -0
  76. package/src/autolearn/controller.ts +152 -0
  77. package/src/autolearn/managed-skills.ts +255 -0
  78. package/src/autoresearch/command-resume.md +14 -0
  79. package/src/autoresearch/dashboard.ts +436 -0
  80. package/src/autoresearch/git.ts +331 -0
  81. package/src/autoresearch/helpers.ts +218 -0
  82. package/src/autoresearch/index.ts +541 -0
  83. package/src/autoresearch/prompt-setup.md +43 -0
  84. package/src/autoresearch/prompt.md +103 -0
  85. package/src/autoresearch/resume-message.md +10 -0
  86. package/src/autoresearch/state.ts +273 -0
  87. package/src/autoresearch/storage.ts +700 -0
  88. package/src/autoresearch/tools/init-experiment.ts +268 -0
  89. package/src/autoresearch/tools/log-experiment.ts +520 -0
  90. package/src/autoresearch/tools/run-experiment.ts +407 -0
  91. package/src/autoresearch/tools/update-notes.ts +109 -0
  92. package/src/autoresearch/types.ts +168 -0
  93. package/src/capability/context-file.ts +44 -0
  94. package/src/capability/extension-module.ts +34 -0
  95. package/src/capability/extension.ts +47 -0
  96. package/src/capability/fs.ts +117 -0
  97. package/src/capability/hook.ts +40 -0
  98. package/src/capability/index.ts +467 -0
  99. package/src/capability/instruction.ts +37 -0
  100. package/src/capability/mcp.ts +115 -0
  101. package/src/capability/prompt.ts +35 -0
  102. package/src/capability/rule-buckets.ts +66 -0
  103. package/src/capability/rule.ts +298 -0
  104. package/src/capability/settings.ts +34 -0
  105. package/src/capability/skill.ts +69 -0
  106. package/src/capability/slash-command.ts +40 -0
  107. package/src/capability/ssh.ts +41 -0
  108. package/src/capability/system-prompt.ts +34 -0
  109. package/src/capability/tool.ts +38 -0
  110. package/src/capability/types.ts +187 -0
  111. package/src/cleanse/agent.ts +226 -0
  112. package/src/cleanse/balance.ts +79 -0
  113. package/src/cleanse/checkers.ts +996 -0
  114. package/src/cleanse/index.ts +190 -0
  115. package/src/cleanse/loop.ts +51 -0
  116. package/src/cleanse/parsers.ts +726 -0
  117. package/src/cleanse/progress.ts +50 -0
  118. package/src/cleanse/prompts/assignment.md +47 -0
  119. package/src/cleanse/types.ts +72 -0
  120. package/src/cli/agents-cli.ts +138 -0
  121. package/src/cli/args.ts +368 -0
  122. package/src/cli/auth-broker-cli.ts +940 -0
  123. package/src/cli/auth-gateway-cli.ts +674 -0
  124. package/src/cli/bench-cli.ts +990 -0
  125. package/src/cli/browser-relay-cli.ts +119 -0
  126. package/src/cli/classify-install-target.ts +76 -0
  127. package/src/cli/claude-trace-cli.ts +795 -0
  128. package/src/cli/command-help.ts +107 -0
  129. package/src/cli/commands/init-xdg.ts +27 -0
  130. package/src/cli/completion-gen.ts +550 -0
  131. package/src/cli/config-cli.ts +459 -0
  132. package/src/cli/dry-balance-cli.ts +864 -0
  133. package/src/cli/extension-flags.ts +48 -0
  134. package/src/cli/file-processor.ts +132 -0
  135. package/src/cli/flag-tables.ts +367 -0
  136. package/src/cli/gallery-cli.ts +272 -0
  137. package/src/cli/gallery-fixtures/agentic.ts +420 -0
  138. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  139. package/src/cli/gallery-fixtures/edit.ts +254 -0
  140. package/src/cli/gallery-fixtures/fs.ts +245 -0
  141. package/src/cli/gallery-fixtures/index.ts +40 -0
  142. package/src/cli/gallery-fixtures/interaction.ts +46 -0
  143. package/src/cli/gallery-fixtures/memory.ts +81 -0
  144. package/src/cli/gallery-fixtures/misc.ts +177 -0
  145. package/src/cli/gallery-fixtures/search.ts +135 -0
  146. package/src/cli/gallery-fixtures/shell.ts +241 -0
  147. package/src/cli/gallery-fixtures/types.ts +57 -0
  148. package/src/cli/gallery-fixtures/web.ts +158 -0
  149. package/src/cli/gallery-screenshot.ts +279 -0
  150. package/src/cli/gc-cli.ts +1566 -0
  151. package/src/cli/grep-cli.ts +161 -0
  152. package/src/cli/grievances-cli.ts +256 -0
  153. package/src/cli/help-extra.ts +89 -0
  154. package/src/cli/initial-message.ts +58 -0
  155. package/src/cli/models-cli.ts +385 -0
  156. package/src/cli/plugin-cli.ts +996 -0
  157. package/src/cli/profile-alias.ts +369 -0
  158. package/src/cli/profile-bootstrap.ts +233 -0
  159. package/src/cli/read-cli.ts +99 -0
  160. package/src/cli/session-picker.ts +110 -0
  161. package/src/cli/setup-cli.ts +312 -0
  162. package/src/cli/setup-model-picker.ts +43 -0
  163. package/src/cli/shell-cli.ts +176 -0
  164. package/src/cli/ssh-cli.ts +179 -0
  165. package/src/cli/startup-cwd.ts +58 -0
  166. package/src/cli/stats-cli.ts +229 -0
  167. package/src/cli/thinking-levels.ts +7 -0
  168. package/src/cli/tiny-models-cli.ts +153 -0
  169. package/src/cli/ttsr-cli.ts +1013 -0
  170. package/src/cli/update-cli.ts +1184 -0
  171. package/src/cli/usage-cli.ts +1084 -0
  172. package/src/cli/usage-error.ts +7 -0
  173. package/src/cli/web-search-cli.ts +144 -0
  174. package/src/cli/worktree-cli.ts +311 -0
  175. package/src/cli-commands.ts +308 -0
  176. package/src/cli.ts +428 -0
  177. package/src/collab/crypto.ts +63 -0
  178. package/src/collab/display-name.ts +13 -0
  179. package/src/collab/guest.ts +764 -0
  180. package/src/collab/host.ts +692 -0
  181. package/src/collab/protocol.ts +296 -0
  182. package/src/collab/relay-client.ts +282 -0
  183. package/src/collab/replication-shrink.ts +111 -0
  184. package/src/commands/acp.ts +35 -0
  185. package/src/commands/agents.ts +58 -0
  186. package/src/commands/auth-broker.ts +100 -0
  187. package/src/commands/auth-gateway.ts +70 -0
  188. package/src/commands/bench.ts +64 -0
  189. package/src/commands/browser-relay.ts +53 -0
  190. package/src/commands/cleanse.ts +45 -0
  191. package/src/commands/commit.ts +47 -0
  192. package/src/commands/complete.ts +67 -0
  193. package/src/commands/completions.ts +61 -0
  194. package/src/commands/config.ts +52 -0
  195. package/src/commands/dry-balance.ts +43 -0
  196. package/src/commands/gallery.ts +61 -0
  197. package/src/commands/gc.ts +47 -0
  198. package/src/commands/grep.ts +49 -0
  199. package/src/commands/grievances.ts +52 -0
  200. package/src/commands/install.ts +107 -0
  201. package/src/commands/join.ts +40 -0
  202. package/src/commands/launch-help.ts +116 -0
  203. package/src/commands/launch.ts +34 -0
  204. package/src/commands/models.ts +61 -0
  205. package/src/commands/plugin.ts +79 -0
  206. package/src/commands/read.ts +39 -0
  207. package/src/commands/say.ts +146 -0
  208. package/src/commands/setup.ts +68 -0
  209. package/src/commands/share.ts +71 -0
  210. package/src/commands/shell.ts +30 -0
  211. package/src/commands/ssh.ts +61 -0
  212. package/src/commands/stats.ts +30 -0
  213. package/src/commands/tiny-models.ts +36 -0
  214. package/src/commands/token.ts +164 -0
  215. package/src/commands/ttsr.ts +125 -0
  216. package/src/commands/update.ts +34 -0
  217. package/src/commands/usage.ts +55 -0
  218. package/src/commands/web-search.ts +43 -0
  219. package/src/commands/worktree.ts +63 -0
  220. package/src/commit/agentic/agent.ts +322 -0
  221. package/src/commit/agentic/fallback.ts +96 -0
  222. package/src/commit/agentic/index.ts +383 -0
  223. package/src/commit/agentic/lock-files.ts +107 -0
  224. package/src/commit/agentic/prompts/analyze-file.md +22 -0
  225. package/src/commit/agentic/prompts/session-user.md +25 -0
  226. package/src/commit/agentic/prompts/split-confirm.md +1 -0
  227. package/src/commit/agentic/prompts/system.md +38 -0
  228. package/src/commit/agentic/state.ts +60 -0
  229. package/src/commit/agentic/tools/analyze-file.ts +148 -0
  230. package/src/commit/agentic/tools/git-file-diff.ts +191 -0
  231. package/src/commit/agentic/tools/git-hunk.ts +52 -0
  232. package/src/commit/agentic/tools/git-overview.ts +62 -0
  233. package/src/commit/agentic/tools/index.ts +54 -0
  234. package/src/commit/agentic/tools/propose-changelog.ts +147 -0
  235. package/src/commit/agentic/tools/propose-commit.ts +109 -0
  236. package/src/commit/agentic/tools/recent-commits.ts +81 -0
  237. package/src/commit/agentic/tools/schemas.ts +11 -0
  238. package/src/commit/agentic/tools/split-commit.ts +241 -0
  239. package/src/commit/agentic/topo-sort.ts +44 -0
  240. package/src/commit/agentic/trivial.ts +51 -0
  241. package/src/commit/agentic/validation.ts +183 -0
  242. package/src/commit/analysis/conventional.ts +64 -0
  243. package/src/commit/analysis/index.ts +4 -0
  244. package/src/commit/analysis/scope.ts +242 -0
  245. package/src/commit/analysis/summary.ts +107 -0
  246. package/src/commit/analysis/validation.ts +66 -0
  247. package/src/commit/changelog/detect.ts +40 -0
  248. package/src/commit/changelog/generate.ts +101 -0
  249. package/src/commit/changelog/index.ts +234 -0
  250. package/src/commit/changelog/parse.ts +44 -0
  251. package/src/commit/cli.ts +85 -0
  252. package/src/commit/git/diff.ts +148 -0
  253. package/src/commit/index.ts +5 -0
  254. package/src/commit/map-reduce/index.ts +69 -0
  255. package/src/commit/map-reduce/map-phase.ts +193 -0
  256. package/src/commit/map-reduce/reduce-phase.ts +49 -0
  257. package/src/commit/map-reduce/utils.ts +9 -0
  258. package/src/commit/message.ts +11 -0
  259. package/src/commit/model-selection.ts +95 -0
  260. package/src/commit/pipeline.ts +244 -0
  261. package/src/commit/prompts/analysis-system.md +148 -0
  262. package/src/commit/prompts/analysis-user.md +38 -0
  263. package/src/commit/prompts/changelog-system.md +50 -0
  264. package/src/commit/prompts/changelog-user.md +18 -0
  265. package/src/commit/prompts/file-observer-system.md +24 -0
  266. package/src/commit/prompts/file-observer-user.md +8 -0
  267. package/src/commit/prompts/reduce-system.md +50 -0
  268. package/src/commit/prompts/reduce-user.md +17 -0
  269. package/src/commit/prompts/summary-retry.md +3 -0
  270. package/src/commit/prompts/summary-system.md +38 -0
  271. package/src/commit/prompts/summary-user.md +13 -0
  272. package/src/commit/prompts/types-description.md +2 -0
  273. package/src/commit/shared-llm.ts +70 -0
  274. package/src/commit/types.ts +118 -0
  275. package/src/commit/utils/exclusions.ts +42 -0
  276. package/src/commit/utils.ts +58 -0
  277. package/src/config/api-key-resolver.ts +81 -0
  278. package/src/config/append-only-context-mode.ts +76 -0
  279. package/src/config/config-file.ts +347 -0
  280. package/src/config/inline-tool-descriptors-mode.ts +26 -0
  281. package/src/config/keybindings.ts +703 -0
  282. package/src/config/mcp-schema.json +252 -0
  283. package/src/config/model-discovery.ts +1077 -0
  284. package/src/config/model-registry.ts +2822 -0
  285. package/src/config/model-resolver.ts +2115 -0
  286. package/src/config/model-roles.ts +113 -0
  287. package/src/config/models-config-schema-bundle.ts +315 -0
  288. package/src/config/models-config-schema.ts +14 -0
  289. package/src/config/models-config.ts +130 -0
  290. package/src/config/prompt-templates.ts +205 -0
  291. package/src/config/provider-globals.ts +25 -0
  292. package/src/config/resolve-config-value.ts +95 -0
  293. package/src/config/service-tier.ts +146 -0
  294. package/src/config/settings-schema.ts +5887 -0
  295. package/src/config/settings.ts +2394 -0
  296. package/src/config.ts +242 -0
  297. package/src/cursor-bridge-tools.ts +81 -0
  298. package/src/cursor.ts +960 -0
  299. package/src/dap/client.ts +1043 -0
  300. package/src/dap/config.ts +480 -0
  301. package/src/dap/defaults.json +212 -0
  302. package/src/dap/index.ts +4 -0
  303. package/src/dap/session.ts +1841 -0
  304. package/src/dap/types.ts +611 -0
  305. package/src/debug/index.ts +584 -0
  306. package/src/debug/log-formatting.ts +58 -0
  307. package/src/debug/log-viewer.ts +966 -0
  308. package/src/debug/profiler.ts +168 -0
  309. package/src/debug/protocol-probe.ts +267 -0
  310. package/src/debug/raw-sse-buffer.ts +421 -0
  311. package/src/debug/raw-sse.ts +312 -0
  312. package/src/debug/remote-debugger.ts +151 -0
  313. package/src/debug/report-bundle.ts +411 -0
  314. package/src/debug/system-info.ts +111 -0
  315. package/src/debug/terminal-info.ts +124 -0
  316. package/src/discovery/agent-plugin-format.ts +551 -0
  317. package/src/discovery/agent-plugins.ts +341 -0
  318. package/src/discovery/agents-md.ts +67 -0
  319. package/src/discovery/agents.ts +300 -0
  320. package/src/discovery/at-imports.ts +273 -0
  321. package/src/discovery/builtin-defaults.ts +39 -0
  322. package/src/discovery/builtin-rules/go-add-cleanup.md +33 -0
  323. package/src/discovery/builtin-rules/go-bench-loop.md +36 -0
  324. package/src/discovery/builtin-rules/go-exp-promoted.md +40 -0
  325. package/src/discovery/builtin-rules/go-ioutil.md +37 -0
  326. package/src/discovery/builtin-rules/go-join-hostport.md +30 -0
  327. package/src/discovery/builtin-rules/go-new-expr.md +44 -0
  328. package/src/discovery/builtin-rules/go-rand-v2.md +41 -0
  329. package/src/discovery/builtin-rules/go-range-int.md +45 -0
  330. package/src/discovery/builtin-rules/index.ts +74 -0
  331. package/src/discovery/builtin-rules/rs-box-leak.md +49 -0
  332. package/src/discovery/builtin-rules/rs-future-prelude.md +24 -0
  333. package/src/discovery/builtin-rules/rs-lazylock.md +52 -0
  334. package/src/discovery/builtin-rules/rs-match-ergonomics.md +68 -0
  335. package/src/discovery/builtin-rules/rs-parking-lot.md +45 -0
  336. package/src/discovery/builtin-rules/rs-result-type.md +20 -0
  337. package/src/discovery/builtin-rules/ts-bare-catch.md +39 -0
  338. package/src/discovery/builtin-rules/ts-import-type.md +43 -0
  339. package/src/discovery/builtin-rules/ts-no-any.md +66 -0
  340. package/src/discovery/builtin-rules/ts-no-deprecated-leftovers.md +45 -0
  341. package/src/discovery/builtin-rules/ts-no-dynamic-import.md +40 -0
  342. package/src/discovery/builtin-rules/ts-no-inline-cast-access.md +56 -0
  343. package/src/discovery/builtin-rules/ts-no-local-is-record.md +48 -0
  344. package/src/discovery/builtin-rules/ts-no-return-type.md +45 -0
  345. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  346. package/src/discovery/builtin-rules/ts-no-tiny-functions.md +51 -0
  347. package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +66 -0
  348. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  349. package/src/discovery/builtin-rules/ts-set-map.md +28 -0
  350. package/src/discovery/builtin.ts +945 -0
  351. package/src/discovery/claude-plugins.ts +640 -0
  352. package/src/discovery/claude.ts +591 -0
  353. package/src/discovery/cline.ts +83 -0
  354. package/src/discovery/codex.ts +553 -0
  355. package/src/discovery/contained-path.ts +78 -0
  356. package/src/discovery/cursor.ts +223 -0
  357. package/src/discovery/gemini.ts +386 -0
  358. package/src/discovery/github.ts +337 -0
  359. package/src/discovery/helpers.ts +1183 -0
  360. package/src/discovery/index.ts +82 -0
  361. package/src/discovery/mcp-json.ts +182 -0
  362. package/src/discovery/omp-extension-roots.ts +272 -0
  363. package/src/discovery/omp-plugins.ts +409 -0
  364. package/src/discovery/opencode.ts +441 -0
  365. package/src/discovery/plugin-dir-roots.ts +28 -0
  366. package/src/discovery/ssh.ts +153 -0
  367. package/src/discovery/substitute-plugin-root.ts +77 -0
  368. package/src/discovery/vscode.ts +106 -0
  369. package/src/discovery/windsurf.ts +149 -0
  370. package/src/edit/apply-patch/index.ts +87 -0
  371. package/src/edit/apply-patch/parser.ts +174 -0
  372. package/src/edit/diff.ts +1008 -0
  373. package/src/edit/edit-clipboard.ts +23 -0
  374. package/src/edit/file-snapshot-store.ts +148 -0
  375. package/src/edit/hashline/block-resolver.ts +33 -0
  376. package/src/edit/hashline/diff.ts +402 -0
  377. package/src/edit/hashline/execute.ts +313 -0
  378. package/src/edit/hashline/filesystem.ts +247 -0
  379. package/src/edit/hashline/index.ts +5 -0
  380. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  381. package/src/edit/hashline/params.ts +12 -0
  382. package/src/edit/index.ts +699 -0
  383. package/src/edit/modes/apply-patch.lark +19 -0
  384. package/src/edit/modes/apply-patch.ts +53 -0
  385. package/src/edit/modes/patch.ts +1958 -0
  386. package/src/edit/modes/replace.ts +1191 -0
  387. package/src/edit/normalize.ts +345 -0
  388. package/src/edit/notebook.ts +242 -0
  389. package/src/edit/read-file.ts +25 -0
  390. package/src/edit/renderer.ts +998 -0
  391. package/src/edit/snapshot-details.ts +77 -0
  392. package/src/edit/streaming.ts +710 -0
  393. package/src/eval/agent-bridge.ts +224 -0
  394. package/src/eval/backend-helpers.ts +48 -0
  395. package/src/eval/backend.ts +71 -0
  396. package/src/eval/bridge-timeout.ts +65 -0
  397. package/src/eval/budget-bridge.ts +48 -0
  398. package/src/eval/completion-bridge.ts +212 -0
  399. package/src/eval/concurrency-bridge.ts +34 -0
  400. package/src/eval/executor-base.ts +562 -0
  401. package/src/eval/idle-timeout.ts +91 -0
  402. package/src/eval/index.ts +6 -0
  403. package/src/eval/jl/executor.ts +551 -0
  404. package/src/eval/jl/index.ts +54 -0
  405. package/src/eval/jl/kernel.ts +236 -0
  406. package/src/eval/jl/prelude.jl +736 -0
  407. package/src/eval/jl/prelude.ts +3 -0
  408. package/src/eval/jl/runner.jl +666 -0
  409. package/src/eval/jl/runtime.ts +118 -0
  410. package/src/eval/js/context-manager.ts +872 -0
  411. package/src/eval/js/executor.ts +178 -0
  412. package/src/eval/js/index.ts +41 -0
  413. package/src/eval/js/process-entry.ts +31 -0
  414. package/src/eval/js/shared/helpers.ts +170 -0
  415. package/src/eval/js/shared/indirect-eval.ts +30 -0
  416. package/src/eval/js/shared/local-module-loader.ts +364 -0
  417. package/src/eval/js/shared/prelude.ts +2 -0
  418. package/src/eval/js/shared/prelude.txt +294 -0
  419. package/src/eval/js/shared/rewrite-imports.ts +550 -0
  420. package/src/eval/js/shared/runtime.ts +590 -0
  421. package/src/eval/js/shared/types.ts +18 -0
  422. package/src/eval/js/tool-bridge.ts +163 -0
  423. package/src/eval/js/worker-core.ts +380 -0
  424. package/src/eval/js/worker-entry.ts +37 -0
  425. package/src/eval/js/worker-protocol.ts +47 -0
  426. package/src/eval/kernel-base.ts +569 -0
  427. package/src/eval/py/display.ts +71 -0
  428. package/src/eval/py/executor.ts +643 -0
  429. package/src/eval/py/index.ts +57 -0
  430. package/src/eval/py/kernel.ts +235 -0
  431. package/src/eval/py/prelude.py +673 -0
  432. package/src/eval/py/prelude.ts +3 -0
  433. package/src/eval/py/runner.py +1425 -0
  434. package/src/eval/py/runtime.ts +276 -0
  435. package/src/eval/py/spawn-options.ts +134 -0
  436. package/src/eval/py/tool-bridge.ts +201 -0
  437. package/src/eval/rb/executor.ts +511 -0
  438. package/src/eval/rb/index.ts +54 -0
  439. package/src/eval/rb/kernel.ts +231 -0
  440. package/src/eval/rb/prelude.rb +551 -0
  441. package/src/eval/rb/prelude.ts +3 -0
  442. package/src/eval/rb/runner.rb +581 -0
  443. package/src/eval/rb/runtime.ts +132 -0
  444. package/src/eval/runtime-env.ts +104 -0
  445. package/src/eval/session-id.ts +8 -0
  446. package/src/eval/types.ts +48 -0
  447. package/src/exa/index.ts +2 -0
  448. package/src/exa/mcp-client.ts +370 -0
  449. package/src/exa/types.ts +69 -0
  450. package/src/exec/bash-executor.ts +627 -0
  451. package/src/exec/direnv.ts +145 -0
  452. package/src/exec/exec.ts +53 -0
  453. package/src/exec/non-interactive-env.ts +118 -0
  454. package/src/export/custom-share.ts +65 -0
  455. package/src/export/html/args.ts +20 -0
  456. package/src/export/html/index.ts +320 -0
  457. package/src/export/html/share-loader.js +102 -0
  458. package/src/export/html/template.css +1355 -0
  459. package/src/export/html/template.html +55 -0
  460. package/src/export/html/template.js +1653 -0
  461. package/src/export/html/tool-views.generated.js +35 -0
  462. package/src/export/html/vendor/highlight.min.js +1213 -0
  463. package/src/export/html/vendor/marked.min.js +6 -0
  464. package/src/export/html/web-palette.ts +126 -0
  465. package/src/export/share.ts +686 -0
  466. package/src/export/ttsr.ts +590 -0
  467. package/src/extensibility/custom-commands/bundled/ci-green/index.ts +54 -0
  468. package/src/extensibility/custom-commands/bundled/review/index.ts +698 -0
  469. package/src/extensibility/custom-commands/index.ts +2 -0
  470. package/src/extensibility/custom-commands/loader.ts +242 -0
  471. package/src/extensibility/custom-commands/types.ts +119 -0
  472. package/src/extensibility/custom-tools/index.ts +7 -0
  473. package/src/extensibility/custom-tools/loader.ts +301 -0
  474. package/src/extensibility/custom-tools/types.ts +287 -0
  475. package/src/extensibility/custom-tools/wrapper.ts +50 -0
  476. package/src/extensibility/extensions/compact-handler.ts +40 -0
  477. package/src/extensibility/extensions/get-commands-handler.ts +78 -0
  478. package/src/extensibility/extensions/index.ts +16 -0
  479. package/src/extensibility/extensions/load-errors.ts +13 -0
  480. package/src/extensibility/extensions/loader.ts +663 -0
  481. package/src/extensibility/extensions/managed-timers.ts +83 -0
  482. package/src/extensibility/extensions/model-api.ts +39 -0
  483. package/src/extensibility/extensions/runner.ts +1396 -0
  484. package/src/extensibility/extensions/types.ts +1603 -0
  485. package/src/extensibility/extensions/wrapper.ts +395 -0
  486. package/src/extensibility/hooks/index.ts +6 -0
  487. package/src/extensibility/hooks/loader.ts +243 -0
  488. package/src/extensibility/hooks/runner.ts +425 -0
  489. package/src/extensibility/hooks/tool-wrapper.ts +124 -0
  490. package/src/extensibility/hooks/types.ts +612 -0
  491. package/src/extensibility/legacy-pi-ai-shim.ts +161 -0
  492. package/src/extensibility/legacy-pi-coding-agent-shim.ts +1460 -0
  493. package/src/extensibility/legacy-pi-tui-shim.ts +43 -0
  494. package/src/extensibility/legacy-typebox.ts +101 -0
  495. package/src/extensibility/plugins/bun-git-cache.ts +91 -0
  496. package/src/extensibility/plugins/doctor.ts +65 -0
  497. package/src/extensibility/plugins/git-url.ts +367 -0
  498. package/src/extensibility/plugins/index.ts +9 -0
  499. package/src/extensibility/plugins/installer.ts +201 -0
  500. package/src/extensibility/plugins/legacy-pi-compat.ts +2643 -0
  501. package/src/extensibility/plugins/legacy-pi-virtual-modules.d.ts +4 -0
  502. package/src/extensibility/plugins/loader.ts +535 -0
  503. package/src/extensibility/plugins/manager.ts +1142 -0
  504. package/src/extensibility/plugins/marketplace/cache.ts +136 -0
  505. package/src/extensibility/plugins/marketplace/fetcher.ts +316 -0
  506. package/src/extensibility/plugins/marketplace/index.ts +6 -0
  507. package/src/extensibility/plugins/marketplace/manager.ts +927 -0
  508. package/src/extensibility/plugins/marketplace/registry.ts +192 -0
  509. package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
  510. package/src/extensibility/plugins/marketplace/types.ts +192 -0
  511. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  512. package/src/extensibility/plugins/parser.ts +107 -0
  513. package/src/extensibility/plugins/runtime-config.ts +9 -0
  514. package/src/extensibility/plugins/types.ts +194 -0
  515. package/src/extensibility/session-handler-types.ts +21 -0
  516. package/src/extensibility/shared-events.ts +401 -0
  517. package/src/extensibility/skills.ts +531 -0
  518. package/src/extensibility/slash-commands.ts +131 -0
  519. package/src/extensibility/tool-event-input.ts +80 -0
  520. package/src/extensibility/tool-proxy.ts +28 -0
  521. package/src/extensibility/utils.ts +192 -0
  522. package/src/goals/index.ts +3 -0
  523. package/src/goals/runtime.ts +521 -0
  524. package/src/goals/state.ts +37 -0
  525. package/src/goals/tools/goal-tool.ts +251 -0
  526. package/src/hindsight/backend.ts +354 -0
  527. package/src/hindsight/bank.ts +156 -0
  528. package/src/hindsight/client.ts +680 -0
  529. package/src/hindsight/config.ts +193 -0
  530. package/src/hindsight/content.ts +266 -0
  531. package/src/hindsight/index.ts +8 -0
  532. package/src/hindsight/mental-models.ts +429 -0
  533. package/src/hindsight/seeds.json +32 -0
  534. package/src/hindsight/state.ts +530 -0
  535. package/src/hindsight/transcript.ts +71 -0
  536. package/src/index.ts +66 -0
  537. package/src/internal-urls/agent-protocol.ts +180 -0
  538. package/src/internal-urls/artifact-protocol.ts +151 -0
  539. package/src/internal-urls/docs-index.ts +102 -0
  540. package/src/internal-urls/filesystem-resource.ts +34 -0
  541. package/src/internal-urls/history-protocol.ts +198 -0
  542. package/src/internal-urls/index.ts +28 -0
  543. package/src/internal-urls/issue-pr-protocol.ts +594 -0
  544. package/src/internal-urls/json-query.ts +126 -0
  545. package/src/internal-urls/local-protocol.ts +471 -0
  546. package/src/internal-urls/mcp-protocol.ts +168 -0
  547. package/src/internal-urls/memory-protocol.ts +380 -0
  548. package/src/internal-urls/omp-protocol.ts +94 -0
  549. package/src/internal-urls/parse.ts +103 -0
  550. package/src/internal-urls/registry-helpers.ts +132 -0
  551. package/src/internal-urls/router.ts +153 -0
  552. package/src/internal-urls/rule-protocol.ts +45 -0
  553. package/src/internal-urls/security-protocol.ts +261 -0
  554. package/src/internal-urls/skill-protocol.ts +131 -0
  555. package/src/internal-urls/ssh-protocol.ts +368 -0
  556. package/src/internal-urls/types.ts +196 -0
  557. package/src/internal-urls/vault-protocol.ts +940 -0
  558. package/src/internal-urls/xd-protocol.ts +46 -0
  559. package/src/irc/bus.ts +380 -0
  560. package/src/jsonrpc/message-framing.ts +142 -0
  561. package/src/launch/broker.ts +1368 -0
  562. package/src/launch/client.ts +521 -0
  563. package/src/launch/ensure.ts +73 -0
  564. package/src/launch/paths.ts +14 -0
  565. package/src/launch/presence.ts +82 -0
  566. package/src/launch/protocol.ts +448 -0
  567. package/src/launch/spawn-options.ts +17 -0
  568. package/src/launch/terminal-output-worker-client.ts +53 -0
  569. package/src/launch/terminal-output-worker-protocol.ts +11 -0
  570. package/src/launch/terminal-output-worker.ts +23 -0
  571. package/src/launch/terminal-output.ts +46 -0
  572. package/src/lib/xai-http.ts +150 -0
  573. package/src/live/attestation.ts +91 -0
  574. package/src/live/controller.ts +517 -0
  575. package/src/live/prompts/agent-final-message.md +3 -0
  576. package/src/live/prompts/live-instructions.md +23 -0
  577. package/src/live/protocol.ts +233 -0
  578. package/src/live/transport.ts +422 -0
  579. package/src/live/visualizer.ts +221 -0
  580. package/src/live/voices.ts +18 -0
  581. package/src/lsp/client.ts +1465 -0
  582. package/src/lsp/clients/biome-client.ts +263 -0
  583. package/src/lsp/clients/index.ts +50 -0
  584. package/src/lsp/clients/lsp-linter-client.ts +85 -0
  585. package/src/lsp/clients/swiftlint-client.ts +120 -0
  586. package/src/lsp/config.ts +549 -0
  587. package/src/lsp/defaults.json +499 -0
  588. package/src/lsp/deferred-diagnostics.ts +66 -0
  589. package/src/lsp/diagnostics-ledger.ts +51 -0
  590. package/src/lsp/edits.ts +288 -0
  591. package/src/lsp/format-options.ts +119 -0
  592. package/src/lsp/index.ts +2821 -0
  593. package/src/lsp/lspmux.ts +233 -0
  594. package/src/lsp/mux/daemon.ts +348 -0
  595. package/src/lsp/mux/protocol.ts +96 -0
  596. package/src/lsp/mux/server.ts +797 -0
  597. package/src/lsp/render.ts +668 -0
  598. package/src/lsp/startup-events.ts +13 -0
  599. package/src/lsp/types.ts +479 -0
  600. package/src/lsp/utils.ts +747 -0
  601. package/src/main.ts +1799 -0
  602. package/src/markit/NOTICE +32 -0
  603. package/src/markit/converters/docx.ts +56 -0
  604. package/src/markit/converters/epub.ts +136 -0
  605. package/src/markit/converters/pdf/columns.ts +103 -0
  606. package/src/markit/converters/pdf/extract.ts +598 -0
  607. package/src/markit/converters/pdf/grid.ts +780 -0
  608. package/src/markit/converters/pdf/headers.ts +106 -0
  609. package/src/markit/converters/pdf/index.ts +146 -0
  610. package/src/markit/converters/pdf/render.ts +501 -0
  611. package/src/markit/converters/pdf/types.ts +84 -0
  612. package/src/markit/converters/pptx.ts +325 -0
  613. package/src/markit/converters/xlsx.ts +173 -0
  614. package/src/markit/index.ts +2 -0
  615. package/src/markit/registry.ts +59 -0
  616. package/src/markit/types.ts +35 -0
  617. package/src/mcp/client.ts +511 -0
  618. package/src/mcp/config-writer.ts +377 -0
  619. package/src/mcp/config.ts +385 -0
  620. package/src/mcp/index.ts +29 -0
  621. package/src/mcp/json-rpc.ts +122 -0
  622. package/src/mcp/loader.ts +125 -0
  623. package/src/mcp/manager.ts +1524 -0
  624. package/src/mcp/oauth-credentials.ts +104 -0
  625. package/src/mcp/oauth-discovery.ts +587 -0
  626. package/src/mcp/oauth-flow.ts +830 -0
  627. package/src/mcp/render.ts +214 -0
  628. package/src/mcp/request-id.ts +24 -0
  629. package/src/mcp/smithery-auth.ts +108 -0
  630. package/src/mcp/smithery-connect.ts +154 -0
  631. package/src/mcp/smithery-registry.ts +500 -0
  632. package/src/mcp/startup-events.ts +116 -0
  633. package/src/mcp/timeout.ts +59 -0
  634. package/src/mcp/tool-bridge.ts +691 -0
  635. package/src/mcp/tool-cache.ts +117 -0
  636. package/src/mcp/transports/header-policy.ts +95 -0
  637. package/src/mcp/transports/http.ts +508 -0
  638. package/src/mcp/transports/index.ts +7 -0
  639. package/src/mcp/transports/sse.ts +372 -0
  640. package/src/mcp/transports/stdio.ts +905 -0
  641. package/src/mcp/types.ts +467 -0
  642. package/src/memories/index.ts +1434 -0
  643. package/src/memories/storage.ts +578 -0
  644. package/src/memory-backend/index.ts +19 -0
  645. package/src/memory-backend/local-backend.ts +47 -0
  646. package/src/memory-backend/messages.ts +19 -0
  647. package/src/memory-backend/off-backend.ts +25 -0
  648. package/src/memory-backend/resolve.ts +25 -0
  649. package/src/memory-backend/runtime.ts +66 -0
  650. package/src/memory-backend/tool-names.ts +2 -0
  651. package/src/memory-backend/types.ts +166 -0
  652. package/src/mnemopi/backend.ts +629 -0
  653. package/src/mnemopi/config.ts +267 -0
  654. package/src/mnemopi/embed-client.ts +293 -0
  655. package/src/mnemopi/embed-protocol.ts +35 -0
  656. package/src/mnemopi/embed-worker.ts +114 -0
  657. package/src/mnemopi/index.ts +3 -0
  658. package/src/mnemopi/state.ts +940 -0
  659. package/src/modes/acp/acp-agent.ts +2595 -0
  660. package/src/modes/acp/acp-client-bridge.ts +154 -0
  661. package/src/modes/acp/acp-event-mapper.ts +1084 -0
  662. package/src/modes/acp/acp-mode.ts +48 -0
  663. package/src/modes/acp/index.ts +2 -0
  664. package/src/modes/acp/terminal-auth.ts +37 -0
  665. package/src/modes/components/advisor-config.ts +635 -0
  666. package/src/modes/components/advisor-message.ts +109 -0
  667. package/src/modes/components/agent-dashboard.ts +1252 -0
  668. package/src/modes/components/agent-hub-projection.ts +248 -0
  669. package/src/modes/components/agent-hub-renderer.ts +194 -0
  670. package/src/modes/components/agent-hub.ts +1126 -0
  671. package/src/modes/components/agent-transcript-viewer.ts +647 -0
  672. package/src/modes/components/ask-dialog.ts +1017 -0
  673. package/src/modes/components/assistant-message.ts +978 -0
  674. package/src/modes/components/background-tan-message.ts +36 -0
  675. package/src/modes/components/bash-execution.ts +233 -0
  676. package/src/modes/components/bordered-loader.ts +41 -0
  677. package/src/modes/components/btw-panel.ts +161 -0
  678. package/src/modes/components/cache-invalidation-marker.ts +110 -0
  679. package/src/modes/components/chat-block.ts +111 -0
  680. package/src/modes/components/chat-transcript-builder.ts +518 -0
  681. package/src/modes/components/codex-reset-fireworks.ts +369 -0
  682. package/src/modes/components/collab-prompt-message.ts +32 -0
  683. package/src/modes/components/compaction-summary-message.ts +221 -0
  684. package/src/modes/components/copy-selector.ts +218 -0
  685. package/src/modes/components/countdown-timer.ts +75 -0
  686. package/src/modes/components/custom-editor.ts +1036 -0
  687. package/src/modes/components/custom-message.ts +70 -0
  688. package/src/modes/components/diff.ts +254 -0
  689. package/src/modes/components/dynamic-border.ts +37 -0
  690. package/src/modes/components/error-banner.ts +33 -0
  691. package/src/modes/components/eval-execution.ts +169 -0
  692. package/src/modes/components/execution-shared.ts +101 -0
  693. package/src/modes/components/extensions/extension-dashboard.ts +492 -0
  694. package/src/modes/components/extensions/extension-list.ts +507 -0
  695. package/src/modes/components/extensions/index.ts +9 -0
  696. package/src/modes/components/extensions/inspector-panel.ts +326 -0
  697. package/src/modes/components/extensions/state-manager.ts +648 -0
  698. package/src/modes/components/extensions/types.ts +186 -0
  699. package/src/modes/components/footer.ts +274 -0
  700. package/src/modes/components/history-search.ts +268 -0
  701. package/src/modes/components/hook-editor.ts +213 -0
  702. package/src/modes/components/hook-input.ts +87 -0
  703. package/src/modes/components/hook-message.ts +67 -0
  704. package/src/modes/components/hook-selector.ts +691 -0
  705. package/src/modes/components/index.ts +42 -0
  706. package/src/modes/components/keybinding-hints.ts +56 -0
  707. package/src/modes/components/late-diagnostics-message.ts +60 -0
  708. package/src/modes/components/login-dialog.ts +197 -0
  709. package/src/modes/components/logout-account-selector.ts +130 -0
  710. package/src/modes/components/mcp-add-wizard.ts +1413 -0
  711. package/src/modes/components/message-frame.ts +98 -0
  712. package/src/modes/components/model-browser.ts +888 -0
  713. package/src/modes/components/model-hub.ts +2014 -0
  714. package/src/modes/components/model-picker.ts +237 -0
  715. package/src/modes/components/move-overlay.ts +293 -0
  716. package/src/modes/components/oauth-selector.ts +474 -0
  717. package/src/modes/components/omfg-panel.ts +141 -0
  718. package/src/modes/components/overlay-box.ts +109 -0
  719. package/src/modes/components/pause-screen.ts +208 -0
  720. package/src/modes/components/plan-review-overlay.ts +1226 -0
  721. package/src/modes/components/plan-toc.ts +138 -0
  722. package/src/modes/components/plugin-selector.ts +100 -0
  723. package/src/modes/components/plugin-settings.ts +745 -0
  724. package/src/modes/components/queue-mode-selector.ts +61 -0
  725. package/src/modes/components/read-tool-group.ts +856 -0
  726. package/src/modes/components/reset-usage-selector.ts +161 -0
  727. package/src/modes/components/segment-track.ts +89 -0
  728. package/src/modes/components/select-list-mouse-routing.ts +35 -0
  729. package/src/modes/components/selector-helpers.ts +129 -0
  730. package/src/modes/components/session-account-selector.ts +62 -0
  731. package/src/modes/components/session-selector.ts +1035 -0
  732. package/src/modes/components/settings-defs.ts +267 -0
  733. package/src/modes/components/settings-selector.ts +1445 -0
  734. package/src/modes/components/show-images-selector.ts +50 -0
  735. package/src/modes/components/skill-message.ts +110 -0
  736. package/src/modes/components/snapcompact-shape-preview-doc.md +14 -0
  737. package/src/modes/components/snapcompact-shape-preview.ts +192 -0
  738. package/src/modes/components/status-line/component.ts +1843 -0
  739. package/src/modes/components/status-line/context-thresholds.ts +86 -0
  740. package/src/modes/components/status-line/git-utils.ts +42 -0
  741. package/src/modes/components/status-line/index.ts +5 -0
  742. package/src/modes/components/status-line/presets.ts +106 -0
  743. package/src/modes/components/status-line/segments.ts +710 -0
  744. package/src/modes/components/status-line/separators.ts +55 -0
  745. package/src/modes/components/status-line/types.ts +159 -0
  746. package/src/modes/components/stripped-tool-calls-placeholder.ts +35 -0
  747. package/src/modes/components/theme-selector.ts +68 -0
  748. package/src/modes/components/thinking-selector.ts +57 -0
  749. package/src/modes/components/tiny-title-download-progress.ts +90 -0
  750. package/src/modes/components/tips.txt +26 -0
  751. package/src/modes/components/todo-reminder.ts +43 -0
  752. package/src/modes/components/tool-execution.ts +1467 -0
  753. package/src/modes/components/transcript-container.ts +527 -0
  754. package/src/modes/components/tree-selector.ts +1006 -0
  755. package/src/modes/components/ttsr-notification.ts +123 -0
  756. package/src/modes/components/usage-row.ts +52 -0
  757. package/src/modes/components/user-message-selector.ts +227 -0
  758. package/src/modes/components/user-message.ts +167 -0
  759. package/src/modes/components/visual-truncate.ts +63 -0
  760. package/src/modes/components/welcome.ts +578 -0
  761. package/src/modes/controllers/btw-controller.ts +246 -0
  762. package/src/modes/controllers/command-controller-shared.ts +109 -0
  763. package/src/modes/controllers/command-controller.ts +2024 -0
  764. package/src/modes/controllers/event-controller.ts +2173 -0
  765. package/src/modes/controllers/extension-ui-controller.ts +1243 -0
  766. package/src/modes/controllers/input-controller.ts +2037 -0
  767. package/src/modes/controllers/live-command-controller.ts +261 -0
  768. package/src/modes/controllers/mcp-command-controller.ts +2552 -0
  769. package/src/modes/controllers/omfg-controller.ts +287 -0
  770. package/src/modes/controllers/omfg-rule.ts +647 -0
  771. package/src/modes/controllers/selector-controller.ts +2058 -0
  772. package/src/modes/controllers/session-focus-controller.ts +117 -0
  773. package/src/modes/controllers/ssh-command-controller.ts +385 -0
  774. package/src/modes/controllers/streaming-reveal.ts +399 -0
  775. package/src/modes/controllers/tan-command-controller.ts +243 -0
  776. package/src/modes/controllers/todo-command-controller.ts +487 -0
  777. package/src/modes/controllers/tool-args-reveal.ts +591 -0
  778. package/src/modes/data/emojis.json +1 -0
  779. package/src/modes/emoji-autocomplete.ts +285 -0
  780. package/src/modes/github-ref-autocomplete.ts +75 -0
  781. package/src/modes/gradient-highlight.ts +99 -0
  782. package/src/modes/image-references.ts +137 -0
  783. package/src/modes/index.ts +10 -0
  784. package/src/modes/interactive-mode.ts +5055 -0
  785. package/src/modes/internal-url-autocomplete.ts +158 -0
  786. package/src/modes/loop-limit.ts +192 -0
  787. package/src/modes/magic-keyword-boundary.ts +23 -0
  788. package/src/modes/magic-keywords.ts +42 -0
  789. package/src/modes/markdown-prose.ts +247 -0
  790. package/src/modes/oauth-manual-input.ts +69 -0
  791. package/src/modes/orchestrate.ts +43 -0
  792. package/src/modes/print-mode.ts +282 -0
  793. package/src/modes/prompt-action-autocomplete.ts +322 -0
  794. package/src/modes/queue-input.ts +132 -0
  795. package/src/modes/rpc/host-tools.ts +204 -0
  796. package/src/modes/rpc/host-uris.ts +241 -0
  797. package/src/modes/rpc/rpc-client.ts +1213 -0
  798. package/src/modes/rpc/rpc-frame.ts +316 -0
  799. package/src/modes/rpc/rpc-input.ts +38 -0
  800. package/src/modes/rpc/rpc-messages.ts +127 -0
  801. package/src/modes/rpc/rpc-mode.ts +1519 -0
  802. package/src/modes/rpc/rpc-subagents.ts +265 -0
  803. package/src/modes/rpc/rpc-types.ts +544 -0
  804. package/src/modes/running-subagent-badge.ts +13 -0
  805. package/src/modes/runtime-init.ts +144 -0
  806. package/src/modes/session-observer-registry.ts +223 -0
  807. package/src/modes/session-teardown.ts +82 -0
  808. package/src/modes/setup-version.ts +11 -0
  809. package/src/modes/setup-wizard/index.ts +103 -0
  810. package/src/modes/setup-wizard/lazy.ts +16 -0
  811. package/src/modes/setup-wizard/scenes/glyph.ts +103 -0
  812. package/src/modes/setup-wizard/scenes/model.ts +132 -0
  813. package/src/modes/setup-wizard/scenes/outro.ts +35 -0
  814. package/src/modes/setup-wizard/scenes/providers.ts +105 -0
  815. package/src/modes/setup-wizard/scenes/sign-in.ts +312 -0
  816. package/src/modes/setup-wizard/scenes/splash.ts +201 -0
  817. package/src/modes/setup-wizard/scenes/theme.ts +330 -0
  818. package/src/modes/setup-wizard/scenes/types.ts +65 -0
  819. package/src/modes/setup-wizard/scenes/web-search.ts +153 -0
  820. package/src/modes/setup-wizard/startup-splash.ts +107 -0
  821. package/src/modes/setup-wizard/wizard-overlay.ts +335 -0
  822. package/src/modes/shared.ts +49 -0
  823. package/src/modes/skill-command.ts +91 -0
  824. package/src/modes/theme/dark.json +95 -0
  825. package/src/modes/theme/defaults/alabaster.json +93 -0
  826. package/src/modes/theme/defaults/amethyst.json +96 -0
  827. package/src/modes/theme/defaults/anthracite.json +93 -0
  828. package/src/modes/theme/defaults/basalt.json +91 -0
  829. package/src/modes/theme/defaults/birch.json +95 -0
  830. package/src/modes/theme/defaults/dark-abyss.json +91 -0
  831. package/src/modes/theme/defaults/dark-arctic.json +104 -0
  832. package/src/modes/theme/defaults/dark-aurora.json +95 -0
  833. package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
  834. package/src/modes/theme/defaults/dark-cavern.json +91 -0
  835. package/src/modes/theme/defaults/dark-copper.json +95 -0
  836. package/src/modes/theme/defaults/dark-cosmos.json +90 -0
  837. package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
  838. package/src/modes/theme/defaults/dark-dracula.json +98 -0
  839. package/src/modes/theme/defaults/dark-eclipse.json +91 -0
  840. package/src/modes/theme/defaults/dark-ember.json +95 -0
  841. package/src/modes/theme/defaults/dark-equinox.json +90 -0
  842. package/src/modes/theme/defaults/dark-forest.json +96 -0
  843. package/src/modes/theme/defaults/dark-github.json +105 -0
  844. package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
  845. package/src/modes/theme/defaults/dark-lavender.json +95 -0
  846. package/src/modes/theme/defaults/dark-lunar.json +89 -0
  847. package/src/modes/theme/defaults/dark-midnight.json +95 -0
  848. package/src/modes/theme/defaults/dark-monochrome.json +94 -0
  849. package/src/modes/theme/defaults/dark-monokai.json +98 -0
  850. package/src/modes/theme/defaults/dark-nebula.json +90 -0
  851. package/src/modes/theme/defaults/dark-nord.json +97 -0
  852. package/src/modes/theme/defaults/dark-ocean.json +101 -0
  853. package/src/modes/theme/defaults/dark-one.json +100 -0
  854. package/src/modes/theme/defaults/dark-poimandres.json +143 -0
  855. package/src/modes/theme/defaults/dark-rainforest.json +91 -0
  856. package/src/modes/theme/defaults/dark-reef.json +91 -0
  857. package/src/modes/theme/defaults/dark-retro.json +92 -0
  858. package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
  859. package/src/modes/theme/defaults/dark-sakura.json +95 -0
  860. package/src/modes/theme/defaults/dark-slate.json +95 -0
  861. package/src/modes/theme/defaults/dark-solarized.json +97 -0
  862. package/src/modes/theme/defaults/dark-solstice.json +90 -0
  863. package/src/modes/theme/defaults/dark-starfall.json +91 -0
  864. package/src/modes/theme/defaults/dark-sunset.json +99 -0
  865. package/src/modes/theme/defaults/dark-swamp.json +90 -0
  866. package/src/modes/theme/defaults/dark-synthwave.json +103 -0
  867. package/src/modes/theme/defaults/dark-taiga.json +91 -0
  868. package/src/modes/theme/defaults/dark-terminal.json +95 -0
  869. package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
  870. package/src/modes/theme/defaults/dark-tundra.json +91 -0
  871. package/src/modes/theme/defaults/dark-twilight.json +91 -0
  872. package/src/modes/theme/defaults/dark-volcanic.json +91 -0
  873. package/src/modes/theme/defaults/graphite.json +92 -0
  874. package/src/modes/theme/defaults/index.ts +199 -0
  875. package/src/modes/theme/defaults/light-arctic.json +107 -0
  876. package/src/modes/theme/defaults/light-aurora-day.json +91 -0
  877. package/src/modes/theme/defaults/light-canyon.json +91 -0
  878. package/src/modes/theme/defaults/light-catppuccin.json +106 -0
  879. package/src/modes/theme/defaults/light-cirrus.json +90 -0
  880. package/src/modes/theme/defaults/light-coral.json +95 -0
  881. package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
  882. package/src/modes/theme/defaults/light-dawn.json +90 -0
  883. package/src/modes/theme/defaults/light-dunes.json +91 -0
  884. package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
  885. package/src/modes/theme/defaults/light-forest.json +100 -0
  886. package/src/modes/theme/defaults/light-frost.json +95 -0
  887. package/src/modes/theme/defaults/light-github.json +115 -0
  888. package/src/modes/theme/defaults/light-glacier.json +91 -0
  889. package/src/modes/theme/defaults/light-gruvbox.json +108 -0
  890. package/src/modes/theme/defaults/light-haze.json +90 -0
  891. package/src/modes/theme/defaults/light-honeycomb.json +95 -0
  892. package/src/modes/theme/defaults/light-lagoon.json +91 -0
  893. package/src/modes/theme/defaults/light-lavender.json +95 -0
  894. package/src/modes/theme/defaults/light-meadow.json +91 -0
  895. package/src/modes/theme/defaults/light-mint.json +95 -0
  896. package/src/modes/theme/defaults/light-monochrome.json +101 -0
  897. package/src/modes/theme/defaults/light-ocean.json +99 -0
  898. package/src/modes/theme/defaults/light-one.json +99 -0
  899. package/src/modes/theme/defaults/light-opal.json +91 -0
  900. package/src/modes/theme/defaults/light-orchard.json +91 -0
  901. package/src/modes/theme/defaults/light-paper.json +95 -0
  902. package/src/modes/theme/defaults/light-poimandres.json +143 -0
  903. package/src/modes/theme/defaults/light-prism.json +90 -0
  904. package/src/modes/theme/defaults/light-retro.json +98 -0
  905. package/src/modes/theme/defaults/light-sand.json +95 -0
  906. package/src/modes/theme/defaults/light-savanna.json +91 -0
  907. package/src/modes/theme/defaults/light-solarized.json +102 -0
  908. package/src/modes/theme/defaults/light-soleil.json +90 -0
  909. package/src/modes/theme/defaults/light-sunset.json +99 -0
  910. package/src/modes/theme/defaults/light-synthwave.json +98 -0
  911. package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
  912. package/src/modes/theme/defaults/light-wetland.json +91 -0
  913. package/src/modes/theme/defaults/light-zenith.json +89 -0
  914. package/src/modes/theme/defaults/limestone.json +94 -0
  915. package/src/modes/theme/defaults/mahogany.json +97 -0
  916. package/src/modes/theme/defaults/marble.json +93 -0
  917. package/src/modes/theme/defaults/obsidian.json +91 -0
  918. package/src/modes/theme/defaults/onyx.json +91 -0
  919. package/src/modes/theme/defaults/pearl.json +93 -0
  920. package/src/modes/theme/defaults/porcelain.json +91 -0
  921. package/src/modes/theme/defaults/quartz.json +96 -0
  922. package/src/modes/theme/defaults/sandstone.json +95 -0
  923. package/src/modes/theme/defaults/titanium.json +90 -0
  924. package/src/modes/theme/light.json +93 -0
  925. package/src/modes/theme/mermaid-cache.ts +92 -0
  926. package/src/modes/theme/shimmer.ts +305 -0
  927. package/src/modes/theme/theme-schema.json +463 -0
  928. package/src/modes/theme/theme.ts +3171 -0
  929. package/src/modes/turn-budget.ts +31 -0
  930. package/src/modes/types.ts +494 -0
  931. package/src/modes/ultrathink.ts +42 -0
  932. package/src/modes/utils/context-usage.ts +518 -0
  933. package/src/modes/utils/copy-targets.ts +378 -0
  934. package/src/modes/utils/hotkeys-markdown.ts +65 -0
  935. package/src/modes/utils/interactive-context-helpers.ts +31 -0
  936. package/src/modes/utils/keybinding-matchers.ts +86 -0
  937. package/src/modes/utils/tools-markdown.ts +31 -0
  938. package/src/modes/utils/transcript-render-helpers.ts +253 -0
  939. package/src/modes/utils/ui-helpers.ts +976 -0
  940. package/src/modes/warp-events.ts +232 -0
  941. package/src/modes/workflow.ts +55 -0
  942. package/src/plan-mode/approved-plan.ts +194 -0
  943. package/src/plan-mode/model-transition.ts +51 -0
  944. package/src/plan-mode/plan-files.ts +40 -0
  945. package/src/plan-mode/plan-handoff.ts +37 -0
  946. package/src/plan-mode/plan-protection.ts +31 -0
  947. package/src/plan-mode/state.ts +6 -0
  948. package/src/priority.json +60 -0
  949. package/src/prompts/advisor/active-repo-watchdog.md +6 -0
  950. package/src/prompts/advisor/advise-tool.md +3 -0
  951. package/src/prompts/advisor/context-files.md +8 -0
  952. package/src/prompts/advisor/system.md +98 -0
  953. package/src/prompts/agents/designer.md +74 -0
  954. package/src/prompts/agents/frontmatter.md +12 -0
  955. package/src/prompts/agents/init.md +33 -0
  956. package/src/prompts/agents/librarian.md +119 -0
  957. package/src/prompts/agents/reviewer.md +139 -0
  958. package/src/prompts/agents/scout.md +58 -0
  959. package/src/prompts/agents/security-reviewer.md +75 -0
  960. package/src/prompts/agents/task.md +17 -0
  961. package/src/prompts/bench/cache-prefix-chunk.md +1 -0
  962. package/src/prompts/bench/cache-prefix.md +3 -0
  963. package/src/prompts/bench/cache-suffix.md +1 -0
  964. package/src/prompts/bench.md +6 -0
  965. package/src/prompts/ci-green-request.md +36 -0
  966. package/src/prompts/dry-balance-bench.md +8 -0
  967. package/src/prompts/goals/goal-budget-limit.md +16 -0
  968. package/src/prompts/goals/goal-continuation.md +28 -0
  969. package/src/prompts/goals/goal-mode-active.md +23 -0
  970. package/src/prompts/goals/goal-mode-context.md +4 -0
  971. package/src/prompts/goals/goal-todo-context.md +12 -0
  972. package/src/prompts/goals/guided-goal-interview.md +43 -0
  973. package/src/prompts/memories/consolidation.md +30 -0
  974. package/src/prompts/memories/consolidation_system.md +4 -0
  975. package/src/prompts/memories/read-path.md +17 -0
  976. package/src/prompts/memories/stage_one_input.md +6 -0
  977. package/src/prompts/memories/stage_one_system.md +21 -0
  978. package/src/prompts/review-custom-request.md +21 -0
  979. package/src/prompts/review-headless-request.md +16 -0
  980. package/src/prompts/review-request.md +68 -0
  981. package/src/prompts/security/scan-coordinator.md +7 -0
  982. package/src/prompts/security/scan-request.md +21 -0
  983. package/src/prompts/security/validate-request.md +8 -0
  984. package/src/prompts/session/launch-completion.md +1 -0
  985. package/src/prompts/skills/autoload.md +8 -0
  986. package/src/prompts/skills/user-invocation.md +11 -0
  987. package/src/prompts/steering/parent-irc.md +5 -0
  988. package/src/prompts/steering/user-interjection.md +6 -0
  989. package/src/prompts/system/active-repo-context.md +4 -0
  990. package/src/prompts/system/agent-creation-architect.md +50 -0
  991. package/src/prompts/system/agent-creation-user.md +6 -0
  992. package/src/prompts/system/auto-continue.md +1 -0
  993. package/src/prompts/system/auto-thinking-difficulty-local.md +14 -0
  994. package/src/prompts/system/auto-thinking-difficulty.md +14 -0
  995. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  996. package/src/prompts/system/autolearn-guidance.md +7 -0
  997. package/src/prompts/system/autolearn-nudge-autocontinue.md +5 -0
  998. package/src/prompts/system/background-tan-dispatch.md +8 -0
  999. package/src/prompts/system/btw-user.md +8 -0
  1000. package/src/prompts/system/commit-message-system.md +14 -0
  1001. package/src/prompts/system/computer-safety.md +14 -0
  1002. package/src/prompts/system/custom-system-prompt.md +64 -0
  1003. package/src/prompts/system/eager-task.md +7 -0
  1004. package/src/prompts/system/eager-todo.md +18 -0
  1005. package/src/prompts/system/empty-stop-retry.md +4 -0
  1006. package/src/prompts/system/gemini-tool-call-reminder.md +9 -0
  1007. package/src/prompts/system/interrupted-thinking.md +7 -0
  1008. package/src/prompts/system/irc-autoreply.md +6 -0
  1009. package/src/prompts/system/irc-incoming.md +9 -0
  1010. package/src/prompts/system/manual-continue.md +7 -0
  1011. package/src/prompts/system/mcp-xdev-guidance.md +11 -0
  1012. package/src/prompts/system/memory-consolidation-system.md +8 -0
  1013. package/src/prompts/system/memory-extraction-system.md +26 -0
  1014. package/src/prompts/system/mid-run-todo-nudge.md +3 -0
  1015. package/src/prompts/system/omfg-user.md +50 -0
  1016. package/src/prompts/system/orchestrate-notice.md +40 -0
  1017. package/src/prompts/system/personalities/default.md +18 -0
  1018. package/src/prompts/system/personalities/friendly.md +17 -0
  1019. package/src/prompts/system/personalities/pragmatic.md +15 -0
  1020. package/src/prompts/system/plan-mode-active.md +125 -0
  1021. package/src/prompts/system/plan-mode-approved.md +22 -0
  1022. package/src/prompts/system/plan-mode-compact-instructions.md +17 -0
  1023. package/src/prompts/system/plan-mode-reference.md +10 -0
  1024. package/src/prompts/system/plan-mode-subagent.md +33 -0
  1025. package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
  1026. package/src/prompts/system/plan-yolo-handoff.md +5 -0
  1027. package/src/prompts/system/prewalk-checklist.md +7 -0
  1028. package/src/prompts/system/prewalk-continue.md +1 -0
  1029. package/src/prompts/system/prewalk-plan.md +13 -0
  1030. package/src/prompts/system/project-prompt.md +61 -0
  1031. package/src/prompts/system/recap-user.md +9 -0
  1032. package/src/prompts/system/resolve-device-reminder.md +3 -0
  1033. package/src/prompts/system/rewind-report.md +6 -0
  1034. package/src/prompts/system/side-channel-no-tools.md +3 -0
  1035. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  1036. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  1037. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  1038. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  1039. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  1040. package/src/prompts/system/speech-rewrite.md +15 -0
  1041. package/src/prompts/system/subagent-async-pending.md +6 -0
  1042. package/src/prompts/system/subagent-system-prompt.md +73 -0
  1043. package/src/prompts/system/subagent-user-prompt.md +3 -0
  1044. package/src/prompts/system/subagent-yield-reminder.md +23 -0
  1045. package/src/prompts/system/system-prompt.md +263 -0
  1046. package/src/prompts/system/tan-context-switch.md +17 -0
  1047. package/src/prompts/system/task-label.md +23 -0
  1048. package/src/prompts/system/thinking-loop-redirect.md +10 -0
  1049. package/src/prompts/system/title-marker-instruction.md +1 -0
  1050. package/src/prompts/system/title-system.md +16 -0
  1051. package/src/prompts/system/tool-call-loop-redirect.md +8 -0
  1052. package/src/prompts/system/ttsr-interrupt.md +7 -0
  1053. package/src/prompts/system/ttsr-tool-reminder.md +5 -0
  1054. package/src/prompts/system/ultrathink-notice.md +3 -0
  1055. package/src/prompts/system/unexpected-stop-classifier.md +17 -0
  1056. package/src/prompts/system/unexpected-stop-retry.md +4 -0
  1057. package/src/prompts/system/vibe-mode-active.md +26 -0
  1058. package/src/prompts/system/web-search.md +25 -0
  1059. package/src/prompts/system/workflow-notice.md +112 -0
  1060. package/src/prompts/system/xdev-mount-notice.md +20 -0
  1061. package/src/prompts/tools/apply-patch.md +65 -0
  1062. package/src/prompts/tools/ask.md +22 -0
  1063. package/src/prompts/tools/ast-edit.md +11 -0
  1064. package/src/prompts/tools/ast-grep.md +19 -0
  1065. package/src/prompts/tools/async-result.md +8 -0
  1066. package/src/prompts/tools/bash.md +23 -0
  1067. package/src/prompts/tools/browser.md +29 -0
  1068. package/src/prompts/tools/checkpoint.md +15 -0
  1069. package/src/prompts/tools/computer.md +26 -0
  1070. package/src/prompts/tools/debug.md +3 -0
  1071. package/src/prompts/tools/eval.md +45 -0
  1072. package/src/prompts/tools/github.md +22 -0
  1073. package/src/prompts/tools/glob.md +16 -0
  1074. package/src/prompts/tools/goal.md +11 -0
  1075. package/src/prompts/tools/grep.md +13 -0
  1076. package/src/prompts/tools/hub.md +34 -0
  1077. package/src/prompts/tools/image-attachment-describe-system.md +8 -0
  1078. package/src/prompts/tools/image-attachment-describe.md +10 -0
  1079. package/src/prompts/tools/image-gen.md +7 -0
  1080. package/src/prompts/tools/inspect-image-system.md +20 -0
  1081. package/src/prompts/tools/inspect-image.md +22 -0
  1082. package/src/prompts/tools/learn.md +7 -0
  1083. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  1084. package/src/prompts/tools/lsp.md +19 -0
  1085. package/src/prompts/tools/manage-skill.md +9 -0
  1086. package/src/prompts/tools/memory-edit.md +12 -0
  1087. package/src/prompts/tools/patch.md +57 -0
  1088. package/src/prompts/tools/read.md +27 -0
  1089. package/src/prompts/tools/recall.md +7 -0
  1090. package/src/prompts/tools/reflect.md +5 -0
  1091. package/src/prompts/tools/replace.md +30 -0
  1092. package/src/prompts/tools/retain.md +6 -0
  1093. package/src/prompts/tools/rewind.md +14 -0
  1094. package/src/prompts/tools/security-publish.md +1 -0
  1095. package/src/prompts/tools/security-scan.md +1 -0
  1096. package/src/prompts/tools/task-async-contract.md +1 -0
  1097. package/src/prompts/tools/task-summary.md +20 -0
  1098. package/src/prompts/tools/task.md +83 -0
  1099. package/src/prompts/tools/todo.md +42 -0
  1100. package/src/prompts/tools/vibe-kill.md +3 -0
  1101. package/src/prompts/tools/vibe-list.md +3 -0
  1102. package/src/prompts/tools/vibe-send.md +9 -0
  1103. package/src/prompts/tools/vibe-spawn.md +10 -0
  1104. package/src/prompts/tools/vibe-turn-result.md +19 -0
  1105. package/src/prompts/tools/vibe-wait.md +8 -0
  1106. package/src/prompts/tools/web-search.md +8 -0
  1107. package/src/prompts/tools/write.md +14 -0
  1108. package/src/registry/agent-lifecycle.ts +505 -0
  1109. package/src/registry/agent-registry.ts +287 -0
  1110. package/src/registry/persisted-agents.ts +423 -0
  1111. package/src/sdk.ts +3820 -0
  1112. package/src/secrets/index.ts +375 -0
  1113. package/src/secrets/obfuscator.ts +2629 -0
  1114. package/src/secrets/regex.ts +21 -0
  1115. package/src/security/auth.ts +98 -0
  1116. package/src/security/cloud.ts +686 -0
  1117. package/src/security/comparison.ts +255 -0
  1118. package/src/security/contracts/ids.ts +111 -0
  1119. package/src/security/contracts/index.ts +4 -0
  1120. package/src/security/contracts/schemas.ts +219 -0
  1121. package/src/security/contracts/types.ts +254 -0
  1122. package/src/security/contracts/validation.ts +69 -0
  1123. package/src/security/coordinator.ts +708 -0
  1124. package/src/security/importers/codex-security.ts +387 -0
  1125. package/src/security/importers/index.ts +2 -0
  1126. package/src/security/importers/sarif.ts +357 -0
  1127. package/src/security/index.ts +13 -0
  1128. package/src/security/preflight.ts +405 -0
  1129. package/src/security/provenance.ts +106 -0
  1130. package/src/security/publication.ts +326 -0
  1131. package/src/security/remediation.ts +93 -0
  1132. package/src/security/resource-output.ts +50 -0
  1133. package/src/security/sarif.ts +78 -0
  1134. package/src/security/store.ts +430 -0
  1135. package/src/session/acp-permission-gate.ts +165 -0
  1136. package/src/session/agent-session-events.ts +67 -0
  1137. package/src/session/agent-session-types.ts +407 -0
  1138. package/src/session/agent-session.ts +9000 -0
  1139. package/src/session/agent-storage.ts +807 -0
  1140. package/src/session/artifacts.ts +154 -0
  1141. package/src/session/async-job-delivery.ts +82 -0
  1142. package/src/session/auth-broker-config.ts +92 -0
  1143. package/src/session/auth-storage.ts +25 -0
  1144. package/src/session/bash-runner.ts +326 -0
  1145. package/src/session/blob-store.ts +295 -0
  1146. package/src/session/checkpoint-entries.ts +81 -0
  1147. package/src/session/claude-session-store.ts +426 -0
  1148. package/src/session/client-bridge.ts +85 -0
  1149. package/src/session/codex-auto-reset.ts +673 -0
  1150. package/src/session/codex-session-store.ts +673 -0
  1151. package/src/session/compact-modes.ts +105 -0
  1152. package/src/session/credential-pin.ts +93 -0
  1153. package/src/session/eval-runner.ts +219 -0
  1154. package/src/session/exit-diagnostics.ts +310 -0
  1155. package/src/session/foreign-session-import.ts +52 -0
  1156. package/src/session/foreign-session-jsonl.ts +29 -0
  1157. package/src/session/foreign-session-store.ts +26 -0
  1158. package/src/session/history-storage.ts +329 -0
  1159. package/src/session/indexed-session-storage.ts +553 -0
  1160. package/src/session/irc-bridge.ts +203 -0
  1161. package/src/session/launch-completion.ts +37 -0
  1162. package/src/session/messages.ts +1304 -0
  1163. package/src/session/model-controls.ts +757 -0
  1164. package/src/session/prewalk.ts +279 -0
  1165. package/src/session/provider-image-budget.ts +86 -0
  1166. package/src/session/queued-messages.ts +99 -0
  1167. package/src/session/redis-session-storage.ts +257 -0
  1168. package/src/session/retry-fallback-chains.ts +455 -0
  1169. package/src/session/role-models.ts +85 -0
  1170. package/src/session/session-advisors.ts +1896 -0
  1171. package/src/session/session-context.ts +584 -0
  1172. package/src/session/session-dump-format.ts +216 -0
  1173. package/src/session/session-entries.ts +306 -0
  1174. package/src/session/session-handoff.ts +325 -0
  1175. package/src/session/session-history-format.ts +459 -0
  1176. package/src/session/session-listing.ts +715 -0
  1177. package/src/session/session-loader.ts +362 -0
  1178. package/src/session/session-maintenance.ts +3115 -0
  1179. package/src/session/session-manager.ts +2747 -0
  1180. package/src/session/session-memory.ts +222 -0
  1181. package/src/session/session-metadata.ts +53 -0
  1182. package/src/session/session-migrations.ts +78 -0
  1183. package/src/session/session-paths.ts +280 -0
  1184. package/src/session/session-persistence.ts +293 -0
  1185. package/src/session/session-provider-boundary.ts +306 -0
  1186. package/src/session/session-stats.ts +349 -0
  1187. package/src/session/session-storage.ts +774 -0
  1188. package/src/session/session-title-slot.ts +141 -0
  1189. package/src/session/session-tools.ts +1385 -0
  1190. package/src/session/session-workspace.ts +53 -0
  1191. package/src/session/settings-stream-fn.ts +79 -0
  1192. package/src/session/shake-types.ts +43 -0
  1193. package/src/session/snapcompact-inline.ts +545 -0
  1194. package/src/session/snapcompact-savings-journal.ts +113 -0
  1195. package/src/session/sql-session-storage.ts +374 -0
  1196. package/src/session/stream-guards.ts +417 -0
  1197. package/src/session/streaming-output.ts +1459 -0
  1198. package/src/session/todo-tracker.ts +380 -0
  1199. package/src/session/tool-choice-queue.ts +305 -0
  1200. package/src/session/ttsr-coordinator.ts +496 -0
  1201. package/src/session/turn-persistence.ts +142 -0
  1202. package/src/session/turn-recovery.ts +2005 -0
  1203. package/src/session/unexpected-stop-classifier.ts +141 -0
  1204. package/src/session/yield-queue.ts +288 -0
  1205. package/src/slash-commands/acp-builtins.ts +70 -0
  1206. package/src/slash-commands/available-commands.ts +105 -0
  1207. package/src/slash-commands/builtin-registry.ts +3149 -0
  1208. package/src/slash-commands/helpers/active-oauth-account.ts +80 -0
  1209. package/src/slash-commands/helpers/collab-qrcode.ts +28 -0
  1210. package/src/slash-commands/helpers/context-report.ts +66 -0
  1211. package/src/slash-commands/helpers/format.ts +46 -0
  1212. package/src/slash-commands/helpers/logout.ts +108 -0
  1213. package/src/slash-commands/helpers/marketplace-manager.ts +25 -0
  1214. package/src/slash-commands/helpers/mcp.ts +533 -0
  1215. package/src/slash-commands/helpers/parse.ts +85 -0
  1216. package/src/slash-commands/helpers/reset-usage.ts +68 -0
  1217. package/src/slash-commands/helpers/security.ts +451 -0
  1218. package/src/slash-commands/helpers/session-pin.ts +44 -0
  1219. package/src/slash-commands/helpers/ssh.ts +196 -0
  1220. package/src/slash-commands/helpers/stats-dashboard.ts +86 -0
  1221. package/src/slash-commands/helpers/todo.ts +285 -0
  1222. package/src/slash-commands/helpers/usage-report.ts +198 -0
  1223. package/src/slash-commands/marketplace-install-parser.ts +99 -0
  1224. package/src/slash-commands/types.ts +139 -0
  1225. package/src/ssh/config-writer.ts +183 -0
  1226. package/src/ssh/connection-manager.ts +667 -0
  1227. package/src/ssh/file-transfer.ts +214 -0
  1228. package/src/ssh/sshfs-mount.ts +163 -0
  1229. package/src/ssh/utils.ts +51 -0
  1230. package/src/startup-splash.ts +19 -0
  1231. package/src/stt/asr-client.ts +401 -0
  1232. package/src/stt/asr-protocol.ts +65 -0
  1233. package/src/stt/asr-worker.ts +603 -0
  1234. package/src/stt/downloader.ts +142 -0
  1235. package/src/stt/endpointer.ts +259 -0
  1236. package/src/stt/index.ts +6 -0
  1237. package/src/stt/models.ts +150 -0
  1238. package/src/stt/sherpa-runtime.ts +71 -0
  1239. package/src/stt/stt-controller.ts +320 -0
  1240. package/src/stt/submit-trigger.ts +74 -0
  1241. package/src/subprocess/worker-client.ts +463 -0
  1242. package/src/subprocess/worker-runtime.ts +494 -0
  1243. package/src/system-prompt.ts +921 -0
  1244. package/src/task/agents.ts +170 -0
  1245. package/src/task/commands.ts +132 -0
  1246. package/src/task/discovery.ts +145 -0
  1247. package/src/task/executor.ts +3431 -0
  1248. package/src/task/index.ts +1515 -0
  1249. package/src/task/isolation-ownership.ts +106 -0
  1250. package/src/task/isolation-runner.ts +444 -0
  1251. package/src/task/label.ts +40 -0
  1252. package/src/task/name-generator.ts +1577 -0
  1253. package/src/task/omp-command.ts +26 -0
  1254. package/src/task/output-manager.ts +115 -0
  1255. package/src/task/parallel.ts +221 -0
  1256. package/src/task/persisted-revive.ts +173 -0
  1257. package/src/task/prewalk.ts +6 -0
  1258. package/src/task/prompt-policy.ts +8 -0
  1259. package/src/task/provider-concurrency.ts +100 -0
  1260. package/src/task/read-only-policy.ts +27 -0
  1261. package/src/task/render.ts +1830 -0
  1262. package/src/task/renderer.ts +14 -0
  1263. package/src/task/repair-args.ts +118 -0
  1264. package/src/task/spawn-policy.ts +72 -0
  1265. package/src/task/structured-subagent.ts +676 -0
  1266. package/src/task/subprocess-tool-registry.ts +88 -0
  1267. package/src/task/types.ts +555 -0
  1268. package/src/task/worktree.ts +967 -0
  1269. package/src/task/yield-assembly.ts +198 -0
  1270. package/src/telemetry-export.ts +504 -0
  1271. package/src/thinking.ts +377 -0
  1272. package/src/tiny/device.ts +111 -0
  1273. package/src/tiny/dtype.ts +101 -0
  1274. package/src/tiny/message-preproc.ts +155 -0
  1275. package/src/tiny/models.ts +268 -0
  1276. package/src/tiny/text.ts +290 -0
  1277. package/src/tiny/title-client.ts +460 -0
  1278. package/src/tiny/title-protocol.ts +56 -0
  1279. package/src/tiny/worker.ts +354 -0
  1280. package/src/tools/acp-bridge.ts +125 -0
  1281. package/src/tools/approval.ts +245 -0
  1282. package/src/tools/ask.ts +1459 -0
  1283. package/src/tools/ast-edit.ts +718 -0
  1284. package/src/tools/ast-grep.ts +526 -0
  1285. package/src/tools/auto-generated-guard.ts +335 -0
  1286. package/src/tools/bash-interactive.ts +435 -0
  1287. package/src/tools/bash-interceptor.ts +148 -0
  1288. package/src/tools/bash-pty-selection.ts +14 -0
  1289. package/src/tools/bash-skill-urls.ts +350 -0
  1290. package/src/tools/bash.ts +1826 -0
  1291. package/src/tools/browser/aria/aria-snapshot.bundle.txt +7 -0
  1292. package/src/tools/browser/aria/aria-snapshot.ts +131 -0
  1293. package/src/tools/browser/attach.ts +219 -0
  1294. package/src/tools/browser/cmux/cmux-tab.ts +1531 -0
  1295. package/src/tools/browser/cmux/rpc.ts +200 -0
  1296. package/src/tools/browser/cmux/socket-client.ts +445 -0
  1297. package/src/tools/browser/launch.ts +939 -0
  1298. package/src/tools/browser/readable.ts +112 -0
  1299. package/src/tools/browser/registry.ts +447 -0
  1300. package/src/tools/browser/relay/bridge.ts +945 -0
  1301. package/src/tools/browser/relay/daemon.ts +117 -0
  1302. package/src/tools/browser/relay/extension-assets/background.js.txt +242 -0
  1303. package/src/tools/browser/relay/extension-assets/manifest.json.txt +14 -0
  1304. package/src/tools/browser/relay/extension-assets/options.html.txt +53 -0
  1305. package/src/tools/browser/relay/extension-assets/options.js.txt +23 -0
  1306. package/src/tools/browser/relay/kind.ts +41 -0
  1307. package/src/tools/browser/relay/protocol.ts +54 -0
  1308. package/src/tools/browser/relay/server.ts +141 -0
  1309. package/src/tools/browser/render.ts +229 -0
  1310. package/src/tools/browser/run-output.ts +76 -0
  1311. package/src/tools/browser/shared-daemon.ts +139 -0
  1312. package/src/tools/browser/tab-protocol.ts +123 -0
  1313. package/src/tools/browser/tab-supervisor.ts +1077 -0
  1314. package/src/tools/browser/tab-worker-entry.ts +29 -0
  1315. package/src/tools/browser/tab-worker.ts +1982 -0
  1316. package/src/tools/browser.ts +487 -0
  1317. package/src/tools/builtin-names.ts +67 -0
  1318. package/src/tools/checkpoint.ts +137 -0
  1319. package/src/tools/computer/exposure.ts +14 -0
  1320. package/src/tools/computer/protocol.ts +69 -0
  1321. package/src/tools/computer/supervisor.ts +409 -0
  1322. package/src/tools/computer/worker-entry.ts +39 -0
  1323. package/src/tools/computer/worker.ts +745 -0
  1324. package/src/tools/computer-renderer.ts +147 -0
  1325. package/src/tools/computer.ts +222 -0
  1326. package/src/tools/conflict-detect.ts +815 -0
  1327. package/src/tools/context.ts +49 -0
  1328. package/src/tools/debug.ts +1121 -0
  1329. package/src/tools/default-renderer.ts +154 -0
  1330. package/src/tools/essential-tools.ts +46 -0
  1331. package/src/tools/eval-backends.ts +34 -0
  1332. package/src/tools/eval-format/index.ts +24 -0
  1333. package/src/tools/eval-format/javascript.ts +952 -0
  1334. package/src/tools/eval-format/julia.ts +446 -0
  1335. package/src/tools/eval-format/python.ts +544 -0
  1336. package/src/tools/eval-format/ruby.ts +380 -0
  1337. package/src/tools/eval-render.ts +784 -0
  1338. package/src/tools/eval.ts +774 -0
  1339. package/src/tools/fetch.ts +1889 -0
  1340. package/src/tools/file-recorder.ts +35 -0
  1341. package/src/tools/fs-cache-invalidation.ts +28 -0
  1342. package/src/tools/gh-cache-invalidation.ts +175 -0
  1343. package/src/tools/gh-format.ts +12 -0
  1344. package/src/tools/gh-renderer.ts +484 -0
  1345. package/src/tools/gh.ts +3958 -0
  1346. package/src/tools/github-cache.ts +663 -0
  1347. package/src/tools/glob.ts +691 -0
  1348. package/src/tools/grep.ts +1920 -0
  1349. package/src/tools/grouped-file-output.ts +210 -0
  1350. package/src/tools/hub/index.ts +579 -0
  1351. package/src/tools/hub/jobs.ts +714 -0
  1352. package/src/tools/hub/launch.ts +690 -0
  1353. package/src/tools/hub/messaging.ts +735 -0
  1354. package/src/tools/hub/types.ts +117 -0
  1355. package/src/tools/image-gen.ts +1689 -0
  1356. package/src/tools/image-providers.ts +50 -0
  1357. package/src/tools/index.ts +736 -0
  1358. package/src/tools/inspect-image-renderer.ts +133 -0
  1359. package/src/tools/inspect-image.ts +316 -0
  1360. package/src/tools/json-tree.ts +260 -0
  1361. package/src/tools/jtd-to-json-schema.ts +219 -0
  1362. package/src/tools/jtd-to-typescript.ts +136 -0
  1363. package/src/tools/jtd-utils.ts +102 -0
  1364. package/src/tools/learn.ts +141 -0
  1365. package/src/tools/list-limit.ts +40 -0
  1366. package/src/tools/manage-skill.ts +102 -0
  1367. package/src/tools/match-line-format.ts +20 -0
  1368. package/src/tools/memory-edit.ts +61 -0
  1369. package/src/tools/memory-recall.ts +102 -0
  1370. package/src/tools/memory-reflect.ts +88 -0
  1371. package/src/tools/memory-render.ts +211 -0
  1372. package/src/tools/memory-retain.ts +89 -0
  1373. package/src/tools/output-meta.ts +860 -0
  1374. package/src/tools/output-schema-validator.ts +307 -0
  1375. package/src/tools/path-utils.ts +1489 -0
  1376. package/src/tools/plan-mode-guard.ts +155 -0
  1377. package/src/tools/puppeteer/00_stealth_tampering.txt +44 -0
  1378. package/src/tools/puppeteer/01_stealth_activity.txt +80 -0
  1379. package/src/tools/puppeteer/02_stealth_hairline.txt +57 -0
  1380. package/src/tools/puppeteer/03_stealth_botd.txt +380 -0
  1381. package/src/tools/puppeteer/04_stealth_iframe.txt +174 -0
  1382. package/src/tools/puppeteer/05_stealth_webgl.txt +233 -0
  1383. package/src/tools/puppeteer/06_stealth_screen.txt +260 -0
  1384. package/src/tools/puppeteer/07_stealth_fonts.txt +99 -0
  1385. package/src/tools/puppeteer/08_stealth_audio.txt +63 -0
  1386. package/src/tools/puppeteer/09_stealth_locale.txt +51 -0
  1387. package/src/tools/puppeteer/10_stealth_plugins.txt +212 -0
  1388. package/src/tools/puppeteer/11_stealth_hardware.txt +59 -0
  1389. package/src/tools/puppeteer/12_stealth_codecs.txt +42 -0
  1390. package/src/tools/puppeteer/13_stealth_worker.txt +235 -0
  1391. package/src/tools/read.ts +3762 -0
  1392. package/src/tools/render-utils.ts +926 -0
  1393. package/src/tools/renderers.ts +133 -0
  1394. package/src/tools/report-tool-issue.ts +568 -0
  1395. package/src/tools/resolve.ts +423 -0
  1396. package/src/tools/review.ts +103 -0
  1397. package/src/tools/run-scope.ts +417 -0
  1398. package/src/tools/security-scan.ts +287 -0
  1399. package/src/tools/shell-tokenize.ts +213 -0
  1400. package/src/tools/sqlite-reader.ts +884 -0
  1401. package/src/tools/terminal-output.ts +141 -0
  1402. package/src/tools/todo.ts +1226 -0
  1403. package/src/tools/tool-errors.ts +62 -0
  1404. package/src/tools/tool-result.ts +102 -0
  1405. package/src/tools/tool-timeouts.ts +38 -0
  1406. package/src/tools/tts.ts +266 -0
  1407. package/src/tools/vibe.ts +608 -0
  1408. package/src/tools/write.ts +1646 -0
  1409. package/src/tools/xdev.ts +560 -0
  1410. package/src/tools/yield.ts +486 -0
  1411. package/src/tts/downloader.ts +64 -0
  1412. package/src/tts/index.ts +10 -0
  1413. package/src/tts/models.ts +137 -0
  1414. package/src/tts/runtime.ts +21 -0
  1415. package/src/tts/speakable.ts +392 -0
  1416. package/src/tts/speech-enhancer.ts +206 -0
  1417. package/src/tts/streaming-player.ts +120 -0
  1418. package/src/tts/tts-client.ts +475 -0
  1419. package/src/tts/tts-protocol.ts +69 -0
  1420. package/src/tts/tts-worker.ts +434 -0
  1421. package/src/tts/vocalizer.ts +419 -0
  1422. package/src/tts/wav.ts +58 -0
  1423. package/src/tui/code-cell.ts +268 -0
  1424. package/src/tui/file-list.ts +55 -0
  1425. package/src/tui/hyperlink.ts +178 -0
  1426. package/src/tui/index.ts +13 -0
  1427. package/src/tui/output-block.ts +268 -0
  1428. package/src/tui/status-line.ts +54 -0
  1429. package/src/tui/tree-list.ts +172 -0
  1430. package/src/tui/types.ts +15 -0
  1431. package/src/tui/utils.ts +103 -0
  1432. package/src/tui/width-aware-text.ts +58 -0
  1433. package/src/utils/active-repo-context.ts +143 -0
  1434. package/src/utils/block-context.ts +312 -0
  1435. package/src/utils/changelog.ts +373 -0
  1436. package/src/utils/clipboard.ts +361 -0
  1437. package/src/utils/command-args.ts +74 -0
  1438. package/src/utils/commit-message-generator.ts +148 -0
  1439. package/src/utils/cpuprofile.ts +235 -0
  1440. package/src/utils/edit-mode.ts +61 -0
  1441. package/src/utils/enhanced-paste.ts +230 -0
  1442. package/src/utils/event-bus.ts +33 -0
  1443. package/src/utils/external-editor.ts +80 -0
  1444. package/src/utils/fetch-timeout.ts +10 -0
  1445. package/src/utils/file-display-mode.ts +44 -0
  1446. package/src/utils/file-mentions.ts +293 -0
  1447. package/src/utils/git.ts +2472 -0
  1448. package/src/utils/image-loading.ts +236 -0
  1449. package/src/utils/image-resize.ts +420 -0
  1450. package/src/utils/image-vision-fallback.ts +196 -0
  1451. package/src/utils/inspect-image-mode.ts +39 -0
  1452. package/src/utils/ipc.ts +38 -0
  1453. package/src/utils/jj.ts +422 -0
  1454. package/src/utils/lang-from-path.ts +251 -0
  1455. package/src/utils/late-cleanup.ts +17 -0
  1456. package/src/utils/local-date.ts +7 -0
  1457. package/src/utils/mac-file-urls.applescript +37 -0
  1458. package/src/utils/markit-cache.ts +166 -0
  1459. package/src/utils/markit.ts +223 -0
  1460. package/src/utils/mupdf-wasm-embed.ts +12 -0
  1461. package/src/utils/open.ts +126 -0
  1462. package/src/utils/profile-tree.ts +111 -0
  1463. package/src/utils/prompt-path.ts +3 -0
  1464. package/src/utils/qrcode.ts +535 -0
  1465. package/src/utils/sample-profile.ts +437 -0
  1466. package/src/utils/session-color.ts +142 -0
  1467. package/src/utils/shell-snapshot-fn-env.sh +63 -0
  1468. package/src/utils/shell-snapshot.ts +326 -0
  1469. package/src/utils/sixel.ts +69 -0
  1470. package/src/utils/thinking-display.ts +163 -0
  1471. package/src/utils/title-generator.ts +597 -0
  1472. package/src/utils/token-rate.ts +72 -0
  1473. package/src/utils/tool-choice.ts +50 -0
  1474. package/src/utils/tools-manager.ts +411 -0
  1475. package/src/utils/turndown.ts +82 -0
  1476. package/src/utils/zip.ts +1106 -0
  1477. package/src/vibe/runtime.ts +1684 -0
  1478. package/src/vibe/state.ts +4 -0
  1479. package/src/web/kagi.ts +305 -0
  1480. package/src/web/parallel.ts +354 -0
  1481. package/src/web/scrapers/artifacthub.ts +207 -0
  1482. package/src/web/scrapers/arxiv.ts +83 -0
  1483. package/src/web/scrapers/aur.ts +162 -0
  1484. package/src/web/scrapers/biorxiv.ts +133 -0
  1485. package/src/web/scrapers/bluesky.ts +262 -0
  1486. package/src/web/scrapers/brew.ts +172 -0
  1487. package/src/web/scrapers/cheatsh.ts +68 -0
  1488. package/src/web/scrapers/chocolatey.ts +196 -0
  1489. package/src/web/scrapers/choosealicense.ts +95 -0
  1490. package/src/web/scrapers/cisa-kev.ts +87 -0
  1491. package/src/web/scrapers/clojars.ts +154 -0
  1492. package/src/web/scrapers/coingecko.ts +177 -0
  1493. package/src/web/scrapers/crates-io.ts +97 -0
  1494. package/src/web/scrapers/crossref.ts +136 -0
  1495. package/src/web/scrapers/devto.ts +147 -0
  1496. package/src/web/scrapers/discogs.ts +306 -0
  1497. package/src/web/scrapers/discourse.ts +197 -0
  1498. package/src/web/scrapers/dockerhub.ts +138 -0
  1499. package/src/web/scrapers/docs-rs.ts +663 -0
  1500. package/src/web/scrapers/fdroid.ts +134 -0
  1501. package/src/web/scrapers/firefox-addons.ts +191 -0
  1502. package/src/web/scrapers/flathub.ts +223 -0
  1503. package/src/web/scrapers/github-gist.ts +58 -0
  1504. package/src/web/scrapers/github.ts +800 -0
  1505. package/src/web/scrapers/gitlab.ts +401 -0
  1506. package/src/web/scrapers/go-pkg.ts +266 -0
  1507. package/src/web/scrapers/hackage.ts +129 -0
  1508. package/src/web/scrapers/hackernews.ts +189 -0
  1509. package/src/web/scrapers/hex.ts +105 -0
  1510. package/src/web/scrapers/huggingface.ts +321 -0
  1511. package/src/web/scrapers/iacr.ts +89 -0
  1512. package/src/web/scrapers/index.ts +252 -0
  1513. package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
  1514. package/src/web/scrapers/lemmy.ts +203 -0
  1515. package/src/web/scrapers/lobsters.ts +175 -0
  1516. package/src/web/scrapers/mastodon.ts +292 -0
  1517. package/src/web/scrapers/maven.ts +138 -0
  1518. package/src/web/scrapers/mdn.ts +173 -0
  1519. package/src/web/scrapers/metacpan.ts +222 -0
  1520. package/src/web/scrapers/musicbrainz.ts +250 -0
  1521. package/src/web/scrapers/npm.ts +98 -0
  1522. package/src/web/scrapers/nuget.ts +183 -0
  1523. package/src/web/scrapers/nvd.ts +222 -0
  1524. package/src/web/scrapers/ollama.ts +239 -0
  1525. package/src/web/scrapers/open-vsx.ts +106 -0
  1526. package/src/web/scrapers/opencorporates.ts +292 -0
  1527. package/src/web/scrapers/openlibrary.ts +336 -0
  1528. package/src/web/scrapers/orcid.ts +286 -0
  1529. package/src/web/scrapers/osv.ts +176 -0
  1530. package/src/web/scrapers/packagist.ts +160 -0
  1531. package/src/web/scrapers/pub-dev.ts +143 -0
  1532. package/src/web/scrapers/pubmed.ts +211 -0
  1533. package/src/web/scrapers/pypi.ts +112 -0
  1534. package/src/web/scrapers/rawg.ts +110 -0
  1535. package/src/web/scrapers/readthedocs.ts +121 -0
  1536. package/src/web/scrapers/reddit.ts +95 -0
  1537. package/src/web/scrapers/repology.ts +251 -0
  1538. package/src/web/scrapers/rfc.ts +201 -0
  1539. package/src/web/scrapers/rubygems.ts +103 -0
  1540. package/src/web/scrapers/searchcode.ts +189 -0
  1541. package/src/web/scrapers/sec-edgar.ts +261 -0
  1542. package/src/web/scrapers/semantic-scholar.ts +171 -0
  1543. package/src/web/scrapers/snapcraft.ts +187 -0
  1544. package/src/web/scrapers/sourcegraph.ts +336 -0
  1545. package/src/web/scrapers/spdx.ts +108 -0
  1546. package/src/web/scrapers/spotify.ts +198 -0
  1547. package/src/web/scrapers/stackoverflow.ts +120 -0
  1548. package/src/web/scrapers/terraform.ts +277 -0
  1549. package/src/web/scrapers/tldr.ts +47 -0
  1550. package/src/web/scrapers/twitter.ts +94 -0
  1551. package/src/web/scrapers/types.ts +354 -0
  1552. package/src/web/scrapers/utils.ts +109 -0
  1553. package/src/web/scrapers/vimeo.ts +133 -0
  1554. package/src/web/scrapers/vscode-marketplace.ts +187 -0
  1555. package/src/web/scrapers/w3c.ts +156 -0
  1556. package/src/web/scrapers/wikidata.ts +344 -0
  1557. package/src/web/scrapers/wikipedia.ts +84 -0
  1558. package/src/web/scrapers/youtube.ts +325 -0
  1559. package/src/web/search/index.ts +393 -0
  1560. package/src/web/search/provider.ts +272 -0
  1561. package/src/web/search/providers/anthropic.ts +406 -0
  1562. package/src/web/search/providers/base.ts +112 -0
  1563. package/src/web/search/providers/brave.ts +181 -0
  1564. package/src/web/search/providers/browser-headers.ts +82 -0
  1565. package/src/web/search/providers/browser-page.ts +125 -0
  1566. package/src/web/search/providers/codex.ts +788 -0
  1567. package/src/web/search/providers/duckduckgo.ts +382 -0
  1568. package/src/web/search/providers/ecosia.ts +183 -0
  1569. package/src/web/search/providers/exa.ts +513 -0
  1570. package/src/web/search/providers/firecrawl.ts +213 -0
  1571. package/src/web/search/providers/gemini.ts +634 -0
  1572. package/src/web/search/providers/google.ts +195 -0
  1573. package/src/web/search/providers/jina.ts +144 -0
  1574. package/src/web/search/providers/kagi.ts +98 -0
  1575. package/src/web/search/providers/kimi.ts +221 -0
  1576. package/src/web/search/providers/mojeek.ts +220 -0
  1577. package/src/web/search/providers/parallel.ts +186 -0
  1578. package/src/web/search/providers/perplexity-auth.ts +142 -0
  1579. package/src/web/search/providers/perplexity.ts +997 -0
  1580. package/src/web/search/providers/public.ts +199 -0
  1581. package/src/web/search/providers/searxng.ts +467 -0
  1582. package/src/web/search/providers/startpage.ts +225 -0
  1583. package/src/web/search/providers/synthetic.ts +126 -0
  1584. package/src/web/search/providers/tavily.ts +244 -0
  1585. package/src/web/search/providers/tinyfish.ts +166 -0
  1586. package/src/web/search/providers/utils.ts +130 -0
  1587. package/src/web/search/providers/xai.ts +372 -0
  1588. package/src/web/search/providers/zai.ts +452 -0
  1589. package/src/web/search/query.ts +850 -0
  1590. package/src/web/search/render.ts +262 -0
  1591. package/src/web/search/types.ts +518 -0
  1592. package/src/web/search/utils.ts +17 -0
  1593. package/src/workspace-tree.ts +326 -0
@@ -0,0 +1,1603 @@
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 { type as ArkType } from "@oh-my-pi/omptype";
12
+ import type * as TypeBox from "@oh-my-pi/omptype/typebox";
13
+ import type * as zod from "@oh-my-pi/omptype/zod";
14
+ import type {
15
+ AgentMessage,
16
+ AgentToolResult,
17
+ AgentToolUpdateCallback,
18
+ ThinkingLevel,
19
+ ToolApproval,
20
+ ToolLoadMode,
21
+ } from "@oh-my-pi/pi-agent-core";
22
+ import type { CompactionResult } from "@oh-my-pi/pi-agent-core/compaction";
23
+ import type {
24
+ Api,
25
+ AssistantMessageEvent,
26
+ AssistantMessageEventStream,
27
+ Context,
28
+ ImageContent,
29
+ Model,
30
+ ModelSpec,
31
+ ProviderResponseMetadata,
32
+ ServiceTier,
33
+ ServiceTierByFamily,
34
+ ServiceTierFamily,
35
+ SimpleStreamOptions,
36
+ Static,
37
+ TextContent,
38
+ TSchema,
39
+ } from "@oh-my-pi/pi-ai";
40
+ import type { OAuthCredentials, OAuthLoginCallbacks } from "@oh-my-pi/pi-ai/oauth/types";
41
+ import type { AutocompleteItem, AutocompleteProvider, Component, EditorTheme, KeyId, TUI } from "@oh-my-pi/pi-tui";
42
+ import type { logger as PiLogger } from "@oh-my-pi/pi-utils";
43
+ import type { KeybindingsManager } from "../../config/keybindings";
44
+ import type { ModelRegistry } from "../../config/model-registry";
45
+ import type { EditToolDetails } from "../../edit";
46
+ import type { PythonResult } from "../../eval/py/executor";
47
+ import type { BashResult } from "../../exec/bash-executor";
48
+ import type { ExecOptions, ExecResult } from "../../exec/exec";
49
+ import type * as PiCodingAgent from "../../index";
50
+ import type { LocalProtocolOptions } from "../../internal-urls/local-protocol";
51
+ import type { MemoryRuntimeContext } from "../../memory-backend";
52
+ import type { CustomEditor } from "../../modes/components/custom-editor";
53
+ import type { Theme } from "../../modes/theme/theme";
54
+ import type { AsyncJobSnapshot } from "../../session/agent-session";
55
+ import type { CompactMode } from "../../session/compact-modes";
56
+ import type { CustomMessage, CustomMessagePayload } from "../../session/messages";
57
+ import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
58
+ import type {
59
+ BashToolDetails,
60
+ BashToolInput,
61
+ GlobToolDetails,
62
+ GlobToolInput,
63
+ GrepToolDetails,
64
+ GrepToolInput,
65
+ ReadToolDetails,
66
+ ReadToolInput,
67
+ WriteToolInput,
68
+ } from "../../tools";
69
+ import type { ApprovalMode } from "../../tools/approval";
70
+ import type { EventBus } from "../../utils/event-bus";
71
+ import type {
72
+ AgentEndEvent,
73
+ AgentStartEvent,
74
+ AutoCompactionEndEvent,
75
+ AutoCompactionStartEvent,
76
+ AutoRetryEndEvent,
77
+ AutoRetryStartEvent,
78
+ ContextEvent,
79
+ GoalUpdatedEvent,
80
+ SessionBeforeBranchEvent,
81
+ SessionBeforeBranchResult,
82
+ SessionBeforeCompactEvent,
83
+ SessionBeforeCompactResult,
84
+ SessionBeforeSwitchEvent,
85
+ SessionBeforeSwitchResult,
86
+ SessionBeforeTreeEvent,
87
+ SessionBeforeTreeResult,
88
+ SessionBranchEvent,
89
+ SessionCompactEvent,
90
+ SessionCompactingEvent,
91
+ SessionCompactingResult,
92
+ SessionEvent,
93
+ SessionShutdownEvent,
94
+ SessionStartEvent,
95
+ SessionStopEvent,
96
+ SessionStopEventResult,
97
+ SessionSwitchEvent,
98
+ SessionTreeEvent,
99
+ TodoReminderEvent,
100
+ ToolCallEventResult,
101
+ ToolResultEventResult,
102
+ TtsrTriggeredEvent,
103
+ TurnEndEvent,
104
+ TurnStartEvent,
105
+ } from "../shared-events";
106
+ import type { SlashCommandInfo } from "../slash-commands";
107
+
108
+ export type { AppKeybinding, KeybindingsManager } from "../../config/keybindings";
109
+ export type { ExecOptions, ExecResult } from "../../exec/exec";
110
+ export type { AgentToolResult, AgentToolUpdateCallback };
111
+
112
+ // ============================================================================
113
+ // UI Context
114
+ // ============================================================================
115
+
116
+ export interface ExtensionUISelectOption {
117
+ label: string;
118
+ description?: string;
119
+ }
120
+
121
+ export type ExtensionUISelectItem = string | ExtensionUISelectOption;
122
+
123
+ export interface ExtensionAskDialogOption {
124
+ label: string;
125
+ description?: string;
126
+ preview?: string;
127
+ }
128
+
129
+ export interface ExtensionAskDialogQuestion {
130
+ id: string;
131
+ question: string;
132
+ header?: string;
133
+ options: ExtensionAskDialogOption[];
134
+ multi?: boolean;
135
+ recommended?: number;
136
+ }
137
+
138
+ export interface ExtensionAskDialogResultItem {
139
+ id: string;
140
+ question: string;
141
+ options: string[];
142
+ multi: boolean;
143
+ selectedOptions: string[];
144
+ customInput?: string;
145
+ note?: string;
146
+ timedOut?: boolean;
147
+ }
148
+
149
+ export interface ExtensionAskDialogSubmitResult {
150
+ kind: "submit";
151
+ results: ExtensionAskDialogResultItem[];
152
+ }
153
+
154
+ /** Chat-redirect result: the user chose "Chat about this" instead of
155
+ * answering. Distinct from `undefined` (cancel) so AskTool can hand off to
156
+ * the chat loop rather than aborting. */
157
+ export interface ExtensionAskDialogChatResult {
158
+ kind: "chat";
159
+ }
160
+
161
+ export type ExtensionAskDialogResult = ExtensionAskDialogSubmitResult | ExtensionAskDialogChatResult;
162
+
163
+ export function getExtensionUISelectOptionLabel(option: ExtensionUISelectItem): string {
164
+ return typeof option === "string" ? option : option.label;
165
+ }
166
+
167
+ /**
168
+ * UI dialog options for extensions.
169
+ */
170
+ export interface ExtensionUIDialogOptions {
171
+ signal?: AbortSignal;
172
+ timeout?: number;
173
+ /** Invoked when the UI times out while waiting for a selection/input */
174
+ onTimeout?: () => void;
175
+ /** Invoked when the UI-managed timeout countdown starts */
176
+ onTimeoutStart?: () => void;
177
+ /** Invoked when user input resets a UI-managed timeout countdown */
178
+ onTimeoutReset?: () => void;
179
+ /** Initial cursor position for select dialogs (0-indexed) */
180
+ initialIndex?: number;
181
+ /** Render an outlined list for select dialogs */
182
+ outline?: boolean;
183
+ /** Invoked when user presses left arrow in select dialogs */
184
+ onLeft?: () => void;
185
+ /** Invoked when user presses right arrow in select dialogs */
186
+ onRight?: () => void;
187
+ /** Invoked when user presses the external editor shortcut in select dialogs */
188
+ onExternalEditor?: () => void;
189
+ /** Optional footer hint text rendered by interactive selector */
190
+ helpText?: string;
191
+ /** Render a leading radio/checkbox marker before each markable option in
192
+ * select dialogs (matches the ask transcript). "radio" fills the cursor row
193
+ * for single-choice; "checkbox" reflects `checkedIndices` per row for
194
+ * multi-select. Options beyond `markableCount` keep the plain cursor. */
195
+ selectionMarker?: "radio" | "checkbox";
196
+ /** For `selectionMarker: "checkbox"`: option indices currently checked. */
197
+ checkedIndices?: readonly number[];
198
+ /** Number of leading options that receive a selection marker; the remaining
199
+ * trailing options (e.g. "Other"/"Done" actions) keep the plain cursor.
200
+ * Defaults to all options when `selectionMarker` is set. */
201
+ markableCount?: number;
202
+ }
203
+
204
+ /** Raw terminal input listener for extensions. */
205
+ export type TerminalInputHandler = (data: string) => { consume?: boolean; data?: string } | undefined;
206
+
207
+ export type WidgetPlacement = "aboveEditor" | "belowEditor";
208
+
209
+ export interface ExtensionWidgetOptions {
210
+ placement?: WidgetPlacement;
211
+ }
212
+
213
+ export type ExtensionUiComponent = Component & { dispose?(): void };
214
+ export type ExtensionUiComponentFactory = (tui: TUI, theme: Theme) => ExtensionUiComponent;
215
+ export type ExtensionWidgetContent = string[] | ExtensionUiComponentFactory | undefined;
216
+
217
+ /** Wrap the current autocomplete provider with additional behavior (pi-compatible). */
218
+ export type AutocompleteProviderFactory = (current: AutocompleteProvider) => AutocompleteProvider;
219
+
220
+ /**
221
+ * UI context for extensions to request interactive UI.
222
+ * Each mode (interactive, RPC, print) provides its own implementation.
223
+ */
224
+ // fallow-ignore-next-line code-duplication
225
+ // Parallel to HookUIContext: extensions expose a strictly larger UI surface
226
+ // (custom editor component, header/footer, widgets, theming, terminal input)
227
+ // and may be invoked from event handlers that have already taken the agent
228
+ // loop's lock — hooks intentionally cannot.
229
+ export interface ExtensionUIContext {
230
+ /** True when selector timeouts start only after the dialog is presented. */
231
+ timeoutStartsOnPresentation?: boolean;
232
+ /** Show a selector and return the selected label, even when an option also includes a description. */
233
+ select(
234
+ title: string,
235
+ options: ExtensionUISelectItem[],
236
+ dialogOptions?: ExtensionUIDialogOptions,
237
+ ): Promise<string | undefined>;
238
+
239
+ /** Show a confirmation dialog. */
240
+ confirm(title: string, message: string, dialogOptions?: ExtensionUIDialogOptions): Promise<boolean>;
241
+
242
+ /** Show a text input dialog. */
243
+ input(title: string, placeholder?: string, dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
244
+
245
+ /** Show the rich ask dialog when the interactive TUI surface is available. */
246
+ askDialog?(
247
+ questions: ExtensionAskDialogQuestion[],
248
+ dialogOptions?: ExtensionUIDialogOptions,
249
+ ): Promise<ExtensionAskDialogResult | undefined>;
250
+
251
+ /** Show a notification to the user. */
252
+ notify(message: string, type?: "info" | "warning" | "error"): void;
253
+
254
+ /** Listen to raw terminal input (interactive mode only). Returns an unsubscribe function. */
255
+ onTerminalInput(handler: TerminalInputHandler): () => void;
256
+
257
+ /** Set status text in the footer/status bar. Pass undefined to clear. */
258
+ setStatus(key: string, text: string | undefined): void;
259
+
260
+ /** Set the working/loading message shown during streaming. Call with no argument to restore default. */
261
+ setWorkingMessage(message?: string): void;
262
+
263
+ /** Set a widget to display above or below the editor. Accepts string array or component factory. */
264
+ setWidget(key: string, content: ExtensionWidgetContent, options?: ExtensionWidgetOptions): void;
265
+
266
+ /** Set a custom footer component, or undefined to restore the built-in footer. */
267
+ setFooter(factory: ExtensionUiComponentFactory | undefined): void;
268
+
269
+ /** Set a custom header component, or undefined to restore the built-in header. */
270
+ setHeader(factory: ExtensionUiComponentFactory | undefined): void;
271
+
272
+ /** Set the terminal window/tab title. */
273
+ setTitle(title: string): void;
274
+
275
+ /** Show a custom component with keyboard focus. */
276
+ custom<T>(
277
+ factory: (
278
+ tui: TUI,
279
+ theme: Theme,
280
+ keybindings: KeybindingsManager,
281
+ done: (result: T) => void,
282
+ ) => ExtensionUiComponent | Promise<ExtensionUiComponent>,
283
+ options?: { overlay?: boolean },
284
+ ): Promise<T>;
285
+
286
+ /** Set the text in the core input editor. */
287
+ setEditorText(text: string): void;
288
+
289
+ /**
290
+ * Paste text into the core input editor.
291
+ *
292
+ * Interactive mode should route through the editor's paste handling (e.g. large paste markers).
293
+ * Non-interactive modes may fall back to replacing the editor text.
294
+ */
295
+ pasteToEditor(text: string): void;
296
+
297
+ /** Get the current text from the core input editor. */
298
+ getEditorText(): string;
299
+
300
+ /** Show a multi-line editor for text editing. */
301
+ editor(
302
+ title: string,
303
+ prefill?: string,
304
+ dialogOptions?: ExtensionUIDialogOptions,
305
+ editorOptions?: { promptStyle?: boolean },
306
+ ): Promise<string | undefined>;
307
+
308
+ /**
309
+ * Stack additional autocomplete behavior on top of the built-in provider
310
+ * (pi-compatible). Interactive mode rebuilds the editor's provider through
311
+ * every registered factory, in registration order; headless modes (print,
312
+ * RPC, ACP, subagents) accept and ignore the factory.
313
+ */
314
+ addAutocompleteProvider(factory: AutocompleteProviderFactory): void;
315
+
316
+ /**
317
+ * Set a custom editor component via factory function, or `undefined` to restore the default editor.
318
+ *
319
+ * The factory must return a {@link CustomEditor} subclass. Plain `EditorComponent`/`Editor`
320
+ * instances do not implement the action-keys, escape callbacks, and custom-key-handler surface
321
+ * required by interactive mode.
322
+ */
323
+ setEditorComponent(
324
+ factory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => CustomEditor) | undefined,
325
+ ): void;
326
+
327
+ /** Get the current theme for styling. */
328
+ readonly theme: Theme;
329
+
330
+ /** Get all available themes with names and paths. */
331
+ getAllThemes(): Promise<{ name: string; path: string | undefined }[]>;
332
+
333
+ /** Load a theme by name without switching to it. */
334
+ getTheme(name: string): Promise<Theme | undefined>;
335
+
336
+ /** Set the current theme by name or Theme object. */
337
+ setTheme(theme: string | Theme): Promise<{ success: boolean; error?: string }>;
338
+
339
+ /** Get current tool output expansion state. */
340
+ getToolsExpanded(): boolean;
341
+
342
+ /** Set tool output expansion state. */
343
+ setToolsExpanded(expanded: boolean): void;
344
+ }
345
+
346
+ // ============================================================================
347
+ // Extension Context
348
+ // ============================================================================
349
+
350
+ export interface ContextUsage {
351
+ /** Estimated context tokens. */
352
+ tokens: number;
353
+ contextWindow: number;
354
+ /** Context usage as percentage of context window. */
355
+ percent: number;
356
+ }
357
+
358
+ export interface CompactOptions {
359
+ onComplete?: (result: CompactionResult) => void;
360
+ onError?: (error: Error) => void;
361
+ /**
362
+ * Force a one-off compaction mode for this invocation, overriding the
363
+ * configured `compaction.strategy` / `remoteEnabled` (the `/compact`
364
+ * subcommands: `soft` | `remote` | `snapcompact`). Omitted = configured behavior.
365
+ */
366
+ mode?: CompactMode;
367
+ /**
368
+ * Internal summarizer guidance — piped only to native summarization, never
369
+ * exposed as `customInstructions` on the `session_before_compact` extension
370
+ * hook. Used by plan-mode "Approve and compact context" so extensions that
371
+ * treat `customInstructions` as user focus don't mistake plan-mode
372
+ * boilerplate for the operator's intent (issue #4359).
373
+ *
374
+ * When both `customInstructions` and `internalGuidance` are set, the
375
+ * summarizer uses `internalGuidance`; the hook still sees only the public
376
+ * `customInstructions`.
377
+ */
378
+ internalGuidance?: string;
379
+ }
380
+
381
+ /**
382
+ * Context passed to extension event handlers.
383
+ */
384
+ // fallow-ignore-next-line code-duplication
385
+ // Parallel to HookContext: extensions expose a strictly larger runtime
386
+ // surface (model registry, system prompt, shutdown, full session manager
387
+ // access). Field overlap is incidental; merging into a base would require
388
+ // hooks to widen their public contract.
389
+ /**
390
+ * Read-only model query facade exposed at `ctx.models`. Lets an extension select a
391
+ * model the same way core does — list authenticated models, read the session model,
392
+ * resolve a model string or role alias, and compare model families — without reaching
393
+ * into the mutable registry or re-implementing matching/family heuristics.
394
+ */
395
+ export interface ExtensionModelQuery {
396
+ /** Authenticated models available this session (the same set `--model` selection sees). */
397
+ list(): Model[];
398
+ /** The current session model, if one is set. */
399
+ current(): Model | undefined;
400
+ /**
401
+ * Resolve a model string (`provider/id`, bare id) or role alias (`@slow`, a
402
+ * configured role) to a Model, using the same settings-backed aliases and match
403
+ * preferences as core selection. Thinking/routing suffixes are accepted and resolved
404
+ * to the base model (pass effort separately). Returns undefined when nothing matches.
405
+ */
406
+ resolve(spec: string): Model | undefined;
407
+ /**
408
+ * Opaque lineage token for "are these the same family?" comparisons — every Claude
409
+ * point release shares a token, Claude and GPT differ. Backed by catalog canonical
410
+ * identity. Compare it; do not persist it (the vocabulary tracks new releases).
411
+ */
412
+ family(model: Model): string;
413
+ }
414
+
415
+ export interface ExtensionContext {
416
+ /** UI methods for user interaction */
417
+ ui: ExtensionUIContext;
418
+ /** Get current context usage for the active model. */
419
+ getContextUsage(): ContextUsage | undefined;
420
+ /** Get a read-only snapshot of async jobs owned by this session. */
421
+ getAsyncJobSnapshot(): AsyncJobSnapshot | null;
422
+ /** Compact the session context (interactive mode shows UI). */
423
+ compact(instructionsOrOptions?: string | CompactOptions): Promise<void>;
424
+ /** Whether UI is available (false in print/RPC mode) */
425
+ hasUI: boolean;
426
+ /** Current working directory */
427
+ cwd: string;
428
+ /** Session manager (read-only) */
429
+ sessionManager: ReadonlySessionManager;
430
+ /** Model registry for API key resolution */
431
+ modelRegistry: ModelRegistry;
432
+ /** Calling session's `local://` root mapping for external tool bridges. */
433
+ localProtocolOptions?: LocalProtocolOptions;
434
+ /** Current model (may be undefined) */
435
+ model: Model | undefined;
436
+ /** Read-only model query facade: list / current / resolve / family. */
437
+ models: ExtensionModelQuery;
438
+ /** Whether the agent is idle (not streaming) */
439
+ isIdle(): boolean;
440
+ /** Abort the current agent operation */
441
+ abort(): void;
442
+ /** Whether there are queued messages waiting */
443
+ hasPendingMessages(): boolean;
444
+ /** Gracefully shutdown and exit. */
445
+ shutdown(): void;
446
+ /** Get the current effective system prompt. */
447
+ getSystemPrompt(): string[];
448
+ /** Structured memory runtime for status/search/save across the configured backend. */
449
+ memory?: MemoryRuntimeContext;
450
+ /**
451
+ * Schedule a repeating callback whose throws are contained. Unlike raw
452
+ * `setInterval`, a synchronous throw or rejected promise from `callback` is
453
+ * logged and surfaced through the extension error channel instead of
454
+ * escaping as a process-fatal `uncaughtException` — one misbehaving timer
455
+ * can no longer take down the whole session. The handle is `unref`'d and
456
+ * cleared automatically on `session_shutdown`. Prefer this over raw
457
+ * `setInterval` for any extension background work.
458
+ */
459
+ setInterval(callback: (...args: unknown[]) => void, ms?: number, ...args: unknown[]): Timer;
460
+ /**
461
+ * Schedule a one-shot callback whose throws are contained, mirroring
462
+ * {@link setInterval}. Cleared automatically on `session_shutdown` if it has
463
+ * not yet fired.
464
+ */
465
+ setTimeout(callback: (...args: unknown[]) => void, ms?: number, ...args: unknown[]): Timer;
466
+ /** Clear a timer scheduled via {@link setInterval} or {@link setTimeout}. */
467
+ clearTimer(timer: Timer): void;
468
+ /**
469
+ * Run the NATIVE built-in implementation of the tool this handler re-registered, with `params`,
470
+ * and return its result. Lets a tool that re-registers a built-in (e.g. wrapping `write` to add
471
+ * logging or a policy check) delegate to the original instead of reimplementing it — the native
472
+ * tool performs its own side effects and internal bookkeeping.
473
+ *
474
+ * Delegation is same-tool only: it invokes the built-in of the SAME name as the registering tool,
475
+ * never an arbitrary target, so it cannot escalate past the approval already granted for this
476
+ * call. Present only when a native built-in of that name exists (undefined otherwise, e.g. for a
477
+ * net-new tool that shadows no built-in). Recursion is depth-guarded per call chain.
478
+ */
479
+ invokeTool?<TDetails = unknown>(
480
+ params: Record<string, unknown>,
481
+ options?: { signal?: AbortSignal; onUpdate?: AgentToolUpdateCallback<TDetails> },
482
+ ): Promise<AgentToolResult<TDetails>>;
483
+ }
484
+
485
+ /**
486
+ * Extended context for command handlers.
487
+ * Includes session control methods only safe in user-initiated commands.
488
+ */
489
+ // fallow-ignore-next-line code-duplication
490
+ // Parallel to HookCommandContext: same method names, different invariants —
491
+ // extension commands additionally permit `switchSession` and `reload`,
492
+ // which hooks must not call to avoid deadlocking the agent loop.
493
+ export interface ExtensionCommandContext extends ExtensionContext {
494
+ /** Get current context usage for the active model. */
495
+ getContextUsage(): ContextUsage | undefined;
496
+
497
+ /** Wait for the agent to finish streaming */
498
+ waitForIdle(): Promise<void>;
499
+
500
+ /** Start a new session, optionally with initialization. */
501
+ newSession(options?: {
502
+ parentSession?: string;
503
+ setup?: (sessionManager: SessionManager) => Promise<void>;
504
+ }): Promise<{ cancelled: boolean }>;
505
+
506
+ /** Branch from a specific entry, creating a new session file. */
507
+ branch(entryId: string): Promise<{ cancelled: boolean }>;
508
+
509
+ /** Navigate to a different point in the session tree. */
510
+ navigateTree(targetId: string, options?: { summarize?: boolean }): Promise<{ cancelled: boolean }>;
511
+
512
+ /** Switch to a different session file. */
513
+ switchSession(sessionPath: string): Promise<{ cancelled: boolean }>;
514
+
515
+ /** Reload the current session/runtime state. */
516
+ reload(): Promise<void>;
517
+
518
+ /** Compact the session context (interactive mode shows UI). */
519
+ compact(instructionsOrOptions?: string | CompactOptions): Promise<void>;
520
+ }
521
+
522
+ // ============================================================================
523
+ // Tool Types
524
+ // ============================================================================
525
+
526
+ /** Rendering options for tool results */
527
+ export interface ToolRenderResultOptions {
528
+ /** Whether the result view is expanded */
529
+ expanded: boolean;
530
+ /** Whether this is a partial/streaming result */
531
+ isPartial: boolean;
532
+ /** Current spinner frame index for animated elements (optional) */
533
+ spinnerFrame?: number;
534
+ }
535
+
536
+ /** Session event for tool onSession lifecycle */
537
+ export interface ToolSessionEvent {
538
+ /** Reason for the session event */
539
+ reason: "start" | "switch" | "branch" | "tree" | "shutdown";
540
+ /** Previous session file path, or undefined for "start" and "shutdown" */
541
+ previousSessionFile: string | undefined;
542
+ }
543
+
544
+ /**
545
+ * Tool definition for registerTool().
546
+ */
547
+ export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = unknown> {
548
+ /** Tool name (used in LLM tool calls) */
549
+ name: string;
550
+ /** Human-readable label for UI */
551
+ label: string;
552
+ /** Description for LLM */
553
+ description: string;
554
+ /** Parameter schema (Zod, or TypeBox for legacy/extension compat). */
555
+ parameters: TParams;
556
+ /** If true, tool is excluded unless explicitly listed in --tools or agent's tools field */
557
+ hidden?: boolean;
558
+ /** If true, tool is registered but not auto-included in the initial active set.
559
+ * The registering extension is responsible for activating/deactivating it via setActiveTools(). */
560
+ defaultInactive?: boolean;
561
+ /** How this tool is presented when enabled. See {@link ToolLoadMode}. Extension tools default to `"discoverable"`; set `"essential"` to stay top-level. */
562
+ loadMode?: ToolLoadMode;
563
+ /** If true, tool may stage deferred changes that require explicit resolve/discard. */
564
+ deferrable?: boolean;
565
+ /** Tool approval tier. Defaults to `"exec"` when omitted.
566
+ * `"read"`: read-only operations. `"write"`: mutations. `"exec"`: code execution. */
567
+ approval?: ToolApproval;
568
+ /** Structured-output strict grammar opt-in/out. `false` is meaningful: OpenAI-family
569
+ * serializers preserve an explicit `strict: false` on the wire (#4336/#4340). */
570
+ strict?: boolean;
571
+ /** MCP server name for discovery/search metadata when this tool fronts an MCP server. */
572
+ mcpServerName?: string;
573
+ /** Original MCP tool name for discovery/search metadata. */
574
+ mcpToolName?: string;
575
+ /** Execute the tool. */
576
+ execute(
577
+ toolCallId: string,
578
+ params: Static<TParams>,
579
+ signal: AbortSignal | undefined,
580
+ onUpdate: AgentToolUpdateCallback<TDetails> | undefined,
581
+ ctx: ExtensionContext,
582
+ ): Promise<AgentToolResult<TDetails>>;
583
+
584
+ /** Called on session lifecycle events - use to reconstruct state or cleanup resources */
585
+ onSession?: (event: ToolSessionEvent, ctx: ExtensionContext) => void | Promise<void>;
586
+
587
+ /** Custom rendering for tool call display */
588
+ renderCall?: (args: Static<TParams>, options: ToolRenderResultOptions, theme: Theme) => Component;
589
+
590
+ /** Custom rendering for tool result display */
591
+ renderResult?: (
592
+ result: AgentToolResult<TDetails>,
593
+ options: ToolRenderResultOptions,
594
+ theme: Theme,
595
+ args?: Static<TParams>,
596
+ ) => Component;
597
+ }
598
+
599
+ /** Whether a tool's source is scoped to the user, the project, or a transient runtime session. */
600
+ export type SourceScope = "user" | "project" | "temporary";
601
+
602
+ /** Whether a tool's source came from an installed package or a top-level (loose) file. */
603
+ export type SourceOrigin = "package" | "top-level";
604
+
605
+ /**
606
+ * Provenance metadata describing where a registered tool came from. Mirrors the
607
+ * `@earendil-works/pi-coding-agent` `SourceInfo` contract so extensions authored
608
+ * against upstream pi (e.g. gentle-pi) can read `sourceInfo.source` unchanged.
609
+ */
610
+ export interface SourceInfo {
611
+ /** Synthetic or on-disk identifier for the tool's origin (e.g. `<builtin:read>`). */
612
+ path: string;
613
+ /** Origin class: `"builtin"`, `"sdk"`, `"mcp"`, or `"extension"`. */
614
+ source: string;
615
+ scope: SourceScope;
616
+ origin: SourceOrigin;
617
+ baseDir?: string;
618
+ }
619
+
620
+ /** Tool metadata returned by {@link ExtensionAPI.getAllTools}: identity, schema, and source provenance. */
621
+ export interface ToolInfo {
622
+ name: string;
623
+ description: string;
624
+ parameters: TSchema;
625
+ promptGuidelines?: string[];
626
+ sourceInfo: SourceInfo;
627
+ }
628
+
629
+ // ============================================================================
630
+ // Resource Events
631
+ // ============================================================================
632
+
633
+ /** Fired after session_start to allow extensions to provide additional resource paths. */
634
+ export interface ResourcesDiscoverEvent {
635
+ type: "resources_discover";
636
+ cwd: string;
637
+ reason: "startup" | "reload";
638
+ }
639
+
640
+ /** Result from resources_discover event handler */
641
+ export interface ResourcesDiscoverResult {
642
+ skillPaths?: string[];
643
+ promptPaths?: string[];
644
+ themePaths?: string[];
645
+ }
646
+
647
+ // ============================================================================
648
+ // Session Events (shared with hooks subsystem)
649
+ // ============================================================================
650
+
651
+ export type {
652
+ SessionBeforeBranchEvent,
653
+ SessionBeforeCompactEvent,
654
+ SessionBeforeSwitchEvent,
655
+ SessionBeforeTreeEvent,
656
+ SessionBranchEvent,
657
+ SessionCompactEvent,
658
+ SessionCompactingEvent,
659
+ SessionEvent,
660
+ SessionShutdownEvent,
661
+ SessionStartEvent,
662
+ SessionSwitchEvent,
663
+ SessionTreeEvent,
664
+ TreePreparation,
665
+ } from "../shared-events";
666
+
667
+ // ============================================================================
668
+ // Agent Events
669
+ // ============================================================================
670
+
671
+ export type { ContextEvent } from "../shared-events";
672
+
673
+ /** Fired before a provider request is sent. Can replace the payload. */
674
+ export interface BeforeProviderRequestEvent {
675
+ type: "before_provider_request";
676
+ payload: unknown;
677
+ }
678
+
679
+ /** Fired after a provider response is received, before its stream body is consumed. */
680
+ export interface AfterProviderResponseEvent extends ProviderResponseMetadata {
681
+ type: "after_provider_response";
682
+ }
683
+
684
+ /** Fired after user submits prompt but before agent loop. */
685
+ export interface BeforeAgentStartEvent {
686
+ type: "before_agent_start";
687
+ prompt: string;
688
+ images?: ImageContent[];
689
+ systemPrompt: string[];
690
+ }
691
+
692
+ export type {
693
+ AgentEndEvent,
694
+ AgentStartEvent,
695
+ SessionStopEvent,
696
+ SessionStopEventResult,
697
+ TurnEndEvent,
698
+ TurnStartEvent,
699
+ } from "../shared-events";
700
+
701
+ /** Fired when a message starts (user, assistant, or toolResult) */
702
+ export interface MessageStartEvent {
703
+ type: "message_start";
704
+ message: AgentMessage;
705
+ }
706
+
707
+ /** Fired during assistant message streaming with token-by-token updates */
708
+ export interface MessageUpdateEvent {
709
+ type: "message_update";
710
+ message: AgentMessage;
711
+ assistantMessageEvent: AssistantMessageEvent;
712
+ }
713
+
714
+ /** Fired when a message ends */
715
+ export interface MessageEndEvent {
716
+ type: "message_end";
717
+ message: AgentMessage;
718
+ }
719
+
720
+ /** Fired when a tool starts executing */
721
+ export interface ToolExecutionStartEvent {
722
+ type: "tool_execution_start";
723
+ toolCallId: string;
724
+ toolName: string;
725
+ args: unknown;
726
+ intent?: string;
727
+ }
728
+
729
+ /** Fired during tool execution with partial/streaming output */
730
+ export interface ToolExecutionUpdateEvent {
731
+ type: "tool_execution_update";
732
+ toolCallId: string;
733
+ toolName: string;
734
+ args: unknown;
735
+ partialResult: unknown;
736
+ }
737
+
738
+ /** Fired when a tool finishes executing */
739
+ export interface ToolExecutionEndEvent {
740
+ type: "tool_execution_end";
741
+ toolCallId: string;
742
+ toolName: string;
743
+ result: unknown;
744
+ isError: boolean;
745
+ }
746
+
747
+ export type {
748
+ AutoCompactionEndEvent,
749
+ AutoCompactionStartEvent,
750
+ AutoRetryEndEvent,
751
+ AutoRetryStartEvent,
752
+ TodoReminderEvent,
753
+ TtsrTriggeredEvent,
754
+ } from "../shared-events";
755
+
756
+ /** Fired when AuthStorage automatically soft-disables a credential (e.g. OAuth `invalid_grant`). Not fired for user-initiated `remove()` or duplicate-credential dedup. */
757
+ export interface CredentialDisabledEvent {
758
+ type: "credential_disabled";
759
+ /** Provider id whose credential was disabled (e.g. "anthropic"). */
760
+ provider: string;
761
+ /** Verbatim error captured for forensics (truncated upstream). */
762
+ disabledCause: string;
763
+ }
764
+
765
+ // ============================================================================
766
+ // MCP Events
767
+ // ============================================================================
768
+
769
+ /**
770
+ * Fired for every JSON-RPC notification received from a connected MCP server,
771
+ * AFTER the runtime's own handling of known list/update methods. Unknown or
772
+ * server-custom methods are delivered too — extensions can bridge them into
773
+ * session behavior by inspecting `method`/`params` and injecting a follow-up
774
+ * via `pi.sendMessage(..., { deliverAs })` or `pi.sendUserMessage(...)`.
775
+ */
776
+ export interface McpNotificationEvent {
777
+ type: "mcp_notification";
778
+ /**
779
+ * Server name as declared in the MCP config (raw, unsanitized). Note this
780
+ * differs from the sanitized prefix used in `mcp__<sanitized_server>_<tool>`
781
+ * tool names — filter by this raw name, not by tool-name prefix matching.
782
+ */
783
+ server: string;
784
+ /** JSON-RPC method (e.g. `notifications/tools/list_changed`, or server-custom). */
785
+ method: string;
786
+ /** JSON-RPC params, opaque to the runtime. */
787
+ params: unknown;
788
+ }
789
+
790
+ // ============================================================================
791
+ // User Bash Events
792
+ // ============================================================================
793
+
794
+ /** Fired when user executes a bash command via ! or !! prefix */
795
+ export interface UserBashEvent {
796
+ type: "user_bash";
797
+ /** The command to execute */
798
+ command: string;
799
+ /** True if !! prefix was used (excluded from LLM context) */
800
+ excludeFromContext: boolean;
801
+ /** Current working directory */
802
+ cwd: string;
803
+ }
804
+
805
+ // ============================================================================
806
+ // User Python Events
807
+ // ============================================================================
808
+
809
+ /** Fired when user executes Python code via $ or $$ prefix */
810
+ export interface UserPythonEvent {
811
+ type: "user_python";
812
+ /** The Python code to execute */
813
+ code: string;
814
+ /** True if $$ prefix was used (excluded from LLM context) */
815
+ excludeFromContext: boolean;
816
+ /** Current working directory */
817
+ cwd: string;
818
+ }
819
+
820
+ // ============================================================================
821
+ // Input Events
822
+ // ============================================================================
823
+
824
+ /** Fired when the user submits input (interactive mode only). */
825
+ export interface InputEvent {
826
+ type: "input";
827
+ text: string;
828
+ images?: ImageContent[];
829
+ source: "interactive" | "rpc" | "extension";
830
+ }
831
+
832
+ // ============================================================================
833
+ // Tool Events
834
+ // ============================================================================
835
+
836
+ export interface ToolApprovalRequestedEvent {
837
+ type: "tool_approval_requested";
838
+ sessionId: string;
839
+ toolCallId: string;
840
+ toolName: string;
841
+ reason?: string;
842
+ approvalMode: ApprovalMode;
843
+ }
844
+
845
+ export interface ToolApprovalResolvedEvent {
846
+ type: "tool_approval_resolved";
847
+ sessionId: string;
848
+ toolCallId: string;
849
+ toolName: string;
850
+ approved: boolean;
851
+ reason?: string;
852
+ }
853
+
854
+ interface ToolCallEventBase {
855
+ type: "tool_call";
856
+ toolCallId: string;
857
+ }
858
+
859
+ export interface BashToolCallEvent extends ToolCallEventBase {
860
+ toolName: "bash";
861
+ input: BashToolInput;
862
+ }
863
+
864
+ export interface ReadToolCallEvent extends ToolCallEventBase {
865
+ toolName: "read";
866
+ input: ReadToolInput;
867
+ }
868
+
869
+ export interface EditToolCallEvent extends ToolCallEventBase {
870
+ toolName: "edit";
871
+ input: Record<string, unknown>;
872
+ }
873
+
874
+ export interface WriteToolCallEvent extends ToolCallEventBase {
875
+ toolName: "write";
876
+ input: WriteToolInput;
877
+ }
878
+
879
+ export interface GrepToolCallEvent extends ToolCallEventBase {
880
+ toolName: "grep";
881
+ input: GrepToolInput;
882
+ }
883
+
884
+ export interface GlobToolCallEvent extends ToolCallEventBase {
885
+ toolName: "glob";
886
+ input: GlobToolInput;
887
+ }
888
+
889
+ export interface CustomToolCallEvent extends ToolCallEventBase {
890
+ toolName: string;
891
+ input: Record<string, unknown>;
892
+ }
893
+
894
+ /** Fired before a tool executes. Can block. */
895
+ export type ToolCallEvent =
896
+ | BashToolCallEvent
897
+ | ReadToolCallEvent
898
+ | EditToolCallEvent
899
+ | WriteToolCallEvent
900
+ | GrepToolCallEvent
901
+ | GlobToolCallEvent
902
+ | CustomToolCallEvent;
903
+
904
+ interface ToolResultEventBase {
905
+ type: "tool_result";
906
+ toolCallId: string;
907
+ input: Record<string, unknown>;
908
+ content: (TextContent | ImageContent)[];
909
+ isError: boolean;
910
+ }
911
+
912
+ export interface BashToolResultEvent extends ToolResultEventBase {
913
+ toolName: "bash";
914
+ details: BashToolDetails | undefined;
915
+ }
916
+
917
+ export interface ReadToolResultEvent extends ToolResultEventBase {
918
+ toolName: "read";
919
+ details: ReadToolDetails | undefined;
920
+ }
921
+
922
+ export interface EditToolResultEvent extends ToolResultEventBase {
923
+ toolName: "edit";
924
+ details: EditToolDetails | undefined;
925
+ }
926
+
927
+ export interface WriteToolResultEvent extends ToolResultEventBase {
928
+ toolName: "write";
929
+ details: undefined;
930
+ }
931
+
932
+ export interface GrepToolResultEvent extends ToolResultEventBase {
933
+ toolName: "grep";
934
+ details: GrepToolDetails | undefined;
935
+ }
936
+
937
+ export interface GlobToolResultEvent extends ToolResultEventBase {
938
+ toolName: "glob";
939
+ details: GlobToolDetails | undefined;
940
+ }
941
+
942
+ export interface CustomToolResultEvent extends ToolResultEventBase {
943
+ toolName: string;
944
+ details: unknown;
945
+ }
946
+
947
+ /** Fired after a tool executes. Can modify result. */
948
+ export type ToolResultEvent =
949
+ | BashToolResultEvent
950
+ | ReadToolResultEvent
951
+ | EditToolResultEvent
952
+ | WriteToolResultEvent
953
+ | GrepToolResultEvent
954
+ | GlobToolResultEvent
955
+ | CustomToolResultEvent;
956
+
957
+ /**
958
+ * Type guard for narrowing ToolCallEvent by tool name.
959
+ *
960
+ * Built-in tools narrow automatically (no type params needed):
961
+ * ```ts
962
+ * if (isToolCallEventType("bash", event)) {
963
+ * event.input.command; // string
964
+ * }
965
+ * ```
966
+ *
967
+ * Custom tools require explicit type parameters:
968
+ * ```ts
969
+ * if (isToolCallEventType<"my_tool", MyToolInput>("my_tool", event)) {
970
+ * event.input.action; // typed
971
+ * }
972
+ * ```
973
+ *
974
+ * Note: Direct narrowing via `event.toolName === "bash"` doesn't work because
975
+ * CustomToolCallEvent.toolName is `string` which overlaps with all literals.
976
+ */
977
+ export function isToolCallEventType(toolName: "bash", event: ToolCallEvent): event is BashToolCallEvent;
978
+ export function isToolCallEventType(toolName: "read", event: ToolCallEvent): event is ReadToolCallEvent;
979
+ export function isToolCallEventType(toolName: "edit", event: ToolCallEvent): event is EditToolCallEvent;
980
+ export function isToolCallEventType(toolName: "write", event: ToolCallEvent): event is WriteToolCallEvent;
981
+ export function isToolCallEventType(toolName: "grep", event: ToolCallEvent): event is GrepToolCallEvent;
982
+ export function isToolCallEventType(toolName: "glob", event: ToolCallEvent): event is GlobToolCallEvent;
983
+ export function isToolCallEventType<TName extends string, TInput extends Record<string, unknown>>(
984
+ toolName: TName,
985
+ event: ToolCallEvent,
986
+ ): event is ToolCallEvent & { toolName: TName; input: TInput };
987
+ export function isToolCallEventType(toolName: string, event: ToolCallEvent): boolean {
988
+ return event.toolName === toolName;
989
+ }
990
+
991
+ /** Union of all event types */
992
+ export type ExtensionEvent =
993
+ | ResourcesDiscoverEvent
994
+ | SessionEvent
995
+ | ContextEvent
996
+ | BeforeProviderRequestEvent
997
+ | AfterProviderResponseEvent
998
+ | BeforeAgentStartEvent
999
+ | AgentStartEvent
1000
+ | AgentEndEvent
1001
+ | SessionStopEvent
1002
+ | TurnStartEvent
1003
+ | TurnEndEvent
1004
+ | MessageStartEvent
1005
+ | MessageUpdateEvent
1006
+ | MessageEndEvent
1007
+ | ToolExecutionStartEvent
1008
+ | ToolExecutionUpdateEvent
1009
+ | ToolExecutionEndEvent
1010
+ | AutoCompactionStartEvent
1011
+ | AutoCompactionEndEvent
1012
+ | AutoRetryStartEvent
1013
+ | AutoRetryEndEvent
1014
+ | TtsrTriggeredEvent
1015
+ | TodoReminderEvent
1016
+ | GoalUpdatedEvent
1017
+ | CredentialDisabledEvent
1018
+ | McpNotificationEvent
1019
+ | UserBashEvent
1020
+ | UserPythonEvent
1021
+ | InputEvent
1022
+ | ToolCallEvent
1023
+ | ToolResultEvent
1024
+ | ToolApprovalRequestedEvent
1025
+ | ToolApprovalResolvedEvent;
1026
+
1027
+ // ============================================================================
1028
+ // Event Results
1029
+ // ============================================================================
1030
+
1031
+ export interface ContextEventResult {
1032
+ messages?: AgentMessage[];
1033
+ }
1034
+
1035
+ export type BeforeProviderRequestEventResult = unknown;
1036
+
1037
+ export type { ToolCallEventResult } from "../shared-events";
1038
+
1039
+ /** Result from input event handler */
1040
+ export interface InputEventResult {
1041
+ /** If true, the input was handled and should not continue through normal flow */
1042
+ handled?: boolean;
1043
+ /** Replace the input text */
1044
+ text?: string;
1045
+ /** Replace any pending images */
1046
+ images?: ImageContent[];
1047
+ }
1048
+
1049
+ /** Result from user_bash event handler */
1050
+ export interface UserBashEventResult {
1051
+ /** Full replacement: extension handled execution, use this result */
1052
+ result?: BashResult;
1053
+ }
1054
+
1055
+ /** Result from user_python event handler */
1056
+ export interface UserPythonEventResult {
1057
+ /** Full replacement: extension handled execution, use this result */
1058
+ result?: PythonResult;
1059
+ }
1060
+
1061
+ export type { ToolResultEventResult } from "../shared-events";
1062
+
1063
+ export interface BeforeAgentStartEventResult {
1064
+ message?: CustomMessagePayload;
1065
+ /** Replace the system prompt for this turn. If multiple extensions return this, they are chained. */
1066
+ systemPrompt?: string[];
1067
+ }
1068
+
1069
+ export type {
1070
+ SessionBeforeBranchResult,
1071
+ SessionBeforeCompactResult,
1072
+ SessionBeforeSwitchResult,
1073
+ SessionBeforeTreeResult,
1074
+ SessionCompactingResult,
1075
+ } from "../shared-events";
1076
+
1077
+ // ============================================================================
1078
+ // Message Rendering
1079
+ // ============================================================================
1080
+
1081
+ export interface MessageRenderOptions {
1082
+ expanded: boolean;
1083
+ }
1084
+
1085
+ export type MessageRenderer<T = unknown> = (
1086
+ message: CustomMessage<T>,
1087
+ options: MessageRenderOptions,
1088
+ theme: Theme,
1089
+ ) => Component | undefined;
1090
+
1091
+ export interface AssistantThinkingRenderContext {
1092
+ contentIndex: number;
1093
+ thinkingIndex: number;
1094
+ text: string;
1095
+ requestRender(): void;
1096
+ }
1097
+
1098
+ export type AssistantThinkingRenderer = (
1099
+ context: AssistantThinkingRenderContext,
1100
+ theme: Theme,
1101
+ ) => Component | undefined;
1102
+
1103
+ // ============================================================================
1104
+ // Command Registration
1105
+ // ============================================================================
1106
+
1107
+ // fallow-ignore-next-line code-duplication
1108
+ // Parallel to HookAPI's RegisteredCommand: extensions add
1109
+ // `getArgumentCompletions` and bind handlers to ExtensionCommandContext.
1110
+ export interface RegisteredCommand {
1111
+ name: string;
1112
+ description?: string;
1113
+ getArgumentCompletions?: (argumentPrefix: string) => AutocompleteItem[] | null;
1114
+ handler: (args: string, ctx: ExtensionCommandContext) => Promise<void>;
1115
+ }
1116
+
1117
+ // ============================================================================
1118
+ // Extension API
1119
+ // ============================================================================
1120
+
1121
+ /** Handler function type for events */
1122
+ export type ExtensionHandler<E, R = undefined> = (event: E, ctx: ExtensionContext) => Promise<R | void> | R | void;
1123
+
1124
+ /** Service tiers accepted by each provider family. */
1125
+ export type ExtensionServiceTier<Family extends ServiceTierFamily> = Family extends "anthropic"
1126
+ ? "priority"
1127
+ : Family extends "google"
1128
+ ? "flex" | "priority"
1129
+ : ServiceTier;
1130
+
1131
+ /**
1132
+ * ExtensionAPI passed to extension factory functions.
1133
+ */
1134
+ export interface ExtensionAPI {
1135
+ // =========================================================================
1136
+ // Module Access
1137
+ // =========================================================================
1138
+
1139
+ /** File logger for error/warning/debug messages */
1140
+ logger: typeof PiLogger;
1141
+
1142
+ /** Injected TypeBox shim for legacy `Type.Object(...)` parameter authoring. */
1143
+ typebox: typeof TypeBox;
1144
+
1145
+ /** Injected omptype schema builder for extension tools. */
1146
+ arktype: typeof ArkType;
1147
+
1148
+ /** Injected Zod-compatible omptype builder for extension tools. */
1149
+ zod: typeof zod;
1150
+
1151
+ /** Injected pi-coding-agent exports for accessing SDK utilities */
1152
+ pi: typeof PiCodingAgent;
1153
+
1154
+ // =========================================================================
1155
+ // Event Subscription
1156
+ // =========================================================================
1157
+
1158
+ on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): void;
1159
+ on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): void;
1160
+ on(
1161
+ event: "session_before_switch",
1162
+ handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>,
1163
+ ): void;
1164
+ on(event: "session_switch", handler: ExtensionHandler<SessionSwitchEvent>): void;
1165
+ on(
1166
+ event: "session_before_branch",
1167
+ handler: ExtensionHandler<SessionBeforeBranchEvent, SessionBeforeBranchResult>,
1168
+ ): void;
1169
+ on(event: "session_branch", handler: ExtensionHandler<SessionBranchEvent>): void;
1170
+ on(
1171
+ event: "session_before_compact",
1172
+ handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>,
1173
+ ): void;
1174
+ on(event: "session.compacting", handler: ExtensionHandler<SessionCompactingEvent, SessionCompactingResult>): void;
1175
+ on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): void;
1176
+ on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): void;
1177
+ on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): void;
1178
+ on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): void;
1179
+ on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): void;
1180
+ on(
1181
+ event: "before_provider_request",
1182
+ handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>,
1183
+ ): void;
1184
+ on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): void;
1185
+ on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
1186
+ on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
1187
+ on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): void;
1188
+ on(event: "session_stop", handler: ExtensionHandler<SessionStopEvent, SessionStopEventResult>): void;
1189
+ on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): void;
1190
+ on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): void;
1191
+ on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): void;
1192
+ on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): void;
1193
+ on(event: "message_end", handler: ExtensionHandler<MessageEndEvent>): void;
1194
+ on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): void;
1195
+ on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): void;
1196
+ on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): void;
1197
+ on(event: "auto_compaction_start", handler: ExtensionHandler<AutoCompactionStartEvent>): void;
1198
+ on(event: "auto_compaction_end", handler: ExtensionHandler<AutoCompactionEndEvent>): void;
1199
+ on(event: "auto_retry_start", handler: ExtensionHandler<AutoRetryStartEvent>): void;
1200
+ on(event: "auto_retry_end", handler: ExtensionHandler<AutoRetryEndEvent>): void;
1201
+ on(event: "ttsr_triggered", handler: ExtensionHandler<TtsrTriggeredEvent>): void;
1202
+ on(event: "todo_reminder", handler: ExtensionHandler<TodoReminderEvent>): void;
1203
+ on(event: "goal_updated", handler: ExtensionHandler<GoalUpdatedEvent>): void;
1204
+ on(event: "credential_disabled", handler: ExtensionHandler<CredentialDisabledEvent>): void;
1205
+ on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
1206
+ on(event: "tool_approval_requested", handler: ExtensionHandler<ToolApprovalRequestedEvent>): void;
1207
+ on(event: "tool_approval_resolved", handler: ExtensionHandler<ToolApprovalResolvedEvent>): void;
1208
+ on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
1209
+ on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
1210
+ on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
1211
+ on(event: "user_python", handler: ExtensionHandler<UserPythonEvent, UserPythonEventResult>): void;
1212
+ on(event: "mcp_notification", handler: ExtensionHandler<McpNotificationEvent>): void;
1213
+
1214
+ // =========================================================================
1215
+ // Tool Registration
1216
+ // =========================================================================
1217
+
1218
+ /** Register a tool that the LLM can call. */
1219
+ registerTool<TParams extends TSchema = TSchema, TDetails = unknown>(tool: ToolDefinition<TParams, TDetails>): void;
1220
+
1221
+ // =========================================================================
1222
+ // Command, Shortcut, Flag Registration
1223
+ // =========================================================================
1224
+
1225
+ /** Register a custom command. */
1226
+ registerCommand(
1227
+ name: string,
1228
+ options: {
1229
+ description?: string;
1230
+ getArgumentCompletions?: RegisteredCommand["getArgumentCompletions"];
1231
+ handler: RegisteredCommand["handler"];
1232
+ },
1233
+ ): void;
1234
+
1235
+ /** Register a keyboard shortcut. */
1236
+ registerShortcut(
1237
+ shortcut: KeyId,
1238
+ options: {
1239
+ description?: string;
1240
+ handler: (ctx: ExtensionContext) => Promise<void> | void;
1241
+ },
1242
+ ): void;
1243
+
1244
+ /** Register a CLI flag. */
1245
+ registerFlag(
1246
+ name: string,
1247
+ options: {
1248
+ description?: string;
1249
+ type: "boolean" | "string";
1250
+ default?: boolean | string;
1251
+ },
1252
+ ): void;
1253
+
1254
+ /** Set the display label for this extension, or set a label on a specific entry. */
1255
+ setLabel(entryIdOrLabel: string, label?: string | undefined): void;
1256
+
1257
+ /** Get the value of a registered CLI flag. */
1258
+ getFlag(name: string): boolean | string | undefined;
1259
+
1260
+ // =========================================================================
1261
+ // Message Rendering
1262
+ // =========================================================================
1263
+
1264
+ /** Register a custom renderer for CustomMessageEntry. */
1265
+ registerMessageRenderer<T = unknown>(customType: string, renderer: MessageRenderer<T>): void;
1266
+
1267
+ /** Register a renderer for assistant thinking blocks. Rendered after the original thinking text. */
1268
+ registerAssistantThinkingRenderer(renderer: AssistantThinkingRenderer): void;
1269
+
1270
+ // =========================================================================
1271
+ // Actions
1272
+ // =========================================================================
1273
+
1274
+ /**
1275
+ * Send a custom message to the session.
1276
+ *
1277
+ * `deliverAs: "nextTurn"` keeps the message hidden from the editable pending-message UI.
1278
+ * If `triggerTurn` is also true while the current turn is still unwinding, the session schedules
1279
+ * an internal continuation that consumes the message on the next turn.
1280
+ */
1281
+ sendMessage<T = unknown>(
1282
+ message: CustomMessagePayload<T>,
1283
+ options?: { triggerTurn?: boolean; deliverAs?: "steer" | "followUp" | "nextTurn" },
1284
+ ): void;
1285
+
1286
+ /** Send a user prompt: idle starts a turn; streaming queues as steer unless deliverAs is set. */
1287
+ sendUserMessage(
1288
+ content: string | (TextContent | ImageContent)[],
1289
+ options?: { deliverAs?: "steer" | "followUp" },
1290
+ ): void;
1291
+
1292
+ /** Append a custom entry to the session for state persistence (not sent to LLM). */
1293
+ appendEntry<T = unknown>(customType: string, data?: T): void;
1294
+
1295
+ /** Execute a shell command. */
1296
+ exec(command: string, args: string[], options?: ExecOptions): Promise<ExecResult>;
1297
+
1298
+ /** Get the list of currently active tool names. */
1299
+ getActiveTools(): string[];
1300
+
1301
+ /** Get all configured tools (built-in + extension tools) with schema and source metadata. */
1302
+ getAllTools(): ToolInfo[];
1303
+
1304
+ /** Set the active tools by name. */
1305
+ setActiveTools(toolNames: string[]): Promise<void>;
1306
+
1307
+ /** Get available slash commands in the current session. */
1308
+ getCommands(): SlashCommandInfo[];
1309
+
1310
+ /** Set the current model. Returns false if no API key available. */
1311
+ setModel(model: Model): Promise<boolean>;
1312
+
1313
+ /** Get current thinking level. */
1314
+ getThinkingLevel(): ThinkingLevel | undefined;
1315
+
1316
+ /** Set thinking level for the current session. */
1317
+ setThinkingLevel(level: ThinkingLevel): void;
1318
+
1319
+ /** Get a snapshot of the current session's per-family service tiers. */
1320
+ getServiceTiers(): Readonly<ServiceTierByFamily>;
1321
+
1322
+ /**
1323
+ * Set one provider family's service tier for subsequent requests, or clear
1324
+ * its session override with `undefined`.
1325
+ */
1326
+ setServiceTier<Family extends ServiceTierFamily>(
1327
+ family: Family,
1328
+ tier: ExtensionServiceTier<Family> | undefined,
1329
+ ): void;
1330
+
1331
+ /** Get the current session name. */
1332
+ getSessionName(): string | undefined;
1333
+
1334
+ /** Set the session name. Persists to the session file. */
1335
+ setSessionName(name: string): Promise<void>;
1336
+
1337
+ // =========================================================================
1338
+ // Provider Registration
1339
+ // =========================================================================
1340
+
1341
+ /**
1342
+ * Register or override a model provider.
1343
+ *
1344
+ * If `models` is provided: replaces all existing models for this provider.
1345
+ * If only `baseUrl` is provided: overrides the URL for existing models.
1346
+ * If `streamSimple` is provided: registers a custom API stream handler.
1347
+ *
1348
+ * @example
1349
+ * // Register a new provider with custom models and streaming
1350
+ * pi.registerProvider("google-vertex-claude", {
1351
+ * baseUrl: "https://us-east5-aiplatform.googleapis.com",
1352
+ * apiKey: "GOOGLE_CLOUD_PROJECT",
1353
+ * api: "vertex-claude-api",
1354
+ * streamSimple: myStreamFunction,
1355
+ * models: [
1356
+ * {
1357
+ * id: "claude-sonnet-4@20250514",
1358
+ * name: "Claude Sonnet 4 (Vertex)",
1359
+ * reasoning: true,
1360
+ * thinking: { mode: "anthropic-adaptive", efforts: ["minimal", "low", "medium", "high"] },
1361
+ * input: ["text", "image"],
1362
+ * cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
1363
+ * contextWindow: 200000,
1364
+ * maxTokens: 64000,
1365
+ * ]
1366
+ * });
1367
+ *
1368
+ * @example
1369
+ * // Override baseUrl for an existing provider
1370
+ * pi.registerProvider("anthropic", {
1371
+ * baseUrl: "https://proxy.example.com"
1372
+ * });
1373
+ */
1374
+ registerProvider(name: string, config: ProviderConfig): void;
1375
+
1376
+ /** Shared event bus for extension communication. */
1377
+ events: EventBus;
1378
+ }
1379
+
1380
+ // ============================================================================
1381
+ // Provider Registration Types
1382
+ // ============================================================================
1383
+
1384
+ /** Configuration for registering a provider via pi.registerProvider(). */
1385
+ export interface ProviderConfig {
1386
+ /** Base URL for the API endpoint. Required when defining models. */
1387
+ baseUrl?: string;
1388
+ /** API key or environment variable name. Required when defining models unless oauth is provided. */
1389
+ apiKey?: string;
1390
+ /** API type identifier. Required when registering streamSimple or when models don't specify one. */
1391
+ api?: Api;
1392
+ /** Custom streaming function for non-built-in APIs. */
1393
+ streamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
1394
+ /** Custom headers to include in requests. */
1395
+ headers?: Record<string, string>;
1396
+ /** If true, adds Authorization: Bearer header with the resolved API key. */
1397
+ authHeader?: boolean;
1398
+ /** Models to register. If provided, replaces all existing models for this provider. */
1399
+ models?: ProviderModelConfig[];
1400
+ /** OAuth provider for /login support. */
1401
+ oauth?: {
1402
+ /** Display name in login UI. */
1403
+ name: string;
1404
+ /** Run the provider login flow and return credentials (or a plain API key) to persist. */
1405
+ login(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials | string>;
1406
+ /** Refresh expired credentials. */
1407
+ refreshToken?(credentials: OAuthCredentials): Promise<OAuthCredentials>;
1408
+ /** Convert credentials to an API key string for requests. */
1409
+ getApiKey?(credentials: OAuthCredentials): string;
1410
+ /** Optional model rewrite hook for credential-aware routing (e.g., enterprise URLs). */
1411
+ modifyModels?(models: Model<Api>[], credentials: OAuthCredentials): Model<Api>[];
1412
+ };
1413
+ /**
1414
+ * Async factory that fetches the live model list from the provider endpoint.
1415
+ * Runs through the same SQLite model-cache as built-in providers (keyed by
1416
+ * provider name, default 24 h TTL). Receives the resolved API key (undefined
1417
+ * when unauthenticated). Mutually exclusive with `models`.
1418
+ */
1419
+ fetchDynamicModels?: (apiKey: string | undefined) => Promise<readonly ProviderModelConfig[]>;
1420
+ }
1421
+
1422
+ /** Configuration for a model within a provider. */
1423
+ export interface ProviderModelConfig {
1424
+ /** Model ID (e.g., "claude-sonnet-4@20250514"). */
1425
+ id: string;
1426
+ /** Display name (e.g., "Claude Sonnet 4 (Vertex)"). */
1427
+ name: string;
1428
+ /** API type override for this model. */
1429
+ api?: Api;
1430
+ /** Whether the model supports extended thinking at all. */
1431
+ reasoning: boolean;
1432
+ /** Optional canonical thinking capability metadata for per-model effort support. */
1433
+ thinking?: Model["thinking"];
1434
+ /** Supported input types. */
1435
+ input: ("text" | "image")[];
1436
+ /** Cost per million tokens. */
1437
+ cost: { input: number; output: number; cacheRead: number; cacheWrite: number };
1438
+ /** Premium Copilot requests charged per user-initiated request. */
1439
+ premiumMultiplier?: number;
1440
+ /** Maximum context window size in tokens. */
1441
+ contextWindow: number;
1442
+ /** Maximum output tokens. */
1443
+ maxTokens: number;
1444
+ /** Custom headers for this model. */
1445
+ headers?: Record<string, string>;
1446
+ /** OpenAI compatibility settings. */
1447
+ compat?: ModelSpec<Api>["compat"];
1448
+ }
1449
+
1450
+ /** Extension factory function type. Supports both sync and async initialization. */
1451
+ export type ExtensionFactory = (pi: ExtensionAPI) => void | Promise<void>;
1452
+
1453
+ // ============================================================================
1454
+ // Loaded Extension Types
1455
+ // ============================================================================
1456
+
1457
+ export interface RegisteredTool<TParams extends TSchema = TSchema, TDetails = unknown> {
1458
+ definition: ToolDefinition<TParams, TDetails>;
1459
+ extensionPath: string;
1460
+ }
1461
+
1462
+ export interface ExtensionFlag {
1463
+ name: string;
1464
+ description?: string;
1465
+ type: "boolean" | "string";
1466
+ default?: boolean | string;
1467
+ extensionPath: string;
1468
+ }
1469
+
1470
+ export interface ExtensionShortcut {
1471
+ shortcut: KeyId;
1472
+ description?: string;
1473
+ handler: (ctx: ExtensionContext) => Promise<void> | void;
1474
+ extensionPath: string;
1475
+ }
1476
+
1477
+ type HandlerFn = (...args: unknown[]) => Promise<unknown>;
1478
+
1479
+ export type SendMessageHandler = <T = unknown>(
1480
+ message: CustomMessagePayload<T>,
1481
+ /**
1482
+ * `deliverAs: "nextTurn"` queues hidden custom context for the next turn.
1483
+ * When paired with `triggerTurn: true` during prompt teardown, the session schedules
1484
+ * an internal continuation without surfacing the message in the editable pending queue.
1485
+ */
1486
+ options?: { triggerTurn?: boolean; deliverAs?: "steer" | "followUp" | "nextTurn" },
1487
+ ) => void;
1488
+
1489
+ export type SendUserMessageHandler = (
1490
+ content: string | (TextContent | ImageContent)[],
1491
+ options?: { deliverAs?: "steer" | "followUp" },
1492
+ ) => void;
1493
+
1494
+ export type AppendEntryHandler = <T = unknown>(customType: string, data?: T) => void;
1495
+
1496
+ export type GetActiveToolsHandler = () => string[];
1497
+
1498
+ export type GetAllToolsHandler = () => ToolInfo[];
1499
+
1500
+ export type GetCommandsHandler = () => SlashCommandInfo[];
1501
+
1502
+ export type SetActiveToolsHandler = (toolNames: string[]) => Promise<void>;
1503
+
1504
+ export type SetModelHandler = (model: Model) => Promise<boolean>;
1505
+
1506
+ export type GetThinkingLevelHandler = () => ThinkingLevel | undefined;
1507
+
1508
+ export type SetThinkingLevelHandler = (level: ThinkingLevel, persist?: boolean) => void;
1509
+
1510
+ export type GetServiceTiersHandler = () => ServiceTierByFamily;
1511
+
1512
+ export type SetServiceTierHandler = (family: ServiceTierFamily, tier: ServiceTier | undefined) => void;
1513
+
1514
+ /** Shared state created by loader, used during registration and runtime. */
1515
+ export interface ExtensionRuntimeState {
1516
+ flagValues: Map<string, boolean | string>;
1517
+ /** Provider registrations queued during extension loading, processed during session initialization */
1518
+ pendingProviderRegistrations: Array<{ name: string; config: ProviderConfig; sourceId: string }>;
1519
+ }
1520
+
1521
+ /** Action implementations for ExtensionAPI methods. */
1522
+ export interface ExtensionActions {
1523
+ sendMessage: SendMessageHandler;
1524
+ sendUserMessage: SendUserMessageHandler;
1525
+ appendEntry: AppendEntryHandler;
1526
+ setLabel: (targetId: string, label: string | undefined) => void;
1527
+ getActiveTools: GetActiveToolsHandler;
1528
+ getAllTools: GetAllToolsHandler;
1529
+ setActiveTools: SetActiveToolsHandler;
1530
+ getCommands: GetCommandsHandler;
1531
+ setModel: SetModelHandler;
1532
+ getThinkingLevel: GetThinkingLevelHandler;
1533
+ setThinkingLevel: SetThinkingLevelHandler;
1534
+ getServiceTiers?: GetServiceTiersHandler;
1535
+ setServiceTier?: SetServiceTierHandler;
1536
+ getSessionName: () => string | undefined;
1537
+ setSessionName: (name: string) => Promise<void>;
1538
+ }
1539
+
1540
+ /** Actions for ExtensionContext (ctx.* in event handlers). */
1541
+ export interface ExtensionContextActions {
1542
+ getModel: () => Model | undefined;
1543
+ isIdle: () => boolean;
1544
+ abort: () => void;
1545
+ hasPendingMessages: () => boolean;
1546
+ shutdown: () => void;
1547
+ getContextUsage: () => ContextUsage | undefined;
1548
+ compact: (instructionsOrOptions?: string | CompactOptions) => Promise<void>;
1549
+ getSystemPrompt: () => string[];
1550
+ }
1551
+
1552
+ /** Actions for ExtensionCommandContext (ctx.* in command handlers). */
1553
+ export interface ExtensionCommandContextActions {
1554
+ getContextUsage: () => ContextUsage | undefined;
1555
+ waitForIdle: () => Promise<void>;
1556
+ newSession: (options?: {
1557
+ parentSession?: string;
1558
+ setup?: (sessionManager: SessionManager) => Promise<void>;
1559
+ }) => Promise<{ cancelled: boolean }>;
1560
+ branch: (entryId: string) => Promise<{ cancelled: boolean }>;
1561
+ navigateTree: (targetId: string, options?: { summarize?: boolean }) => Promise<{ cancelled: boolean }>;
1562
+ compact: (instructionsOrOptions?: string | CompactOptions) => Promise<void>;
1563
+ switchSession: (sessionPath: string) => Promise<{ cancelled: boolean }>;
1564
+ reload: () => Promise<void>;
1565
+ }
1566
+
1567
+ /** Full runtime = state + actions, including host-compatible service-tier fallbacks. */
1568
+ export interface ExtensionRuntime extends ExtensionRuntimeState, ExtensionActions {
1569
+ getServiceTiers: GetServiceTiersHandler;
1570
+ setServiceTier: SetServiceTierHandler;
1571
+ }
1572
+
1573
+ /** Loaded extension with all registered items. */
1574
+ export interface Extension {
1575
+ path: string;
1576
+ resolvedPath: string;
1577
+ label?: string;
1578
+ handlers: Map<string, HandlerFn[]>;
1579
+ tools: Map<string, RegisteredTool<any, any>>;
1580
+ assistantThinkingRenderers: AssistantThinkingRenderer[];
1581
+ messageRenderers: Map<string, MessageRenderer>;
1582
+ commands: Map<string, RegisteredCommand>;
1583
+ flags: Map<string, ExtensionFlag>;
1584
+ shortcuts: Map<KeyId, ExtensionShortcut>;
1585
+ }
1586
+
1587
+ /** Result of loading extensions. */
1588
+ export interface LoadExtensionsResult {
1589
+ extensions: Extension[];
1590
+ errors: Array<{ path: string; error: string }>;
1591
+ runtime: ExtensionRuntime;
1592
+ }
1593
+
1594
+ // ============================================================================
1595
+ // Extension Error
1596
+ // ============================================================================
1597
+
1598
+ export interface ExtensionError {
1599
+ extensionPath: string;
1600
+ event: string;
1601
+ error: string;
1602
+ stack?: string;
1603
+ }