@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,1460 @@
1
+ /**
2
+ * Compatibility shim for legacy extensions importing the package root of
3
+ * `@oh-my-pi/pi-coding-agent` (or one of its aliased scopes like
4
+ * `@earendil-works/pi-coding-agent` or `@mariozechner/pi-coding-agent`).
5
+ *
6
+ * The coding-agent package's own barrel (`./src/index.ts`) cannot be listed
7
+ * as a `bun --compile` extra entrypoint alongside the CLI entry without
8
+ * silently breaking the main binary's startup (see issue #1474 follow-up).
9
+ * Routing legacy plugin imports through this sibling shim sidesteps that
10
+ * conflict: bun bundles a distinct entry whose path differs from the CLI
11
+ * entry, while still re-exporting the canonical surface so plugins observe
12
+ * the same module identity as a direct `@oh-my-pi/pi-coding-agent` import.
13
+ */
14
+
15
+ import { Database } from "bun:sqlite";
16
+ import * as fs from "node:fs";
17
+ import * as path from "node:path";
18
+ import type { AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
19
+ import { type AuthCredential, SqliteAuthCredentialStore, type TSchema } from "@oh-my-pi/pi-ai";
20
+ import { piEscapeRegexLiteral, piJoinPath } from "@oh-my-pi/pi-ai/providers/cursor-pi-args";
21
+ import { getKeybindings, type Keybinding, Text } from "@oh-my-pi/pi-tui";
22
+ import {
23
+ getAgentDbPath,
24
+ getAgentDir,
25
+ getProjectDir,
26
+ isCompiledBinary,
27
+ parseFrontmatter as parseOmpFrontmatter,
28
+ } from "@oh-my-pi/pi-utils";
29
+ import { getPackageDir as getOmpPackageDir } from "../config";
30
+ import { formatKeyHints } from "../config/keybindings";
31
+ import type { PromptTemplate } from "../config/prompt-templates";
32
+ import { type SettingPath, Settings } from "../config/settings";
33
+ import { EditTool } from "../edit";
34
+ import type { CreateAgentSessionOptions, CreateAgentSessionResult, LoadExtensionsResult } from "../sdk";
35
+ import {
36
+ discoverContextFiles,
37
+ discoverPromptTemplates,
38
+ discoverSessionExtensionPaths,
39
+ discoverSkills,
40
+ createAgentSession as ompCreateAgentSession,
41
+ } from "../sdk";
42
+ import {
43
+ DEFAULT_MAX_BYTES,
44
+ DEFAULT_MAX_LINES,
45
+ type TruncationResult,
46
+ truncateHead,
47
+ truncateTail,
48
+ } from "../session/streaming-output";
49
+ import type { Tool, ToolSession } from "../tools";
50
+ import { BashTool } from "../tools/bash";
51
+ import { GlobTool } from "../tools/glob";
52
+ import { GrepTool } from "../tools/grep";
53
+ import { ReadTool } from "../tools/read";
54
+ import { formatBytes } from "../tools/render-utils";
55
+ import { WriteTool } from "../tools/write";
56
+ import { EventBus } from "../utils/event-bus";
57
+ import { convertImageToPng } from "../utils/image-loading";
58
+ import { discoverExtensionPaths, loadExtensionFromFactory, loadExtensions } from "./extensions";
59
+ import { ExtensionRuntime } from "./extensions/loader";
60
+ import type { ExtensionFactory, ToolDefinition } from "./extensions/types";
61
+ import { Type } from "./legacy-typebox";
62
+ import { getEnabledPlugins, resolvePluginExtensionPaths, type ScopedInstalledPlugin } from "./plugins/loader";
63
+ import type { Skill } from "./skills";
64
+ import { loadSkillsFromDir } from "./skills";
65
+
66
+ const TOOL_DEFINITION_MARKER = "__isToolDefinition";
67
+ const LEGACY_BUILTIN_TOOL_MARKER = "__ompLegacyBuiltinTool";
68
+ const LEGACY_CODING_TOOL_NAMES = ["read", "bash", "edit", "write"] as const;
69
+ const LEGACY_READ_ONLY_TOOL_NAMES = ["read", "grep", "find", "ls"] as const;
70
+
71
+ type LegacyCodingToolName = (typeof LEGACY_CODING_TOOL_NAMES)[number];
72
+ type LegacyRegistryToolName = LegacyCodingToolName | "grep" | "glob";
73
+ type LegacyBuiltinToolDefinition = ToolDefinition & { [LEGACY_BUILTIN_TOOL_MARKER]: true };
74
+
75
+ type LegacySettingOverrides = Partial<Record<SettingPath, unknown>>;
76
+
77
+ interface LegacyThemeLike {
78
+ fg(color: string, text: string): string;
79
+ bold(text: string): string;
80
+ }
81
+
82
+ export interface BashSpawnContext {
83
+ command: string;
84
+ cwd: string;
85
+ env: NodeJS.ProcessEnv;
86
+ }
87
+
88
+ export type BashSpawnHook = (context: BashSpawnContext) => BashSpawnContext;
89
+
90
+ export interface BashOperations {
91
+ exec: (
92
+ command: string,
93
+ cwd: string,
94
+ options: {
95
+ onData: (data: Buffer) => void;
96
+ signal?: AbortSignal;
97
+ timeout?: number;
98
+ env?: NodeJS.ProcessEnv;
99
+ },
100
+ ) => Promise<{ exitCode: number | null }>;
101
+ }
102
+
103
+ export interface BashToolOptions {
104
+ operations?: BashOperations;
105
+ commandPrefix?: string;
106
+ spawnHook?: BashSpawnHook;
107
+ }
108
+
109
+ export interface ReadToolOptions {
110
+ /** Auto-resize large images; maps onto the `images.autoResize` setting. Default: true. */
111
+ autoResizeImages?: boolean;
112
+ }
113
+
114
+ export interface GrepToolOptions {
115
+ /**
116
+ * Unsupported. The historical grep operations seam (isDirectory/readFile for
117
+ * context lines) never delegated the search itself — ripgrep always ran
118
+ * locally — and the built-in native grep tool exposes no filesystem seam at
119
+ * all. Supplying operations throws at tool creation instead of silently
120
+ * searching the local filesystem.
121
+ */
122
+ operations?: unknown;
123
+ }
124
+
125
+ export interface FindOperations {
126
+ exists: (absolutePath: string) => Promise<boolean> | boolean;
127
+ glob: (pattern: string, cwd: string, options: { ignore: string[]; limit: number }) => Promise<string[]> | string[];
128
+ }
129
+
130
+ export interface FindToolOptions {
131
+ operations?: FindOperations;
132
+ }
133
+
134
+ export interface LsOperations {
135
+ exists: (absolutePath: string) => Promise<boolean> | boolean;
136
+ stat: (absolutePath: string) => Promise<{ isDirectory(): boolean }> | { isDirectory(): boolean };
137
+ readdir: (absolutePath: string) => Promise<string[]> | string[];
138
+ }
139
+
140
+ export interface LsToolOptions {
141
+ operations?: LsOperations;
142
+ }
143
+
144
+ export interface EditOperations {
145
+ readFile: (absolutePath: string) => Promise<Buffer>;
146
+ writeFile: (absolutePath: string, content: string) => Promise<void>;
147
+ access: (absolutePath: string) => Promise<void>;
148
+ }
149
+
150
+ export interface EditToolOptions {
151
+ operations?: EditOperations;
152
+ }
153
+
154
+ export interface WriteOperations {
155
+ writeFile: (absolutePath: string, content: string) => Promise<void>;
156
+ mkdir: (dir: string) => Promise<void>;
157
+ }
158
+
159
+ export interface WriteToolOptions {
160
+ operations?: WriteOperations;
161
+ }
162
+
163
+ const legacyBashSchema = Type.Object({
164
+ command: Type.String({ description: "Bash command to execute" }),
165
+ timeout: Type.Optional(Type.Number({ description: "Timeout in seconds" })),
166
+ });
167
+
168
+ const legacyReadSchema = Type.Object({
169
+ path: Type.String({ description: "Path to read" }),
170
+ offset: Type.Optional(Type.Number({ description: "1-based line offset" })),
171
+ limit: Type.Optional(Type.Number({ description: "Maximum lines to read" })),
172
+ });
173
+
174
+ const legacyGrepSchema = Type.Object({
175
+ pattern: Type.String({ description: "Search pattern" }),
176
+ path: Type.Optional(Type.String({ description: "Directory or file to search" })),
177
+ glob: Type.Optional(Type.String({ description: "Glob filter" })),
178
+ ignoreCase: Type.Optional(Type.Boolean({ description: "Case-insensitive search" })),
179
+ literal: Type.Optional(Type.Boolean({ description: "Treat pattern as a literal string" })),
180
+ context: Type.Optional(Type.Number({ description: "Context lines" })),
181
+ });
182
+
183
+ const legacyFindSchema = Type.Object({
184
+ pattern: Type.String({ description: "Glob pattern to match files" }),
185
+ path: Type.Optional(Type.String({ description: "Directory to search" })),
186
+ limit: Type.Optional(Type.Number({ description: "Maximum results" })),
187
+ });
188
+
189
+ const legacyLsSchema = Type.Object({
190
+ path: Type.Optional(Type.String({ description: "Directory to list" })),
191
+ limit: Type.Optional(Type.Number({ description: "Maximum entries" })),
192
+ });
193
+
194
+ function markToolDefinition<TParams extends TSchema, TDetails>(
195
+ tool: ToolDefinition<TParams, TDetails>,
196
+ ): ToolDefinition<TParams, TDetails> {
197
+ Object.defineProperty(tool, TOOL_DEFINITION_MARKER, {
198
+ value: true,
199
+ enumerable: false,
200
+ writable: false,
201
+ configurable: true,
202
+ });
203
+ return tool;
204
+ }
205
+
206
+ function legacyToolSession(cwd: string, settingOverrides?: LegacySettingOverrides): ToolSession {
207
+ return {
208
+ cwd,
209
+ hasUI: false,
210
+ getSessionFile: () => null,
211
+ getSessionSpawns: () => null,
212
+ settings: Settings.isolated(settingOverrides),
213
+ };
214
+ }
215
+
216
+ function createRegistryTool(
217
+ cwd: string,
218
+ name: LegacyRegistryToolName,
219
+ settingOverrides?: LegacySettingOverrides,
220
+ ): Tool {
221
+ const session = legacyToolSession(cwd, settingOverrides);
222
+ switch (name) {
223
+ case "bash":
224
+ return new BashTool(session);
225
+ case "edit":
226
+ return new EditTool(session);
227
+ case "glob":
228
+ return new GlobTool(session);
229
+ case "grep":
230
+ return new GrepTool(session);
231
+ case "read":
232
+ return new ReadTool(session);
233
+ case "write":
234
+ return new WriteTool(session);
235
+ }
236
+ }
237
+
238
+ async function executeBuiltinTool(
239
+ cwd: string,
240
+ name: LegacyCodingToolName,
241
+ toolCallId: string,
242
+ params: unknown,
243
+ signal: AbortSignal | undefined,
244
+ onUpdate: AgentToolUpdateCallback | undefined,
245
+ ) {
246
+ const tool = createRegistryTool(cwd, name);
247
+ return tool.execute(toolCallId, params, signal, onUpdate);
248
+ }
249
+
250
+ function legacyBuiltinTool(cwd: string, name: LegacyCodingToolName): ToolDefinition {
251
+ const tool = createRegistryTool(cwd, name);
252
+ const definition: LegacyBuiltinToolDefinition = {
253
+ name: tool.name,
254
+ label: tool.label,
255
+ description: tool.description,
256
+ parameters: tool.parameters,
257
+ hidden: tool.hidden,
258
+ deferrable: tool.deferrable,
259
+ approval: tool.approval,
260
+ execute: (toolCallId, params, signal, onUpdate) =>
261
+ executeBuiltinTool(cwd, name, toolCallId, params, signal, onUpdate),
262
+ [LEGACY_BUILTIN_TOOL_MARKER]: true,
263
+ };
264
+ return markToolDefinition(definition);
265
+ }
266
+
267
+ function stringField(value: unknown, key: string): string | undefined {
268
+ if (value === null || typeof value !== "object") return undefined;
269
+ const field = Reflect.get(value, key);
270
+ return typeof field === "string" ? field : undefined;
271
+ }
272
+
273
+ function numberField(value: unknown, key: string): number | undefined {
274
+ if (value === null || typeof value !== "object") return undefined;
275
+ const field = Reflect.get(value, key);
276
+ return typeof field === "number" ? field : undefined;
277
+ }
278
+
279
+ function booleanField(value: unknown, key: string): boolean | undefined {
280
+ if (value === null || typeof value !== "object") return undefined;
281
+ const field = Reflect.get(value, key);
282
+ return typeof field === "boolean" ? field : undefined;
283
+ }
284
+
285
+ function isLegacyThemeLike(value: unknown): value is LegacyThemeLike {
286
+ if (value === null || typeof value !== "object") return false;
287
+ return typeof Reflect.get(value, "fg") === "function" && typeof Reflect.get(value, "bold") === "function";
288
+ }
289
+
290
+ function renderTheme(second: unknown, third: unknown): LegacyThemeLike | undefined {
291
+ if (isLegacyThemeLike(second)) return second;
292
+ if (isLegacyThemeLike(third)) return third;
293
+ return undefined;
294
+ }
295
+
296
+ function themedTitle(theme: LegacyThemeLike | undefined, title: string): string {
297
+ return theme ? theme.fg("toolTitle", theme.bold(title)) : title;
298
+ }
299
+
300
+ function themedMuted(theme: LegacyThemeLike | undefined, text: string): string {
301
+ return theme ? theme.fg("toolOutput", text) : text;
302
+ }
303
+
304
+ function textResult(result: AgentToolResult<unknown> | undefined): string {
305
+ return result?.content.find(block => block.type === "text")?.text ?? "";
306
+ }
307
+
308
+ function legacyRenderResult(result: AgentToolResult<unknown>, _options: unknown, themeArg: unknown): Text {
309
+ const theme = renderTheme(themeArg, undefined);
310
+ const output = textResult(result);
311
+ return new Text(output ? `\n${themedMuted(theme, output)}` : "", 0, 0);
312
+ }
313
+
314
+ function lineRangePath(readPath: string, offset: number | undefined, limit: number | undefined): string {
315
+ if (offset === undefined && limit === undefined) return readPath;
316
+ const start = Math.max(1, Math.floor(offset ?? 1));
317
+ if (limit === undefined) return `${readPath}:${start}`;
318
+ const end = Math.max(start, start + Math.max(1, Math.floor(limit)) - 1);
319
+ return `${readPath}:${start}-${end}`;
320
+ }
321
+
322
+ function normalizeLegacyLimit(limit: number | undefined, fallback: number): number {
323
+ if (limit === undefined || !Number.isFinite(limit)) return fallback;
324
+ return Math.max(1, Math.floor(limit));
325
+ }
326
+
327
+ function appendStatus(text: string, status: string): string {
328
+ return text ? `${text}\n\n${status}` : status;
329
+ }
330
+
331
+ function legacyBashSnapshot(output: string): { text: string; details?: { truncation: TruncationResult } } {
332
+ const truncation = truncateTail(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });
333
+ if (!truncation.truncated) {
334
+ return { text: truncation.content };
335
+ }
336
+ const startLine = truncation.totalLines - (truncation.outputLines ?? 0) + 1;
337
+ const note =
338
+ truncation.truncatedBy === "lines"
339
+ ? `Showing lines ${startLine}-${truncation.totalLines} of ${truncation.totalLines}`
340
+ : `Showing lines ${startLine}-${truncation.totalLines} of ${truncation.totalLines} (${formatBytes(DEFAULT_MAX_BYTES)} limit)`;
341
+ return {
342
+ text: `${truncation.content}\n\n[${note}]`,
343
+ details: { truncation },
344
+ };
345
+ }
346
+
347
+ async function executeLegacyBashOperations(
348
+ operations: BashOperations,
349
+ spawn: BashSpawnContext,
350
+ timeout: number | undefined,
351
+ signal: AbortSignal | undefined,
352
+ onUpdate: AgentToolUpdateCallback | undefined,
353
+ ): Promise<AgentToolResult> {
354
+ let output = "";
355
+ const onData = (data: Buffer) => {
356
+ output += data.toString("utf8");
357
+ if (onUpdate) {
358
+ const snapshot = legacyBashSnapshot(output);
359
+ onUpdate({ content: [{ type: "text", text: snapshot.text }], details: snapshot.details });
360
+ }
361
+ };
362
+ try {
363
+ const result = await operations.exec(spawn.command, spawn.cwd, {
364
+ onData,
365
+ signal,
366
+ timeout,
367
+ env: spawn.env,
368
+ });
369
+ const snapshot = legacyBashSnapshot(output);
370
+ const text = snapshot.text || "(no output)";
371
+ if (result.exitCode !== 0 && result.exitCode !== null) {
372
+ throw new Error(appendStatus(text, `Command exited with code ${result.exitCode}`));
373
+ }
374
+ return { content: [{ type: "text", text }], details: snapshot.details };
375
+ } catch (err) {
376
+ const snapshot = legacyBashSnapshot(output);
377
+ const text = snapshot.text;
378
+ if (err instanceof Error && err.message === "aborted") {
379
+ throw new Error(appendStatus(text, "Command aborted"));
380
+ }
381
+ if (err instanceof Error && err.message.startsWith("timeout:")) {
382
+ throw new Error(appendStatus(text, `Command timed out after ${err.message.slice("timeout:".length)} seconds`));
383
+ }
384
+ throw err;
385
+ }
386
+ }
387
+
388
+ /**
389
+ * Convert an image attachment to PNG using the legacy package-root contract.
390
+ *
391
+ * Invalid or unsupported image data returns `null`, matching Pi's historical
392
+ * helper instead of surfacing Bun's decoder error to extensions.
393
+ */
394
+ export async function convertToPng(
395
+ base64Data: string,
396
+ mimeType: string,
397
+ ): Promise<{ data: string; mimeType: string } | null> {
398
+ if (mimeType === "image/png") {
399
+ return { data: base64Data, mimeType };
400
+ }
401
+
402
+ try {
403
+ const converted = await convertImageToPng({ type: "image", data: base64Data, mimeType });
404
+ return { data: converted.data, mimeType: converted.mimeType };
405
+ } catch {
406
+ return null;
407
+ }
408
+ }
409
+
410
+ /** Format the active shortcut for legacy extensions that render keybinding hints. */
411
+ export function keyText(action: Keybinding): string {
412
+ return formatKeyHints(getKeybindings().getKeys(action));
413
+ }
414
+
415
+ /** Parse frontmatter using the historical Pi package-root helper. */
416
+ export interface ParsedFrontmatter<T extends Record<string, unknown> = Record<string, unknown>> {
417
+ frontmatter: T;
418
+ body: string;
419
+ }
420
+
421
+ /** Parse YAML frontmatter and throw on invalid metadata. */
422
+ export function parseFrontmatter<T extends Record<string, unknown> = Record<string, unknown>>(
423
+ content: string,
424
+ ): ParsedFrontmatter<T> {
425
+ const { frontmatter, body } = parseOmpFrontmatter(content, { level: "fatal" });
426
+ return { frontmatter: frontmatter as T, body };
427
+ }
428
+
429
+ /** Return content without YAML frontmatter. */
430
+ export function stripFrontmatter(content: string): string {
431
+ return parseFrontmatter(content).body;
432
+ }
433
+
434
+ /** Mark an extension-authored tool as a Pi-compatible tool definition. */
435
+ export function defineTool<TParams extends TSchema = TSchema, TDetails = unknown>(
436
+ tool: ToolDefinition<TParams, TDetails>,
437
+ ): ToolDefinition<TParams, TDetails> {
438
+ return markToolDefinition(tool);
439
+ }
440
+
441
+ /** Create the legacy read tool definition. */
442
+ export function createReadToolDefinition(cwd: string, options?: ReadToolOptions): ToolDefinition {
443
+ const tool = createRegistryTool(
444
+ cwd,
445
+ "read",
446
+ options?.autoResizeImages === undefined ? undefined : { "images.autoResize": options.autoResizeImages },
447
+ );
448
+ return markToolDefinition({
449
+ name: "read",
450
+ label: "Read",
451
+ description: tool.description,
452
+ parameters: legacyReadSchema,
453
+ approval: "read",
454
+ renderCall: (params, options, themeArg) => {
455
+ const theme = renderTheme(options, themeArg);
456
+ const readPath = stringField(params, "path") ?? "";
457
+ return new Text(`${themedTitle(theme, "read")} ${themedMuted(theme, readPath)}`, 0, 0);
458
+ },
459
+ renderResult: legacyRenderResult,
460
+ execute: (toolCallId, params, signal, onUpdate) => {
461
+ const readPath = stringField(params, "path") ?? "";
462
+ const pathWithRange = lineRangePath(readPath, numberField(params, "offset"), numberField(params, "limit"));
463
+ return tool.execute(toolCallId, { path: pathWithRange }, signal, onUpdate);
464
+ },
465
+ });
466
+ }
467
+
468
+ /** Create the legacy read tool. */
469
+ export function createReadTool(cwd: string, options?: ReadToolOptions): ToolDefinition {
470
+ return createReadToolDefinition(cwd, options);
471
+ }
472
+
473
+ /** Create the legacy bash tool definition. */
474
+ export function createBashToolDefinition(cwd: string, options?: BashToolOptions): ToolDefinition {
475
+ const tool = createRegistryTool(cwd, "bash");
476
+ return markToolDefinition({
477
+ name: "bash",
478
+ label: "Bash",
479
+ description: tool.description,
480
+ parameters: legacyBashSchema,
481
+ approval: "exec",
482
+ renderCall: (params, optionsArg, themeArg) => {
483
+ const theme = renderTheme(optionsArg, themeArg);
484
+ const command = stringField(params, "command") ?? "";
485
+ return new Text(`${themedTitle(theme, "bash")} ${themedMuted(theme, command)}`, 0, 0);
486
+ },
487
+ renderResult: legacyRenderResult,
488
+ execute: (toolCallId, params, signal, onUpdate) => {
489
+ const rawCommand = stringField(params, "command") ?? "";
490
+ const command = options?.commandPrefix ? `${options.commandPrefix}\n${rawCommand}` : rawCommand;
491
+ const timeout = numberField(params, "timeout");
492
+ const spawn = options?.spawnHook?.({ command, cwd, env: process.env });
493
+ if (options?.operations) {
494
+ return executeLegacyBashOperations(
495
+ options.operations,
496
+ { command: spawn?.command ?? command, cwd: spawn?.cwd ?? cwd, env: spawn?.env ?? process.env },
497
+ timeout,
498
+ signal,
499
+ onUpdate,
500
+ );
501
+ }
502
+ return tool.execute(
503
+ toolCallId,
504
+ {
505
+ command: spawn?.command ?? command,
506
+ cwd: spawn?.cwd ?? cwd,
507
+ env: spawn?.env,
508
+ timeout,
509
+ },
510
+ signal,
511
+ onUpdate,
512
+ );
513
+ },
514
+ });
515
+ }
516
+
517
+ /** Create the legacy bash tool. */
518
+ export function createBashTool(cwd: string, options?: BashToolOptions): ToolDefinition {
519
+ return createBashToolDefinition(cwd, options);
520
+ }
521
+
522
+ /** Create the legacy grep tool definition. */
523
+ export function createGrepToolDefinition(cwd: string, options?: GrepToolOptions): ToolDefinition {
524
+ if (options?.operations) {
525
+ throw new Error(
526
+ "Legacy GrepToolOptions.operations is not supported: the built-in grep tool searches the local " +
527
+ "filesystem natively and exposes no pluggable filesystem seam (the historical seam only customized " +
528
+ "context-line reads; the search itself always ran locally). Register a custom grep tool via " +
529
+ "defineTool() instead of passing operations to createGrepTool()/createGrepToolDefinition().",
530
+ );
531
+ }
532
+ const tool = createRegistryTool(cwd, "grep");
533
+ return markToolDefinition({
534
+ name: "grep",
535
+ label: "grep",
536
+ description: "Search file contents for a pattern.",
537
+ parameters: legacyGrepSchema,
538
+ approval: "read",
539
+ renderCall: (params, optionsArg, themeArg) => {
540
+ const theme = renderTheme(optionsArg, themeArg);
541
+ const pattern = stringField(params, "pattern") ?? "";
542
+ const searchPath = stringField(params, "path") ?? ".";
543
+ return new Text(`${themedTitle(theme, "grep")} ${themedMuted(theme, `/${pattern}/ in ${searchPath}`)}`, 0, 0);
544
+ },
545
+ renderResult: legacyRenderResult,
546
+ execute: (toolCallId, params, signal, onUpdate) => {
547
+ const rawPattern = stringField(params, "pattern") ?? "";
548
+ const pattern = booleanField(params, "literal") ? piEscapeRegexLiteral(rawPattern) : rawPattern;
549
+ const searchPath = stringField(params, "path") ?? ".";
550
+ const glob = stringField(params, "glob");
551
+ const context = numberField(params, "context");
552
+ // The new grep reads context from settings fixed at construction; build a
553
+ // per-call tool when the model passes an explicit legacy `context`.
554
+ const grepTool =
555
+ context === undefined
556
+ ? tool
557
+ : createRegistryTool(cwd, "grep", {
558
+ "grep.contextBefore": Math.max(0, Math.floor(context)),
559
+ "grep.contextAfter": Math.max(0, Math.floor(context)),
560
+ });
561
+ return grepTool.execute(
562
+ toolCallId,
563
+ {
564
+ pattern,
565
+ path: glob ? piJoinPath(searchPath, glob) : searchPath,
566
+ case: booleanField(params, "ignoreCase") ? false : undefined,
567
+ },
568
+ signal,
569
+ onUpdate,
570
+ );
571
+ },
572
+ });
573
+ }
574
+
575
+ /** Create the legacy grep tool. */
576
+ export function createGrepTool(cwd: string, options?: GrepToolOptions): ToolDefinition {
577
+ return createGrepToolDefinition(cwd, options);
578
+ }
579
+
580
+ /** Create the legacy find tool definition. */
581
+ export function createFindToolDefinition(cwd: string, options?: FindToolOptions): ToolDefinition {
582
+ const tool = createRegistryTool(cwd, "glob");
583
+ return markToolDefinition({
584
+ name: "find",
585
+ label: "find",
586
+ description: "Find files by glob pattern.",
587
+ parameters: legacyFindSchema,
588
+ approval: "read",
589
+ renderCall: (params, optionsArg, themeArg) => {
590
+ const theme = renderTheme(optionsArg, themeArg);
591
+ const pattern = stringField(params, "pattern") ?? "";
592
+ const searchPath = stringField(params, "path") ?? ".";
593
+ return new Text(`${themedTitle(theme, "find")} ${themedMuted(theme, `${pattern} in ${searchPath}`)}`, 0, 0);
594
+ },
595
+ renderResult: legacyRenderResult,
596
+ execute: async (toolCallId, params, signal, onUpdate) => {
597
+ const pattern = stringField(params, "pattern") ?? "*";
598
+ const searchPath = stringField(params, "path") ?? ".";
599
+ const limit = normalizeLegacyLimit(numberField(params, "limit"), 1000);
600
+ const absolutePath = path.resolve(cwd, searchPath);
601
+ if (options?.operations) {
602
+ if (!(await options.operations.exists(absolutePath))) {
603
+ throw new Error(`Path not found: ${absolutePath}`);
604
+ }
605
+ const matches = await options.operations.glob(pattern, absolutePath, {
606
+ ignore: ["**/node_modules/**", "**/.git/**"],
607
+ limit,
608
+ });
609
+ const output = matches
610
+ .map(match => {
611
+ const rel = path.isAbsolute(match) ? path.relative(absolutePath, match) : match;
612
+ return rel.split(path.sep).join("/");
613
+ })
614
+ .join("\n");
615
+ const truncation = truncateHead(output, { maxLines: Number.MAX_SAFE_INTEGER });
616
+ return {
617
+ content: [{ type: "text", text: truncation.content || "No files found matching pattern" }],
618
+ details: truncation.truncated ? { truncation } : undefined,
619
+ };
620
+ }
621
+ return tool.execute(
622
+ toolCallId,
623
+ { path: piJoinPath(searchPath, pattern), hidden: true, gitignore: true, limit },
624
+ signal,
625
+ onUpdate,
626
+ );
627
+ },
628
+ });
629
+ }
630
+
631
+ /** Create the legacy find tool. */
632
+ export function createFindTool(cwd: string, options?: FindToolOptions): ToolDefinition {
633
+ return createFindToolDefinition(cwd, options);
634
+ }
635
+
636
+ /** Create the legacy ls tool definition. */
637
+ export function createLsToolDefinition(cwd: string, options?: LsToolOptions): ToolDefinition {
638
+ return markToolDefinition({
639
+ name: "ls",
640
+ label: "ls",
641
+ description: "List directory entries.",
642
+ parameters: legacyLsSchema,
643
+ approval: "read",
644
+ renderCall: (params, optionsArg, themeArg) => {
645
+ const theme = renderTheme(optionsArg, themeArg);
646
+ return new Text(`${themedTitle(theme, "ls")} ${themedMuted(theme, stringField(params, "path") ?? ".")}`, 0, 0);
647
+ },
648
+ renderResult: legacyRenderResult,
649
+ execute: async (_toolCallId, params, _signal, _onUpdate) => {
650
+ const rawPath = stringField(params, "path") ?? ".";
651
+ const limit = normalizeLegacyLimit(numberField(params, "limit"), 500);
652
+ const absolutePath = path.resolve(cwd, rawPath);
653
+ const ops = options?.operations;
654
+ const exists = ops
655
+ ? await ops.exists(absolutePath)
656
+ : await fs.promises.stat(absolutePath).then(
657
+ () => true,
658
+ () => false,
659
+ );
660
+ if (!exists) throw new Error(`Path not found: ${absolutePath}`);
661
+ const stat = ops ? await ops.stat(absolutePath) : await fs.promises.stat(absolutePath);
662
+ if (!stat.isDirectory()) {
663
+ return { content: [{ type: "text", text: rawPath }] };
664
+ }
665
+ const entries = ops ? await ops.readdir(absolutePath) : await fs.promises.readdir(absolutePath);
666
+ const sorted = [...entries].sort((a, b) => a.localeCompare(b));
667
+ const limited = sorted.slice(0, limit);
668
+ const output = limited.join("\n");
669
+ const details = sorted.length > limited.length ? { entryLimitReached: limit } : undefined;
670
+ const suffix = details ? `\n\n[${limit} entries limit reached]` : "";
671
+ return { content: [{ type: "text", text: `${output}${suffix}` }], details };
672
+ },
673
+ });
674
+ }
675
+
676
+ /** Create the legacy ls tool. */
677
+ export function createLsTool(cwd: string, options?: LsToolOptions): ToolDefinition {
678
+ return createLsToolDefinition(cwd, options);
679
+ }
680
+
681
+ /** Create the legacy edit tool definition. */
682
+ export function createEditToolDefinition(cwd: string, options?: EditToolOptions): ToolDefinition {
683
+ if (options?.operations) {
684
+ throw new Error(
685
+ "Legacy EditToolOptions.operations is not supported: OMP's built-in edit tool writes the local " +
686
+ "filesystem natively and exposes no pluggable operations seam. Register a custom edit tool via " +
687
+ "defineTool() instead of passing operations to createEditTool()/createEditToolDefinition().",
688
+ );
689
+ }
690
+ return legacyBuiltinTool(cwd, "edit");
691
+ }
692
+
693
+ /** Create the legacy edit tool. */
694
+ export function createEditTool(cwd: string, options?: EditToolOptions): ToolDefinition {
695
+ return createEditToolDefinition(cwd, options);
696
+ }
697
+
698
+ /** Create the legacy write tool definition. */
699
+ export function createWriteToolDefinition(cwd: string, options?: WriteToolOptions): ToolDefinition {
700
+ if (options?.operations) {
701
+ throw new Error(
702
+ "Legacy WriteToolOptions.operations is not supported: OMP's built-in write tool writes the local " +
703
+ "filesystem natively and exposes no pluggable operations seam. Register a custom write tool via " +
704
+ "defineTool() instead of passing operations to createWriteTool()/createWriteToolDefinition().",
705
+ );
706
+ }
707
+ return legacyBuiltinTool(cwd, "write");
708
+ }
709
+
710
+ /** Create the legacy write tool. */
711
+ export function createWriteTool(cwd: string, options?: WriteToolOptions): ToolDefinition {
712
+ return createWriteToolDefinition(cwd, options);
713
+ }
714
+
715
+ /** Create legacy read, bash, edit, and write tools. */
716
+ export function createCodingTools(cwd: string): ToolDefinition[] {
717
+ return LEGACY_CODING_TOOL_NAMES.map(name => legacyBuiltinTool(cwd, name));
718
+ }
719
+
720
+ /** Create legacy read, grep, find, and ls tools. */
721
+ export function createReadOnlyTools(cwd: string): ToolDefinition[] {
722
+ return LEGACY_READ_ONLY_TOOL_NAMES.map(name => {
723
+ if (name === "read") return createReadTool(cwd);
724
+ if (name === "grep") return createGrepTool(cwd);
725
+ if (name === "find") return createFindTool(cwd);
726
+ return createLsTool(cwd);
727
+ });
728
+ }
729
+
730
+ export const SettingsManager = {
731
+ create(cwd: string, agentDir?: string): Promise<Settings> {
732
+ return Settings.init({ cwd, agentDir });
733
+ },
734
+
735
+ inMemory(): Settings {
736
+ return Settings.isolated();
737
+ },
738
+ } as const;
739
+
740
+ /** Scope used by the legacy package manager for discovered resources. */
741
+ export type SourceScope = "user" | "project" | "temporary";
742
+
743
+ /** Discovery metadata exposed alongside a legacy package resource path. */
744
+ export interface PathMetadata {
745
+ source: string;
746
+ scope: SourceScope;
747
+ origin: "package" | "top-level";
748
+ baseDir?: string;
749
+ }
750
+
751
+ /** One extension, skill, prompt, or theme resolved by the legacy package manager. */
752
+ export interface ResolvedResource {
753
+ path: string;
754
+ enabled: boolean;
755
+ metadata: PathMetadata;
756
+ }
757
+
758
+ /** Resource groups returned by {@link DefaultPackageManager.resolve}. */
759
+ export interface ResolvedPaths {
760
+ extensions: ResolvedResource[];
761
+ skills: ResolvedResource[];
762
+ prompts: ResolvedResource[];
763
+ themes: ResolvedResource[];
764
+ }
765
+
766
+ /** Action a legacy caller requests when a configured package is unavailable. */
767
+ export type MissingSourceAction = "install" | "skip" | "error";
768
+
769
+ /** Construction inputs accepted by the legacy package manager. */
770
+ export interface DefaultPackageManagerOptions {
771
+ cwd: string;
772
+ agentDir: string;
773
+ settingsManager: Settings | Promise<Settings>;
774
+ }
775
+
776
+ /**
777
+ * Enumerates the extensions OMP would load through the historical package
778
+ * manager surface used by legacy extensions.
779
+ */
780
+ export class DefaultPackageManager {
781
+ #cwd: string;
782
+ #agentDir: string;
783
+ #settingsManager: Settings | Promise<Settings>;
784
+
785
+ constructor(options: DefaultPackageManagerOptions) {
786
+ this.#cwd = options.cwd;
787
+ this.#agentDir = options.agentDir;
788
+ this.#settingsManager = options.settingsManager;
789
+ }
790
+
791
+ /** Resolve enabled extension paths with their OMP plugin provenance. */
792
+ async resolve(_onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths> {
793
+ const settings = await this.#settingsManager;
794
+ const configuredPaths = settings.get("extensions") ?? [];
795
+ const disabledExtensionIds = settings.get("disabledExtensions") ?? [];
796
+ const [extensionPaths, plugins] = await Promise.all([
797
+ discoverExtensionPaths(configuredPaths, this.#cwd, disabledExtensionIds),
798
+ getEnabledPlugins(this.#cwd),
799
+ ]);
800
+ const pluginByExtensionPath = new Map<string, ScopedInstalledPlugin>();
801
+ for (const plugin of plugins) {
802
+ for (const extensionPath of resolvePluginExtensionPaths(plugin)) {
803
+ pluginByExtensionPath.set(path.resolve(extensionPath), plugin);
804
+ }
805
+ }
806
+
807
+ const extensions = extensionPaths.map(extensionPath => {
808
+ const resolvedPath = path.resolve(extensionPath);
809
+ const plugin = pluginByExtensionPath.get(resolvedPath);
810
+ const agentDirRelative = path.relative(path.resolve(this.#agentDir), resolvedPath);
811
+ const metadata: PathMetadata = plugin
812
+ ? {
813
+ source: `npm:${plugin.name}`,
814
+ scope: plugin.scope,
815
+ origin: "package",
816
+ baseDir: plugin.path,
817
+ }
818
+ : {
819
+ source: "auto",
820
+ scope:
821
+ agentDirRelative === "" ||
822
+ (!agentDirRelative.startsWith("..") && !path.isAbsolute(agentDirRelative))
823
+ ? "user"
824
+ : "project",
825
+ origin: "top-level",
826
+ };
827
+ return { path: resolvedPath, enabled: true, metadata };
828
+ });
829
+
830
+ return { extensions, skills: [], prompts: [], themes: [] };
831
+ }
832
+ }
833
+
834
+ /**
835
+ * Resource-loader compatibility layer for legacy pi extensions.
836
+ *
837
+ * Upstream `@earendil-works/pi-coding-agent` centralizes extension / skill /
838
+ * prompt / theme / AGENTS.md discovery inside a `DefaultResourceLoader`
839
+ * instance that the caller constructs, `reload()`s, and hands to
840
+ * `createAgentSession({ resourceLoader })`. Every published version of
841
+ * pi-schedule-prompt (≥0.2.0) and other pi extensions that spawn subagents
842
+ * import the class at module scope; a missing export takes the whole
843
+ * extension down at parse time (issue #4567).
844
+ *
845
+ * OMP does the same discovery inline inside `createAgentSession()`, so this
846
+ * shim intentionally does NOT re-implement pi's ResourceLoader plumbing.
847
+ * Instead the loader captures the caller's intent (`no*` flags, `*Override`
848
+ * callbacks, `additional*Paths`, `extensionFactories`, `settingsManager`,
849
+ * `eventBus`) plus the discovery results, and the sibling `createAgentSession`
850
+ * override below translates them into OMP's native session options
851
+ * (`disableExtensionDiscovery`, `preloadedExtensionPaths`, `extensions`,
852
+ * `skills`, `promptTemplates`, `contextFiles`, `settings`, `eventBus`,
853
+ * `systemPrompt`) before delegating to `../sdk`.
854
+ *
855
+ * The pi surface it emulates is the intersection actually used by real
856
+ * extensions in the wild — themes are silently dropped (OMP has no
857
+ * session-level themes surface); `extendResources`, `loadProjectTrustExtensions`,
858
+ * and provider-trust hooks are omitted.
859
+ */
860
+
861
+ export type ResourceDiagnostic = {
862
+ type: "error" | "warning" | "info";
863
+ message: string;
864
+ path?: string;
865
+ };
866
+
867
+ export interface AgentsFile {
868
+ path: string;
869
+ content: string;
870
+ }
871
+
872
+ /** Marker interface preserved for pi extensions that type against upstream. */
873
+ export interface Theme {
874
+ name: string;
875
+ }
876
+
877
+ export interface DefaultResourceLoaderOptions {
878
+ cwd?: string;
879
+ agentDir?: string;
880
+ settingsManager?: Settings | Promise<Settings>;
881
+ eventBus?: EventBus;
882
+ additionalExtensionPaths?: string[];
883
+ additionalSkillPaths?: string[];
884
+ additionalPromptTemplatePaths?: string[];
885
+ additionalThemePaths?: string[];
886
+ extensionFactories?: ExtensionFactory[];
887
+ noExtensions?: boolean;
888
+ noSkills?: boolean;
889
+ noPromptTemplates?: boolean;
890
+ noThemes?: boolean;
891
+ noContextFiles?: boolean;
892
+ systemPrompt?: string;
893
+ appendSystemPrompt?: string | string[];
894
+ extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;
895
+ skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {
896
+ skills: Skill[];
897
+ diagnostics: ResourceDiagnostic[];
898
+ };
899
+ promptsOverride?: (base: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] }) => {
900
+ prompts: PromptTemplate[];
901
+ diagnostics: ResourceDiagnostic[];
902
+ };
903
+ themesOverride?: (base: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }) => {
904
+ themes: Theme[];
905
+ diagnostics: ResourceDiagnostic[];
906
+ };
907
+ agentsFilesOverride?: (base: { agentsFiles: AgentsFile[] }) => { agentsFiles: AgentsFile[] };
908
+ systemPromptOverride?: (base: string | undefined) => string | undefined;
909
+ appendSystemPromptOverride?: (base: string[]) => string[];
910
+ }
911
+
912
+ /**
913
+ * The subset of {@link DefaultResourceLoader} state consumed by the
914
+ * {@link createAgentSession} adapter. Kept as an explicit interface so tests
915
+ * (and any future third-party ResourceLoader passed to `createAgentSession`)
916
+ * only need to satisfy the read surface — not the reload lifecycle.
917
+ */
918
+ export interface ResourceLoader {
919
+ getExtensions(): LoadExtensionsResult;
920
+ getSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] };
921
+ getPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] };
922
+ getThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] };
923
+ getAgentsFiles(): { agentsFiles: AgentsFile[] };
924
+ getSystemPrompt(): string | undefined;
925
+ getAppendSystemPrompt(): string[];
926
+ reload(): Promise<void>;
927
+ /** @internal — used by the shim's createAgentSession to detect its own loaders. */
928
+ readonly __ompLegacyPiLoader?: true;
929
+ }
930
+
931
+ /** Create a pre-initialization runtime for legacy extension resource loaders. */
932
+ export function createExtensionRuntime(): ExtensionRuntime {
933
+ return new ExtensionRuntime();
934
+ }
935
+
936
+ /**
937
+ * Loader-owned inputs that {@link createAgentSession} needs regardless of
938
+ * whether the caller provided extra options. `cwd`/`agentDir` fall back to
939
+ * `getProjectDir()`/`getAgentDir()` at construction time so subsequent
940
+ * `reload()` and `createAgentSession()` calls read the same directories the
941
+ * caller thought they were configuring.
942
+ */
943
+ interface ResolvedLoaderState {
944
+ cwd: string;
945
+ agentDir: string;
946
+ settingsPromise?: Promise<Settings>;
947
+ eventBus: EventBus;
948
+ extensionFactories: ExtensionFactory[];
949
+ noExtensions: boolean;
950
+ additionalExtensionPaths: string[];
951
+ additionalSkillPaths: string[];
952
+ additionalPromptTemplatePaths: string[];
953
+ }
954
+
955
+ interface AdditionalSkillLoadResult {
956
+ skills: Skill[];
957
+ diagnostics: ResourceDiagnostic[];
958
+ }
959
+
960
+ interface AdditionalPromptLoadResult {
961
+ prompts: PromptTemplate[];
962
+ diagnostics: ResourceDiagnostic[];
963
+ }
964
+
965
+ export class DefaultResourceLoader implements ResourceLoader {
966
+ readonly __ompLegacyPiLoader = true as const;
967
+ #state: ResolvedLoaderState;
968
+ #options: DefaultResourceLoaderOptions;
969
+ #extensionsResult: LoadExtensionsResult = { extensions: [], errors: [], runtime: createExtensionRuntime() };
970
+ #skills: Skill[] = [];
971
+ #skillDiagnostics: ResourceDiagnostic[] = [];
972
+ #prompts: PromptTemplate[] = [];
973
+ #promptDiagnostics: ResourceDiagnostic[] = [];
974
+ #themes: Theme[] = [];
975
+ #themeDiagnostics: ResourceDiagnostic[] = [];
976
+ #agentsFiles: AgentsFile[] = [];
977
+ #systemPrompt: string | undefined;
978
+ #appendSystemPrompt: string[] = [];
979
+ #loaded = false;
980
+
981
+ constructor(options: DefaultResourceLoaderOptions = {}) {
982
+ this.#options = options;
983
+ const cwd = options.cwd ?? getProjectDir();
984
+ const agentDir = options.agentDir ?? getAgentDir();
985
+ this.#state = {
986
+ cwd,
987
+ agentDir,
988
+ settingsPromise: options.settingsManager ? Promise.resolve(options.settingsManager) : undefined,
989
+ eventBus: options.eventBus ?? new EventBus(),
990
+ extensionFactories: options.extensionFactories ?? [],
991
+ noExtensions: options.noExtensions ?? false,
992
+ additionalExtensionPaths: options.additionalExtensionPaths ?? [],
993
+ additionalSkillPaths: options.additionalSkillPaths ?? [],
994
+ additionalPromptTemplatePaths: options.additionalPromptTemplatePaths ?? [],
995
+ };
996
+ }
997
+
998
+ getExtensions(): LoadExtensionsResult {
999
+ return this.#extensionsResult;
1000
+ }
1001
+
1002
+ getSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] } {
1003
+ return { skills: this.#skills, diagnostics: this.#skillDiagnostics };
1004
+ }
1005
+
1006
+ getPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {
1007
+ return { prompts: this.#prompts, diagnostics: this.#promptDiagnostics };
1008
+ }
1009
+
1010
+ getThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {
1011
+ return { themes: this.#themes, diagnostics: this.#themeDiagnostics };
1012
+ }
1013
+
1014
+ getAgentsFiles(): { agentsFiles: AgentsFile[] } {
1015
+ return { agentsFiles: this.#agentsFiles };
1016
+ }
1017
+
1018
+ getSystemPrompt(): string | undefined {
1019
+ return this.#systemPrompt;
1020
+ }
1021
+
1022
+ getAppendSystemPrompt(): string[] {
1023
+ return this.#appendSystemPrompt;
1024
+ }
1025
+
1026
+ /**
1027
+ * Discovery snapshot used to seed the session. Emulates upstream pi's
1028
+ * `reload()` lifecycle: run every enabled discovery arm against the
1029
+ * resolved cwd/agentDir, then thread each result through the caller's
1030
+ * `*Override` callback. Discovery arms guarded by an `no*` flag start from
1031
+ * an empty base — callers that flipped the flag off still get the override
1032
+ * hook, so overrides can inject synthetic entries without triggering a
1033
+ * filesystem scan they explicitly opted out of.
1034
+ */
1035
+ async reload(): Promise<void> {
1036
+ const { cwd, agentDir } = this.#state;
1037
+ const options = this.#options;
1038
+
1039
+ let settingsPromise = this.#state.settingsPromise;
1040
+ if (!settingsPromise) {
1041
+ settingsPromise = Settings.init({ cwd, agentDir });
1042
+ this.#state.settingsPromise = settingsPromise;
1043
+ }
1044
+ const settings = await settingsPromise;
1045
+
1046
+ const [extensionsResult, skillsBase, additionalSkills, prompts, additionalPrompts, agentsFiles] =
1047
+ await Promise.all([
1048
+ this.#loadExtensions(settings),
1049
+ options.noSkills
1050
+ ? Promise.resolve({ skills: [], warnings: [] })
1051
+ : discoverSkills(cwd, agentDir, {
1052
+ ...settings.getGroup("skills"),
1053
+ disabledExtensions: settings.get("disabledExtensions") ?? [],
1054
+ }),
1055
+ this.#loadAdditionalSkills(),
1056
+ options.noPromptTemplates ? Promise.resolve([]) : discoverPromptTemplates(cwd, agentDir),
1057
+ this.#loadAdditionalPromptTemplates(),
1058
+ options.noContextFiles ? Promise.resolve([]) : discoverContextFiles(cwd, agentDir),
1059
+ ]);
1060
+
1061
+ this.#extensionsResult = options.extensionsOverride
1062
+ ? options.extensionsOverride(extensionsResult)
1063
+ : extensionsResult;
1064
+
1065
+ const skillsBaseResult = {
1066
+ skills: [...skillsBase.skills, ...additionalSkills.skills],
1067
+ diagnostics: [
1068
+ ...skillsBase.warnings.map(w => ({
1069
+ type: "warning" as const,
1070
+ message: w.message,
1071
+ path: w.skillPath,
1072
+ })),
1073
+ ...additionalSkills.diagnostics,
1074
+ ],
1075
+ };
1076
+ const skillsFinal = options.skillsOverride ? options.skillsOverride(skillsBaseResult) : skillsBaseResult;
1077
+ this.#skills = skillsFinal.skills;
1078
+ this.#skillDiagnostics = skillsFinal.diagnostics;
1079
+
1080
+ const promptsBase = {
1081
+ prompts: [...prompts, ...additionalPrompts.prompts],
1082
+ diagnostics: additionalPrompts.diagnostics,
1083
+ };
1084
+ const promptsFinal = options.promptsOverride ? options.promptsOverride(promptsBase) : promptsBase;
1085
+ this.#prompts = promptsFinal.prompts;
1086
+ this.#promptDiagnostics = promptsFinal.diagnostics;
1087
+
1088
+ const themesBase = { themes: [] as Theme[], diagnostics: [] as ResourceDiagnostic[] };
1089
+ const themesFinal = options.themesOverride ? options.themesOverride(themesBase) : themesBase;
1090
+ this.#themes = themesFinal.themes;
1091
+ this.#themeDiagnostics = themesFinal.diagnostics;
1092
+
1093
+ const agentsFilesBase = { agentsFiles };
1094
+ const agentsFilesFinal = options.agentsFilesOverride
1095
+ ? options.agentsFilesOverride(agentsFilesBase)
1096
+ : agentsFilesBase;
1097
+ this.#agentsFiles = agentsFilesFinal.agentsFiles;
1098
+
1099
+ const baseSystemPrompt = options.systemPrompt;
1100
+ this.#systemPrompt = options.systemPromptOverride
1101
+ ? options.systemPromptOverride(baseSystemPrompt)
1102
+ : baseSystemPrompt;
1103
+
1104
+ const appendSource = options.appendSystemPrompt;
1105
+ const baseAppend =
1106
+ typeof appendSource === "string" ? [appendSource] : Array.isArray(appendSource) ? appendSource : [];
1107
+ this.#appendSystemPrompt = options.appendSystemPromptOverride
1108
+ ? options.appendSystemPromptOverride(baseAppend)
1109
+ : baseAppend;
1110
+
1111
+ this.#loaded = true;
1112
+ }
1113
+
1114
+ async #loadExtensions(settings: Settings): Promise<LoadExtensionsResult> {
1115
+ const { cwd, noExtensions, additionalExtensionPaths, extensionFactories, eventBus } = this.#state;
1116
+
1117
+ if (noExtensions && additionalExtensionPaths.length === 0 && extensionFactories.length === 0) {
1118
+ return { extensions: [], errors: [], runtime: createExtensionRuntime() };
1119
+ }
1120
+
1121
+ const paths = await discoverSessionExtensionPaths(
1122
+ {
1123
+ disableExtensionDiscovery: noExtensions,
1124
+ additionalExtensionPaths,
1125
+ },
1126
+ cwd,
1127
+ settings,
1128
+ );
1129
+
1130
+ const result = await loadExtensions(paths, cwd, eventBus);
1131
+ for (let i = 0; i < extensionFactories.length; i++) {
1132
+ const loaded = await loadExtensionFromFactory(
1133
+ extensionFactories[i],
1134
+ cwd,
1135
+ eventBus,
1136
+ result.runtime,
1137
+ `<inline-loader-${i}>`,
1138
+ );
1139
+ result.extensions.push(loaded);
1140
+ }
1141
+ return result;
1142
+ }
1143
+
1144
+ async #loadAdditionalSkills(): Promise<AdditionalSkillLoadResult> {
1145
+ const skills: Skill[] = [];
1146
+ const diagnostics: ResourceDiagnostic[] = [];
1147
+
1148
+ for (const resourcePath of this.#state.additionalSkillPaths) {
1149
+ const resolvedPath = path.isAbsolute(resourcePath)
1150
+ ? resourcePath
1151
+ : path.resolve(this.#state.cwd, resourcePath);
1152
+ const skillDir =
1153
+ path.basename(resolvedPath).toLowerCase() === "skill.md" ? path.dirname(resolvedPath) : resolvedPath;
1154
+ try {
1155
+ const result = await loadSkillsFromDir({
1156
+ dir: skillDir,
1157
+ source: "legacy-resource-loader",
1158
+ });
1159
+ skills.push(...result.skills);
1160
+ diagnostics.push(
1161
+ ...result.warnings.map(w => ({
1162
+ type: "warning" as const,
1163
+ message: w.message,
1164
+ path: w.skillPath,
1165
+ })),
1166
+ );
1167
+ } catch (err) {
1168
+ diagnostics.push({
1169
+ type: "warning",
1170
+ message: `Failed to load additional skill path: ${err instanceof Error ? err.message : String(err)}`,
1171
+ path: resolvedPath,
1172
+ });
1173
+ }
1174
+ }
1175
+
1176
+ return { skills, diagnostics };
1177
+ }
1178
+
1179
+ async #loadAdditionalPromptTemplates(): Promise<AdditionalPromptLoadResult> {
1180
+ const prompts: PromptTemplate[] = [];
1181
+ const diagnostics: ResourceDiagnostic[] = [];
1182
+
1183
+ for (const resourcePath of this.#state.additionalPromptTemplatePaths) {
1184
+ const resolvedPath = path.isAbsolute(resourcePath)
1185
+ ? resourcePath
1186
+ : path.resolve(this.#state.cwd, resourcePath);
1187
+ const files: string[] = [];
1188
+ try {
1189
+ const stat = await fs.promises.stat(resolvedPath);
1190
+ if (stat.isDirectory()) {
1191
+ const glob = new Bun.Glob("**/*.md");
1192
+ for await (const entry of glob.scan({ cwd: resolvedPath, absolute: false, onlyFiles: true })) {
1193
+ files.push(path.join(resolvedPath, entry));
1194
+ }
1195
+ files.sort();
1196
+ } else if (resolvedPath.toLowerCase().endsWith(".md")) {
1197
+ files.push(resolvedPath);
1198
+ } else {
1199
+ diagnostics.push({
1200
+ type: "warning",
1201
+ message: "Additional prompt template path is neither a directory nor a Markdown file",
1202
+ path: resolvedPath,
1203
+ });
1204
+ }
1205
+ } catch (err) {
1206
+ diagnostics.push({
1207
+ type: "warning",
1208
+ message: `Failed to inspect additional prompt template path: ${err instanceof Error ? err.message : String(err)}`,
1209
+ path: resolvedPath,
1210
+ });
1211
+ continue;
1212
+ }
1213
+
1214
+ for (const filePath of files) {
1215
+ try {
1216
+ const raw = await Bun.file(filePath).text();
1217
+ const { frontmatter, body } = parseFrontmatter(raw);
1218
+ const rawDescription = frontmatter.description;
1219
+ let description = typeof rawDescription === "string" ? rawDescription : "";
1220
+ if (!description) {
1221
+ const firstLine = body.split("\n").find(line => line.trim());
1222
+ if (firstLine) {
1223
+ description = firstLine.slice(0, 60);
1224
+ if (firstLine.length > 60) {
1225
+ description += "...";
1226
+ }
1227
+ }
1228
+ }
1229
+
1230
+ const source = "(legacy-resource-loader)";
1231
+ prompts.push({
1232
+ name: path.basename(filePath, path.extname(filePath)),
1233
+ description: description ? `${description} ${source}` : source,
1234
+ content: body,
1235
+ source,
1236
+ });
1237
+ } catch (err) {
1238
+ diagnostics.push({
1239
+ type: "warning",
1240
+ message: `Failed to load additional prompt template: ${err instanceof Error ? err.message : String(err)}`,
1241
+ path: filePath,
1242
+ });
1243
+ }
1244
+ }
1245
+ }
1246
+
1247
+ return { prompts, diagnostics };
1248
+ }
1249
+
1250
+ /** Test seam: whether `reload()` has completed at least once. */
1251
+ get loaded(): boolean {
1252
+ return this.#loaded;
1253
+ }
1254
+
1255
+ /** @internal — used by the shim's createAgentSession to translate options. */
1256
+ __getResolverState(): {
1257
+ cwd: string;
1258
+ agentDir: string;
1259
+ settingsPromise?: Promise<Settings>;
1260
+ eventBus: EventBus;
1261
+ extensionsResult: LoadExtensionsResult;
1262
+ skills: Skill[];
1263
+ prompts: PromptTemplate[];
1264
+ agentsFiles: AgentsFile[];
1265
+ systemPrompt: string | undefined;
1266
+ appendSystemPrompt: string[];
1267
+ extensionFactories: ExtensionFactory[];
1268
+ } {
1269
+ return {
1270
+ cwd: this.#state.cwd,
1271
+ agentDir: this.#state.agentDir,
1272
+ settingsPromise: this.#state.settingsPromise,
1273
+ eventBus: this.#state.eventBus,
1274
+ extensionsResult: this.#extensionsResult,
1275
+ skills: this.#skills,
1276
+ prompts: this.#prompts,
1277
+ agentsFiles: this.#agentsFiles,
1278
+ systemPrompt: this.#systemPrompt,
1279
+ appendSystemPrompt: this.#appendSystemPrompt,
1280
+ extensionFactories: this.#state.extensionFactories,
1281
+ };
1282
+ }
1283
+ }
1284
+
1285
+ /**
1286
+ * Legacy pi extensions call `createAgentSession({ resourceLoader })`. OMP's
1287
+ * native option surface has no such field — extension / skill / prompt /
1288
+ * context-file discovery are configured directly on the session options — so
1289
+ * an untranslated call would silently ignore the loader (including its
1290
+ * `noExtensions`/`noSkills` opt-outs), re-run OMP's own discovery, and
1291
+ * happily re-load the calling extension into the subagent. That's exactly
1292
+ * the recursion the caller passed the loader to prevent.
1293
+ *
1294
+ * Translate the loader's captured state into OMP's option fields, then
1295
+ * delegate to the underlying SDK. Explicit fields on `options` override the
1296
+ * loader (matches upstream pi semantics — a caller can partially override a
1297
+ * shared loader).
1298
+ *
1299
+ * `resourceLoader` is not part of {@link CreateAgentSessionOptions}, so it's
1300
+ * accepted through a widened alias and stripped before the underlying call.
1301
+ */
1302
+ export type LegacyPiCreateAgentSessionOptions = CreateAgentSessionOptions & {
1303
+ resourceLoader?: ResourceLoader;
1304
+ };
1305
+
1306
+ export async function createAgentSession(
1307
+ options: LegacyPiCreateAgentSessionOptions = {},
1308
+ ): Promise<CreateAgentSessionResult> {
1309
+ const loader = options.resourceLoader;
1310
+ if (!loader) {
1311
+ return ompCreateAgentSession(options);
1312
+ }
1313
+
1314
+ if (loader instanceof DefaultResourceLoader && !loader.loaded) {
1315
+ await loader.reload();
1316
+ }
1317
+
1318
+ const state =
1319
+ loader instanceof DefaultResourceLoader
1320
+ ? loader.__getResolverState()
1321
+ : {
1322
+ cwd: options.cwd ?? getProjectDir(),
1323
+ agentDir: options.agentDir ?? getAgentDir(),
1324
+ settingsPromise: undefined,
1325
+ eventBus: undefined,
1326
+ extensionsResult: loader.getExtensions(),
1327
+ skills: loader.getSkills().skills,
1328
+ prompts: loader.getPrompts().prompts,
1329
+ agentsFiles: loader.getAgentsFiles().agentsFiles,
1330
+ systemPrompt: loader.getSystemPrompt(),
1331
+ appendSystemPrompt: loader.getAppendSystemPrompt(),
1332
+ extensionFactories: [] as ExtensionFactory[],
1333
+ };
1334
+
1335
+ const { resourceLoader: _, ...rest } = options;
1336
+ const forwarded: CreateAgentSessionOptions = {
1337
+ ...rest,
1338
+ cwd: rest.cwd ?? state.cwd,
1339
+ agentDir: rest.agentDir ?? state.agentDir,
1340
+ };
1341
+
1342
+ if (rest.eventBus === undefined && state.eventBus !== undefined) {
1343
+ forwarded.eventBus = state.eventBus;
1344
+ }
1345
+ if (rest.settings === undefined && rest.settingsManager === undefined && state.settingsPromise !== undefined) {
1346
+ forwarded.settingsManager = state.settingsPromise;
1347
+ }
1348
+
1349
+ // Route the loader's already-loaded extension result through the SDK's
1350
+ // `preloadedExtensions` seam. Skipping this branch would let
1351
+ // `createAgentSession` re-run its own discovery and undo the caller's
1352
+ // `noExtensions: true`.
1353
+ if (rest.preloadedExtensions === undefined && rest.preloadedExtensionPaths === undefined) {
1354
+ forwarded.preloadedExtensions = state.extensionsResult;
1355
+ }
1356
+
1357
+ if (rest.skills === undefined) {
1358
+ forwarded.skills = state.skills;
1359
+ }
1360
+ if (rest.promptTemplates === undefined) {
1361
+ forwarded.promptTemplates = state.prompts;
1362
+ }
1363
+ if (rest.contextFiles === undefined) {
1364
+ forwarded.contextFiles = state.agentsFiles;
1365
+ }
1366
+
1367
+ if (rest.systemPrompt === undefined && state.systemPrompt !== undefined) {
1368
+ forwarded.systemPrompt = state.systemPrompt;
1369
+ }
1370
+ if (rest.appendSystemPrompt === undefined && state.appendSystemPrompt.length > 0) {
1371
+ forwarded.appendSystemPrompt = state.appendSystemPrompt.join("\n\n");
1372
+ }
1373
+
1374
+ return ompCreateAgentSession(forwarded);
1375
+ }
1376
+
1377
+ /**
1378
+ * Synchronous auth storage surface retained for legacy extensions.
1379
+ *
1380
+ * Modern OMP auth storage is asynchronous, while older provider extensions
1381
+ * call `AuthStorage.create().get()` during module initialization.
1382
+ */
1383
+ export class AuthStorage {
1384
+ constructor() {
1385
+ fs.mkdirSync(path.dirname(getAgentDbPath()), { recursive: true, mode: 0o700 });
1386
+ }
1387
+
1388
+ static create(): AuthStorage {
1389
+ return new AuthStorage();
1390
+ }
1391
+
1392
+ get(provider: string): AuthCredential | undefined {
1393
+ const store = new SqliteAuthCredentialStore(new Database(getAgentDbPath()));
1394
+ try {
1395
+ return store.listAuthCredentials(provider)[0]?.credential;
1396
+ } finally {
1397
+ store.close();
1398
+ }
1399
+ }
1400
+
1401
+ set(provider: string, credential: AuthCredential): void {
1402
+ const store = new SqliteAuthCredentialStore(new Database(getAgentDbPath()));
1403
+ try {
1404
+ store.upsertAuthCredentialForProvider(provider, credential);
1405
+ } finally {
1406
+ store.close();
1407
+ }
1408
+ }
1409
+ }
1410
+
1411
+ /** Read the first active credential for a legacy extension provider. */
1412
+ export function readStoredCredential(provider: string): AuthCredential | undefined {
1413
+ const storage = AuthStorage.create();
1414
+ return storage.get(provider);
1415
+ }
1416
+
1417
+ // Pi SDK path helpers. `export * from "../index"` above only forwards
1418
+ // `getAgentDir`; `getProjectDir` (a `@oh-my-pi/pi-utils` helper) and
1419
+ // `getPackageDir` are absent from that barrel, so legacy extensions importing
1420
+ // either fail Bun's static export check during validation (issue #5968).
1421
+ export { getProjectDir } from "@oh-my-pi/pi-utils";
1422
+
1423
+ /**
1424
+ * Coding-agent package install directory, matching pi's string-valued
1425
+ * `getPackageDir()` contract (extensions do `path.join(getPackageDir(), ...)`
1426
+ * to auto-allow bundled docs/resources).
1427
+ *
1428
+ * omp's canonical `getPackageDir()` (`../config`) returns `undefined` inside a
1429
+ * `bun --compile` binary — `import.meta.dir` is `/$bunfs/root` and no owning
1430
+ * `package.json` exists (issue #1423). Returning `undefined` there would crash
1431
+ * every legacy `path.join(getPackageDir(), ...)` at runtime in the shipped
1432
+ * binary, the primary distribution. So fall back to the executable's own
1433
+ * directory in compiled mode, where the binary *is* the install root. The
1434
+ * `PI_PACKAGE_DIR` override and dev/source/npm-dist walk-up still win via the
1435
+ * canonical helper.
1436
+ */
1437
+ export function getPackageDir(): string {
1438
+ return getOmpPackageDir() ?? (isCompiledBinary() ? path.dirname(process.execPath) : process.cwd());
1439
+ }
1440
+
1441
+ // Legacy pi's `@earendil-works/pi-coding-agent` re-exported `estimateTokens`,
1442
+ // `compact`, and `serializeConversation` from its package root (via
1443
+ // `./core/compaction/index.ts`). In omp they live in
1444
+ // `@oh-my-pi/pi-agent-core/compaction`, and the coding-agent barrel below does
1445
+ // not forward them, so legacy extensions importing them fail Bun's static
1446
+ // export check during validation (issues #6583, #7174, #7403).
1447
+ export { compact, estimateTokens, serializeConversation } from "@oh-my-pi/pi-agent-core/compaction";
1448
+
1449
+ // Same barrel gap for two more legacy package-root exports: pi re-exported the
1450
+ // `CONFIG_DIR_NAME` constant and the CLI parser `parseArgs`. In omp
1451
+ // `CONFIG_DIR_NAME` lives in `@oh-my-pi/pi-utils` and `parseArgs` in
1452
+ // `../cli/args`, neither of which the barrel below forwards, so legacy
1453
+ // extensions importing either fail Bun's static export check during validation.
1454
+ export { CONFIG_DIR_NAME } from "@oh-my-pi/pi-utils";
1455
+ export { parseArgs } from "../cli/args";
1456
+
1457
+ export * from "../index";
1458
+ export { formatBytes as formatSize } from "../tools/render-utils";
1459
+ export { copyToClipboard } from "../utils/clipboard";
1460
+ export { Type } from "./legacy-typebox";