@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,838 @@
|
|
|
1
|
+
import type { createOpencodeClient } from "@opencode-ai/sdk";
|
|
2
|
+
|
|
3
|
+
import { detectOverflow } from "../features/magic-context/overflow-detection";
|
|
4
|
+
import { HiddenCompletionRefusal } from "../hooks/magic-context/compartment-runner-types";
|
|
5
|
+
import { HiddenAgentStepLimit } from "../v2/hooks/hidden-child";
|
|
6
|
+
import {
|
|
7
|
+
describeAssistantError,
|
|
8
|
+
describeAssistantSettlement,
|
|
9
|
+
extractLatestAssistantFailure,
|
|
10
|
+
extractLatestAssistantText,
|
|
11
|
+
} from "./assistant-message-extractor";
|
|
12
|
+
import { log } from "./logger";
|
|
13
|
+
import type { ModelInput } from "./model-resolution";
|
|
14
|
+
import { sanitizeDiagnosticText } from "./redaction";
|
|
15
|
+
import { parseProviderModel, toModelEntry } from "./resolve-fallbacks";
|
|
16
|
+
|
|
17
|
+
type Client = ReturnType<typeof createOpencodeClient> | undefined;
|
|
18
|
+
|
|
19
|
+
export type PromptTransport = ((args: PromptArgs) => Promise<void>) & {
|
|
20
|
+
readonly childSessionId?: string;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** Max time to wait for the best-effort child-session abort HTTP call before
|
|
24
|
+
* giving up on its response (the abort still proceeds server-side). Keeps a
|
|
25
|
+
* wedged abort endpoint from masking the original timeout/abort error. */
|
|
26
|
+
const ABORT_CALL_TIMEOUT_MS = 3000;
|
|
27
|
+
|
|
28
|
+
export type PromptBody = {
|
|
29
|
+
model?: { providerID: string; modelID: string };
|
|
30
|
+
/** OpenCode variant; Pi's facade also uses it as the active thinking level. */
|
|
31
|
+
variant?: string;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export type PromptArgs = {
|
|
36
|
+
path: { id: string };
|
|
37
|
+
body: PromptBody;
|
|
38
|
+
signal?: AbortSignal;
|
|
39
|
+
[key: string]: unknown;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Keep a prompt body independent from SDK/client mutation. Some prompt facades
|
|
44
|
+
* normalize or consume request bodies while handling a failed attempt; fallback
|
|
45
|
+
* attempts must start from the original system prompt and request body every time.
|
|
46
|
+
*/
|
|
47
|
+
function copyPromptArgs(args: PromptArgs, body: PromptBody): PromptArgs {
|
|
48
|
+
return { ...args, body: { ...body } };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface PromptAttemptInfo {
|
|
52
|
+
/** Human-readable model label used in logs ("primary" or "provider/model"). */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Zero-based attempt index: 0 is primary, 1+ are fallback models. */
|
|
55
|
+
attemptIndex: number;
|
|
56
|
+
/** True for configured fallback models, false for the primary attempt. */
|
|
57
|
+
isFallback: boolean;
|
|
58
|
+
/** Total attempted models including the primary and all configured fallbacks. */
|
|
59
|
+
totalAttempts: number;
|
|
60
|
+
/** Explicit model override for this attempt, when one was supplied. */
|
|
61
|
+
model?: { providerID: string; modelID: string };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface PromptRetryOptions {
|
|
65
|
+
transport?: PromptTransport;
|
|
66
|
+
timeoutMs?: number;
|
|
67
|
+
/** External abort signal — cancels the in-flight LLM prompt immediately when aborted */
|
|
68
|
+
signal?: AbortSignal;
|
|
69
|
+
/**
|
|
70
|
+
* Ordered list of "provider/modelID" alternates to try if the primary call
|
|
71
|
+
* (and its single-suggestion retry) fails. Empty / undefined = no fallback
|
|
72
|
+
* iteration (legacy behavior).
|
|
73
|
+
*
|
|
74
|
+
* Fallback policy:
|
|
75
|
+
* - Each fallback gets the FULL `timeoutMs` budget (per-attempt, not total).
|
|
76
|
+
* - Suggestion-retry runs inside each attempt (so "did you mean X?" errors
|
|
77
|
+
* still self-heal at the primary AND at each fallback).
|
|
78
|
+
* - Iteration stops immediately on abort/timeout/context-overflow errors —
|
|
79
|
+
* fallbacks won't help and the caller's emergency-recovery path needs
|
|
80
|
+
* to handle these.
|
|
81
|
+
* - On all-failed, the LAST error is thrown (matches legacy behavior when
|
|
82
|
+
* `fallbackModels` is empty).
|
|
83
|
+
*/
|
|
84
|
+
fallbackModels?: readonly ModelInput[];
|
|
85
|
+
/**
|
|
86
|
+
* Identifier for structured logging (e.g. "dreamer:consolidate",
|
|
87
|
+
* "historian", "compressor", "dreamer"). Helps correlate fallback
|
|
88
|
+
* attempts to a specific call site in `magic-context.log`. Defaults to
|
|
89
|
+
* "subagent" if not provided.
|
|
90
|
+
*/
|
|
91
|
+
callContext?: string;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface ValidatedPromptRetryOptions<TOutput, TValidated> extends PromptRetryOptions {
|
|
95
|
+
/**
|
|
96
|
+
* Fetch the output produced by the just-completed prompt attempt. This is
|
|
97
|
+
* intentionally caller-owned because OpenCode exposes results via session
|
|
98
|
+
* messages and each caller validates a different shape.
|
|
99
|
+
*/
|
|
100
|
+
fetchOutput: (args: PromptArgs, attempt: PromptAttemptInfo) => Promise<TOutput>;
|
|
101
|
+
/**
|
|
102
|
+
* Validate and optionally transform the fetched output. Throw to reject this
|
|
103
|
+
* model's output and advance to the next configured fallback model.
|
|
104
|
+
*/
|
|
105
|
+
validateOutput: (
|
|
106
|
+
output: TOutput,
|
|
107
|
+
attempt: PromptAttemptInfo,
|
|
108
|
+
) => TValidated | Promise<TValidated>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface ValidatedPromptRetryResult<TOutput, TValidated> {
|
|
112
|
+
output: TOutput;
|
|
113
|
+
validated: TValidated;
|
|
114
|
+
attempt: PromptAttemptInfo;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export type PromptFailureClass =
|
|
118
|
+
| "provider_timeout"
|
|
119
|
+
| "provider_error"
|
|
120
|
+
| "local_refusal"
|
|
121
|
+
| "step_limit"
|
|
122
|
+
| "empty_completion"
|
|
123
|
+
| "no_models"
|
|
124
|
+
| "child_aborted"
|
|
125
|
+
| "parse_failed"
|
|
126
|
+
| "unknown";
|
|
127
|
+
|
|
128
|
+
/** Diagnostic facts retained when a validated child prompt ultimately fails. */
|
|
129
|
+
export interface PromptFailureDetail {
|
|
130
|
+
failureClass: PromptFailureClass;
|
|
131
|
+
modelAttempted: string | null;
|
|
132
|
+
modelsTried: string[];
|
|
133
|
+
providerError: string | null;
|
|
134
|
+
timeoutMs: number | null;
|
|
135
|
+
childSessionId: string | null;
|
|
136
|
+
refusalReason?: string | null;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const promptFailureDetails = new WeakMap<object, PromptFailureDetail>();
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* True for a request timer that fired inside the host client rather than ours.
|
|
143
|
+
* Bun's fetch rejects with a DOMException named "TimeoutError" ("The operation
|
|
144
|
+
* timed out.", legacy code 23) when its default per-request timer expires, and
|
|
145
|
+
* `AbortSignal.timeout` produces the same shape. Some OpenCode 1 builds hand
|
|
146
|
+
* plugins an SDK client whose fetch keeps Bun's default timer (about five to six
|
|
147
|
+
* minutes), so a synchronous `session.prompt` that stays open for a whole agent
|
|
148
|
+
* loop fails this way while the host keeps running the child session.
|
|
149
|
+
*/
|
|
150
|
+
export function isHostTimeoutError(error: unknown): boolean {
|
|
151
|
+
return (
|
|
152
|
+
error !== null &&
|
|
153
|
+
typeof error === "object" &&
|
|
154
|
+
(error as { name?: unknown }).name === "TimeoutError"
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** Our own slice expiry (see `promptWithTimeout`) or a host request timer. */
|
|
159
|
+
export function isPromptTimeoutError(error: unknown): boolean {
|
|
160
|
+
if (isHostTimeoutError(error)) return true;
|
|
161
|
+
return error instanceof Error && /^prompt timed out after \d+ms$/.test(error.message);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export function getPromptFailureDetail(error: unknown): PromptFailureDetail | null {
|
|
165
|
+
return error !== null && typeof error === "object"
|
|
166
|
+
? (promptFailureDetails.get(error) ?? null)
|
|
167
|
+
: null;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export interface ModelSuggestionInfo {
|
|
171
|
+
providerID: string;
|
|
172
|
+
modelID: string;
|
|
173
|
+
suggestion: string;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function extractMessage(error: unknown): string {
|
|
177
|
+
if (typeof error === "string") return error;
|
|
178
|
+
if (error instanceof Error) return error.message;
|
|
179
|
+
if (typeof error === "object" && error !== null) {
|
|
180
|
+
const obj = error as Record<string, unknown>;
|
|
181
|
+
if (typeof obj.message === "string") return obj.message;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
try {
|
|
185
|
+
return JSON.stringify(error);
|
|
186
|
+
} catch (_error) {
|
|
187
|
+
return String(error);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export function parseModelSuggestion(error: unknown): ModelSuggestionInfo | null {
|
|
192
|
+
if (!error) return null;
|
|
193
|
+
|
|
194
|
+
if (typeof error === "object" && error !== null) {
|
|
195
|
+
const errObj = error as Record<string, unknown>;
|
|
196
|
+
|
|
197
|
+
if (
|
|
198
|
+
errObj.name === "ProviderModelNotFoundError" &&
|
|
199
|
+
typeof errObj.data === "object" &&
|
|
200
|
+
errObj.data !== null
|
|
201
|
+
) {
|
|
202
|
+
const data = errObj.data as Record<string, unknown>;
|
|
203
|
+
const suggestions = data.suggestions;
|
|
204
|
+
if (Array.isArray(suggestions) && typeof suggestions[0] === "string") {
|
|
205
|
+
return {
|
|
206
|
+
providerID: String(data.providerID ?? ""),
|
|
207
|
+
modelID: String(data.modelID ?? ""),
|
|
208
|
+
suggestion: suggestions[0],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
for (const key of ["data", "error", "cause"] as const) {
|
|
214
|
+
const nested = errObj[key];
|
|
215
|
+
if (nested && typeof nested === "object") {
|
|
216
|
+
const result = parseModelSuggestion(nested);
|
|
217
|
+
if (result) return result;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const message = extractMessage(error);
|
|
223
|
+
const modelMatch = message.match(/model not found:\s*([^/\s]+)\s*\/\s*([^.,\s]+)/i);
|
|
224
|
+
const suggestionMatch = message.match(/did you mean:\s*([^,?]+)/i);
|
|
225
|
+
|
|
226
|
+
if (!modelMatch || !suggestionMatch) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
providerID: modelMatch[1].trim(),
|
|
232
|
+
modelID: modelMatch[2].trim(),
|
|
233
|
+
suggestion: suggestionMatch[1].trim(),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function externalAbortMessage(signal: AbortSignal): string {
|
|
238
|
+
const reason = signal.reason;
|
|
239
|
+
return `prompt aborted by external signal${reason instanceof Error && /^lease_(?:lost|expired):/.test(reason.message) ? `: ${reason.message}` : ""}`;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
async function promptWithTimeout(
|
|
243
|
+
client: Client,
|
|
244
|
+
args: PromptArgs,
|
|
245
|
+
timeoutMs: number,
|
|
246
|
+
signal?: AbortSignal,
|
|
247
|
+
transport?: PromptTransport,
|
|
248
|
+
): Promise<void> {
|
|
249
|
+
// Bail immediately if the caller's signal is already aborted (e.g.
|
|
250
|
+
// lease loss before this attempt was scheduled). Per spec
|
|
251
|
+
// `addEventListener('abort', ...)` on an already-aborted signal fires
|
|
252
|
+
// synchronously in modern Node/Bun, but an explicit guard is clearer
|
|
253
|
+
// and avoids one wasted upstream `client.session.prompt` round-trip
|
|
254
|
+
// before `isNonRetryable` catches the cancellation at the chain loop.
|
|
255
|
+
if (signal?.aborted) {
|
|
256
|
+
throw new Error(externalAbortMessage(signal));
|
|
257
|
+
}
|
|
258
|
+
const controller = new AbortController();
|
|
259
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
260
|
+
|
|
261
|
+
// Link external signal to internal controller so external abort cancels the fetch
|
|
262
|
+
const onExternalAbort = () => controller.abort();
|
|
263
|
+
signal?.addEventListener("abort", onExternalAbort);
|
|
264
|
+
|
|
265
|
+
try {
|
|
266
|
+
const request = { ...args, signal: controller.signal };
|
|
267
|
+
if (transport) await transport(request);
|
|
268
|
+
else {
|
|
269
|
+
if (!client) throw new Error("Hidden completion transport is unavailable");
|
|
270
|
+
await client.session.prompt(request as Parameters<typeof client.session.prompt>[0]);
|
|
271
|
+
}
|
|
272
|
+
} catch (error) {
|
|
273
|
+
if (signal?.aborted) {
|
|
274
|
+
// External abort: the child run loop is an
|
|
275
|
+
// independent SERVER-SIDE fiber — cancelling our client fetch alone
|
|
276
|
+
// leaves it looping the LLM forever (issue #154). Force-stop it.
|
|
277
|
+
if (!transport || transport.childSessionId) {
|
|
278
|
+
await abortChildRun(client, transport?.childSessionId ?? args.path.id);
|
|
279
|
+
}
|
|
280
|
+
throw new Error(externalAbortMessage(signal));
|
|
281
|
+
}
|
|
282
|
+
if (controller.signal.aborted) {
|
|
283
|
+
// Our timeout fired. Same problem: abort the server-side run loop, not
|
|
284
|
+
// just our fetch, or the child keeps re-calling the LLM past the
|
|
285
|
+
// timeout (uncancellable by the user's ESC — issue #154).
|
|
286
|
+
if (!transport || transport.childSessionId) {
|
|
287
|
+
await abortChildRun(client, transport?.childSessionId ?? args.path.id);
|
|
288
|
+
}
|
|
289
|
+
throw new Error(`prompt timed out after ${timeoutMs}ms`);
|
|
290
|
+
}
|
|
291
|
+
if (isHostTimeoutError(error)) {
|
|
292
|
+
// The host client's own request timer fired. Only our side of the
|
|
293
|
+
// request ended: the child's run loop is still going on the server and
|
|
294
|
+
// would keep calling the model, so stop it the same way as above. The
|
|
295
|
+
// original error is kept so the ledger still shows which timer fired.
|
|
296
|
+
if (!transport || transport.childSessionId) {
|
|
297
|
+
await abortChildRun(client, transport?.childSessionId ?? args.path.id);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
throw error;
|
|
301
|
+
} finally {
|
|
302
|
+
clearTimeout(timeout);
|
|
303
|
+
signal?.removeEventListener("abort", onExternalAbort);
|
|
304
|
+
}
|
|
305
|
+
// Some transports resolve with an error result when their fetch is aborted.
|
|
306
|
+
// A resolved fetch does not mean the server-side child run has stopped.
|
|
307
|
+
if (signal?.aborted || controller.signal.aborted) {
|
|
308
|
+
if (!transport || transport.childSessionId) {
|
|
309
|
+
await abortChildRun(client, transport?.childSessionId ?? args.path.id);
|
|
310
|
+
}
|
|
311
|
+
throw new Error(
|
|
312
|
+
signal?.aborted
|
|
313
|
+
? externalAbortMessage(signal)
|
|
314
|
+
: `prompt timed out after ${timeoutMs}ms`,
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Force-stop a spawned child session's server-side run loop. `controller.abort()`
|
|
321
|
+
* on the prompt signal only cancels OUR client fetch; the run loop is a separate
|
|
322
|
+
* instance-scoped fiber that `POST /session/{id}/abort` interrupts. Best-effort —
|
|
323
|
+
* a failure here must not mask the original timeout/abort error.
|
|
324
|
+
*/
|
|
325
|
+
async function abortChildRun(client: Client, sessionId: string): Promise<void> {
|
|
326
|
+
if (!client) return;
|
|
327
|
+
try {
|
|
328
|
+
// Bound the abort call: it's best-effort cleanup, and if the abort
|
|
329
|
+
// endpoint itself stalls (the runner is wedged) an unbounded await here
|
|
330
|
+
// would hang the caller and MASK the original timeout/abort error that we
|
|
331
|
+
// still need to surface. Race against a short timer; the abort keeps
|
|
332
|
+
// running server-side regardless of whether we wait for its response.
|
|
333
|
+
await Promise.race([
|
|
334
|
+
client.session.abort({ path: { id: sessionId } }),
|
|
335
|
+
new Promise<void>((resolve) => setTimeout(resolve, ABORT_CALL_TIMEOUT_MS)),
|
|
336
|
+
]);
|
|
337
|
+
} catch (error) {
|
|
338
|
+
log(`[model-retry] child session abort failed for ${sessionId}: ${String(error)}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Returns true if the error indicates a NON-RETRYABLE condition where iterating
|
|
344
|
+
* to a fallback model would be pointless or harmful:
|
|
345
|
+
*
|
|
346
|
+
* - External abort (user cancellation, lease loss, etc.) — caller wants to
|
|
347
|
+
* stop, not retry.
|
|
348
|
+
* - Context overflow — same prompt will overflow on any reasonably-sized
|
|
349
|
+
* model. Caller has its own emergency-recovery path for this.
|
|
350
|
+
* - Timeout — same wall-clock budget on the same prompt is unlikely to
|
|
351
|
+
* succeed on another model. Caller decides whether to retry at a higher
|
|
352
|
+
* level (e.g. historian's MAX_HISTORIAN_RETRIES loop).
|
|
353
|
+
*
|
|
354
|
+
* Everything else (auth errors, ProviderModelNotFoundError without suggestion,
|
|
355
|
+
* rate limits, transient network failures, etc.) is considered retryable on a
|
|
356
|
+
* different model.
|
|
357
|
+
*/
|
|
358
|
+
function isNonRetryable(error: unknown, externalSignal?: AbortSignal): boolean {
|
|
359
|
+
if (
|
|
360
|
+
externalSignal?.aborted ||
|
|
361
|
+
(error instanceof HiddenCompletionRefusal && error.terminal) ||
|
|
362
|
+
error instanceof HiddenAgentStepLimit
|
|
363
|
+
)
|
|
364
|
+
return true;
|
|
365
|
+
|
|
366
|
+
if (error instanceof Error) {
|
|
367
|
+
if (error.name === "AbortError") return true;
|
|
368
|
+
// promptWithTimeout wraps both abort cases in plain `Error` with a
|
|
369
|
+
// recognizable message.
|
|
370
|
+
if (error.message === "prompt aborted by external signal") return true;
|
|
371
|
+
if (/^prompt timed out after \d+ms$/.test(error.message)) return true;
|
|
372
|
+
}
|
|
373
|
+
// A host request timer is a timeout too. Retrying would send the next model
|
|
374
|
+
// into the same child session, where it meets the same timer.
|
|
375
|
+
if (isHostTimeoutError(error)) return true;
|
|
376
|
+
|
|
377
|
+
if (detectOverflow(error).isOverflow) return true;
|
|
378
|
+
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
function shortErr(error: unknown): string {
|
|
383
|
+
if (error instanceof Error) {
|
|
384
|
+
return error.name && error.name !== "Error"
|
|
385
|
+
? `${error.name}: ${error.message}`
|
|
386
|
+
: error.message;
|
|
387
|
+
}
|
|
388
|
+
return extractMessage(error);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
type PromptFailurePhase = "prompt" | "output" | "validation";
|
|
392
|
+
|
|
393
|
+
interface FailedAttempt {
|
|
394
|
+
error: unknown;
|
|
395
|
+
failureClass: PromptFailureClass;
|
|
396
|
+
attempt: PromptAttemptInfo;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
function classifyPromptFailure(
|
|
400
|
+
error: unknown,
|
|
401
|
+
phase: PromptFailurePhase,
|
|
402
|
+
externalSignal?: AbortSignal,
|
|
403
|
+
): PromptFailureClass {
|
|
404
|
+
const message = extractMessage(error);
|
|
405
|
+
if (error instanceof HiddenCompletionRefusal) return "local_refusal";
|
|
406
|
+
if (error instanceof HiddenAgentStepLimit) return "step_limit";
|
|
407
|
+
if (externalSignal?.aborted || message === "prompt aborted by external signal") {
|
|
408
|
+
return "child_aborted";
|
|
409
|
+
}
|
|
410
|
+
if (/^prompt timed out after \d+ms$/.test(message) || isHostTimeoutError(error)) {
|
|
411
|
+
return "provider_timeout";
|
|
412
|
+
}
|
|
413
|
+
if (phase === "validation") {
|
|
414
|
+
if (/returned no (?:assistant )?output|no assistant output/i.test(message)) {
|
|
415
|
+
return "empty_completion";
|
|
416
|
+
}
|
|
417
|
+
if (error instanceof Error && error.name === "DreamerProviderOutputFailureError") {
|
|
418
|
+
return "provider_error";
|
|
419
|
+
}
|
|
420
|
+
return "parse_failed";
|
|
421
|
+
}
|
|
422
|
+
return phase === "prompt" || phase === "output" ? "provider_error" : "unknown";
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
function throwWithPromptFailure(
|
|
426
|
+
legacyError: unknown,
|
|
427
|
+
failedAttempts: FailedAttempt[],
|
|
428
|
+
args: PromptArgs,
|
|
429
|
+
timeoutMs: number,
|
|
430
|
+
transport?: PromptTransport,
|
|
431
|
+
): never {
|
|
432
|
+
const error =
|
|
433
|
+
legacyError instanceof Error ? legacyError : new Error(extractMessage(legacyError));
|
|
434
|
+
const last = failedAttempts.at(-1);
|
|
435
|
+
const failureClass = last?.failureClass ?? "unknown";
|
|
436
|
+
const providerError =
|
|
437
|
+
failureClass === "provider_error"
|
|
438
|
+
? sanitizeDiagnosticText(shortErr(last?.error ?? legacyError)).slice(0, 500)
|
|
439
|
+
: null;
|
|
440
|
+
promptFailureDetails.set(error, {
|
|
441
|
+
failureClass,
|
|
442
|
+
modelAttempted: last?.attempt.label ?? null,
|
|
443
|
+
modelsTried: failedAttempts.map((failure) => failure.attempt.label),
|
|
444
|
+
providerError,
|
|
445
|
+
timeoutMs: failureClass === "provider_timeout" ? timeoutMs : null,
|
|
446
|
+
childSessionId: transport ? (transport.childSessionId ?? null) : args.path.id || null,
|
|
447
|
+
...(last?.error instanceof HiddenCompletionRefusal
|
|
448
|
+
? {
|
|
449
|
+
refusalReason: sanitizeDiagnosticText(last.error.message).slice(0, 500),
|
|
450
|
+
}
|
|
451
|
+
: {}),
|
|
452
|
+
});
|
|
453
|
+
throw error;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Try a single prompt attempt against the supplied body, with the existing
|
|
458
|
+
* single-suggestion retry layered inside (so "did you mean X?" still self-heals
|
|
459
|
+
* per attempt). Throws on failure; returns on success.
|
|
460
|
+
*/
|
|
461
|
+
async function attemptOnce(
|
|
462
|
+
client: Client,
|
|
463
|
+
args: PromptArgs,
|
|
464
|
+
timeoutMs: number,
|
|
465
|
+
signal: AbortSignal | undefined,
|
|
466
|
+
callContext: string,
|
|
467
|
+
label: string,
|
|
468
|
+
transport?: PromptTransport,
|
|
469
|
+
): Promise<void> {
|
|
470
|
+
// Keep this snapshot separate from the object passed to the client. A
|
|
471
|
+
// failed prompt facade may rewrite its request body before rejecting; the
|
|
472
|
+
// model-suggestion retry still needs the original system prompt.
|
|
473
|
+
const originalBody = { ...args.body };
|
|
474
|
+
const attemptArgs = copyPromptArgs(args, originalBody);
|
|
475
|
+
try {
|
|
476
|
+
await promptWithTimeout(client, attemptArgs, timeoutMs, signal, transport);
|
|
477
|
+
return;
|
|
478
|
+
} catch (error) {
|
|
479
|
+
// If non-retryable (abort, overflow, timeout), bubble up immediately.
|
|
480
|
+
// Don't even try suggestion retry — caller needs the original error.
|
|
481
|
+
if (isNonRetryable(error, signal)) throw error;
|
|
482
|
+
|
|
483
|
+
const suggestion = parseModelSuggestion(error);
|
|
484
|
+
if (!suggestion || !originalBody.model) {
|
|
485
|
+
// No suggestion available — caller's fallback loop will decide
|
|
486
|
+
// whether to try the next chain entry.
|
|
487
|
+
throw error;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
log(`[${callContext}] ${label}: model not found, retrying with suggestion`, {
|
|
491
|
+
original: `${suggestion.providerID}/${suggestion.modelID}`,
|
|
492
|
+
suggested: suggestion.suggestion,
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
await promptWithTimeout(
|
|
496
|
+
client,
|
|
497
|
+
copyPromptArgs(args, {
|
|
498
|
+
...originalBody,
|
|
499
|
+
model: {
|
|
500
|
+
providerID: suggestion.providerID,
|
|
501
|
+
modelID: suggestion.suggestion,
|
|
502
|
+
},
|
|
503
|
+
}),
|
|
504
|
+
timeoutMs,
|
|
505
|
+
signal,
|
|
506
|
+
transport,
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* Run an OpenCode subagent prompt with model fallback support.
|
|
513
|
+
*
|
|
514
|
+
* Attempts the configured primary model first (whatever `args.body.model` or
|
|
515
|
+
* the registered agent default resolves to), then iterates through
|
|
516
|
+
* `options.fallbackModels` if provided. Each attempt internally retries once on
|
|
517
|
+
* the SDK's "model not found, did you mean X?" suggestion. Aborts, timeouts,
|
|
518
|
+
* and context-overflow errors short-circuit the fallback loop because retrying
|
|
519
|
+
* the same prompt against another model won't help.
|
|
520
|
+
*
|
|
521
|
+
* Behavior with `fallbackModels` empty/undefined is identical to the pre-v0.18
|
|
522
|
+
* single-suggestion retry — fully backward-compatible for callers that haven't
|
|
523
|
+
* been updated to thread a chain.
|
|
524
|
+
*/
|
|
525
|
+
export async function promptSyncWithModelSuggestionRetry(
|
|
526
|
+
client: Client,
|
|
527
|
+
args: PromptArgs,
|
|
528
|
+
options: PromptRetryOptions = {},
|
|
529
|
+
): Promise<void> {
|
|
530
|
+
const timeoutMs = options.timeoutMs ?? 300_000;
|
|
531
|
+
const callContext = options.callContext ?? "subagent";
|
|
532
|
+
const fallbacks = options.fallbackModels ?? [];
|
|
533
|
+
// Snapshot the body before the first client call. The Pi facade and the
|
|
534
|
+
// OpenCode SDK both receive this same shape, and either may mutate it while
|
|
535
|
+
// handling a failed request. Fallbacks must never inherit that mutation.
|
|
536
|
+
const baseBody = { ...args.body };
|
|
537
|
+
const baseArgs = copyPromptArgs(args, baseBody);
|
|
538
|
+
|
|
539
|
+
// Attempt 0 = whatever the agent or explicit body.model resolves to.
|
|
540
|
+
// Subsequent attempts override body.model with each fallback in order.
|
|
541
|
+
const explicitPrimaryLabel =
|
|
542
|
+
baseBody.model?.providerID && baseBody.model.modelID
|
|
543
|
+
? `${baseBody.model.providerID}/${baseBody.model.modelID}`
|
|
544
|
+
: "primary";
|
|
545
|
+
|
|
546
|
+
let lastError: unknown = null;
|
|
547
|
+
|
|
548
|
+
try {
|
|
549
|
+
await attemptOnce(
|
|
550
|
+
client,
|
|
551
|
+
baseArgs,
|
|
552
|
+
timeoutMs,
|
|
553
|
+
options.signal,
|
|
554
|
+
callContext,
|
|
555
|
+
explicitPrimaryLabel,
|
|
556
|
+
options.transport,
|
|
557
|
+
);
|
|
558
|
+
return;
|
|
559
|
+
} catch (error) {
|
|
560
|
+
lastError = error;
|
|
561
|
+
if (isNonRetryable(error, options.signal)) throw error;
|
|
562
|
+
|
|
563
|
+
if (fallbacks.length === 0) {
|
|
564
|
+
// No fallbacks configured — behave exactly like legacy: propagate
|
|
565
|
+
// the original error (which may already have had its suggestion
|
|
566
|
+
// retry attempted inside `attemptOnce`).
|
|
567
|
+
throw error;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
log(
|
|
571
|
+
`[${callContext}] primary (${explicitPrimaryLabel}) failed: ${shortErr(error)}; trying ${fallbacks.length} fallback(s)`,
|
|
572
|
+
);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// Iterate fallbacks.
|
|
576
|
+
for (let i = 0; i < fallbacks.length; i += 1) {
|
|
577
|
+
const fallback = toModelEntry(fallbacks[i]);
|
|
578
|
+
const parsed = fallback ? parseProviderModel(fallback.model) : null;
|
|
579
|
+
if (!parsed) {
|
|
580
|
+
log(`[${callContext}] skipping invalid fallback spec: ${String(fallbacks[i])}`);
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
const label = `${parsed.providerID}/${parsed.modelID}`;
|
|
585
|
+
const { variant: _primaryVariant, ...bodyWithoutPrimaryVariant } = baseBody;
|
|
586
|
+
const attemptArgs = copyPromptArgs(baseArgs, {
|
|
587
|
+
...bodyWithoutPrimaryVariant,
|
|
588
|
+
model: parsed,
|
|
589
|
+
...(fallback?.qualifier ? { variant: fallback.qualifier } : {}),
|
|
590
|
+
});
|
|
591
|
+
|
|
592
|
+
try {
|
|
593
|
+
await attemptOnce(
|
|
594
|
+
client,
|
|
595
|
+
attemptArgs,
|
|
596
|
+
timeoutMs,
|
|
597
|
+
options.signal,
|
|
598
|
+
callContext,
|
|
599
|
+
label,
|
|
600
|
+
options.transport,
|
|
601
|
+
);
|
|
602
|
+
log(
|
|
603
|
+
`[${callContext}] fallback succeeded with ${label} (attempt ${i + 2}/${fallbacks.length + 1})`,
|
|
604
|
+
);
|
|
605
|
+
return;
|
|
606
|
+
} catch (error) {
|
|
607
|
+
lastError = error;
|
|
608
|
+
if (isNonRetryable(error, options.signal)) throw error;
|
|
609
|
+
|
|
610
|
+
const remaining = fallbacks.length - i - 1;
|
|
611
|
+
if (remaining > 0) {
|
|
612
|
+
log(
|
|
613
|
+
`[${callContext}] ${label} failed: ${shortErr(error)}; ${remaining} fallback(s) left`,
|
|
614
|
+
);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
// All exhausted. Log the full chain and throw the last error so the
|
|
620
|
+
// caller's report (e.g. /ctx-dream tasks_json) still surfaces a real
|
|
621
|
+
// diagnostic.
|
|
622
|
+
log(
|
|
623
|
+
`[${callContext}] all models exhausted; tried: ${[explicitPrimaryLabel, ...fallbacks.map((fallback) => toModelEntry(fallback)?.model ?? String(fallback))].join(", ")}; last error: ${shortErr(lastError)}`,
|
|
624
|
+
);
|
|
625
|
+
throw lastError ?? new Error("All fallback models failed");
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
async function attemptAndValidate<TOutput, TValidated>(
|
|
629
|
+
client: Client,
|
|
630
|
+
args: PromptArgs,
|
|
631
|
+
timeoutMs: number,
|
|
632
|
+
signal: AbortSignal | undefined,
|
|
633
|
+
callContext: string,
|
|
634
|
+
attempt: PromptAttemptInfo,
|
|
635
|
+
options: ValidatedPromptRetryOptions<TOutput, TValidated>,
|
|
636
|
+
): Promise<ValidatedPromptRetryResult<TOutput, TValidated>> {
|
|
637
|
+
try {
|
|
638
|
+
await attemptOnce(
|
|
639
|
+
client,
|
|
640
|
+
args,
|
|
641
|
+
timeoutMs,
|
|
642
|
+
signal,
|
|
643
|
+
callContext,
|
|
644
|
+
attempt.label,
|
|
645
|
+
options.transport,
|
|
646
|
+
);
|
|
647
|
+
} catch (error) {
|
|
648
|
+
throw {
|
|
649
|
+
error,
|
|
650
|
+
failureClass: classifyPromptFailure(error, "prompt", signal),
|
|
651
|
+
attempt,
|
|
652
|
+
} satisfies FailedAttempt;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
let output: TOutput;
|
|
656
|
+
try {
|
|
657
|
+
output = await options.fetchOutput(args, attempt);
|
|
658
|
+
} catch (error) {
|
|
659
|
+
throw {
|
|
660
|
+
error,
|
|
661
|
+
failureClass: classifyPromptFailure(error, "output", signal),
|
|
662
|
+
attempt,
|
|
663
|
+
} satisfies FailedAttempt;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
try {
|
|
667
|
+
if (!extractLatestAssistantText(output)) {
|
|
668
|
+
const assistantFailure = extractLatestAssistantFailure(output);
|
|
669
|
+
if (assistantFailure) {
|
|
670
|
+
const error = new Error(
|
|
671
|
+
`Host recorded assistant error: ${describeAssistantError(assistantFailure.error)}`,
|
|
672
|
+
);
|
|
673
|
+
Object.assign(error, {
|
|
674
|
+
name: "DreamerProviderOutputFailureError",
|
|
675
|
+
transient: true,
|
|
676
|
+
});
|
|
677
|
+
throw error;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
const validated = await options.validateOutput(output, attempt);
|
|
681
|
+
return { output, validated, attempt };
|
|
682
|
+
} catch (error) {
|
|
683
|
+
if (error instanceof Error && /no (?:assistant )?output/i.test(error.message)) {
|
|
684
|
+
error.message += ` (${describeAssistantSettlement(output)})`;
|
|
685
|
+
}
|
|
686
|
+
throw {
|
|
687
|
+
error,
|
|
688
|
+
failureClass: classifyPromptFailure(error, "validation", signal),
|
|
689
|
+
attempt,
|
|
690
|
+
} satisfies FailedAttempt;
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
/**
|
|
695
|
+
* Run a prompt across the configured model chain and retain which attempt failed.
|
|
696
|
+
* Output validation remains caller-owned so empty completions and malformed
|
|
697
|
+
* responses can be distinguished from provider transport failures.
|
|
698
|
+
*/
|
|
699
|
+
export async function promptSyncWithValidatedOutputRetry<TOutput, TValidated = TOutput>(
|
|
700
|
+
client: Client,
|
|
701
|
+
args: PromptArgs,
|
|
702
|
+
options: ValidatedPromptRetryOptions<TOutput, TValidated>,
|
|
703
|
+
): Promise<ValidatedPromptRetryResult<TOutput, TValidated>> {
|
|
704
|
+
const timeoutMs = options.timeoutMs ?? 300_000;
|
|
705
|
+
const callContext = options.callContext ?? "subagent";
|
|
706
|
+
const fallbacks = options.fallbackModels ?? [];
|
|
707
|
+
// Snapshot the body before the first client call. The Pi facade and the
|
|
708
|
+
// OpenCode SDK both receive this same shape, and either may mutate it while
|
|
709
|
+
// handling a failed request. Fallbacks must never inherit that mutation.
|
|
710
|
+
const baseBody = { ...args.body };
|
|
711
|
+
const baseArgs = copyPromptArgs(args, baseBody);
|
|
712
|
+
|
|
713
|
+
const explicitPrimaryLabel =
|
|
714
|
+
baseBody.model?.providerID && baseBody.model.modelID
|
|
715
|
+
? `${baseBody.model.providerID}/${baseBody.model.modelID}`
|
|
716
|
+
: "primary";
|
|
717
|
+
const totalAttempts = fallbacks.length + 1;
|
|
718
|
+
const failedAttempts: FailedAttempt[] = [];
|
|
719
|
+
let firstError: unknown = null;
|
|
720
|
+
let lastError: unknown = null;
|
|
721
|
+
|
|
722
|
+
try {
|
|
723
|
+
return await attemptAndValidate(
|
|
724
|
+
client,
|
|
725
|
+
baseArgs,
|
|
726
|
+
timeoutMs,
|
|
727
|
+
options.signal,
|
|
728
|
+
callContext,
|
|
729
|
+
{
|
|
730
|
+
label: explicitPrimaryLabel,
|
|
731
|
+
attemptIndex: 0,
|
|
732
|
+
isFallback: false,
|
|
733
|
+
totalAttempts,
|
|
734
|
+
model: baseBody.model,
|
|
735
|
+
},
|
|
736
|
+
options,
|
|
737
|
+
);
|
|
738
|
+
} catch (caught) {
|
|
739
|
+
const failure = caught as FailedAttempt;
|
|
740
|
+
failedAttempts.push(failure);
|
|
741
|
+
firstError = failure.error;
|
|
742
|
+
lastError = failure.error;
|
|
743
|
+
if (isNonRetryable(failure.error, options.signal)) {
|
|
744
|
+
throwWithPromptFailure(
|
|
745
|
+
failure.error,
|
|
746
|
+
failedAttempts,
|
|
747
|
+
args,
|
|
748
|
+
timeoutMs,
|
|
749
|
+
options.transport,
|
|
750
|
+
);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
if (fallbacks.length === 0) {
|
|
754
|
+
throwWithPromptFailure(
|
|
755
|
+
failure.error,
|
|
756
|
+
failedAttempts,
|
|
757
|
+
args,
|
|
758
|
+
timeoutMs,
|
|
759
|
+
options.transport,
|
|
760
|
+
);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
log(
|
|
764
|
+
`[${callContext}] primary (${explicitPrimaryLabel}) failed validation/prompt: ${shortErr(failure.error)}; trying ${fallbacks.length} fallback(s)`,
|
|
765
|
+
);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
for (let i = 0; i < fallbacks.length; i += 1) {
|
|
769
|
+
const fallback = toModelEntry(fallbacks[i]);
|
|
770
|
+
const parsed = fallback ? parseProviderModel(fallback.model) : null;
|
|
771
|
+
if (!parsed) {
|
|
772
|
+
log(`[${callContext}] skipping invalid fallback spec: ${String(fallbacks[i])}`);
|
|
773
|
+
continue;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
const label = `${parsed.providerID}/${parsed.modelID}`;
|
|
777
|
+
const { variant: _primaryVariant, ...bodyWithoutPrimaryVariant } = baseBody;
|
|
778
|
+
const attemptArgs = copyPromptArgs(baseArgs, {
|
|
779
|
+
...bodyWithoutPrimaryVariant,
|
|
780
|
+
model: parsed,
|
|
781
|
+
...(fallback?.qualifier ? { variant: fallback.qualifier } : {}),
|
|
782
|
+
});
|
|
783
|
+
const attempt: PromptAttemptInfo = {
|
|
784
|
+
label,
|
|
785
|
+
attemptIndex: i + 1,
|
|
786
|
+
isFallback: true,
|
|
787
|
+
totalAttempts,
|
|
788
|
+
model: parsed,
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
try {
|
|
792
|
+
const result = await attemptAndValidate(
|
|
793
|
+
client,
|
|
794
|
+
attemptArgs,
|
|
795
|
+
timeoutMs,
|
|
796
|
+
options.signal,
|
|
797
|
+
callContext,
|
|
798
|
+
attempt,
|
|
799
|
+
options,
|
|
800
|
+
);
|
|
801
|
+
log(
|
|
802
|
+
`[${callContext}] fallback succeeded with ${label} (attempt ${i + 2}/${fallbacks.length + 1})`,
|
|
803
|
+
);
|
|
804
|
+
return result;
|
|
805
|
+
} catch (caught) {
|
|
806
|
+
const failure = caught as FailedAttempt;
|
|
807
|
+
failedAttempts.push(failure);
|
|
808
|
+
lastError = failure.error;
|
|
809
|
+
if (isNonRetryable(failure.error, options.signal)) {
|
|
810
|
+
throwWithPromptFailure(
|
|
811
|
+
failure.error,
|
|
812
|
+
failedAttempts,
|
|
813
|
+
args,
|
|
814
|
+
timeoutMs,
|
|
815
|
+
options.transport,
|
|
816
|
+
);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
const remaining = fallbacks.length - i - 1;
|
|
820
|
+
if (remaining > 0) {
|
|
821
|
+
log(
|
|
822
|
+
`[${callContext}] ${label} failed validation/prompt: ${shortErr(failure.error)}; ${remaining} fallback(s) left`,
|
|
823
|
+
);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
log(
|
|
829
|
+
`[${callContext}] all models exhausted; tried: ${failedAttempts.map((failure) => failure.attempt.label).join(", ")}; original error: ${shortErr(firstError)}; last error: ${shortErr(lastError)}`,
|
|
830
|
+
);
|
|
831
|
+
const cause = lastError ?? firstError;
|
|
832
|
+
const exhausted =
|
|
833
|
+
cause instanceof Error
|
|
834
|
+
? cause
|
|
835
|
+
: new Error(String(cause ?? "All fallback models failed validation"));
|
|
836
|
+
exhausted.message = `All models exhausted (${failedAttempts.map((failure) => failure.attempt.label).join(", ")}): ${exhausted.message}`;
|
|
837
|
+
throwWithPromptFailure(exhausted, failedAttempts, args, timeoutMs, options.transport);
|
|
838
|
+
}
|