one-code-extension 0.4.0 → 0.5.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 (419) hide show
  1. package/README.md +219 -219
  2. package/agents/general-purpose.md +2 -2
  3. package/docs/guide/README.md +2 -1
  4. package/docs/guide/bring-your-claude-code-setup.md +60 -9
  5. package/docs/guide/configuration.md +48 -14
  6. package/docs/guide/differences-from-claude-code.md +32 -23
  7. package/docs/guide/doctor.md +20 -13
  8. package/docs/guide/hooks.md +18 -3
  9. package/docs/guide/installation.md +27 -4
  10. package/docs/guide/permissions-modes-and-auto-mode.md +225 -49
  11. package/docs/guide/providers-and-models.md +137 -54
  12. package/docs/guide/reference.md +27 -15
  13. package/docs/guide/sessions-and-context.md +69 -16
  14. package/docs/guide/skills-plugins-and-mcp.md +57 -20
  15. package/docs/guide/subagents-and-workflows.md +95 -29
  16. package/docs/guide/tasks-and-background-work.md +101 -26
  17. package/docs/guide/terminal-interface.md +24 -12
  18. package/docs/guide/tools.md +46 -5
  19. package/docs/guide/troubleshooting.md +13 -9
  20. package/docs/guide/windows.md +66 -34
  21. package/extensions/artifacts/gallery.ts +227 -0
  22. package/extensions/artifacts/index.ts +288 -0
  23. package/extensions/artifacts/store.ts +570 -0
  24. package/extensions/artifacts/viewer.ts +199 -0
  25. package/extensions/ask-user/description.ts +67 -0
  26. package/extensions/ask-user/dialogs.ts +80 -0
  27. package/extensions/ask-user/index.ts +37 -33
  28. package/extensions/ask-user/questions.ts +32 -7
  29. package/extensions/ask-user/widget.ts +45 -25
  30. package/extensions/auto-mode/actions.ts +6 -0
  31. package/extensions/auto-mode/cache.ts +88 -0
  32. package/extensions/auto-mode/classifier-prompt.ts +5 -4
  33. package/extensions/auto-mode/classifier.ts +290 -65
  34. package/extensions/auto-mode/config.ts +72 -20
  35. package/extensions/auto-mode/decision-log.ts +2 -0
  36. package/extensions/auto-mode/defaults.ts +1 -1
  37. package/extensions/auto-mode/denials.ts +123 -0
  38. package/extensions/auto-mode/git-checkout-programs.ts +187 -0
  39. package/extensions/auto-mode/git-status-meta.ts +159 -0
  40. package/extensions/auto-mode/history.ts +189 -0
  41. package/extensions/auto-mode/instructions.ts +58 -52
  42. package/extensions/auto-mode/model-select.ts +159 -134
  43. package/extensions/auto-mode/paths.ts +57 -5
  44. package/extensions/auto-mode/pause.ts +57 -2
  45. package/extensions/auto-mode/prompt.ts +37 -21
  46. package/extensions/auto-mode/read-only-options.ts +724 -0
  47. package/extensions/auto-mode/resolved-paths-meta.ts +133 -0
  48. package/extensions/auto-mode/rules.ts +18 -1
  49. package/extensions/auto-mode/safety-floor.ts +361 -18
  50. package/extensions/auto-mode/setup-run.ts +20 -14
  51. package/extensions/auto-mode/shell-analysis.ts +764 -490
  52. package/extensions/auto-mode/shell-parse.ts +885 -0
  53. package/extensions/auto-mode/system-note.ts +33 -0
  54. package/extensions/auto-mode/transcript.ts +80 -51
  55. package/extensions/background/cron.ts +515 -0
  56. package/extensions/background/index.ts +514 -236
  57. package/extensions/background/loop-fire.ts +136 -0
  58. package/extensions/background/loop-preamble.ts +59 -0
  59. package/extensions/background/loop-skill.ts +163 -0
  60. package/extensions/background/monitor-batch.ts +53 -0
  61. package/extensions/background/noop-fold.ts +128 -0
  62. package/extensions/background/switch-guard.ts +52 -0
  63. package/extensions/background/wakeup.ts +159 -55
  64. package/extensions/bash/background.ts +53 -17
  65. package/extensions/bash/child.ts +7 -0
  66. package/extensions/bash/description.ts +188 -0
  67. package/extensions/bash/guards.ts +15 -67
  68. package/extensions/bash/index.ts +88 -35
  69. package/extensions/branding/compaction-keep.ts +63 -0
  70. package/extensions/branding/declined.ts +22 -0
  71. package/extensions/branding/index.ts +133 -9
  72. package/extensions/branding/prompt-editor.ts +53 -6
  73. package/extensions/branding/queued-edit.ts +31 -0
  74. package/extensions/branding/replaced-builtins.ts +68 -0
  75. package/extensions/branding/startup.ts +33 -71
  76. package/extensions/btw/index.ts +229 -71
  77. package/extensions/btw/panel.ts +228 -100
  78. package/extensions/btw/prompt.ts +41 -4
  79. package/extensions/claude-compat/index.ts +7 -11
  80. package/extensions/claude-context/index.ts +446 -58
  81. package/extensions/compaction/cut.ts +157 -0
  82. package/extensions/compaction/index.ts +216 -75
  83. package/extensions/compaction/kept-thinking.ts +62 -0
  84. package/extensions/compaction/prompt.ts +15 -12
  85. package/extensions/context-budget/index.ts +24 -5
  86. package/extensions/context-management/index.ts +25 -0
  87. package/extensions/doctor/build.ts +59 -8
  88. package/extensions/doctor/builtins.ts +84 -0
  89. package/extensions/doctor/cli.ts +7 -1
  90. package/extensions/doctor/compat.ts +88 -23
  91. package/extensions/doctor/dependencies.ts +41 -5
  92. package/extensions/doctor/fix-prompt.ts +9 -2
  93. package/extensions/doctor/index.ts +102 -58
  94. package/extensions/doctor/models.ts +102 -63
  95. package/extensions/doctor/presets.ts +42 -27
  96. package/extensions/doctor/report.ts +19 -2
  97. package/extensions/doctor/viewer.ts +49 -27
  98. package/extensions/effort/index.ts +72 -19
  99. package/extensions/effort/settings.ts +21 -0
  100. package/extensions/effort/slider.ts +24 -20
  101. package/extensions/exit/index.ts +32 -1
  102. package/extensions/file-tracker/index.ts +337 -26
  103. package/extensions/file-tracker/replay.ts +96 -10
  104. package/extensions/file-tracker/restore.ts +63 -0
  105. package/extensions/file-tracker/results.ts +66 -0
  106. package/extensions/file-tracker/shell-reads.ts +211 -0
  107. package/extensions/file-tracker/tracker.ts +32 -15
  108. package/extensions/footer/footer-line.ts +45 -24
  109. package/extensions/footer/index.ts +47 -2
  110. package/extensions/footer/pr.ts +34 -5
  111. package/extensions/hooks/compaction.ts +7 -0
  112. package/extensions/hooks/executor.ts +32 -30
  113. package/extensions/hooks/index.ts +198 -31
  114. package/extensions/hooks/matcher.ts +3 -0
  115. package/extensions/hooks/protocol.ts +41 -3
  116. package/extensions/hooks/settings.ts +50 -19
  117. package/extensions/hooks/subagent-bridge.ts +2 -0
  118. package/extensions/hooks/trust.ts +13 -5
  119. package/extensions/idle-compact/index.ts +119 -0
  120. package/extensions/idle-compact/policy.ts +143 -0
  121. package/extensions/init/index.ts +11 -10
  122. package/extensions/init/prompt.ts +25 -32
  123. package/extensions/interrupted/index.ts +13 -1
  124. package/extensions/kept-thinking/index.ts +27 -0
  125. package/extensions/lib/agent-cron.ts +130 -0
  126. package/extensions/lib/agent-loader.ts +15 -1
  127. package/extensions/lib/agent-view.ts +85 -0
  128. package/extensions/lib/anthropic-payload.ts +82 -1
  129. package/extensions/lib/anthropic-server-call.ts +230 -0
  130. package/extensions/lib/anthropic-server-tools.ts +485 -0
  131. package/extensions/lib/app-launch.mjs +94 -0
  132. package/extensions/lib/argument-hints.ts +190 -0
  133. package/extensions/lib/atomic-write.ts +6 -2
  134. package/extensions/lib/auto-memory.ts +75 -0
  135. package/extensions/lib/bash-parser.ts +84 -0
  136. package/extensions/lib/btw-fork.ts +93 -0
  137. package/extensions/lib/child-extensions.ts +42 -0
  138. package/extensions/lib/child-writes.ts +45 -0
  139. package/extensions/lib/claude-context.ts +515 -100
  140. package/extensions/lib/claude-external-includes.ts +68 -0
  141. package/extensions/lib/claude-id.ts +22 -0
  142. package/extensions/lib/claude-rules.ts +323 -0
  143. package/extensions/lib/claude-settings.ts +76 -4
  144. package/extensions/lib/compaction-boundary.ts +36 -0
  145. package/extensions/lib/compaction-keep.mjs +83 -0
  146. package/extensions/lib/config-mode.ts +112 -0
  147. package/extensions/lib/consent-dialogs.ts +63 -0
  148. package/extensions/lib/consent-preview.ts +5 -1
  149. package/extensions/lib/consent-stores.ts +48 -0
  150. package/extensions/lib/context-facts.ts +78 -0
  151. package/extensions/lib/context-stack.ts +81 -0
  152. package/extensions/lib/deferred.ts +219 -25
  153. package/extensions/lib/dock-rows.ts +60 -0
  154. package/extensions/lib/empty-tool-result.ts +27 -0
  155. package/extensions/lib/environment-block.ts +76 -0
  156. package/extensions/lib/fetch-timeout.ts +24 -6
  157. package/extensions/{system-prompt → lib}/git-status.ts +51 -13
  158. package/extensions/lib/git.ts +75 -13
  159. package/extensions/lib/grammars/LICENSE-tree-sitter-bash +21 -0
  160. package/extensions/lib/grammars/README.md +2 -0
  161. package/extensions/lib/grammars/tree-sitter-bash.wasm +0 -0
  162. package/extensions/lib/guide-docs.ts +45 -0
  163. package/extensions/lib/headless-output.ts +46 -0
  164. package/extensions/lib/hook-gate.ts +7 -7
  165. package/extensions/lib/interrupt.ts +20 -4
  166. package/extensions/lib/key-input.ts +455 -0
  167. package/extensions/lib/keys.ts +14 -1
  168. package/extensions/lib/local-command.ts +47 -13
  169. package/extensions/lib/mcp-overrides.ts +1 -1
  170. package/extensions/lib/mcp-share.ts +46 -0
  171. package/extensions/lib/memory-content.ts +146 -0
  172. package/extensions/lib/memory-index.ts +18 -0
  173. package/extensions/lib/memory.ts +134 -123
  174. package/extensions/lib/model-catalog/huggingface.json +174 -0
  175. package/extensions/lib/model-catalog/models-dev.json +18297 -0
  176. package/extensions/lib/model-catalog/openrouter.json +5252 -0
  177. package/extensions/lib/model-catalog-data.ts +513 -0
  178. package/extensions/lib/model-catalog.ts +462 -0
  179. package/extensions/lib/model-choice-warnings.ts +137 -0
  180. package/extensions/lib/model-pairings.ts +152 -0
  181. package/extensions/{auto-mode → lib}/model-picker.ts +26 -43
  182. package/extensions/lib/model-policy.ts +112 -15
  183. package/extensions/lib/model-tier.ts +283 -355
  184. package/extensions/lib/model-unusable.ts +1 -1
  185. package/extensions/lib/newer-model.ts +100 -0
  186. package/extensions/lib/notices.ts +87 -0
  187. package/extensions/lib/notifications.ts +308 -64
  188. package/extensions/lib/one-code-settings.ts +74 -8
  189. package/extensions/lib/open-browser.ts +63 -0
  190. package/extensions/lib/openrouter-generation.ts +94 -0
  191. package/extensions/lib/operation-deadline.ts +30 -0
  192. package/extensions/lib/original-command.ts +4 -4
  193. package/extensions/lib/package-version.ts +1 -1
  194. package/extensions/lib/panel-focus.ts +134 -0
  195. package/extensions/lib/paths.ts +17 -2
  196. package/extensions/lib/permission-gate.ts +72 -6
  197. package/extensions/lib/persisted-output.ts +60 -8
  198. package/extensions/lib/pi-ai-estimate.ts +19 -3
  199. package/extensions/lib/pi-version.ts +21 -2
  200. package/extensions/lib/plan-mode-channels.ts +20 -5
  201. package/extensions/lib/plugins.ts +26 -17
  202. package/extensions/lib/powershell-parse-script.ts +208 -0
  203. package/extensions/lib/powershell-parser.ts +344 -0
  204. package/extensions/lib/process-tree.ts +131 -8
  205. package/extensions/lib/prompt-options.ts +82 -0
  206. package/extensions/lib/queued-delivery.ts +44 -0
  207. package/extensions/lib/reminders.ts +364 -58
  208. package/extensions/lib/replaced-builtins.mjs +199 -0
  209. package/extensions/lib/replay-call.ts +70 -0
  210. package/extensions/lib/request-replay.ts +439 -0
  211. package/extensions/lib/scratchpad.ts +81 -14
  212. package/extensions/lib/send-now-channel.ts +7 -0
  213. package/extensions/lib/session-model-tier.ts +51 -0
  214. package/extensions/lib/session-work.ts +64 -0
  215. package/extensions/lib/settings-channels.ts +4 -4
  216. package/extensions/lib/shell-exit-semantics.ts +170 -0
  217. package/extensions/lib/shell-quote.ts +11 -0
  218. package/extensions/lib/shell-result.ts +70 -0
  219. package/extensions/lib/shell-spawn.ts +70 -6
  220. package/extensions/lib/shell-tool.ts +75 -25
  221. package/extensions/lib/side-call-cache.ts +124 -0
  222. package/extensions/lib/side-call-run.ts +96 -0
  223. package/extensions/lib/side-call-usage.ts +38 -0
  224. package/extensions/lib/side-call.ts +13 -1
  225. package/extensions/lib/single-flight.ts +18 -0
  226. package/extensions/lib/skill-body.ts +42 -0
  227. package/extensions/lib/skill-scan.ts +63 -24
  228. package/extensions/lib/spill-file.ts +140 -0
  229. package/extensions/lib/subagent-handback.ts +113 -0
  230. package/extensions/lib/system-role.ts +156 -0
  231. package/extensions/lib/terminal-text.ts +114 -0
  232. package/extensions/lib/text-width.ts +47 -16
  233. package/extensions/lib/timer-ops.ts +20 -0
  234. package/extensions/lib/tool-additions.ts +149 -0
  235. package/extensions/lib/tool-call-corruption.ts +134 -0
  236. package/extensions/lib/tool-path.ts +66 -0
  237. package/extensions/lib/tool-variants.ts +69 -0
  238. package/extensions/lib/tui-render.ts +255 -27
  239. package/extensions/lib/turn-budget-layout.ts +143 -0
  240. package/extensions/lib/update-check.mjs +15 -2
  241. package/extensions/lib/usage-bus.ts +1 -1
  242. package/extensions/lib/user-denial.ts +38 -0
  243. package/extensions/lib/workspace-channel.ts +16 -0
  244. package/extensions/lib/worktree-channel.ts +31 -3
  245. package/extensions/lib/worktree-isolation.ts +40 -10
  246. package/extensions/lsp/client.ts +8 -9
  247. package/extensions/lsp/index.ts +70 -4
  248. package/extensions/lsp/keep-alive.ts +1 -1
  249. package/extensions/lsp/trust.ts +119 -0
  250. package/extensions/lsp/watcher.ts +1 -1
  251. package/extensions/mcp/announce.ts +87 -5
  252. package/extensions/mcp/client.ts +161 -48
  253. package/extensions/mcp/config.ts +132 -8
  254. package/extensions/mcp/discovery.ts +19 -0
  255. package/extensions/mcp/index.ts +209 -71
  256. package/extensions/mcp/oauth/browser.ts +38 -17
  257. package/extensions/mcp/oauth/flow.ts +25 -17
  258. package/extensions/mcp/oauth/provider.ts +14 -8
  259. package/extensions/mcp/oauth/store.ts +34 -16
  260. package/extensions/mcp/panel/keys.ts +12 -11
  261. package/extensions/mcp/panel/render.ts +9 -6
  262. package/extensions/mcp/schema.ts +104 -5
  263. package/extensions/mcp/trust.ts +151 -67
  264. package/extensions/memory/entries.ts +23 -14
  265. package/extensions/memory/index.ts +134 -28
  266. package/extensions/memory/open-external.ts +33 -18
  267. package/extensions/memory/panel.ts +135 -26
  268. package/extensions/newer-model/index.ts +31 -0
  269. package/extensions/notebook/description.ts +18 -0
  270. package/extensions/notebook/index.ts +6 -5
  271. package/extensions/notebook/notebook.ts +1 -1
  272. package/extensions/permissions/index.ts +1300 -381
  273. package/extensions/permissions/matcher.ts +425 -74
  274. package/extensions/permissions/modes.ts +6 -4
  275. package/extensions/permissions/panel/host.ts +130 -0
  276. package/extensions/permissions/panel/keys.ts +48 -0
  277. package/extensions/permissions/panel/render.ts +450 -0
  278. package/extensions/permissions/panel/state.ts +550 -0
  279. package/extensions/permissions/powershell-cmdlets.ts +198 -0
  280. package/extensions/permissions/powershell-paths.ts +197 -0
  281. package/extensions/permissions/powershell-rules.ts +207 -280
  282. package/extensions/permissions/powershell-tree.ts +557 -0
  283. package/extensions/permissions/project-trust.ts +27 -11
  284. package/extensions/permissions/protected-paths.ts +14 -2
  285. package/extensions/permissions/session-grant.ts +6 -0
  286. package/extensions/permissions/settings.ts +166 -31
  287. package/extensions/permissions/subagent-gate.ts +25 -0
  288. package/extensions/permissions/workspace.ts +78 -0
  289. package/extensions/plan-mode/index.ts +156 -69
  290. package/extensions/plan-mode/reminder.ts +89 -21
  291. package/extensions/plan-mode/texts.ts +177 -0
  292. package/extensions/plan-mode/viewer.ts +92 -27
  293. package/extensions/plugins/counts.ts +3 -3
  294. package/extensions/plugins/index.ts +61 -46
  295. package/extensions/plugins/install/install.ts +16 -0
  296. package/extensions/plugins/marketplace/sync.ts +9 -3
  297. package/extensions/plugins/marketplace/types.ts +3 -1
  298. package/extensions/plugins/panel/keys.ts +21 -24
  299. package/extensions/plugins/panel/render.ts +12 -6
  300. package/extensions/plugins/shell-expand.ts +107 -0
  301. package/extensions/plugins/template.ts +32 -15
  302. package/extensions/powershell/child.ts +7 -0
  303. package/extensions/powershell/description.ts +38 -6
  304. package/extensions/powershell/guards.ts +1 -1
  305. package/extensions/powershell/index.ts +12 -7
  306. package/extensions/recap/index.ts +65 -60
  307. package/extensions/recap/prompt.ts +2 -2
  308. package/extensions/recap/scheduler.ts +3 -5
  309. package/extensions/search-tools/grep-merge.ts +39 -0
  310. package/extensions/search-tools/index.ts +0 -0
  311. package/extensions/send-now/chord.ts +62 -0
  312. package/extensions/send-now/index.ts +133 -0
  313. package/extensions/session-title/index.ts +3 -0
  314. package/extensions/session-title/title.ts +4 -1
  315. package/extensions/skill/code-review.ts +97 -0
  316. package/extensions/skill/index.ts +421 -101
  317. package/extensions/skill/invoke.ts +128 -18
  318. package/extensions/skill/listing.ts +133 -9
  319. package/extensions/skill/panel/keys.ts +15 -16
  320. package/extensions/skill/panel/render.ts +5 -2
  321. package/extensions/skill/panel/state.ts +12 -1
  322. package/extensions/subagents/agent-args.ts +39 -0
  323. package/extensions/subagents/agent-description.ts +132 -0
  324. package/extensions/subagents/agents.ts +116 -23
  325. package/extensions/subagents/announce.ts +69 -0
  326. package/extensions/subagents/default-model.ts +2 -3
  327. package/extensions/subagents/delegation-steer.ts +4 -4
  328. package/extensions/subagents/fork-cache.ts +76 -0
  329. package/extensions/subagents/guide-agent.ts +189 -0
  330. package/extensions/subagents/hand-back-review.ts +3 -0
  331. package/extensions/subagents/index.ts +1493 -824
  332. package/extensions/subagents/live-runs.ts +26 -6
  333. package/extensions/subagents/model-select.ts +38 -25
  334. package/extensions/subagents/outcome.ts +2 -2
  335. package/extensions/subagents/panel-keys.ts +73 -31
  336. package/extensions/subagents/panel-render.ts +120 -96
  337. package/extensions/subagents/panel-widget.ts +60 -89
  338. package/extensions/subagents/runner.ts +108 -80
  339. package/extensions/subagents/runs.ts +39 -5
  340. package/extensions/subagents/send-to-main-tool.ts +1 -1
  341. package/extensions/subagents/session-turns.ts +32 -8
  342. package/extensions/subagents/shell-panel.ts +36 -178
  343. package/extensions/subagents/tasks-dialog.ts +170 -0
  344. package/extensions/subagents/viewport-mirror.ts +95 -0
  345. package/extensions/subagents/worktree.ts +57 -13
  346. package/extensions/system-prompt/environment.ts +19 -19
  347. package/extensions/system-prompt/idle-turn.ts +65 -0
  348. package/extensions/system-prompt/index.ts +131 -47
  349. package/extensions/system-prompt/template.ts +24 -50
  350. package/extensions/system-prompt/tiers/common.ts +23 -64
  351. package/extensions/system-prompt/tiers/frontier.ts +32 -11
  352. package/extensions/system-prompt/tiers/low.ts +67 -45
  353. package/extensions/system-prompt/tiers/mid.ts +96 -38
  354. package/extensions/system-reminder/index.ts +175 -13
  355. package/extensions/tasks/descriptions.ts +190 -0
  356. package/extensions/tasks/index.ts +120 -41
  357. package/extensions/tasks/store.ts +83 -16
  358. package/extensions/tool-call-corruption/child.ts +7 -0
  359. package/extensions/tool-call-corruption/index.ts +237 -0
  360. package/extensions/tool-search/announce.ts +16 -0
  361. package/extensions/tool-search/index.ts +189 -41
  362. package/extensions/tool-style/index.ts +68 -10
  363. package/extensions/tool-style/write-description.ts +40 -0
  364. package/extensions/tool-style/write-render.ts +237 -0
  365. package/extensions/turn-duration/index.ts +7 -3
  366. package/extensions/turn-duration/line.ts +47 -4
  367. package/extensions/web/backends.ts +6 -9
  368. package/extensions/web/description.ts +50 -0
  369. package/extensions/web/index.ts +118 -53
  370. package/extensions/web/native-call.ts +15 -0
  371. package/extensions/web/native-results.ts +41 -0
  372. package/extensions/web-fetch/description.ts +42 -0
  373. package/extensions/web-fetch/extract.ts +53 -6
  374. package/extensions/web-fetch/index.ts +125 -76
  375. package/extensions/web-fetch/page-content.ts +19 -0
  376. package/extensions/web-fetch/response.ts +49 -0
  377. package/extensions/web-fetch/summarize.ts +9 -10
  378. package/extensions/workflow/agent-session.ts +105 -18
  379. package/extensions/workflow/args.ts +24 -0
  380. package/extensions/workflow/description.ts +67 -0
  381. package/extensions/workflow/globals.ts +17 -3
  382. package/extensions/workflow/index.ts +145 -162
  383. package/extensions/workflow/records.ts +1 -0
  384. package/extensions/workflow/run-manager.ts +29 -6
  385. package/extensions/workflow/saved-workflows.ts +3 -2
  386. package/extensions/workflow/types.ts +22 -1
  387. package/extensions/workflow/viewer.ts +54 -24
  388. package/extensions/workflow/widget.ts +20 -0
  389. package/extensions/worktree/descriptions.ts +91 -0
  390. package/extensions/worktree/guards.ts +316 -54
  391. package/extensions/worktree/index.ts +121 -39
  392. package/extensions/worktree/powershell-guards.ts +167 -0
  393. package/extensions/worktree/rewrite.ts +14 -16
  394. package/package.json +19 -7
  395. package/skills/artifact-design/SKILL.md +85 -0
  396. package/skills/code-review/SKILL.md +20 -20
  397. package/skills/code-review/cells/arguments-and-flags.md +19 -0
  398. package/skills/code-review/cells/high-3x5-recall-verify.md +137 -0
  399. package/skills/code-review/cells/high-8-inline.md +122 -0
  400. package/skills/code-review/cells/low-1-pass-max4.md +27 -0
  401. package/skills/code-review/cells/low-1-pass-min-files-4.md +28 -0
  402. package/skills/code-review/cells/max-5x5-verify-sweep.md +162 -0
  403. package/skills/code-review/cells/medium-3x5-verify.md +132 -0
  404. package/skills/code-review/cells/minimal-prompt.md +32 -0
  405. package/skills/code-review/cells/xhigh-10-inline-sweep.md +149 -0
  406. package/skills/code-review/cells/xhigh-5x5-verify-sweep.md +162 -0
  407. package/skills/fewer-permission-prompts/SKILL.md +1 -1
  408. package/skills/loop/SKILL.md +11 -0
  409. package/skills/security-review/SKILL.md +2 -5
  410. package/skills/simplify/SKILL.md +7 -5
  411. package/skills/workflow-authoring/SKILL.md +143 -0
  412. package/themes/onecode-light.json +1 -1
  413. package/themes/onecode.json +1 -1
  414. package/types/app.d.ts +58 -0
  415. package/types/community-packages.d.ts +26 -1
  416. package/extensions/auto-mode/recoverability.ts +0 -229
  417. package/extensions/lib/capability-index.ts +0 -466
  418. package/extensions/lib/model-facts.generated.json +0 -2675
  419. package/extensions/lib/model-facts.ts +0 -162
@@ -0,0 +1,133 @@
1
+ /**
2
+ * send-now extension — Claude Code's "send now" for messages queued mid-turn.
3
+ *
4
+ * A message typed while a turn runs waits in pi's queue until the current
5
+ * response and its tool calls finish. `ctrl+x ctrl+s` (chord.ts) delivers it
6
+ * at once: the running turn is aborted, which makes pi move every queued
7
+ * message and the draft back into the editor (its abort handler), and once the
8
+ * session is idle that text is sent as the next prompt (a pasted image is its
9
+ * file path in the text, so nothing is lost). Running tools are cancelled, as in Claude Code before 2.1.283, which moves
10
+ * them to the background instead. A dim `ctrl+x ctrl+s to send now` line sits
11
+ * above the editor while anything is queued.
12
+ *
13
+ * pi binds `ctrl+x` alone to copy; while send now applies, `ctrl+x` is only the
14
+ * chord's prefix (chord.ts), and one the chord does not complete (another key,
15
+ * or CHORD_TIMEOUT_MS without one) is dropped. Only public extension API.
16
+ *
17
+ * pi exposes no read of its queue to extensions, only `hasPendingMessages()`,
18
+ * so the hint asks on every render rather than tracking queue events (a
19
+ * dequeue with alt+up fires none). TUI only.
20
+ */
21
+
22
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
23
+ import { SEND_NOW_CHANNEL } from "../lib/send-now-channel.ts";
24
+ import { safeThemePaint, truncateLine } from "../lib/tui-render.ts";
25
+ import { SEND_NOW_HINT, SendNowChord } from "./chord.ts";
26
+
27
+ /** How long send now waits for the aborted turn to settle before giving up. */
28
+ const IDLE_WAIT_MS = 10_000;
29
+ /** How long a held `ctrl+x` waits for its `ctrl+s` before the chord is dropped. */
30
+ const CHORD_TIMEOUT_MS = 1_000;
31
+
32
+ export default function sendNowExtension(pi: ExtensionAPI) {
33
+ let unsubscribe: (() => void) | undefined;
34
+ // Bumped on every session start and shutdown, so a send now still waiting
35
+ // for the aborted turn never acts on a replaced or closed session.
36
+ let epoch = 0;
37
+ /** Resolves a send now waiting for the aborted turn to settle. */
38
+ let onSettled: (() => void) | undefined;
39
+ const wakeSettled = () => {
40
+ const wake = onSettled;
41
+ onSettled = undefined;
42
+ wake?.();
43
+ };
44
+ pi.on("agent_settled", wakeSettled);
45
+
46
+ pi.on("session_shutdown", () => {
47
+ epoch++;
48
+ wakeSettled();
49
+ unsubscribe?.();
50
+ unsubscribe = undefined;
51
+ });
52
+
53
+ pi.on("session_start", (_event, ctx) => {
54
+ unsubscribe?.();
55
+ unsubscribe = undefined;
56
+ const session = ++epoch;
57
+ const current = () => epoch === session;
58
+ if (!ctx.hasUI || ctx.mode !== "tui") return;
59
+
60
+ const queued = () => !ctx.isIdle() && ctx.hasPendingMessages();
61
+ // Claude Code sends the draft too, so a draft alone is enough to send now.
62
+ const active = () => !ctx.isIdle() && (ctx.hasPendingMessages() || ctx.ui.getEditorText().trim() !== "");
63
+
64
+ let sending = false;
65
+ const sendNow = async (turnCtx: ExtensionContext) => {
66
+ if (sending) return;
67
+ sending = true;
68
+ try {
69
+ pi.events.emit(SEND_NOW_CHANNEL, {});
70
+ turnCtx.abort();
71
+ if (!turnCtx.isIdle()) {
72
+ await new Promise<void>((resolve) => {
73
+ const fallback = setTimeout(resolve, IDLE_WAIT_MS);
74
+ fallback.unref?.();
75
+ onSettled = () => {
76
+ clearTimeout(fallback);
77
+ resolve();
78
+ };
79
+ });
80
+ }
81
+ if (!current() || !turnCtx.isIdle()) return;
82
+ const text = turnCtx.ui.getEditorText().trim();
83
+ if (!text) return;
84
+ turnCtx.ui.setEditorText("");
85
+ // followUp: an async UserPromptSubmit hook runs before pi's busy
86
+ // check, and on pi 1.2.0 a run starting meanwhile would reject a
87
+ // bare send after the editor was cleared.
88
+ pi.sendUserMessage(text, { deliverAs: "followUp" });
89
+ } finally {
90
+ sending = false;
91
+ }
92
+ };
93
+
94
+ const chord = new SendNowChord();
95
+ let timer: ReturnType<typeof setTimeout> | undefined;
96
+ const stopUnsubscribe = ctx.ui.onTerminalInput((data) => {
97
+ clearTimeout(timer);
98
+ switch (chord.feed(data, active())) {
99
+ case "hold":
100
+ timer = setTimeout(() => chord.expire(), CHORD_TIMEOUT_MS);
101
+ timer.unref?.();
102
+ return { consume: true };
103
+ case "send":
104
+ void sendNow(ctx);
105
+ return { consume: true };
106
+ default:
107
+ return undefined;
108
+ }
109
+ });
110
+ unsubscribe = () => {
111
+ clearTimeout(timer);
112
+ stopUnsubscribe();
113
+ };
114
+
115
+ ctx.ui.setWidget("send-now", (_tui, theme) => {
116
+ const paint = safeThemePaint(theme);
117
+ let cache: { key: string; lines: string[] } | undefined;
118
+ return {
119
+ render: (width: number) => {
120
+ const shown = queued();
121
+ const key = `${width}:${shown}`;
122
+ if (cache?.key === key) return cache.lines;
123
+ const lines = shown ? [truncateLine(paint("dim", ` ↳ ${SEND_NOW_HINT}`), width)] : [];
124
+ cache = { key, lines };
125
+ return lines;
126
+ },
127
+ invalidate: () => {
128
+ cache = undefined;
129
+ },
130
+ };
131
+ });
132
+ });
133
+ }
@@ -27,6 +27,7 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a
27
27
  import { withReasoningFallback } from "../lib/model-policy.ts";
28
28
  import { pickEconomicalContainedModel } from "../lib/model-tier.ts";
29
29
  import { sessionOutlivesTurn } from "../lib/notifications.ts";
30
+ import { isUserRun } from "../lib/prompt-options.ts";
30
31
  import { recordUsage } from "../lib/usage-bus.ts";
31
32
  import { firstUserText, isNameableText, parseTitle, SESSION_TITLE_PROMPT, sessionTitleInput } from "./title.ts";
32
33
 
@@ -61,6 +62,8 @@ export default function sessionTitleExtension(pi: ExtensionAPI) {
61
62
  // message never changes, so it is examined once: a first message that is
62
63
  // not prose (a breadcrumb, a slash command sent as text) leaves the
63
64
  // session unnamed rather than re-scanning the entries every turn.
65
+ // A run an extension opened (pi 1.2.0) carries no prompt: wait for the user's.
66
+ if (!isUserRun(event)) return;
64
67
  attempted = true;
65
68
  const text = firstUserText(ctx.sessionManager.getEntries() as never) ?? event.prompt;
66
69
  if (!isNameableText(text)) return;
@@ -14,6 +14,7 @@
14
14
 
15
15
  import { LOCAL_COMMAND_TAG_PREFIXES } from "../lib/local-command.ts";
16
16
  import { customMessageText } from "../lib/tui-render.ts";
17
+ import { sanitizeTitle } from "../lib/terminal-text.ts";
17
18
 
18
19
  /** CC's naming instruction (system prompt), verbatim from the 2.1.278 capture. */
19
20
  export const SESSION_TITLE_PROMPT =
@@ -86,7 +87,9 @@ function titleFromJson(text: string): string | undefined {
86
87
  }
87
88
 
88
89
  function normalizeTitle(raw: string): string | undefined {
89
- const title = raw.replace(/\s+/g, " ").trim();
90
+ // The title becomes the terminal title inside pi's own OSC 0: an embedded
91
+ // BEL or ESC would end that sequence and run the rest as terminal output.
92
+ const title = sanitizeTitle(raw);
90
93
  if (!title || title.length > MAX_TITLE_LENGTH) return undefined;
91
94
  // CC: "Capitalize the first letter of the title."
92
95
  return title[0].toUpperCase() + title.slice(1);
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Which `/code-review` body a session gets (pure apart from reading the cell
3
+ * files). Claude Code no longer has one body: it picks a "cell" by the model
4
+ * and the effort level, from one table per model family. One Code keys the
5
+ * same choice by prompt tier:
6
+ *
7
+ * - frontier takes Claude Code's default table, the one its Opus 5.5,
8
+ * Sonnet 5.5 and Fable sessions use (minimal prompt at medium, inline
9
+ * angles at high and xhigh, a verified fan-out at max);
10
+ * - workhorse, cheap and tiny take its Sonnet 5 table: the long, explicit
11
+ * recipe (finder angles fanned out over the Agent tool, a verify vote)
12
+ * written for the one model below that line Claude Code tunes a table for.
13
+ * Claude Code's default table reaches its older models only because they
14
+ * have no table of their own; its medium cell leaves the whole review to
15
+ * the model's judgment, which the lower tiers' registers exist to avoid.
16
+ *
17
+ * The effort is the level the user typed first (`/code-review high 123`),
18
+ * else the session's (`/effort`). Claude Code runs Opus 5.5's medium cell as
19
+ * a background fork; here every cell runs in the session's own turn.
20
+ *
21
+ * The cells are Claude Code's text in `skills/code-review/cells/`; the minimal
22
+ * prompt reports through the JSON array the other cells use, since One Code
23
+ * has no findings tool. Every cell is followed by One Code's "Arguments and
24
+ * flags" section.
25
+ */
26
+
27
+ import { readFileSync } from "node:fs";
28
+ import { join } from "node:path";
29
+ import type { PromptTier } from "../lib/model-tier.ts";
30
+
31
+ export const REVIEW_EFFORTS = ["low", "medium", "high", "xhigh", "max"] as const;
32
+ export type ReviewEffort = (typeof REVIEW_EFFORTS)[number];
33
+
34
+ /** Claude Code's default table (`cells/<name>.md`). */
35
+ const DEFAULT_TABLE: Record<ReviewEffort, string> = {
36
+ low: "low-1-pass-max4",
37
+ medium: "minimal-prompt",
38
+ high: "high-8-inline",
39
+ xhigh: "xhigh-10-inline-sweep",
40
+ max: "max-5x5-verify-sweep",
41
+ };
42
+
43
+ /** Claude Code's Sonnet 5 table. */
44
+ const SONNET5_TABLE: Record<ReviewEffort, string> = {
45
+ low: "low-1-pass-min-files-4",
46
+ medium: "medium-3x5-verify",
47
+ high: "high-3x5-recall-verify",
48
+ xhigh: "xhigh-5x5-verify-sweep",
49
+ max: "max-5x5-verify-sweep",
50
+ };
51
+
52
+ export const ARGUMENTS_AND_FLAGS = "arguments-and-flags";
53
+
54
+ export function codeReviewCell(tier: PromptTier, effort: ReviewEffort): string {
55
+ return (tier === "frontier" ? DEFAULT_TABLE : SONNET5_TABLE)[effort];
56
+ }
57
+
58
+ /** The review effort for a session thinking level: below low reads as low, unknown as medium (Claude Code's default). */
59
+ export function reviewEffortFor(thinkingLevel: string | undefined): ReviewEffort {
60
+ switch (thinkingLevel) {
61
+ case "off":
62
+ case "minimal":
63
+ case "low":
64
+ return "low";
65
+ case "high":
66
+ case "xhigh":
67
+ case "max":
68
+ return thinkingLevel;
69
+ default:
70
+ return "medium";
71
+ }
72
+ }
73
+
74
+ /** A typed level as the first argument (`/code-review high 123`) and what follows it. */
75
+ export function parseCodeReviewArgs(args: string): { effort?: ReviewEffort; rest: string } {
76
+ const match = /^\s*(\S+)(?:\s+([\s\S]*))?$/.exec(args);
77
+ const first = match?.[1]?.toLowerCase();
78
+ if (!first || !(REVIEW_EFFORTS as readonly string[]).includes(first)) return { rest: args.trim() };
79
+ return { effort: first as ReviewEffort, rest: (match?.[2] ?? "").trim() };
80
+ }
81
+
82
+ /**
83
+ * The body for a session: the chosen cell, then the flags section. `args`
84
+ * comes back without the typed level, which the cell already reflects.
85
+ */
86
+ export function codeReviewBody(
87
+ cellsDir: string,
88
+ tier: PromptTier,
89
+ thinkingLevel: string | undefined,
90
+ args: string,
91
+ ): { body: string; args: string; cell: string } {
92
+ const { effort, rest } = parseCodeReviewArgs(args);
93
+ const cell = codeReviewCell(tier, effort ?? reviewEffortFor(thinkingLevel));
94
+ // A checkout that turned line endings into CRLF still sends Claude Code's bytes.
95
+ const read = (name: string) => readFileSync(join(cellsDir, `${name}.md`), "utf-8").replace(/\r\n/g, "\n").trimEnd();
96
+ return { body: `${read(cell)}\n\n${read(ARGUMENTS_AND_FLAGS)}`, args: rest, cell };
97
+ }