one-code-extension 0.4.1 → 0.6.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.
- package/README.md +16 -5
- package/agents/general-purpose.md +2 -2
- package/docs/guide/README.md +2 -1
- package/docs/guide/bring-your-claude-code-setup.md +60 -9
- package/docs/guide/configuration.md +48 -14
- package/docs/guide/differences-from-claude-code.md +40 -28
- package/docs/guide/doctor.md +20 -13
- package/docs/guide/hooks.md +18 -3
- package/docs/guide/installation.md +26 -4
- package/docs/guide/permissions-modes-and-auto-mode.md +225 -49
- package/docs/guide/providers-and-models.md +137 -54
- package/docs/guide/reference.md +27 -15
- package/docs/guide/sessions-and-context.md +69 -16
- package/docs/guide/skills-plugins-and-mcp.md +57 -20
- package/docs/guide/subagents-and-workflows.md +95 -29
- package/docs/guide/tasks-and-background-work.md +101 -26
- package/docs/guide/terminal-interface.md +24 -12
- package/docs/guide/tools.md +46 -5
- package/docs/guide/troubleshooting.md +13 -9
- package/docs/guide/windows.md +58 -31
- package/extensions/artifacts/gallery.ts +227 -0
- package/extensions/artifacts/index.ts +288 -0
- package/extensions/artifacts/store.ts +570 -0
- package/extensions/artifacts/viewer.ts +199 -0
- package/extensions/ask-user/description.ts +67 -0
- package/extensions/ask-user/dialogs.ts +80 -0
- package/extensions/ask-user/index.ts +37 -33
- package/extensions/ask-user/questions.ts +32 -7
- package/extensions/ask-user/widget.ts +45 -25
- package/extensions/auto-mode/actions.ts +6 -0
- package/extensions/auto-mode/cache.ts +88 -0
- package/extensions/auto-mode/classifier-prompt.ts +5 -4
- package/extensions/auto-mode/classifier.ts +290 -65
- package/extensions/auto-mode/config.ts +72 -20
- package/extensions/auto-mode/decision-log.ts +2 -0
- package/extensions/auto-mode/defaults.ts +1 -1
- package/extensions/auto-mode/denials.ts +124 -0
- package/extensions/auto-mode/git-checkout-programs.ts +187 -0
- package/extensions/auto-mode/git-status-meta.ts +159 -0
- package/extensions/auto-mode/history.ts +189 -0
- package/extensions/auto-mode/instructions.ts +58 -52
- package/extensions/auto-mode/model-select.ts +159 -134
- package/extensions/auto-mode/paths.ts +57 -5
- package/extensions/auto-mode/pause.ts +57 -2
- package/extensions/auto-mode/prompt.ts +37 -21
- package/extensions/auto-mode/read-only-options.ts +724 -0
- package/extensions/auto-mode/resolved-paths-meta.ts +133 -0
- package/extensions/auto-mode/rules.ts +18 -1
- package/extensions/auto-mode/safety-floor.ts +361 -18
- package/extensions/auto-mode/setup-run.ts +20 -14
- package/extensions/auto-mode/shell-analysis.ts +764 -490
- package/extensions/auto-mode/shell-parse.ts +885 -0
- package/extensions/auto-mode/system-note.ts +33 -0
- package/extensions/auto-mode/transcript.ts +80 -51
- package/extensions/background/cron.ts +642 -0
- package/extensions/background/index.ts +614 -248
- package/extensions/background/loop-fire.ts +173 -0
- package/extensions/background/loop-preamble.ts +59 -0
- package/extensions/background/loop-skill.ts +163 -0
- package/extensions/background/monitor-batch.ts +53 -0
- package/extensions/background/noop-fold.ts +128 -0
- package/extensions/background/switch-guard.ts +56 -0
- package/extensions/background/wakeup.ts +178 -55
- package/extensions/bash/background.ts +53 -17
- package/extensions/bash/child.ts +7 -0
- package/extensions/bash/description.ts +188 -0
- package/extensions/bash/guards.ts +15 -67
- package/extensions/bash/index.ts +66 -35
- package/extensions/branding/compaction-keep.ts +63 -0
- package/extensions/branding/declined.ts +22 -0
- package/extensions/branding/index.ts +133 -9
- package/extensions/branding/prompt-editor.ts +53 -6
- package/extensions/branding/queued-edit.ts +31 -0
- package/extensions/branding/replaced-builtins.ts +68 -0
- package/extensions/branding/startup.ts +33 -71
- package/extensions/btw/index.ts +250 -78
- package/extensions/btw/panel.ts +228 -100
- package/extensions/btw/prompt.ts +41 -4
- package/extensions/cache-marks/index.ts +42 -0
- package/extensions/claude-compat/index.ts +7 -11
- package/extensions/claude-context/index.ts +436 -63
- package/extensions/compaction/cut.ts +157 -0
- package/extensions/compaction/index.ts +219 -75
- package/extensions/compaction/kept-thinking.ts +62 -0
- package/extensions/compaction/prompt.ts +15 -12
- package/extensions/context-budget/budget.ts +16 -2
- package/extensions/context-budget/index.ts +35 -15
- package/extensions/context-management/index.ts +36 -28
- package/extensions/doctor/build.ts +59 -8
- package/extensions/doctor/builtins.ts +84 -0
- package/extensions/doctor/cli.ts +7 -1
- package/extensions/doctor/compat.ts +88 -23
- package/extensions/doctor/dependencies.ts +41 -5
- package/extensions/doctor/fix-prompt.ts +9 -2
- package/extensions/doctor/index.ts +102 -58
- package/extensions/doctor/models.ts +102 -63
- package/extensions/doctor/presets.ts +42 -27
- package/extensions/doctor/report.ts +19 -2
- package/extensions/doctor/viewer.ts +49 -27
- package/extensions/effort/index.ts +141 -25
- package/extensions/effort/settings.ts +21 -0
- package/extensions/effort/slider.ts +24 -20
- package/extensions/exit/index.ts +32 -1
- package/extensions/file-tracker/index.ts +420 -42
- package/extensions/file-tracker/replay.ts +137 -24
- package/extensions/file-tracker/restore.ts +66 -0
- package/extensions/file-tracker/results.ts +66 -0
- package/extensions/file-tracker/shell-reads.ts +211 -0
- package/extensions/file-tracker/tracker.ts +45 -15
- package/extensions/footer/footer-line.ts +45 -24
- package/extensions/footer/index.ts +47 -2
- package/extensions/footer/pr.ts +34 -5
- package/extensions/hooks/compaction.ts +7 -0
- package/extensions/hooks/executor.ts +32 -30
- package/extensions/hooks/index.ts +209 -58
- package/extensions/hooks/matcher.ts +3 -0
- package/extensions/hooks/prompt-context.ts +59 -0
- package/extensions/hooks/protocol.ts +41 -3
- package/extensions/hooks/settings.ts +50 -19
- package/extensions/hooks/subagent-bridge.ts +2 -0
- package/extensions/hooks/trust.ts +26 -12
- package/extensions/idle-compact/index.ts +119 -0
- package/extensions/idle-compact/policy.ts +143 -0
- package/extensions/init/index.ts +11 -10
- package/extensions/init/prompt.ts +25 -32
- package/extensions/interrupted/index.ts +13 -1
- package/extensions/kept-thinking/index.ts +27 -0
- package/extensions/ledger/index.ts +46 -0
- package/extensions/ledger/wire.ts +154 -0
- package/extensions/lib/agent-cron.ts +146 -0
- package/extensions/lib/agent-loader.ts +18 -3
- package/extensions/lib/agent-view.ts +85 -0
- package/extensions/lib/anthropic-auth.ts +98 -0
- package/extensions/lib/anthropic-payload.ts +82 -1
- package/extensions/lib/anthropic-server-call.ts +230 -0
- package/extensions/lib/anthropic-server-tools.ts +485 -0
- package/extensions/lib/app-launch.mjs +94 -0
- package/extensions/lib/argument-hints.ts +190 -0
- package/extensions/lib/atomic-write.ts +6 -2
- package/extensions/lib/auto-memory.ts +75 -0
- package/extensions/lib/bash-parser.ts +84 -0
- package/extensions/lib/btw-fork.ts +93 -0
- package/extensions/lib/child-extensions.ts +52 -0
- package/extensions/lib/child-writes.ts +45 -0
- package/extensions/lib/claude-context.ts +515 -100
- package/extensions/lib/claude-external-includes.ts +68 -0
- package/extensions/lib/claude-id.ts +22 -0
- package/extensions/lib/claude-rules.ts +323 -0
- package/extensions/lib/claude-settings.ts +76 -4
- package/extensions/lib/compaction-boundary.ts +36 -0
- package/extensions/lib/compaction-keep.mjs +83 -0
- package/extensions/lib/config-mode.ts +112 -0
- package/extensions/lib/consent-dialogs.ts +63 -0
- package/extensions/lib/consent-preview.ts +5 -1
- package/extensions/lib/consent-stores.ts +48 -0
- package/extensions/lib/context-facts.ts +97 -0
- package/extensions/lib/covered-messages.ts +23 -0
- package/extensions/lib/deferred.ts +359 -25
- package/extensions/lib/dock-rows.ts +60 -0
- package/extensions/lib/empty-tool-result.ts +27 -0
- package/extensions/lib/environment-block.ts +76 -0
- package/extensions/lib/fetch-timeout.ts +24 -6
- package/extensions/{system-prompt → lib}/git-status.ts +51 -13
- package/extensions/lib/git.ts +75 -13
- package/extensions/lib/grammars/LICENSE-tree-sitter-bash +21 -0
- package/extensions/lib/grammars/README.md +2 -0
- package/extensions/lib/grammars/tree-sitter-bash.wasm +0 -0
- package/extensions/lib/guide-docs.ts +45 -0
- package/extensions/lib/headless-output.ts +46 -0
- package/extensions/lib/hook-gate.ts +7 -7
- package/extensions/lib/interrupt.ts +20 -4
- package/extensions/lib/key-input.ts +455 -0
- package/extensions/lib/keys.ts +14 -1
- package/extensions/lib/ledger/fold-memo.ts +49 -0
- package/extensions/lib/ledger/fold.ts +265 -0
- package/extensions/lib/ledger/layout.ts +72 -0
- package/extensions/lib/ledger/plan.ts +102 -0
- package/extensions/lib/ledger/records.ts +276 -0
- package/extensions/lib/ledger/state.ts +47 -0
- package/extensions/lib/ledger/validate.ts +141 -0
- package/extensions/lib/ledger/wire.ts +632 -0
- package/extensions/lib/local-command.ts +71 -19
- package/extensions/lib/mcp-overrides.ts +1 -1
- package/extensions/lib/mcp-share.ts +46 -0
- package/extensions/lib/memory-content.ts +146 -0
- package/extensions/lib/memory-index.ts +18 -0
- package/extensions/lib/memory.ts +134 -123
- package/extensions/lib/model-catalog/huggingface.json +178 -0
- package/extensions/lib/model-catalog/models-dev.json +18533 -0
- package/extensions/lib/model-catalog/openrouter.json +5050 -0
- package/extensions/lib/model-catalog-data.ts +513 -0
- package/extensions/lib/model-catalog.ts +462 -0
- package/extensions/lib/model-choice-warnings.ts +137 -0
- package/extensions/lib/model-pairings.ts +152 -0
- package/extensions/{auto-mode → lib}/model-picker.ts +26 -43
- package/extensions/lib/model-policy.ts +112 -15
- package/extensions/lib/model-tier.ts +283 -355
- package/extensions/lib/model-unusable.ts +1 -1
- package/extensions/lib/newer-model.ts +100 -0
- package/extensions/lib/notices.ts +87 -0
- package/extensions/lib/notifications.ts +357 -73
- package/extensions/lib/one-code-settings.ts +74 -8
- package/extensions/lib/open-browser.ts +63 -0
- package/extensions/lib/openrouter-generation.ts +94 -0
- package/extensions/lib/operation-deadline.ts +30 -0
- package/extensions/lib/original-command.ts +4 -4
- package/extensions/lib/package-version.ts +1 -1
- package/extensions/lib/panel-focus.ts +134 -0
- package/extensions/lib/paths.ts +17 -2
- package/extensions/lib/permission-gate.ts +72 -6
- package/extensions/lib/persisted-output.ts +60 -8
- package/extensions/lib/pi-ai-estimate.ts +19 -3
- package/extensions/lib/pi-version.ts +38 -2
- package/extensions/lib/plan-mode-channels.ts +42 -5
- package/extensions/lib/plugins.ts +26 -17
- package/extensions/lib/powershell-parse-script.ts +208 -0
- package/extensions/lib/powershell-parser.ts +344 -0
- package/extensions/lib/previous-mark.ts +101 -0
- package/extensions/lib/process-state.ts +48 -0
- package/extensions/lib/process-tree.ts +132 -8
- package/extensions/lib/prompt-options.ts +82 -0
- package/extensions/lib/queued-delivery.ts +44 -0
- package/extensions/lib/reminders.ts +370 -358
- package/extensions/lib/replaced-builtins.mjs +199 -0
- package/extensions/lib/replay-call.ts +70 -0
- package/extensions/lib/request-replay.ts +547 -0
- package/extensions/lib/scratchpad.ts +81 -14
- package/extensions/lib/send-now-channel.ts +7 -0
- package/extensions/lib/session-model-tier.ts +51 -0
- package/extensions/lib/session-work.ts +64 -0
- package/extensions/lib/settings-channels.ts +4 -4
- package/extensions/lib/shell-exit-semantics.ts +170 -0
- package/extensions/lib/shell-quote.ts +11 -0
- package/extensions/lib/shell-result.ts +70 -0
- package/extensions/lib/shell-spawn.ts +70 -6
- package/extensions/lib/shell-tool.ts +75 -25
- package/extensions/lib/side-call-cache.ts +124 -0
- package/extensions/lib/side-call-run.ts +96 -0
- package/extensions/lib/side-call-usage.ts +38 -0
- package/extensions/lib/side-call.ts +24 -1
- package/extensions/lib/single-flight.ts +18 -0
- package/extensions/lib/skill-body.ts +42 -0
- package/extensions/lib/skill-scan.ts +63 -24
- package/extensions/lib/spill-file.ts +140 -0
- package/extensions/lib/subagent-handback.ts +112 -0
- package/extensions/lib/system-role.ts +156 -0
- package/extensions/lib/terminal-text.ts +114 -0
- package/extensions/lib/text-width.ts +47 -16
- package/extensions/lib/timer-ops.ts +20 -0
- package/extensions/lib/tool-additions.ts +129 -0
- package/extensions/lib/tool-call-corruption.ts +134 -0
- package/extensions/lib/tool-path.ts +66 -0
- package/extensions/lib/tool-variants.ts +69 -0
- package/extensions/lib/tui-render.ts +255 -27
- package/extensions/lib/turn-budget-layout.ts +159 -0
- package/extensions/lib/update-check.mjs +15 -2
- package/extensions/lib/usage-bus.ts +1 -1
- package/extensions/lib/user-denial.ts +38 -0
- package/extensions/lib/workspace-channel.ts +16 -0
- package/extensions/lib/worktree-channel.ts +31 -3
- package/extensions/lib/worktree-isolation.ts +40 -10
- package/extensions/lsp/client.ts +8 -9
- package/extensions/lsp/index.ts +76 -12
- package/extensions/lsp/keep-alive.ts +1 -1
- package/extensions/lsp/trust.ts +119 -0
- package/extensions/lsp/watcher.ts +1 -1
- package/extensions/mcp/announce.ts +90 -43
- package/extensions/mcp/client.ts +161 -48
- package/extensions/mcp/config.ts +132 -8
- package/extensions/mcp/discovery.ts +19 -0
- package/extensions/mcp/index.ts +220 -121
- package/extensions/mcp/oauth/browser.ts +38 -17
- package/extensions/mcp/oauth/flow.ts +25 -17
- package/extensions/mcp/oauth/provider.ts +14 -8
- package/extensions/mcp/oauth/store.ts +34 -16
- package/extensions/mcp/panel/keys.ts +12 -11
- package/extensions/mcp/panel/render.ts +9 -6
- package/extensions/mcp/schema.ts +104 -5
- package/extensions/mcp/trust.ts +164 -73
- package/extensions/memory/entries.ts +23 -14
- package/extensions/memory/index.ts +134 -28
- package/extensions/memory/open-external.ts +33 -18
- package/extensions/memory/panel.ts +135 -26
- package/extensions/model-default/index.ts +86 -19
- package/extensions/newer-model/index.ts +31 -0
- package/extensions/notebook/description.ts +18 -0
- package/extensions/notebook/index.ts +6 -5
- package/extensions/notebook/notebook.ts +1 -1
- package/extensions/permissions/index.ts +1426 -398
- package/extensions/permissions/matcher.ts +425 -74
- package/extensions/permissions/modes.ts +11 -4
- package/extensions/permissions/panel/host.ts +130 -0
- package/extensions/permissions/panel/keys.ts +48 -0
- package/extensions/permissions/panel/render.ts +450 -0
- package/extensions/permissions/panel/state.ts +550 -0
- package/extensions/permissions/powershell-cmdlets.ts +198 -0
- package/extensions/permissions/powershell-paths.ts +197 -0
- package/extensions/permissions/powershell-rules.ts +207 -280
- package/extensions/permissions/powershell-tree.ts +557 -0
- package/extensions/permissions/project-trust.ts +27 -11
- package/extensions/permissions/protected-paths.ts +14 -2
- package/extensions/permissions/session-grant.ts +6 -0
- package/extensions/permissions/settings.ts +166 -31
- package/extensions/permissions/subagent-gate.ts +25 -0
- package/extensions/permissions/workspace.ts +78 -0
- package/extensions/plan-mode/index.ts +276 -92
- package/extensions/plan-mode/reminder.ts +89 -21
- package/extensions/plan-mode/run-state.ts +26 -0
- package/extensions/plan-mode/texts.ts +177 -0
- package/extensions/plan-mode/viewer.ts +92 -27
- package/extensions/plugins/counts.ts +3 -3
- package/extensions/plugins/index.ts +64 -46
- package/extensions/plugins/install/install.ts +16 -0
- package/extensions/plugins/marketplace/sync.ts +9 -3
- package/extensions/plugins/marketplace/types.ts +3 -1
- package/extensions/plugins/panel/keys.ts +21 -24
- package/extensions/plugins/panel/render.ts +12 -6
- package/extensions/plugins/shell-expand.ts +107 -0
- package/extensions/plugins/template.ts +32 -15
- package/extensions/powershell/child.ts +7 -0
- package/extensions/powershell/description.ts +38 -6
- package/extensions/powershell/guards.ts +1 -1
- package/extensions/powershell/index.ts +14 -7
- package/extensions/recap/index.ts +73 -71
- package/extensions/recap/prompt.ts +2 -2
- package/extensions/recap/scheduler.ts +3 -5
- package/extensions/search-tools/grep-merge.ts +39 -0
- package/extensions/search-tools/index.ts +0 -0
- package/extensions/send-now/chord.ts +62 -0
- package/extensions/send-now/index.ts +133 -0
- package/extensions/session-title/index.ts +3 -0
- package/extensions/session-title/title.ts +4 -1
- package/extensions/skill/announce.ts +30 -0
- package/extensions/skill/code-review.ts +97 -0
- package/extensions/skill/index.ts +469 -132
- package/extensions/skill/invoke.ts +118 -75
- package/extensions/skill/listing.ts +133 -9
- package/extensions/skill/panel/keys.ts +15 -16
- package/extensions/skill/panel/render.ts +5 -2
- package/extensions/skill/panel/state.ts +12 -1
- package/extensions/subagents/agent-args.ts +39 -0
- package/extensions/subagents/agent-description.ts +132 -0
- package/extensions/subagents/agents.ts +146 -31
- package/extensions/subagents/default-model.ts +2 -3
- package/extensions/subagents/delegation-steer.ts +4 -4
- package/extensions/subagents/fork-cache.ts +82 -0
- package/extensions/subagents/guide-agent.ts +189 -0
- package/extensions/subagents/hand-back-review.ts +3 -0
- package/extensions/subagents/index.ts +1594 -852
- package/extensions/subagents/live-runs.ts +26 -6
- package/extensions/subagents/model-select.ts +38 -25
- package/extensions/subagents/outcome.ts +5 -2
- package/extensions/subagents/panel-keys.ts +73 -31
- package/extensions/subagents/panel-render.ts +120 -96
- package/extensions/subagents/panel-widget.ts +60 -89
- package/extensions/subagents/parent-mode.ts +50 -0
- package/extensions/subagents/pending-claim.ts +18 -1
- package/extensions/subagents/runner.ts +135 -80
- package/extensions/subagents/runs.ts +44 -5
- package/extensions/subagents/send-to-main-tool.ts +1 -1
- package/extensions/subagents/session-turns.ts +32 -8
- package/extensions/subagents/shell-panel.ts +36 -178
- package/extensions/subagents/tasks-dialog.ts +170 -0
- package/extensions/subagents/viewport-mirror.ts +95 -0
- package/extensions/subagents/worktree.ts +57 -13
- package/extensions/system-prompt/environment.ts +19 -19
- package/extensions/system-prompt/idle-turn.ts +65 -0
- package/extensions/system-prompt/index.ts +165 -47
- package/extensions/system-prompt/template.ts +34 -51
- package/extensions/system-prompt/tiers/common.ts +23 -64
- package/extensions/system-prompt/tiers/frontier.ts +32 -11
- package/extensions/system-prompt/tiers/low.ts +67 -45
- package/extensions/system-prompt/tiers/mid.ts +96 -38
- package/extensions/system-reminder/index.ts +204 -70
- package/extensions/tasks/descriptions.ts +190 -0
- package/extensions/tasks/index.ts +120 -41
- package/extensions/tasks/store.ts +83 -16
- package/extensions/tool-call-corruption/child.ts +7 -0
- package/extensions/tool-call-corruption/index.ts +237 -0
- package/extensions/tool-search/index.ts +366 -144
- package/extensions/tool-style/index.ts +68 -10
- package/extensions/tool-style/write-description.ts +40 -0
- package/extensions/tool-style/write-render.ts +237 -0
- package/extensions/turn-duration/index.ts +7 -3
- package/extensions/turn-duration/line.ts +47 -4
- package/extensions/web/backends.ts +6 -9
- package/extensions/web/description.ts +50 -0
- package/extensions/web/index.ts +118 -53
- package/extensions/web/native-call.ts +15 -0
- package/extensions/web/native-results.ts +41 -0
- package/extensions/web-fetch/description.ts +42 -0
- package/extensions/web-fetch/extract.ts +53 -6
- package/extensions/web-fetch/index.ts +125 -76
- package/extensions/web-fetch/page-content.ts +19 -0
- package/extensions/web-fetch/response.ts +49 -0
- package/extensions/web-fetch/summarize.ts +9 -10
- package/extensions/workflow/agent-session.ts +108 -18
- package/extensions/workflow/args.ts +24 -0
- package/extensions/workflow/description.ts +67 -0
- package/extensions/workflow/globals.ts +17 -3
- package/extensions/workflow/index.ts +157 -162
- package/extensions/workflow/records.ts +1 -0
- package/extensions/workflow/run-manager.ts +33 -6
- package/extensions/workflow/saved-workflows.ts +3 -2
- package/extensions/workflow/types.ts +22 -1
- package/extensions/workflow/viewer.ts +54 -24
- package/extensions/workflow/widget.ts +20 -0
- package/extensions/worktree/descriptions.ts +91 -0
- package/extensions/worktree/guards.ts +316 -54
- package/extensions/worktree/index.ts +162 -44
- package/extensions/worktree/powershell-guards.ts +167 -0
- package/extensions/worktree/rewrite.ts +14 -16
- package/package.json +21 -7
- package/skills/artifact-design/SKILL.md +85 -0
- package/skills/code-review/SKILL.md +20 -20
- package/skills/code-review/cells/arguments-and-flags.md +19 -0
- package/skills/code-review/cells/high-3x5-recall-verify.md +137 -0
- package/skills/code-review/cells/high-8-inline.md +122 -0
- package/skills/code-review/cells/low-1-pass-max4.md +27 -0
- package/skills/code-review/cells/low-1-pass-min-files-4.md +28 -0
- package/skills/code-review/cells/max-5x5-verify-sweep.md +162 -0
- package/skills/code-review/cells/medium-3x5-verify.md +132 -0
- package/skills/code-review/cells/minimal-prompt.md +32 -0
- package/skills/code-review/cells/xhigh-10-inline-sweep.md +149 -0
- package/skills/code-review/cells/xhigh-5x5-verify-sweep.md +162 -0
- package/skills/fewer-permission-prompts/SKILL.md +1 -1
- package/skills/loop/SKILL.md +11 -0
- package/skills/security-review/SKILL.md +2 -5
- package/skills/simplify/SKILL.md +7 -5
- package/skills/workflow-authoring/SKILL.md +143 -0
- package/themes/onecode-light.json +1 -1
- package/themes/onecode.json +1 -1
- package/types/app.d.ts +58 -0
- package/types/community-packages.d.ts +26 -1
- package/extensions/auto-mode/recoverability.ts +0 -229
- package/extensions/lib/capability-index.ts +0 -466
- package/extensions/lib/model-facts.generated.json +0 -2675
- package/extensions/lib/model-facts.ts +0 -162
- package/extensions/tool-search/announce.ts +0 -42
|
@@ -21,12 +21,24 @@
|
|
|
21
21
|
* sessions", and since persisting is what this extension does, the claim is
|
|
22
22
|
* true here too (a failed write announces the switch without it). pi handles
|
|
23
23
|
* `/model` before any extension sees the text, so `model_select` — which also
|
|
24
|
-
* covers ctrl+p cycling — is the one signal
|
|
25
|
-
*
|
|
24
|
+
* covers ctrl+p cycling — is the one signal.
|
|
25
|
+
*
|
|
26
|
+
* The write and the breadcrumb wait for the model the user settles on: the
|
|
27
|
+
* quiet period after the last switch, or the next prompt, whichever comes
|
|
28
|
+
* first. So a ctrl+p cycle through ten models writes the settings once and
|
|
29
|
+
* queues one breadcrumb, which names the write's real outcome. A quit,
|
|
30
|
+
* /reload, /new or /resume inside the quiet period still writes the settings,
|
|
31
|
+
* but cannot queue the breadcrumb: system-reminder stops persisting one-shots
|
|
32
|
+
* in its `session_shutdown` handler, which runs before this extension's. The
|
|
33
|
+
* choice is recorded on the branch instead, and the next session on that
|
|
34
|
+
* branch (the reload, a resume) announces it while its model is still the
|
|
35
|
+
* one chosen.
|
|
26
36
|
*/
|
|
27
37
|
|
|
28
38
|
import { join } from "node:path";
|
|
29
39
|
import { getAgentDir, type ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
40
|
+
import { isObject } from "../lib/ledger/records.ts";
|
|
41
|
+
import { readState, recordState } from "../lib/ledger/state.ts";
|
|
30
42
|
import { announceLocalCommand } from "../lib/local-command.ts";
|
|
31
43
|
import { readSettingsForWrite, writeSettings } from "../lib/one-code-settings.ts";
|
|
32
44
|
|
|
@@ -44,34 +56,65 @@ export function modelSwitchStdout(displayName: string, saved: boolean): string {
|
|
|
44
56
|
return `Set model to \`${displayName}\`${saved ? " and saved as your default for new sessions" : ""}`;
|
|
45
57
|
}
|
|
46
58
|
|
|
47
|
-
/** Quiet period after the last switch before it is written (ctrl+p cycles fire one event per step). */
|
|
59
|
+
/** Quiet period after the last switch before it is written and announced (ctrl+p cycles fire one event per step). */
|
|
48
60
|
export const PERSIST_DEBOUNCE_MS = 400;
|
|
49
61
|
|
|
62
|
+
/** The `/model` breadcrumb's pending-entry key: a later switch's breadcrumb replaces an undelivered one. */
|
|
63
|
+
const BREADCRUMB_KEY = "local-command:model";
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The `one-code:state` key of a switch not yet announced: recorded at every
|
|
67
|
+
* switch (`saved` unset until the settings write), so the branch, not this
|
|
68
|
+
* process's timer, says a breadcrumb is owed; null once announced or dropped.
|
|
69
|
+
*/
|
|
70
|
+
const UNANNOUNCED_STATE = "model-breadcrumb";
|
|
71
|
+
|
|
72
|
+
/** A settled switch, as announced. */
|
|
73
|
+
interface Settled {
|
|
74
|
+
provider: string;
|
|
75
|
+
id: string;
|
|
76
|
+
name: string;
|
|
77
|
+
saved: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** A switch the branch records, as `model_select` or a shutdown left it. */
|
|
81
|
+
type Unannounced = Omit<Settled, "saved"> & { saved?: boolean };
|
|
82
|
+
|
|
50
83
|
export default function modelDefaultExtension(pi: ExtensionAPI) {
|
|
51
84
|
let pending: { provider: string; id: string; name: string; notify: (message: string) => void } | undefined;
|
|
52
85
|
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
86
|
+
const announce = (name: string, saved: boolean) => announceLocalCommand(pi, { name: "model", stdout: modelSwitchStdout(name, saved), key: BREADCRUMB_KEY });
|
|
53
87
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
timer = undefined;
|
|
57
|
-
const choice = pending;
|
|
58
|
-
pending = undefined;
|
|
59
|
-
if (!choice) return;
|
|
88
|
+
/** Save `provider/id` as the default model, and say whether it was saved. */
|
|
89
|
+
const save = (provider: string, id: string, notify: (message: string) => void): boolean => {
|
|
60
90
|
const path = join(getAgentDir(), "settings.json");
|
|
61
|
-
let saved = true;
|
|
62
91
|
try {
|
|
63
|
-
writeSettings(path, applyDefaultModel(readSettingsForWrite(path),
|
|
92
|
+
writeSettings(path, applyDefaultModel(readSettingsForWrite(path), provider, id));
|
|
93
|
+
return true;
|
|
64
94
|
} catch (error) {
|
|
65
95
|
// Persisting a preference must not break the model switch itself, but
|
|
66
|
-
// say why it will be forgotten
|
|
67
|
-
|
|
68
|
-
|
|
96
|
+
// say why it will be forgotten.
|
|
97
|
+
notify(`Could not save ${provider}/${id} as the default model: ${(error as Error).message}`);
|
|
98
|
+
return false;
|
|
69
99
|
}
|
|
70
|
-
announceLocalCommand(pi, { name: "model", stdout: modelSwitchStdout(choice.name, saved) });
|
|
71
100
|
};
|
|
72
101
|
|
|
73
|
-
|
|
74
|
-
|
|
102
|
+
/** Write the switch the user settled on, if any, and say whether it was saved. */
|
|
103
|
+
const settle = (): Settled | undefined => {
|
|
104
|
+
if (timer !== undefined) clearTimeout(timer);
|
|
105
|
+
timer = undefined;
|
|
106
|
+
const choice = pending;
|
|
107
|
+
pending = undefined;
|
|
108
|
+
if (!choice) return undefined;
|
|
109
|
+
return { provider: choice.provider, id: choice.id, name: choice.name, saved: save(choice.provider, choice.id, choice.notify) };
|
|
110
|
+
};
|
|
111
|
+
const flush = () => {
|
|
112
|
+
const settled = settle();
|
|
113
|
+
if (!settled) return;
|
|
114
|
+
announce(settled.name, settled.saved);
|
|
115
|
+
recordState(pi, UNANNOUNCED_STATE, null);
|
|
116
|
+
};
|
|
117
|
+
|
|
75
118
|
pi.on("model_select", (event, ctx) => {
|
|
76
119
|
const model = event.model as { provider?: string; id?: string; name?: string } | undefined;
|
|
77
120
|
if (!model?.provider || !model.id) return;
|
|
@@ -83,11 +126,35 @@ export default function modelDefaultExtension(pi: ExtensionAPI) {
|
|
|
83
126
|
if (ctx.hasUI) ctx.ui.notify(message, "warning");
|
|
84
127
|
},
|
|
85
128
|
};
|
|
129
|
+
// Owed from now on, whatever happens to this process: a fresh one on a
|
|
130
|
+
// copy of the branch owes the same breadcrumb (lifecycle-grid-hunt oracle).
|
|
131
|
+
recordState(pi, UNANNOUNCED_STATE, { provider: model.provider, id: model.id, name: pending.name } satisfies Unannounced);
|
|
86
132
|
if (timer !== undefined) clearTimeout(timer);
|
|
87
133
|
timer = setTimeout(flush, PERSIST_DEBOUNCE_MS);
|
|
88
134
|
timer.unref?.();
|
|
89
135
|
});
|
|
90
136
|
|
|
91
|
-
// A
|
|
92
|
-
pi.on("
|
|
137
|
+
// A prompt sent inside the quiet period carries the switch's breadcrumb, not the request after it.
|
|
138
|
+
pi.on("before_agent_start", () => flush());
|
|
139
|
+
|
|
140
|
+
// A quit inside the quiet period must not lose the choice: the write happens
|
|
141
|
+
// now, and the breadcrumb waits on the branch for the next session.
|
|
142
|
+
pi.on("session_shutdown", () => {
|
|
143
|
+
const settled = settle();
|
|
144
|
+
if (settled) recordState(pi, UNANNOUNCED_STATE, settled);
|
|
145
|
+
});
|
|
146
|
+
// A switch the branch still owes a breadcrumb: announced here when the
|
|
147
|
+
// session runs that model, saved first if its own process never got to it.
|
|
148
|
+
pi.on("session_start", (_event, ctx) => {
|
|
149
|
+
const stored = readState(ctx, UNANNOUNCED_STATE);
|
|
150
|
+
if (!isObject(stored)) return;
|
|
151
|
+
recordState(pi, UNANNOUNCED_STATE, null);
|
|
152
|
+
const { provider, id, name, saved } = stored;
|
|
153
|
+
if (typeof provider !== "string" || typeof id !== "string" || typeof name !== "string") return;
|
|
154
|
+
if (ctx.model?.provider !== provider || ctx.model?.id !== id) return;
|
|
155
|
+
const notify = (message: string) => {
|
|
156
|
+
if (ctx.hasUI) ctx.ui.notify(message, "warning");
|
|
157
|
+
};
|
|
158
|
+
announce(name, typeof saved === "boolean" ? saved : save(provider, id, notify));
|
|
159
|
+
});
|
|
93
160
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** User-only model-upgrade advice. No reminders, transcript entries, or request hooks. */
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
4
|
+
import { modelSpec } from "../lib/model-policy.ts";
|
|
5
|
+
import { MODEL_UNUSABLE_CHANNEL, type ModelUnusableEvent, withoutUnusable } from "../lib/model-unusable.ts";
|
|
6
|
+
import { newerModelSuggestion } from "../lib/newer-model.ts";
|
|
7
|
+
import { queueNotice } from "../lib/notices.ts";
|
|
8
|
+
import { sessionOutlivesTurn } from "../lib/notifications.ts";
|
|
9
|
+
import { readSuggestNewerModels } from "../lib/one-code-settings.ts";
|
|
10
|
+
|
|
11
|
+
export default function newerModelExtension(pi: ExtensionAPI) {
|
|
12
|
+
const shown = new Set<string>();
|
|
13
|
+
const unusable = new Set<string>();
|
|
14
|
+
pi.events.on(MODEL_UNUSABLE_CHANNEL, (data) => unusable.add((data as ModelUnusableEvent).model));
|
|
15
|
+
|
|
16
|
+
const suggest = (ctx: ExtensionContext, model = ctx.model) => {
|
|
17
|
+
if (!sessionOutlivesTurn(ctx.mode) || !ctx.hasUI || !model || !readSuggestNewerModels(homedir())) return;
|
|
18
|
+
const key = JSON.stringify([ctx.sessionManager.getSessionId(), modelSpec(model)]);
|
|
19
|
+
if (shown.has(key)) return;
|
|
20
|
+
const suggestion = newerModelSuggestion(withoutUnusable(ctx.modelRegistry.getAvailable(), unusable), model);
|
|
21
|
+
if (!suggestion) return;
|
|
22
|
+
// Joined with the other extensions' startup and model-switch notices (lib/notices.ts).
|
|
23
|
+
queueNotice(pi.events, ctx, "info", `${suggestion.text} ${suggestion.fix}`);
|
|
24
|
+
shown.add(key);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Local catalog/cache reads only. Never await a network refresh at startup.
|
|
28
|
+
// Session ids also handle RPC's duplicate session_start for a new session.
|
|
29
|
+
pi.on("session_start", (_event, ctx) => suggest(ctx));
|
|
30
|
+
pi.on("model_select", (event, ctx) => suggest(ctx, event.model));
|
|
31
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notebook_edit's model-facing description: Claude Code's NotebookEdit text
|
|
3
|
+
* with One Code's extras (pure).
|
|
4
|
+
*
|
|
5
|
+
* Claude Code addresses a cell by the id its Read tool prints; pi's read
|
|
6
|
+
* returns the notebook's JSON, so a cell is named by its own `id` or by its
|
|
7
|
+
* position (`cell-0`). The path may be relative and is `path` or
|
|
8
|
+
* `notebook_path`; `append` and the cleared outputs are One Code's.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const NOTEBOOK_EDIT_DESCRIPTION = `Replaces, inserts, or deletes a single cell in a Jupyter notebook (.ipynb file).
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
- You must use the read tool on the notebook in this conversation before editing — this tool will fail otherwise.
|
|
15
|
+
- \`path\` (or \`notebook_path\`) is the notebook, absolute or relative to the working directory.
|
|
16
|
+
- \`cell_id\` is the cell's own \`id\` or, for a notebook whose cells have none, its position: \`cell-0\` is the first cell. It is required for \`replace\` and \`delete\`.
|
|
17
|
+
- \`edit_mode\` defaults to \`replace\`. Use \`insert\` to add a new cell after the cell with the given \`cell_id\` (or at the beginning of the notebook if \`cell_id\` is omitted) — \`cell_type\` is required when inserting. Use \`delete\` to remove the cell. Use \`append\` to add a cell at the end without naming one.
|
|
18
|
+
- Editing a code cell clears its outputs.`;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* notebook extension — Claude Code's NotebookEdit, deferred behind tool_search
|
|
2
|
+
* notebook extension — Claude Code's NotebookEdit (its text: description.ts), deferred behind tool_search
|
|
3
3
|
* (most sessions never touch a notebook, so its schema stays out of the prompt
|
|
4
4
|
* until needed).
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { randomUUID } from "node:crypto";
|
|
8
8
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
9
|
-
import { isAbsolute, resolve } from "node:path";
|
|
10
9
|
import { StringEnum } from "@earendil-works/pi-ai";
|
|
11
10
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
12
11
|
import { Type } from "typebox";
|
|
13
12
|
import { DEFER_CHANNEL } from "../lib/deferred.ts";
|
|
14
13
|
import { ccToolRenderers } from "../lib/tui-render.ts";
|
|
15
14
|
import { applyEdit, type EditMode, type Notebook, notebookErrorHint, parseNotebook } from "./notebook.ts";
|
|
15
|
+
import { resolveToolPath } from "../lib/tool-path.ts";
|
|
16
|
+
import { NOTEBOOK_EDIT_DESCRIPTION } from "./description.ts";
|
|
16
17
|
|
|
17
18
|
export default function notebookExtension(pi: ExtensionAPI) {
|
|
18
19
|
pi.registerTool({
|
|
19
20
|
name: "notebook_edit",
|
|
20
21
|
label: "Notebook Edit",
|
|
21
22
|
...ccToolRenderers("Notebook Edit"),
|
|
22
|
-
description:
|
|
23
|
-
"Edit a Jupyter notebook (.ipynb): replace a cell's source, insert or append a new cell, or delete a cell. Read the notebook first — like the other file tools, this one refuses to edit a file you have not read. Cells are addressed by their `id` or, for a notebook whose cells have none, by position — `cell-0` is the first cell. Use edit_mode `append` to add a cell at the end without naming one. Editing a code cell clears its outputs.",
|
|
23
|
+
description: NOTEBOOK_EDIT_DESCRIPTION,
|
|
24
24
|
parameters: Type.Object({
|
|
25
25
|
path: Type.Optional(Type.String({ description: "Absolute or workspace-relative path to the .ipynb file" })),
|
|
26
26
|
// Claude Code's NotebookEdit spells the path `notebook_path` and defaults
|
|
@@ -52,7 +52,8 @@ export default function notebookExtension(pi: ExtensionAPI) {
|
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
54
|
const editMode = (params.edit_mode ?? "replace") as EditMode;
|
|
55
|
-
|
|
55
|
+
// The file tracker guards this path with the same resolution (lib/tool-path.ts).
|
|
56
|
+
const path = resolveToolPath(rawPath, ctx.cwd);
|
|
56
57
|
// Held outside the try so a failure raised AFTER the parse can name the
|
|
57
58
|
// ids the notebook actually has — a bare "cell_id is required" left both
|
|
58
59
|
// weak tiers patching ids in by hand with bash (review M4).
|
|
@@ -93,7 +93,7 @@ export function findCellIndex(notebook: Notebook, cellId: string): number {
|
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
95
|
* The "fail loud, name the fix" error for an id that resolves to nothing
|
|
96
|
-
* (docs/decisions/tools.md): which ids exist, and the two ways to add a cell
|
|
96
|
+
* (working-docs/decisions/tools.md): which ids exist, and the two ways to add a cell
|
|
97
97
|
* without naming one.
|
|
98
98
|
*/
|
|
99
99
|
export function noSuchCellError(notebook: Notebook, cellId: string): Error {
|