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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* using Codex with a ChatGPT account"). The auto-mode classifier already learns
|
|
8
8
|
* that on its first call and steps to the next candidate (`ClassifierState.
|
|
9
9
|
* rejected`). Since subagents share the classifier's selection floor
|
|
10
|
-
* (docs/decisions/model-policy.md, 2026-09-11) they land on the same first
|
|
10
|
+
* (working-docs/decisions/model-policy.md, 2026-09-11) they land on the same first
|
|
11
11
|
* pick — so what one role learns must reach the other, or every session's
|
|
12
12
|
* first subagent fails on a model the classifier already gave up on.
|
|
13
13
|
*
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** Same-line upgrades at a comparable blended price. Selection only; never switches a model. */
|
|
2
|
+
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
3
|
+
import { catalogModelFor } from "./model-catalog.ts";
|
|
4
|
+
import { baseModelId, isAliasOrVariantId, isExperimentalBuild, isMovingAlias, modelSpec, stripSnapshotDate } from "./model-policy.ts";
|
|
5
|
+
|
|
6
|
+
interface ModelLine {
|
|
7
|
+
line: string;
|
|
8
|
+
version: number[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Mask the first version, not dates, size tags, or digits in a gateway's author name. */
|
|
12
|
+
export function modelLine(id: string): ModelLine | undefined {
|
|
13
|
+
const base = stripSnapshotDate(baseModelId(id).toLowerCase().replace(/-20\d{2}-\d{2}-\d{2}$/, ""));
|
|
14
|
+
const slash = base.lastIndexOf("/");
|
|
15
|
+
const name = base.slice(slash + 1);
|
|
16
|
+
// Claude spells minor versions with hyphens on its direct provider, but
|
|
17
|
+
// dots on gateways. Keep size/class suffixes for every other model line.
|
|
18
|
+
const claude = name.match(/^claude-(?:opus|sonnet|haiku|fable)-(\d+(?:[-.]\d{1,2})?)/);
|
|
19
|
+
const match = claude ? /\d+(?:[-.]\d{1,2})?/.exec(claude[0]) : /\d+(?:\.\d+)*/.exec(name);
|
|
20
|
+
if (!match || match.index === undefined) return undefined;
|
|
21
|
+
// Four-digit date/version stamps (Mistral's 2407/2512, for example) do
|
|
22
|
+
// not prove a version upgrade. Leave ambiguous calendar names unpaired.
|
|
23
|
+
if (match[0].split(/[.-]/)[0].length >= 4) return undefined;
|
|
24
|
+
const end = match.index + match[0].length;
|
|
25
|
+
if (/^[bm](?:-|$)/.test(name.slice(end))) return undefined;
|
|
26
|
+
return {
|
|
27
|
+
line: `${base.slice(0, slash + 1)}${name.slice(0, match.index)}#${name.slice(end)}`,
|
|
28
|
+
version: match[0].split(/[.-]/).map(Number),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function compareVersion(a: number[], b: number[]): number {
|
|
33
|
+
for (let i = 0; i < Math.max(a.length, b.length); i++) {
|
|
34
|
+
const difference = (a[i] ?? 0) - (b[i] ?? 0);
|
|
35
|
+
if (difference) return difference;
|
|
36
|
+
}
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Catalog zeroes are unpriced sentinels, not a promise of free tokens. */
|
|
41
|
+
function blendedPrice(model: Model<Api>): number | undefined {
|
|
42
|
+
const input = model.cost?.input;
|
|
43
|
+
const output = model.cost?.output;
|
|
44
|
+
if (!Number.isFinite(input) || !Number.isFinite(output) || !(input > 0) || !(output > 0)) return undefined;
|
|
45
|
+
const blend = (3 * input + output) / 4;
|
|
46
|
+
return Number.isFinite(blend) ? blend : undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface NewerModelSuggestion {
|
|
50
|
+
model: Model<Api>;
|
|
51
|
+
text: string;
|
|
52
|
+
fix: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Available models only, on the session's provider and exact model line,
|
|
57
|
+
* dated by the model catalogs (`model-catalog.ts`); this path never fetches.
|
|
58
|
+
* Unlike secondary-model selection, tiny tiers are allowed: Qwen 27B upgrading
|
|
59
|
+
* within its own line is useful advice, not an automatic delegation decision.
|
|
60
|
+
*/
|
|
61
|
+
export function newerModelSuggestion(
|
|
62
|
+
available: readonly Model<Api>[],
|
|
63
|
+
current: Model<Api> | undefined,
|
|
64
|
+
): NewerModelSuggestion | undefined {
|
|
65
|
+
if (!current) return undefined;
|
|
66
|
+
const currentLine = modelLine(current.id);
|
|
67
|
+
const currentDate = catalogModelFor(current)?.released;
|
|
68
|
+
const currentPrice = blendedPrice(current);
|
|
69
|
+
if (!currentLine || currentDate === undefined || currentPrice === undefined) return undefined;
|
|
70
|
+
const candidates = [];
|
|
71
|
+
for (const model of available) {
|
|
72
|
+
if (model.provider !== current.provider || isAliasOrVariantId(model.id)) continue;
|
|
73
|
+
// Experimental endpoints and moving "latest" aliases have no stable
|
|
74
|
+
// upgrade identity, even when their catalog row includes a release date.
|
|
75
|
+
if (isExperimentalBuild(model.id) || isMovingAlias(model.id)) continue;
|
|
76
|
+
const line = modelLine(model.id);
|
|
77
|
+
if (!line || line.line !== currentLine.line || compareVersion(line.version, currentLine.version) <= 0) continue;
|
|
78
|
+
const entry = catalogModelFor(model);
|
|
79
|
+
const date = entry?.released;
|
|
80
|
+
const price = blendedPrice(model);
|
|
81
|
+
if (!entry || date === undefined || date <= currentDate || price === undefined || price > currentPrice * 1.1) continue;
|
|
82
|
+
if (!entry.tools || entry.legacy || entry.deprecated) continue;
|
|
83
|
+
candidates.push({ model, version: line.version, date, price });
|
|
84
|
+
}
|
|
85
|
+
candidates.sort((a, b) => compareVersion(b.version, a.version) || b.date - a.date || a.price - b.price);
|
|
86
|
+
const pick = candidates[0];
|
|
87
|
+
if (!pick) return undefined;
|
|
88
|
+
const pricePair = (model: Model<Api>) => `$${formatPrice(model.cost.input)}/$${formatPrice(model.cost.output)}`;
|
|
89
|
+
const comparison = pick.price < currentPrice * 0.9 ? "costs less" : "costs about the same";
|
|
90
|
+
return {
|
|
91
|
+
model: pick.model,
|
|
92
|
+
text: `${pick.model.id} is newer than ${current.id} and ${comparison} (${pricePair(pick.model)} vs ${pricePair(current)} per M tokens).`,
|
|
93
|
+
fix: `Switch with /model ${modelSpec(pick.model)}.`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** At least cents, without rounding low per-token catalog prices to zero. */
|
|
98
|
+
function formatPrice(price: number): string {
|
|
99
|
+
return String(price).includes("e") ? String(price) : price.toFixed(Math.max(2, (String(price).split(".")[1] ?? "").length));
|
|
100
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle notices from several extensions, shown as one info line.
|
|
3
|
+
*
|
|
4
|
+
* pi folds back-to-back info notices into a single status line, and every
|
|
5
|
+
* status line renders the latest status text (findings §63). On session_start
|
|
6
|
+
* and model_select several extensions announce something, so each info notice
|
|
7
|
+
* overwrote the one before it. Those extensions call `queueNotice` instead of
|
|
8
|
+
* `ctx.ui.notify`; one owner per event bus collects the notices until the
|
|
9
|
+
* event's handlers have run (pi awaits each handler in turn, so one microtask
|
|
10
|
+
* is not enough: the batch closes on the next macrotask), then shows the
|
|
11
|
+
* warnings and errors first, each on its own, and ONE info notice joining the
|
|
12
|
+
* info texts with newlines.
|
|
13
|
+
*
|
|
14
|
+
* The owner is elected the way `session-model-tier.ts` elects its own: no
|
|
15
|
+
* module state is shared between extensions (each has its own jiti copy), so
|
|
16
|
+
* the first caller on a bus installs the listener and every later caller finds
|
|
17
|
+
* it there. Without a UI the notice goes straight to `ctx.ui.notify`, exactly
|
|
18
|
+
* as before (a no-op in print and json mode).
|
|
19
|
+
*
|
|
20
|
+
* Only lifecycle notices go through here. Command output and a warning or
|
|
21
|
+
* error an extension shows on its own stay direct `ctx.ui.notify` calls.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import type { EventBus, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
25
|
+
|
|
26
|
+
export const NOTICE_CHANNEL = "one-code:notice";
|
|
27
|
+
|
|
28
|
+
export type NoticeLevel = "info" | "warning" | "error";
|
|
29
|
+
|
|
30
|
+
type NoticeCtx = Pick<ExtensionContext, "hasUI" | "ui">;
|
|
31
|
+
|
|
32
|
+
interface NoticeMessage {
|
|
33
|
+
ctx: NoticeCtx;
|
|
34
|
+
level: NoticeLevel;
|
|
35
|
+
text: string;
|
|
36
|
+
/** Set by the owner when it took the notice. */
|
|
37
|
+
taken?: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Queue a lifecycle notice for the bus's owner, installing the owner if this bus has none. */
|
|
41
|
+
export function queueNotice(events: Pick<EventBus, "emit" | "on">, ctx: NoticeCtx, level: NoticeLevel, text: string): void {
|
|
42
|
+
if (!ctx.hasUI) {
|
|
43
|
+
ctx.ui.notify(text, level);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const message: NoticeMessage = { ctx, level, text };
|
|
47
|
+
events.emit(NOTICE_CHANNEL, message);
|
|
48
|
+
if (message.taken) return;
|
|
49
|
+
installNoticeOwner(events);
|
|
50
|
+
events.emit(NOTICE_CHANNEL, message);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function installNoticeOwner(events: Pick<EventBus, "on">): void {
|
|
54
|
+
let pending: NoticeMessage[] = [];
|
|
55
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
56
|
+
const flush = () => {
|
|
57
|
+
timer = undefined;
|
|
58
|
+
const batch = pending;
|
|
59
|
+
pending = [];
|
|
60
|
+
showNotices(batch);
|
|
61
|
+
};
|
|
62
|
+
events.on(NOTICE_CHANNEL, (data) => {
|
|
63
|
+
const message = data as NoticeMessage;
|
|
64
|
+
if (message.taken) return;
|
|
65
|
+
message.taken = true;
|
|
66
|
+
pending.push(message);
|
|
67
|
+
timer ??= setTimeout(flush, 0);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Warnings and errors first, each on its own, then one info notice joining the rest. */
|
|
72
|
+
export function showNotices(batch: readonly NoticeMessage[]): void {
|
|
73
|
+
for (const notice of batch) {
|
|
74
|
+
if (notice.level !== "info") notifySafely(notice.ctx, notice.text, notice.level);
|
|
75
|
+
}
|
|
76
|
+
const info = batch.filter((notice) => notice.level === "info");
|
|
77
|
+
if (info.length > 0) notifySafely(info[info.length - 1].ctx, info.map((notice) => notice.text).join("\n"), "info");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** A session replaced before the batch closed leaves a stale ctx: the notice has nowhere to go. */
|
|
81
|
+
function notifySafely(ctx: NoticeCtx, text: string, level: NoticeLevel): void {
|
|
82
|
+
try {
|
|
83
|
+
ctx.ui.notify(text, level);
|
|
84
|
+
} catch {
|
|
85
|
+
// Stale session: drop it.
|
|
86
|
+
}
|
|
87
|
+
}
|