@oh-my-pi/pi-coding-agent 15.10.10 → 15.10.12

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 (415) hide show
  1. package/CHANGELOG.md +142 -7
  2. package/dist/cli.js +23108 -0
  3. package/dist/tokenizers.linux-x64-gnu-xcjh3jwk.node +0 -0
  4. package/dist/types/async/job-manager.d.ts +18 -0
  5. package/dist/types/cli/args.d.ts +2 -1
  6. package/dist/types/cli/dry-balance-cli.d.ts +1 -1
  7. package/dist/types/cli/gallery-cli.d.ts +1 -1
  8. package/dist/types/cli/gallery-fixtures/types.d.ts +1 -1
  9. package/dist/types/cli/usage-cli.d.ts +72 -0
  10. package/dist/types/cli-commands.d.ts +12 -0
  11. package/dist/types/commands/launch.d.ts +5 -1
  12. package/dist/types/commands/read.d.ts +1 -1
  13. package/dist/types/commands/usage.d.ts +25 -0
  14. package/dist/types/config/api-key-resolver.d.ts +3 -0
  15. package/dist/types/config/append-only-context-mode.d.ts +2 -1
  16. package/dist/types/config/model-discovery.d.ts +55 -0
  17. package/dist/types/config/model-registry.d.ts +8 -219
  18. package/dist/types/config/model-resolver.d.ts +34 -10
  19. package/dist/types/config/model-roles.d.ts +28 -0
  20. package/dist/types/config/models-config-schema.d.ts +523 -42
  21. package/dist/types/config/models-config.d.ts +385 -0
  22. package/dist/types/config/settings-schema.d.ts +41 -8
  23. package/dist/types/config/settings.d.ts +8 -1
  24. package/dist/types/debug/log-viewer.d.ts +1 -1
  25. package/dist/types/debug/raw-sse.d.ts +1 -1
  26. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  27. package/dist/types/eval/backend.d.ts +0 -2
  28. package/dist/types/eval/idle-timeout.d.ts +0 -4
  29. package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
  30. package/dist/types/eval/py/executor.d.ts +5 -0
  31. package/dist/types/eval/py/kernel.d.ts +6 -1
  32. package/dist/types/eval/py/runtime.d.ts +9 -0
  33. package/dist/types/exec/bash-executor.d.ts +2 -0
  34. package/dist/types/export/html/template.generated.d.ts +1 -1
  35. package/dist/types/extensibility/extensions/runner.d.ts +3 -2
  36. package/dist/types/extensibility/extensions/types.d.ts +6 -3
  37. package/dist/types/hindsight/mental-models.d.ts +17 -8
  38. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  39. package/dist/types/internal-urls/types.d.ts +1 -1
  40. package/dist/types/lsp/edits.d.ts +9 -0
  41. package/dist/types/lsp/index.d.ts +2 -2
  42. package/dist/types/lsp/types.d.ts +2 -0
  43. package/dist/types/lsp/utils.d.ts +3 -0
  44. package/dist/types/mcp/json-rpc.d.ts +5 -0
  45. package/dist/types/memory-backend/index.d.ts +1 -0
  46. package/dist/types/memory-backend/runtime.d.ts +4 -0
  47. package/dist/types/memory-backend/types.d.ts +66 -1
  48. package/dist/types/mnemopi/state.d.ts +11 -1
  49. package/dist/types/modes/components/agent-dashboard.d.ts +1 -1
  50. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  51. package/dist/types/modes/components/bash-execution.d.ts +1 -1
  52. package/dist/types/modes/components/copy-selector.d.ts +1 -1
  53. package/dist/types/modes/components/dynamic-border.d.ts +1 -1
  54. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
  55. package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
  56. package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
  57. package/dist/types/modes/components/footer.d.ts +1 -1
  58. package/dist/types/modes/components/hook-editor.d.ts +5 -0
  59. package/dist/types/modes/components/hook-input.d.ts +4 -0
  60. package/dist/types/modes/components/hook-selector.d.ts +1 -1
  61. package/dist/types/modes/components/model-selector.d.ts +1 -1
  62. package/dist/types/modes/components/plan-review-overlay.d.ts +1 -1
  63. package/dist/types/modes/components/session-observer-overlay.d.ts +1 -1
  64. package/dist/types/modes/components/session-selector.d.ts +1 -1
  65. package/dist/types/modes/components/status-line/component.d.ts +1 -1
  66. package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
  67. package/dist/types/modes/components/transcript-container.d.ts +25 -6
  68. package/dist/types/modes/components/tree-selector.d.ts +1 -1
  69. package/dist/types/modes/components/user-message-selector.d.ts +1 -1
  70. package/dist/types/modes/components/user-message.d.ts +2 -1
  71. package/dist/types/modes/components/visual-truncate.d.ts +1 -1
  72. package/dist/types/modes/components/welcome.d.ts +19 -3
  73. package/dist/types/modes/controllers/mcp-command-controller.d.ts +1 -1
  74. package/dist/types/modes/controllers/streaming-reveal.d.ts +1 -1
  75. package/dist/types/modes/index.d.ts +3 -3
  76. package/dist/types/modes/interactive-mode.d.ts +8 -3
  77. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  78. package/dist/types/modes/rpc/rpc-client.d.ts +39 -2
  79. package/dist/types/modes/rpc/rpc-mode.d.ts +31 -2
  80. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  81. package/dist/types/modes/rpc/rpc-types.d.ts +75 -1
  82. package/dist/types/modes/setup-wizard/index.d.ts +5 -1
  83. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  84. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +1 -1
  85. package/dist/types/modes/setup-wizard/scenes/types.d.ts +1 -1
  86. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +1 -1
  87. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
  88. package/dist/types/modes/types.d.ts +4 -1
  89. package/dist/types/secrets/index.d.ts +1 -1
  90. package/dist/types/secrets/obfuscator.d.ts +8 -2
  91. package/dist/types/session/agent-session.d.ts +15 -3
  92. package/dist/types/session/auth-broker-config.d.ts +4 -0
  93. package/dist/types/session/session-manager.d.ts +1 -1
  94. package/dist/types/session/streaming-output.d.ts +23 -0
  95. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  96. package/dist/types/slash-commands/builtin-registry.d.ts +1 -0
  97. package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
  98. package/dist/types/slash-commands/types.d.ts +1 -1
  99. package/dist/types/ssh/connection-manager.d.ts +8 -0
  100. package/dist/types/system-prompt.d.ts +2 -0
  101. package/dist/types/task/executor.d.ts +1 -0
  102. package/dist/types/task/index.d.ts +2 -2
  103. package/dist/types/task/parallel.d.ts +2 -2
  104. package/dist/types/task/types.d.ts +8 -0
  105. package/dist/types/task/worktree.d.ts +2 -0
  106. package/dist/types/thinking.d.ts +4 -0
  107. package/dist/types/tiny/title-client.d.ts +11 -0
  108. package/dist/types/tiny/title-protocol.d.ts +1 -0
  109. package/dist/types/tools/ask.d.ts +4 -0
  110. package/dist/types/tools/conflict-detect.d.ts +16 -0
  111. package/dist/types/tools/github-cache.d.ts +7 -0
  112. package/dist/types/tools/index.d.ts +6 -0
  113. package/dist/types/tools/sqlite-reader.d.ts +3 -0
  114. package/dist/types/tui/output-block.d.ts +3 -3
  115. package/dist/types/utils/changelog.d.ts +8 -0
  116. package/dist/types/utils/git.d.ts +15 -2
  117. package/dist/types/utils/title-generator.d.ts +3 -2
  118. package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
  119. package/dist/types/web/scrapers/types.d.ts +12 -0
  120. package/dist/types/web/search/providers/codex.d.ts +1 -1
  121. package/dist/types/web/search/providers/gemini.d.ts +1 -1
  122. package/examples/extensions/tools.ts +5 -4
  123. package/package.json +14 -11
  124. package/scripts/build-binary.ts +18 -23
  125. package/scripts/bundle-dist.ts +81 -0
  126. package/scripts/{dev-launch → omp} +1 -1
  127. package/scripts/{dev-launch-preload.ts → omp.ts} +1 -1
  128. package/src/async/job-manager.ts +57 -3
  129. package/src/auto-thinking/classifier.ts +1 -0
  130. package/src/autoresearch/dashboard.ts +1 -1
  131. package/src/autoresearch/prompt-setup.md +6 -6
  132. package/src/autoresearch/prompt.md +6 -6
  133. package/src/capability/fs.ts +10 -0
  134. package/src/cli/args.ts +4 -1
  135. package/src/cli/auth-gateway-cli.ts +1 -3
  136. package/src/cli/dry-balance-cli.ts +1 -1
  137. package/src/cli/gallery-cli.ts +1 -1
  138. package/src/cli/gallery-fixtures/fs.ts +1 -1
  139. package/src/cli/gallery-fixtures/types.ts +5 -1
  140. package/src/cli/list-models.ts +2 -1
  141. package/src/cli/usage-cli.ts +603 -0
  142. package/src/cli-commands.ts +30 -0
  143. package/src/cli.ts +76 -13
  144. package/src/commands/complete.ts +1 -1
  145. package/src/commands/launch.ts +5 -1
  146. package/src/commands/read.ts +6 -3
  147. package/src/commands/usage.ts +35 -0
  148. package/src/commit/agentic/agent.ts +1 -1
  149. package/src/commit/model-selection.ts +4 -3
  150. package/src/config/api-key-resolver.ts +8 -6
  151. package/src/config/append-only-context-mode.ts +6 -12
  152. package/src/config/model-discovery.ts +554 -0
  153. package/src/config/model-registry.ts +320 -1041
  154. package/src/config/model-resolver.ts +173 -156
  155. package/src/config/model-roles.ts +74 -0
  156. package/src/config/models-config-schema.ts +57 -8
  157. package/src/config/models-config.ts +129 -0
  158. package/src/config/settings-schema.ts +61 -19
  159. package/src/config/settings.ts +98 -4
  160. package/src/dap/client.ts +124 -37
  161. package/src/dap/session.ts +259 -158
  162. package/src/debug/log-viewer.ts +1 -1
  163. package/src/debug/raw-sse.ts +1 -1
  164. package/src/edit/diff.ts +47 -3
  165. package/src/edit/hashline/block-resolver.ts +20 -1
  166. package/src/edit/hashline/diff.ts +36 -1
  167. package/src/edit/hashline/execute.ts +47 -4
  168. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  169. package/src/edit/index.ts +16 -1
  170. package/src/edit/modes/patch.ts +52 -0
  171. package/src/edit/modes/replace.ts +56 -22
  172. package/src/edit/notebook.ts +22 -2
  173. package/src/edit/renderer.ts +36 -10
  174. package/src/eval/__tests__/completion-bridge.test.ts +1 -1
  175. package/src/eval/backend.ts +0 -2
  176. package/src/eval/completion-bridge.ts +3 -1
  177. package/src/eval/idle-timeout.ts +2 -9
  178. package/src/eval/js/context-manager.ts +6 -8
  179. package/src/eval/js/executor.ts +6 -2
  180. package/src/eval/js/index.ts +0 -2
  181. package/src/eval/js/shared/helpers.ts +5 -6
  182. package/src/eval/js/shared/local-module-loader.ts +1 -1
  183. package/src/eval/js/shared/prelude.txt +62 -1
  184. package/src/eval/js/shared/rewrite-imports.ts +40 -22
  185. package/src/eval/js/shared/runtime.ts +1 -1
  186. package/src/eval/py/executor.ts +29 -7
  187. package/src/eval/py/index.ts +6 -3
  188. package/src/eval/py/kernel.ts +43 -4
  189. package/src/eval/py/runner.py +107 -3
  190. package/src/eval/py/runtime.ts +37 -0
  191. package/src/exec/bash-executor.ts +85 -4
  192. package/src/export/html/template.generated.ts +1 -1
  193. package/src/export/html/template.js +3 -1
  194. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  195. package/src/extensibility/extensions/runner.ts +6 -1
  196. package/src/extensibility/extensions/types.ts +6 -2
  197. package/src/extensibility/plugins/legacy-pi-compat.ts +20 -3
  198. package/src/hindsight/bank.ts +17 -2
  199. package/src/hindsight/mental-models.ts +59 -12
  200. package/src/hindsight/state.ts +6 -1
  201. package/src/internal-urls/artifact-protocol.ts +11 -2
  202. package/src/internal-urls/docs-index.generated.ts +11 -11
  203. package/src/internal-urls/issue-pr-protocol.ts +12 -5
  204. package/src/internal-urls/router.ts +1 -1
  205. package/src/internal-urls/types.ts +1 -1
  206. package/src/lib/xai-http.ts +1 -1
  207. package/src/lsp/client.ts +118 -38
  208. package/src/lsp/clients/biome-client.ts +101 -39
  209. package/src/lsp/edits.ts +143 -95
  210. package/src/lsp/index.ts +31 -22
  211. package/src/lsp/render.ts +1 -1
  212. package/src/lsp/types.ts +2 -0
  213. package/src/lsp/utils.ts +28 -10
  214. package/src/main.ts +183 -23
  215. package/src/mcp/json-rpc.ts +35 -5
  216. package/src/mcp/transports/stdio.ts +7 -1
  217. package/src/memories/index.ts +4 -1
  218. package/src/memory-backend/index.ts +1 -0
  219. package/src/memory-backend/local-backend.ts +9 -0
  220. package/src/memory-backend/off-backend.ts +9 -0
  221. package/src/memory-backend/runtime.ts +66 -0
  222. package/src/memory-backend/types.ts +81 -1
  223. package/src/mnemopi/backend.ts +176 -7
  224. package/src/mnemopi/state.ts +38 -2
  225. package/src/modes/acp/acp-agent.ts +119 -11
  226. package/src/modes/components/agent-dashboard.ts +10 -7
  227. package/src/modes/components/assistant-message.ts +32 -28
  228. package/src/modes/components/bash-execution.ts +1 -1
  229. package/src/modes/components/copy-selector.ts +1 -1
  230. package/src/modes/components/diff.ts +13 -2
  231. package/src/modes/components/dynamic-border.ts +12 -3
  232. package/src/modes/components/extensions/extension-dashboard.ts +8 -5
  233. package/src/modes/components/extensions/extension-list.ts +1 -1
  234. package/src/modes/components/extensions/inspector-panel.ts +1 -1
  235. package/src/modes/components/footer.ts +4 -2
  236. package/src/modes/components/history-search.ts +1 -1
  237. package/src/modes/components/hook-editor.ts +8 -0
  238. package/src/modes/components/hook-input.ts +8 -0
  239. package/src/modes/components/hook-selector.ts +2 -2
  240. package/src/modes/components/model-selector.ts +4 -2
  241. package/src/modes/components/plan-review-overlay.ts +1 -1
  242. package/src/modes/components/session-observer-overlay.ts +2 -2
  243. package/src/modes/components/session-selector.ts +1 -1
  244. package/src/modes/components/settings-selector.ts +5 -1
  245. package/src/modes/components/status-line/component.ts +119 -35
  246. package/src/modes/components/tiny-title-download-progress.ts +1 -1
  247. package/src/modes/components/transcript-container.ts +258 -53
  248. package/src/modes/components/tree-selector.ts +3 -3
  249. package/src/modes/components/user-message-selector.ts +1 -1
  250. package/src/modes/components/user-message.ts +17 -5
  251. package/src/modes/components/visual-truncate.ts +1 -1
  252. package/src/modes/components/welcome.ts +108 -26
  253. package/src/modes/controllers/command-controller.ts +11 -4
  254. package/src/modes/controllers/event-controller.ts +73 -4
  255. package/src/modes/controllers/input-controller.ts +2 -1
  256. package/src/modes/controllers/mcp-command-controller.ts +39 -4
  257. package/src/modes/controllers/selector-controller.ts +1 -1
  258. package/src/modes/controllers/streaming-reveal.ts +85 -18
  259. package/src/modes/index.ts +3 -21
  260. package/src/modes/interactive-mode.ts +42 -18
  261. package/src/modes/oauth-manual-input.ts +30 -3
  262. package/src/modes/rpc/rpc-client.ts +154 -3
  263. package/src/modes/rpc/rpc-mode.ts +97 -12
  264. package/src/modes/rpc/rpc-subagents.ts +265 -0
  265. package/src/modes/rpc/rpc-types.ts +81 -1
  266. package/src/modes/setup-wizard/index.ts +12 -2
  267. package/src/modes/setup-wizard/lazy.ts +16 -0
  268. package/src/modes/setup-wizard/scenes/glyph.ts +1 -1
  269. package/src/modes/setup-wizard/scenes/providers.ts +1 -1
  270. package/src/modes/setup-wizard/scenes/sign-in.ts +1 -1
  271. package/src/modes/setup-wizard/scenes/theme.ts +1 -1
  272. package/src/modes/setup-wizard/scenes/types.ts +1 -1
  273. package/src/modes/setup-wizard/scenes/web-search.ts +1 -1
  274. package/src/modes/setup-wizard/wizard-overlay.ts +1 -1
  275. package/src/modes/types.ts +4 -1
  276. package/src/prompts/agents/explore.md +2 -2
  277. package/src/prompts/agents/librarian.md +1 -2
  278. package/src/prompts/agents/oracle.md +1 -1
  279. package/src/prompts/agents/plan.md +5 -5
  280. package/src/prompts/agents/task.md +5 -5
  281. package/src/prompts/ci-green-request.md +5 -7
  282. package/src/prompts/goals/goal-budget-limit.md +2 -2
  283. package/src/prompts/goals/goal-continuation.md +4 -4
  284. package/src/prompts/goals/goal-mode-active.md +1 -1
  285. package/src/prompts/memories/read-path.md +1 -1
  286. package/src/prompts/memories/stage_one_system.md +2 -2
  287. package/src/prompts/review-custom-request.md +1 -1
  288. package/src/prompts/system/agent-creation-architect.md +2 -2
  289. package/src/prompts/system/auto-continue.md +1 -1
  290. package/src/prompts/system/background-tan-dispatch.md +1 -1
  291. package/src/prompts/system/btw-user.md +2 -2
  292. package/src/prompts/system/commit-message-system.md +13 -1
  293. package/src/prompts/system/custom-system-prompt.md +1 -1
  294. package/src/prompts/system/eager-todo.md +2 -2
  295. package/src/prompts/system/irc-incoming.md +1 -1
  296. package/src/prompts/system/manual-continue.md +1 -1
  297. package/src/prompts/system/omfg-user.md +3 -4
  298. package/src/prompts/system/orchestrate-notice.md +9 -9
  299. package/src/prompts/system/plan-mode-active.md +4 -4
  300. package/src/prompts/system/plan-mode-subagent.md +4 -5
  301. package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
  302. package/src/prompts/system/project-prompt.md +2 -2
  303. package/src/prompts/system/subagent-system-prompt.md +4 -4
  304. package/src/prompts/system/system-prompt.md +13 -24
  305. package/src/prompts/system/title-system.md +2 -2
  306. package/src/prompts/system/ttsr-tool-reminder.md +1 -1
  307. package/src/prompts/system/workflow-notice.md +1 -1
  308. package/src/prompts/tools/ast-edit.md +1 -1
  309. package/src/prompts/tools/ast-grep.md +2 -2
  310. package/src/prompts/tools/bash.md +5 -7
  311. package/src/prompts/tools/browser.md +7 -7
  312. package/src/prompts/tools/debug.md +1 -1
  313. package/src/prompts/tools/eval.md +3 -3
  314. package/src/prompts/tools/find.md +0 -1
  315. package/src/prompts/tools/github.md +8 -7
  316. package/src/prompts/tools/goal.md +1 -1
  317. package/src/prompts/tools/image-gen.md +1 -1
  318. package/src/prompts/tools/inspect-image-system.md +1 -1
  319. package/src/prompts/tools/irc.md +15 -15
  320. package/src/prompts/tools/lsp.md +2 -2
  321. package/src/prompts/tools/patch.md +2 -2
  322. package/src/prompts/tools/read.md +3 -4
  323. package/src/prompts/tools/recall.md +1 -1
  324. package/src/prompts/tools/reflect.md +1 -1
  325. package/src/prompts/tools/render-mermaid.md +2 -2
  326. package/src/prompts/tools/replace.md +4 -10
  327. package/src/prompts/tools/rewind.md +2 -2
  328. package/src/prompts/tools/search-tool-bm25.md +1 -9
  329. package/src/prompts/tools/search.md +0 -1
  330. package/src/prompts/tools/ssh.md +0 -4
  331. package/src/prompts/tools/task.md +2 -3
  332. package/src/prompts/tools/todo.md +1 -1
  333. package/src/sdk.ts +31 -11
  334. package/src/secrets/index.ts +8 -1
  335. package/src/secrets/obfuscator.ts +39 -18
  336. package/src/session/agent-session.ts +223 -64
  337. package/src/session/auth-broker-config.ts +30 -1
  338. package/src/session/session-manager.ts +2 -2
  339. package/src/session/streaming-output.ts +188 -11
  340. package/src/slash-commands/acp-builtins.ts +24 -0
  341. package/src/slash-commands/builtin-registry.ts +40 -0
  342. package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
  343. package/src/slash-commands/types.ts +1 -1
  344. package/src/ssh/connection-manager.ts +27 -0
  345. package/src/system-prompt.ts +14 -0
  346. package/src/task/commands.ts +2 -1
  347. package/src/task/executor.ts +74 -65
  348. package/src/task/index.ts +146 -68
  349. package/src/task/parallel.ts +3 -3
  350. package/src/task/render.ts +20 -5
  351. package/src/task/types.ts +9 -0
  352. package/src/task/worktree.ts +64 -56
  353. package/src/thinking.ts +9 -1
  354. package/src/tiny/title-client.ts +60 -16
  355. package/src/tiny/title-protocol.ts +1 -1
  356. package/src/tiny/worker.ts +6 -4
  357. package/src/tools/archive-reader.ts +30 -2
  358. package/src/tools/ask.ts +104 -21
  359. package/src/tools/ast-edit.ts +25 -5
  360. package/src/tools/auto-generated-guard.ts +20 -3
  361. package/src/tools/bash-interactive.ts +27 -7
  362. package/src/tools/bash.ts +100 -18
  363. package/src/tools/browser/launch.ts +11 -2
  364. package/src/tools/browser/readable.ts +19 -2
  365. package/src/tools/browser/registry.ts +4 -1
  366. package/src/tools/browser/render.ts +2 -2
  367. package/src/tools/browser/tab-supervisor.ts +55 -16
  368. package/src/tools/conflict-detect.ts +50 -4
  369. package/src/tools/debug.ts +1 -1
  370. package/src/tools/eval-render.ts +5 -5
  371. package/src/tools/eval.ts +0 -2
  372. package/src/tools/fetch.ts +33 -10
  373. package/src/tools/gh-cache-invalidation.ts +63 -8
  374. package/src/tools/gh-renderer.ts +1 -1
  375. package/src/tools/gh.ts +172 -29
  376. package/src/tools/github-cache.ts +70 -6
  377. package/src/tools/image-gen.ts +14 -13
  378. package/src/tools/index.ts +13 -1
  379. package/src/tools/inspect-image.ts +1 -0
  380. package/src/tools/irc.ts +5 -1
  381. package/src/tools/job.ts +1 -1
  382. package/src/tools/read.ts +202 -61
  383. package/src/tools/render-utils.ts +3 -3
  384. package/src/tools/resolve.ts +1 -1
  385. package/src/tools/search.ts +92 -29
  386. package/src/tools/sqlite-reader.ts +17 -5
  387. package/src/tools/ssh.ts +8 -8
  388. package/src/tools/todo.ts +38 -8
  389. package/src/tools/write.ts +118 -18
  390. package/src/tui/output-block.ts +4 -4
  391. package/src/utils/changelog.ts +27 -1
  392. package/src/utils/commit-message-generator.ts +1 -0
  393. package/src/utils/file-mentions.ts +2 -1
  394. package/src/utils/git.ts +267 -13
  395. package/src/utils/title-generator.ts +24 -5
  396. package/src/web/scrapers/arxiv.ts +1 -1
  397. package/src/web/scrapers/go-pkg.ts +1 -1
  398. package/src/web/scrapers/iacr.ts +1 -1
  399. package/src/web/scrapers/readthedocs.ts +1 -1
  400. package/src/web/scrapers/twitter.ts +2 -1
  401. package/src/web/scrapers/types.ts +87 -8
  402. package/src/web/scrapers/wikipedia.ts +1 -1
  403. package/src/web/scrapers/youtube.ts +6 -1
  404. package/src/web/search/index.ts +1 -1
  405. package/src/web/search/providers/codex.ts +2 -1
  406. package/src/web/search/providers/gemini.ts +2 -3
  407. package/src/web/search/render.ts +8 -6
  408. package/dist/types/config/model-equivalence.d.ts +0 -24
  409. package/dist/types/config/model-id-affixes.d.ts +0 -12
  410. package/dist/types/config/model-provider-priority.d.ts +0 -1
  411. package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
  412. package/src/config/model-equivalence.ts +0 -875
  413. package/src/config/model-id-affixes.ts +0 -81
  414. package/src/config/model-provider-priority.ts +0 -56
  415. package/src/exec/idle-timeout-watchdog.ts +0 -126
@@ -31,10 +31,9 @@ Subagents have no conversation history. Every fact, file path, and direction the
31
31
 
32
32
  <rules>
33
33
  - **Maximize batch width.** Spawn the widest parallel set the work decomposes into. NEVER spawn a single-task batch for divisible work, or defer work that could have been concurrent.
34
- - NEVER assign tasks to run project-wide build/test/lint. Caller verifies after the batch.
35
- - **Subagents do not verify, lint, or format.** Every assignment MUST instruct the subagent to skip all gates and formatters. You run them once at the end across the union of changed files — avoids redundant runs and racing formatter passes.
34
+ - **Subagents do not verify, lint, or format.** Every assignment MUST instruct the subagent to skip all gates, formatters, and project-wide build/test/lint. You run them once at the end across the union of changed files — avoids redundant runs and racing formatter passes.
36
35
  - No globs, no "update all", no package-wide scope. Fan out.
37
- - Do not concern yourself with how agents might overlap on certain actions. Never use it as an excuse to go slower: they can resolve collisions in real-time with the harness facilities.
36
+ - NEVER slow down or serialize because tasks might overlap on some files. Agents resolve collisions among themselves in real time.
38
37
  - Pass large payloads via `local://<path>` URIs, not inline. {{#if contextEnabled}} (other than the context){{/if}}
39
38
  {{#if contextEnabled}}- Put shared constraints in `context` once; do not duplicate across assignments.{{/if}}
40
39
  - Prefer agents that investigate **and** edit in one pass; only spin a read-only discovery step when affected files are genuinely unknown.
@@ -12,7 +12,7 @@ Allowed `op` values are only `init`, `start`, `done`, `drop`, `rm`, `append`, `n
12
12
  |`start`|`task`|Mark in progress|
13
13
  |`done`|`task` or `phase`|Mark completed|
14
14
  |`drop`|`task` or `phase`|Mark abandoned|
15
- |`rm`|`task` or `phase`|Remove|
15
+ |`rm`|`task` or `phase` (optional)|Remove task or phase's tasks; omit both to clear the entire list|
16
16
  |`append`|`phase`, `items: string[]`|Append tasks to `phase`; lazily creates phase|
17
17
  |`note`|`task`, `text`|Append a note to a task. Reminders for future-you only.|
18
18
  |`view`|—|Read-only: echo the current list without modifying it|
package/src/sdk.ts CHANGED
@@ -19,6 +19,7 @@ import {
19
19
  getOpenAICodexTransportDetails,
20
20
  prewarmOpenAICodexResponses,
21
21
  } from "@oh-my-pi/pi-ai/providers/openai-codex-responses";
22
+ import { DEFAULT_MODEL_PER_PROVIDER } from "@oh-my-pi/pi-catalog/provider-models";
22
23
  import type { Component } from "@oh-my-pi/pi-tui";
23
24
  import {
24
25
  $env,
@@ -41,7 +42,6 @@ import { createApiKeyResolver } from "./config/api-key-resolver";
41
42
  import { shouldEnableAppendOnlyContext } from "./config/append-only-context-mode";
42
43
  import { ModelRegistry } from "./config/model-registry";
43
44
  import {
44
- defaultModelPerProvider,
45
45
  formatModelString,
46
46
  getModelMatchPreferences,
47
47
  parseModelPattern,
@@ -89,7 +89,7 @@ import type { HindsightSessionState } from "./hindsight/state";
89
89
  import { LocalProtocolHandler, type LocalProtocolOptions } from "./internal-urls";
90
90
  import { LSP_STARTUP_EVENT_CHANNEL, type LspStartupEvent } from "./lsp/startup-events";
91
91
  import { discoverAndLoadMCPTools, MCPManager, type MCPToolsLoadResult } from "./mcp";
92
- import { resolveMemoryBackend } from "./memory-backend";
92
+ import { createSessionMemoryRuntimeContext, resolveMemoryBackend } from "./memory-backend";
93
93
  import type { MnemopiSessionState } from "./mnemopi/state";
94
94
  import asyncResultTemplate from "./prompts/tools/async-result.md" with { type: "text" };
95
95
  import lateDiagnosticTemplate from "./prompts/tools/lsp-late-diagnostic.md" with { type: "text" };
@@ -99,6 +99,7 @@ import {
99
99
  deobfuscateSessionContext,
100
100
  loadSecrets,
101
101
  obfuscateMessages,
102
+ obfuscateProviderContext,
102
103
  SecretObfuscator,
103
104
  } from "./secrets";
104
105
  import { AgentSession } from "./session/agent-session";
@@ -134,6 +135,7 @@ import {
134
135
  parseThinkingLevel,
135
136
  resolveProvisionalAutoLevel,
136
137
  resolveThinkingLevelForModel,
138
+ shouldDisableReasoning,
137
139
  toReasoningEffort,
138
140
  } from "./thinking";
139
141
  import { countToolsForAutoDiscovery, resolveEffectiveToolDiscoveryMode } from "./tool-discovery/mode";
@@ -531,11 +533,18 @@ function resolveSnapshotTtlMs(): number {
531
533
  * override to re-mint access tokens when needed.
532
534
  */
533
535
  export async function discoverAuthStorage(agentDir: string = getDefaultAgentDir()): Promise<AuthStorage> {
534
- const brokerConfig = await resolveAuthBrokerConfig();
536
+ const brokerConfigPromise = resolveAuthBrokerConfig();
537
+ const cachePath = getAuthBrokerSnapshotCachePath();
538
+ // Warm the encrypted snapshot cache into the page cache while the broker
539
+ // config resolves (it may shell out for a `!command` token). Decryption
540
+ // needs the resolved token, so the real cache read cannot start earlier.
541
+ void Bun.file(cachePath)
542
+ .arrayBuffer()
543
+ .catch(() => undefined);
544
+ const brokerConfig = await brokerConfigPromise;
535
545
  if (brokerConfig) {
536
546
  const client = new AuthBrokerClient({ url: brokerConfig.url, token: brokerConfig.token });
537
547
  const ttlMs = resolveSnapshotTtlMs();
538
- const cachePath = getAuthBrokerSnapshotCachePath();
539
548
  const persist =
540
549
  ttlMs > 0
541
550
  ? (snapshot: SnapshotResponse): void => {
@@ -1730,7 +1739,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1730
1739
  // the winning provider (e.g. anthropic's claude-3-5-sonnet-20240620)
1731
1740
  // instead of the intended provider default (claude-sonnet-4-6). Mirrors
1732
1741
  // findInitialModel's precedence.
1733
- for (const [provider, defaultId] of Object.entries(defaultModelPerProvider)) {
1742
+ for (const [provider, defaultId] of Object.entries(DEFAULT_MODEL_PER_PROVIDER)) {
1734
1743
  const preferred = fallbackCandidates.find(
1735
1744
  candidate => candidate.provider === provider && candidate.id === defaultId,
1736
1745
  );
@@ -1784,6 +1793,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1784
1793
  cwd,
1785
1794
  sessionManager,
1786
1795
  modelRegistry,
1796
+ () => (hasSession ? createSessionMemoryRuntimeContext(session, agentDir, cwd) : undefined),
1787
1797
  );
1788
1798
 
1789
1799
  credentialDisabledTarget = extensionRunner;
@@ -2131,6 +2141,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2131
2141
  if (!obfuscator?.hasSecrets()) return converted;
2132
2142
  return obfuscateMessages(obfuscator, converted);
2133
2143
  };
2144
+
2134
2145
  const transformContext = async (messages: AgentMessage[], _signal?: AbortSignal) => {
2135
2146
  const withContext = await extensionRunner.emitContext(messages);
2136
2147
  return wrapSteeringForModel(withContext);
@@ -2166,6 +2177,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2166
2177
  systemPrompt,
2167
2178
  model,
2168
2179
  thinkingLevel: toReasoningEffort(effectiveThinkingLevel),
2180
+ disableReasoning: shouldDisableReasoning(effectiveThinkingLevel),
2169
2181
  tools: initialTools,
2170
2182
  },
2171
2183
  convertToLlm: convertToLlmFinal,
@@ -2174,6 +2186,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2174
2186
  sessionId: providerSessionId,
2175
2187
  promptCacheKey: options.providerPromptCacheKey,
2176
2188
  transformContext,
2189
+ transformProviderContext: obfuscator ? context => obfuscateProviderContext(obfuscator, context) : undefined,
2177
2190
  steeringMode: settings.get("steeringMode") ?? "one-at-a-time",
2178
2191
  followUpMode: settings.get("followUpMode") ?? "one-at-a-time",
2179
2192
  interruptMode: settings.get("interruptMode") ?? "immediate",
@@ -2260,6 +2273,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2260
2273
  thinkingLevel: autoThinking ? AUTO_THINKING : effectiveThinkingLevel,
2261
2274
  sessionManager,
2262
2275
  settings,
2276
+ autoApprove: options.autoApprove,
2263
2277
  evalKernelOwnerId,
2264
2278
  // Defined only for top-level sessions (creation is gated above).
2265
2279
  // AgentSession uses this to decide whether it may dispose the global
@@ -2342,7 +2356,8 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2342
2356
  }
2343
2357
 
2344
2358
  if (model?.api === "openai-codex-responses") {
2345
- const codexModel = model;
2359
+ // `.api` equality doesn't narrow the generic; the guard makes this cast sound.
2360
+ const codexModel = model as Model<"openai-codex-responses">;
2346
2361
  const codexTransport = getOpenAICodexTransportDetails(codexModel, {
2347
2362
  sessionId: providerSessionId,
2348
2363
  baseUrl: codexModel.baseUrl,
@@ -2373,12 +2388,17 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2373
2388
  }
2374
2389
 
2375
2390
  // Start LSP warmup in the background so startup does not block on language server initialization.
2376
- // Print/script invocations (`hasUI=false`) don't render the warmup status indicator AND typically
2377
- // finish before LSP servers would have stabilizedwarming them just spends CPU parsing big
2378
- // `initialize` responses concurrently with the LLM stream consumer, jittering perceived latency.
2379
- // Tools that need an LSP server still spin one up on demand through `getOrCreateClient`.
2391
+ // With `lsp.lazy` (the default) the warmup is skipped: recognized servers are still discovered and
2392
+ // surfaced in the UI as "available", but cold-start on first use the lsp tool or an edit/write
2393
+ // touching a matching file type through `getOrCreateClient`.
2394
+ // Print/script invocations (`hasUI=false`) skip it regardless: they don't render the warmup status
2395
+ // indicator AND typically finish before LSP servers would have stabilized — warming them just spends
2396
+ // CPU parsing big `initialize` responses concurrently with the LLM stream consumer, jittering
2397
+ // perceived latency.
2380
2398
  let lspServers: CreateAgentSessionResult["lspServers"];
2381
- if (enableLsp && options.hasUI && settings.get("lsp.diagnosticsOnWrite")) {
2399
+ if (enableLsp && options.hasUI && settings.get("lsp.lazy")) {
2400
+ lspServers = discoverStartupLspServers(cwd, "available");
2401
+ } else if (enableLsp && options.hasUI) {
2382
2402
  lspServers = discoverStartupLspServers(cwd);
2383
2403
  if (lspServers.length > 0) {
2384
2404
  void (async () => {
@@ -4,7 +4,14 @@ import { YAML } from "bun";
4
4
  import type { SecretEntry } from "./obfuscator";
5
5
  import { compileSecretRegex } from "./regex";
6
6
 
7
- export { deobfuscateSessionContext, obfuscateMessages, type SecretEntry, SecretObfuscator } from "./obfuscator";
7
+ export {
8
+ deobfuscateSessionContext,
9
+ obfuscateMessages,
10
+ obfuscateProviderContext,
11
+ obfuscateProviderTools,
12
+ type SecretEntry,
13
+ SecretObfuscator,
14
+ } from "./obfuscator";
8
15
 
9
16
  /**
10
17
  * Load secrets from project-local and global secrets.yml files.
@@ -1,4 +1,5 @@
1
- import type { Message, TextContent } from "@oh-my-pi/pi-ai";
1
+ import type { Context, Message, Tool } from "@oh-my-pi/pi-ai";
2
+ import { toolWireSchema } from "@oh-my-pi/pi-ai/utils/schema";
2
3
  import type { SessionContext } from "../session/session-manager";
3
4
  import { compileSecretRegex } from "./regex";
4
5
 
@@ -184,6 +185,12 @@ export class SecretObfuscator {
184
185
  return deepWalkStrings(obj, s => this.deobfuscate(s));
185
186
  }
186
187
 
188
+ /** Deep-walk an object, obfuscating all string values. */
189
+ obfuscateObject<T>(obj: T): T {
190
+ if (!this.#hasAny) return obj;
191
+ return deepWalkStrings(obj, s => this.obfuscate(s));
192
+ }
193
+
187
194
  /** Find the obfuscate index for a known secret value. */
188
195
  #findObfuscateIndex(secret: string): number | undefined {
189
196
  // Check plain mappings first
@@ -211,25 +218,34 @@ export function deobfuscateSessionContext(
211
218
  // Message obfuscation (outbound to LLM)
212
219
  // ═══════════════════════════════════════════════════════════════════════════
213
220
 
214
- /** Obfuscate all text content in LLM messages (for outbound interception). */
221
+ /** Obfuscate all string content in LLM messages (for outbound interception). */
215
222
  export function obfuscateMessages(obfuscator: SecretObfuscator, messages: Message[]): Message[] {
216
- return messages.map(msg => {
217
- if (!Array.isArray(msg.content)) return msg;
223
+ return obfuscator.obfuscateObject(messages);
224
+ }
218
225
 
219
- let changed = false;
220
- const content = msg.content.map(block => {
221
- if (block.type === "text") {
222
- const obfuscated = obfuscator.obfuscate(block.text);
223
- if (obfuscated !== block.text) {
224
- changed = true;
225
- return { ...block, text: obfuscated } as TextContent;
226
- }
227
- }
228
- return block;
229
- });
226
+ /** Obfuscate provider request context without walking live tool schema instances. */
227
+ export function obfuscateProviderContext(obfuscator: SecretObfuscator | undefined, context: Context): Context {
228
+ if (!obfuscator?.hasSecrets()) return context;
229
+ return {
230
+ ...context,
231
+ systemPrompt: obfuscator.obfuscateObject(context.systemPrompt),
232
+ messages: obfuscator.obfuscateObject(context.messages),
233
+ tools: obfuscateProviderTools(obfuscator, context.tools),
234
+ };
235
+ }
230
236
 
231
- return changed ? ({ ...msg, content } as typeof msg) : msg;
232
- });
237
+ /** Convert tool schemas to wire JSON Schema before obfuscating provider-visible strings. */
238
+ export function obfuscateProviderTools(
239
+ obfuscator: SecretObfuscator | undefined,
240
+ tools: Tool[] | undefined,
241
+ ): Tool[] | undefined {
242
+ if (!tools || !obfuscator?.hasSecrets()) return tools;
243
+ return tools.map(tool => ({
244
+ ...tool,
245
+ description: obfuscator.obfuscate(tool.description),
246
+ parameters: obfuscator.obfuscateObject(toolWireSchema(tool)),
247
+ customFormat: tool.customFormat ? obfuscator.obfuscateObject(tool.customFormat) : undefined,
248
+ }));
233
249
  }
234
250
 
235
251
  // ═══════════════════════════════════════════════════════════════════════════
@@ -262,7 +278,7 @@ function deepWalkStrings<T>(obj: T, transform: (s: string) => string): T {
262
278
  });
263
279
  return (changed ? result : obj) as unknown as T;
264
280
  }
265
- if (obj !== null && typeof obj === "object") {
281
+ if (obj !== null && typeof obj === "object" && isPlainRecord(obj)) {
266
282
  let changed = false;
267
283
  const result: Record<string, unknown> = {};
268
284
  for (const key of Object.keys(obj)) {
@@ -275,3 +291,8 @@ function deepWalkStrings<T>(obj: T, transform: (s: string) => string): T {
275
291
  }
276
292
  return obj;
277
293
  }
294
+
295
+ function isPlainRecord(obj: object): obj is Record<string, unknown> {
296
+ const prototype = Object.getPrototypeOf(obj);
297
+ return prototype === Object.prototype || prototype === null;
298
+ }