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
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Facts about models that pi's catalog strips: release date and tool-calling
|
|
3
|
-
* support, from models.dev, bundled as `model-facts.generated.json` and refreshed
|
|
4
|
-
* with each pi bump (`scripts/gen-model-facts.mjs`). Pure: reads one
|
|
5
|
-
* JSON file lazily, no pi imports.
|
|
6
|
-
*
|
|
7
|
-
* Why release dates: the tier price floors are absolute dollars calibrated on US
|
|
8
|
-
* vendor prices, and nothing else in the classifier knew a model's generation,
|
|
9
|
-
* so on a ~10x-cheaper vendor a boundary-priced 2025 model (deepseek-r1-0528)
|
|
10
|
-
* beat a 2026 model priced below the floor (V4 Flash). A model's *generation* is
|
|
11
|
-
* measured against its vendor family's newest release, never against today, so
|
|
12
|
-
* a family that ships rarely is not aged by the calendar.
|
|
13
|
-
* docs/features/tiering/plan.md (Phase 1), docs/decisions/model-tiers.md.
|
|
14
|
-
*
|
|
15
|
-
* Lookups resolve OpenRouter's `~vendor/id` redirect aliases and `:variant`
|
|
16
|
-
* endpoints through their base id, and — since 2026-09-11 — BORROW across
|
|
17
|
-
* providers: models.dev has no `openai-codex` (or `azure-*`) provider entries,
|
|
18
|
-
* so `openai-codex/gpt-5.6-terra` had no facts while `openai/gpt-5.6-terra` did,
|
|
19
|
-
* which left every Codex row unscored by the measured floor and judged by name
|
|
20
|
-
* anchors alone. A row without its own facts takes the release date of the same
|
|
21
|
-
* model (same canonical vendor, same normalized id) on any other provider,
|
|
22
|
-
* provided every such row agrees on the date — a disagreement (OpenRouter's
|
|
23
|
-
* April `deepseek-v4-flash` vs DeepSeek's July one) borrows nothing. Only the
|
|
24
|
-
* date is borrowed, never the tool-call flag. A row models.dev does not know
|
|
25
|
-
* anywhere has no facts and gets the price-and-name behaviour that preceded
|
|
26
|
-
* this module. docs/decisions/model-tiers.md (2026-09-11).
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
import { readFileSync } from "node:fs";
|
|
30
|
-
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
31
|
-
import { baseModelId, DAY_MS, isAliasOrVariantId, modelIdentity } from "./model-policy.ts";
|
|
32
|
-
|
|
33
|
-
export interface ModelFactsRow {
|
|
34
|
-
/** ISO date (YYYY-MM-DD) the model was released, per models.dev. */
|
|
35
|
-
releaseDate: string;
|
|
36
|
-
/** Present only when models.dev marks the model as NOT supporting tool calls. */
|
|
37
|
-
toolCall?: false;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
interface FactsFile {
|
|
41
|
-
facts: Record<string, ModelFactsRow>;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** A model released this many days before its family's newest is one generation behind. */
|
|
45
|
-
export const PRIOR_GENERATION_DAYS = 365;
|
|
46
|
-
/** …and this many days behind is two generations: maximum scaffolding, never auto-selected. */
|
|
47
|
-
export const ANCIENT_GENERATION_DAYS = 730;
|
|
48
|
-
|
|
49
|
-
let loaded:
|
|
50
|
-
| {
|
|
51
|
-
facts: Record<string, ModelFactsRow>;
|
|
52
|
-
familyNewest: Map<string, number>;
|
|
53
|
-
/** `vendor|normalizedId` → the agreed release date, or null when providers disagree. */
|
|
54
|
-
borrowed: Map<string, ModelFactsRow | null>;
|
|
55
|
-
}
|
|
56
|
-
| undefined;
|
|
57
|
-
|
|
58
|
-
/** Test seam: replace the bundled table (pass `undefined` to restore it). */
|
|
59
|
-
export function setModelFactsForTest(facts: Record<string, ModelFactsRow> | undefined): void {
|
|
60
|
-
loaded = facts ? index(facts) : undefined;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function load(): NonNullable<typeof loaded> {
|
|
64
|
-
if (loaded) return loaded;
|
|
65
|
-
let facts: Record<string, ModelFactsRow> = {};
|
|
66
|
-
try {
|
|
67
|
-
const file = JSON.parse(readFileSync(new URL("./model-facts.generated.json", import.meta.url), "utf8")) as FactsFile;
|
|
68
|
-
if (file && typeof file.facts === "object") facts = file.facts;
|
|
69
|
-
} catch {
|
|
70
|
-
// A missing or unreadable table means "no facts": every row degrades to the
|
|
71
|
-
// pre-facts price-and-name behaviour rather than throwing inside selection.
|
|
72
|
-
}
|
|
73
|
-
loaded = index(facts);
|
|
74
|
-
return loaded;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* The vendor family a row's generation is judged within: the canonical vendor
|
|
79
|
-
* when the identity policy knows it (so `openrouter/deepseek/…` and the direct
|
|
80
|
-
* `deepseek` provider share one family), else the containment key.
|
|
81
|
-
*/
|
|
82
|
-
export function modelFamily(model: { provider: string; id: string }): string {
|
|
83
|
-
const identity = modelIdentity(model as Model<Api>);
|
|
84
|
-
return identity.profile ?? identity.containment;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function index(facts: Record<string, ModelFactsRow>) {
|
|
88
|
-
const familyNewest = new Map<string, number>();
|
|
89
|
-
const borrowed = new Map<string, ModelFactsRow | null>();
|
|
90
|
-
for (const [key, row] of Object.entries(facts)) {
|
|
91
|
-
const slash = key.indexOf("/");
|
|
92
|
-
if (slash <= 0) continue;
|
|
93
|
-
const model = { provider: key.slice(0, slash), id: key.slice(slash + 1) };
|
|
94
|
-
// Variants and redirect aliases carry no generation of their own.
|
|
95
|
-
if (isAliasOrVariantId(model.id)) continue;
|
|
96
|
-
const t = Date.parse(row.releaseDate);
|
|
97
|
-
if (Number.isNaN(t)) continue;
|
|
98
|
-
const family = modelFamily(model);
|
|
99
|
-
if (t > (familyNewest.get(family) ?? -Infinity)) familyNewest.set(family, t);
|
|
100
|
-
const lend = borrowKey(model);
|
|
101
|
-
if (!lend) continue;
|
|
102
|
-
const prior = borrowed.get(lend);
|
|
103
|
-
if (prior === undefined) borrowed.set(lend, { releaseDate: row.releaseDate });
|
|
104
|
-
else if (prior !== null && prior.releaseDate !== row.releaseDate) borrowed.set(lend, null);
|
|
105
|
-
}
|
|
106
|
-
return { facts, familyNewest, borrowed };
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** The cross-provider identity a row may lend its release date under, or undefined for an unverifiable one. */
|
|
110
|
-
function borrowKey(model: { provider: string; id: string }): string | undefined {
|
|
111
|
-
const identity = modelIdentity(model as Model<Api>);
|
|
112
|
-
if (identity.confidence === "opaque" || !identity.profile) return undefined;
|
|
113
|
-
return `${identity.profile}|${baseModelId(identity.normalizedId)}`;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* The models.dev row for a model, resolved through alias and variant spellings,
|
|
118
|
-
* else borrowed from the same model on another provider (module doc).
|
|
119
|
-
*/
|
|
120
|
-
export function modelFacts(model: { provider: string; id: string }): ModelFactsRow | undefined {
|
|
121
|
-
const { facts, borrowed } = load();
|
|
122
|
-
const own = facts[`${model.provider}/${model.id}`] ?? facts[`${model.provider}/${baseModelId(model.id)}`];
|
|
123
|
-
if (own) return own;
|
|
124
|
-
const key = borrowKey(model);
|
|
125
|
-
return (key && borrowed.get(key)) || undefined;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/** Whether models.dev says the model cannot call tools (undefined = unknown or yes). */
|
|
129
|
-
export function lacksToolCalls(model: { provider: string; id: string }): boolean {
|
|
130
|
-
return modelFacts(model)?.toolCall === false;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* How many days behind its family's newest release the model is, or undefined
|
|
135
|
-
* when either date is unknown. 0 for the newest model itself.
|
|
136
|
-
*/
|
|
137
|
-
export function generationLagDays(model: { provider: string; id: string }): number | undefined {
|
|
138
|
-
const row = modelFacts(model);
|
|
139
|
-
if (!row) return undefined;
|
|
140
|
-
const released = Date.parse(row.releaseDate);
|
|
141
|
-
if (Number.isNaN(released)) return undefined;
|
|
142
|
-
const newest = load().familyNewest.get(modelFamily(model));
|
|
143
|
-
if (newest === undefined) return undefined;
|
|
144
|
-
return Math.max(0, Math.round((newest - released) / DAY_MS));
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export type Generation = "current" | "prior" | "ancient";
|
|
148
|
-
|
|
149
|
-
/** The model's generation relative to its family, or undefined without facts. */
|
|
150
|
-
export function modelGeneration(model: { provider: string; id: string }): Generation | undefined {
|
|
151
|
-
const lag = generationLagDays(model);
|
|
152
|
-
if (lag === undefined) return undefined;
|
|
153
|
-
if (lag > ANCIENT_GENERATION_DAYS) return "ancient";
|
|
154
|
-
if (lag > PRIOR_GENERATION_DAYS) return "prior";
|
|
155
|
-
return "current";
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/** Prior or ancient: excluded from every automatic pick (subagent, classifier, reader, presets). */
|
|
159
|
-
export function isPriorGeneration(model: { provider: string; id: string }): boolean {
|
|
160
|
-
const generation = modelGeneration(model);
|
|
161
|
-
return generation === "prior" || generation === "ancient";
|
|
162
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What to tell the model when the deferred-tool set changes (pure).
|
|
3
|
-
*
|
|
4
|
-
* The deferred-tools listing is a `first-prepend` reminder on message 1, so it
|
|
5
|
-
* is part of the cached prefix of every later request. Before the first request
|
|
6
|
-
* nothing is cached and the listing can be rewritten freely; after it, any
|
|
7
|
-
* rewrite re-caches the whole conversation (measured 2026-09-04: 16.7k tokens
|
|
8
|
-
* re-written on request 2 of a run whose MCP tools registered inside the
|
|
9
|
-
* announce debounce). So once a request has gone out the listing is FROZEN and
|
|
10
|
-
* later arrivals ride a one-shot addendum where the model reads next. Names that
|
|
11
|
-
* disappear are not announced: the frozen listing keeps them and `tool_search`
|
|
12
|
-
* reports "not found" if the model asks for one.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
export type AnnouncementPlan =
|
|
16
|
-
| { kind: "none" }
|
|
17
|
-
/** Nothing is cached yet: (re)write the standing listing with every name. */
|
|
18
|
-
| { kind: "rewrite"; names: string[] }
|
|
19
|
-
/** Message 1 is frozen: announce only the new names as a one-shot. */
|
|
20
|
-
| { kind: "addendum"; added: string[] };
|
|
21
|
-
|
|
22
|
-
export function planAnnouncement(input: {
|
|
23
|
-
requestSent: boolean;
|
|
24
|
-
announced: ReadonlySet<string>;
|
|
25
|
-
available: readonly string[];
|
|
26
|
-
}): AnnouncementPlan {
|
|
27
|
-
if (!input.requestSent) {
|
|
28
|
-
return input.available.length === 0 ? { kind: "none" } : { kind: "rewrite", names: [...input.available] };
|
|
29
|
-
}
|
|
30
|
-
const added = input.available.filter((name) => !input.announced.has(name));
|
|
31
|
-
return added.length === 0 ? { kind: "none" } : { kind: "addendum", added };
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Bring the announced set in line with what the plan told the model. */
|
|
35
|
-
export function applyAnnouncement(announced: Set<string>, plan: AnnouncementPlan): void {
|
|
36
|
-
if (plan.kind === "rewrite") {
|
|
37
|
-
announced.clear();
|
|
38
|
-
for (const name of plan.names) announced.add(name);
|
|
39
|
-
} else if (plan.kind === "addendum") {
|
|
40
|
-
for (const name of plan.added) announced.add(name);
|
|
41
|
-
}
|
|
42
|
-
}
|