pi-agent-zh 17.1.8

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 (1519) hide show
  1. package/CHANGELOG.md +14459 -0
  2. package/README.md +35 -0
  3. package/dist/CHANGELOG-vt8ene9g.md +14459 -0
  4. package/dist/cli.js +22079 -0
  5. package/dist/template-dys3vk5b.js +1671 -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 +79 -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 +606 -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 +133 -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 +195 -0
  62. package/scripts/measure-prompt-tokens.ts +63 -0
  63. package/scripts/omp +42 -0
  64. package/scripts/omp.ts +19 -0
  65. package/src/advisor/advise-tool.ts +216 -0
  66. package/src/advisor/config.ts +341 -0
  67. package/src/advisor/emission-guard.ts +172 -0
  68. package/src/advisor/index.ts +6 -0
  69. package/src/advisor/runtime.ts +1232 -0
  70. package/src/advisor/transcript-recorder.ts +159 -0
  71. package/src/advisor/watchdog.ts +135 -0
  72. package/src/async/index.ts +1 -0
  73. package/src/async/job-manager.ts +821 -0
  74. package/src/auto-thinking/classifier.ts +182 -0
  75. package/src/autolearn/controller.ts +152 -0
  76. package/src/autolearn/managed-skills.ts +255 -0
  77. package/src/autoresearch/command-resume.md +14 -0
  78. package/src/autoresearch/dashboard.ts +436 -0
  79. package/src/autoresearch/git.ts +331 -0
  80. package/src/autoresearch/helpers.ts +218 -0
  81. package/src/autoresearch/index.ts +541 -0
  82. package/src/autoresearch/prompt-setup.md +43 -0
  83. package/src/autoresearch/prompt.md +103 -0
  84. package/src/autoresearch/resume-message.md +10 -0
  85. package/src/autoresearch/state.ts +273 -0
  86. package/src/autoresearch/storage.ts +700 -0
  87. package/src/autoresearch/tools/init-experiment.ts +269 -0
  88. package/src/autoresearch/tools/log-experiment.ts +521 -0
  89. package/src/autoresearch/tools/run-experiment.ts +407 -0
  90. package/src/autoresearch/tools/update-notes.ts +109 -0
  91. package/src/autoresearch/types.ts +168 -0
  92. package/src/capability/context-file.ts +44 -0
  93. package/src/capability/extension-module.ts +34 -0
  94. package/src/capability/extension.ts +47 -0
  95. package/src/capability/fs.ts +117 -0
  96. package/src/capability/hook.ts +40 -0
  97. package/src/capability/index.ts +467 -0
  98. package/src/capability/instruction.ts +37 -0
  99. package/src/capability/mcp.ts +97 -0
  100. package/src/capability/prompt.ts +35 -0
  101. package/src/capability/rule-buckets.ts +66 -0
  102. package/src/capability/rule.ts +298 -0
  103. package/src/capability/settings.ts +34 -0
  104. package/src/capability/skill.ts +63 -0
  105. package/src/capability/slash-command.ts +40 -0
  106. package/src/capability/ssh.ts +41 -0
  107. package/src/capability/system-prompt.ts +34 -0
  108. package/src/capability/tool.ts +38 -0
  109. package/src/capability/types.ts +187 -0
  110. package/src/cleanse/agent.ts +226 -0
  111. package/src/cleanse/balance.ts +79 -0
  112. package/src/cleanse/checkers.ts +996 -0
  113. package/src/cleanse/index.ts +190 -0
  114. package/src/cleanse/loop.ts +51 -0
  115. package/src/cleanse/parsers.ts +726 -0
  116. package/src/cleanse/progress.ts +50 -0
  117. package/src/cleanse/prompts/assignment.md +47 -0
  118. package/src/cleanse/types.ts +72 -0
  119. package/src/cli/agents-cli.ts +138 -0
  120. package/src/cli/args.ts +420 -0
  121. package/src/cli/auth-broker-cli.ts +940 -0
  122. package/src/cli/auth-gateway-cli.ts +674 -0
  123. package/src/cli/bench-cli.ts +990 -0
  124. package/src/cli/classify-install-target.ts +76 -0
  125. package/src/cli/claude-trace-cli.ts +795 -0
  126. package/src/cli/commands/init-xdg.ts +27 -0
  127. package/src/cli/completion-gen.ts +550 -0
  128. package/src/cli/config-cli.ts +459 -0
  129. package/src/cli/dry-balance-cli.ts +864 -0
  130. package/src/cli/extension-flags.ts +48 -0
  131. package/src/cli/file-processor.ts +132 -0
  132. package/src/cli/flag-tables.ts +352 -0
  133. package/src/cli/gallery-cli.ts +272 -0
  134. package/src/cli/gallery-fixtures/agentic.ts +420 -0
  135. package/src/cli/gallery-fixtures/codeintel.ts +187 -0
  136. package/src/cli/gallery-fixtures/edit.ts +254 -0
  137. package/src/cli/gallery-fixtures/fs.ts +220 -0
  138. package/src/cli/gallery-fixtures/index.ts +40 -0
  139. package/src/cli/gallery-fixtures/interaction.ts +46 -0
  140. package/src/cli/gallery-fixtures/memory.ts +81 -0
  141. package/src/cli/gallery-fixtures/misc.ts +177 -0
  142. package/src/cli/gallery-fixtures/search.ts +135 -0
  143. package/src/cli/gallery-fixtures/shell.ts +241 -0
  144. package/src/cli/gallery-fixtures/types.ts +57 -0
  145. package/src/cli/gallery-fixtures/web.ts +158 -0
  146. package/src/cli/gallery-screenshot.ts +279 -0
  147. package/src/cli/gc-cli.ts +946 -0
  148. package/src/cli/grep-cli.ts +161 -0
  149. package/src/cli/grievances-cli.ts +256 -0
  150. package/src/cli/initial-message.ts +58 -0
  151. package/src/cli/models-cli.ts +388 -0
  152. package/src/cli/plugin-cli.ts +996 -0
  153. package/src/cli/profile-alias.ts +369 -0
  154. package/src/cli/profile-bootstrap.ts +233 -0
  155. package/src/cli/read-cli.ts +99 -0
  156. package/src/cli/session-picker.ts +93 -0
  157. package/src/cli/setup-cli.ts +320 -0
  158. package/src/cli/setup-model-picker.ts +43 -0
  159. package/src/cli/shell-cli.ts +176 -0
  160. package/src/cli/ssh-cli.ts +179 -0
  161. package/src/cli/startup-cwd.ts +58 -0
  162. package/src/cli/stats-cli.ts +229 -0
  163. package/src/cli/tiny-models-cli.ts +153 -0
  164. package/src/cli/ttsr-cli.ts +995 -0
  165. package/src/cli/update-cli.ts +1219 -0
  166. package/src/cli/usage-cli.ts +1084 -0
  167. package/src/cli/usage-error.ts +7 -0
  168. package/src/cli/web-search-cli.ts +144 -0
  169. package/src/cli/worktree-cli.ts +311 -0
  170. package/src/cli-commands.ts +166 -0
  171. package/src/cli.ts +407 -0
  172. package/src/collab/crypto.ts +63 -0
  173. package/src/collab/display-name.ts +13 -0
  174. package/src/collab/guest.ts +731 -0
  175. package/src/collab/host.ts +691 -0
  176. package/src/collab/protocol.ts +296 -0
  177. package/src/collab/relay-client.ts +282 -0
  178. package/src/collab/replication-shrink.ts +111 -0
  179. package/src/commands/acp.ts +33 -0
  180. package/src/commands/agents.ts +57 -0
  181. package/src/commands/auth-broker.ts +99 -0
  182. package/src/commands/auth-gateway.ts +69 -0
  183. package/src/commands/bench.ts +65 -0
  184. package/src/commands/cleanse.ts +45 -0
  185. package/src/commands/commit.ts +46 -0
  186. package/src/commands/complete.ts +66 -0
  187. package/src/commands/completions.ts +60 -0
  188. package/src/commands/config.ts +51 -0
  189. package/src/commands/dry-balance.ts +43 -0
  190. package/src/commands/gallery.ts +60 -0
  191. package/src/commands/gc.ts +46 -0
  192. package/src/commands/grep.ts +48 -0
  193. package/src/commands/grievances.ts +51 -0
  194. package/src/commands/install.ts +107 -0
  195. package/src/commands/join.ts +39 -0
  196. package/src/commands/launch.ts +212 -0
  197. package/src/commands/models.ts +60 -0
  198. package/src/commands/plugin.ts +78 -0
  199. package/src/commands/read.ts +38 -0
  200. package/src/commands/say.ts +145 -0
  201. package/src/commands/setup.ts +67 -0
  202. package/src/commands/shell.ts +29 -0
  203. package/src/commands/ssh.ts +60 -0
  204. package/src/commands/stats.ts +29 -0
  205. package/src/commands/tiny-models.ts +36 -0
  206. package/src/commands/token.ts +164 -0
  207. package/src/commands/ttsr.ts +125 -0
  208. package/src/commands/update.ts +33 -0
  209. package/src/commands/usage.ts +54 -0
  210. package/src/commands/web-search.ts +42 -0
  211. package/src/commands/worktree.ts +62 -0
  212. package/src/commit/agentic/agent.ts +322 -0
  213. package/src/commit/agentic/fallback.ts +96 -0
  214. package/src/commit/agentic/index.ts +382 -0
  215. package/src/commit/agentic/lock-files.ts +107 -0
  216. package/src/commit/agentic/prompts/analyze-file.md +22 -0
  217. package/src/commit/agentic/prompts/session-user.md +25 -0
  218. package/src/commit/agentic/prompts/split-confirm.md +1 -0
  219. package/src/commit/agentic/prompts/system.md +38 -0
  220. package/src/commit/agentic/state.ts +60 -0
  221. package/src/commit/agentic/tools/analyze-file.ts +148 -0
  222. package/src/commit/agentic/tools/git-file-diff.ts +191 -0
  223. package/src/commit/agentic/tools/git-hunk.ts +52 -0
  224. package/src/commit/agentic/tools/git-overview.ts +62 -0
  225. package/src/commit/agentic/tools/index.ts +54 -0
  226. package/src/commit/agentic/tools/propose-changelog.ts +147 -0
  227. package/src/commit/agentic/tools/propose-commit.ts +109 -0
  228. package/src/commit/agentic/tools/recent-commits.ts +81 -0
  229. package/src/commit/agentic/tools/schemas.ts +11 -0
  230. package/src/commit/agentic/tools/split-commit.ts +241 -0
  231. package/src/commit/agentic/topo-sort.ts +44 -0
  232. package/src/commit/agentic/trivial.ts +51 -0
  233. package/src/commit/agentic/validation.ts +183 -0
  234. package/src/commit/analysis/conventional.ts +64 -0
  235. package/src/commit/analysis/index.ts +4 -0
  236. package/src/commit/analysis/scope.ts +242 -0
  237. package/src/commit/analysis/summary.ts +107 -0
  238. package/src/commit/analysis/validation.ts +66 -0
  239. package/src/commit/changelog/detect.ts +40 -0
  240. package/src/commit/changelog/generate.ts +101 -0
  241. package/src/commit/changelog/index.ts +234 -0
  242. package/src/commit/changelog/parse.ts +44 -0
  243. package/src/commit/cli.ts +85 -0
  244. package/src/commit/git/diff.ts +148 -0
  245. package/src/commit/index.ts +5 -0
  246. package/src/commit/map-reduce/index.ts +69 -0
  247. package/src/commit/map-reduce/map-phase.ts +193 -0
  248. package/src/commit/map-reduce/reduce-phase.ts +49 -0
  249. package/src/commit/map-reduce/utils.ts +9 -0
  250. package/src/commit/message.ts +11 -0
  251. package/src/commit/model-selection.ts +95 -0
  252. package/src/commit/pipeline.ts +243 -0
  253. package/src/commit/prompts/analysis-system.md +148 -0
  254. package/src/commit/prompts/analysis-user.md +38 -0
  255. package/src/commit/prompts/changelog-system.md +50 -0
  256. package/src/commit/prompts/changelog-user.md +18 -0
  257. package/src/commit/prompts/file-observer-system.md +24 -0
  258. package/src/commit/prompts/file-observer-user.md +8 -0
  259. package/src/commit/prompts/reduce-system.md +50 -0
  260. package/src/commit/prompts/reduce-user.md +17 -0
  261. package/src/commit/prompts/summary-retry.md +3 -0
  262. package/src/commit/prompts/summary-system.md +38 -0
  263. package/src/commit/prompts/summary-user.md +13 -0
  264. package/src/commit/prompts/types-description.md +2 -0
  265. package/src/commit/shared-llm.ts +70 -0
  266. package/src/commit/types.ts +118 -0
  267. package/src/commit/utils/exclusions.ts +42 -0
  268. package/src/commit/utils.ts +58 -0
  269. package/src/config/api-key-resolver.ts +81 -0
  270. package/src/config/append-only-context-mode.ts +76 -0
  271. package/src/config/config-file.ts +347 -0
  272. package/src/config/file-lock.ts +164 -0
  273. package/src/config/inline-tool-descriptors-mode.ts +26 -0
  274. package/src/config/keybindings.ts +688 -0
  275. package/src/config/mcp-schema.json +247 -0
  276. package/src/config/model-discovery.ts +999 -0
  277. package/src/config/model-registry.ts +2725 -0
  278. package/src/config/model-resolver.ts +2068 -0
  279. package/src/config/model-roles.ts +113 -0
  280. package/src/config/models-config-schema-bundle.ts +313 -0
  281. package/src/config/models-config-schema.ts +14 -0
  282. package/src/config/models-config.ts +130 -0
  283. package/src/config/prompt-templates.ts +205 -0
  284. package/src/config/provider-globals.ts +25 -0
  285. package/src/config/resolve-config-value.ts +94 -0
  286. package/src/config/service-tier.ts +141 -0
  287. package/src/config/settings-schema.ts +5751 -0
  288. package/src/config/settings.ts +2369 -0
  289. package/src/config.ts +242 -0
  290. package/src/cursor.ts +513 -0
  291. package/src/dap/client.ts +1043 -0
  292. package/src/dap/config.ts +480 -0
  293. package/src/dap/defaults.json +212 -0
  294. package/src/dap/index.ts +4 -0
  295. package/src/dap/session.ts +1841 -0
  296. package/src/dap/types.ts +611 -0
  297. package/src/debug/index.ts +584 -0
  298. package/src/debug/log-formatting.ts +58 -0
  299. package/src/debug/log-viewer.ts +966 -0
  300. package/src/debug/profiler.ts +168 -0
  301. package/src/debug/protocol-probe.ts +267 -0
  302. package/src/debug/raw-sse-buffer.ts +421 -0
  303. package/src/debug/raw-sse.ts +312 -0
  304. package/src/debug/remote-debugger.ts +151 -0
  305. package/src/debug/report-bundle.ts +411 -0
  306. package/src/debug/system-info.ts +111 -0
  307. package/src/debug/terminal-info.ts +124 -0
  308. package/src/discovery/agents-md.ts +67 -0
  309. package/src/discovery/agents.ts +230 -0
  310. package/src/discovery/at-imports.ts +273 -0
  311. package/src/discovery/builtin-defaults.ts +39 -0
  312. package/src/discovery/builtin-rules/go-add-cleanup.md +33 -0
  313. package/src/discovery/builtin-rules/go-bench-loop.md +36 -0
  314. package/src/discovery/builtin-rules/go-exp-promoted.md +40 -0
  315. package/src/discovery/builtin-rules/go-ioutil.md +37 -0
  316. package/src/discovery/builtin-rules/go-join-hostport.md +30 -0
  317. package/src/discovery/builtin-rules/go-new-expr.md +44 -0
  318. package/src/discovery/builtin-rules/go-rand-v2.md +41 -0
  319. package/src/discovery/builtin-rules/go-range-int.md +45 -0
  320. package/src/discovery/builtin-rules/index.ts +74 -0
  321. package/src/discovery/builtin-rules/rs-box-leak.md +49 -0
  322. package/src/discovery/builtin-rules/rs-future-prelude.md +24 -0
  323. package/src/discovery/builtin-rules/rs-lazylock.md +52 -0
  324. package/src/discovery/builtin-rules/rs-match-ergonomics.md +68 -0
  325. package/src/discovery/builtin-rules/rs-parking-lot.md +45 -0
  326. package/src/discovery/builtin-rules/rs-result-type.md +20 -0
  327. package/src/discovery/builtin-rules/ts-bare-catch.md +39 -0
  328. package/src/discovery/builtin-rules/ts-import-type.md +43 -0
  329. package/src/discovery/builtin-rules/ts-no-any.md +66 -0
  330. package/src/discovery/builtin-rules/ts-no-deprecated-leftovers.md +45 -0
  331. package/src/discovery/builtin-rules/ts-no-dynamic-import.md +40 -0
  332. package/src/discovery/builtin-rules/ts-no-inline-cast-access.md +55 -0
  333. package/src/discovery/builtin-rules/ts-no-local-is-record.md +48 -0
  334. package/src/discovery/builtin-rules/ts-no-return-type.md +45 -0
  335. package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
  336. package/src/discovery/builtin-rules/ts-no-tiny-functions.md +51 -0
  337. package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +66 -0
  338. package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
  339. package/src/discovery/builtin-rules/ts-set-map.md +28 -0
  340. package/src/discovery/builtin.ts +935 -0
  341. package/src/discovery/claude-plugins.ts +624 -0
  342. package/src/discovery/claude.ts +588 -0
  343. package/src/discovery/cline.ts +83 -0
  344. package/src/discovery/codex.ts +540 -0
  345. package/src/discovery/cursor.ts +220 -0
  346. package/src/discovery/gemini.ts +383 -0
  347. package/src/discovery/github.ts +337 -0
  348. package/src/discovery/helpers.ts +1159 -0
  349. package/src/discovery/index.ts +81 -0
  350. package/src/discovery/mcp-json.ts +172 -0
  351. package/src/discovery/omp-extension-roots.ts +213 -0
  352. package/src/discovery/omp-plugins.ts +387 -0
  353. package/src/discovery/opencode.ts +441 -0
  354. package/src/discovery/plugin-dir-roots.ts +28 -0
  355. package/src/discovery/ssh.ts +153 -0
  356. package/src/discovery/substitute-plugin-root.ts +77 -0
  357. package/src/discovery/vscode.ts +105 -0
  358. package/src/discovery/windsurf.ts +147 -0
  359. package/src/edit/apply-patch/index.ts +87 -0
  360. package/src/edit/apply-patch/parser.ts +174 -0
  361. package/src/edit/diff.ts +999 -0
  362. package/src/edit/file-snapshot-store.ts +148 -0
  363. package/src/edit/hashline/block-resolver.ts +33 -0
  364. package/src/edit/hashline/diff.ts +356 -0
  365. package/src/edit/hashline/execute.ts +280 -0
  366. package/src/edit/hashline/filesystem.ts +223 -0
  367. package/src/edit/hashline/index.ts +5 -0
  368. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  369. package/src/edit/hashline/params.ts +12 -0
  370. package/src/edit/index.ts +676 -0
  371. package/src/edit/modes/apply-patch.lark +19 -0
  372. package/src/edit/modes/apply-patch.ts +53 -0
  373. package/src/edit/modes/patch.ts +1958 -0
  374. package/src/edit/modes/replace.ts +1137 -0
  375. package/src/edit/normalize.ts +345 -0
  376. package/src/edit/notebook.ts +242 -0
  377. package/src/edit/read-file.ts +25 -0
  378. package/src/edit/renderer.ts +998 -0
  379. package/src/edit/snapshot-details.ts +77 -0
  380. package/src/edit/streaming.ts +698 -0
  381. package/src/eval/agent-bridge.ts +224 -0
  382. package/src/eval/backend-helpers.ts +48 -0
  383. package/src/eval/backend.ts +71 -0
  384. package/src/eval/bridge-timeout.ts +62 -0
  385. package/src/eval/budget-bridge.ts +48 -0
  386. package/src/eval/completion-bridge.ts +211 -0
  387. package/src/eval/concurrency-bridge.ts +34 -0
  388. package/src/eval/executor-base.ts +504 -0
  389. package/src/eval/idle-timeout.ts +91 -0
  390. package/src/eval/index.ts +6 -0
  391. package/src/eval/jl/executor.ts +540 -0
  392. package/src/eval/jl/index.ts +54 -0
  393. package/src/eval/jl/kernel.ts +236 -0
  394. package/src/eval/jl/prelude.jl +736 -0
  395. package/src/eval/jl/prelude.ts +3 -0
  396. package/src/eval/jl/runner.jl +666 -0
  397. package/src/eval/jl/runtime.ts +118 -0
  398. package/src/eval/js/context-manager.ts +701 -0
  399. package/src/eval/js/executor.ts +175 -0
  400. package/src/eval/js/index.ts +40 -0
  401. package/src/eval/js/process-entry.ts +31 -0
  402. package/src/eval/js/shared/helpers.ts +170 -0
  403. package/src/eval/js/shared/indirect-eval.ts +30 -0
  404. package/src/eval/js/shared/local-module-loader.ts +364 -0
  405. package/src/eval/js/shared/prelude.ts +2 -0
  406. package/src/eval/js/shared/prelude.txt +294 -0
  407. package/src/eval/js/shared/rewrite-imports.ts +550 -0
  408. package/src/eval/js/shared/runtime.ts +590 -0
  409. package/src/eval/js/shared/types.ts +18 -0
  410. package/src/eval/js/tool-bridge.ts +163 -0
  411. package/src/eval/js/worker-core.ts +380 -0
  412. package/src/eval/js/worker-entry.ts +37 -0
  413. package/src/eval/js/worker-protocol.ts +47 -0
  414. package/src/eval/kernel-base.ts +569 -0
  415. package/src/eval/py/display.ts +71 -0
  416. package/src/eval/py/executor.ts +603 -0
  417. package/src/eval/py/index.ts +57 -0
  418. package/src/eval/py/kernel.ts +234 -0
  419. package/src/eval/py/prelude.py +672 -0
  420. package/src/eval/py/prelude.ts +3 -0
  421. package/src/eval/py/runner.py +1388 -0
  422. package/src/eval/py/runtime.ts +276 -0
  423. package/src/eval/py/spawn-options.ts +139 -0
  424. package/src/eval/py/tool-bridge.ts +181 -0
  425. package/src/eval/rb/executor.ts +504 -0
  426. package/src/eval/rb/index.ts +54 -0
  427. package/src/eval/rb/kernel.ts +231 -0
  428. package/src/eval/rb/prelude.rb +552 -0
  429. package/src/eval/rb/prelude.ts +3 -0
  430. package/src/eval/rb/runner.rb +581 -0
  431. package/src/eval/rb/runtime.ts +132 -0
  432. package/src/eval/runtime-env.ts +104 -0
  433. package/src/eval/session-id.ts +8 -0
  434. package/src/eval/types.ts +48 -0
  435. package/src/exa/index.ts +2 -0
  436. package/src/exa/mcp-client.ts +370 -0
  437. package/src/exa/types.ts +69 -0
  438. package/src/exec/bash-executor.ts +627 -0
  439. package/src/exec/direnv.ts +145 -0
  440. package/src/exec/exec.ts +53 -0
  441. package/src/exec/non-interactive-env.ts +118 -0
  442. package/src/export/custom-share.ts +65 -0
  443. package/src/export/html/args.ts +20 -0
  444. package/src/export/html/index.ts +313 -0
  445. package/src/export/html/share-loader.js +102 -0
  446. package/src/export/html/template.css +1355 -0
  447. package/src/export/html/template.html +55 -0
  448. package/src/export/html/template.js +1671 -0
  449. package/src/export/html/tool-views.generated.js +35 -0
  450. package/src/export/html/vendor/highlight.min.js +1213 -0
  451. package/src/export/html/vendor/marked.min.js +6 -0
  452. package/src/export/html/web-palette.ts +126 -0
  453. package/src/export/share.ts +682 -0
  454. package/src/export/ttsr.ts +590 -0
  455. package/src/extensibility/custom-commands/bundled/ci-green/index.ts +54 -0
  456. package/src/extensibility/custom-commands/bundled/review/index.ts +698 -0
  457. package/src/extensibility/custom-commands/index.ts +2 -0
  458. package/src/extensibility/custom-commands/loader.ts +242 -0
  459. package/src/extensibility/custom-commands/types.ts +119 -0
  460. package/src/extensibility/custom-tools/index.ts +7 -0
  461. package/src/extensibility/custom-tools/loader.ts +301 -0
  462. package/src/extensibility/custom-tools/types.ts +286 -0
  463. package/src/extensibility/custom-tools/wrapper.ts +50 -0
  464. package/src/extensibility/extensions/compact-handler.ts +40 -0
  465. package/src/extensibility/extensions/get-commands-handler.ts +78 -0
  466. package/src/extensibility/extensions/index.ts +16 -0
  467. package/src/extensibility/extensions/load-errors.ts +13 -0
  468. package/src/extensibility/extensions/loader.ts +624 -0
  469. package/src/extensibility/extensions/managed-timers.ts +83 -0
  470. package/src/extensibility/extensions/model-api.ts +39 -0
  471. package/src/extensibility/extensions/runner.ts +1209 -0
  472. package/src/extensibility/extensions/types.ts +1526 -0
  473. package/src/extensibility/extensions/wrapper.ts +377 -0
  474. package/src/extensibility/hooks/index.ts +6 -0
  475. package/src/extensibility/hooks/loader.ts +244 -0
  476. package/src/extensibility/hooks/runner.ts +425 -0
  477. package/src/extensibility/hooks/tool-wrapper.ts +124 -0
  478. package/src/extensibility/hooks/types.ts +612 -0
  479. package/src/extensibility/legacy-pi-ai-shim.ts +140 -0
  480. package/src/extensibility/legacy-pi-coding-agent-shim.ts +1384 -0
  481. package/src/extensibility/legacy-pi-tui-shim.ts +43 -0
  482. package/src/extensibility/plugins/bun-git-cache.ts +91 -0
  483. package/src/extensibility/plugins/doctor.ts +65 -0
  484. package/src/extensibility/plugins/git-url.ts +367 -0
  485. package/src/extensibility/plugins/index.ts +9 -0
  486. package/src/extensibility/plugins/installer.ts +201 -0
  487. package/src/extensibility/plugins/legacy-pi-compat.ts +2532 -0
  488. package/src/extensibility/plugins/legacy-pi-virtual-modules.d.ts +4 -0
  489. package/src/extensibility/plugins/loader.ts +535 -0
  490. package/src/extensibility/plugins/manager.ts +1142 -0
  491. package/src/extensibility/plugins/marketplace/cache.ts +136 -0
  492. package/src/extensibility/plugins/marketplace/fetcher.ts +316 -0
  493. package/src/extensibility/plugins/marketplace/index.ts +6 -0
  494. package/src/extensibility/plugins/marketplace/manager.ts +926 -0
  495. package/src/extensibility/plugins/marketplace/registry.ts +196 -0
  496. package/src/extensibility/plugins/marketplace/source-resolver.ts +147 -0
  497. package/src/extensibility/plugins/marketplace/types.ts +192 -0
  498. package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
  499. package/src/extensibility/plugins/parser.ts +107 -0
  500. package/src/extensibility/plugins/runtime-config.ts +9 -0
  501. package/src/extensibility/plugins/types.ts +194 -0
  502. package/src/extensibility/session-handler-types.ts +21 -0
  503. package/src/extensibility/shared-events.ts +401 -0
  504. package/src/extensibility/skills.ts +511 -0
  505. package/src/extensibility/slash-commands.ts +131 -0
  506. package/src/extensibility/tool-event-input.ts +80 -0
  507. package/src/extensibility/tool-proxy.ts +28 -0
  508. package/src/extensibility/typebox.ts +958 -0
  509. package/src/extensibility/utils.ts +184 -0
  510. package/src/goals/index.ts +3 -0
  511. package/src/goals/runtime.ts +521 -0
  512. package/src/goals/state.ts +37 -0
  513. package/src/goals/tools/goal-tool.ts +251 -0
  514. package/src/hindsight/backend.ts +354 -0
  515. package/src/hindsight/bank.ts +156 -0
  516. package/src/hindsight/client.ts +680 -0
  517. package/src/hindsight/config.ts +193 -0
  518. package/src/hindsight/content.ts +266 -0
  519. package/src/hindsight/index.ts +8 -0
  520. package/src/hindsight/mental-models.ts +429 -0
  521. package/src/hindsight/seeds.json +32 -0
  522. package/src/hindsight/state.ts +550 -0
  523. package/src/hindsight/transcript.ts +71 -0
  524. package/src/index.ts +66 -0
  525. package/src/internal-urls/agent-protocol.ts +180 -0
  526. package/src/internal-urls/artifact-protocol.ts +151 -0
  527. package/src/internal-urls/docs-index.ts +102 -0
  528. package/src/internal-urls/filesystem-resource.ts +34 -0
  529. package/src/internal-urls/history-protocol.ts +198 -0
  530. package/src/internal-urls/index.ts +27 -0
  531. package/src/internal-urls/issue-pr-protocol.ts +594 -0
  532. package/src/internal-urls/json-query.ts +126 -0
  533. package/src/internal-urls/local-protocol.ts +470 -0
  534. package/src/internal-urls/mcp-protocol.ts +165 -0
  535. package/src/internal-urls/memory-protocol.ts +347 -0
  536. package/src/internal-urls/omp-protocol.ts +94 -0
  537. package/src/internal-urls/parse.ts +103 -0
  538. package/src/internal-urls/registry-helpers.ts +132 -0
  539. package/src/internal-urls/router.ts +150 -0
  540. package/src/internal-urls/rule-protocol.ts +45 -0
  541. package/src/internal-urls/skill-protocol.ts +117 -0
  542. package/src/internal-urls/ssh-protocol.ts +368 -0
  543. package/src/internal-urls/types.ts +196 -0
  544. package/src/internal-urls/vault-protocol.ts +940 -0
  545. package/src/internal-urls/xd-protocol.ts +46 -0
  546. package/src/irc/bus.ts +380 -0
  547. package/src/jsonrpc/message-framing.ts +142 -0
  548. package/src/launch/broker.ts +1134 -0
  549. package/src/launch/client.ts +350 -0
  550. package/src/launch/paths.ts +17 -0
  551. package/src/launch/presence.ts +82 -0
  552. package/src/launch/protocol.ts +396 -0
  553. package/src/launch/spawn-options.ts +17 -0
  554. package/src/launch/terminal-output.ts +46 -0
  555. package/src/lib/xai-http.ts +150 -0
  556. package/src/live/attestation.ts +91 -0
  557. package/src/live/controller.ts +517 -0
  558. package/src/live/prompts/agent-final-message.md +3 -0
  559. package/src/live/prompts/live-instructions.md +23 -0
  560. package/src/live/protocol.ts +233 -0
  561. package/src/live/transport.ts +422 -0
  562. package/src/live/visualizer.ts +214 -0
  563. package/src/live/voices.ts +18 -0
  564. package/src/lsp/client.ts +1429 -0
  565. package/src/lsp/clients/biome-client.ts +263 -0
  566. package/src/lsp/clients/index.ts +50 -0
  567. package/src/lsp/clients/lsp-linter-client.ts +85 -0
  568. package/src/lsp/clients/swiftlint-client.ts +120 -0
  569. package/src/lsp/config.ts +549 -0
  570. package/src/lsp/defaults.json +499 -0
  571. package/src/lsp/deferred-diagnostics.ts +66 -0
  572. package/src/lsp/diagnostics-ledger.ts +51 -0
  573. package/src/lsp/edits.ts +288 -0
  574. package/src/lsp/format-options.ts +119 -0
  575. package/src/lsp/index.ts +2766 -0
  576. package/src/lsp/lspmux.ts +233 -0
  577. package/src/lsp/render.ts +668 -0
  578. package/src/lsp/startup-events.ts +13 -0
  579. package/src/lsp/types.ts +453 -0
  580. package/src/lsp/utils.ts +718 -0
  581. package/src/main.ts +1647 -0
  582. package/src/markit/NOTICE +32 -0
  583. package/src/markit/converters/docx.ts +56 -0
  584. package/src/markit/converters/epub.ts +136 -0
  585. package/src/markit/converters/mammoth.d.ts +24 -0
  586. package/src/markit/converters/pdf/columns.ts +103 -0
  587. package/src/markit/converters/pdf/extract.ts +598 -0
  588. package/src/markit/converters/pdf/grid.ts +780 -0
  589. package/src/markit/converters/pdf/headers.ts +106 -0
  590. package/src/markit/converters/pdf/index.ts +146 -0
  591. package/src/markit/converters/pdf/render.ts +501 -0
  592. package/src/markit/converters/pdf/types.ts +84 -0
  593. package/src/markit/converters/pptx.ts +325 -0
  594. package/src/markit/converters/xlsx.ts +173 -0
  595. package/src/markit/index.ts +2 -0
  596. package/src/markit/registry.ts +59 -0
  597. package/src/markit/types.ts +35 -0
  598. package/src/mcp/client.ts +511 -0
  599. package/src/mcp/config-writer.ts +377 -0
  600. package/src/mcp/config.ts +381 -0
  601. package/src/mcp/index.ts +29 -0
  602. package/src/mcp/json-rpc.ts +122 -0
  603. package/src/mcp/loader.ts +125 -0
  604. package/src/mcp/manager.ts +1419 -0
  605. package/src/mcp/oauth-credentials.ts +104 -0
  606. package/src/mcp/oauth-discovery.ts +587 -0
  607. package/src/mcp/oauth-flow.ts +820 -0
  608. package/src/mcp/render.ts +214 -0
  609. package/src/mcp/smithery-auth.ts +108 -0
  610. package/src/mcp/smithery-connect.ts +154 -0
  611. package/src/mcp/smithery-registry.ts +500 -0
  612. package/src/mcp/startup-events.ts +116 -0
  613. package/src/mcp/timeout.ts +59 -0
  614. package/src/mcp/tool-bridge.ts +691 -0
  615. package/src/mcp/tool-cache.ts +117 -0
  616. package/src/mcp/transports/http.ts +523 -0
  617. package/src/mcp/transports/index.ts +7 -0
  618. package/src/mcp/transports/sse.ts +377 -0
  619. package/src/mcp/transports/stdio.ts +903 -0
  620. package/src/mcp/types.ts +437 -0
  621. package/src/memories/index.ts +1434 -0
  622. package/src/memories/storage.ts +578 -0
  623. package/src/memory-backend/index.ts +18 -0
  624. package/src/memory-backend/local-backend.ts +47 -0
  625. package/src/memory-backend/off-backend.ts +25 -0
  626. package/src/memory-backend/resolve.ts +25 -0
  627. package/src/memory-backend/runtime.ts +66 -0
  628. package/src/memory-backend/tool-names.ts +2 -0
  629. package/src/memory-backend/types.ts +166 -0
  630. package/src/mnemopi/backend.ts +629 -0
  631. package/src/mnemopi/config.ts +267 -0
  632. package/src/mnemopi/embed-client.ts +246 -0
  633. package/src/mnemopi/embed-protocol.ts +35 -0
  634. package/src/mnemopi/embed-worker.ts +114 -0
  635. package/src/mnemopi/index.ts +3 -0
  636. package/src/mnemopi/state.ts +906 -0
  637. package/src/modes/acp/acp-agent.ts +2577 -0
  638. package/src/modes/acp/acp-client-bridge.ts +154 -0
  639. package/src/modes/acp/acp-event-mapper.ts +1084 -0
  640. package/src/modes/acp/acp-mode.ts +48 -0
  641. package/src/modes/acp/index.ts +2 -0
  642. package/src/modes/acp/terminal-auth.ts +37 -0
  643. package/src/modes/components/advisor-config.ts +635 -0
  644. package/src/modes/components/advisor-message.ts +109 -0
  645. package/src/modes/components/agent-dashboard.ts +1252 -0
  646. package/src/modes/components/agent-hub.ts +648 -0
  647. package/src/modes/components/agent-transcript-viewer.ts +649 -0
  648. package/src/modes/components/ask-dialog.ts +975 -0
  649. package/src/modes/components/assistant-message.ts +972 -0
  650. package/src/modes/components/background-tan-message.ts +36 -0
  651. package/src/modes/components/bash-execution.ts +233 -0
  652. package/src/modes/components/bordered-loader.ts +41 -0
  653. package/src/modes/components/btw-panel.ts +124 -0
  654. package/src/modes/components/cache-invalidation-marker.ts +110 -0
  655. package/src/modes/components/chat-block.ts +111 -0
  656. package/src/modes/components/chat-transcript-builder.ts +495 -0
  657. package/src/modes/components/collab-prompt-message.ts +32 -0
  658. package/src/modes/components/compaction-summary-message.ts +221 -0
  659. package/src/modes/components/copy-selector.ts +218 -0
  660. package/src/modes/components/countdown-timer.ts +75 -0
  661. package/src/modes/components/custom-editor.ts +1027 -0
  662. package/src/modes/components/custom-message.ts +70 -0
  663. package/src/modes/components/diff.ts +254 -0
  664. package/src/modes/components/dynamic-border.ts +37 -0
  665. package/src/modes/components/error-banner.ts +33 -0
  666. package/src/modes/components/eval-execution.ts +169 -0
  667. package/src/modes/components/execution-shared.ts +101 -0
  668. package/src/modes/components/extensions/extension-dashboard.ts +492 -0
  669. package/src/modes/components/extensions/extension-list.ts +507 -0
  670. package/src/modes/components/extensions/index.ts +9 -0
  671. package/src/modes/components/extensions/inspector-panel.ts +321 -0
  672. package/src/modes/components/extensions/state-manager.ts +648 -0
  673. package/src/modes/components/extensions/types.ts +186 -0
  674. package/src/modes/components/footer.ts +276 -0
  675. package/src/modes/components/history-search.ts +268 -0
  676. package/src/modes/components/hook-editor.ts +213 -0
  677. package/src/modes/components/hook-input.ts +87 -0
  678. package/src/modes/components/hook-message.ts +67 -0
  679. package/src/modes/components/hook-selector.ts +691 -0
  680. package/src/modes/components/index.ts +42 -0
  681. package/src/modes/components/keybinding-hints.ts +65 -0
  682. package/src/modes/components/late-diagnostics-message.ts +60 -0
  683. package/src/modes/components/login-dialog.ts +197 -0
  684. package/src/modes/components/logout-account-selector.ts +130 -0
  685. package/src/modes/components/mcp-add-wizard.ts +1413 -0
  686. package/src/modes/components/message-frame.ts +98 -0
  687. package/src/modes/components/model-browser.ts +872 -0
  688. package/src/modes/components/model-hub.ts +2011 -0
  689. package/src/modes/components/model-picker.ts +233 -0
  690. package/src/modes/components/move-overlay.ts +293 -0
  691. package/src/modes/components/oauth-selector.ts +474 -0
  692. package/src/modes/components/omfg-panel.ts +141 -0
  693. package/src/modes/components/overlay-box.ts +109 -0
  694. package/src/modes/components/pause-screen.ts +208 -0
  695. package/src/modes/components/plan-review-overlay.ts +1226 -0
  696. package/src/modes/components/plan-toc.ts +138 -0
  697. package/src/modes/components/plugin-selector.ts +100 -0
  698. package/src/modes/components/plugin-settings.ts +745 -0
  699. package/src/modes/components/queue-mode-selector.ts +61 -0
  700. package/src/modes/components/read-tool-group.ts +678 -0
  701. package/src/modes/components/reset-usage-selector.ts +161 -0
  702. package/src/modes/components/segment-track.ts +89 -0
  703. package/src/modes/components/select-list-mouse-routing.ts +35 -0
  704. package/src/modes/components/selector-helpers.ts +129 -0
  705. package/src/modes/components/session-account-selector.ts +62 -0
  706. package/src/modes/components/session-selector.ts +1019 -0
  707. package/src/modes/components/settings-defs.ts +267 -0
  708. package/src/modes/components/settings-selector.ts +1445 -0
  709. package/src/modes/components/show-images-selector.ts +50 -0
  710. package/src/modes/components/skill-message.ts +110 -0
  711. package/src/modes/components/snapcompact-shape-preview-doc.md +14 -0
  712. package/src/modes/components/snapcompact-shape-preview.ts +192 -0
  713. package/src/modes/components/status-line/component.ts +1516 -0
  714. package/src/modes/components/status-line/context-thresholds.ts +86 -0
  715. package/src/modes/components/status-line/git-utils.ts +42 -0
  716. package/src/modes/components/status-line/index.ts +5 -0
  717. package/src/modes/components/status-line/presets.ts +106 -0
  718. package/src/modes/components/status-line/segments.ts +710 -0
  719. package/src/modes/components/status-line/separators.ts +55 -0
  720. package/src/modes/components/status-line/types.ts +159 -0
  721. package/src/modes/components/theme-selector.ts +68 -0
  722. package/src/modes/components/thinking-selector.ts +57 -0
  723. package/src/modes/components/tiny-title-download-progress.ts +90 -0
  724. package/src/modes/components/tips.txt +26 -0
  725. package/src/modes/components/todo-reminder.ts +43 -0
  726. package/src/modes/components/tool-execution.ts +1356 -0
  727. package/src/modes/components/transcript-container.ts +527 -0
  728. package/src/modes/components/tree-selector.ts +1008 -0
  729. package/src/modes/components/ttsr-notification.ts +123 -0
  730. package/src/modes/components/usage-row.ts +47 -0
  731. package/src/modes/components/user-message-selector.ts +227 -0
  732. package/src/modes/components/user-message.ts +167 -0
  733. package/src/modes/components/visual-truncate.ts +63 -0
  734. package/src/modes/components/welcome.ts +578 -0
  735. package/src/modes/controllers/btw-controller.ts +198 -0
  736. package/src/modes/controllers/command-controller-shared.ts +109 -0
  737. package/src/modes/controllers/command-controller.ts +1993 -0
  738. package/src/modes/controllers/event-controller.ts +1781 -0
  739. package/src/modes/controllers/extension-ui-controller.ts +1242 -0
  740. package/src/modes/controllers/input-controller.ts +2004 -0
  741. package/src/modes/controllers/live-command-controller.ts +260 -0
  742. package/src/modes/controllers/mcp-command-controller.ts +2403 -0
  743. package/src/modes/controllers/omfg-controller.ts +287 -0
  744. package/src/modes/controllers/omfg-rule.ts +647 -0
  745. package/src/modes/controllers/selector-controller.ts +1968 -0
  746. package/src/modes/controllers/session-focus-controller.ts +117 -0
  747. package/src/modes/controllers/ssh-command-controller.ts +385 -0
  748. package/src/modes/controllers/streaming-reveal.ts +399 -0
  749. package/src/modes/controllers/tan-command-controller.ts +229 -0
  750. package/src/modes/controllers/todo-command-controller.ts +487 -0
  751. package/src/modes/controllers/tool-args-reveal.ts +591 -0
  752. package/src/modes/data/emojis.json +1 -0
  753. package/src/modes/emoji-autocomplete.ts +285 -0
  754. package/src/modes/github-ref-autocomplete.ts +75 -0
  755. package/src/modes/gradient-highlight.ts +99 -0
  756. package/src/modes/image-references.ts +137 -0
  757. package/src/modes/index.ts +10 -0
  758. package/src/modes/interactive-mode.ts +4957 -0
  759. package/src/modes/internal-url-autocomplete.ts +158 -0
  760. package/src/modes/loop-limit.ts +192 -0
  761. package/src/modes/magic-keyword-boundary.ts +23 -0
  762. package/src/modes/magic-keywords.ts +42 -0
  763. package/src/modes/markdown-prose.ts +247 -0
  764. package/src/modes/oauth-manual-input.ts +69 -0
  765. package/src/modes/orchestrate.ts +43 -0
  766. package/src/modes/print-mode.ts +265 -0
  767. package/src/modes/prompt-action-autocomplete.ts +322 -0
  768. package/src/modes/queue-input.ts +132 -0
  769. package/src/modes/rpc/host-tools.ts +204 -0
  770. package/src/modes/rpc/host-uris.ts +235 -0
  771. package/src/modes/rpc/rpc-client.ts +1195 -0
  772. package/src/modes/rpc/rpc-frame.ts +316 -0
  773. package/src/modes/rpc/rpc-input.ts +38 -0
  774. package/src/modes/rpc/rpc-messages.ts +127 -0
  775. package/src/modes/rpc/rpc-mode.ts +1504 -0
  776. package/src/modes/rpc/rpc-subagents.ts +265 -0
  777. package/src/modes/rpc/rpc-types.ts +533 -0
  778. package/src/modes/running-subagent-badge.ts +13 -0
  779. package/src/modes/runtime-init.ts +144 -0
  780. package/src/modes/session-observer-registry.ts +218 -0
  781. package/src/modes/session-teardown.ts +82 -0
  782. package/src/modes/setup-version.ts +11 -0
  783. package/src/modes/setup-wizard/index.ts +103 -0
  784. package/src/modes/setup-wizard/lazy.ts +16 -0
  785. package/src/modes/setup-wizard/scenes/glyph.ts +103 -0
  786. package/src/modes/setup-wizard/scenes/model.ts +132 -0
  787. package/src/modes/setup-wizard/scenes/outro.ts +35 -0
  788. package/src/modes/setup-wizard/scenes/providers.ts +105 -0
  789. package/src/modes/setup-wizard/scenes/sign-in.ts +312 -0
  790. package/src/modes/setup-wizard/scenes/splash.ts +201 -0
  791. package/src/modes/setup-wizard/scenes/theme.ts +330 -0
  792. package/src/modes/setup-wizard/scenes/types.ts +65 -0
  793. package/src/modes/setup-wizard/scenes/web-search.ts +153 -0
  794. package/src/modes/setup-wizard/startup-splash.ts +107 -0
  795. package/src/modes/setup-wizard/wizard-overlay.ts +335 -0
  796. package/src/modes/shared.ts +49 -0
  797. package/src/modes/skill-command.ts +91 -0
  798. package/src/modes/theme/dark.json +95 -0
  799. package/src/modes/theme/defaults/alabaster.json +93 -0
  800. package/src/modes/theme/defaults/amethyst.json +96 -0
  801. package/src/modes/theme/defaults/anthracite.json +93 -0
  802. package/src/modes/theme/defaults/basalt.json +91 -0
  803. package/src/modes/theme/defaults/birch.json +95 -0
  804. package/src/modes/theme/defaults/dark-abyss.json +91 -0
  805. package/src/modes/theme/defaults/dark-arctic.json +104 -0
  806. package/src/modes/theme/defaults/dark-aurora.json +95 -0
  807. package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
  808. package/src/modes/theme/defaults/dark-cavern.json +91 -0
  809. package/src/modes/theme/defaults/dark-copper.json +95 -0
  810. package/src/modes/theme/defaults/dark-cosmos.json +90 -0
  811. package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
  812. package/src/modes/theme/defaults/dark-dracula.json +98 -0
  813. package/src/modes/theme/defaults/dark-eclipse.json +91 -0
  814. package/src/modes/theme/defaults/dark-ember.json +95 -0
  815. package/src/modes/theme/defaults/dark-equinox.json +90 -0
  816. package/src/modes/theme/defaults/dark-forest.json +96 -0
  817. package/src/modes/theme/defaults/dark-github.json +105 -0
  818. package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
  819. package/src/modes/theme/defaults/dark-lavender.json +95 -0
  820. package/src/modes/theme/defaults/dark-lunar.json +89 -0
  821. package/src/modes/theme/defaults/dark-midnight.json +95 -0
  822. package/src/modes/theme/defaults/dark-monochrome.json +94 -0
  823. package/src/modes/theme/defaults/dark-monokai.json +98 -0
  824. package/src/modes/theme/defaults/dark-nebula.json +90 -0
  825. package/src/modes/theme/defaults/dark-nord.json +97 -0
  826. package/src/modes/theme/defaults/dark-ocean.json +101 -0
  827. package/src/modes/theme/defaults/dark-one.json +100 -0
  828. package/src/modes/theme/defaults/dark-poimandres.json +143 -0
  829. package/src/modes/theme/defaults/dark-rainforest.json +91 -0
  830. package/src/modes/theme/defaults/dark-reef.json +91 -0
  831. package/src/modes/theme/defaults/dark-retro.json +92 -0
  832. package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
  833. package/src/modes/theme/defaults/dark-sakura.json +95 -0
  834. package/src/modes/theme/defaults/dark-slate.json +95 -0
  835. package/src/modes/theme/defaults/dark-solarized.json +97 -0
  836. package/src/modes/theme/defaults/dark-solstice.json +90 -0
  837. package/src/modes/theme/defaults/dark-starfall.json +91 -0
  838. package/src/modes/theme/defaults/dark-sunset.json +99 -0
  839. package/src/modes/theme/defaults/dark-swamp.json +90 -0
  840. package/src/modes/theme/defaults/dark-synthwave.json +103 -0
  841. package/src/modes/theme/defaults/dark-taiga.json +91 -0
  842. package/src/modes/theme/defaults/dark-terminal.json +95 -0
  843. package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
  844. package/src/modes/theme/defaults/dark-tundra.json +91 -0
  845. package/src/modes/theme/defaults/dark-twilight.json +91 -0
  846. package/src/modes/theme/defaults/dark-volcanic.json +91 -0
  847. package/src/modes/theme/defaults/graphite.json +92 -0
  848. package/src/modes/theme/defaults/index.ts +199 -0
  849. package/src/modes/theme/defaults/light-arctic.json +107 -0
  850. package/src/modes/theme/defaults/light-aurora-day.json +91 -0
  851. package/src/modes/theme/defaults/light-canyon.json +91 -0
  852. package/src/modes/theme/defaults/light-catppuccin.json +106 -0
  853. package/src/modes/theme/defaults/light-cirrus.json +90 -0
  854. package/src/modes/theme/defaults/light-coral.json +95 -0
  855. package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
  856. package/src/modes/theme/defaults/light-dawn.json +90 -0
  857. package/src/modes/theme/defaults/light-dunes.json +91 -0
  858. package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
  859. package/src/modes/theme/defaults/light-forest.json +100 -0
  860. package/src/modes/theme/defaults/light-frost.json +95 -0
  861. package/src/modes/theme/defaults/light-github.json +115 -0
  862. package/src/modes/theme/defaults/light-glacier.json +91 -0
  863. package/src/modes/theme/defaults/light-gruvbox.json +108 -0
  864. package/src/modes/theme/defaults/light-haze.json +90 -0
  865. package/src/modes/theme/defaults/light-honeycomb.json +95 -0
  866. package/src/modes/theme/defaults/light-lagoon.json +91 -0
  867. package/src/modes/theme/defaults/light-lavender.json +95 -0
  868. package/src/modes/theme/defaults/light-meadow.json +91 -0
  869. package/src/modes/theme/defaults/light-mint.json +95 -0
  870. package/src/modes/theme/defaults/light-monochrome.json +101 -0
  871. package/src/modes/theme/defaults/light-ocean.json +99 -0
  872. package/src/modes/theme/defaults/light-one.json +99 -0
  873. package/src/modes/theme/defaults/light-opal.json +91 -0
  874. package/src/modes/theme/defaults/light-orchard.json +91 -0
  875. package/src/modes/theme/defaults/light-paper.json +95 -0
  876. package/src/modes/theme/defaults/light-poimandres.json +143 -0
  877. package/src/modes/theme/defaults/light-prism.json +90 -0
  878. package/src/modes/theme/defaults/light-retro.json +98 -0
  879. package/src/modes/theme/defaults/light-sand.json +95 -0
  880. package/src/modes/theme/defaults/light-savanna.json +91 -0
  881. package/src/modes/theme/defaults/light-solarized.json +102 -0
  882. package/src/modes/theme/defaults/light-soleil.json +90 -0
  883. package/src/modes/theme/defaults/light-sunset.json +99 -0
  884. package/src/modes/theme/defaults/light-synthwave.json +98 -0
  885. package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
  886. package/src/modes/theme/defaults/light-wetland.json +91 -0
  887. package/src/modes/theme/defaults/light-zenith.json +89 -0
  888. package/src/modes/theme/defaults/limestone.json +94 -0
  889. package/src/modes/theme/defaults/mahogany.json +97 -0
  890. package/src/modes/theme/defaults/marble.json +93 -0
  891. package/src/modes/theme/defaults/obsidian.json +91 -0
  892. package/src/modes/theme/defaults/onyx.json +91 -0
  893. package/src/modes/theme/defaults/pearl.json +93 -0
  894. package/src/modes/theme/defaults/porcelain.json +91 -0
  895. package/src/modes/theme/defaults/quartz.json +96 -0
  896. package/src/modes/theme/defaults/sandstone.json +95 -0
  897. package/src/modes/theme/defaults/titanium.json +90 -0
  898. package/src/modes/theme/light.json +93 -0
  899. package/src/modes/theme/mermaid-cache.ts +92 -0
  900. package/src/modes/theme/shimmer.ts +305 -0
  901. package/src/modes/theme/theme-schema.json +463 -0
  902. package/src/modes/theme/theme.ts +3019 -0
  903. package/src/modes/turn-budget.ts +31 -0
  904. package/src/modes/types.ts +479 -0
  905. package/src/modes/ultrathink.ts +42 -0
  906. package/src/modes/utils/context-usage.ts +518 -0
  907. package/src/modes/utils/copy-targets.ts +378 -0
  908. package/src/modes/utils/hotkeys-markdown.ts +63 -0
  909. package/src/modes/utils/interactive-context-helpers.ts +30 -0
  910. package/src/modes/utils/keybinding-matchers.ts +86 -0
  911. package/src/modes/utils/tools-markdown.ts +31 -0
  912. package/src/modes/utils/transcript-render-helpers.ts +253 -0
  913. package/src/modes/utils/ui-helpers.ts +963 -0
  914. package/src/modes/warp-events.ts +232 -0
  915. package/src/modes/workflow.ts +49 -0
  916. package/src/plan-mode/approved-plan.ts +194 -0
  917. package/src/plan-mode/model-transition.ts +51 -0
  918. package/src/plan-mode/plan-files.ts +40 -0
  919. package/src/plan-mode/plan-handoff.ts +37 -0
  920. package/src/plan-mode/plan-protection.ts +31 -0
  921. package/src/plan-mode/state.ts +6 -0
  922. package/src/priority.json +60 -0
  923. package/src/prompts/advisor/active-repo-watchdog.md +6 -0
  924. package/src/prompts/advisor/advise-tool.md +3 -0
  925. package/src/prompts/advisor/context-files.md +8 -0
  926. package/src/prompts/advisor/system.md +98 -0
  927. package/src/prompts/agents/designer.md +74 -0
  928. package/src/prompts/agents/frontmatter.md +12 -0
  929. package/src/prompts/agents/init.md +33 -0
  930. package/src/prompts/agents/librarian.md +119 -0
  931. package/src/prompts/agents/reviewer.md +139 -0
  932. package/src/prompts/agents/scout.md +58 -0
  933. package/src/prompts/agents/task.md +17 -0
  934. package/src/prompts/bench/cache-prefix-chunk.md +1 -0
  935. package/src/prompts/bench/cache-prefix.md +3 -0
  936. package/src/prompts/bench/cache-suffix.md +1 -0
  937. package/src/prompts/bench.md +6 -0
  938. package/src/prompts/ci-green-request.md +36 -0
  939. package/src/prompts/dry-balance-bench.md +8 -0
  940. package/src/prompts/goals/goal-budget-limit.md +16 -0
  941. package/src/prompts/goals/goal-continuation.md +28 -0
  942. package/src/prompts/goals/goal-mode-active.md +23 -0
  943. package/src/prompts/goals/goal-mode-context.md +4 -0
  944. package/src/prompts/goals/goal-todo-context.md +12 -0
  945. package/src/prompts/goals/guided-goal-interview.md +43 -0
  946. package/src/prompts/memories/consolidation.md +30 -0
  947. package/src/prompts/memories/consolidation_system.md +4 -0
  948. package/src/prompts/memories/read-path.md +17 -0
  949. package/src/prompts/memories/stage_one_input.md +6 -0
  950. package/src/prompts/memories/stage_one_system.md +21 -0
  951. package/src/prompts/review-custom-request.md +21 -0
  952. package/src/prompts/review-headless-request.md +16 -0
  953. package/src/prompts/review-request.md +68 -0
  954. package/src/prompts/skills/autoload.md +8 -0
  955. package/src/prompts/skills/user-invocation.md +11 -0
  956. package/src/prompts/steering/parent-irc.md +5 -0
  957. package/src/prompts/steering/user-interjection.md +6 -0
  958. package/src/prompts/system/active-repo-context.md +4 -0
  959. package/src/prompts/system/agent-creation-architect.md +50 -0
  960. package/src/prompts/system/agent-creation-user.md +6 -0
  961. package/src/prompts/system/auto-continue.md +1 -0
  962. package/src/prompts/system/auto-thinking-difficulty-local.md +14 -0
  963. package/src/prompts/system/auto-thinking-difficulty.md +12 -0
  964. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  965. package/src/prompts/system/autolearn-guidance.md +7 -0
  966. package/src/prompts/system/autolearn-nudge-autocontinue.md +5 -0
  967. package/src/prompts/system/background-tan-dispatch.md +8 -0
  968. package/src/prompts/system/btw-user.md +8 -0
  969. package/src/prompts/system/commit-message-system.md +14 -0
  970. package/src/prompts/system/computer-safety.md +14 -0
  971. package/src/prompts/system/custom-system-prompt.md +64 -0
  972. package/src/prompts/system/eager-task.md +7 -0
  973. package/src/prompts/system/eager-todo.md +18 -0
  974. package/src/prompts/system/empty-stop-retry.md +4 -0
  975. package/src/prompts/system/gemini-tool-call-reminder.md +9 -0
  976. package/src/prompts/system/interrupted-thinking.md +7 -0
  977. package/src/prompts/system/irc-autoreply.md +6 -0
  978. package/src/prompts/system/irc-incoming.md +9 -0
  979. package/src/prompts/system/manual-continue.md +7 -0
  980. package/src/prompts/system/mcp-xdev-guidance.md +11 -0
  981. package/src/prompts/system/memory-consolidation-system.md +8 -0
  982. package/src/prompts/system/memory-extraction-system.md +26 -0
  983. package/src/prompts/system/mid-run-todo-nudge.md +3 -0
  984. package/src/prompts/system/omfg-user.md +50 -0
  985. package/src/prompts/system/orchestrate-notice.md +40 -0
  986. package/src/prompts/system/personalities/default.md +18 -0
  987. package/src/prompts/system/personalities/friendly.md +17 -0
  988. package/src/prompts/system/personalities/pragmatic.md +15 -0
  989. package/src/prompts/system/plan-mode-active.md +125 -0
  990. package/src/prompts/system/plan-mode-approved.md +22 -0
  991. package/src/prompts/system/plan-mode-compact-instructions.md +17 -0
  992. package/src/prompts/system/plan-mode-reference.md +10 -0
  993. package/src/prompts/system/plan-mode-subagent.md +33 -0
  994. package/src/prompts/system/plan-mode-tool-decision-reminder.md +9 -0
  995. package/src/prompts/system/plan-yolo-handoff.md +5 -0
  996. package/src/prompts/system/prewalk-checklist.md +7 -0
  997. package/src/prompts/system/prewalk-continue.md +1 -0
  998. package/src/prompts/system/prewalk-plan.md +13 -0
  999. package/src/prompts/system/project-prompt.md +61 -0
  1000. package/src/prompts/system/recap-user.md +9 -0
  1001. package/src/prompts/system/resolve-device-reminder.md +3 -0
  1002. package/src/prompts/system/rewind-report.md +6 -0
  1003. package/src/prompts/system/side-channel-no-tools.md +3 -0
  1004. package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
  1005. package/src/prompts/system/snapcompact-context-stub.md +1 -0
  1006. package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
  1007. package/src/prompts/system/snapcompact-system-stub.md +1 -0
  1008. package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
  1009. package/src/prompts/system/speech-rewrite.md +15 -0
  1010. package/src/prompts/system/subagent-async-pending.md +6 -0
  1011. package/src/prompts/system/subagent-system-prompt.md +73 -0
  1012. package/src/prompts/system/subagent-user-prompt.md +3 -0
  1013. package/src/prompts/system/subagent-yield-reminder.md +23 -0
  1014. package/src/prompts/system/system-prompt.md +283 -0
  1015. package/src/prompts/system/tan-context-switch.md +17 -0
  1016. package/src/prompts/system/task-label.md +23 -0
  1017. package/src/prompts/system/thinking-loop-redirect.md +10 -0
  1018. package/src/prompts/system/title-marker-instruction.md +1 -0
  1019. package/src/prompts/system/title-system.md +16 -0
  1020. package/src/prompts/system/tool-call-loop-redirect.md +8 -0
  1021. package/src/prompts/system/ttsr-interrupt.md +7 -0
  1022. package/src/prompts/system/ttsr-tool-reminder.md +5 -0
  1023. package/src/prompts/system/ultrathink-notice.md +3 -0
  1024. package/src/prompts/system/unexpected-stop-classifier.md +17 -0
  1025. package/src/prompts/system/unexpected-stop-retry.md +4 -0
  1026. package/src/prompts/system/vibe-mode-active.md +26 -0
  1027. package/src/prompts/system/web-search.md +25 -0
  1028. package/src/prompts/system/workflow-notice.md +112 -0
  1029. package/src/prompts/system/xdev-mount-notice.md +20 -0
  1030. package/src/prompts/tools/apply-patch.md +65 -0
  1031. package/src/prompts/tools/ask.md +22 -0
  1032. package/src/prompts/tools/ast-edit.md +11 -0
  1033. package/src/prompts/tools/ast-grep.md +19 -0
  1034. package/src/prompts/tools/async-result.md +8 -0
  1035. package/src/prompts/tools/bash.md +25 -0
  1036. package/src/prompts/tools/browser.md +28 -0
  1037. package/src/prompts/tools/checkpoint.md +15 -0
  1038. package/src/prompts/tools/computer.md +26 -0
  1039. package/src/prompts/tools/debug.md +3 -0
  1040. package/src/prompts/tools/eval.md +45 -0
  1041. package/src/prompts/tools/github.md +22 -0
  1042. package/src/prompts/tools/glob.md +15 -0
  1043. package/src/prompts/tools/goal.md +11 -0
  1044. package/src/prompts/tools/grep.md +12 -0
  1045. package/src/prompts/tools/hub.md +34 -0
  1046. package/src/prompts/tools/image-attachment-describe-system.md +8 -0
  1047. package/src/prompts/tools/image-attachment-describe.md +10 -0
  1048. package/src/prompts/tools/image-gen.md +7 -0
  1049. package/src/prompts/tools/inspect-image-system.md +20 -0
  1050. package/src/prompts/tools/inspect-image.md +22 -0
  1051. package/src/prompts/tools/learn.md +7 -0
  1052. package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
  1053. package/src/prompts/tools/lsp.md +19 -0
  1054. package/src/prompts/tools/manage-skill.md +9 -0
  1055. package/src/prompts/tools/memory-edit.md +12 -0
  1056. package/src/prompts/tools/patch.md +57 -0
  1057. package/src/prompts/tools/read.md +27 -0
  1058. package/src/prompts/tools/recall.md +7 -0
  1059. package/src/prompts/tools/reflect.md +5 -0
  1060. package/src/prompts/tools/replace.md +29 -0
  1061. package/src/prompts/tools/retain.md +6 -0
  1062. package/src/prompts/tools/rewind.md +14 -0
  1063. package/src/prompts/tools/task-async-contract.md +1 -0
  1064. package/src/prompts/tools/task-summary.md +20 -0
  1065. package/src/prompts/tools/task.md +83 -0
  1066. package/src/prompts/tools/todo.md +42 -0
  1067. package/src/prompts/tools/vibe-kill.md +3 -0
  1068. package/src/prompts/tools/vibe-list.md +3 -0
  1069. package/src/prompts/tools/vibe-send.md +9 -0
  1070. package/src/prompts/tools/vibe-spawn.md +10 -0
  1071. package/src/prompts/tools/vibe-turn-result.md +19 -0
  1072. package/src/prompts/tools/vibe-wait.md +8 -0
  1073. package/src/prompts/tools/web-search.md +8 -0
  1074. package/src/prompts/tools/write.md +14 -0
  1075. package/src/registry/agent-lifecycle.ts +455 -0
  1076. package/src/registry/agent-registry.ts +217 -0
  1077. package/src/registry/persisted-agents.ts +98 -0
  1078. package/src/sdk.ts +3553 -0
  1079. package/src/secrets/index.ts +246 -0
  1080. package/src/secrets/obfuscator.ts +2574 -0
  1081. package/src/secrets/regex.ts +21 -0
  1082. package/src/session/acp-permission-gate.ts +165 -0
  1083. package/src/session/agent-session-events.ts +66 -0
  1084. package/src/session/agent-session-types.ts +346 -0
  1085. package/src/session/agent-session.ts +8406 -0
  1086. package/src/session/agent-storage.ts +805 -0
  1087. package/src/session/artifacts.ts +154 -0
  1088. package/src/session/async-job-delivery.ts +82 -0
  1089. package/src/session/auth-broker-config.ts +92 -0
  1090. package/src/session/auth-storage.ts +25 -0
  1091. package/src/session/bash-runner.ts +326 -0
  1092. package/src/session/blob-store.ts +295 -0
  1093. package/src/session/checkpoint-entries.ts +81 -0
  1094. package/src/session/client-bridge.ts +85 -0
  1095. package/src/session/codex-auto-reset.ts +202 -0
  1096. package/src/session/compact-modes.ts +105 -0
  1097. package/src/session/eval-runner.ts +217 -0
  1098. package/src/session/exit-diagnostics.ts +310 -0
  1099. package/src/session/history-storage.ts +327 -0
  1100. package/src/session/indexed-session-storage.ts +544 -0
  1101. package/src/session/irc-bridge.ts +203 -0
  1102. package/src/session/messages.ts +1280 -0
  1103. package/src/session/model-controls.ts +750 -0
  1104. package/src/session/prewalk.ts +257 -0
  1105. package/src/session/provider-image-budget.ts +86 -0
  1106. package/src/session/queued-messages.ts +99 -0
  1107. package/src/session/redis-session-storage.ts +257 -0
  1108. package/src/session/retry-fallback-chains.ts +455 -0
  1109. package/src/session/role-models.ts +85 -0
  1110. package/src/session/session-advisors.ts +1754 -0
  1111. package/src/session/session-context.ts +554 -0
  1112. package/src/session/session-dump-format.ts +216 -0
  1113. package/src/session/session-entries.ts +260 -0
  1114. package/src/session/session-handoff.ts +308 -0
  1115. package/src/session/session-history-format.ts +459 -0
  1116. package/src/session/session-listing.ts +715 -0
  1117. package/src/session/session-loader.ts +280 -0
  1118. package/src/session/session-maintenance.ts +2983 -0
  1119. package/src/session/session-manager.ts +2557 -0
  1120. package/src/session/session-memory.ts +222 -0
  1121. package/src/session/session-metadata.ts +53 -0
  1122. package/src/session/session-migrations.ts +78 -0
  1123. package/src/session/session-paths.ts +222 -0
  1124. package/src/session/session-persistence.ts +293 -0
  1125. package/src/session/session-provider-boundary.ts +306 -0
  1126. package/src/session/session-stats.ts +293 -0
  1127. package/src/session/session-storage.ts +734 -0
  1128. package/src/session/session-title-slot.ts +141 -0
  1129. package/src/session/session-tools.ts +1226 -0
  1130. package/src/session/session-workspace.ts +53 -0
  1131. package/src/session/settings-stream-fn.ts +74 -0
  1132. package/src/session/shake-types.ts +43 -0
  1133. package/src/session/snapcompact-inline.ts +545 -0
  1134. package/src/session/snapcompact-savings-journal.ts +113 -0
  1135. package/src/session/sql-session-storage.ts +374 -0
  1136. package/src/session/stream-guards.ts +417 -0
  1137. package/src/session/streaming-output.ts +1459 -0
  1138. package/src/session/todo-tracker.ts +380 -0
  1139. package/src/session/tool-choice-queue.ts +305 -0
  1140. package/src/session/ttsr-coordinator.ts +496 -0
  1141. package/src/session/turn-persistence.ts +142 -0
  1142. package/src/session/turn-recovery.ts +1728 -0
  1143. package/src/session/unexpected-stop-classifier.ts +132 -0
  1144. package/src/session/yield-queue.ts +183 -0
  1145. package/src/slash-commands/acp-builtins.ts +70 -0
  1146. package/src/slash-commands/available-commands.ts +105 -0
  1147. package/src/slash-commands/builtin-registry.ts +2982 -0
  1148. package/src/slash-commands/helpers/active-oauth-account.ts +80 -0
  1149. package/src/slash-commands/helpers/collab-qrcode.ts +28 -0
  1150. package/src/slash-commands/helpers/context-report.ts +66 -0
  1151. package/src/slash-commands/helpers/format.ts +46 -0
  1152. package/src/slash-commands/helpers/logout.ts +108 -0
  1153. package/src/slash-commands/helpers/marketplace-manager.ts +25 -0
  1154. package/src/slash-commands/helpers/mcp.ts +533 -0
  1155. package/src/slash-commands/helpers/parse.ts +85 -0
  1156. package/src/slash-commands/helpers/reset-usage.ts +66 -0
  1157. package/src/slash-commands/helpers/session-pin.ts +44 -0
  1158. package/src/slash-commands/helpers/ssh.ts +196 -0
  1159. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  1160. package/src/slash-commands/helpers/todo.ts +285 -0
  1161. package/src/slash-commands/helpers/usage-report.ts +198 -0
  1162. package/src/slash-commands/marketplace-install-parser.ts +99 -0
  1163. package/src/slash-commands/types.ts +139 -0
  1164. package/src/ssh/config-writer.ts +183 -0
  1165. package/src/ssh/connection-manager.ts +667 -0
  1166. package/src/ssh/file-transfer.ts +214 -0
  1167. package/src/ssh/sshfs-mount.ts +163 -0
  1168. package/src/ssh/utils.ts +51 -0
  1169. package/src/startup-splash.ts +19 -0
  1170. package/src/stt/asr-client.ts +401 -0
  1171. package/src/stt/asr-protocol.ts +65 -0
  1172. package/src/stt/asr-worker.ts +603 -0
  1173. package/src/stt/downloader.ts +142 -0
  1174. package/src/stt/endpointer.ts +259 -0
  1175. package/src/stt/index.ts +6 -0
  1176. package/src/stt/models.ts +150 -0
  1177. package/src/stt/sherpa-runtime.ts +71 -0
  1178. package/src/stt/stt-controller.ts +320 -0
  1179. package/src/stt/submit-trigger.ts +74 -0
  1180. package/src/subprocess/worker-client.ts +463 -0
  1181. package/src/subprocess/worker-runtime.ts +494 -0
  1182. package/src/system-prompt.ts +894 -0
  1183. package/src/task/agents.ts +168 -0
  1184. package/src/task/commands.ts +132 -0
  1185. package/src/task/discovery.ts +145 -0
  1186. package/src/task/executor.ts +3129 -0
  1187. package/src/task/index.ts +1519 -0
  1188. package/src/task/isolation-ownership.ts +106 -0
  1189. package/src/task/isolation-runner.ts +413 -0
  1190. package/src/task/label.ts +40 -0
  1191. package/src/task/name-generator.ts +1577 -0
  1192. package/src/task/omp-command.ts +26 -0
  1193. package/src/task/output-manager.ts +115 -0
  1194. package/src/task/parallel.ts +221 -0
  1195. package/src/task/persisted-revive.ts +141 -0
  1196. package/src/task/prewalk.ts +6 -0
  1197. package/src/task/prompt-policy.ts +8 -0
  1198. package/src/task/provider-concurrency.ts +100 -0
  1199. package/src/task/render.ts +1814 -0
  1200. package/src/task/renderer.ts +14 -0
  1201. package/src/task/repair-args.ts +118 -0
  1202. package/src/task/spawn-policy.ts +58 -0
  1203. package/src/task/structured-subagent.ts +649 -0
  1204. package/src/task/subprocess-tool-registry.ts +88 -0
  1205. package/src/task/types.ts +551 -0
  1206. package/src/task/worktree.ts +967 -0
  1207. package/src/task/yield-assembly.ts +198 -0
  1208. package/src/telemetry-export.ts +500 -0
  1209. package/src/thinking.ts +364 -0
  1210. package/src/tiny/device.ts +111 -0
  1211. package/src/tiny/dtype.ts +101 -0
  1212. package/src/tiny/message-preproc.ts +155 -0
  1213. package/src/tiny/models.ts +268 -0
  1214. package/src/tiny/text.ts +278 -0
  1215. package/src/tiny/title-client.ts +460 -0
  1216. package/src/tiny/title-protocol.ts +56 -0
  1217. package/src/tiny/worker.ts +354 -0
  1218. package/src/tools/acp-bridge.ts +81 -0
  1219. package/src/tools/approval.ts +245 -0
  1220. package/src/tools/ask.ts +1459 -0
  1221. package/src/tools/ast-edit.ts +718 -0
  1222. package/src/tools/ast-grep.ts +520 -0
  1223. package/src/tools/auto-generated-guard.ts +335 -0
  1224. package/src/tools/bash-interactive.ts +435 -0
  1225. package/src/tools/bash-interceptor.ts +67 -0
  1226. package/src/tools/bash-pty-selection.ts +14 -0
  1227. package/src/tools/bash-skill-urls.ts +335 -0
  1228. package/src/tools/bash.ts +1762 -0
  1229. package/src/tools/browser/aria/aria-snapshot.bundle.txt +7 -0
  1230. package/src/tools/browser/aria/aria-snapshot.ts +131 -0
  1231. package/src/tools/browser/attach.ts +194 -0
  1232. package/src/tools/browser/cmux/cmux-tab.ts +1400 -0
  1233. package/src/tools/browser/cmux/rpc.ts +206 -0
  1234. package/src/tools/browser/cmux/socket-client.ts +445 -0
  1235. package/src/tools/browser/launch.ts +788 -0
  1236. package/src/tools/browser/readable.ts +112 -0
  1237. package/src/tools/browser/registry.ts +287 -0
  1238. package/src/tools/browser/render.ts +226 -0
  1239. package/src/tools/browser/run-cancellation.ts +131 -0
  1240. package/src/tools/browser/run-output.ts +76 -0
  1241. package/src/tools/browser/tab-protocol.ts +115 -0
  1242. package/src/tools/browser/tab-supervisor.ts +1040 -0
  1243. package/src/tools/browser/tab-worker-entry.ts +29 -0
  1244. package/src/tools/browser/tab-worker.ts +1842 -0
  1245. package/src/tools/browser.ts +457 -0
  1246. package/src/tools/builtin-names.ts +66 -0
  1247. package/src/tools/checkpoint.ts +150 -0
  1248. package/src/tools/computer/exposure.ts +38 -0
  1249. package/src/tools/computer/protocol.ts +28 -0
  1250. package/src/tools/computer/supervisor.ts +306 -0
  1251. package/src/tools/computer/worker-entry.ts +34 -0
  1252. package/src/tools/computer/worker.ts +131 -0
  1253. package/src/tools/computer-renderer.ts +108 -0
  1254. package/src/tools/computer.ts +516 -0
  1255. package/src/tools/conflict-detect.ts +815 -0
  1256. package/src/tools/context.ts +46 -0
  1257. package/src/tools/debug.ts +1121 -0
  1258. package/src/tools/default-renderer.ts +139 -0
  1259. package/src/tools/essential-tools.ts +46 -0
  1260. package/src/tools/eval-backends.ts +34 -0
  1261. package/src/tools/eval-format/index.ts +24 -0
  1262. package/src/tools/eval-format/javascript.ts +952 -0
  1263. package/src/tools/eval-format/julia.ts +446 -0
  1264. package/src/tools/eval-format/python.ts +544 -0
  1265. package/src/tools/eval-format/ruby.ts +380 -0
  1266. package/src/tools/eval-render.ts +784 -0
  1267. package/src/tools/eval.ts +774 -0
  1268. package/src/tools/fetch.ts +1889 -0
  1269. package/src/tools/file-recorder.ts +35 -0
  1270. package/src/tools/fs-cache-invalidation.ts +28 -0
  1271. package/src/tools/gh-cache-invalidation.ts +175 -0
  1272. package/src/tools/gh-format.ts +12 -0
  1273. package/src/tools/gh-renderer.ts +484 -0
  1274. package/src/tools/gh.ts +3959 -0
  1275. package/src/tools/github-cache.ts +663 -0
  1276. package/src/tools/glob.ts +682 -0
  1277. package/src/tools/grep.ts +1858 -0
  1278. package/src/tools/grouped-file-output.ts +210 -0
  1279. package/src/tools/hub/index.ts +579 -0
  1280. package/src/tools/hub/jobs.ts +714 -0
  1281. package/src/tools/hub/launch.ts +579 -0
  1282. package/src/tools/hub/messaging.ts +735 -0
  1283. package/src/tools/hub/types.ts +117 -0
  1284. package/src/tools/image-gen.ts +1689 -0
  1285. package/src/tools/image-providers.ts +50 -0
  1286. package/src/tools/index.ts +691 -0
  1287. package/src/tools/inspect-image-renderer.ts +133 -0
  1288. package/src/tools/inspect-image.ts +290 -0
  1289. package/src/tools/json-tree.ts +260 -0
  1290. package/src/tools/jtd-to-json-schema.ts +219 -0
  1291. package/src/tools/jtd-to-typescript.ts +136 -0
  1292. package/src/tools/jtd-utils.ts +102 -0
  1293. package/src/tools/learn.ts +141 -0
  1294. package/src/tools/list-limit.ts +40 -0
  1295. package/src/tools/manage-skill.ts +102 -0
  1296. package/src/tools/match-line-format.ts +20 -0
  1297. package/src/tools/memory-edit.ts +61 -0
  1298. package/src/tools/memory-recall.ts +102 -0
  1299. package/src/tools/memory-reflect.ts +88 -0
  1300. package/src/tools/memory-render.ts +211 -0
  1301. package/src/tools/memory-retain.ts +89 -0
  1302. package/src/tools/output-meta.ts +845 -0
  1303. package/src/tools/output-schema-validator.ts +307 -0
  1304. package/src/tools/path-utils.ts +1381 -0
  1305. package/src/tools/plan-mode-guard.ts +155 -0
  1306. package/src/tools/puppeteer/00_stealth_tampering.txt +44 -0
  1307. package/src/tools/puppeteer/01_stealth_activity.txt +80 -0
  1308. package/src/tools/puppeteer/02_stealth_hairline.txt +57 -0
  1309. package/src/tools/puppeteer/03_stealth_botd.txt +380 -0
  1310. package/src/tools/puppeteer/04_stealth_iframe.txt +174 -0
  1311. package/src/tools/puppeteer/05_stealth_webgl.txt +233 -0
  1312. package/src/tools/puppeteer/06_stealth_screen.txt +260 -0
  1313. package/src/tools/puppeteer/07_stealth_fonts.txt +99 -0
  1314. package/src/tools/puppeteer/08_stealth_audio.txt +63 -0
  1315. package/src/tools/puppeteer/09_stealth_locale.txt +51 -0
  1316. package/src/tools/puppeteer/10_stealth_plugins.txt +212 -0
  1317. package/src/tools/puppeteer/11_stealth_hardware.txt +59 -0
  1318. package/src/tools/puppeteer/12_stealth_codecs.txt +42 -0
  1319. package/src/tools/puppeteer/13_stealth_worker.txt +235 -0
  1320. package/src/tools/read.ts +3742 -0
  1321. package/src/tools/render-utils.ts +924 -0
  1322. package/src/tools/renderers.ts +133 -0
  1323. package/src/tools/report-tool-issue.ts +568 -0
  1324. package/src/tools/resolve.ts +423 -0
  1325. package/src/tools/review.ts +103 -0
  1326. package/src/tools/shell-tokenize.ts +83 -0
  1327. package/src/tools/sqlite-reader.ts +884 -0
  1328. package/src/tools/terminal-output.ts +141 -0
  1329. package/src/tools/todo.ts +1226 -0
  1330. package/src/tools/tool-errors.ts +62 -0
  1331. package/src/tools/tool-result.ts +102 -0
  1332. package/src/tools/tool-timeouts.ts +37 -0
  1333. package/src/tools/tts.ts +266 -0
  1334. package/src/tools/vibe.ts +607 -0
  1335. package/src/tools/write.ts +1640 -0
  1336. package/src/tools/xdev.ts +508 -0
  1337. package/src/tools/yield.ts +486 -0
  1338. package/src/tts/downloader.ts +64 -0
  1339. package/src/tts/index.ts +10 -0
  1340. package/src/tts/models.ts +137 -0
  1341. package/src/tts/runtime.ts +21 -0
  1342. package/src/tts/speakable.ts +392 -0
  1343. package/src/tts/speech-enhancer.ts +206 -0
  1344. package/src/tts/streaming-player.ts +120 -0
  1345. package/src/tts/tts-client.ts +475 -0
  1346. package/src/tts/tts-protocol.ts +69 -0
  1347. package/src/tts/tts-worker.ts +434 -0
  1348. package/src/tts/vocalizer.ts +419 -0
  1349. package/src/tts/wav.ts +58 -0
  1350. package/src/tui/code-cell.ts +268 -0
  1351. package/src/tui/file-list.ts +55 -0
  1352. package/src/tui/hyperlink.ts +178 -0
  1353. package/src/tui/index.ts +13 -0
  1354. package/src/tui/output-block.ts +268 -0
  1355. package/src/tui/status-line.ts +54 -0
  1356. package/src/tui/tree-list.ts +172 -0
  1357. package/src/tui/types.ts +15 -0
  1358. package/src/tui/utils.ts +103 -0
  1359. package/src/tui/width-aware-text.ts +58 -0
  1360. package/src/utils/active-repo-context.ts +143 -0
  1361. package/src/utils/block-context.ts +312 -0
  1362. package/src/utils/changelog.ts +232 -0
  1363. package/src/utils/clipboard.ts +327 -0
  1364. package/src/utils/command-args.ts +76 -0
  1365. package/src/utils/commit-message-generator.ts +148 -0
  1366. package/src/utils/cpuprofile.ts +235 -0
  1367. package/src/utils/edit-mode.ts +61 -0
  1368. package/src/utils/enhanced-paste.ts +230 -0
  1369. package/src/utils/event-bus.ts +33 -0
  1370. package/src/utils/external-editor.ts +78 -0
  1371. package/src/utils/fetch-timeout.ts +10 -0
  1372. package/src/utils/file-display-mode.ts +44 -0
  1373. package/src/utils/file-mentions.ts +293 -0
  1374. package/src/utils/git.ts +2425 -0
  1375. package/src/utils/image-loading.ts +231 -0
  1376. package/src/utils/image-resize.ts +420 -0
  1377. package/src/utils/image-vision-fallback.ts +196 -0
  1378. package/src/utils/inspect-image-mode.ts +39 -0
  1379. package/src/utils/ipc.ts +38 -0
  1380. package/src/utils/jj.ts +416 -0
  1381. package/src/utils/lang-from-path.ts +251 -0
  1382. package/src/utils/local-date.ts +7 -0
  1383. package/src/utils/mac-file-urls.applescript +37 -0
  1384. package/src/utils/markit-cache.ts +166 -0
  1385. package/src/utils/markit.ts +223 -0
  1386. package/src/utils/mupdf-wasm-embed.ts +12 -0
  1387. package/src/utils/open.ts +126 -0
  1388. package/src/utils/profile-tree.ts +111 -0
  1389. package/src/utils/prompt-path.ts +3 -0
  1390. package/src/utils/qrcode.ts +535 -0
  1391. package/src/utils/sample-profile.ts +437 -0
  1392. package/src/utils/session-color.ts +142 -0
  1393. package/src/utils/shell-snapshot-fn-env.sh +63 -0
  1394. package/src/utils/shell-snapshot.ts +316 -0
  1395. package/src/utils/sixel.ts +69 -0
  1396. package/src/utils/thinking-display.ts +163 -0
  1397. package/src/utils/title-generator.ts +597 -0
  1398. package/src/utils/token-rate.ts +72 -0
  1399. package/src/utils/tool-choice.ts +63 -0
  1400. package/src/utils/tools-manager.ts +411 -0
  1401. package/src/utils/turndown.ts +83 -0
  1402. package/src/utils/zip.ts +1106 -0
  1403. package/src/vibe/runtime.ts +1540 -0
  1404. package/src/vibe/state.ts +4 -0
  1405. package/src/web/kagi.ts +304 -0
  1406. package/src/web/parallel.ts +354 -0
  1407. package/src/web/scrapers/artifacthub.ts +207 -0
  1408. package/src/web/scrapers/arxiv.ts +83 -0
  1409. package/src/web/scrapers/aur.ts +162 -0
  1410. package/src/web/scrapers/biorxiv.ts +133 -0
  1411. package/src/web/scrapers/bluesky.ts +262 -0
  1412. package/src/web/scrapers/brew.ts +172 -0
  1413. package/src/web/scrapers/cheatsh.ts +68 -0
  1414. package/src/web/scrapers/chocolatey.ts +196 -0
  1415. package/src/web/scrapers/choosealicense.ts +95 -0
  1416. package/src/web/scrapers/cisa-kev.ts +87 -0
  1417. package/src/web/scrapers/clojars.ts +154 -0
  1418. package/src/web/scrapers/coingecko.ts +177 -0
  1419. package/src/web/scrapers/crates-io.ts +97 -0
  1420. package/src/web/scrapers/crossref.ts +136 -0
  1421. package/src/web/scrapers/devto.ts +147 -0
  1422. package/src/web/scrapers/discogs.ts +306 -0
  1423. package/src/web/scrapers/discourse.ts +197 -0
  1424. package/src/web/scrapers/dockerhub.ts +138 -0
  1425. package/src/web/scrapers/docs-rs.ts +663 -0
  1426. package/src/web/scrapers/fdroid.ts +134 -0
  1427. package/src/web/scrapers/firefox-addons.ts +191 -0
  1428. package/src/web/scrapers/flathub.ts +223 -0
  1429. package/src/web/scrapers/github-gist.ts +58 -0
  1430. package/src/web/scrapers/github.ts +800 -0
  1431. package/src/web/scrapers/gitlab.ts +401 -0
  1432. package/src/web/scrapers/go-pkg.ts +266 -0
  1433. package/src/web/scrapers/hackage.ts +140 -0
  1434. package/src/web/scrapers/hackernews.ts +189 -0
  1435. package/src/web/scrapers/hex.ts +105 -0
  1436. package/src/web/scrapers/huggingface.ts +321 -0
  1437. package/src/web/scrapers/iacr.ts +89 -0
  1438. package/src/web/scrapers/index.ts +252 -0
  1439. package/src/web/scrapers/jetbrains-marketplace.ts +159 -0
  1440. package/src/web/scrapers/lemmy.ts +203 -0
  1441. package/src/web/scrapers/lobsters.ts +175 -0
  1442. package/src/web/scrapers/mastodon.ts +292 -0
  1443. package/src/web/scrapers/maven.ts +138 -0
  1444. package/src/web/scrapers/mdn.ts +173 -0
  1445. package/src/web/scrapers/metacpan.ts +222 -0
  1446. package/src/web/scrapers/musicbrainz.ts +250 -0
  1447. package/src/web/scrapers/npm.ts +98 -0
  1448. package/src/web/scrapers/nuget.ts +183 -0
  1449. package/src/web/scrapers/nvd.ts +222 -0
  1450. package/src/web/scrapers/ollama.ts +239 -0
  1451. package/src/web/scrapers/open-vsx.ts +106 -0
  1452. package/src/web/scrapers/opencorporates.ts +292 -0
  1453. package/src/web/scrapers/openlibrary.ts +336 -0
  1454. package/src/web/scrapers/orcid.ts +286 -0
  1455. package/src/web/scrapers/osv.ts +176 -0
  1456. package/src/web/scrapers/packagist.ts +160 -0
  1457. package/src/web/scrapers/pub-dev.ts +143 -0
  1458. package/src/web/scrapers/pubmed.ts +211 -0
  1459. package/src/web/scrapers/pypi.ts +112 -0
  1460. package/src/web/scrapers/rawg.ts +110 -0
  1461. package/src/web/scrapers/readthedocs.ts +120 -0
  1462. package/src/web/scrapers/reddit.ts +95 -0
  1463. package/src/web/scrapers/repology.ts +251 -0
  1464. package/src/web/scrapers/rfc.ts +201 -0
  1465. package/src/web/scrapers/rubygems.ts +103 -0
  1466. package/src/web/scrapers/searchcode.ts +189 -0
  1467. package/src/web/scrapers/sec-edgar.ts +261 -0
  1468. package/src/web/scrapers/semantic-scholar.ts +171 -0
  1469. package/src/web/scrapers/snapcraft.ts +187 -0
  1470. package/src/web/scrapers/sourcegraph.ts +336 -0
  1471. package/src/web/scrapers/spdx.ts +108 -0
  1472. package/src/web/scrapers/spotify.ts +198 -0
  1473. package/src/web/scrapers/stackoverflow.ts +120 -0
  1474. package/src/web/scrapers/terraform.ts +277 -0
  1475. package/src/web/scrapers/tldr.ts +47 -0
  1476. package/src/web/scrapers/twitter.ts +94 -0
  1477. package/src/web/scrapers/types.ts +354 -0
  1478. package/src/web/scrapers/utils.ts +109 -0
  1479. package/src/web/scrapers/vimeo.ts +133 -0
  1480. package/src/web/scrapers/vscode-marketplace.ts +187 -0
  1481. package/src/web/scrapers/w3c.ts +156 -0
  1482. package/src/web/scrapers/wikidata.ts +344 -0
  1483. package/src/web/scrapers/wikipedia.ts +84 -0
  1484. package/src/web/scrapers/youtube.ts +325 -0
  1485. package/src/web/search/index.ts +376 -0
  1486. package/src/web/search/provider.ts +272 -0
  1487. package/src/web/search/providers/anthropic.ts +401 -0
  1488. package/src/web/search/providers/base.ts +110 -0
  1489. package/src/web/search/providers/brave.ts +179 -0
  1490. package/src/web/search/providers/browser-headers.ts +109 -0
  1491. package/src/web/search/providers/browser-page.ts +123 -0
  1492. package/src/web/search/providers/codex.ts +749 -0
  1493. package/src/web/search/providers/duckduckgo.ts +213 -0
  1494. package/src/web/search/providers/ecosia.ts +182 -0
  1495. package/src/web/search/providers/exa.ts +511 -0
  1496. package/src/web/search/providers/firecrawl.ts +211 -0
  1497. package/src/web/search/providers/gemini.ts +628 -0
  1498. package/src/web/search/providers/google.ts +194 -0
  1499. package/src/web/search/providers/jina.ts +134 -0
  1500. package/src/web/search/providers/kagi.ts +95 -0
  1501. package/src/web/search/providers/kimi.ts +217 -0
  1502. package/src/web/search/providers/mojeek.ts +219 -0
  1503. package/src/web/search/providers/parallel.ts +182 -0
  1504. package/src/web/search/providers/perplexity-auth.ts +142 -0
  1505. package/src/web/search/providers/perplexity.ts +994 -0
  1506. package/src/web/search/providers/public.ts +199 -0
  1507. package/src/web/search/providers/searxng.ts +461 -0
  1508. package/src/web/search/providers/startpage.ts +219 -0
  1509. package/src/web/search/providers/synthetic.ts +120 -0
  1510. package/src/web/search/providers/tavily.ts +242 -0
  1511. package/src/web/search/providers/tinyfish.ts +164 -0
  1512. package/src/web/search/providers/utils.ts +128 -0
  1513. package/src/web/search/providers/xai.ts +372 -0
  1514. package/src/web/search/providers/zai.ts +437 -0
  1515. package/src/web/search/query.ts +850 -0
  1516. package/src/web/search/render.ts +262 -0
  1517. package/src/web/search/types.ts +507 -0
  1518. package/src/web/search/utils.ts +17 -0
  1519. package/src/workspace-tree.ts +326 -0
@@ -0,0 +1,1384 @@
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 { getKeybindings, type Keybinding, Text } from "@oh-my-pi/pi-tui";
21
+ import {
22
+ getAgentDbPath,
23
+ getAgentDir,
24
+ getProjectDir,
25
+ isCompiledBinary,
26
+ parseFrontmatter as parseOmpFrontmatter,
27
+ } from "@oh-my-pi/pi-utils";
28
+ import { getPackageDir as getOmpPackageDir } from "../config";
29
+ import { formatKeyHints } from "../config/keybindings";
30
+ import type { PromptTemplate } from "../config/prompt-templates";
31
+ import { type SettingPath, Settings } from "../config/settings";
32
+ import { EditTool } from "../edit";
33
+ import type { CreateAgentSessionOptions, CreateAgentSessionResult, LoadExtensionsResult } from "../sdk";
34
+ import {
35
+ discoverContextFiles,
36
+ discoverPromptTemplates,
37
+ discoverSessionExtensionPaths,
38
+ discoverSkills,
39
+ createAgentSession as ompCreateAgentSession,
40
+ } from "../sdk";
41
+ import {
42
+ DEFAULT_MAX_BYTES,
43
+ DEFAULT_MAX_LINES,
44
+ type TruncationResult,
45
+ truncateHead,
46
+ truncateTail,
47
+ } from "../session/streaming-output";
48
+ import type { Tool, ToolSession } from "../tools";
49
+ import { BashTool } from "../tools/bash";
50
+ import { GlobTool } from "../tools/glob";
51
+ import { GrepTool } from "../tools/grep";
52
+ import { ReadTool } from "../tools/read";
53
+ import { formatBytes } from "../tools/render-utils";
54
+ import { WriteTool } from "../tools/write";
55
+ import { EventBus } from "../utils/event-bus";
56
+ import { discoverExtensionPaths, loadExtensionFromFactory, loadExtensions } from "./extensions";
57
+ import { ExtensionRuntime } from "./extensions/loader";
58
+ import type { ExtensionFactory, ToolDefinition } from "./extensions/types";
59
+ import { getEnabledPlugins, resolvePluginExtensionPaths, type ScopedInstalledPlugin } from "./plugins/loader";
60
+ import type { Skill } from "./skills";
61
+ import { loadSkillsFromDir } from "./skills";
62
+ import { Type } from "./typebox";
63
+
64
+ const TOOL_DEFINITION_MARKER = "__isToolDefinition";
65
+ const LEGACY_BUILTIN_TOOL_MARKER = "__ompLegacyBuiltinTool";
66
+ const LEGACY_CODING_TOOL_NAMES = ["read", "bash", "edit", "write"] as const;
67
+ const LEGACY_READ_ONLY_TOOL_NAMES = ["read", "grep", "find", "ls"] as const;
68
+
69
+ type LegacyCodingToolName = (typeof LEGACY_CODING_TOOL_NAMES)[number];
70
+ type LegacyRegistryToolName = LegacyCodingToolName | "grep" | "glob";
71
+ type LegacyBuiltinToolDefinition = ToolDefinition & { [LEGACY_BUILTIN_TOOL_MARKER]: true };
72
+
73
+ type LegacySettingOverrides = Partial<Record<SettingPath, unknown>>;
74
+
75
+ interface LegacyThemeLike {
76
+ fg(color: string, text: string): string;
77
+ bold(text: string): string;
78
+ }
79
+
80
+ export interface BashSpawnContext {
81
+ command: string;
82
+ cwd: string;
83
+ env: NodeJS.ProcessEnv;
84
+ }
85
+
86
+ export type BashSpawnHook = (context: BashSpawnContext) => BashSpawnContext;
87
+
88
+ export interface BashOperations {
89
+ exec: (
90
+ command: string,
91
+ cwd: string,
92
+ options: {
93
+ onData: (data: Buffer) => void;
94
+ signal?: AbortSignal;
95
+ timeout?: number;
96
+ env?: NodeJS.ProcessEnv;
97
+ },
98
+ ) => Promise<{ exitCode: number | null }>;
99
+ }
100
+
101
+ export interface BashToolOptions {
102
+ operations?: BashOperations;
103
+ commandPrefix?: string;
104
+ spawnHook?: BashSpawnHook;
105
+ }
106
+
107
+ export interface ReadToolOptions {
108
+ /** Auto-resize large images; maps onto the `images.autoResize` setting. Default: true. */
109
+ autoResizeImages?: boolean;
110
+ }
111
+
112
+ export interface GrepToolOptions {
113
+ /**
114
+ * Unsupported. The historical grep operations seam (isDirectory/readFile for
115
+ * context lines) never delegated the search itself — ripgrep always ran
116
+ * locally — and the built-in native grep tool exposes no filesystem seam at
117
+ * all. Supplying operations throws at tool creation instead of silently
118
+ * searching the local filesystem.
119
+ */
120
+ operations?: unknown;
121
+ }
122
+
123
+ export interface FindOperations {
124
+ exists: (absolutePath: string) => Promise<boolean> | boolean;
125
+ glob: (pattern: string, cwd: string, options: { ignore: string[]; limit: number }) => Promise<string[]> | string[];
126
+ }
127
+
128
+ export interface FindToolOptions {
129
+ operations?: FindOperations;
130
+ }
131
+
132
+ export interface LsOperations {
133
+ exists: (absolutePath: string) => Promise<boolean> | boolean;
134
+ stat: (absolutePath: string) => Promise<{ isDirectory(): boolean }> | { isDirectory(): boolean };
135
+ readdir: (absolutePath: string) => Promise<string[]> | string[];
136
+ }
137
+
138
+ export interface LsToolOptions {
139
+ operations?: LsOperations;
140
+ }
141
+
142
+ const legacyBashSchema = Type.Object({
143
+ command: Type.String({ description: "Bash command to execute" }),
144
+ timeout: Type.Optional(Type.Number({ description: "Timeout in seconds" })),
145
+ });
146
+
147
+ const legacyReadSchema = Type.Object({
148
+ path: Type.String({ description: "Path to read" }),
149
+ offset: Type.Optional(Type.Number({ description: "1-based line offset" })),
150
+ limit: Type.Optional(Type.Number({ description: "Maximum lines to read" })),
151
+ });
152
+
153
+ const legacyGrepSchema = Type.Object({
154
+ pattern: Type.String({ description: "Search pattern" }),
155
+ path: Type.Optional(Type.String({ description: "Directory or file to search" })),
156
+ glob: Type.Optional(Type.String({ description: "Glob filter" })),
157
+ ignoreCase: Type.Optional(Type.Boolean({ description: "Case-insensitive search" })),
158
+ literal: Type.Optional(Type.Boolean({ description: "Treat pattern as a literal string" })),
159
+ context: Type.Optional(Type.Number({ description: "Context lines" })),
160
+ });
161
+
162
+ const legacyFindSchema = Type.Object({
163
+ pattern: Type.String({ description: "Glob pattern to match files" }),
164
+ path: Type.Optional(Type.String({ description: "Directory to search" })),
165
+ limit: Type.Optional(Type.Number({ description: "Maximum results" })),
166
+ });
167
+
168
+ const legacyLsSchema = Type.Object({
169
+ path: Type.Optional(Type.String({ description: "Directory to list" })),
170
+ limit: Type.Optional(Type.Number({ description: "Maximum entries" })),
171
+ });
172
+
173
+ function markToolDefinition<TParams extends TSchema, TDetails>(
174
+ tool: ToolDefinition<TParams, TDetails>,
175
+ ): ToolDefinition<TParams, TDetails> {
176
+ Object.defineProperty(tool, TOOL_DEFINITION_MARKER, {
177
+ value: true,
178
+ enumerable: false,
179
+ writable: false,
180
+ configurable: true,
181
+ });
182
+ return tool;
183
+ }
184
+
185
+ function legacyToolSession(cwd: string, settingOverrides?: LegacySettingOverrides): ToolSession {
186
+ return {
187
+ cwd,
188
+ hasUI: false,
189
+ getSessionFile: () => null,
190
+ getSessionSpawns: () => null,
191
+ settings: Settings.isolated(settingOverrides),
192
+ };
193
+ }
194
+
195
+ function createRegistryTool(
196
+ cwd: string,
197
+ name: LegacyRegistryToolName,
198
+ settingOverrides?: LegacySettingOverrides,
199
+ ): Tool {
200
+ const session = legacyToolSession(cwd, settingOverrides);
201
+ switch (name) {
202
+ case "bash":
203
+ return new BashTool(session);
204
+ case "edit":
205
+ return new EditTool(session);
206
+ case "glob":
207
+ return new GlobTool(session);
208
+ case "grep":
209
+ return new GrepTool(session);
210
+ case "read":
211
+ return new ReadTool(session);
212
+ case "write":
213
+ return new WriteTool(session);
214
+ }
215
+ }
216
+
217
+ async function executeBuiltinTool(
218
+ cwd: string,
219
+ name: LegacyCodingToolName,
220
+ toolCallId: string,
221
+ params: unknown,
222
+ signal: AbortSignal | undefined,
223
+ onUpdate: AgentToolUpdateCallback | undefined,
224
+ ) {
225
+ const tool = createRegistryTool(cwd, name);
226
+ return tool.execute(toolCallId, params, signal, onUpdate);
227
+ }
228
+
229
+ function legacyBuiltinTool(cwd: string, name: LegacyCodingToolName): ToolDefinition {
230
+ const tool = createRegistryTool(cwd, name);
231
+ const definition: LegacyBuiltinToolDefinition = {
232
+ name: tool.name,
233
+ label: tool.label,
234
+ description: tool.description,
235
+ parameters: tool.parameters,
236
+ hidden: tool.hidden,
237
+ deferrable: tool.deferrable,
238
+ approval: tool.approval,
239
+ execute: (toolCallId, params, signal, onUpdate) =>
240
+ executeBuiltinTool(cwd, name, toolCallId, params, signal, onUpdate),
241
+ [LEGACY_BUILTIN_TOOL_MARKER]: true,
242
+ };
243
+ return markToolDefinition(definition);
244
+ }
245
+
246
+ function stringField(value: unknown, key: string): string | undefined {
247
+ if (value === null || typeof value !== "object") return undefined;
248
+ const field = Reflect.get(value, key);
249
+ return typeof field === "string" ? field : undefined;
250
+ }
251
+
252
+ function numberField(value: unknown, key: string): number | undefined {
253
+ if (value === null || typeof value !== "object") return undefined;
254
+ const field = Reflect.get(value, key);
255
+ return typeof field === "number" ? field : undefined;
256
+ }
257
+
258
+ function booleanField(value: unknown, key: string): boolean | undefined {
259
+ if (value === null || typeof value !== "object") return undefined;
260
+ const field = Reflect.get(value, key);
261
+ return typeof field === "boolean" ? field : undefined;
262
+ }
263
+
264
+ function isLegacyThemeLike(value: unknown): value is LegacyThemeLike {
265
+ if (value === null || typeof value !== "object") return false;
266
+ return typeof Reflect.get(value, "fg") === "function" && typeof Reflect.get(value, "bold") === "function";
267
+ }
268
+
269
+ function renderTheme(second: unknown, third: unknown): LegacyThemeLike | undefined {
270
+ if (isLegacyThemeLike(second)) return second;
271
+ if (isLegacyThemeLike(third)) return third;
272
+ return undefined;
273
+ }
274
+
275
+ function themedTitle(theme: LegacyThemeLike | undefined, title: string): string {
276
+ return theme ? theme.fg("toolTitle", theme.bold(title)) : title;
277
+ }
278
+
279
+ function themedMuted(theme: LegacyThemeLike | undefined, text: string): string {
280
+ return theme ? theme.fg("toolOutput", text) : text;
281
+ }
282
+
283
+ function textResult(result: AgentToolResult<unknown> | undefined): string {
284
+ return result?.content.find(block => block.type === "text")?.text ?? "";
285
+ }
286
+
287
+ function legacyRenderResult(result: AgentToolResult<unknown>, _options: unknown, themeArg: unknown): Text {
288
+ const theme = renderTheme(themeArg, undefined);
289
+ const output = textResult(result);
290
+ return new Text(output ? `\n${themedMuted(theme, output)}` : "", 0, 0);
291
+ }
292
+
293
+ function lineRangePath(readPath: string, offset: number | undefined, limit: number | undefined): string {
294
+ if (offset === undefined && limit === undefined) return readPath;
295
+ const start = Math.max(1, Math.floor(offset ?? 1));
296
+ if (limit === undefined) return `${readPath}:${start}`;
297
+ const end = Math.max(start, start + Math.max(1, Math.floor(limit)) - 1);
298
+ return `${readPath}:${start}-${end}`;
299
+ }
300
+
301
+ function escapeRegexLiteral(value: string): string {
302
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
303
+ }
304
+
305
+ function joinLegacyGlob(searchPath: string, pattern: string): string {
306
+ if (path.isAbsolute(pattern)) return pattern;
307
+ if (!searchPath || searchPath === ".") return pattern;
308
+ return path.join(searchPath, pattern);
309
+ }
310
+
311
+ function normalizeLegacyLimit(limit: number | undefined, fallback: number): number {
312
+ if (limit === undefined || !Number.isFinite(limit)) return fallback;
313
+ return Math.max(1, Math.floor(limit));
314
+ }
315
+
316
+ function appendStatus(text: string, status: string): string {
317
+ return text ? `${text}\n\n${status}` : status;
318
+ }
319
+
320
+ function legacyBashSnapshot(output: string): { text: string; details?: { truncation: TruncationResult } } {
321
+ const truncation = truncateTail(output, { maxLines: DEFAULT_MAX_LINES, maxBytes: DEFAULT_MAX_BYTES });
322
+ if (!truncation.truncated) {
323
+ return { text: truncation.content };
324
+ }
325
+ const startLine = truncation.totalLines - (truncation.outputLines ?? 0) + 1;
326
+ const note =
327
+ truncation.truncatedBy === "lines"
328
+ ? `Showing lines ${startLine}-${truncation.totalLines} of ${truncation.totalLines}`
329
+ : `Showing lines ${startLine}-${truncation.totalLines} of ${truncation.totalLines} (${formatBytes(DEFAULT_MAX_BYTES)} limit)`;
330
+ return {
331
+ text: `${truncation.content}\n\n[${note}]`,
332
+ details: { truncation },
333
+ };
334
+ }
335
+
336
+ async function executeLegacyBashOperations(
337
+ operations: BashOperations,
338
+ spawn: BashSpawnContext,
339
+ timeout: number | undefined,
340
+ signal: AbortSignal | undefined,
341
+ onUpdate: AgentToolUpdateCallback | undefined,
342
+ ): Promise<AgentToolResult> {
343
+ let output = "";
344
+ const onData = (data: Buffer) => {
345
+ output += data.toString("utf8");
346
+ if (onUpdate) {
347
+ const snapshot = legacyBashSnapshot(output);
348
+ onUpdate({ content: [{ type: "text", text: snapshot.text }], details: snapshot.details });
349
+ }
350
+ };
351
+ try {
352
+ const result = await operations.exec(spawn.command, spawn.cwd, {
353
+ onData,
354
+ signal,
355
+ timeout,
356
+ env: spawn.env,
357
+ });
358
+ const snapshot = legacyBashSnapshot(output);
359
+ const text = snapshot.text || "(no output)";
360
+ if (result.exitCode !== 0 && result.exitCode !== null) {
361
+ throw new Error(appendStatus(text, `Command exited with code ${result.exitCode}`));
362
+ }
363
+ return { content: [{ type: "text", text }], details: snapshot.details };
364
+ } catch (err) {
365
+ const snapshot = legacyBashSnapshot(output);
366
+ const text = snapshot.text;
367
+ if (err instanceof Error && err.message === "aborted") {
368
+ throw new Error(appendStatus(text, "Command aborted"));
369
+ }
370
+ if (err instanceof Error && err.message.startsWith("timeout:")) {
371
+ throw new Error(appendStatus(text, `Command timed out after ${err.message.slice("timeout:".length)} seconds`));
372
+ }
373
+ throw err;
374
+ }
375
+ }
376
+
377
+ /** Format the active shortcut for legacy extensions that render keybinding hints. */
378
+ export function keyText(action: Keybinding): string {
379
+ return formatKeyHints(getKeybindings().getKeys(action));
380
+ }
381
+
382
+ /** Parse frontmatter using the historical Pi package-root helper. */
383
+ export interface ParsedFrontmatter<T extends Record<string, unknown> = Record<string, unknown>> {
384
+ frontmatter: T;
385
+ body: string;
386
+ }
387
+
388
+ /** Parse YAML frontmatter and throw on invalid metadata. */
389
+ export function parseFrontmatter<T extends Record<string, unknown> = Record<string, unknown>>(
390
+ content: string,
391
+ ): ParsedFrontmatter<T> {
392
+ const { frontmatter, body } = parseOmpFrontmatter(content, { level: "fatal" });
393
+ return { frontmatter: frontmatter as T, body };
394
+ }
395
+
396
+ /** Return content without YAML frontmatter. */
397
+ export function stripFrontmatter(content: string): string {
398
+ return parseFrontmatter(content).body;
399
+ }
400
+
401
+ /** Mark an extension-authored tool as a Pi-compatible tool definition. */
402
+ export function defineTool<TParams extends TSchema = TSchema, TDetails = unknown>(
403
+ tool: ToolDefinition<TParams, TDetails>,
404
+ ): ToolDefinition<TParams, TDetails> {
405
+ return markToolDefinition(tool);
406
+ }
407
+
408
+ /** Create the legacy read tool definition. */
409
+ export function createReadToolDefinition(cwd: string, options?: ReadToolOptions): ToolDefinition {
410
+ const tool = createRegistryTool(
411
+ cwd,
412
+ "read",
413
+ options?.autoResizeImages === undefined ? undefined : { "images.autoResize": options.autoResizeImages },
414
+ );
415
+ return markToolDefinition({
416
+ name: "read",
417
+ label: "Read",
418
+ description: tool.description,
419
+ parameters: legacyReadSchema,
420
+ approval: "read",
421
+ renderCall: (params, options, themeArg) => {
422
+ const theme = renderTheme(options, themeArg);
423
+ const readPath = stringField(params, "path") ?? "";
424
+ return new Text(`${themedTitle(theme, "read")} ${themedMuted(theme, readPath)}`, 0, 0);
425
+ },
426
+ renderResult: legacyRenderResult,
427
+ execute: (toolCallId, params, signal, onUpdate) => {
428
+ const readPath = stringField(params, "path") ?? "";
429
+ const pathWithRange = lineRangePath(readPath, numberField(params, "offset"), numberField(params, "limit"));
430
+ return tool.execute(toolCallId, { path: pathWithRange }, signal, onUpdate);
431
+ },
432
+ });
433
+ }
434
+
435
+ /** Create the legacy read tool. */
436
+ export function createReadTool(cwd: string, options?: ReadToolOptions): ToolDefinition {
437
+ return createReadToolDefinition(cwd, options);
438
+ }
439
+
440
+ /** Create the legacy bash tool definition. */
441
+ export function createBashToolDefinition(cwd: string, options?: BashToolOptions): ToolDefinition {
442
+ const tool = createRegistryTool(cwd, "bash");
443
+ return markToolDefinition({
444
+ name: "bash",
445
+ label: "Bash",
446
+ description: tool.description,
447
+ parameters: legacyBashSchema,
448
+ approval: "exec",
449
+ renderCall: (params, optionsArg, themeArg) => {
450
+ const theme = renderTheme(optionsArg, themeArg);
451
+ const command = stringField(params, "command") ?? "";
452
+ return new Text(`${themedTitle(theme, "bash")} ${themedMuted(theme, command)}`, 0, 0);
453
+ },
454
+ renderResult: legacyRenderResult,
455
+ execute: (toolCallId, params, signal, onUpdate) => {
456
+ const rawCommand = stringField(params, "command") ?? "";
457
+ const command = options?.commandPrefix ? `${options.commandPrefix}\n${rawCommand}` : rawCommand;
458
+ const timeout = numberField(params, "timeout");
459
+ const spawn = options?.spawnHook?.({ command, cwd, env: process.env });
460
+ if (options?.operations) {
461
+ return executeLegacyBashOperations(
462
+ options.operations,
463
+ { command: spawn?.command ?? command, cwd: spawn?.cwd ?? cwd, env: spawn?.env ?? process.env },
464
+ timeout,
465
+ signal,
466
+ onUpdate,
467
+ );
468
+ }
469
+ return tool.execute(
470
+ toolCallId,
471
+ {
472
+ command: spawn?.command ?? command,
473
+ cwd: spawn?.cwd ?? cwd,
474
+ env: spawn?.env,
475
+ timeout,
476
+ },
477
+ signal,
478
+ onUpdate,
479
+ );
480
+ },
481
+ });
482
+ }
483
+
484
+ /** Create the legacy bash tool. */
485
+ export function createBashTool(cwd: string, options?: BashToolOptions): ToolDefinition {
486
+ return createBashToolDefinition(cwd, options);
487
+ }
488
+
489
+ /** Create the legacy grep tool definition. */
490
+ export function createGrepToolDefinition(cwd: string, options?: GrepToolOptions): ToolDefinition {
491
+ if (options?.operations) {
492
+ throw new Error(
493
+ "Legacy GrepToolOptions.operations is not supported: the built-in grep tool searches the local " +
494
+ "filesystem natively and exposes no pluggable filesystem seam (the historical seam only customized " +
495
+ "context-line reads; the search itself always ran locally). Register a custom grep tool via " +
496
+ "defineTool() instead of passing operations to createGrepTool()/createGrepToolDefinition().",
497
+ );
498
+ }
499
+ const tool = createRegistryTool(cwd, "grep");
500
+ return markToolDefinition({
501
+ name: "grep",
502
+ label: "grep",
503
+ description: "Search file contents for a pattern.",
504
+ parameters: legacyGrepSchema,
505
+ approval: "read",
506
+ renderCall: (params, optionsArg, themeArg) => {
507
+ const theme = renderTheme(optionsArg, themeArg);
508
+ const pattern = stringField(params, "pattern") ?? "";
509
+ const searchPath = stringField(params, "path") ?? ".";
510
+ return new Text(`${themedTitle(theme, "grep")} ${themedMuted(theme, `/${pattern}/ in ${searchPath}`)}`, 0, 0);
511
+ },
512
+ renderResult: legacyRenderResult,
513
+ execute: (toolCallId, params, signal, onUpdate) => {
514
+ const rawPattern = stringField(params, "pattern") ?? "";
515
+ const pattern = booleanField(params, "literal") ? escapeRegexLiteral(rawPattern) : rawPattern;
516
+ const searchPath = stringField(params, "path") ?? ".";
517
+ const glob = stringField(params, "glob");
518
+ const context = numberField(params, "context");
519
+ // The new grep reads context from settings fixed at construction; build a
520
+ // per-call tool when the model passes an explicit legacy `context`.
521
+ const grepTool =
522
+ context === undefined
523
+ ? tool
524
+ : createRegistryTool(cwd, "grep", {
525
+ "grep.contextBefore": Math.max(0, Math.floor(context)),
526
+ "grep.contextAfter": Math.max(0, Math.floor(context)),
527
+ });
528
+ return grepTool.execute(
529
+ toolCallId,
530
+ {
531
+ pattern,
532
+ path: glob ? joinLegacyGlob(searchPath, glob) : searchPath,
533
+ case: booleanField(params, "ignoreCase") ? false : undefined,
534
+ },
535
+ signal,
536
+ onUpdate,
537
+ );
538
+ },
539
+ });
540
+ }
541
+
542
+ /** Create the legacy grep tool. */
543
+ export function createGrepTool(cwd: string, options?: GrepToolOptions): ToolDefinition {
544
+ return createGrepToolDefinition(cwd, options);
545
+ }
546
+
547
+ /** Create the legacy find tool definition. */
548
+ export function createFindToolDefinition(cwd: string, options?: FindToolOptions): ToolDefinition {
549
+ const tool = createRegistryTool(cwd, "glob");
550
+ return markToolDefinition({
551
+ name: "find",
552
+ label: "find",
553
+ description: "Find files by glob pattern.",
554
+ parameters: legacyFindSchema,
555
+ approval: "read",
556
+ renderCall: (params, optionsArg, themeArg) => {
557
+ const theme = renderTheme(optionsArg, themeArg);
558
+ const pattern = stringField(params, "pattern") ?? "";
559
+ const searchPath = stringField(params, "path") ?? ".";
560
+ return new Text(`${themedTitle(theme, "find")} ${themedMuted(theme, `${pattern} in ${searchPath}`)}`, 0, 0);
561
+ },
562
+ renderResult: legacyRenderResult,
563
+ execute: async (toolCallId, params, signal, onUpdate) => {
564
+ const pattern = stringField(params, "pattern") ?? "*";
565
+ const searchPath = stringField(params, "path") ?? ".";
566
+ const limit = normalizeLegacyLimit(numberField(params, "limit"), 1000);
567
+ const absolutePath = path.resolve(cwd, searchPath);
568
+ if (options?.operations) {
569
+ if (!(await options.operations.exists(absolutePath))) {
570
+ throw new Error(`Path not found: ${absolutePath}`);
571
+ }
572
+ const matches = await options.operations.glob(pattern, absolutePath, {
573
+ ignore: ["**/node_modules/**", "**/.git/**"],
574
+ limit,
575
+ });
576
+ const output = matches
577
+ .map(match => {
578
+ const rel = path.isAbsolute(match) ? path.relative(absolutePath, match) : match;
579
+ return rel.split(path.sep).join("/");
580
+ })
581
+ .join("\n");
582
+ const truncation = truncateHead(output, { maxLines: Number.MAX_SAFE_INTEGER });
583
+ return {
584
+ content: [{ type: "text", text: truncation.content || "No files found matching pattern" }],
585
+ details: truncation.truncated ? { truncation } : undefined,
586
+ };
587
+ }
588
+ return tool.execute(
589
+ toolCallId,
590
+ { path: joinLegacyGlob(searchPath, pattern), hidden: true, gitignore: true, limit },
591
+ signal,
592
+ onUpdate,
593
+ );
594
+ },
595
+ });
596
+ }
597
+
598
+ /** Create the legacy find tool. */
599
+ export function createFindTool(cwd: string, options?: FindToolOptions): ToolDefinition {
600
+ return createFindToolDefinition(cwd, options);
601
+ }
602
+
603
+ /** Create the legacy ls tool definition. */
604
+ export function createLsToolDefinition(cwd: string, options?: LsToolOptions): ToolDefinition {
605
+ return markToolDefinition({
606
+ name: "ls",
607
+ label: "ls",
608
+ description: "List directory entries.",
609
+ parameters: legacyLsSchema,
610
+ approval: "read",
611
+ renderCall: (params, optionsArg, themeArg) => {
612
+ const theme = renderTheme(optionsArg, themeArg);
613
+ return new Text(`${themedTitle(theme, "ls")} ${themedMuted(theme, stringField(params, "path") ?? ".")}`, 0, 0);
614
+ },
615
+ renderResult: legacyRenderResult,
616
+ execute: async (_toolCallId, params, _signal, _onUpdate) => {
617
+ const rawPath = stringField(params, "path") ?? ".";
618
+ const limit = normalizeLegacyLimit(numberField(params, "limit"), 500);
619
+ const absolutePath = path.resolve(cwd, rawPath);
620
+ const ops = options?.operations;
621
+ const exists = ops
622
+ ? await ops.exists(absolutePath)
623
+ : await fs.promises.stat(absolutePath).then(
624
+ () => true,
625
+ () => false,
626
+ );
627
+ if (!exists) throw new Error(`Path not found: ${absolutePath}`);
628
+ const stat = ops ? await ops.stat(absolutePath) : await fs.promises.stat(absolutePath);
629
+ if (!stat.isDirectory()) {
630
+ return { content: [{ type: "text", text: rawPath }] };
631
+ }
632
+ const entries = ops ? await ops.readdir(absolutePath) : await fs.promises.readdir(absolutePath);
633
+ const sorted = [...entries].sort((a, b) => a.localeCompare(b));
634
+ const limited = sorted.slice(0, limit);
635
+ const output = limited.join("\n");
636
+ const details = sorted.length > limited.length ? { entryLimitReached: limit } : undefined;
637
+ const suffix = details ? `\n\n[${limit} entries limit reached]` : "";
638
+ return { content: [{ type: "text", text: `${output}${suffix}` }], details };
639
+ },
640
+ });
641
+ }
642
+
643
+ /** Create the legacy ls tool. */
644
+ export function createLsTool(cwd: string, options?: LsToolOptions): ToolDefinition {
645
+ return createLsToolDefinition(cwd, options);
646
+ }
647
+
648
+ /** Create legacy read, bash, edit, and write tools. */
649
+ export function createCodingTools(cwd: string): ToolDefinition[] {
650
+ return LEGACY_CODING_TOOL_NAMES.map(name => legacyBuiltinTool(cwd, name));
651
+ }
652
+
653
+ /** Create legacy read, grep, find, and ls tools. */
654
+ export function createReadOnlyTools(cwd: string): ToolDefinition[] {
655
+ return LEGACY_READ_ONLY_TOOL_NAMES.map(name => {
656
+ if (name === "read") return createReadTool(cwd);
657
+ if (name === "grep") return createGrepTool(cwd);
658
+ if (name === "find") return createFindTool(cwd);
659
+ return createLsTool(cwd);
660
+ });
661
+ }
662
+
663
+ export const SettingsManager = {
664
+ create(cwd: string, agentDir?: string): Promise<Settings> {
665
+ return Settings.init({ cwd, agentDir });
666
+ },
667
+
668
+ inMemory(): Settings {
669
+ return Settings.isolated();
670
+ },
671
+ } as const;
672
+
673
+ /** Scope used by the legacy package manager for discovered resources. */
674
+ export type SourceScope = "user" | "project" | "temporary";
675
+
676
+ /** Discovery metadata exposed alongside a legacy package resource path. */
677
+ export interface PathMetadata {
678
+ source: string;
679
+ scope: SourceScope;
680
+ origin: "package" | "top-level";
681
+ baseDir?: string;
682
+ }
683
+
684
+ /** One extension, skill, prompt, or theme resolved by the legacy package manager. */
685
+ export interface ResolvedResource {
686
+ path: string;
687
+ enabled: boolean;
688
+ metadata: PathMetadata;
689
+ }
690
+
691
+ /** Resource groups returned by {@link DefaultPackageManager.resolve}. */
692
+ export interface ResolvedPaths {
693
+ extensions: ResolvedResource[];
694
+ skills: ResolvedResource[];
695
+ prompts: ResolvedResource[];
696
+ themes: ResolvedResource[];
697
+ }
698
+
699
+ /** Action a legacy caller requests when a configured package is unavailable. */
700
+ export type MissingSourceAction = "install" | "skip" | "error";
701
+
702
+ /** Construction inputs accepted by the legacy package manager. */
703
+ export interface DefaultPackageManagerOptions {
704
+ cwd: string;
705
+ agentDir: string;
706
+ settingsManager: Settings | Promise<Settings>;
707
+ }
708
+
709
+ /**
710
+ * Enumerates the extensions OMP would load through the historical package
711
+ * manager surface used by legacy extensions.
712
+ */
713
+ export class DefaultPackageManager {
714
+ #cwd: string;
715
+ #agentDir: string;
716
+ #settingsManager: Settings | Promise<Settings>;
717
+
718
+ constructor(options: DefaultPackageManagerOptions) {
719
+ this.#cwd = options.cwd;
720
+ this.#agentDir = options.agentDir;
721
+ this.#settingsManager = options.settingsManager;
722
+ }
723
+
724
+ /** Resolve enabled extension paths with their OMP plugin provenance. */
725
+ async resolve(_onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths> {
726
+ const settings = await this.#settingsManager;
727
+ const configuredPaths = settings.get("extensions") ?? [];
728
+ const disabledExtensionIds = settings.get("disabledExtensions") ?? [];
729
+ const [extensionPaths, plugins] = await Promise.all([
730
+ discoverExtensionPaths(configuredPaths, this.#cwd, disabledExtensionIds),
731
+ getEnabledPlugins(this.#cwd),
732
+ ]);
733
+ const pluginByExtensionPath = new Map<string, ScopedInstalledPlugin>();
734
+ for (const plugin of plugins) {
735
+ for (const extensionPath of resolvePluginExtensionPaths(plugin)) {
736
+ pluginByExtensionPath.set(path.resolve(extensionPath), plugin);
737
+ }
738
+ }
739
+
740
+ const extensions = extensionPaths.map(extensionPath => {
741
+ const resolvedPath = path.resolve(extensionPath);
742
+ const plugin = pluginByExtensionPath.get(resolvedPath);
743
+ const agentDirRelative = path.relative(path.resolve(this.#agentDir), resolvedPath);
744
+ const metadata: PathMetadata = plugin
745
+ ? {
746
+ source: `npm:${plugin.name}`,
747
+ scope: plugin.scope,
748
+ origin: "package",
749
+ baseDir: plugin.path,
750
+ }
751
+ : {
752
+ source: "auto",
753
+ scope:
754
+ agentDirRelative === "" ||
755
+ (!agentDirRelative.startsWith("..") && !path.isAbsolute(agentDirRelative))
756
+ ? "user"
757
+ : "project",
758
+ origin: "top-level",
759
+ };
760
+ return { path: resolvedPath, enabled: true, metadata };
761
+ });
762
+
763
+ return { extensions, skills: [], prompts: [], themes: [] };
764
+ }
765
+ }
766
+
767
+ /**
768
+ * Resource-loader compatibility layer for legacy pi extensions.
769
+ *
770
+ * Upstream `@earendil-works/pi-coding-agent` centralizes extension / skill /
771
+ * prompt / theme / AGENTS.md discovery inside a `DefaultResourceLoader`
772
+ * instance that the caller constructs, `reload()`s, and hands to
773
+ * `createAgentSession({ resourceLoader })`. Every published version of
774
+ * pi-schedule-prompt (≥0.2.0) and other pi extensions that spawn subagents
775
+ * import the class at module scope; a missing export takes the whole
776
+ * extension down at parse time (issue #4567).
777
+ *
778
+ * OMP does the same discovery inline inside `createAgentSession()`, so this
779
+ * shim intentionally does NOT re-implement pi's ResourceLoader plumbing.
780
+ * Instead the loader captures the caller's intent (`no*` flags, `*Override`
781
+ * callbacks, `additional*Paths`, `extensionFactories`, `settingsManager`,
782
+ * `eventBus`) plus the discovery results, and the sibling `createAgentSession`
783
+ * override below translates them into OMP's native session options
784
+ * (`disableExtensionDiscovery`, `preloadedExtensionPaths`, `extensions`,
785
+ * `skills`, `promptTemplates`, `contextFiles`, `settings`, `eventBus`,
786
+ * `systemPrompt`) before delegating to `../sdk`.
787
+ *
788
+ * The pi surface it emulates is the intersection actually used by real
789
+ * extensions in the wild — themes are silently dropped (OMP has no
790
+ * session-level themes surface); `extendResources`, `loadProjectTrustExtensions`,
791
+ * and provider-trust hooks are omitted.
792
+ */
793
+
794
+ export type ResourceDiagnostic = {
795
+ type: "error" | "warning" | "info";
796
+ message: string;
797
+ path?: string;
798
+ };
799
+
800
+ export interface AgentsFile {
801
+ path: string;
802
+ content: string;
803
+ }
804
+
805
+ /** Marker interface preserved for pi extensions that type against upstream. */
806
+ export interface Theme {
807
+ name: string;
808
+ }
809
+
810
+ export interface DefaultResourceLoaderOptions {
811
+ cwd?: string;
812
+ agentDir?: string;
813
+ settingsManager?: Settings | Promise<Settings>;
814
+ eventBus?: EventBus;
815
+ additionalExtensionPaths?: string[];
816
+ additionalSkillPaths?: string[];
817
+ additionalPromptTemplatePaths?: string[];
818
+ additionalThemePaths?: string[];
819
+ extensionFactories?: ExtensionFactory[];
820
+ noExtensions?: boolean;
821
+ noSkills?: boolean;
822
+ noPromptTemplates?: boolean;
823
+ noThemes?: boolean;
824
+ noContextFiles?: boolean;
825
+ systemPrompt?: string;
826
+ appendSystemPrompt?: string | string[];
827
+ extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;
828
+ skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {
829
+ skills: Skill[];
830
+ diagnostics: ResourceDiagnostic[];
831
+ };
832
+ promptsOverride?: (base: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] }) => {
833
+ prompts: PromptTemplate[];
834
+ diagnostics: ResourceDiagnostic[];
835
+ };
836
+ themesOverride?: (base: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }) => {
837
+ themes: Theme[];
838
+ diagnostics: ResourceDiagnostic[];
839
+ };
840
+ agentsFilesOverride?: (base: { agentsFiles: AgentsFile[] }) => { agentsFiles: AgentsFile[] };
841
+ systemPromptOverride?: (base: string | undefined) => string | undefined;
842
+ appendSystemPromptOverride?: (base: string[]) => string[];
843
+ }
844
+
845
+ /**
846
+ * The subset of {@link DefaultResourceLoader} state consumed by the
847
+ * {@link createAgentSession} adapter. Kept as an explicit interface so tests
848
+ * (and any future third-party ResourceLoader passed to `createAgentSession`)
849
+ * only need to satisfy the read surface — not the reload lifecycle.
850
+ */
851
+ export interface ResourceLoader {
852
+ getExtensions(): LoadExtensionsResult;
853
+ getSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] };
854
+ getPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] };
855
+ getThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] };
856
+ getAgentsFiles(): { agentsFiles: AgentsFile[] };
857
+ getSystemPrompt(): string | undefined;
858
+ getAppendSystemPrompt(): string[];
859
+ reload(): Promise<void>;
860
+ /** @internal — used by the shim's createAgentSession to detect its own loaders. */
861
+ readonly __ompLegacyPiLoader?: true;
862
+ }
863
+
864
+ /** Create a pre-initialization runtime for legacy extension resource loaders. */
865
+ export function createExtensionRuntime(): ExtensionRuntime {
866
+ return new ExtensionRuntime();
867
+ }
868
+
869
+ /**
870
+ * Loader-owned inputs that {@link createAgentSession} needs regardless of
871
+ * whether the caller provided extra options. `cwd`/`agentDir` fall back to
872
+ * `getProjectDir()`/`getAgentDir()` at construction time so subsequent
873
+ * `reload()` and `createAgentSession()` calls read the same directories the
874
+ * caller thought they were configuring.
875
+ */
876
+ interface ResolvedLoaderState {
877
+ cwd: string;
878
+ agentDir: string;
879
+ settingsPromise?: Promise<Settings>;
880
+ eventBus: EventBus;
881
+ extensionFactories: ExtensionFactory[];
882
+ noExtensions: boolean;
883
+ additionalExtensionPaths: string[];
884
+ additionalSkillPaths: string[];
885
+ additionalPromptTemplatePaths: string[];
886
+ }
887
+
888
+ interface AdditionalSkillLoadResult {
889
+ skills: Skill[];
890
+ diagnostics: ResourceDiagnostic[];
891
+ }
892
+
893
+ interface AdditionalPromptLoadResult {
894
+ prompts: PromptTemplate[];
895
+ diagnostics: ResourceDiagnostic[];
896
+ }
897
+
898
+ export class DefaultResourceLoader implements ResourceLoader {
899
+ readonly __ompLegacyPiLoader = true as const;
900
+ #state: ResolvedLoaderState;
901
+ #options: DefaultResourceLoaderOptions;
902
+ #extensionsResult: LoadExtensionsResult = { extensions: [], errors: [], runtime: createExtensionRuntime() };
903
+ #skills: Skill[] = [];
904
+ #skillDiagnostics: ResourceDiagnostic[] = [];
905
+ #prompts: PromptTemplate[] = [];
906
+ #promptDiagnostics: ResourceDiagnostic[] = [];
907
+ #themes: Theme[] = [];
908
+ #themeDiagnostics: ResourceDiagnostic[] = [];
909
+ #agentsFiles: AgentsFile[] = [];
910
+ #systemPrompt: string | undefined;
911
+ #appendSystemPrompt: string[] = [];
912
+ #loaded = false;
913
+
914
+ constructor(options: DefaultResourceLoaderOptions = {}) {
915
+ this.#options = options;
916
+ const cwd = options.cwd ?? getProjectDir();
917
+ const agentDir = options.agentDir ?? getAgentDir();
918
+ this.#state = {
919
+ cwd,
920
+ agentDir,
921
+ settingsPromise: options.settingsManager ? Promise.resolve(options.settingsManager) : undefined,
922
+ eventBus: options.eventBus ?? new EventBus(),
923
+ extensionFactories: options.extensionFactories ?? [],
924
+ noExtensions: options.noExtensions ?? false,
925
+ additionalExtensionPaths: options.additionalExtensionPaths ?? [],
926
+ additionalSkillPaths: options.additionalSkillPaths ?? [],
927
+ additionalPromptTemplatePaths: options.additionalPromptTemplatePaths ?? [],
928
+ };
929
+ }
930
+
931
+ getExtensions(): LoadExtensionsResult {
932
+ return this.#extensionsResult;
933
+ }
934
+
935
+ getSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] } {
936
+ return { skills: this.#skills, diagnostics: this.#skillDiagnostics };
937
+ }
938
+
939
+ getPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {
940
+ return { prompts: this.#prompts, diagnostics: this.#promptDiagnostics };
941
+ }
942
+
943
+ getThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {
944
+ return { themes: this.#themes, diagnostics: this.#themeDiagnostics };
945
+ }
946
+
947
+ getAgentsFiles(): { agentsFiles: AgentsFile[] } {
948
+ return { agentsFiles: this.#agentsFiles };
949
+ }
950
+
951
+ getSystemPrompt(): string | undefined {
952
+ return this.#systemPrompt;
953
+ }
954
+
955
+ getAppendSystemPrompt(): string[] {
956
+ return this.#appendSystemPrompt;
957
+ }
958
+
959
+ /**
960
+ * Discovery snapshot used to seed the session. Emulates upstream pi's
961
+ * `reload()` lifecycle: run every enabled discovery arm against the
962
+ * resolved cwd/agentDir, then thread each result through the caller's
963
+ * `*Override` callback. Discovery arms guarded by an `no*` flag start from
964
+ * an empty base — callers that flipped the flag off still get the override
965
+ * hook, so overrides can inject synthetic entries without triggering a
966
+ * filesystem scan they explicitly opted out of.
967
+ */
968
+ async reload(): Promise<void> {
969
+ const { cwd, agentDir } = this.#state;
970
+ const options = this.#options;
971
+
972
+ let settingsPromise = this.#state.settingsPromise;
973
+ if (!settingsPromise) {
974
+ settingsPromise = Settings.init({ cwd, agentDir });
975
+ this.#state.settingsPromise = settingsPromise;
976
+ }
977
+ const settings = await settingsPromise;
978
+
979
+ const [extensionsResult, skillsBase, additionalSkills, prompts, additionalPrompts, agentsFiles] =
980
+ await Promise.all([
981
+ this.#loadExtensions(settings),
982
+ options.noSkills
983
+ ? Promise.resolve({ skills: [], warnings: [] })
984
+ : discoverSkills(cwd, agentDir, {
985
+ ...settings.getGroup("skills"),
986
+ disabledExtensions: settings.get("disabledExtensions") ?? [],
987
+ }),
988
+ this.#loadAdditionalSkills(),
989
+ options.noPromptTemplates ? Promise.resolve([]) : discoverPromptTemplates(cwd, agentDir),
990
+ this.#loadAdditionalPromptTemplates(),
991
+ options.noContextFiles ? Promise.resolve([]) : discoverContextFiles(cwd, agentDir),
992
+ ]);
993
+
994
+ this.#extensionsResult = options.extensionsOverride
995
+ ? options.extensionsOverride(extensionsResult)
996
+ : extensionsResult;
997
+
998
+ const skillsBaseResult = {
999
+ skills: [...skillsBase.skills, ...additionalSkills.skills],
1000
+ diagnostics: [
1001
+ ...skillsBase.warnings.map(w => ({
1002
+ type: "warning" as const,
1003
+ message: w.message,
1004
+ path: w.skillPath,
1005
+ })),
1006
+ ...additionalSkills.diagnostics,
1007
+ ],
1008
+ };
1009
+ const skillsFinal = options.skillsOverride ? options.skillsOverride(skillsBaseResult) : skillsBaseResult;
1010
+ this.#skills = skillsFinal.skills;
1011
+ this.#skillDiagnostics = skillsFinal.diagnostics;
1012
+
1013
+ const promptsBase = {
1014
+ prompts: [...prompts, ...additionalPrompts.prompts],
1015
+ diagnostics: additionalPrompts.diagnostics,
1016
+ };
1017
+ const promptsFinal = options.promptsOverride ? options.promptsOverride(promptsBase) : promptsBase;
1018
+ this.#prompts = promptsFinal.prompts;
1019
+ this.#promptDiagnostics = promptsFinal.diagnostics;
1020
+
1021
+ const themesBase = { themes: [] as Theme[], diagnostics: [] as ResourceDiagnostic[] };
1022
+ const themesFinal = options.themesOverride ? options.themesOverride(themesBase) : themesBase;
1023
+ this.#themes = themesFinal.themes;
1024
+ this.#themeDiagnostics = themesFinal.diagnostics;
1025
+
1026
+ const agentsFilesBase = { agentsFiles };
1027
+ const agentsFilesFinal = options.agentsFilesOverride
1028
+ ? options.agentsFilesOverride(agentsFilesBase)
1029
+ : agentsFilesBase;
1030
+ this.#agentsFiles = agentsFilesFinal.agentsFiles;
1031
+
1032
+ const baseSystemPrompt = options.systemPrompt;
1033
+ this.#systemPrompt = options.systemPromptOverride
1034
+ ? options.systemPromptOverride(baseSystemPrompt)
1035
+ : baseSystemPrompt;
1036
+
1037
+ const appendSource = options.appendSystemPrompt;
1038
+ const baseAppend =
1039
+ typeof appendSource === "string" ? [appendSource] : Array.isArray(appendSource) ? appendSource : [];
1040
+ this.#appendSystemPrompt = options.appendSystemPromptOverride
1041
+ ? options.appendSystemPromptOverride(baseAppend)
1042
+ : baseAppend;
1043
+
1044
+ this.#loaded = true;
1045
+ }
1046
+
1047
+ async #loadExtensions(settings: Settings): Promise<LoadExtensionsResult> {
1048
+ const { cwd, noExtensions, additionalExtensionPaths, extensionFactories, eventBus } = this.#state;
1049
+
1050
+ if (noExtensions && additionalExtensionPaths.length === 0 && extensionFactories.length === 0) {
1051
+ return { extensions: [], errors: [], runtime: createExtensionRuntime() };
1052
+ }
1053
+
1054
+ const paths = await discoverSessionExtensionPaths(
1055
+ {
1056
+ disableExtensionDiscovery: noExtensions,
1057
+ additionalExtensionPaths,
1058
+ },
1059
+ cwd,
1060
+ settings,
1061
+ );
1062
+
1063
+ const result = await loadExtensions(paths, cwd, eventBus);
1064
+ for (let i = 0; i < extensionFactories.length; i++) {
1065
+ const loaded = await loadExtensionFromFactory(
1066
+ extensionFactories[i],
1067
+ cwd,
1068
+ eventBus,
1069
+ result.runtime,
1070
+ `<inline-loader-${i}>`,
1071
+ );
1072
+ result.extensions.push(loaded);
1073
+ }
1074
+ return result;
1075
+ }
1076
+
1077
+ async #loadAdditionalSkills(): Promise<AdditionalSkillLoadResult> {
1078
+ const skills: Skill[] = [];
1079
+ const diagnostics: ResourceDiagnostic[] = [];
1080
+
1081
+ for (const resourcePath of this.#state.additionalSkillPaths) {
1082
+ const resolvedPath = path.isAbsolute(resourcePath)
1083
+ ? resourcePath
1084
+ : path.resolve(this.#state.cwd, resourcePath);
1085
+ const skillDir =
1086
+ path.basename(resolvedPath).toLowerCase() === "skill.md" ? path.dirname(resolvedPath) : resolvedPath;
1087
+ try {
1088
+ const result = await loadSkillsFromDir({
1089
+ dir: skillDir,
1090
+ source: "legacy-resource-loader",
1091
+ });
1092
+ skills.push(...result.skills);
1093
+ diagnostics.push(
1094
+ ...result.warnings.map(w => ({
1095
+ type: "warning" as const,
1096
+ message: w.message,
1097
+ path: w.skillPath,
1098
+ })),
1099
+ );
1100
+ } catch (err) {
1101
+ diagnostics.push({
1102
+ type: "warning",
1103
+ message: `Failed to load additional skill path: ${err instanceof Error ? err.message : String(err)}`,
1104
+ path: resolvedPath,
1105
+ });
1106
+ }
1107
+ }
1108
+
1109
+ return { skills, diagnostics };
1110
+ }
1111
+
1112
+ async #loadAdditionalPromptTemplates(): Promise<AdditionalPromptLoadResult> {
1113
+ const prompts: PromptTemplate[] = [];
1114
+ const diagnostics: ResourceDiagnostic[] = [];
1115
+
1116
+ for (const resourcePath of this.#state.additionalPromptTemplatePaths) {
1117
+ const resolvedPath = path.isAbsolute(resourcePath)
1118
+ ? resourcePath
1119
+ : path.resolve(this.#state.cwd, resourcePath);
1120
+ const files: string[] = [];
1121
+ try {
1122
+ const stat = await fs.promises.stat(resolvedPath);
1123
+ if (stat.isDirectory()) {
1124
+ const glob = new Bun.Glob("**/*.md");
1125
+ for await (const entry of glob.scan({ cwd: resolvedPath, absolute: false, onlyFiles: true })) {
1126
+ files.push(path.join(resolvedPath, entry));
1127
+ }
1128
+ files.sort();
1129
+ } else if (resolvedPath.toLowerCase().endsWith(".md")) {
1130
+ files.push(resolvedPath);
1131
+ } else {
1132
+ diagnostics.push({
1133
+ type: "warning",
1134
+ message: "Additional prompt template path is neither a directory nor a Markdown file",
1135
+ path: resolvedPath,
1136
+ });
1137
+ }
1138
+ } catch (err) {
1139
+ diagnostics.push({
1140
+ type: "warning",
1141
+ message: `Failed to inspect additional prompt template path: ${err instanceof Error ? err.message : String(err)}`,
1142
+ path: resolvedPath,
1143
+ });
1144
+ continue;
1145
+ }
1146
+
1147
+ for (const filePath of files) {
1148
+ try {
1149
+ const raw = await Bun.file(filePath).text();
1150
+ const { frontmatter, body } = parseFrontmatter(raw);
1151
+ const rawDescription = frontmatter.description;
1152
+ let description = typeof rawDescription === "string" ? rawDescription : "";
1153
+ if (!description) {
1154
+ const firstLine = body.split("\n").find(line => line.trim());
1155
+ if (firstLine) {
1156
+ description = firstLine.slice(0, 60);
1157
+ if (firstLine.length > 60) {
1158
+ description += "...";
1159
+ }
1160
+ }
1161
+ }
1162
+
1163
+ const source = "(legacy-resource-loader)";
1164
+ prompts.push({
1165
+ name: path.basename(filePath, path.extname(filePath)),
1166
+ description: description ? `${description} ${source}` : source,
1167
+ content: body,
1168
+ source,
1169
+ });
1170
+ } catch (err) {
1171
+ diagnostics.push({
1172
+ type: "warning",
1173
+ message: `Failed to load additional prompt template: ${err instanceof Error ? err.message : String(err)}`,
1174
+ path: filePath,
1175
+ });
1176
+ }
1177
+ }
1178
+ }
1179
+
1180
+ return { prompts, diagnostics };
1181
+ }
1182
+
1183
+ /** Test seam: whether `reload()` has completed at least once. */
1184
+ get loaded(): boolean {
1185
+ return this.#loaded;
1186
+ }
1187
+
1188
+ /** @internal — used by the shim's createAgentSession to translate options. */
1189
+ __getResolverState(): {
1190
+ cwd: string;
1191
+ agentDir: string;
1192
+ settingsPromise?: Promise<Settings>;
1193
+ eventBus: EventBus;
1194
+ extensionsResult: LoadExtensionsResult;
1195
+ skills: Skill[];
1196
+ prompts: PromptTemplate[];
1197
+ agentsFiles: AgentsFile[];
1198
+ systemPrompt: string | undefined;
1199
+ appendSystemPrompt: string[];
1200
+ extensionFactories: ExtensionFactory[];
1201
+ } {
1202
+ return {
1203
+ cwd: this.#state.cwd,
1204
+ agentDir: this.#state.agentDir,
1205
+ settingsPromise: this.#state.settingsPromise,
1206
+ eventBus: this.#state.eventBus,
1207
+ extensionsResult: this.#extensionsResult,
1208
+ skills: this.#skills,
1209
+ prompts: this.#prompts,
1210
+ agentsFiles: this.#agentsFiles,
1211
+ systemPrompt: this.#systemPrompt,
1212
+ appendSystemPrompt: this.#appendSystemPrompt,
1213
+ extensionFactories: this.#state.extensionFactories,
1214
+ };
1215
+ }
1216
+ }
1217
+
1218
+ /**
1219
+ * Legacy pi extensions call `createAgentSession({ resourceLoader })`. OMP's
1220
+ * native option surface has no such field — extension / skill / prompt /
1221
+ * context-file discovery are configured directly on the session options — so
1222
+ * an untranslated call would silently ignore the loader (including its
1223
+ * `noExtensions`/`noSkills` opt-outs), re-run OMP's own discovery, and
1224
+ * happily re-load the calling extension into the subagent. That's exactly
1225
+ * the recursion the caller passed the loader to prevent.
1226
+ *
1227
+ * Translate the loader's captured state into OMP's option fields, then
1228
+ * delegate to the underlying SDK. Explicit fields on `options` override the
1229
+ * loader (matches upstream pi semantics — a caller can partially override a
1230
+ * shared loader).
1231
+ *
1232
+ * `resourceLoader` is not part of {@link CreateAgentSessionOptions}, so it's
1233
+ * accepted through a widened alias and stripped before the underlying call.
1234
+ */
1235
+ export type LegacyPiCreateAgentSessionOptions = CreateAgentSessionOptions & {
1236
+ resourceLoader?: ResourceLoader;
1237
+ };
1238
+
1239
+ export async function createAgentSession(
1240
+ options: LegacyPiCreateAgentSessionOptions = {},
1241
+ ): Promise<CreateAgentSessionResult> {
1242
+ const loader = options.resourceLoader;
1243
+ if (!loader) {
1244
+ return ompCreateAgentSession(options);
1245
+ }
1246
+
1247
+ if (loader instanceof DefaultResourceLoader && !loader.loaded) {
1248
+ await loader.reload();
1249
+ }
1250
+
1251
+ const state =
1252
+ loader instanceof DefaultResourceLoader
1253
+ ? loader.__getResolverState()
1254
+ : {
1255
+ cwd: options.cwd ?? getProjectDir(),
1256
+ agentDir: options.agentDir ?? getAgentDir(),
1257
+ settingsPromise: undefined,
1258
+ eventBus: undefined,
1259
+ extensionsResult: loader.getExtensions(),
1260
+ skills: loader.getSkills().skills,
1261
+ prompts: loader.getPrompts().prompts,
1262
+ agentsFiles: loader.getAgentsFiles().agentsFiles,
1263
+ systemPrompt: loader.getSystemPrompt(),
1264
+ appendSystemPrompt: loader.getAppendSystemPrompt(),
1265
+ extensionFactories: [] as ExtensionFactory[],
1266
+ };
1267
+
1268
+ const { resourceLoader: _, ...rest } = options;
1269
+ const forwarded: CreateAgentSessionOptions = {
1270
+ ...rest,
1271
+ cwd: rest.cwd ?? state.cwd,
1272
+ agentDir: rest.agentDir ?? state.agentDir,
1273
+ };
1274
+
1275
+ if (rest.eventBus === undefined && state.eventBus !== undefined) {
1276
+ forwarded.eventBus = state.eventBus;
1277
+ }
1278
+ if (rest.settings === undefined && rest.settingsManager === undefined && state.settingsPromise !== undefined) {
1279
+ forwarded.settingsManager = state.settingsPromise;
1280
+ }
1281
+
1282
+ // Route the loader's already-loaded extension result through the SDK's
1283
+ // `preloadedExtensions` seam. Skipping this branch would let
1284
+ // `createAgentSession` re-run its own discovery and undo the caller's
1285
+ // `noExtensions: true`.
1286
+ if (rest.preloadedExtensions === undefined && rest.preloadedExtensionPaths === undefined) {
1287
+ forwarded.preloadedExtensions = state.extensionsResult;
1288
+ }
1289
+
1290
+ if (rest.skills === undefined) {
1291
+ forwarded.skills = state.skills;
1292
+ }
1293
+ if (rest.promptTemplates === undefined) {
1294
+ forwarded.promptTemplates = state.prompts;
1295
+ }
1296
+ if (rest.contextFiles === undefined) {
1297
+ forwarded.contextFiles = state.agentsFiles;
1298
+ }
1299
+
1300
+ if (rest.systemPrompt === undefined && state.systemPrompt !== undefined) {
1301
+ forwarded.systemPrompt = state.systemPrompt;
1302
+ }
1303
+ if (rest.appendSystemPrompt === undefined && state.appendSystemPrompt.length > 0) {
1304
+ forwarded.appendSystemPrompt = state.appendSystemPrompt.join("\n\n");
1305
+ }
1306
+
1307
+ return ompCreateAgentSession(forwarded);
1308
+ }
1309
+
1310
+ /**
1311
+ * Synchronous auth storage surface retained for legacy extensions.
1312
+ *
1313
+ * Modern OMP auth storage is asynchronous, while older provider extensions
1314
+ * call `AuthStorage.create().get()` during module initialization.
1315
+ */
1316
+ export class AuthStorage {
1317
+ constructor() {
1318
+ fs.mkdirSync(path.dirname(getAgentDbPath()), { recursive: true, mode: 0o700 });
1319
+ }
1320
+
1321
+ static create(): AuthStorage {
1322
+ return new AuthStorage();
1323
+ }
1324
+
1325
+ get(provider: string): AuthCredential | undefined {
1326
+ const store = new SqliteAuthCredentialStore(new Database(getAgentDbPath()));
1327
+ try {
1328
+ return store.listAuthCredentials(provider)[0]?.credential;
1329
+ } finally {
1330
+ store.close();
1331
+ }
1332
+ }
1333
+
1334
+ set(provider: string, credential: AuthCredential): void {
1335
+ const store = new SqliteAuthCredentialStore(new Database(getAgentDbPath()));
1336
+ try {
1337
+ store.upsertAuthCredentialForProvider(provider, credential);
1338
+ } finally {
1339
+ store.close();
1340
+ }
1341
+ }
1342
+ }
1343
+
1344
+ /** Read the first active credential for a legacy extension provider. */
1345
+ export function readStoredCredential(provider: string): AuthCredential | undefined {
1346
+ const storage = AuthStorage.create();
1347
+ return storage.get(provider);
1348
+ }
1349
+
1350
+ // Pi SDK path helpers. `export * from "../index"` above only forwards
1351
+ // `getAgentDir`; `getProjectDir` (a `@oh-my-pi/pi-utils` helper) and
1352
+ // `getPackageDir` are absent from that barrel, so legacy extensions importing
1353
+ // either fail Bun's static export check during validation (issue #5968).
1354
+ export { getProjectDir } from "@oh-my-pi/pi-utils";
1355
+
1356
+ /**
1357
+ * Coding-agent package install directory, matching pi's string-valued
1358
+ * `getPackageDir()` contract (extensions do `path.join(getPackageDir(), ...)`
1359
+ * to auto-allow bundled docs/resources).
1360
+ *
1361
+ * omp's canonical `getPackageDir()` (`../config`) returns `undefined` inside a
1362
+ * `bun --compile` binary — `import.meta.dir` is `/$bunfs/root` and no owning
1363
+ * `package.json` exists (issue #1423). Returning `undefined` there would crash
1364
+ * every legacy `path.join(getPackageDir(), ...)` at runtime in the shipped
1365
+ * binary, the primary distribution. So fall back to the executable's own
1366
+ * directory in compiled mode, where the binary *is* the install root. The
1367
+ * `PI_PACKAGE_DIR` override and dev/source/npm-dist walk-up still win via the
1368
+ * canonical helper.
1369
+ */
1370
+ export function getPackageDir(): string {
1371
+ return getOmpPackageDir() ?? (isCompiledBinary() ? path.dirname(process.execPath) : process.cwd());
1372
+ }
1373
+
1374
+ // Legacy pi's `@earendil-works/pi-coding-agent` re-exported `estimateTokens`
1375
+ // from its package root (via `./core/compaction/index.ts`). In omp it lives in
1376
+ // `@oh-my-pi/pi-agent-core/compaction`, and the coding-agent barrel below does
1377
+ // not forward it, so legacy extensions importing it fail Bun's static export
1378
+ // check during validation (issue #6583).
1379
+ export { estimateTokens } from "@oh-my-pi/pi-agent-core/compaction";
1380
+
1381
+ export * from "../index";
1382
+ export { formatBytes as formatSize } from "../tools/render-utils";
1383
+ export { copyToClipboard } from "../utils/clipboard";
1384
+ export { Type } from "./typebox";