@retaw106/mmc-oc 0.0.0-stage → 1.2.2
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/dist/agents/historian.d.ts +4 -0
- package/dist/agents/historian.d.ts.map +1 -0
- package/dist/agents/language-directive.d.ts +26 -0
- package/dist/agents/language-directive.d.ts.map +1 -0
- package/dist/agents/magic-context-prompt.d.ts +5 -0
- package/dist/agents/magic-context-prompt.d.ts.map +1 -0
- package/dist/agents/memory-maintainer.d.ts +96 -0
- package/dist/agents/memory-maintainer.d.ts.map +1 -0
- package/dist/config/agent-disable.d.ts +29 -0
- package/dist/config/agent-disable.d.ts.map +1 -0
- package/dist/config/config-paths.d.ts +7 -0
- package/dist/config/config-paths.d.ts.map +1 -0
- package/dist/config/index.d.ts +69 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/live-run-config.d.ts +11 -0
- package/dist/config/live-run-config.d.ts.map +1 -0
- package/dist/config/live-snapshot.d.ts +32 -0
- package/dist/config/live-snapshot.d.ts.map +1 -0
- package/dist/config/migrate-experimental.d.ts +26 -0
- package/dist/config/migrate-experimental.d.ts.map +1 -0
- package/dist/config/profiles.d.ts +22 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/project-security.d.ts +124 -0
- package/dist/config/project-security.d.ts.map +1 -0
- package/dist/config/prune-config-leaf.d.ts +26 -0
- package/dist/config/prune-config-leaf.d.ts.map +1 -0
- package/dist/config/raw-loader.d.ts +42 -0
- package/dist/config/raw-loader.d.ts.map +1 -0
- package/dist/config/removed-agent-config.d.ts +8 -0
- package/dist/config/removed-agent-config.d.ts.map +1 -0
- package/dist/config/schema/agent-overrides.d.ts +52 -0
- package/dist/config/schema/agent-overrides.d.ts.map +1 -0
- package/dist/config/schema/magic-context.d.ts +805 -0
- package/dist/config/schema/magic-context.d.ts.map +1 -0
- package/dist/config/variable.d.ts +48 -0
- package/dist/config/variable.d.ts.map +1 -0
- package/dist/context-a6px04s0.js +23932 -0
- package/dist/derive-budgets-fhk00zv8.js +18 -0
- package/dist/features/magic-context/compaction-marker.d.ts +211 -0
- package/dist/features/magic-context/compaction-marker.d.ts.map +1 -0
- package/dist/features/magic-context/compaction.d.ts +7 -0
- package/dist/features/magic-context/compaction.d.ts.map +1 -0
- package/dist/features/magic-context/compartment-events.d.ts +50 -0
- package/dist/features/magic-context/compartment-events.d.ts.map +1 -0
- package/dist/features/magic-context/compartment-lease.d.ts +28 -0
- package/dist/features/magic-context/compartment-lease.d.ts.map +1 -0
- package/dist/features/magic-context/compartment-storage.d.ts +178 -0
- package/dist/features/magic-context/compartment-storage.d.ts.map +1 -0
- package/dist/features/magic-context/compression-depth-storage.d.ts +14 -0
- package/dist/features/magic-context/compression-depth-storage.d.ts.map +1 -0
- package/dist/features/magic-context/context-authority.d.ts +15 -0
- package/dist/features/magic-context/context-authority.d.ts.map +1 -0
- package/dist/features/magic-context/fail-closed-block.d.ts +117 -0
- package/dist/features/magic-context/fail-closed-block.d.ts.map +1 -0
- package/dist/features/magic-context/index.d.ts +10 -0
- package/dist/features/magic-context/index.d.ts.map +1 -0
- package/dist/features/magic-context/literal-probes.d.ts +24 -0
- package/dist/features/magic-context/literal-probes.d.ts.map +1 -0
- package/dist/features/magic-context/lkg-prefix-chunks.d.ts +53 -0
- package/dist/features/magic-context/lkg-prefix-chunks.d.ts.map +1 -0
- package/dist/features/magic-context/memory/constants.d.ts +16 -0
- package/dist/features/magic-context/memory/constants.d.ts.map +1 -0
- package/dist/features/magic-context/memory/index.d.ts +11 -0
- package/dist/features/magic-context/memory/index.d.ts.map +1 -0
- package/dist/features/magic-context/memory/memory-diagnostics.d.ts +6 -0
- package/dist/features/magic-context/memory/memory-diagnostics.d.ts.map +1 -0
- package/dist/features/magic-context/memory/memory-selection.d.ts +12 -0
- package/dist/features/magic-context/memory/memory-selection.d.ts.map +1 -0
- package/dist/features/magic-context/memory/memory-visibility.d.ts +46 -0
- package/dist/features/magic-context/memory/memory-visibility.d.ts.map +1 -0
- package/dist/features/magic-context/memory/normalize-hash.d.ts +3 -0
- package/dist/features/magic-context/memory/normalize-hash.d.ts.map +1 -0
- package/dist/features/magic-context/memory/project-identity-cache.d.ts +7 -0
- package/dist/features/magic-context/memory/project-identity-cache.d.ts.map +1 -0
- package/dist/features/magic-context/memory/project-identity.d.ts +97 -0
- package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -0
- package/dist/features/magic-context/memory/promotion.d.ts +26 -0
- package/dist/features/magic-context/memory/promotion.d.ts.map +1 -0
- package/dist/features/magic-context/memory/relocate-memory.d.ts +58 -0
- package/dist/features/magic-context/memory/relocate-memory.d.ts.map +1 -0
- package/dist/features/magic-context/memory/storage-memory-fts.d.ts +11 -0
- package/dist/features/magic-context/memory/storage-memory-fts.d.ts.map +1 -0
- package/dist/features/magic-context/memory/storage-memory-verifications.d.ts +35 -0
- package/dist/features/magic-context/memory/storage-memory-verifications.d.ts.map +1 -0
- package/dist/features/magic-context/memory/storage-memory.d.ts +89 -0
- package/dist/features/magic-context/memory/storage-memory.d.ts.map +1 -0
- package/dist/features/magic-context/memory/types.d.ts +59 -0
- package/dist/features/magic-context/memory/types.d.ts.map +1 -0
- package/dist/features/magic-context/memory/verification-paths.d.ts +48 -0
- package/dist/features/magic-context/memory/verification-paths.d.ts.map +1 -0
- package/dist/features/magic-context/memory/visibility.d.ts +6 -0
- package/dist/features/magic-context/memory/visibility.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/apply.d.ts +65 -0
- package/dist/features/magic-context/memory-maintainer/apply.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/budget.d.ts +75 -0
- package/dist/features/magic-context/memory-maintainer/budget.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/coverage.d.ts +91 -0
- package/dist/features/magic-context/memory-maintainer/coverage.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/dream-state.d.ts +18 -0
- package/dist/features/magic-context/memory-maintainer/dream-state.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/launcher.d.ts +119 -0
- package/dist/features/magic-context/memory-maintainer/launcher.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/lease.d.ts +56 -0
- package/dist/features/magic-context/memory-maintainer/lease.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/manifest.d.ts +127 -0
- package/dist/features/magic-context/memory-maintainer/manifest.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/manual-commands.d.ts +46 -0
- package/dist/features/magic-context/memory-maintainer/manual-commands.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/oc2-adapter.d.ts +79 -0
- package/dist/features/magic-context/memory-maintainer/oc2-adapter.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/pause-report.d.ts +37 -0
- package/dist/features/magic-context/memory-maintainer/pause-report.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/pipeline.d.ts +199 -0
- package/dist/features/magic-context/memory-maintainer/pipeline.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/provider-output-failure.d.ts +15 -0
- package/dist/features/magic-context/memory-maintainer/provider-output-failure.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/schedule-storage.d.ts +76 -0
- package/dist/features/magic-context/memory-maintainer/schedule-storage.d.ts.map +1 -0
- package/dist/features/magic-context/memory-maintainer/schedule.d.ts +90 -0
- package/dist/features/magic-context/memory-maintainer/schedule.d.ts.map +1 -0
- package/dist/features/magic-context/merged-reasoning-decisions.d.ts +6 -0
- package/dist/features/magic-context/merged-reasoning-decisions.d.ts.map +1 -0
- package/dist/features/magic-context/message-fts-rowid-map.d.ts +50 -0
- package/dist/features/magic-context/message-fts-rowid-map.d.ts.map +1 -0
- package/dist/features/magic-context/message-fts-session-filter.d.ts +14 -0
- package/dist/features/magic-context/message-fts-session-filter.d.ts.map +1 -0
- package/dist/features/magic-context/message-index-async.d.ts +33 -0
- package/dist/features/magic-context/message-index-async.d.ts.map +1 -0
- package/dist/features/magic-context/message-index-sweep.d.ts +11 -0
- package/dist/features/magic-context/message-index-sweep.d.ts.map +1 -0
- package/dist/features/magic-context/message-index.d.ts +88 -0
- package/dist/features/magic-context/message-index.d.ts.map +1 -0
- package/dist/features/magic-context/message-time-backfill.d.ts +19 -0
- package/dist/features/magic-context/message-time-backfill.d.ts.map +1 -0
- package/dist/features/magic-context/migration-v2-write-split.d.ts +62 -0
- package/dist/features/magic-context/migration-v2-write-split.d.ts.map +1 -0
- package/dist/features/magic-context/migrations.d.ts +73 -0
- package/dist/features/magic-context/migrations.d.ts.map +1 -0
- package/dist/features/magic-context/mock-database.d.ts +3 -0
- package/dist/features/magic-context/mock-database.d.ts.map +1 -0
- package/dist/features/magic-context/mural/storage-mural-cues.d.ts +65 -0
- package/dist/features/magic-context/mural/storage-mural-cues.d.ts.map +1 -0
- package/dist/features/magic-context/no-content-compartment.d.ts +12 -0
- package/dist/features/magic-context/no-content-compartment.d.ts.map +1 -0
- package/dist/features/magic-context/opencode2-relabel.d.ts +132 -0
- package/dist/features/magic-context/opencode2-relabel.d.ts.map +1 -0
- package/dist/features/magic-context/overflow-detection.d.ts +108 -0
- package/dist/features/magic-context/overflow-detection.d.ts.map +1 -0
- package/dist/features/magic-context/pi-content-decisions.d.ts +9 -0
- package/dist/features/magic-context/pi-content-decisions.d.ts.map +1 -0
- package/dist/features/magic-context/project-identity.d.ts +2 -0
- package/dist/features/magic-context/project-identity.d.ts.map +1 -0
- package/dist/features/magic-context/protection-window.d.ts +79 -0
- package/dist/features/magic-context/protection-window.d.ts.map +1 -0
- package/dist/features/magic-context/range-parser.d.ts +18 -0
- package/dist/features/magic-context/range-parser.d.ts.map +1 -0
- package/dist/features/magic-context/reclaim-protection.d.ts +13 -0
- package/dist/features/magic-context/reclaim-protection.d.ts.map +1 -0
- package/dist/features/magic-context/resolve-subagent-fallback.d.ts +42 -0
- package/dist/features/magic-context/resolve-subagent-fallback.d.ts.map +1 -0
- package/dist/features/magic-context/scheduler.d.ts +20 -0
- package/dist/features/magic-context/scheduler.d.ts.map +1 -0
- package/dist/features/magic-context/schema-fence-probe.d.ts +29 -0
- package/dist/features/magic-context/schema-fence-probe.d.ts.map +1 -0
- package/dist/features/magic-context/search.d.ts +118 -0
- package/dist/features/magic-context/search.d.ts.map +1 -0
- package/dist/features/magic-context/session-cache-ttl.d.ts +10 -0
- package/dist/features/magic-context/session-cache-ttl.d.ts.map +1 -0
- package/dist/features/magic-context/session-decision-calibration.d.ts +31 -0
- package/dist/features/magic-context/session-decision-calibration.d.ts.map +1 -0
- package/dist/features/magic-context/session-project-backfill.d.ts +37 -0
- package/dist/features/magic-context/session-project-backfill.d.ts.map +1 -0
- package/dist/features/magic-context/session-project-storage.d.ts +23 -0
- package/dist/features/magic-context/session-project-storage.d.ts.map +1 -0
- package/dist/features/magic-context/storage-caveman-rules.d.ts +21 -0
- package/dist/features/magic-context/storage-caveman-rules.d.ts.map +1 -0
- package/dist/features/magic-context/storage-clone.d.ts +44 -0
- package/dist/features/magic-context/storage-clone.d.ts.map +1 -0
- package/dist/features/magic-context/storage-db.d.ts +183 -0
- package/dist/features/magic-context/storage-db.d.ts.map +1 -0
- package/dist/features/magic-context/storage-historian-runs.d.ts +79 -0
- package/dist/features/magic-context/storage-historian-runs.d.ts.map +1 -0
- package/dist/features/magic-context/storage-identity-merge.d.ts +26 -0
- package/dist/features/magic-context/storage-identity-merge.d.ts.map +1 -0
- package/dist/features/magic-context/storage-identity-rekey-map.d.ts +11 -0
- package/dist/features/magic-context/storage-identity-rekey-map.d.ts.map +1 -0
- package/dist/features/magic-context/storage-m0-mutation-log.d.ts +22 -0
- package/dist/features/magic-context/storage-m0-mutation-log.d.ts.map +1 -0
- package/dist/features/magic-context/storage-memory-mutation-log.d.ts +29 -0
- package/dist/features/magic-context/storage-memory-mutation-log.d.ts.map +1 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts +623 -0
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -0
- package/dist/features/magic-context/storage-meta-session.d.ts +14 -0
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -0
- package/dist/features/magic-context/storage-meta-shared.d.ts +102 -0
- package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -0
- package/dist/features/magic-context/storage-meta.d.ts +4 -0
- package/dist/features/magic-context/storage-meta.d.ts.map +1 -0
- package/dist/features/magic-context/storage-native-replay.d.ts +29 -0
- package/dist/features/magic-context/storage-native-replay.d.ts.map +1 -0
- package/dist/features/magic-context/storage-notes.d.ts +80 -0
- package/dist/features/magic-context/storage-notes.d.ts.map +1 -0
- package/dist/features/magic-context/storage-ops.d.ts +14 -0
- package/dist/features/magic-context/storage-ops.d.ts.map +1 -0
- package/dist/features/magic-context/storage-primers.d.ts +96 -0
- package/dist/features/magic-context/storage-primers.d.ts.map +1 -0
- package/dist/features/magic-context/storage-project-state.d.ts +19 -0
- package/dist/features/magic-context/storage-project-state.d.ts.map +1 -0
- package/dist/features/magic-context/storage-reasoning-removal.d.ts +30 -0
- package/dist/features/magic-context/storage-reasoning-removal.d.ts.map +1 -0
- package/dist/features/magic-context/storage-replay-document.d.ts +72 -0
- package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -0
- package/dist/features/magic-context/storage-schema-helpers.d.ts +31 -0
- package/dist/features/magic-context/storage-schema-helpers.d.ts.map +1 -0
- package/dist/features/magic-context/storage-session-tables.d.ts +18 -0
- package/dist/features/magic-context/storage-session-tables.d.ts.map +1 -0
- package/dist/features/magic-context/storage-source.d.ts +5 -0
- package/dist/features/magic-context/storage-source.d.ts.map +1 -0
- package/dist/features/magic-context/storage-subagent-invocations.d.ts +62 -0
- package/dist/features/magic-context/storage-subagent-invocations.d.ts.map +1 -0
- package/dist/features/magic-context/storage-tags.d.ts +542 -0
- package/dist/features/magic-context/storage-tags.d.ts.map +1 -0
- package/dist/features/magic-context/storage-unavailable-reason.d.ts +17 -0
- package/dist/features/magic-context/storage-unavailable-reason.d.ts.map +1 -0
- package/dist/features/magic-context/storage-v22-backfill-failures.d.ts +26 -0
- package/dist/features/magic-context/storage-v22-backfill-failures.d.ts.map +1 -0
- package/dist/features/magic-context/storage.d.ts +23 -0
- package/dist/features/magic-context/storage.d.ts.map +1 -0
- package/dist/features/magic-context/store-generation-rebase.d.ts +188 -0
- package/dist/features/magic-context/store-generation-rebase.d.ts.map +1 -0
- package/dist/features/magic-context/subagent-token-capture.d.ts +35 -0
- package/dist/features/magic-context/subagent-token-capture.d.ts.map +1 -0
- package/dist/features/magic-context/tag-input.d.ts +4 -0
- package/dist/features/magic-context/tag-input.d.ts.map +1 -0
- package/dist/features/magic-context/tagger.d.ts +119 -0
- package/dist/features/magic-context/tagger.d.ts.map +1 -0
- package/dist/features/magic-context/tool-definition-tokens.d.ts +90 -0
- package/dist/features/magic-context/tool-definition-tokens.d.ts.map +1 -0
- package/dist/features/magic-context/tool-owner-backfill.d.ts +93 -0
- package/dist/features/magic-context/tool-owner-backfill.d.ts.map +1 -0
- package/dist/features/magic-context/transform-decision-log.d.ts +110 -0
- package/dist/features/magic-context/transform-decision-log.d.ts.map +1 -0
- package/dist/features/magic-context/types.d.ts +133 -0
- package/dist/features/magic-context/types.d.ts.map +1 -0
- package/dist/features/magic-context/window-report-ledger.d.ts +70 -0
- package/dist/features/magic-context/window-report-ledger.d.ts.map +1 -0
- package/dist/features/magic-context/work-metrics.d.ts +79 -0
- package/dist/features/magic-context/work-metrics.d.ts.map +1 -0
- package/dist/features/magic-context/workspaces.d.ts +28 -0
- package/dist/features/magic-context/workspaces.d.ts.map +1 -0
- package/dist/hooks/auto-update-checker/semver.d.ts +26 -0
- package/dist/hooks/auto-update-checker/semver.d.ts.map +1 -0
- package/dist/hooks/magic-context/apply-operations.d.ts +158 -0
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-deadline.d.ts +10 -0
- package/dist/hooks/magic-context/auto-search-deadline.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-hint.d.ts +36 -0
- package/dist/hooks/magic-context/auto-search-hint.d.ts.map +1 -0
- package/dist/hooks/magic-context/auto-search-runner.d.ts +60 -0
- package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -0
- package/dist/hooks/magic-context/cache-busting-signals.d.ts +42 -0
- package/dist/hooks/magic-context/cache-busting-signals.d.ts.map +1 -0
- package/dist/hooks/magic-context/caveman-cleanup.d.ts +98 -0
- package/dist/hooks/magic-context/caveman-cleanup.d.ts.map +1 -0
- package/dist/hooks/magic-context/caveman.d.ts +90 -0
- package/dist/hooks/magic-context/caveman.d.ts.map +1 -0
- package/dist/hooks/magic-context/channel2-cycle.d.ts +16 -0
- package/dist/hooks/magic-context/channel2-cycle.d.ts.map +1 -0
- package/dist/hooks/magic-context/channel2-delivery.d.ts +32 -0
- package/dist/hooks/magic-context/channel2-delivery.d.ts.map +1 -0
- package/dist/hooks/magic-context/child-session-spawn.d.ts +27 -0
- package/dist/hooks/magic-context/child-session-spawn.d.ts.map +1 -0
- package/dist/hooks/magic-context/compaction-marker-manager.d.ts +154 -0
- package/dist/hooks/magic-context/compaction-marker-manager.d.ts.map +1 -0
- package/dist/hooks/magic-context/compaction-off-transition.d.ts +97 -0
- package/dist/hooks/magic-context/compaction-off-transition.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-parser.d.ts +66 -0
- package/dist/hooks/magic-context/compartment-parser.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-prompt.d.ts +33 -0
- package/dist/hooks/magic-context/compartment-prompt.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-render-epoch.d.ts +27 -0
- package/dist/hooks/magic-context/compartment-render-epoch.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-drop-queue.d.ts +29 -0
- package/dist/hooks/magic-context/compartment-runner-drop-queue.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-historian.d.ts +43 -0
- package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts +31 -0
- package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-mapping.d.ts +25 -0
- package/dist/hooks/magic-context/compartment-runner-mapping.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-partial-recomp.d.ts +29 -0
- package/dist/hooks/magic-context/compartment-runner-partial-recomp.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-recomp.d.ts +11 -0
- package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-types.d.ts +295 -0
- package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner-validation.d.ts +83 -0
- package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-runner.d.ts +59 -0
- package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -0
- package/dist/hooks/magic-context/compartment-trigger.d.ts +77 -0
- package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -0
- package/dist/hooks/magic-context/ctx-reduce-availability.d.ts +170 -0
- package/dist/hooks/magic-context/ctx-reduce-availability.d.ts.map +1 -0
- package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts +104 -0
- package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts.map +1 -0
- package/dist/hooks/magic-context/decay-curve.d.ts +84 -0
- package/dist/hooks/magic-context/decay-curve.d.ts.map +1 -0
- package/dist/hooks/magic-context/decay-render.d.ts +80 -0
- package/dist/hooks/magic-context/decay-render.d.ts.map +1 -0
- package/dist/hooks/magic-context/decision-calibration.d.ts +24 -0
- package/dist/hooks/magic-context/decision-calibration.d.ts.map +1 -0
- package/dist/hooks/magic-context/degraded-pass-refusal.d.ts +35 -0
- package/dist/hooks/magic-context/degraded-pass-refusal.d.ts.map +1 -0
- package/dist/hooks/magic-context/derive-budgets.d.ts +60 -0
- package/dist/hooks/magic-context/derive-budgets.d.ts.map +1 -0
- package/dist/hooks/magic-context/drop-stale-reduce-calls.d.ts +39 -0
- package/dist/hooks/magic-context/drop-stale-reduce-calls.d.ts.map +1 -0
- package/dist/hooks/magic-context/dropped-input-guard.d.ts +55 -0
- package/dist/hooks/magic-context/dropped-input-guard.d.ts.map +1 -0
- package/dist/hooks/magic-context/dropped-token-estimate.d.ts +20 -0
- package/dist/hooks/magic-context/dropped-token-estimate.d.ts.map +1 -0
- package/dist/hooks/magic-context/edit-marker.d.ts +11 -0
- package/dist/hooks/magic-context/edit-marker.d.ts.map +1 -0
- package/dist/hooks/magic-context/emergency-drop.d.ts +112 -0
- package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -0
- package/dist/hooks/magic-context/emergency-fail-closed.d.ts +14 -0
- package/dist/hooks/magic-context/emergency-fail-closed.d.ts.map +1 -0
- package/dist/hooks/magic-context/empty-task-output.d.ts +16 -0
- package/dist/hooks/magic-context/empty-task-output.d.ts.map +1 -0
- package/dist/hooks/magic-context/event-payloads.d.ts +73 -0
- package/dist/hooks/magic-context/event-payloads.d.ts.map +1 -0
- package/dist/hooks/magic-context/event-resolvers.d.ts +114 -0
- package/dist/hooks/magic-context/event-resolvers.d.ts.map +1 -0
- package/dist/hooks/magic-context/execute-flush.d.ts +3 -0
- package/dist/hooks/magic-context/execute-flush.d.ts.map +1 -0
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts +56 -0
- package/dist/hooks/magic-context/final-wire-token-estimate.d.ts.map +1 -0
- package/dist/hooks/magic-context/fold-execution-gate.d.ts +2 -0
- package/dist/hooks/magic-context/fold-execution-gate.d.ts.map +1 -0
- package/dist/hooks/magic-context/format-bytes.d.ts +2 -0
- package/dist/hooks/magic-context/format-bytes.d.ts.map +1 -0
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts +48 -0
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-no-fire-cause.d.ts +5 -0
- package/dist/hooks/magic-context/historian-no-fire-cause.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-prompt-fit.d.ts +112 -0
- package/dist/hooks/magic-context/historian-prompt-fit.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-prompt.generated.d.ts +2 -0
- package/dist/hooks/magic-context/historian-prompt.generated.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-publish-stage-logger.d.ts +3 -0
- package/dist/hooks/magic-context/historian-publish-stage-logger.d.ts.map +1 -0
- package/dist/hooks/magic-context/historian-state-file.d.ts +43 -0
- package/dist/hooks/magic-context/historian-state-file.d.ts.map +1 -0
- package/dist/hooks/magic-context/history-boundary-repair.d.ts +44 -0
- package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -0
- package/dist/hooks/magic-context/hook-handlers.d.ts +177 -0
- package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -0
- package/dist/hooks/magic-context/host-served-rows.d.ts +58 -0
- package/dist/hooks/magic-context/host-served-rows.d.ts.map +1 -0
- package/dist/hooks/magic-context/image-token-estimate.d.ts +15 -0
- package/dist/hooks/magic-context/image-token-estimate.d.ts.map +1 -0
- package/dist/hooks/magic-context/inject-compartments.d.ts +389 -0
- package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -0
- package/dist/hooks/magic-context/issue-135-wire-fixtures.d.ts +8 -0
- package/dist/hooks/magic-context/issue-135-wire-fixtures.d.ts.map +1 -0
- package/dist/hooks/magic-context/issue-423-fixture.d.ts +37 -0
- package/dist/hooks/magic-context/issue-423-fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/issue-424-fixture.d.ts +11 -0
- package/dist/hooks/magic-context/issue-424-fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/legacy-compartments.d.ts +20 -0
- package/dist/hooks/magic-context/legacy-compartments.d.ts.map +1 -0
- package/dist/hooks/magic-context/live-session-state.d.ts +68 -0
- package/dist/hooks/magic-context/live-session-state.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-persist.d.ts +22 -0
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-replay.d.ts +71 -0
- package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -0
- package/dist/hooks/magic-context/lkg-slot.d.ts +119 -0
- package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -0
- package/dist/hooks/magic-context/m0-token-breakdown.d.ts +44 -0
- package/dist/hooks/magic-context/m0-token-breakdown.d.ts.map +1 -0
- package/dist/hooks/magic-context/maintenance-authority.d.ts +2 -0
- package/dist/hooks/magic-context/maintenance-authority.d.ts.map +1 -0
- package/dist/hooks/magic-context/openai-compat-adjacency.d.ts +38 -0
- package/dist/hooks/magic-context/openai-compat-adjacency.d.ts.map +1 -0
- package/dist/hooks/magic-context/opencode-v1-store-fixture.d.ts +12 -0
- package/dist/hooks/magic-context/opencode-v1-store-fixture.d.ts.map +1 -0
- package/dist/hooks/magic-context/pass-outcome.d.ts +70 -0
- package/dist/hooks/magic-context/pass-outcome.d.ts.map +1 -0
- package/dist/hooks/magic-context/persist-filtered-noise.d.ts +5 -0
- package/dist/hooks/magic-context/persist-filtered-noise.d.ts.map +1 -0
- package/dist/hooks/magic-context/postprocess-read-cache.d.ts +8 -0
- package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -0
- package/dist/hooks/magic-context/producer-window-guard.d.ts +63 -0
- package/dist/hooks/magic-context/producer-window-guard.d.ts.map +1 -0
- package/dist/hooks/magic-context/producer-window-test-support.d.ts +14 -0
- package/dist/hooks/magic-context/producer-window-test-support.d.ts.map +1 -0
- package/dist/hooks/magic-context/protected-tail-boundary.d.ts +234 -0
- package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -0
- package/dist/hooks/magic-context/raw-fallback-context-limit.d.ts +10 -0
- package/dist/hooks/magic-context/raw-fallback-context-limit.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts +271 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-db.d.ts +66 -0
- package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-formatting.d.ts +65 -0
- package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-raw.d.ts +164 -0
- package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -0
- package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts +82 -0
- package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -0
- package/dist/hooks/magic-context/reasoning-removal.d.ts +60 -0
- package/dist/hooks/magic-context/reasoning-removal.d.ts.map +1 -0
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts +93 -0
- package/dist/hooks/magic-context/recomp-orchestrator.d.ts.map +1 -0
- package/dist/hooks/magic-context/reference-retrieval.d.ts +72 -0
- package/dist/hooks/magic-context/reference-retrieval.d.ts.map +1 -0
- package/dist/hooks/magic-context/reference-seeds.generated.d.ts +8 -0
- package/dist/hooks/magic-context/reference-seeds.generated.d.ts.map +1 -0
- package/dist/hooks/magic-context/send-session-notification.d.ts +43 -0
- package/dist/hooks/magic-context/send-session-notification.d.ts.map +1 -0
- package/dist/hooks/magic-context/sentinel.d.ts +146 -0
- package/dist/hooks/magic-context/sentinel.d.ts.map +1 -0
- package/dist/hooks/magic-context/storage-busy-refusal.d.ts +20 -0
- package/dist/hooks/magic-context/storage-busy-refusal.d.ts.map +1 -0
- package/dist/hooks/magic-context/strip-content.d.ts +216 -0
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -0
- package/dist/hooks/magic-context/strip-structural-noise.d.ts +15 -0
- package/dist/hooks/magic-context/strip-structural-noise.d.ts.map +1 -0
- package/dist/hooks/magic-context/stripped-command.d.ts +56 -0
- package/dist/hooks/magic-context/stripped-command.d.ts.map +1 -0
- package/dist/hooks/magic-context/supersession-reclaim.d.ts +58 -0
- package/dist/hooks/magic-context/supersession-reclaim.d.ts.map +1 -0
- package/dist/hooks/magic-context/system-injection-stripper.d.ts +2 -0
- package/dist/hooks/magic-context/system-injection-stripper.d.ts.map +1 -0
- package/dist/hooks/magic-context/system-prompt-hash.d.ts +129 -0
- package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -0
- package/dist/hooks/magic-context/tag-content-primitives.d.ts +31 -0
- package/dist/hooks/magic-context/tag-content-primitives.d.ts.map +1 -0
- package/dist/hooks/magic-context/tag-id-fallback.d.ts +11 -0
- package/dist/hooks/magic-context/tag-id-fallback.d.ts.map +1 -0
- package/dist/hooks/magic-context/tag-messages.d.ts +145 -0
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -0
- package/dist/hooks/magic-context/tag-part-guards.d.ts +23 -0
- package/dist/hooks/magic-context/tag-part-guards.d.ts.map +1 -0
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts +178 -0
- package/dist/hooks/magic-context/tail-hygiene-walk.d.ts.map +1 -0
- package/dist/hooks/magic-context/temporal-awareness.d.ts +73 -0
- package/dist/hooks/magic-context/temporal-awareness.d.ts.map +1 -0
- package/dist/hooks/magic-context/text-complete.d.ts +31 -0
- package/dist/hooks/magic-context/text-complete.d.ts.map +1 -0
- package/dist/hooks/magic-context/todo-view.d.ts +127 -0
- package/dist/hooks/magic-context/todo-view.d.ts.map +1 -0
- package/dist/hooks/magic-context/tokenizer-calibration.d.ts +92 -0
- package/dist/hooks/magic-context/tokenizer-calibration.d.ts.map +1 -0
- package/dist/hooks/magic-context/tool-drop-target.d.ts +144 -0
- package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -0
- package/dist/hooks/magic-context/tool-input-size.d.ts +21 -0
- package/dist/hooks/magic-context/tool-input-size.d.ts.map +1 -0
- package/dist/hooks/magic-context/tool-reclaim.d.ts +12 -0
- package/dist/hooks/magic-context/tool-reclaim.d.ts.map +1 -0
- package/dist/hooks/magic-context/tool-sweep-policy.d.ts +50 -0
- package/dist/hooks/magic-context/tool-sweep-policy.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts +133 -0
- package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-context-state.d.ts +28 -0
- package/dist/hooks/magic-context/transform-context-state.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-message-helpers.d.ts +32 -0
- package/dist/hooks/magic-context/transform-message-helpers.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-operations.d.ts +5 -0
- package/dist/hooks/magic-context/transform-operations.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +350 -0
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform-stage-logger.d.ts +2 -0
- package/dist/hooks/magic-context/transform-stage-logger.d.ts.map +1 -0
- package/dist/hooks/magic-context/transform.d.ts +334 -0
- package/dist/hooks/magic-context/transform.d.ts.map +1 -0
- package/dist/hooks/magic-context/unmanaged-over-window.d.ts +36 -0
- package/dist/hooks/magic-context/unmanaged-over-window.d.ts.map +1 -0
- package/dist/hooks/magic-context/unresolved-history-boundary.d.ts +15 -0
- package/dist/hooks/magic-context/unresolved-history-boundary.d.ts.map +1 -0
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts +14 -0
- package/dist/hooks/magic-context/wrapup-orchestrator.d.ts.map +1 -0
- package/dist/index-1vs6anwz.js +126 -0
- package/dist/index-3wagyrnj.js +670 -0
- package/dist/index-53g38ggt.js +40 -0
- package/dist/index-5pg0acf7.js +410 -0
- package/dist/index-977gxfz0.js +514 -0
- package/dist/index-by6h2pav.js +27883 -0
- package/dist/index-e1q8002h.js +16 -0
- package/dist/index-fg34g6a5.js +584 -0
- package/dist/index-jdxxq8cz.js +99 -0
- package/dist/index-me3zcj5t.js +69 -0
- package/dist/index-qbkzdkk0.js +496 -0
- package/dist/index-wgt4gamw.js +6388 -0
- package/dist/index-zx63j2e2.js +907 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/message-time-backfill-5ewk0axe.js +116 -0
- package/dist/model-resolution-5haaxnpt.js +6 -0
- package/dist/plugin/boot-deadline.d.ts +47 -0
- package/dist/plugin/boot-deadline.d.ts.map +1 -0
- package/dist/plugin/boot-quiet.d.ts +12 -0
- package/dist/plugin/boot-quiet.d.ts.map +1 -0
- package/dist/plugin/normalize-tool-arg-schemas.d.ts +7 -0
- package/dist/plugin/normalize-tool-arg-schemas.d.ts.map +1 -0
- package/dist/plugin/rpc-handlers.d.ts +52 -0
- package/dist/plugin/rpc-handlers.d.ts.map +1 -0
- package/dist/plugin/sidebar-snapshot-cache.d.ts +19 -0
- package/dist/plugin/sidebar-snapshot-cache.d.ts.map +1 -0
- package/dist/plugin/subagent-tool-policy.d.ts +9 -0
- package/dist/plugin/subagent-tool-policy.d.ts.map +1 -0
- package/dist/plugin/types.d.ts +3 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/prompt-context-ffa5xcfx.js +76 -0
- package/dist/read-session-chunk-apjwrttc.js +56 -0
- package/dist/recomp-orchestrator-gyeevxaw.js +21 -0
- package/dist/rpc-notifications-4amf6mf4.js +14 -0
- package/dist/safe-notification-target-ph3xd1ve.js +9 -0
- package/dist/send-session-notification-y29y9fsr.js +18 -0
- package/dist/shared/announcement.d.ts +69 -0
- package/dist/shared/announcement.d.ts.map +1 -0
- package/dist/shared/assistant-message-extractor.d.ts +13 -0
- package/dist/shared/assistant-message-extractor.d.ts.map +1 -0
- package/dist/shared/auto-update-provenance.d.ts +9 -0
- package/dist/shared/auto-update-provenance.d.ts.map +1 -0
- package/dist/shared/bounded-session-map.d.ts +45 -0
- package/dist/shared/bounded-session-map.d.ts.map +1 -0
- package/dist/shared/builtin-commands.d.ts +24 -0
- package/dist/shared/builtin-commands.d.ts.map +1 -0
- package/dist/shared/cache-ttl-display.d.ts +25 -0
- package/dist/shared/cache-ttl-display.d.ts.map +1 -0
- package/dist/shared/cache-ttl-seed.d.ts +10 -0
- package/dist/shared/cache-ttl-seed.d.ts.map +1 -0
- package/dist/shared/child-session-teardown.d.ts +34 -0
- package/dist/shared/child-session-teardown.d.ts.map +1 -0
- package/dist/shared/commit-detection.d.ts +29 -0
- package/dist/shared/commit-detection.d.ts.map +1 -0
- package/dist/shared/config-diagnostics.d.ts +30 -0
- package/dist/shared/config-diagnostics.d.ts.map +1 -0
- package/dist/shared/conflict-detector.d.ts +139 -0
- package/dist/shared/conflict-detector.d.ts.map +1 -0
- package/dist/shared/conflict-fixer.d.ts +20 -0
- package/dist/shared/conflict-fixer.d.ts.map +1 -0
- package/dist/shared/context-limit-provenance.d.ts +3 -0
- package/dist/shared/context-limit-provenance.d.ts.map +1 -0
- package/dist/shared/data-path.d.ts +176 -0
- package/dist/shared/data-path.d.ts.map +1 -0
- package/dist/shared/error-message.d.ts +32 -0
- package/dist/shared/error-message.d.ts.map +1 -0
- package/dist/shared/escalation-bands.d.ts +9 -0
- package/dist/shared/escalation-bands.d.ts.map +1 -0
- package/dist/shared/format-bytes.d.ts +2 -0
- package/dist/shared/format-bytes.d.ts.map +1 -0
- package/dist/shared/format-threshold.d.ts +43 -0
- package/dist/shared/format-threshold.d.ts.map +1 -0
- package/dist/shared/harness-provider-map.d.ts +64 -0
- package/dist/shared/harness-provider-map.d.ts.map +1 -0
- package/dist/shared/harness.d.ts +55 -0
- package/dist/shared/harness.d.ts.map +1 -0
- package/dist/shared/hidden-variant-warnings.d.ts +5 -0
- package/dist/shared/hidden-variant-warnings.d.ts.map +1 -0
- package/dist/shared/historian-tool-expansions.d.ts +5 -0
- package/dist/shared/historian-tool-expansions.d.ts.map +1 -0
- package/dist/shared/historian-tool-template.d.ts +5 -0
- package/dist/shared/historian-tool-template.d.ts.map +1 -0
- package/dist/shared/historian-transient-error.d.ts +2 -0
- package/dist/shared/historian-transient-error.d.ts.map +1 -0
- package/dist/shared/host-limitations.d.ts +14 -0
- package/dist/shared/host-limitations.d.ts.map +1 -0
- package/dist/shared/index.d.ts +8 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/internal-initiator-marker.d.ts +2 -0
- package/dist/shared/internal-initiator-marker.d.ts.map +1 -0
- package/dist/shared/jsonc-edit.d.ts +23 -0
- package/dist/shared/jsonc-edit.d.ts.map +1 -0
- package/dist/shared/jsonc-parser.d.ts +30 -0
- package/dist/shared/jsonc-parser.d.ts.map +1 -0
- package/dist/shared/keep-subagents.d.ts +7 -0
- package/dist/shared/keep-subagents.d.ts.map +1 -0
- package/dist/shared/logger.d.ts +18 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/model-cache-ttl.d.ts +9 -0
- package/dist/shared/model-cache-ttl.d.ts.map +1 -0
- package/dist/shared/model-resolution.d.ts +35 -0
- package/dist/shared/model-resolution.d.ts.map +1 -0
- package/dist/shared/model-suggestion-retry.d.ts +138 -0
- package/dist/shared/model-suggestion-retry.d.ts.map +1 -0
- package/dist/shared/models-dev-cache.d.ts +156 -0
- package/dist/shared/models-dev-cache.d.ts.map +1 -0
- package/dist/shared/normalize-sdk-response.d.ts +5 -0
- package/dist/shared/normalize-sdk-response.d.ts.map +1 -0
- package/dist/shared/opencode-config-dir-types.d.ts +14 -0
- package/dist/shared/opencode-config-dir-types.d.ts.map +1 -0
- package/dist/shared/opencode-config-dir.d.ts +57 -0
- package/dist/shared/opencode-config-dir.d.ts.map +1 -0
- package/dist/shared/opencode-db-path.d.ts +68 -0
- package/dist/shared/opencode-db-path.d.ts.map +1 -0
- package/dist/shared/pi-executable.d.ts +6 -0
- package/dist/shared/pi-executable.d.ts.map +1 -0
- package/dist/shared/plugin-package-version.d.ts +14 -0
- package/dist/shared/plugin-package-version.d.ts.map +1 -0
- package/dist/shared/project-directory-key.d.ts +26 -0
- package/dist/shared/project-directory-key.d.ts.map +1 -0
- package/dist/shared/prompt-context.d.ts +31 -0
- package/dist/shared/prompt-context.d.ts.map +1 -0
- package/dist/shared/prompt-surface-a1-golden.d.ts +28 -0
- package/dist/shared/prompt-surface-a1-golden.d.ts.map +1 -0
- package/dist/shared/prompt-surface-runtime.d.ts +62 -0
- package/dist/shared/prompt-surface-runtime.d.ts.map +1 -0
- package/dist/shared/prompt-surface.d.ts +53 -0
- package/dist/shared/prompt-surface.d.ts.map +1 -0
- package/dist/shared/provider-response-completion.d.ts +12 -0
- package/dist/shared/provider-response-completion.d.ts.map +1 -0
- package/dist/shared/record-type-guard.d.ts +2 -0
- package/dist/shared/record-type-guard.d.ts.map +1 -0
- package/dist/shared/redaction.d.ts +7 -0
- package/dist/shared/redaction.d.ts.map +1 -0
- package/dist/shared/resolve-fallbacks.d.ts +48 -0
- package/dist/shared/resolve-fallbacks.d.ts.map +1 -0
- package/dist/shared/rpc-client.d.ts +28 -0
- package/dist/shared/rpc-client.d.ts.map +1 -0
- package/dist/shared/rpc-notifications.d.ts +74 -0
- package/dist/shared/rpc-notifications.d.ts.map +1 -0
- package/dist/shared/rpc-server.d.ts +52 -0
- package/dist/shared/rpc-server.d.ts.map +1 -0
- package/dist/shared/rpc-types.d.ts +385 -0
- package/dist/shared/rpc-types.d.ts.map +1 -0
- package/dist/shared/rpc-utils.d.ts +162 -0
- package/dist/shared/rpc-utils.d.ts.map +1 -0
- package/dist/shared/run-token-log.d.ts +13 -0
- package/dist/shared/run-token-log.d.ts.map +1 -0
- package/dist/shared/safe-notification-target.d.ts +23 -0
- package/dist/shared/safe-notification-target.d.ts.map +1 -0
- package/dist/shared/sqlite-context-pragmas.d.ts +12 -0
- package/dist/shared/sqlite-context-pragmas.d.ts.map +1 -0
- package/dist/shared/sqlite-helpers.d.ts +25 -0
- package/dist/shared/sqlite-helpers.d.ts.map +1 -0
- package/dist/shared/sqlite-write-locker-test-support.d.ts +7 -0
- package/dist/shared/sqlite-write-locker-test-support.d.ts.map +1 -0
- package/dist/shared/sqlite.d.ts +163 -0
- package/dist/shared/sqlite.d.ts.map +1 -0
- package/dist/shared/stable-json.d.ts +21 -0
- package/dist/shared/stable-json.d.ts.map +1 -0
- package/dist/shared/status-detail-text.d.ts +4 -0
- package/dist/shared/status-detail-text.d.ts.map +1 -0
- package/dist/shared/status-summary.d.ts +54 -0
- package/dist/shared/status-summary.d.ts.map +1 -0
- package/dist/shared/status-view-check.d.ts +130 -0
- package/dist/shared/status-view-check.d.ts.map +1 -0
- package/dist/shared/status-view.d.ts +230 -0
- package/dist/shared/status-view.d.ts.map +1 -0
- package/dist/shared/storage-permissions.d.ts +29 -0
- package/dist/shared/storage-permissions.d.ts.map +1 -0
- package/dist/shared/subagent-runner.d.ts +231 -0
- package/dist/shared/subagent-runner.d.ts.map +1 -0
- package/dist/shared/summarize-child-stderr.d.ts +2 -0
- package/dist/shared/summarize-child-stderr.d.ts.map +1 -0
- package/dist/shared/system-directive.d.ts +3 -0
- package/dist/shared/system-directive.d.ts.map +1 -0
- package/dist/shared/tag-owner-id.d.ts +19 -0
- package/dist/shared/tag-owner-id.d.ts.map +1 -0
- package/dist/shared/tag-transcript.d.ts +103 -0
- package/dist/shared/tag-transcript.d.ts.map +1 -0
- package/dist/shared/tail-hygiene-status.d.ts +24 -0
- package/dist/shared/tail-hygiene-status.d.ts.map +1 -0
- package/dist/shared/test-temp-dir.d.ts +46 -0
- package/dist/shared/test-temp-dir.d.ts.map +1 -0
- package/dist/shared/transcript.d.ts +251 -0
- package/dist/shared/transcript.d.ts.map +1 -0
- package/dist/shared/user-answer.d.ts +4 -0
- package/dist/shared/user-answer.d.ts.map +1 -0
- package/dist/shared/user-facing-codes.d.ts +135 -0
- package/dist/shared/user-facing-codes.d.ts.map +1 -0
- package/dist/shared/window-geometry.d.ts +121 -0
- package/dist/shared/window-geometry.d.ts.map +1 -0
- package/dist/shared/write-transaction-timing.d.ts +11 -0
- package/dist/shared/write-transaction-timing.d.ts.map +1 -0
- package/dist/shared/xml-unescape.d.ts +9 -0
- package/dist/shared/xml-unescape.d.ts.map +1 -0
- package/dist/tools/ctx-expand/constants.d.ts +3 -0
- package/dist/tools/ctx-expand/constants.d.ts.map +1 -0
- package/dist/tools/ctx-expand/index.d.ts +2 -0
- package/dist/tools/ctx-expand/index.d.ts.map +1 -0
- package/dist/tools/ctx-expand/mode.d.ts +35 -0
- package/dist/tools/ctx-expand/mode.d.ts.map +1 -0
- package/dist/tools/ctx-expand/render.d.ts +47 -0
- package/dist/tools/ctx-expand/render.d.ts.map +1 -0
- package/dist/tools/ctx-expand/tools.d.ts +10 -0
- package/dist/tools/ctx-expand/tools.d.ts.map +1 -0
- package/dist/tools/ctx-expand/types.d.ts +11 -0
- package/dist/tools/ctx-expand/types.d.ts.map +1 -0
- package/dist/tools/ctx-memory/constants.d.ts +3 -0
- package/dist/tools/ctx-memory/constants.d.ts.map +1 -0
- package/dist/tools/ctx-memory/index.d.ts +4 -0
- package/dist/tools/ctx-memory/index.d.ts.map +1 -0
- package/dist/tools/ctx-memory/tools.d.ts +5 -0
- package/dist/tools/ctx-memory/tools.d.ts.map +1 -0
- package/dist/tools/ctx-memory/types.d.ts +38 -0
- package/dist/tools/ctx-memory/types.d.ts.map +1 -0
- package/dist/tools/ctx-memory/verification-recording.d.ts +8 -0
- package/dist/tools/ctx-memory/verification-recording.d.ts.map +1 -0
- package/dist/tools/ctx-note/constants.d.ts +2 -0
- package/dist/tools/ctx-note/constants.d.ts.map +1 -0
- package/dist/tools/ctx-note/index.d.ts +4 -0
- package/dist/tools/ctx-note/index.d.ts.map +1 -0
- package/dist/tools/ctx-note/render.d.ts +67 -0
- package/dist/tools/ctx-note/render.d.ts.map +1 -0
- package/dist/tools/ctx-note/tools.d.ts +13 -0
- package/dist/tools/ctx-note/tools.d.ts.map +1 -0
- package/dist/tools/ctx-note/types.d.ts +14 -0
- package/dist/tools/ctx-note/types.d.ts.map +1 -0
- package/dist/tools/ctx-reduce/constants.d.ts +4 -0
- package/dist/tools/ctx-reduce/constants.d.ts.map +1 -0
- package/dist/tools/ctx-reduce/index.d.ts +4 -0
- package/dist/tools/ctx-reduce/index.d.ts.map +1 -0
- package/dist/tools/ctx-reduce/tools.d.ts +19 -0
- package/dist/tools/ctx-reduce/tools.d.ts.map +1 -0
- package/dist/tools/ctx-reduce/types.d.ts +5 -0
- package/dist/tools/ctx-reduce/types.d.ts.map +1 -0
- package/dist/tools/ctx-search/constants.d.ts +4 -0
- package/dist/tools/ctx-search/constants.d.ts.map +1 -0
- package/dist/tools/ctx-search/date-range.d.ts +9 -0
- package/dist/tools/ctx-search/date-range.d.ts.map +1 -0
- package/dist/tools/ctx-search/index.d.ts +4 -0
- package/dist/tools/ctx-search/index.d.ts.map +1 -0
- package/dist/tools/ctx-search/tools.d.ts +5 -0
- package/dist/tools/ctx-search/tools.d.ts.map +1 -0
- package/dist/tools/ctx-search/types.d.ts +34 -0
- package/dist/tools/ctx-search/types.d.ts.map +1 -0
- package/dist/tools/light-descriptions.d.ts +6 -0
- package/dist/tools/light-descriptions.d.ts.map +1 -0
- package/dist/tools/parameter-descriptions.d.ts +75 -0
- package/dist/tools/parameter-descriptions.d.ts.map +1 -0
- package/dist/tools/unwrap-imitated-reduced-args.d.ts +21 -0
- package/dist/tools/unwrap-imitated-reduced-args.d.ts.map +1 -0
- package/dist/v2/fold/boundary.d.ts +61 -0
- package/dist/v2/fold/boundary.d.ts.map +1 -0
- package/dist/v2/fold/host-media.d.ts +36 -0
- package/dist/v2/fold/host-media.d.ts.map +1 -0
- package/dist/v2/fold/markers.d.ts +7 -0
- package/dist/v2/fold/markers.d.ts.map +1 -0
- package/dist/v2/fold/owner.d.ts +40 -0
- package/dist/v2/fold/owner.d.ts.map +1 -0
- package/dist/v2/fold/restore.d.ts +31 -0
- package/dist/v2/fold/restore.d.ts.map +1 -0
- package/dist/v2/fork-inheritance.d.ts +101 -0
- package/dist/v2/fork-inheritance.d.ts.map +1 -0
- package/dist/v2/hidden-child-cleanup.d.ts +11 -0
- package/dist/v2/hidden-child-cleanup.d.ts.map +1 -0
- package/dist/v2/hidden-child-native.d.ts +29 -0
- package/dist/v2/hidden-child-native.d.ts.map +1 -0
- package/dist/v2/hidden-child-record.d.ts +137 -0
- package/dist/v2/hidden-child-record.d.ts.map +1 -0
- package/dist/v2/hidden-completion.d.ts +57 -0
- package/dist/v2/hidden-completion.d.ts.map +1 -0
- package/dist/v2/hooks/channel2.d.ts +10 -0
- package/dist/v2/hooks/channel2.d.ts.map +1 -0
- package/dist/v2/hooks/commands.d.ts +29 -0
- package/dist/v2/hooks/commands.d.ts.map +1 -0
- package/dist/v2/hooks/context.d.ts +112 -0
- package/dist/v2/hooks/context.d.ts.map +1 -0
- package/dist/v2/hooks/deleted-session-tombstones.d.ts +10 -0
- package/dist/v2/hooks/deleted-session-tombstones.d.ts.map +1 -0
- package/dist/v2/hooks/generate.d.ts +10 -0
- package/dist/v2/hooks/generate.d.ts.map +1 -0
- package/dist/v2/hooks/hidden-child.d.ts +76 -0
- package/dist/v2/hooks/hidden-child.d.ts.map +1 -0
- package/dist/v2/hooks/hidden-terminal-error.d.ts +8 -0
- package/dist/v2/hooks/hidden-terminal-error.d.ts.map +1 -0
- package/dist/v2/hooks/lkg-system.d.ts +11 -0
- package/dist/v2/hooks/lkg-system.d.ts.map +1 -0
- package/dist/v2/hooks/model-limit-cache.d.ts +19 -0
- package/dist/v2/hooks/model-limit-cache.d.ts.map +1 -0
- package/dist/v2/hooks/payload.d.ts +15 -0
- package/dist/v2/hooks/payload.d.ts.map +1 -0
- package/dist/v2/hooks/refusal.d.ts +15 -0
- package/dist/v2/hooks/refusal.d.ts.map +1 -0
- package/dist/v2/hooks/restore-rows.d.ts +29 -0
- package/dist/v2/hooks/restore-rows.d.ts.map +1 -0
- package/dist/v2/hooks/rpc-live-state.d.ts +9 -0
- package/dist/v2/hooks/rpc-live-state.d.ts.map +1 -0
- package/dist/v2/hooks/session-api-gate.d.ts +4 -0
- package/dist/v2/hooks/session-api-gate.d.ts.map +1 -0
- package/dist/v2/hooks/session-project-backfill.d.ts +15 -0
- package/dist/v2/hooks/session-project-backfill.d.ts.map +1 -0
- package/dist/v2/hooks/storage-gate.d.ts +48 -0
- package/dist/v2/hooks/storage-gate.d.ts.map +1 -0
- package/dist/v2/hooks/storage-notice.d.ts +29 -0
- package/dist/v2/hooks/storage-notice.d.ts.map +1 -0
- package/dist/v2/hooks/store.d.ts +58 -0
- package/dist/v2/hooks/store.d.ts.map +1 -0
- package/dist/v2/hooks/tools.d.ts +8 -0
- package/dist/v2/hooks/tools.d.ts.map +1 -0
- package/dist/v2/hooks/types.d.ts +250 -0
- package/dist/v2/hooks/types.d.ts.map +1 -0
- package/dist/v2/hooks/usage-persist.d.ts +31 -0
- package/dist/v2/hooks/usage-persist.d.ts.map +1 -0
- package/dist/v2/hooks/usage-reading.d.ts +46 -0
- package/dist/v2/hooks/usage-reading.d.ts.map +1 -0
- package/dist/v2/server.d.ts +27 -0
- package/dist/v2/server.d.ts.map +1 -0
- package/dist/v2/server.js +76235 -0
- package/dist/v2/store-reader.d.ts +218 -0
- package/dist/v2/store-reader.d.ts.map +1 -0
- package/dist/web/api.d.ts +40 -0
- package/dist/web/api.d.ts.map +1 -0
- package/dist/web/context-store.d.ts +74 -0
- package/dist/web/context-store.d.ts.map +1 -0
- package/dist/web/fixtures.d.ts +53 -0
- package/dist/web/fixtures.d.ts.map +1 -0
- package/dist/web/host-opencode.d.ts +56 -0
- package/dist/web/host-opencode.d.ts.map +1 -0
- package/dist/web/host-pi.d.ts +116 -0
- package/dist/web/host-pi.d.ts.map +1 -0
- package/dist/web/main.d.ts +24 -0
- package/dist/web/main.d.ts.map +1 -0
- package/dist/web/main.js +6071 -0
- package/dist/web/memories.d.ts +67 -0
- package/dist/web/memories.d.ts.map +1 -0
- package/dist/web/server.d.ts +42 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/types.d.ts +52 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/ui/favicon.svg +4 -0
- package/dist/web/ui/index.html +36 -0
- package/dist/web/ui/panel.css +8 -0
- package/dist/web/ui/panel.js +373 -0
- package/dist/web/views.d.ts +155 -0
- package/dist/web/views.d.ts.map +1 -0
- package/dist/web/writes.d.ts +86 -0
- package/dist/web/writes.d.ts.map +1 -0
- package/dist/wrapup-orchestrator-z9sqpqjf.js +420 -0
- package/index.js +1 -0
- package/package.json +84 -4
- package/src/agents/historian.ts +3 -0
- package/src/agents/language-directive.test.ts +129 -0
- package/src/agents/language-directive.ts +113 -0
- package/src/agents/magic-context-prompt.language.test.ts +37 -0
- package/src/agents/magic-context-prompt.test.ts +520 -0
- package/src/agents/magic-context-prompt.ts +196 -0
- package/src/agents/memory-maintainer.test.ts +249 -0
- package/src/agents/memory-maintainer.ts +374 -0
- package/src/config/agent-disable.ts +58 -0
- package/src/config/compaction-accessor-guard.test.ts +81 -0
- package/src/config/compaction-backcompat.test.ts +52 -0
- package/src/config/config-paths.ts +42 -0
- package/src/config/index.test.ts +1252 -0
- package/src/config/index.ts +762 -0
- package/src/config/latch-permanence-guard.test.ts +218 -0
- package/src/config/live-run-config.test.ts +139 -0
- package/src/config/live-run-config.ts +79 -0
- package/src/config/live-schema-drift.test.ts +67 -0
- package/src/config/live-snapshot.test.ts +86 -0
- package/src/config/live-snapshot.ts +187 -0
- package/src/config/migrate-experimental.ts +92 -0
- package/src/config/misplaced-agent-model.test.ts +55 -0
- package/src/config/profiles.ts +106 -0
- package/src/config/project-config-trust-boundary.test.ts +185 -0
- package/src/config/project-security.hostile-matrix.test.ts +281 -0
- package/src/config/project-security.test.ts +329 -0
- package/src/config/project-security.ts +940 -0
- package/src/config/protected-tokens.test.ts +229 -0
- package/src/config/prune-config-leaf.test.ts +78 -0
- package/src/config/prune-config-leaf.ts +67 -0
- package/src/config/raw-loader.test.ts +389 -0
- package/src/config/raw-loader.ts +435 -0
- package/src/config/removed-agent-config.ts +45 -0
- package/src/config/removed-agent-source-fence.test.ts +53 -0
- package/src/config/removed-config-keys.test.ts +106 -0
- package/src/config/schema/agent-overrides.ts +45 -0
- package/src/config/schema/magic-context.test.ts +434 -0
- package/src/config/schema/magic-context.ts +1019 -0
- package/src/config/variable.test.ts +324 -0
- package/src/config/variable.ts +192 -0
- package/src/shared/__fixtures__/window-overlay.v1.json +337 -0
- package/src/shared/announcement.test.ts +198 -0
- package/src/shared/announcement.ts +145 -0
- package/src/shared/assistant-message-extractor.test.ts +47 -0
- package/src/shared/assistant-message-extractor.ts +156 -0
- package/src/shared/auto-update-provenance.ts +42 -0
- package/src/shared/bounded-session-map.test.ts +97 -0
- package/src/shared/bounded-session-map.ts +84 -0
- package/src/shared/builtin-commands.ts +46 -0
- package/src/shared/cache-ttl-display.test.ts +84 -0
- package/src/shared/cache-ttl-display.ts +58 -0
- package/src/shared/cache-ttl-seed.ts +23 -0
- package/src/shared/child-session-teardown.test.ts +241 -0
- package/src/shared/child-session-teardown.ts +66 -0
- package/src/shared/commit-detection.test.ts +63 -0
- package/src/shared/commit-detection.ts +53 -0
- package/src/shared/config-diagnostics.test.ts +29 -0
- package/src/shared/config-diagnostics.ts +64 -0
- package/src/shared/conflict-detector.test.ts +780 -0
- package/src/shared/conflict-detector.ts +596 -0
- package/src/shared/conflict-fixer.test.ts +608 -0
- package/src/shared/conflict-fixer.ts +295 -0
- package/src/shared/context-limit-provenance.ts +6 -0
- package/src/shared/data-path.test.ts +352 -0
- package/src/shared/data-path.ts +310 -0
- package/src/shared/error-message.test.ts +94 -0
- package/src/shared/error-message.ts +115 -0
- package/src/shared/escalation-bands.test.ts +23 -0
- package/src/shared/escalation-bands.ts +18 -0
- package/src/shared/format-bytes.ts +5 -0
- package/src/shared/format-threshold.ts +54 -0
- package/src/shared/harness-provider-map.test.ts +176 -0
- package/src/shared/harness-provider-map.ts +130 -0
- package/src/shared/harness.ts +76 -0
- package/src/shared/hidden-variant-warnings.ts +21 -0
- package/src/shared/historian-tool-defaults.json +13 -0
- package/src/shared/historian-tool-expansions.ts +18 -0
- package/src/shared/historian-tool-template.ts +248 -0
- package/src/shared/historian-transient-error.test.ts +36 -0
- package/src/shared/historian-transient-error.ts +22 -0
- package/src/shared/host-limitations.ts +43 -0
- package/src/shared/index.ts +7 -0
- package/src/shared/internal-initiator-marker.ts +1 -0
- package/src/shared/jsonc-edit.ts +387 -0
- package/src/shared/jsonc-parser.test.ts +46 -0
- package/src/shared/jsonc-parser.ts +283 -0
- package/src/shared/keep-subagents.test.ts +39 -0
- package/src/shared/keep-subagents.ts +28 -0
- package/src/shared/logger.test.ts +292 -0
- package/src/shared/logger.ts +248 -0
- package/src/shared/model-cache-ttl.test.ts +40 -0
- package/src/shared/model-cache-ttl.ts +58 -0
- package/src/shared/model-resolution.test.ts +132 -0
- package/src/shared/model-resolution.ts +158 -0
- package/src/shared/model-suggestion-retry.test.ts +698 -0
- package/src/shared/model-suggestion-retry.ts +838 -0
- package/src/shared/models-dev-cache.test.ts +720 -0
- package/src/shared/models-dev-cache.ts +661 -0
- package/src/shared/normalize-sdk-response.ts +40 -0
- package/src/shared/opencode-config-dir-types.ts +15 -0
- package/src/shared/opencode-config-dir.ts +111 -0
- package/src/shared/opencode-db-path.test.ts +389 -0
- package/src/shared/opencode-db-path.ts +396 -0
- package/src/shared/opencode-host-generation.test.ts +29 -0
- package/src/shared/pi-executable.ts +20 -0
- package/src/shared/plugin-package-version.ts +52 -0
- package/src/shared/project-directory-key.test.ts +111 -0
- package/src/shared/project-directory-key.ts +54 -0
- package/src/shared/prompt-context.ts +135 -0
- package/src/shared/prompt-surface-a1-golden.md +407 -0
- package/src/shared/prompt-surface-a1-golden.ts +41 -0
- package/src/shared/prompt-surface-runtime.test.ts +190 -0
- package/src/shared/prompt-surface-runtime.ts +263 -0
- package/src/shared/prompt-surface.test.ts +195 -0
- package/src/shared/prompt-surface.ts +162 -0
- package/src/shared/provider-response-completion.ts +23 -0
- package/src/shared/record-type-guard.ts +3 -0
- package/src/shared/redaction.test.ts +134 -0
- package/src/shared/redaction.ts +298 -0
- package/src/shared/resolve-fallbacks.test.ts +114 -0
- package/src/shared/resolve-fallbacks.ts +95 -0
- package/src/shared/rpc-async-probes.test.ts +320 -0
- package/src/shared/rpc-client.test.ts +576 -0
- package/src/shared/rpc-client.ts +218 -0
- package/src/shared/rpc-notifications.test.ts +151 -0
- package/src/shared/rpc-notifications.ts +222 -0
- package/src/shared/rpc-server.ts +431 -0
- package/src/shared/rpc-types.ts +386 -0
- package/src/shared/rpc-utils.test.ts +822 -0
- package/src/shared/rpc-utils.ts +1146 -0
- package/src/shared/run-token-log.test.ts +65 -0
- package/src/shared/run-token-log.ts +39 -0
- package/src/shared/safe-notification-target.test.ts +97 -0
- package/src/shared/safe-notification-target.ts +102 -0
- package/src/shared/session-messages-bounded.test.ts +112 -0
- package/src/shared/sqlite-acquisition-fence.test.ts +133 -0
- package/src/shared/sqlite-acquisition-routing.test.ts +145 -0
- package/src/shared/sqlite-bind-style.test.ts +80 -0
- package/src/shared/sqlite-context-pragmas.ts +24 -0
- package/src/shared/sqlite-helpers.ts +44 -0
- package/src/shared/sqlite-import-fence.test.ts +19 -0
- package/src/shared/sqlite-pass-scope.test.ts +154 -0
- package/src/shared/sqlite-transaction-mode-guard.test.ts +234 -0
- package/src/shared/sqlite-write-locker-test-support.ts +63 -0
- package/src/shared/sqlite.test.ts +58 -0
- package/src/shared/sqlite.ts +988 -0
- package/src/shared/stable-json.test.ts +87 -0
- package/src/shared/stable-json.ts +37 -0
- package/src/shared/status-detail-text.test.ts +194 -0
- package/src/shared/status-detail-text.ts +7 -0
- package/src/shared/status-summary.ts +189 -0
- package/src/shared/status-view-check.test.ts +252 -0
- package/src/shared/status-view-check.ts +519 -0
- package/src/shared/status-view.test.ts +395 -0
- package/src/shared/status-view.ts +794 -0
- package/src/shared/storage-busy.test.ts +73 -0
- package/src/shared/storage-permissions.test.ts +190 -0
- package/src/shared/storage-permissions.ts +212 -0
- package/src/shared/subagent-runner.ts +240 -0
- package/src/shared/summarize-child-stderr.test.ts +55 -0
- package/src/shared/summarize-child-stderr.ts +33 -0
- package/src/shared/system-directive.ts +9 -0
- package/src/shared/tag-owner-id.test.ts +33 -0
- package/src/shared/tag-owner-id.ts +29 -0
- package/src/shared/tag-transcript.test.ts +554 -0
- package/src/shared/tag-transcript.ts +1400 -0
- package/src/shared/tail-hygiene-status.ts +73 -0
- package/src/shared/test-temp-dir.test.ts +84 -0
- package/src/shared/test-temp-dir.ts +192 -0
- package/src/shared/transcript.ts +274 -0
- package/src/shared/user-answer.test.ts +12 -0
- package/src/shared/user-answer.ts +17 -0
- package/src/shared/user-facing-codes.test.ts +82 -0
- package/src/shared/user-facing-codes.ts +180 -0
- package/src/shared/window-geometry.test.ts +405 -0
- package/src/shared/window-geometry.ts +726 -0
- package/src/shared/windows-hidden-spawns.test.ts +133 -0
- package/src/shared/write-transaction-attribution.test.ts +214 -0
- package/src/shared/write-transaction-timing.ts +26 -0
- package/src/shared/xml-unescape.ts +19 -0
- package/README.md +0 -3
|
@@ -0,0 +1,661 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve per-model context limits from OpenCode's SDK — the single source of
|
|
3
|
+
* truth — for OpenCode sessions.
|
|
4
|
+
*
|
|
5
|
+
* `client.config.providers()` returns OpenCode's fully-resolved config: the
|
|
6
|
+
* live models.dev cache + compiled-in snapshot + opencode.json custom-provider
|
|
7
|
+
* overrides + auth-plugin caps (e.g. the Codex-OAuth gpt-5.5 400k cap). We
|
|
8
|
+
* consume ONLY that. We no longer read OpenCode's `models.json` file ourselves:
|
|
9
|
+
* a torn read mid-write produced impossible limits (a 6748 "limit" for a session
|
|
10
|
+
* that had run for hours), and a stale on-disk copy out-voted the live
|
|
11
|
+
* auth-resolved cap (922k vs the real 400k). OpenCode reads that file safely in
|
|
12
|
+
* its own process and hands us the merged answer.
|
|
13
|
+
*
|
|
14
|
+
* Layers:
|
|
15
|
+
* 1. `apiCache` (authoritative): warmed once at startup from the SDK; seeded
|
|
16
|
+
* from a persisted last-known-good file on cold start so a restart uses the
|
|
17
|
+
* real limit immediately (no 128k-default budget-collapse window).
|
|
18
|
+
*
|
|
19
|
+
* All cached values are bounded to a sane [20k, 3M] range on insert, so torn /
|
|
20
|
+
* unconfigured-default garbage can never be returned or persisted. The startup
|
|
21
|
+
* warm retries a couple times when OpenCode's provider service isn't ready yet.
|
|
22
|
+
*
|
|
23
|
+
* Pi does NOT use this — it resolves from its own `ctx.getModel().contextWindow`
|
|
24
|
+
* (instant at extension load), so `getSdkContextLimit()` returns `undefined`
|
|
25
|
+
* for Pi and Pi's own path is used.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { readFileSync } from "node:fs";
|
|
29
|
+
import { join } from "node:path";
|
|
30
|
+
import type { ContextLimitProvenance } from "./context-limit-provenance";
|
|
31
|
+
import { getMagicContextStorageDir } from "./data-path";
|
|
32
|
+
import { getHarness } from "./harness";
|
|
33
|
+
import { modelRefLookupOrder } from "./harness-provider-map";
|
|
34
|
+
import { sessionLog } from "./logger";
|
|
35
|
+
import { writeStorageFileAtomicSync } from "./storage-permissions";
|
|
36
|
+
import {
|
|
37
|
+
deriveWindowGeometry,
|
|
38
|
+
getWindowOverlay,
|
|
39
|
+
resolveWindowOverlayFacts,
|
|
40
|
+
type WindowGeometryResult,
|
|
41
|
+
} from "./window-geometry";
|
|
42
|
+
|
|
43
|
+
interface OpencodeClientLike {
|
|
44
|
+
config: {
|
|
45
|
+
providers: () => Promise<{ data?: { providers?: unknown } }>;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Plausible bounds for a real model's prompt limit. A value outside this range
|
|
50
|
+
// is physically impossible for an agentic session and signals a transient/garbage
|
|
51
|
+
// read — e.g. a torn read of OpenCode's `models.json` mid-write once produced
|
|
52
|
+
// `contextLimit=6748` (smaller than a single system prompt) for a session that
|
|
53
|
+
// had been running for hours past 200k+ (issue #117). Such values must be
|
|
54
|
+
// REJECTED, not trusted as a "smaller real cap". A genuinely smaller real limit
|
|
55
|
+
// still comes through the overflow-detection path (detectedContextLimit).
|
|
56
|
+
export const MIN_SANE_LIMIT = 20_000;
|
|
57
|
+
export const MAX_SANE_LIMIT = 3_000_000;
|
|
58
|
+
|
|
59
|
+
/** True when `limit` is a plausible real prompt window — used to reject torn /
|
|
60
|
+
* unconfigured-default garbage in BOTH harnesses (OpenCode's SDK values and
|
|
61
|
+
* Pi's reported `contextWindow`). Exported so Pi applies the identical bound. */
|
|
62
|
+
export function isSaneLimit(limit: number | undefined): limit is number {
|
|
63
|
+
return typeof limit === "number" && limit >= MIN_SANE_LIMIT && limit <= MAX_SANE_LIMIT;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type OutputReserveConfig = number | { default: number; [modelKey: string]: number };
|
|
67
|
+
|
|
68
|
+
export interface ModelLimit {
|
|
69
|
+
context?: number;
|
|
70
|
+
input?: number;
|
|
71
|
+
output?: number;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
interface CachedModelMetadata {
|
|
75
|
+
/** Legacy resolved value, retained so pre-upgrade persisted caches remain readable. */
|
|
76
|
+
limit?: number;
|
|
77
|
+
/** Raw combined context window. Reservation is applied only when the value is read. */
|
|
78
|
+
contextLimit?: number;
|
|
79
|
+
/** Provider-enforced prompt cap. Undefined when only a combined context window is known. */
|
|
80
|
+
inputLimit?: number;
|
|
81
|
+
/** Maximum generated tokens advertised by the provider/model catalog. */
|
|
82
|
+
outputLimit?: number;
|
|
83
|
+
/** Provider metadata says the model accepts image input. Unknown is false. */
|
|
84
|
+
vision?: boolean;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Proven-separate allowlist only. Unknown providers reserve by default because
|
|
88
|
+
// wasting some input capacity is safer than a shared-window hard rejection.
|
|
89
|
+
const SEPARATE_OUTPUT_QUOTA_PROVIDERS = new Set(["google", "google-antigravity"]);
|
|
90
|
+
const MIN_PLAUSIBLE_CONTEXT_LIMIT = 1024;
|
|
91
|
+
const OUTPUT_RESERVE_CAP_RATIO = 0.25;
|
|
92
|
+
let outputReserveConfig: OutputReserveConfig | undefined;
|
|
93
|
+
const reserveClampLogSeen = new Set<string>();
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Authoritative source (OpenCode only): populated async from the SDK
|
|
97
|
+
* `config.providers()`, which is OpenCode's fully-resolved config — models.dev +
|
|
98
|
+
* compiled-in snapshot + opencode.json overrides + auth-plugin caps (e.g. the
|
|
99
|
+
* Codex-OAuth gpt-5.5 400k cap). When present, this WINS unconditionally; the
|
|
100
|
+
* disk file is never consulted (no torn-read exposure, no stale value
|
|
101
|
+
* out-voting the live limit). Pi never warms this — it has its own
|
|
102
|
+
* `contextWindow` source — so for Pi this stays null and resolution falls
|
|
103
|
+
* through to the file fallback exactly as before.
|
|
104
|
+
*/
|
|
105
|
+
let apiCache: Map<string, CachedModelMetadata> | null = null;
|
|
106
|
+
let apiLoadedAt = 0;
|
|
107
|
+
|
|
108
|
+
// Persisted last-known-good apiCache (OpenCode). Survives restart so a cold
|
|
109
|
+
// start uses the real limit instantly instead of falling to the disk file or the
|
|
110
|
+
// 128k default for the warm-up window (which over-shrinks the history budget).
|
|
111
|
+
// Harness-scoped: only OpenCode warms/persists apiCache, so Pi's file (which is
|
|
112
|
+
// never written) stays absent and Pi seeds nothing — keeping Pi byte-identical.
|
|
113
|
+
let persistSeedLoaded = false;
|
|
114
|
+
|
|
115
|
+
function persistFilePath(): string {
|
|
116
|
+
return join(getMagicContextStorageDir(), `model-context-limits-${getHarness()}.json`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Seed apiCache from the persisted last-known-good file once per process, only
|
|
120
|
+
* when apiCache hasn't been warmed yet. Values are sane-filtered on load so a
|
|
121
|
+
* stale garbage entry can never resurrect. */
|
|
122
|
+
function loadPersistedApiCacheOnce(): void {
|
|
123
|
+
if (persistSeedLoaded || apiCache !== null) return;
|
|
124
|
+
persistSeedLoaded = true;
|
|
125
|
+
try {
|
|
126
|
+
const raw = readFileSync(persistFilePath(), "utf-8");
|
|
127
|
+
const obj = JSON.parse(raw) as Record<
|
|
128
|
+
string,
|
|
129
|
+
| number
|
|
130
|
+
| {
|
|
131
|
+
limit?: number;
|
|
132
|
+
contextLimit?: number;
|
|
133
|
+
inputLimit?: number;
|
|
134
|
+
outputLimit?: number;
|
|
135
|
+
vision?: boolean;
|
|
136
|
+
}
|
|
137
|
+
>;
|
|
138
|
+
const map = new Map<string, CachedModelMetadata>();
|
|
139
|
+
for (const [key, persisted] of Object.entries(obj)) {
|
|
140
|
+
const limit = typeof persisted === "number" ? persisted : persisted.limit;
|
|
141
|
+
const contextLimit = typeof persisted === "number" ? undefined : persisted.contextLimit;
|
|
142
|
+
const inputLimit = typeof persisted === "number" ? undefined : persisted.inputLimit;
|
|
143
|
+
const outputLimit = typeof persisted === "number" ? undefined : persisted.outputLimit;
|
|
144
|
+
const vision = typeof persisted === "number" ? false : persisted.vision === true;
|
|
145
|
+
if (isSaneLimit(contextLimit) || isSaneLimit(limit)) {
|
|
146
|
+
map.set(key, {
|
|
147
|
+
limit: isSaneLimit(limit) ? limit : undefined,
|
|
148
|
+
contextLimit: isSaneLimit(contextLimit) ? contextLimit : undefined,
|
|
149
|
+
inputLimit: isSaneLimit(inputLimit) ? inputLimit : undefined,
|
|
150
|
+
outputLimit: isFinitePositive(outputLimit) ? outputLimit : undefined,
|
|
151
|
+
vision,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (map.size > 0) {
|
|
156
|
+
apiCache = map;
|
|
157
|
+
sessionLog(
|
|
158
|
+
"global",
|
|
159
|
+
`models-dev-cache: seeded ${map.size} entries from persisted cache (cold start)`,
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
} catch {
|
|
163
|
+
// No persisted cache yet, or unreadable — fall through to file/SDK.
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** Atomically persist the current (sane-filtered) apiCache so the next process
|
|
168
|
+
* cold-starts with the real limits. Temp-write + rename so a concurrent reader
|
|
169
|
+
* never sees a torn file (the exact failure mode we're eliminating). */
|
|
170
|
+
function persistApiCache(): void {
|
|
171
|
+
if (!apiCache) return;
|
|
172
|
+
const obj: Record<string, CachedModelMetadata> = {};
|
|
173
|
+
for (const [key, value] of apiCache) {
|
|
174
|
+
if (isSaneLimit(value.limit)) {
|
|
175
|
+
obj[key] = {
|
|
176
|
+
limit: value.limit,
|
|
177
|
+
contextLimit: isSaneLimit(value.contextLimit) ? value.contextLimit : undefined,
|
|
178
|
+
inputLimit: isSaneLimit(value.inputLimit) ? value.inputLimit : undefined,
|
|
179
|
+
outputLimit: isFinitePositive(value.outputLimit) ? value.outputLimit : undefined,
|
|
180
|
+
vision: value.vision === true,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
const target = persistFilePath();
|
|
186
|
+
writeStorageFileAtomicSync(target, JSON.stringify(obj));
|
|
187
|
+
} catch {
|
|
188
|
+
// best-effort — a failed persist only loses cold-start warmth, not correctness
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function isFinitePositive(value: number | undefined): value is number {
|
|
193
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function modelKeyLookupOrder(providerID: string, modelID: string): string[] {
|
|
197
|
+
const candidates = [...modelRefLookupOrder(`${providerID}/${modelID}`), modelID];
|
|
198
|
+
const colon = modelID.lastIndexOf(":");
|
|
199
|
+
if (colon > 0) {
|
|
200
|
+
const bareModel = modelID.slice(0, colon);
|
|
201
|
+
candidates.push(...modelRefLookupOrder(`${providerID}/${bareModel}`), bareModel);
|
|
202
|
+
}
|
|
203
|
+
return [...new Set(candidates)];
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Resolve the user-tier output reservation for one runtime model. */
|
|
207
|
+
export function resolveOutputReserve(
|
|
208
|
+
providerID: string,
|
|
209
|
+
modelID: string,
|
|
210
|
+
config: OutputReserveConfig | undefined = outputReserveConfig,
|
|
211
|
+
): number | undefined {
|
|
212
|
+
if (typeof config === "number")
|
|
213
|
+
return Number.isFinite(config) && config >= 0 ? config : undefined;
|
|
214
|
+
if (!config) return undefined;
|
|
215
|
+
for (const candidate of modelKeyLookupOrder(providerID, modelID)) {
|
|
216
|
+
const value = config[candidate];
|
|
217
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) return value;
|
|
218
|
+
}
|
|
219
|
+
return Number.isFinite(config.default) && config.default >= 0 ? config.default : undefined;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function logReserveClampOnce(key: string, message: string): void {
|
|
223
|
+
if (reserveClampLogSeen.has(key)) return;
|
|
224
|
+
reserveClampLogSeen.add(key);
|
|
225
|
+
sessionLog("global", `models-dev-cache: ${message}`);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/** Set the user-tier reservation override shared by every resolved-limit consumer. */
|
|
229
|
+
export function setOutputReserveConfig(config: OutputReserveConfig | undefined): void {
|
|
230
|
+
outputReserveConfig = config;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Resolve the usable prompt budget from raw provider metadata.
|
|
235
|
+
*
|
|
236
|
+
* A genuinely smaller input cap is already pre-carved and wins unchanged. All
|
|
237
|
+
* other providers reserve generated tokens from the shared context window by
|
|
238
|
+
* default, except the small allowlist whose APIs document a separate output
|
|
239
|
+
* quota. `output_reserve` overrides that shared/separate decision, including 0
|
|
240
|
+
* to disable reservation. Reservation can never leave less than half the raw
|
|
241
|
+
* context window or the module's 1024-token plausibility floor.
|
|
242
|
+
*/
|
|
243
|
+
export function resolveLimit(
|
|
244
|
+
limit: ModelLimit | undefined,
|
|
245
|
+
providerID: string,
|
|
246
|
+
modelID: string,
|
|
247
|
+
reserveConfig: OutputReserveConfig | undefined = outputReserveConfig,
|
|
248
|
+
): number | undefined {
|
|
249
|
+
if (!limit) return undefined;
|
|
250
|
+
const context = isFinitePositive(limit.context) ? limit.context : undefined;
|
|
251
|
+
const input = isFinitePositive(limit.input) ? limit.input : undefined;
|
|
252
|
+
if (input !== undefined && (context === undefined || input < context)) return input;
|
|
253
|
+
if (context === undefined) return undefined;
|
|
254
|
+
|
|
255
|
+
const configuredReserve = resolveOutputReserve(providerID, modelID, reserveConfig);
|
|
256
|
+
let reserve: number;
|
|
257
|
+
if (configuredReserve !== undefined) {
|
|
258
|
+
reserve = configuredReserve;
|
|
259
|
+
} else if (SEPARATE_OUTPUT_QUOTA_PROVIDERS.has(providerID)) {
|
|
260
|
+
reserve = 0;
|
|
261
|
+
} else {
|
|
262
|
+
const output = isFinitePositive(limit.output) ? limit.output : 0;
|
|
263
|
+
const cap = context * OUTPUT_RESERVE_CAP_RATIO;
|
|
264
|
+
reserve = Math.min(output, cap);
|
|
265
|
+
if (output > cap) {
|
|
266
|
+
logReserveClampOnce(
|
|
267
|
+
`cap|${providerID}/${modelID}|${context}|${output}`,
|
|
268
|
+
`output reserve capped at 25% for ${providerID}/${modelID}: ${output} → ${cap}`,
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const floor = Math.max(MIN_PLAUSIBLE_CONTEXT_LIMIT, context * 0.5);
|
|
274
|
+
const maxReserve = Math.max(0, context - floor);
|
|
275
|
+
if (reserve > maxReserve) {
|
|
276
|
+
logReserveClampOnce(
|
|
277
|
+
`floor|${providerID}/${modelID}|${context}|${reserve}`,
|
|
278
|
+
`output reserve clamped for ${providerID}/${modelID}: ${reserve} → ${maxReserve} (usable floor ${floor})`,
|
|
279
|
+
);
|
|
280
|
+
reserve = maxReserve;
|
|
281
|
+
}
|
|
282
|
+
return Math.floor(context - reserve);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function setCachedModelMetadata(
|
|
286
|
+
cache: Map<string, CachedModelMetadata>,
|
|
287
|
+
key: string,
|
|
288
|
+
model:
|
|
289
|
+
| {
|
|
290
|
+
limit?: ModelLimit;
|
|
291
|
+
experimental?: { modes?: Record<string, unknown> };
|
|
292
|
+
capabilities?: unknown;
|
|
293
|
+
modalities?: unknown;
|
|
294
|
+
input?: unknown;
|
|
295
|
+
attachment?: unknown;
|
|
296
|
+
}
|
|
297
|
+
| undefined,
|
|
298
|
+
): void {
|
|
299
|
+
const contextLimit = model?.limit?.context;
|
|
300
|
+
const inputLimit = model?.limit?.input;
|
|
301
|
+
const outputLimit = model?.limit?.output;
|
|
302
|
+
const rawLimit = isSaneLimit(contextLimit)
|
|
303
|
+
? contextLimit
|
|
304
|
+
: isSaneLimit(inputLimit)
|
|
305
|
+
? inputLimit
|
|
306
|
+
: undefined;
|
|
307
|
+
|
|
308
|
+
// Validate the raw provider metadata before reservation. A legitimate 20K
|
|
309
|
+
// context may resolve below MIN_SANE_LIMIT after carving output, but it must
|
|
310
|
+
// still remain cached; the 50%/1024 usable floor protects the result.
|
|
311
|
+
if (rawLimit === undefined) return;
|
|
312
|
+
|
|
313
|
+
const values = [model?.capabilities, model?.modalities, model?.input, model?.attachment];
|
|
314
|
+
const vision = values.some(
|
|
315
|
+
(value) =>
|
|
316
|
+
JSON.stringify(value ?? "")
|
|
317
|
+
.toLowerCase()
|
|
318
|
+
.includes("image") ||
|
|
319
|
+
JSON.stringify(value ?? "")
|
|
320
|
+
.toLowerCase()
|
|
321
|
+
.includes("vision"),
|
|
322
|
+
);
|
|
323
|
+
const value: CachedModelMetadata = {
|
|
324
|
+
// Keep a sane raw fallback for old persisted-cache readers. Runtime
|
|
325
|
+
// resolution below uses context/input/output so user overrides stay live.
|
|
326
|
+
limit: rawLimit,
|
|
327
|
+
contextLimit: isSaneLimit(contextLimit) ? contextLimit : undefined,
|
|
328
|
+
inputLimit: isSaneLimit(inputLimit) ? inputLimit : undefined,
|
|
329
|
+
outputLimit: isFinitePositive(outputLimit) ? outputLimit : undefined,
|
|
330
|
+
vision,
|
|
331
|
+
};
|
|
332
|
+
cache.set(key, value);
|
|
333
|
+
|
|
334
|
+
// OpenCode creates derived model IDs from experimental.modes
|
|
335
|
+
// e.g. gpt-5.4 + modes.fast → gpt-5.4-fast. These inherit the same
|
|
336
|
+
// context limit as the parent model.
|
|
337
|
+
const modes = model?.experimental?.modes;
|
|
338
|
+
if (modes && typeof modes === "object") {
|
|
339
|
+
for (const mode of Object.keys(modes)) {
|
|
340
|
+
cache.set(`${key}-${mode}`, value);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Asynchronously refresh the API-layer cache from OpenCode's SDK.
|
|
347
|
+
*
|
|
348
|
+
* Call this at plugin startup and from the issue #77 regression-recovery path.
|
|
349
|
+
* OpenCode's `/config/providers` endpoint returns every provider with full
|
|
350
|
+
* model metadata — including `limit.context` — resolved through the same path
|
|
351
|
+
* OpenCode itself uses (live cache + compiled-in snapshot + opencode.json
|
|
352
|
+
* overrides + derived experimental modes + auth-plugin caps).
|
|
353
|
+
*
|
|
354
|
+
* `retries`/`retryDelayMs`: when OpenCode's provider service isn't ready at our
|
|
355
|
+
* startup, `config.providers()` can return an empty/no-providers payload. Retry
|
|
356
|
+
* a few times so the cache warms instead of leaving the session on the 128k
|
|
357
|
+
* default until the next restart. A successful load (any providers) stops early.
|
|
358
|
+
*
|
|
359
|
+
* Safe to call concurrently; only overwrites the cache on success.
|
|
360
|
+
*/
|
|
361
|
+
export async function refreshModelLimitsFromApi(
|
|
362
|
+
client: OpencodeClientLike,
|
|
363
|
+
options?: { retries?: number; retryDelayMs?: number },
|
|
364
|
+
): Promise<void> {
|
|
365
|
+
const attempts = Math.max(1, (options?.retries ?? 0) + 1);
|
|
366
|
+
const delayMs = options?.retryDelayMs ?? 1000;
|
|
367
|
+
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
368
|
+
const ok = await refreshModelLimitsOnce(client);
|
|
369
|
+
if (ok) return;
|
|
370
|
+
if (attempt < attempts) {
|
|
371
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// Once-per-process latch for the after-auth re-warm below.
|
|
377
|
+
let authRewarmDone = false;
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Re-warm the limit cache ONCE per process, after auth is provably live.
|
|
381
|
+
*
|
|
382
|
+
* The startup warm (index.ts) can run before the user's provider auth is
|
|
383
|
+
* loaded. When it does, an auth-conditional limit patch hasn't applied yet, so
|
|
384
|
+
* `config.providers()` returns the RAW catalog limit (e.g. OpenAI gpt-5.5 OAuth
|
|
385
|
+
* is downshifted to a 272k input cap by OpenCode's Codex auth plugin only when
|
|
386
|
+
* `ctx.auth.type === "oauth"`; before auth loads it reports the raw 922k). That
|
|
387
|
+
* too-high value gets cached AND persisted as last-known-good, survives
|
|
388
|
+
* restarts, and the existing recovery only re-resolves a too-LOW limit
|
|
389
|
+
* (overflow / `percentage > 100`), so a too-HIGH one never self-corrects: the
|
|
390
|
+
* sidebar shows huge headroom while the backend rejects at the real cap (#179).
|
|
391
|
+
*
|
|
392
|
+
* The first `message.updated` carrying usage tokens proves a request succeeded,
|
|
393
|
+
* so auth + providers are fully resolved. Re-warming there overwrites any stale
|
|
394
|
+
* pre-auth limit with the live auth-adjusted one. Idempotent and cheap: a single
|
|
395
|
+
* `config.providers()` round-trip, then a no-op for the rest of the process. The
|
|
396
|
+
* latch is set before the await so concurrent `message.updated` events don't
|
|
397
|
+
* stack duplicate warms; a failed warm resets it so a later message retries.
|
|
398
|
+
*/
|
|
399
|
+
export async function refreshModelLimitsAfterAuthOnce(client: OpencodeClientLike): Promise<void> {
|
|
400
|
+
if (authRewarmDone) return;
|
|
401
|
+
authRewarmDone = true;
|
|
402
|
+
const ok = await refreshModelLimitsOnce(client);
|
|
403
|
+
if (!ok) authRewarmDone = false;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/** Test-only: reset the after-auth re-warm latch between cases. */
|
|
407
|
+
export function resetAuthRewarmLatchForTest(): void {
|
|
408
|
+
authRewarmDone = false;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/** Single SDK fetch + cache rebuild. Returns true when providers were loaded. */
|
|
412
|
+
async function refreshModelLimitsOnce(client: OpencodeClientLike): Promise<boolean> {
|
|
413
|
+
try {
|
|
414
|
+
const result = await client.config.providers();
|
|
415
|
+
const data = (result as { data?: { providers?: Array<unknown> } }).data;
|
|
416
|
+
const providers = data?.providers;
|
|
417
|
+
if (!Array.isArray(providers) || providers.length === 0) {
|
|
418
|
+
sessionLog(
|
|
419
|
+
"global",
|
|
420
|
+
"models-dev-cache: API refresh returned no providers payload (will retry if attempts remain)",
|
|
421
|
+
);
|
|
422
|
+
return false;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const map = new Map<string, CachedModelMetadata>();
|
|
426
|
+
for (const entry of providers) {
|
|
427
|
+
const p = entry as {
|
|
428
|
+
id?: string;
|
|
429
|
+
models?: Record<
|
|
430
|
+
string,
|
|
431
|
+
{
|
|
432
|
+
limit?: ModelLimit;
|
|
433
|
+
experimental?: { modes?: Record<string, unknown> };
|
|
434
|
+
}
|
|
435
|
+
>;
|
|
436
|
+
};
|
|
437
|
+
if (!p?.id || !p.models || typeof p.models !== "object") continue;
|
|
438
|
+
for (const [modelId, model] of Object.entries(p.models)) {
|
|
439
|
+
setCachedModelMetadata(map, `${p.id}/${modelId}`, model);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const previousSize = apiCache?.size ?? null;
|
|
444
|
+
apiCache = map;
|
|
445
|
+
apiLoadedAt = Date.now();
|
|
446
|
+
// Persist the freshly-resolved (sane-filtered) limits so the next process
|
|
447
|
+
// cold-starts with the real values instead of the 128k default.
|
|
448
|
+
persistApiCache();
|
|
449
|
+
|
|
450
|
+
if (previousSize === null) {
|
|
451
|
+
sessionLog(
|
|
452
|
+
"global",
|
|
453
|
+
`models-dev-cache: API layer loaded ${map.size} model metadata entries`,
|
|
454
|
+
);
|
|
455
|
+
} else if (previousSize !== map.size) {
|
|
456
|
+
sessionLog(
|
|
457
|
+
"global",
|
|
458
|
+
`models-dev-cache: API layer loaded ${map.size} model metadata entries (was ${previousSize})`,
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
return true;
|
|
462
|
+
} catch (error) {
|
|
463
|
+
sessionLog(
|
|
464
|
+
"global",
|
|
465
|
+
"models-dev-cache: API refresh failed:",
|
|
466
|
+
error instanceof Error ? error.message : String(error),
|
|
467
|
+
);
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Resolve a model's prompt limit from OpenCode's SDK (`config.providers()`),
|
|
474
|
+
* the single source of truth: it already merges models.dev + compiled-in
|
|
475
|
+
* snapshot + opencode.json overrides + auth-plugin caps (e.g. the Codex-OAuth
|
|
476
|
+
* gpt-5.5 400k cap). We deliberately do NOT read OpenCode's `models.json` file
|
|
477
|
+
* ourselves — a torn read of that file mid-write produced garbage limits, and a
|
|
478
|
+
* stale on-disk copy out-voted the live auth-resolved cap (922k vs the real
|
|
479
|
+
* 400k). OpenCode reads that file safely within its own process and exposes the
|
|
480
|
+
* merged result here.
|
|
481
|
+
*
|
|
482
|
+
* Resolution:
|
|
483
|
+
* 1. Seed `apiCache` from the persisted last-known-good file once (cold start).
|
|
484
|
+
* 2. Resolve the sane raw SDK metadata into its output-reserved usable value.
|
|
485
|
+
* 3. `undefined` when the SDK hasn't reported this model yet → the caller
|
|
486
|
+
* defaults / retries (the startup warm retries when OpenCode isn't ready).
|
|
487
|
+
*
|
|
488
|
+
* OpenCode-only: Pi never warms `apiCache` (it resolves from its own
|
|
489
|
+
* `ctx.model.contextWindow`), so for Pi this returns `undefined` and Pi's
|
|
490
|
+
* own resolution path is used.
|
|
491
|
+
*/
|
|
492
|
+
export function getSdkWindowGeometry(
|
|
493
|
+
providerID: string,
|
|
494
|
+
modelID: string,
|
|
495
|
+
detectedContextLimit?: number,
|
|
496
|
+
options?: {
|
|
497
|
+
detectedLimitProvenance?: ContextLimitProvenance;
|
|
498
|
+
harness?: "opencode" | "pi";
|
|
499
|
+
},
|
|
500
|
+
): WindowGeometryResult | undefined {
|
|
501
|
+
loadPersistedApiCacheOnce();
|
|
502
|
+
const metadata = lookupMetadataWithTagFallback(apiCache, providerID, modelID);
|
|
503
|
+
if (!metadata) return undefined;
|
|
504
|
+
const rawContext = metadata.contextLimit ?? metadata.limit;
|
|
505
|
+
const promptOnlyDetected =
|
|
506
|
+
options?.detectedLimitProvenance === "prompt_only" && isFinitePositive(detectedContextLimit)
|
|
507
|
+
? detectedContextLimit
|
|
508
|
+
: undefined;
|
|
509
|
+
const result = deriveWindowGeometry(
|
|
510
|
+
providerID,
|
|
511
|
+
modelID,
|
|
512
|
+
{
|
|
513
|
+
context: rawContext,
|
|
514
|
+
input: metadata.inputLimit,
|
|
515
|
+
output: metadata.outputLimit,
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
overlay: resolveWindowOverlayFacts(providerID, modelID, getWindowOverlay()),
|
|
519
|
+
outputReserveOverride: resolveOutputReserve(providerID, modelID),
|
|
520
|
+
harness: options?.harness ?? "opencode",
|
|
521
|
+
contextCap:
|
|
522
|
+
promptOnlyDetected === undefined && isFinitePositive(detectedContextLimit)
|
|
523
|
+
? detectedContextLimit
|
|
524
|
+
: undefined,
|
|
525
|
+
},
|
|
526
|
+
);
|
|
527
|
+
if (!result || promptOnlyDetected === undefined) return result;
|
|
528
|
+
// A declared input cap bounds the prompt wall; without one the wall is
|
|
529
|
+
// already pre-carved and may exceed the catalog-derived window.
|
|
530
|
+
const usableSoft = isFinitePositive(metadata.inputLimit)
|
|
531
|
+
? Math.min(promptOnlyDetected, result.usableSoft)
|
|
532
|
+
: promptOnlyDetected;
|
|
533
|
+
return {
|
|
534
|
+
...result,
|
|
535
|
+
usableSoft,
|
|
536
|
+
usableHard: Math.max(usableSoft, Math.min(result.usableHard, promptOnlyDetected)),
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
export function getSdkContextLimit(
|
|
541
|
+
providerID: string,
|
|
542
|
+
modelID: string,
|
|
543
|
+
detectedContextLimit?: number,
|
|
544
|
+
options?: {
|
|
545
|
+
reservation?: "default" | "none";
|
|
546
|
+
detectedLimitProvenance?: ContextLimitProvenance;
|
|
547
|
+
},
|
|
548
|
+
): number | undefined {
|
|
549
|
+
if (options?.reservation !== "none") {
|
|
550
|
+
return getSdkWindowGeometry(providerID, modelID, detectedContextLimit, {
|
|
551
|
+
detectedLimitProvenance: options?.detectedLimitProvenance,
|
|
552
|
+
})?.usableSoft;
|
|
553
|
+
}
|
|
554
|
+
loadPersistedApiCacheOnce();
|
|
555
|
+
const metadata = lookupMetadataWithTagFallback(apiCache, providerID, modelID);
|
|
556
|
+
if (!metadata) return undefined;
|
|
557
|
+
const rawContext = metadata.contextLimit ?? metadata.limit;
|
|
558
|
+
const promptOnlyDetected =
|
|
559
|
+
options?.detectedLimitProvenance === "prompt_only" && isFinitePositive(detectedContextLimit)
|
|
560
|
+
? detectedContextLimit
|
|
561
|
+
: undefined;
|
|
562
|
+
const context =
|
|
563
|
+
promptOnlyDetected === undefined &&
|
|
564
|
+
isFinitePositive(detectedContextLimit) &&
|
|
565
|
+
isFinitePositive(rawContext)
|
|
566
|
+
? Math.min(rawContext, detectedContextLimit)
|
|
567
|
+
: promptOnlyDetected === undefined && isFinitePositive(detectedContextLimit)
|
|
568
|
+
? detectedContextLimit
|
|
569
|
+
: rawContext;
|
|
570
|
+
const inputCandidates = [metadata.inputLimit, promptOnlyDetected].filter(isFinitePositive);
|
|
571
|
+
const input = inputCandidates.length > 0 ? Math.min(...inputCandidates) : undefined;
|
|
572
|
+
return resolveLimit(
|
|
573
|
+
{
|
|
574
|
+
context,
|
|
575
|
+
input,
|
|
576
|
+
output: metadata.outputLimit,
|
|
577
|
+
},
|
|
578
|
+
providerID,
|
|
579
|
+
modelID,
|
|
580
|
+
options?.reservation === "none" ? 0 : undefined,
|
|
581
|
+
);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Return only a provider-declared input cap. A combined context window is useful
|
|
586
|
+
* for scheduling but is not safe as a fail-closed prompt boundary.
|
|
587
|
+
*/
|
|
588
|
+
/** Resolve image-input support from the same models.dev metadata cache as limits. */
|
|
589
|
+
export function modelSupportsVision(providerID: string, modelID: string): boolean {
|
|
590
|
+
loadPersistedApiCacheOnce();
|
|
591
|
+
if (!apiCache) return false;
|
|
592
|
+
const exact = apiCache.get(`${providerID}/${modelID}`);
|
|
593
|
+
if (exact?.vision === true) return true;
|
|
594
|
+
const colon = modelID.lastIndexOf(":");
|
|
595
|
+
return colon > 0
|
|
596
|
+
? apiCache.get(`${providerID}/${modelID.slice(0, colon)}`)?.vision === true
|
|
597
|
+
: false;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
export function getSdkOutputLimit(providerID: string, modelID: string): number | undefined {
|
|
601
|
+
loadPersistedApiCacheOnce();
|
|
602
|
+
return lookupMetadataWithTagFallback(apiCache, providerID, modelID)?.outputLimit;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
export function getSdkInputLimit(providerID: string, modelID: string): number | undefined {
|
|
606
|
+
loadPersistedApiCacheOnce();
|
|
607
|
+
if (!apiCache) return undefined;
|
|
608
|
+
const direct = apiCache.get(`${providerID}/${modelID}`)?.inputLimit;
|
|
609
|
+
if (isSaneLimit(direct)) return direct;
|
|
610
|
+
const colon = modelID.indexOf(":");
|
|
611
|
+
if (colon > 0) {
|
|
612
|
+
const tagless = apiCache.get(`${providerID}/${modelID.slice(0, colon)}`)?.inputLimit;
|
|
613
|
+
if (isSaneLimit(tagless)) return tagless;
|
|
614
|
+
}
|
|
615
|
+
return undefined;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* Look up a model's limit in the cache, with an ollama-style tag-suffix
|
|
620
|
+
* fallback. ollama invokes cloud models with a tag at runtime
|
|
621
|
+
* (`deepseek-v4-pro:cloud`) while the underlying metadata key is tag-less
|
|
622
|
+
* (`deepseek-v4-pro`), so an exact-only match misses.
|
|
623
|
+
*
|
|
624
|
+
* Strategy: exact match first (never collapses a legitimately-tagged model),
|
|
625
|
+
* then retry once with the last `:tag` segment stripped.
|
|
626
|
+
*/
|
|
627
|
+
function lookupMetadataWithTagFallback(
|
|
628
|
+
cache: Map<string, CachedModelMetadata> | null,
|
|
629
|
+
providerID: string,
|
|
630
|
+
modelID: string,
|
|
631
|
+
): CachedModelMetadata | undefined {
|
|
632
|
+
if (!cache) return undefined;
|
|
633
|
+
const exact = cache.get(`${providerID}/${modelID}`);
|
|
634
|
+
if (exact) return exact;
|
|
635
|
+
|
|
636
|
+
const colonIdx = modelID.lastIndexOf(":");
|
|
637
|
+
if (colonIdx > 0) {
|
|
638
|
+
return cache.get(`${providerID}/${modelID.slice(0, colonIdx)}`);
|
|
639
|
+
}
|
|
640
|
+
return undefined;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/** Clear in-memory caches (for testing and the regression-recovery refetch). */
|
|
644
|
+
export function clearModelsDevCache(): void {
|
|
645
|
+
apiCache = null;
|
|
646
|
+
apiLoadedAt = 0;
|
|
647
|
+
persistSeedLoaded = false;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/** Inspection helpers (for logging / debugging). */
|
|
651
|
+
export function getModelsDevCacheState(): {
|
|
652
|
+
apiLoaded: boolean;
|
|
653
|
+
apiCount: number;
|
|
654
|
+
apiAgeMs: number;
|
|
655
|
+
} {
|
|
656
|
+
return {
|
|
657
|
+
apiLoaded: apiCache !== null,
|
|
658
|
+
apiCount: apiCache?.size ?? 0,
|
|
659
|
+
apiAgeMs: apiLoadedAt > 0 ? Date.now() - apiLoadedAt : -1,
|
|
660
|
+
};
|
|
661
|
+
}
|