@oh-my-pi/pi-coding-agent 8.0.20 → 8.2.0

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 (421) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/docs/session.md +111 -46
  3. package/examples/custom-tools/hello/index.ts +1 -1
  4. package/examples/custom-tools/todo/index.ts +3 -4
  5. package/examples/extensions/api-demo.ts +0 -1
  6. package/examples/extensions/chalk-logger.ts +2 -3
  7. package/examples/extensions/hello.ts +0 -1
  8. package/examples/extensions/pirate.ts +0 -1
  9. package/examples/extensions/plan-mode.ts +15 -16
  10. package/examples/extensions/todo.ts +3 -4
  11. package/examples/extensions/tools.ts +1 -2
  12. package/examples/extensions/with-deps/index.ts +0 -1
  13. package/examples/hooks/auto-commit-on-exit.ts +1 -2
  14. package/examples/hooks/confirm-destructive.ts +0 -1
  15. package/examples/hooks/custom-compaction.ts +1 -2
  16. package/examples/hooks/dirty-repo-guard.ts +0 -1
  17. package/examples/hooks/file-trigger.ts +3 -4
  18. package/examples/hooks/git-checkpoint.ts +0 -1
  19. package/examples/hooks/handoff.ts +3 -4
  20. package/examples/hooks/permission-gate.ts +1 -2
  21. package/examples/hooks/protected-paths.ts +1 -2
  22. package/examples/hooks/qna.ts +2 -3
  23. package/examples/hooks/snake.ts +4 -5
  24. package/examples/hooks/status-line.ts +0 -1
  25. package/examples/sdk/01-minimal.ts +2 -3
  26. package/examples/sdk/02-custom-model.ts +2 -3
  27. package/examples/sdk/03-custom-prompt.ts +3 -4
  28. package/examples/sdk/04-skills.ts +2 -3
  29. package/examples/sdk/06-extensions.ts +1 -2
  30. package/examples/sdk/06-hooks.ts +6 -7
  31. package/examples/sdk/07-context-files.ts +0 -1
  32. package/examples/sdk/08-prompt-templates.ts +0 -1
  33. package/examples/sdk/08-slash-commands.ts +0 -1
  34. package/examples/sdk/09-api-keys-and-oauth.ts +0 -1
  35. package/examples/sdk/10-settings.ts +0 -1
  36. package/examples/sdk/11-sessions.ts +0 -1
  37. package/package.json +54 -23
  38. package/scripts/format-prompts.ts +0 -1
  39. package/src/capability/context-file.ts +3 -4
  40. package/src/capability/extension-module.ts +3 -4
  41. package/src/capability/extension.ts +3 -4
  42. package/src/capability/fs.ts +20 -21
  43. package/src/capability/hook.ts +3 -4
  44. package/src/capability/index.ts +15 -16
  45. package/src/capability/instruction.ts +3 -4
  46. package/src/capability/mcp.ts +3 -4
  47. package/src/capability/prompt.ts +3 -4
  48. package/src/capability/rule.ts +3 -4
  49. package/src/capability/settings.ts +2 -3
  50. package/src/capability/skill.ts +3 -4
  51. package/src/capability/slash-command.ts +3 -4
  52. package/src/capability/ssh.ts +3 -4
  53. package/src/capability/system-prompt.ts +3 -4
  54. package/src/capability/tool.ts +3 -4
  55. package/src/cli/args.ts +5 -6
  56. package/src/cli/config-cli.ts +6 -7
  57. package/src/cli/file-processor.ts +19 -17
  58. package/src/cli/jupyter-cli.ts +105 -0
  59. package/src/cli/list-models.ts +10 -11
  60. package/src/cli/plugin-cli.ts +20 -25
  61. package/src/cli/session-picker.ts +2 -3
  62. package/src/cli/setup-cli.ts +2 -3
  63. package/src/cli/stats-cli.ts +2 -3
  64. package/src/cli/update-cli.ts +25 -22
  65. package/src/commit/agentic/agent.ts +307 -0
  66. package/src/commit/agentic/fallback.ts +96 -0
  67. package/src/commit/agentic/index.ts +351 -0
  68. package/src/commit/agentic/prompts/analyze-file.md +22 -0
  69. package/src/commit/agentic/prompts/session-user.md +26 -0
  70. package/src/commit/agentic/prompts/split-confirm.md +1 -0
  71. package/src/commit/agentic/prompts/system.md +40 -0
  72. package/src/commit/agentic/state.ts +69 -0
  73. package/src/commit/agentic/tools/analyze-file.ts +131 -0
  74. package/src/commit/agentic/tools/git-file-diff.ts +194 -0
  75. package/src/commit/agentic/tools/git-hunk.ts +50 -0
  76. package/src/commit/agentic/tools/git-overview.ts +84 -0
  77. package/src/commit/agentic/tools/index.ts +56 -0
  78. package/src/commit/agentic/tools/propose-changelog.ts +128 -0
  79. package/src/commit/agentic/tools/propose-commit.ts +154 -0
  80. package/src/commit/agentic/tools/recent-commits.ts +81 -0
  81. package/src/commit/agentic/tools/split-commit.ts +280 -0
  82. package/src/commit/agentic/topo-sort.ts +44 -0
  83. package/src/commit/agentic/trivial.ts +51 -0
  84. package/src/commit/agentic/validation.ts +200 -0
  85. package/src/commit/analysis/conventional.ts +165 -0
  86. package/src/commit/analysis/index.ts +4 -0
  87. package/src/commit/analysis/scope.ts +242 -0
  88. package/src/commit/analysis/summary.ts +112 -0
  89. package/src/commit/analysis/validation.ts +66 -0
  90. package/src/commit/changelog/detect.ts +36 -0
  91. package/src/commit/changelog/generate.ts +110 -0
  92. package/src/commit/changelog/index.ts +233 -0
  93. package/src/commit/changelog/parse.ts +44 -0
  94. package/src/commit/cli.ts +93 -0
  95. package/src/commit/git/diff.ts +148 -0
  96. package/src/commit/git/errors.ts +11 -0
  97. package/src/commit/git/index.ts +212 -0
  98. package/src/commit/git/operations.ts +53 -0
  99. package/src/commit/index.ts +5 -0
  100. package/src/commit/map-reduce/index.ts +63 -0
  101. package/src/commit/map-reduce/map-phase.ts +178 -0
  102. package/src/commit/map-reduce/reduce-phase.ts +145 -0
  103. package/src/commit/map-reduce/utils.ts +9 -0
  104. package/src/commit/message.ts +11 -0
  105. package/src/commit/model-selection.ts +80 -0
  106. package/src/commit/pipeline.ts +240 -0
  107. package/src/commit/prompts/analysis-system.md +155 -0
  108. package/src/commit/prompts/analysis-user.md +41 -0
  109. package/src/commit/prompts/changelog-system.md +56 -0
  110. package/src/commit/prompts/changelog-user.md +19 -0
  111. package/src/commit/prompts/file-observer-system.md +26 -0
  112. package/src/commit/prompts/file-observer-user.md +9 -0
  113. package/src/commit/prompts/reduce-system.md +60 -0
  114. package/src/commit/prompts/reduce-user.md +17 -0
  115. package/src/commit/prompts/summary-retry.md +4 -0
  116. package/src/commit/prompts/summary-system.md +52 -0
  117. package/src/commit/prompts/summary-user.md +13 -0
  118. package/src/commit/prompts/types-description.md +2 -0
  119. package/src/commit/types.ts +109 -0
  120. package/src/commit/utils/exclusions.ts +42 -0
  121. package/src/config/file-lock.ts +121 -0
  122. package/src/config/keybindings.ts +6 -8
  123. package/src/config/model-registry.ts +65 -38
  124. package/src/config/model-resolver.ts +18 -19
  125. package/src/config/prompt-templates.ts +11 -11
  126. package/src/config/settings-manager.ts +141 -50
  127. package/src/config.ts +64 -66
  128. package/src/cursor.ts +11 -9
  129. package/src/discovery/agents-md.ts +11 -12
  130. package/src/discovery/builtin.ts +68 -73
  131. package/src/discovery/claude.ts +41 -42
  132. package/src/discovery/cline.ts +11 -12
  133. package/src/discovery/codex.ts +52 -53
  134. package/src/discovery/cursor.ts +9 -10
  135. package/src/discovery/gemini.ts +17 -22
  136. package/src/discovery/github.ts +13 -14
  137. package/src/discovery/helpers.ts +35 -34
  138. package/src/discovery/index.ts +22 -24
  139. package/src/discovery/mcp-json.ts +8 -9
  140. package/src/discovery/ssh.ts +8 -9
  141. package/src/discovery/vscode.ts +4 -5
  142. package/src/discovery/windsurf.ts +6 -7
  143. package/src/exa/company.ts +1 -2
  144. package/src/exa/index.ts +2 -3
  145. package/src/exa/linkedin.ts +1 -2
  146. package/src/exa/mcp-client.ts +14 -16
  147. package/src/exa/render.ts +10 -11
  148. package/src/exa/researcher.ts +1 -2
  149. package/src/exa/search.ts +1 -2
  150. package/src/exa/types.ts +0 -1
  151. package/src/exa/websets.ts +1 -2
  152. package/src/exec/bash-executor.ts +3 -4
  153. package/src/exec/exec.ts +0 -1
  154. package/src/export/custom-share.ts +5 -6
  155. package/src/export/html/index.ts +24 -21
  156. package/src/export/ttsr.ts +2 -3
  157. package/src/extensibility/custom-commands/bundled/review/index.ts +7 -8
  158. package/src/extensibility/custom-commands/loader.ts +18 -15
  159. package/src/extensibility/custom-commands/types.ts +2 -3
  160. package/src/extensibility/custom-tools/loader.ts +11 -12
  161. package/src/extensibility/custom-tools/types.ts +7 -8
  162. package/src/extensibility/custom-tools/wrapper.ts +2 -3
  163. package/src/extensibility/extensions/loader.ts +76 -54
  164. package/src/extensibility/extensions/runner.ts +11 -12
  165. package/src/extensibility/extensions/types.ts +20 -27
  166. package/src/extensibility/extensions/wrapper.ts +3 -4
  167. package/src/extensibility/hooks/index.ts +1 -1
  168. package/src/extensibility/hooks/loader.ts +9 -10
  169. package/src/extensibility/hooks/runner.ts +7 -8
  170. package/src/extensibility/hooks/tool-wrapper.ts +0 -1
  171. package/src/extensibility/hooks/types.ts +11 -18
  172. package/src/extensibility/plugins/doctor.ts +3 -3
  173. package/src/extensibility/plugins/installer.ts +27 -27
  174. package/src/extensibility/plugins/loader.ts +59 -56
  175. package/src/extensibility/plugins/manager.ts +211 -171
  176. package/src/extensibility/plugins/parser.ts +1 -1
  177. package/src/extensibility/plugins/paths.ts +8 -8
  178. package/src/extensibility/skills.ts +63 -60
  179. package/src/extensibility/slash-commands.ts +10 -10
  180. package/src/index.ts +54 -54
  181. package/src/internal-urls/agent-protocol.ts +21 -11
  182. package/src/internal-urls/artifact-protocol.ts +17 -13
  183. package/src/internal-urls/router.ts +1 -2
  184. package/src/internal-urls/rule-protocol.ts +3 -4
  185. package/src/internal-urls/skill-protocol.ts +3 -4
  186. package/src/ipy/executor.ts +109 -9
  187. package/src/ipy/gateway-coordinator.ts +79 -90
  188. package/src/ipy/kernel.ts +32 -30
  189. package/src/ipy/modules.ts +13 -13
  190. package/src/lsp/client.ts +21 -10
  191. package/src/lsp/clients/biome-client.ts +1 -2
  192. package/src/lsp/clients/index.ts +3 -3
  193. package/src/lsp/clients/lsp-linter-client.ts +4 -5
  194. package/src/lsp/config.ts +15 -15
  195. package/src/lsp/edits.ts +4 -5
  196. package/src/lsp/index.ts +43 -44
  197. package/src/lsp/lspmux.ts +8 -8
  198. package/src/lsp/render.ts +99 -61
  199. package/src/lsp/utils.ts +3 -3
  200. package/src/main.ts +71 -37
  201. package/src/mcp/client.ts +2 -3
  202. package/src/mcp/config.ts +5 -6
  203. package/src/mcp/json-rpc.ts +0 -1
  204. package/src/mcp/loader.ts +6 -7
  205. package/src/mcp/manager.ts +17 -18
  206. package/src/mcp/tool-bridge.ts +4 -9
  207. package/src/mcp/tool-cache.ts +2 -3
  208. package/src/mcp/transports/http.ts +2 -4
  209. package/src/mcp/transports/stdio.ts +1 -2
  210. package/src/migrations.ts +63 -52
  211. package/src/modes/components/armin.ts +4 -5
  212. package/src/modes/components/assistant-message.ts +33 -5
  213. package/src/modes/components/bash-execution.ts +7 -8
  214. package/src/modes/components/bordered-loader.ts +3 -3
  215. package/src/modes/components/branch-summary-message.ts +3 -3
  216. package/src/modes/components/compaction-summary-message.ts +3 -3
  217. package/src/modes/components/countdown-timer.ts +0 -1
  218. package/src/modes/components/custom-message.ts +5 -5
  219. package/src/modes/components/diff.ts +1 -1
  220. package/src/modes/components/dynamic-border.ts +2 -2
  221. package/src/modes/components/extensions/extension-dashboard.ts +6 -7
  222. package/src/modes/components/extensions/extension-list.ts +2 -3
  223. package/src/modes/components/extensions/inspector-panel.ts +3 -4
  224. package/src/modes/components/extensions/state-manager.ts +25 -26
  225. package/src/modes/components/extensions/types.ts +1 -2
  226. package/src/modes/components/footer.ts +47 -43
  227. package/src/modes/components/history-search.ts +2 -2
  228. package/src/modes/components/hook-editor.ts +3 -4
  229. package/src/modes/components/hook-input.ts +2 -3
  230. package/src/modes/components/hook-message.ts +5 -5
  231. package/src/modes/components/hook-selector.ts +2 -3
  232. package/src/modes/components/keybinding-hints.ts +2 -3
  233. package/src/modes/components/login-dialog.ts +2 -2
  234. package/src/modes/components/model-selector.ts +12 -12
  235. package/src/modes/components/oauth-selector.ts +2 -2
  236. package/src/modes/components/plugin-settings.ts +20 -20
  237. package/src/modes/components/python-execution.ts +7 -8
  238. package/src/modes/components/queue-mode-selector.ts +3 -3
  239. package/src/modes/components/read-tool-group.ts +2 -2
  240. package/src/modes/components/session-selector.ts +4 -4
  241. package/src/modes/components/settings-defs.ts +77 -69
  242. package/src/modes/components/settings-selector.ts +16 -16
  243. package/src/modes/components/show-images-selector.ts +2 -2
  244. package/src/modes/components/status-line/segments.ts +4 -4
  245. package/src/modes/components/status-line/separators.ts +1 -1
  246. package/src/modes/components/status-line/types.ts +2 -2
  247. package/src/modes/components/status-line-segment-editor.ts +7 -8
  248. package/src/modes/components/status-line.ts +12 -12
  249. package/src/modes/components/theme-selector.ts +8 -7
  250. package/src/modes/components/thinking-selector.ts +4 -4
  251. package/src/modes/components/todo-display.ts +2 -2
  252. package/src/modes/components/todo-reminder.ts +4 -4
  253. package/src/modes/components/tool-execution.ts +16 -19
  254. package/src/modes/components/tree-selector.ts +12 -12
  255. package/src/modes/components/ttsr-notification.ts +5 -5
  256. package/src/modes/components/user-message-selector.ts +1 -1
  257. package/src/modes/components/user-message.ts +1 -1
  258. package/src/modes/components/visual-truncate.ts +0 -1
  259. package/src/modes/components/welcome.ts +4 -4
  260. package/src/modes/controllers/command-controller.ts +46 -47
  261. package/src/modes/controllers/event-controller.ts +16 -20
  262. package/src/modes/controllers/extension-ui-controller.ts +40 -46
  263. package/src/modes/controllers/input-controller.ts +17 -18
  264. package/src/modes/controllers/selector-controller.ts +103 -91
  265. package/src/modes/index.ts +3 -3
  266. package/src/modes/interactive-mode.ts +31 -31
  267. package/src/modes/print-mode.ts +12 -13
  268. package/src/modes/rpc/rpc-client.ts +7 -8
  269. package/src/modes/rpc/rpc-mode.ts +24 -28
  270. package/src/modes/rpc/rpc-types.ts +3 -4
  271. package/src/modes/theme/mermaid-cache.ts +89 -0
  272. package/src/modes/theme/theme.ts +130 -53
  273. package/src/modes/types.ts +10 -10
  274. package/src/modes/utils/ui-helpers.ts +17 -17
  275. package/src/patch/applicator.ts +18 -19
  276. package/src/patch/diff.ts +1 -2
  277. package/src/patch/fuzzy.ts +1 -2
  278. package/src/patch/index.ts +11 -18
  279. package/src/patch/normalize.ts +4 -4
  280. package/src/patch/normative.ts +1 -2
  281. package/src/patch/parser.ts +8 -9
  282. package/src/patch/shared.ts +43 -16
  283. package/src/prompts/tools/task.md +2 -0
  284. package/src/sdk.ts +100 -65
  285. package/src/session/agent-session.ts +84 -85
  286. package/src/session/agent-storage.ts +43 -39
  287. package/src/session/artifacts.ts +32 -10
  288. package/src/session/auth-storage.ts +50 -39
  289. package/src/session/compaction/branch-summarization.ts +7 -10
  290. package/src/session/compaction/compaction.ts +8 -19
  291. package/src/session/compaction/utils.ts +6 -9
  292. package/src/session/history-storage.ts +10 -10
  293. package/src/session/messages.ts +4 -5
  294. package/src/session/session-manager.ts +76 -65
  295. package/src/session/session-storage.ts +57 -69
  296. package/src/session/storage-migration.ts +14 -56
  297. package/src/session/streaming-output.ts +2 -2
  298. package/src/ssh/connection-manager.ts +43 -50
  299. package/src/ssh/ssh-executor.ts +2 -2
  300. package/src/ssh/sshfs-mount.ts +11 -18
  301. package/src/system-prompt.ts +28 -35
  302. package/src/task/agents.ts +45 -30
  303. package/src/task/commands.ts +6 -7
  304. package/src/task/discovery.ts +39 -76
  305. package/src/task/executor.ts +14 -15
  306. package/src/task/index.ts +40 -34
  307. package/src/task/output-manager.ts +93 -0
  308. package/src/task/parallel.ts +0 -1
  309. package/src/task/render.ts +24 -30
  310. package/src/task/subprocess-tool-registry.ts +1 -2
  311. package/src/task/worker-protocol.ts +3 -3
  312. package/src/task/worker.ts +33 -39
  313. package/src/task/worktree.ts +19 -19
  314. package/src/tools/ask.ts +41 -20
  315. package/src/tools/bash-interceptor.ts +1 -5
  316. package/src/tools/bash.ts +91 -97
  317. package/src/tools/calculator.ts +49 -47
  318. package/src/tools/complete.ts +4 -5
  319. package/src/tools/context.ts +2 -2
  320. package/src/tools/fetch.ts +84 -124
  321. package/src/tools/find.ts +94 -98
  322. package/src/tools/gemini-image.ts +14 -14
  323. package/src/tools/grep.ts +100 -116
  324. package/src/tools/index.ts +80 -55
  325. package/src/tools/list-limit.ts +1 -1
  326. package/src/tools/ls.ts +44 -70
  327. package/src/tools/notebook.ts +51 -67
  328. package/src/tools/output-meta.ts +3 -4
  329. package/src/tools/output-utils.ts +2 -2
  330. package/src/tools/path-utils.ts +5 -5
  331. package/src/tools/python.ts +104 -217
  332. package/src/tools/read.ts +92 -33
  333. package/src/tools/render-utils.ts +8 -23
  334. package/src/tools/renderers.ts +6 -7
  335. package/src/tools/review.ts +8 -11
  336. package/src/tools/ssh.ts +69 -49
  337. package/src/tools/todo-write.ts +37 -25
  338. package/src/tools/tool-errors.ts +3 -3
  339. package/src/tools/tool-result.ts +3 -8
  340. package/src/tools/write.ts +99 -75
  341. package/src/tui/code-cell.ts +109 -0
  342. package/src/tui/file-list.ts +47 -0
  343. package/src/tui/index.ts +11 -0
  344. package/src/tui/output-block.ts +72 -0
  345. package/src/tui/status-line.ts +39 -0
  346. package/src/tui/tree-list.ts +55 -0
  347. package/src/tui/types.ts +16 -0
  348. package/src/tui/utils.ts +48 -0
  349. package/src/utils/changelog.ts +9 -10
  350. package/src/utils/clipboard.ts +11 -11
  351. package/src/utils/file-mentions.ts +4 -10
  352. package/src/utils/frontmatter.ts +6 -3
  353. package/src/utils/fuzzy.ts +2 -2
  354. package/src/utils/image-convert.ts +1 -1
  355. package/src/utils/image-resize.ts +1 -1
  356. package/src/utils/mime.ts +2 -2
  357. package/src/utils/shell-snapshot.ts +11 -13
  358. package/src/utils/shell.ts +4 -5
  359. package/src/utils/title-generator.ts +8 -9
  360. package/src/utils/tools-manager.ts +23 -23
  361. package/src/vendor/photon/index.js +1099 -1059
  362. package/src/vendor/photon/photon_rs_bg.wasm +0 -0
  363. package/src/web/scrapers/artifacthub.ts +1 -1
  364. package/src/web/scrapers/arxiv.ts +2 -2
  365. package/src/web/scrapers/bluesky.ts +2 -2
  366. package/src/web/scrapers/cheatsh.ts +1 -1
  367. package/src/web/scrapers/chocolatey.ts +2 -2
  368. package/src/web/scrapers/choosealicense.ts +5 -5
  369. package/src/web/scrapers/cisa-kev.ts +1 -1
  370. package/src/web/scrapers/crossref.ts +2 -2
  371. package/src/web/scrapers/devto.ts +3 -3
  372. package/src/web/scrapers/discogs.ts +3 -4
  373. package/src/web/scrapers/discourse.ts +1 -1
  374. package/src/web/scrapers/dockerhub.ts +1 -1
  375. package/src/web/scrapers/fdroid.ts +2 -2
  376. package/src/web/scrapers/firefox-addons.ts +3 -3
  377. package/src/web/scrapers/flathub.ts +1 -1
  378. package/src/web/scrapers/github.ts +3 -3
  379. package/src/web/scrapers/gitlab.ts +4 -4
  380. package/src/web/scrapers/hackernews.ts +2 -2
  381. package/src/web/scrapers/huggingface.ts +1 -1
  382. package/src/web/scrapers/iacr.ts +2 -2
  383. package/src/web/scrapers/index.ts +0 -1
  384. package/src/web/scrapers/jetbrains-marketplace.ts +1 -1
  385. package/src/web/scrapers/lemmy.ts +2 -2
  386. package/src/web/scrapers/maven.ts +2 -2
  387. package/src/web/scrapers/mdn.ts +2 -4
  388. package/src/web/scrapers/metacpan.ts +2 -2
  389. package/src/web/scrapers/musicbrainz.ts +1 -2
  390. package/src/web/scrapers/npm.ts +1 -1
  391. package/src/web/scrapers/nuget.ts +2 -2
  392. package/src/web/scrapers/nvd.ts +3 -3
  393. package/src/web/scrapers/ollama.ts +7 -9
  394. package/src/web/scrapers/opencorporates.ts +2 -2
  395. package/src/web/scrapers/openlibrary.ts +6 -6
  396. package/src/web/scrapers/orcid.ts +0 -1
  397. package/src/web/scrapers/osv.ts +2 -2
  398. package/src/web/scrapers/packagist.ts +1 -1
  399. package/src/web/scrapers/pubmed.ts +1 -2
  400. package/src/web/scrapers/rawg.ts +2 -2
  401. package/src/web/scrapers/readthedocs.ts +1 -2
  402. package/src/web/scrapers/repology.ts +2 -2
  403. package/src/web/scrapers/rfc.ts +1 -1
  404. package/src/web/scrapers/searchcode.ts +2 -2
  405. package/src/web/scrapers/semantic-scholar.ts +1 -1
  406. package/src/web/scrapers/snapcraft.ts +2 -2
  407. package/src/web/scrapers/sourcegraph.ts +1 -1
  408. package/src/web/scrapers/spdx.ts +3 -3
  409. package/src/web/scrapers/spotify.ts +0 -1
  410. package/src/web/scrapers/twitter.ts +1 -1
  411. package/src/web/scrapers/types.ts +1 -2
  412. package/src/web/scrapers/utils.ts +5 -5
  413. package/src/web/scrapers/wikidata.ts +3 -3
  414. package/src/web/scrapers/youtube.ts +9 -14
  415. package/src/web/search/auth.ts +5 -10
  416. package/src/web/search/index.ts +11 -21
  417. package/src/web/search/providers/anthropic.ts +3 -9
  418. package/src/web/search/providers/exa.ts +6 -10
  419. package/src/web/search/providers/perplexity.ts +5 -5
  420. package/src/web/search/render.ts +129 -175
  421. package/tsconfig.json +0 -42
@@ -8,7 +8,6 @@
8
8
  * 1. Copy this file to ~/.omp/agent/extensions/ (legacy: ~/.pi/agent/extensions/) or your project's .omp/extensions/
9
9
  * 2. Use /tools to open the tool selector
10
10
  */
11
-
12
11
  import type { ExtensionAPI, ExtensionContext } from "@oh-my-pi/pi-coding-agent";
13
12
  import { getSettingsListTheme } from "@oh-my-pi/pi-coding-agent";
14
13
  import { Container, type SettingItem, SettingsList } from "@oh-my-pi/pi-tui";
@@ -71,7 +70,7 @@ export default function toolsExtension(pi: ExtensionAPI) {
71
70
 
72
71
  await ctx.ui.custom((tui, theme, done) => {
73
72
  // Build settings items for each tool
74
- const items: SettingItem[] = allTools.map((tool) => ({
73
+ const items: SettingItem[] = allTools.map(tool => ({
75
74
  id: tool,
76
75
  label: tool,
77
76
  currentValue: enabledTools.has(tool) ? "enabled" : "disabled",
@@ -4,7 +4,6 @@
4
4
  *
5
5
  * Requires: npm install in this directory
6
6
  */
7
-
8
7
  import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
9
8
  import { Type } from "@sinclair/typebox";
10
9
  import ms from "ms";
@@ -4,7 +4,6 @@
4
4
  * Automatically commits changes when the agent exits.
5
5
  * Uses the last assistant message to generate a commit message.
6
6
  */
7
-
8
7
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  export default function (pi: HookAPI) {
@@ -27,7 +26,7 @@ export default function (pi: HookAPI) {
27
26
  if (Array.isArray(content)) {
28
27
  lastAssistantText = content
29
28
  .filter((c): c is { type: "text"; text: string } => c.type === "text")
30
- .map((c) => c.text)
29
+ .map(c => c.text)
31
30
  .join("\n");
32
31
  }
33
32
  break;
@@ -4,7 +4,6 @@
4
4
  * Prompts for confirmation before destructive session actions (clear, switch, branch).
5
5
  * Demonstrates how to cancel session events using the before_* events.
6
6
  */
7
-
8
7
  import type { HookAPI, SessionBeforeSwitchEvent, SessionMessageEntry } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  export default function (pi: HookAPI) {
@@ -12,7 +12,6 @@
12
12
  * Usage:
13
13
  * omp --hook examples/hooks/custom-compaction.ts
14
14
  */
15
-
16
15
  import { complete, getModel } from "@oh-my-pi/pi-ai";
17
16
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
18
17
  import { convertToLlm, serializeConversation } from "@oh-my-pi/pi-coding-agent";
@@ -89,7 +88,7 @@ ${conversationText}
89
88
 
90
89
  const summary = response.content
91
90
  .filter((c): c is { type: "text"; text: string } => c.type === "text")
92
- .map((c) => c.text)
91
+ .map(c => c.text)
93
92
  .join("\n");
94
93
 
95
94
  if (!summary.trim()) {
@@ -4,7 +4,6 @@
4
4
  * Prevents session changes when there are uncommitted git changes.
5
5
  * Useful to ensure work is committed before switching context.
6
6
  */
7
-
8
7
  import type { HookAPI, HookContext } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  async function checkDirtyRepo(pi: HookAPI, ctx: HookContext, action: string): Promise<{ cancel: boolean } | undefined> {
@@ -7,7 +7,6 @@
7
7
  * Usage:
8
8
  * echo "Run the tests" > /tmp/agent-trigger.txt
9
9
  */
10
-
11
10
  import * as fs from "node:fs";
12
11
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
13
12
 
@@ -15,9 +14,9 @@ export default function (pi: HookAPI) {
15
14
  pi.on("session_start", async (_event, ctx) => {
16
15
  const triggerFile = "/tmp/agent-trigger.txt";
17
16
 
18
- fs.watch(triggerFile, () => {
17
+ fs.watch(triggerFile, async () => {
19
18
  try {
20
- const content = fs.readFileSync(triggerFile, "utf-8").trim();
19
+ const content = (await Bun.file(triggerFile).text()).trim();
21
20
  if (content) {
22
21
  pi.sendMessage(
23
22
  {
@@ -27,7 +26,7 @@ export default function (pi: HookAPI) {
27
26
  },
28
27
  true, // triggerTurn - get LLM to respond
29
28
  );
30
- fs.writeFileSync(triggerFile, ""); // Clear after reading
29
+ await Bun.write(triggerFile, ""); // Clear after reading
31
30
  }
32
31
  } catch {
33
32
  // File might not exist yet
@@ -4,7 +4,6 @@
4
4
  * Creates git stash checkpoints at each turn so /branch can restore code state.
5
5
  * When branching, offers to restore code to that point in history.
6
6
  */
7
-
8
7
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  export default function (pi: HookAPI) {
@@ -11,7 +11,6 @@
11
11
  *
12
12
  * The generated prompt appears as a draft in the editor for review/editing.
13
13
  */
14
-
15
14
  import { complete, type Message } from "@oh-my-pi/pi-ai";
16
15
  import type { HookAPI, SessionEntry } from "@oh-my-pi/pi-coding-agent";
17
16
  import { BorderedLoader, convertToLlm, serializeConversation } from "@oh-my-pi/pi-coding-agent";
@@ -62,7 +61,7 @@ export default function (pi: HookAPI) {
62
61
  const branch = ctx.sessionManager.getBranch();
63
62
  const messages = branch
64
63
  .filter((entry): entry is SessionEntry & { type: "message" } => entry.type === "message")
65
- .map((entry) => entry.message);
64
+ .map(entry => entry.message);
66
65
 
67
66
  if (messages.length === 0) {
68
67
  ctx.ui.notify("No conversation to hand off", "error");
@@ -105,13 +104,13 @@ export default function (pi: HookAPI) {
105
104
 
106
105
  return response.content
107
106
  .filter((c): c is { type: "text"; text: string } => c.type === "text")
108
- .map((c) => c.text)
107
+ .map(c => c.text)
109
108
  .join("\n");
110
109
  };
111
110
 
112
111
  doGenerate()
113
112
  .then(done)
114
- .catch((err) => {
113
+ .catch(err => {
115
114
  console.error("Handoff generation failed:", err);
116
115
  done(null);
117
116
  });
@@ -4,7 +4,6 @@
4
4
  * Prompts for confirmation before running potentially dangerous bash commands.
5
5
  * Patterns checked: rm -rf, sudo, chmod/chown 777
6
6
  */
7
-
8
7
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  export default function (pi: HookAPI) {
@@ -14,7 +13,7 @@ export default function (pi: HookAPI) {
14
13
  if (event.toolName !== "bash") return undefined;
15
14
 
16
15
  const command = event.input.command as string;
17
- const isDangerous = dangerousPatterns.some((p) => p.test(command));
16
+ const isDangerous = dangerousPatterns.some(p => p.test(command));
18
17
 
19
18
  if (isDangerous) {
20
19
  if (!ctx.hasUI) {
@@ -4,7 +4,6 @@
4
4
  * Blocks write and edit operations to protected paths.
5
5
  * Useful for preventing accidental modifications to sensitive files.
6
6
  */
7
-
8
7
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  export default function (pi: HookAPI) {
@@ -16,7 +15,7 @@ export default function (pi: HookAPI) {
16
15
  }
17
16
 
18
17
  const path = event.input.path as string;
19
- const isProtected = protectedPaths.some((p) => path.includes(p));
18
+ const isProtected = protectedPaths.some(p => path.includes(p));
20
19
 
21
20
  if (isProtected) {
22
21
  if (ctx.hasUI) {
@@ -6,7 +6,6 @@
6
6
  * 2. Shows a spinner while extracting (hides editor)
7
7
  * 3. Loads the result into the editor for user to fill in answers
8
8
  */
9
-
10
9
  import { complete, type UserMessage } from "@oh-my-pi/pi-ai";
11
10
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
12
11
  import { BorderedLoader } from "@oh-my-pi/pi-coding-agent";
@@ -56,7 +55,7 @@ export default function (pi: HookAPI) {
56
55
  }
57
56
  const textParts = msg.content
58
57
  .filter((c): c is { type: "text"; text: string } => c.type === "text")
59
- .map((c) => c.text);
58
+ .map(c => c.text);
60
59
  if (textParts.length > 0) {
61
60
  lastAssistantText = textParts.join("\n");
62
61
  break;
@@ -96,7 +95,7 @@ export default function (pi: HookAPI) {
96
95
 
97
96
  return response.content
98
97
  .filter((c): c is { type: "text"; text: string } => c.type === "text")
99
- .map((c) => c.text)
98
+ .map(c => c.text)
100
99
  .join("\n");
101
100
  };
102
101
 
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Snake game hook - play snake with /snake command
3
3
  */
4
-
5
4
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
6
5
  import { matchesKey, visibleWidth } from "@oh-my-pi/pi-tui";
7
6
 
@@ -47,7 +46,7 @@ function spawnFood(snake: Point[]): Point {
47
46
  x: Math.floor(Math.random() * GAME_WIDTH),
48
47
  y: Math.floor(Math.random() * GAME_HEIGHT),
49
48
  };
50
- } while (snake.some((s) => s.x === food.x && s.y === food.y));
49
+ } while (snake.some(s => s.x === food.x && s.y === food.y));
51
50
  return food;
52
51
  }
53
52
 
@@ -127,7 +126,7 @@ class SnakeComponent {
127
126
  }
128
127
 
129
128
  // Check self collision
130
- if (this.state.snake.some((s) => s.x === newHead.x && s.y === newHead.y)) {
129
+ if (this.state.snake.some(s => s.x === newHead.x && s.y === newHead.y)) {
131
130
  this.state.gameOver = true;
132
131
  return;
133
132
  }
@@ -249,7 +248,7 @@ class SnakeComponent {
249
248
  let row = "";
250
249
  for (let x = 0; x < effectiveWidth; x++) {
251
250
  const isHead = this.state.snake[0].x === x && this.state.snake[0].y === y;
252
- const isBody = this.state.snake.slice(1).some((s) => s.x === x && s.y === y);
251
+ const isBody = this.state.snake.slice(1).some(s => s.x === x && s.y === y);
253
252
  const isFood = this.state.food.x === x && this.state.food.y === y;
254
253
 
255
254
  if (isHead) {
@@ -331,7 +330,7 @@ export default function (pi: HookAPI) {
331
330
  return new SnakeComponent(
332
331
  tui,
333
332
  () => done(undefined),
334
- (state) => {
333
+ state => {
335
334
  // Save or clear state
336
335
  pi.appendEntry(SNAKE_SAVE_TYPE, state);
337
336
  },
@@ -4,7 +4,6 @@
4
4
  * Demonstrates ctx.ui.setStatus() for displaying persistent status text in the footer.
5
5
  * Shows turn progress with themed colors.
6
6
  */
7
-
8
7
  import type { HookAPI } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  export default function (pi: HookAPI) {
@@ -4,19 +4,18 @@
4
4
  * Uses all defaults: discovers skills, hooks, tools, context files
5
5
  * from cwd and ~/.omp/agent. Model chosen from settings or first available.
6
6
  */
7
-
8
7
  import { createAgentSession } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  const { session } = await createAgentSession();
11
10
 
12
- session.subscribe((event) => {
11
+ session.subscribe(event => {
13
12
  if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
14
13
  process.stdout.write(event.assistantMessageEvent.delta);
15
14
  }
16
15
  });
17
16
 
18
17
  await session.prompt("What files are in the current directory?");
19
- session.state.messages.forEach((msg) => {
18
+ session.state.messages.forEach(msg => {
20
19
  console.log(msg);
21
20
  });
22
21
  console.log();
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Shows how to select a specific model and thinking level.
5
5
  */
6
-
7
6
  import { getModel } from "@oh-my-pi/pi-ai";
8
7
  import { createAgentSession, discoverAuthStorage, discoverModels } from "@oh-my-pi/pi-coding-agent";
9
8
 
@@ -27,7 +26,7 @@ if (customModel) {
27
26
  const available = modelRegistry.getAvailable();
28
27
  console.log(
29
28
  "Available models:",
30
- available.map((m) => `${m.provider}/${m.id}`),
29
+ available.map(m => `${m.provider}/${m.id}`),
31
30
  );
32
31
 
33
32
  if (available.length > 0) {
@@ -38,7 +37,7 @@ if (available.length > 0) {
38
37
  modelRegistry,
39
38
  });
40
39
 
41
- session.subscribe((event) => {
40
+ session.subscribe(event => {
42
41
  if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
43
42
  process.stdout.write(event.assistantMessageEvent.delta);
44
43
  }
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Shows how to replace or modify the default system prompt.
5
5
  */
6
-
7
6
  import { createAgentSession, SessionManager } from "@oh-my-pi/pi-coding-agent";
8
7
 
9
8
  // Option 1: Replace prompt entirely
@@ -13,7 +12,7 @@ Always end responses with "Arrr!"`,
13
12
  sessionManager: SessionManager.inMemory(),
14
13
  });
15
14
 
16
- session1.subscribe((event) => {
15
+ session1.subscribe(event => {
17
16
  if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
18
17
  process.stdout.write(event.assistantMessageEvent.delta);
19
18
  }
@@ -25,7 +24,7 @@ console.log("\n");
25
24
 
26
25
  // Option 2: Modify default prompt (receives default, returns modified)
27
26
  const { session: session2 } = await createAgentSession({
28
- systemPrompt: (defaultPrompt) => `${defaultPrompt}
27
+ systemPrompt: defaultPrompt => `${defaultPrompt}
29
28
 
30
29
  ## Additional Instructions
31
30
  - Always be concise
@@ -33,7 +32,7 @@ const { session: session2 } = await createAgentSession({
33
32
  sessionManager: SessionManager.inMemory(),
34
33
  });
35
34
 
36
- session2.subscribe((event) => {
35
+ session2.subscribe(event => {
37
36
  if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
38
37
  process.stdout.write(event.assistantMessageEvent.delta);
39
38
  }
@@ -4,18 +4,17 @@
4
4
  * Skills provide specialized instructions loaded into the system prompt.
5
5
  * Discover, filter, merge, or replace them.
6
6
  */
7
-
8
7
  import { createAgentSession, discoverSkills, SessionManager, type Skill } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  // Discover all skills from cwd/.omp/skills, ~/.omp/agent/skills, etc.
11
10
  const { skills: allSkills } = await discoverSkills();
12
11
  console.log(
13
12
  "Discovered skills:",
14
- allSkills.map((s) => s.name),
13
+ allSkills.map(s => s.name),
15
14
  );
16
15
 
17
16
  // Filter to specific skills
18
- const filteredSkills = allSkills.filter((s) => s.name.includes("browser") || s.name.includes("search"));
17
+ const filteredSkills = allSkills.filter(s => s.name.includes("browser") || s.name.includes("search"));
19
18
 
20
19
  // Or define custom skills inline
21
20
  const customSkill: Skill = {
@@ -13,7 +13,6 @@
13
13
  * An extension is a TypeScript file that exports a default function:
14
14
  * export default function (pi: ExtensionAPI) { ... }
15
15
  */
16
-
17
16
  import { createAgentSession, SessionManager } from "@oh-my-pi/pi-coding-agent";
18
17
 
19
18
  // Extensions are loaded from disk, not passed inline to createAgentSession.
@@ -28,7 +27,7 @@ const { session } = await createAgentSession({
28
27
  sessionManager: SessionManager.inMemory(),
29
28
  });
30
29
 
31
- session.subscribe((event) => {
30
+ session.subscribe(event => {
32
31
  if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
33
32
  process.stdout.write(event.assistantMessageEvent.delta);
34
33
  }
@@ -4,28 +4,27 @@
4
4
  * Hooks intercept agent events for logging, blocking, or modification.
5
5
  * Note: "hooks" is now called "extensions" in the API.
6
6
  */
7
-
8
7
  import { createAgentSession, type ExtensionFactory, SessionManager } from "@oh-my-pi/pi-coding-agent";
9
8
 
10
9
  // Logging hook (now called extension)
11
- const loggingHook: ExtensionFactory = (api) => {
10
+ const loggingHook: ExtensionFactory = api => {
12
11
  api.on("agent_start", async () => {
13
12
  console.log("[Hook] Agent starting");
14
13
  });
15
14
 
16
- api.on("tool_call", async (event) => {
15
+ api.on("tool_call", async event => {
17
16
  console.log(`[Hook] Tool: ${event.toolName}`);
18
17
  return undefined; // Don't block
19
18
  });
20
19
 
21
- api.on("agent_end", async (event) => {
20
+ api.on("agent_end", async event => {
22
21
  console.log(`[Hook] Done, ${event.messages.length} messages`);
23
22
  });
24
23
  };
25
24
 
26
25
  // Blocking extension (returns { block: true, reason: "..." })
27
- const safetyHook: ExtensionFactory = (api) => {
28
- api.on("tool_call", async (event) => {
26
+ const safetyHook: ExtensionFactory = api => {
27
+ api.on("tool_call", async event => {
29
28
  if (event.toolName === "bash") {
30
29
  const cmd = (event.input as { command?: string }).command ?? "";
31
30
  if (cmd.includes("rm -rf")) {
@@ -42,7 +41,7 @@ const { session } = await createAgentSession({
42
41
  sessionManager: SessionManager.inMemory(),
43
42
  });
44
43
 
45
- session.subscribe((event) => {
44
+ session.subscribe(event => {
46
45
  if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
47
46
  process.stdout.write(event.assistantMessageEvent.delta);
48
47
  }
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Context files provide project-specific instructions loaded into the system prompt.
5
5
  */
6
-
7
6
  import { createAgentSession, discoverContextFiles, SessionManager } from "@oh-my-pi/pi-coding-agent";
8
7
 
9
8
  // Discover AGENTS.md files walking up from cwd
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * File-based templates that inject content when invoked with /templatename.
5
5
  */
6
-
7
6
  import {
8
7
  createAgentSession,
9
8
  discoverPromptTemplates,
@@ -4,7 +4,6 @@
4
4
  * File-based commands that inject content when invoked with /commandname.
5
5
  * Note: File-based slash commands are now called "prompt templates".
6
6
  */
7
-
8
7
  import {
9
8
  createAgentSession,
10
9
  discoverPromptTemplates,
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Configure API key resolution via AuthStorage and ModelRegistry.
5
5
  */
6
-
7
6
  import {
8
7
  AuthStorage,
9
8
  createAgentSession,
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Override settings using SettingsManager.
5
5
  */
6
-
7
6
  import { createAgentSession, loadSettings, SessionManager, SettingsManager } from "@oh-my-pi/pi-coding-agent";
8
7
 
9
8
  // Load current settings (merged global + project)
@@ -3,7 +3,6 @@
3
3
  *
4
4
  * Control session persistence: in-memory, new file, continue, or open specific.
5
5
  */
6
-
7
6
  import { createAgentSession, SessionManager } from "@oh-my-pi/pi-coding-agent";
8
7
 
9
8
  // In-memory (no persistence)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/pi-coding-agent",
3
- "version": "8.0.20",
3
+ "version": "8.2.0",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "ompConfig": {
@@ -21,57 +21,88 @@
21
21
  "types": "./src/extensibility/hooks/index.ts",
22
22
  "import": "./src/extensibility/hooks/index.ts"
23
23
  },
24
- "./prompts/*": "./src/prompts/*",
25
- "./*": "./src/*"
24
+ "./sdk": {
25
+ "types": "./src/sdk.ts",
26
+ "import": "./src/sdk.ts"
27
+ },
28
+ "./prompts/*": "./src/prompts/*.md",
29
+ "./capability/*": {
30
+ "types": "./src/capability/*.ts",
31
+ "import": "./src/capability/*.ts"
32
+ },
33
+ "./config/*": {
34
+ "types": "./src/config/*.ts",
35
+ "import": "./src/config/*.ts"
36
+ },
37
+ "./extensibility/*": {
38
+ "types": "./src/extensibility/*.ts",
39
+ "import": "./src/extensibility/*.ts"
40
+ },
41
+ "./extensibility/hooks/*": {
42
+ "types": "./src/extensibility/hooks/*.ts",
43
+ "import": "./src/extensibility/hooks/*.ts"
44
+ },
45
+ "./extensibility/extensions/*": {
46
+ "types": "./src/extensibility/extensions/*.ts",
47
+ "import": "./src/extensibility/extensions/*.ts"
48
+ },
49
+ "./session/*": {
50
+ "types": "./src/session/*.ts",
51
+ "import": "./src/session/*.ts"
52
+ },
53
+ "./vendor/photon/*": {
54
+ "types": "./src/vendor/photon/*",
55
+ "import": "./src/vendor/photon/*"
56
+ },
57
+ "./*": {
58
+ "types": "./src/*.ts",
59
+ "import": "./src/*.ts"
60
+ }
26
61
  },
27
62
  "files": [
28
63
  "src",
29
64
  "scripts",
30
65
  "docs",
31
66
  "examples",
32
- "CHANGELOG.md",
33
- "tsconfig.json"
67
+ "README.md",
68
+ "CHANGELOG.md"
34
69
  ],
35
70
  "scripts": {
36
- "check": "tsgo -p tsconfig.check.json",
71
+ "check": "tsgo -p tsconfig.json",
37
72
  "format-prompts": "bun scripts/format-prompts.ts",
38
- "clean": "rm -rf dist",
39
- "build": "tsgo -p tsconfig.build.json && chmod +x dist/cli.js",
40
- "build:binary": "bun run generate-wasm-b64 && bun build --compile ./src/cli.ts --outfile dist/omp",
73
+ "build:binary": "bun build --compile ./src/cli.ts --outfile dist/omp",
41
74
  "generate-template": "bun scripts/generate-template.ts",
42
- "postinstall": "bun run generate-template || true",
43
- "test": "bun test",
44
- "prepublishOnly": "bun run generate-template && cp tsconfig.publish.json tsconfig.json"
75
+ "test": "bun test"
45
76
  },
46
77
  "dependencies": {
47
- "@oh-my-pi/omp-stats": "8.0.20",
48
- "@oh-my-pi/pi-agent-core": "8.0.20",
49
- "@oh-my-pi/pi-ai": "8.0.20",
50
- "@oh-my-pi/pi-tui": "8.0.20",
51
- "@oh-my-pi/pi-utils": "8.0.20",
52
- "@openai/agents": "^0.3.7",
78
+ "@oh-my-pi/omp-stats": "8.2.0",
79
+ "@oh-my-pi/pi-agent-core": "8.2.0",
80
+ "@oh-my-pi/pi-ai": "8.2.0",
81
+ "@oh-my-pi/pi-tui": "8.2.0",
82
+ "@oh-my-pi/pi-utils": "8.2.0",
83
+ "@openai/agents": "^0.4.3",
53
84
  "@sinclair/typebox": "^0.34.46",
54
85
  "ajv": "^8.17.1",
55
86
  "chalk": "^5.5.0",
56
87
  "cli-highlight": "^2.1.11",
57
88
  "diff": "^8.0.2",
58
89
  "file-type": "^21.1.1",
59
- "glob": "^11.0.3",
90
+ "glob": "^13.0.0",
60
91
  "handlebars": "^4.7.8",
61
92
  "highlight.js": "^11.11.1",
62
- "marked": "^15.0.12",
93
+ "marked": "^17.0.1",
63
94
  "nanoid": "^5.1.6",
64
95
  "ndjson": "^2.0.0",
65
- "node-html-parser": "^6.1.13",
96
+ "node-html-parser": "^7.0.2",
66
97
  "smol-toml": "^1.6.0",
67
98
  "strip-ansi": "^7.1.2",
68
99
  "zod": "^4.3.5"
69
100
  },
70
101
  "devDependencies": {
71
- "@types/diff": "^7.0.2",
102
+ "@types/diff": "^8.0.0",
72
103
  "@types/ms": "^2.1.0",
73
104
  "@types/ndjson": "^2.0.4",
74
- "@types/node": "^24.3.0",
105
+ "@types/node": "^25.0.10",
75
106
  "ms": "^2.1.3"
76
107
  },
77
108
  "keywords": [
@@ -10,7 +10,6 @@
10
10
  * 5. Trim trailing whitespace (preserve indentation)
11
11
  * 6. Ensure single newline at EOF
12
12
  */
13
-
14
13
  import { Glob } from "bun";
15
14
 
16
15
  const PROMPTS_DIR = new URL("../src/prompts/", import.meta.url).pathname;
@@ -4,8 +4,7 @@
4
4
  * System instruction files (CLAUDE.md, AGENTS.md, GEMINI.md, etc.) that provide
5
5
  * persistent guidance to the agent.
6
6
  */
7
-
8
- import { defineCapability } from "./index";
7
+ import { defineCapability } from ".";
9
8
  import type { SourceMeta } from "./types";
10
9
 
11
10
  /**
@@ -30,8 +29,8 @@ export const contextFileCapability = defineCapability<ContextFile>({
30
29
  description: "Persistent instruction files (CLAUDE.md, AGENTS.md, etc.) that guide agent behavior",
31
30
  // Deduplicate by level: one user-level file, one project-level file
32
31
  // Higher-priority providers shadow lower-priority ones at the same scope
33
- key: (file) => file.level,
34
- validate: (file) => {
32
+ key: file => file.level,
33
+ validate: file => {
35
34
  if (!file.path) return "Missing path";
36
35
  if (file.content === undefined) return "Missing content";
37
36
  if (file.level !== "user" && file.level !== "project") return "Invalid level: must be 'user' or 'project'";
@@ -3,8 +3,7 @@
3
3
  *
4
4
  * TypeScript/JavaScript extension modules loaded by the extension system.
5
5
  */
6
-
7
- import { defineCapability } from "./index";
6
+ import { defineCapability } from ".";
8
7
  import type { SourceMeta } from "./types";
9
8
 
10
9
  /**
@@ -25,8 +24,8 @@ export const extensionModuleCapability = defineCapability<ExtensionModule>({
25
24
  id: "extension-modules",
26
25
  displayName: "Extension Modules",
27
26
  description: "TypeScript/JavaScript extension modules loaded by the extension system",
28
- key: (ext) => ext.name,
29
- validate: (ext) => {
27
+ key: ext => ext.name,
28
+ validate: ext => {
30
29
  if (!ext.name) return "Missing name";
31
30
  if (!ext.path) return "Missing path";
32
31
  return undefined;