@coool/opencode-adaptive 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +98 -2
- package/dist/adapters/codex-capacity/index.d.ts +5 -0
- package/dist/adapters/codex-capacity/index.d.ts.map +1 -0
- package/dist/adapters/codex-capacity/index.js +5 -0
- package/dist/adapters/codex-capacity/index.js.map +1 -0
- package/dist/adapters/codex-capacity/parse.d.ts +28 -0
- package/dist/adapters/codex-capacity/parse.d.ts.map +1 -0
- package/dist/adapters/codex-capacity/parse.js +130 -0
- package/dist/adapters/codex-capacity/parse.js.map +1 -0
- package/dist/adapters/codex-capacity/reading.d.ts +10 -0
- package/dist/adapters/codex-capacity/reading.d.ts.map +1 -0
- package/dist/adapters/codex-capacity/reading.js +45 -0
- package/dist/adapters/codex-capacity/reading.js.map +1 -0
- package/dist/adapters/codex-capacity/sensor.d.ts +24 -0
- package/dist/adapters/codex-capacity/sensor.d.ts.map +1 -0
- package/dist/adapters/codex-capacity/sensor.js +30 -0
- package/dist/adapters/codex-capacity/sensor.js.map +1 -0
- package/dist/adapters/codex-capacity/types.d.ts +35 -0
- package/dist/adapters/codex-capacity/types.d.ts.map +1 -0
- package/dist/adapters/codex-capacity/types.js +4 -0
- package/dist/adapters/codex-capacity/types.js.map +1 -0
- package/dist/adapters/opencode/escalation-tool.d.ts +52 -0
- package/dist/adapters/opencode/escalation-tool.d.ts.map +1 -0
- package/dist/adapters/opencode/escalation-tool.js +59 -0
- package/dist/adapters/opencode/escalation-tool.js.map +1 -0
- package/dist/adapters/opencode/events.d.ts +24 -0
- package/dist/adapters/opencode/events.d.ts.map +1 -0
- package/dist/adapters/opencode/events.js +68 -0
- package/dist/adapters/opencode/events.js.map +1 -0
- package/dist/adapters/opencode/hooks.d.ts +35 -0
- package/dist/adapters/opencode/hooks.d.ts.map +1 -0
- package/dist/adapters/opencode/hooks.js +12 -0
- package/dist/adapters/opencode/hooks.js.map +1 -0
- package/dist/adapters/opencode/index.d.ts +17 -0
- package/dist/adapters/opencode/index.d.ts.map +1 -0
- package/dist/adapters/opencode/index.js +9 -0
- package/dist/adapters/opencode/index.js.map +1 -0
- package/dist/adapters/opencode/inventory.d.ts +31 -0
- package/dist/adapters/opencode/inventory.d.ts.map +1 -0
- package/dist/adapters/opencode/inventory.js +53 -0
- package/dist/adapters/opencode/inventory.js.map +1 -0
- package/dist/adapters/opencode/report.d.ts +92 -0
- package/dist/adapters/opencode/report.d.ts.map +1 -0
- package/dist/adapters/opencode/report.js +145 -0
- package/dist/adapters/opencode/report.js.map +1 -0
- package/dist/adapters/opencode/session-ops.d.ts +40 -0
- package/dist/adapters/opencode/session-ops.d.ts.map +1 -0
- package/dist/adapters/opencode/session-ops.js +32 -0
- package/dist/adapters/opencode/session-ops.js.map +1 -0
- package/dist/adapters/opencode/storage.d.ts +16 -0
- package/dist/adapters/opencode/storage.d.ts.map +1 -0
- package/dist/adapters/opencode/storage.js +8 -0
- package/dist/adapters/opencode/storage.js.map +1 -0
- package/dist/adapters/opencode/tier-tool.d.ts +38 -0
- package/dist/adapters/opencode/tier-tool.d.ts.map +1 -0
- package/dist/adapters/opencode/tier-tool.js +72 -0
- package/dist/adapters/opencode/tier-tool.js.map +1 -0
- package/dist/adapters/opencode/types.d.ts +102 -0
- package/dist/adapters/opencode/types.d.ts.map +1 -0
- package/dist/adapters/opencode/types.js +2 -0
- package/dist/adapters/opencode/types.js.map +1 -0
- package/dist/core/compatibility/gate.d.ts +10 -0
- package/dist/core/compatibility/gate.d.ts.map +1 -0
- package/dist/core/compatibility/gate.js +55 -0
- package/dist/core/compatibility/gate.js.map +1 -0
- package/dist/core/compatibility/index.d.ts +3 -0
- package/dist/core/compatibility/index.d.ts.map +1 -0
- package/dist/core/compatibility/index.js +3 -0
- package/dist/core/compatibility/index.js.map +1 -0
- package/dist/core/compatibility/types.d.ts +54 -0
- package/dist/core/compatibility/types.d.ts.map +1 -0
- package/dist/core/compatibility/types.js +27 -0
- package/dist/core/compatibility/types.js.map +1 -0
- package/dist/core/scheduler/admit.d.ts +7 -0
- package/dist/core/scheduler/admit.d.ts.map +1 -0
- package/dist/core/scheduler/admit.js +153 -0
- package/dist/core/scheduler/admit.js.map +1 -0
- package/dist/core/scheduler/escalate.d.ts +7 -0
- package/dist/core/scheduler/escalate.d.ts.map +1 -0
- package/dist/core/scheduler/escalate.js +56 -0
- package/dist/core/scheduler/escalate.js.map +1 -0
- package/dist/core/scheduler/index.d.ts +5 -0
- package/dist/core/scheduler/index.d.ts.map +1 -0
- package/dist/core/scheduler/index.js +5 -0
- package/dist/core/scheduler/index.js.map +1 -0
- package/dist/core/scheduler/mode.d.ts +9 -0
- package/dist/core/scheduler/mode.d.ts.map +1 -0
- package/dist/core/scheduler/mode.js +10 -0
- package/dist/core/scheduler/mode.js.map +1 -0
- package/dist/core/scheduler/types.d.ts +143 -0
- package/dist/core/scheduler/types.d.ts.map +1 -0
- package/dist/core/scheduler/types.js +74 -0
- package/dist/core/scheduler/types.js.map +1 -0
- package/dist/core/tier-policy/index.d.ts +4 -0
- package/dist/core/tier-policy/index.d.ts.map +1 -0
- package/dist/core/tier-policy/index.js +4 -0
- package/dist/core/tier-policy/index.js.map +1 -0
- package/dist/core/tier-policy/resolve.d.ts +19 -0
- package/dist/core/tier-policy/resolve.d.ts.map +1 -0
- package/dist/core/tier-policy/resolve.js +52 -0
- package/dist/core/tier-policy/resolve.js.map +1 -0
- package/dist/core/tier-policy/tier-list.d.ts +11 -0
- package/dist/core/tier-policy/tier-list.d.ts.map +1 -0
- package/dist/core/tier-policy/tier-list.js +23 -0
- package/dist/core/tier-policy/tier-list.js.map +1 -0
- package/dist/core/tier-policy/types.d.ts +85 -0
- package/dist/core/tier-policy/types.d.ts.map +1 -0
- package/dist/core/tier-policy/types.js +45 -0
- package/dist/core/tier-policy/types.js.map +1 -0
- package/dist/core/work-unit/index.d.ts +4 -0
- package/dist/core/work-unit/index.d.ts.map +1 -0
- package/dist/core/work-unit/index.js +4 -0
- package/dist/core/work-unit/index.js.map +1 -0
- package/dist/core/work-unit/interruption.d.ts +8 -0
- package/dist/core/work-unit/interruption.d.ts.map +1 -0
- package/dist/core/work-unit/interruption.js +12 -0
- package/dist/core/work-unit/interruption.js.map +1 -0
- package/dist/core/work-unit/tracker.d.ts +46 -0
- package/dist/core/work-unit/tracker.d.ts.map +1 -0
- package/dist/core/work-unit/tracker.js +136 -0
- package/dist/core/work-unit/tracker.js.map +1 -0
- package/dist/core/work-unit/types.d.ts +146 -0
- package/dist/core/work-unit/types.d.ts.map +1 -0
- package/dist/core/work-unit/types.js +23 -0
- package/dist/core/work-unit/types.js.map +1 -0
- package/dist/execution/continuation/execute.d.ts +19 -0
- package/dist/execution/continuation/execute.d.ts.map +1 -0
- package/dist/execution/continuation/execute.js +31 -0
- package/dist/execution/continuation/execute.js.map +1 -0
- package/dist/execution/continuation/index.d.ts +6 -0
- package/dist/execution/continuation/index.d.ts.map +1 -0
- package/dist/execution/continuation/index.js +5 -0
- package/dist/execution/continuation/index.js.map +1 -0
- package/dist/execution/continuation/ledger.d.ts +20 -0
- package/dist/execution/continuation/ledger.d.ts.map +1 -0
- package/dist/execution/continuation/ledger.js +31 -0
- package/dist/execution/continuation/ledger.js.map +1 -0
- package/dist/execution/continuation/plan.d.ts +13 -0
- package/dist/execution/continuation/plan.d.ts.map +1 -0
- package/dist/execution/continuation/plan.js +20 -0
- package/dist/execution/continuation/plan.js.map +1 -0
- package/dist/execution/continuation/prompts.d.ts +8 -0
- package/dist/execution/continuation/prompts.d.ts.map +1 -0
- package/dist/execution/continuation/prompts.js +8 -0
- package/dist/execution/continuation/prompts.js.map +1 -0
- package/dist/execution/continuation/types.d.ts +70 -0
- package/dist/execution/continuation/types.d.ts.map +1 -0
- package/dist/execution/continuation/types.js +15 -0
- package/dist/execution/continuation/types.js.map +1 -0
- package/dist/execution/escalation/index.d.ts +2 -0
- package/dist/execution/escalation/index.d.ts.map +1 -0
- package/dist/execution/escalation/index.js +2 -0
- package/dist/execution/escalation/index.js.map +1 -0
- package/dist/execution/escalation/types.d.ts +31 -0
- package/dist/execution/escalation/types.d.ts.map +1 -0
- package/dist/execution/escalation/types.js +49 -0
- package/dist/execution/escalation/types.js.map +1 -0
- package/dist/execution/index.d.ts +5 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +5 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/parking/index.d.ts +3 -0
- package/dist/execution/parking/index.d.ts.map +1 -0
- package/dist/execution/parking/index.js +2 -0
- package/dist/execution/parking/index.js.map +1 -0
- package/dist/execution/parking/plan.d.ts +40 -0
- package/dist/execution/parking/plan.d.ts.map +1 -0
- package/dist/execution/parking/plan.js +34 -0
- package/dist/execution/parking/plan.js.map +1 -0
- package/dist/execution/recovery/gate.d.ts +20 -0
- package/dist/execution/recovery/gate.d.ts.map +1 -0
- package/dist/execution/recovery/gate.js +23 -0
- package/dist/execution/recovery/gate.js.map +1 -0
- package/dist/execution/recovery/index.d.ts +3 -0
- package/dist/execution/recovery/index.d.ts.map +1 -0
- package/dist/execution/recovery/index.js +2 -0
- package/dist/execution/recovery/index.js.map +1 -0
- package/dist/execution/retry/decide.d.ts +30 -0
- package/dist/execution/retry/decide.d.ts.map +1 -0
- package/dist/execution/retry/decide.js +76 -0
- package/dist/execution/retry/decide.js.map +1 -0
- package/dist/execution/retry/index.d.ts +3 -0
- package/dist/execution/retry/index.d.ts.map +1 -0
- package/dist/execution/retry/index.js +3 -0
- package/dist/execution/retry/index.js.map +1 -0
- package/dist/execution/retry/types.d.ts +66 -0
- package/dist/execution/retry/types.d.ts.map +1 -0
- package/dist/execution/retry/types.js +9 -0
- package/dist/execution/retry/types.js.map +1 -0
- package/dist/gui-experimental.cjs +1 -0
- package/dist/gui.d.ts +17 -0
- package/dist/gui.d.ts.map +1 -0
- package/dist/gui.js +70 -0
- package/dist/gui.js.map +1 -0
- package/dist/health/capacity/index.d.ts +4 -0
- package/dist/health/capacity/index.d.ts.map +1 -0
- package/dist/health/capacity/index.js +4 -0
- package/dist/health/capacity/index.js.map +1 -0
- package/dist/health/capacity/merge.d.ts +58 -0
- package/dist/health/capacity/merge.d.ts.map +1 -0
- package/dist/health/capacity/merge.js +154 -0
- package/dist/health/capacity/merge.js.map +1 -0
- package/dist/health/capacity/registry.d.ts +41 -0
- package/dist/health/capacity/registry.d.ts.map +1 -0
- package/dist/health/capacity/registry.js +106 -0
- package/dist/health/capacity/registry.js.map +1 -0
- package/dist/health/capacity/types.d.ts +74 -0
- package/dist/health/capacity/types.d.ts.map +1 -0
- package/dist/health/capacity/types.js +6 -0
- package/dist/health/capacity/types.js.map +1 -0
- package/dist/health/circuit-breaker/breaker.d.ts +84 -0
- package/dist/health/circuit-breaker/breaker.d.ts.map +1 -0
- package/dist/health/circuit-breaker/breaker.js +132 -0
- package/dist/health/circuit-breaker/breaker.js.map +1 -0
- package/dist/health/circuit-breaker/index.d.ts +3 -0
- package/dist/health/circuit-breaker/index.d.ts.map +1 -0
- package/dist/health/circuit-breaker/index.js +3 -0
- package/dist/health/circuit-breaker/index.js.map +1 -0
- package/dist/health/circuit-breaker/types.d.ts +53 -0
- package/dist/health/circuit-breaker/types.d.ts.map +1 -0
- package/dist/health/circuit-breaker/types.js +13 -0
- package/dist/health/circuit-breaker/types.js.map +1 -0
- package/dist/health/classifier/classify.d.ts +9 -0
- package/dist/health/classifier/classify.d.ts.map +1 -0
- package/dist/health/classifier/classify.js +245 -0
- package/dist/health/classifier/classify.js.map +1 -0
- package/dist/health/classifier/index.d.ts +3 -0
- package/dist/health/classifier/index.d.ts.map +1 -0
- package/dist/health/classifier/index.js +3 -0
- package/dist/health/classifier/index.js.map +1 -0
- package/dist/health/classifier/types.d.ts +72 -0
- package/dist/health/classifier/types.d.ts.map +1 -0
- package/dist/health/classifier/types.js +27 -0
- package/dist/health/classifier/types.js.map +1 -0
- package/dist/health/index.d.ts +5 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +5 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/resource-health/index.d.ts +5 -0
- package/dist/health/resource-health/index.d.ts.map +1 -0
- package/dist/health/resource-health/index.js +5 -0
- package/dist/health/resource-health/index.js.map +1 -0
- package/dist/health/resource-health/key.d.ts +19 -0
- package/dist/health/resource-health/key.d.ts.map +1 -0
- package/dist/health/resource-health/key.js +54 -0
- package/dist/health/resource-health/key.js.map +1 -0
- package/dist/health/resource-health/registry.d.ts +41 -0
- package/dist/health/resource-health/registry.d.ts.map +1 -0
- package/dist/health/resource-health/registry.js +258 -0
- package/dist/health/resource-health/registry.js.map +1 -0
- package/dist/health/resource-health/transitions.d.ts +11 -0
- package/dist/health/resource-health/transitions.d.ts.map +1 -0
- package/dist/health/resource-health/transitions.js +165 -0
- package/dist/health/resource-health/transitions.js.map +1 -0
- package/dist/health/resource-health/types.d.ts +116 -0
- package/dist/health/resource-health/types.d.ts.map +1 -0
- package/dist/health/resource-health/types.js +43 -0
- package/dist/health/resource-health/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-id.d.ts +3 -0
- package/dist/plugin-id.d.ts.map +1 -0
- package/dist/plugin-id.js +3 -0
- package/dist/plugin-id.js.map +1 -0
- package/dist/rpc/definition.d.ts +100 -0
- package/dist/rpc/definition.d.ts.map +1 -0
- package/dist/rpc/definition.js +104 -0
- package/dist/rpc/definition.js.map +1 -0
- package/dist/rpc/handlers.d.ts +65 -0
- package/dist/rpc/handlers.d.ts.map +1 -0
- package/dist/rpc/handlers.js +111 -0
- package/dist/rpc/handlers.js.map +1 -0
- package/dist/rpc/status.d.ts +43 -0
- package/dist/rpc/status.d.ts.map +1 -0
- package/dist/rpc/status.js +45 -0
- package/dist/rpc/status.js.map +1 -0
- package/dist/rpc.d.ts +11 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +8 -0
- package/dist/rpc.js.map +1 -0
- package/dist/state/capacity/index.d.ts +4 -0
- package/dist/state/capacity/index.d.ts.map +1 -0
- package/dist/state/capacity/index.js +4 -0
- package/dist/state/capacity/index.js.map +1 -0
- package/dist/state/capacity/parse.d.ts +3 -0
- package/dist/state/capacity/parse.d.ts.map +1 -0
- package/dist/state/capacity/parse.js +110 -0
- package/dist/state/capacity/parse.js.map +1 -0
- package/dist/state/capacity/store.d.ts +19 -0
- package/dist/state/capacity/store.d.ts.map +1 -0
- package/dist/state/capacity/store.js +64 -0
- package/dist/state/capacity/store.js.map +1 -0
- package/dist/state/capacity/types.d.ts +38 -0
- package/dist/state/capacity/types.d.ts.map +1 -0
- package/dist/state/capacity/types.js +11 -0
- package/dist/state/capacity/types.js.map +1 -0
- package/dist/state/health/index.d.ts +5 -0
- package/dist/state/health/index.d.ts.map +1 -0
- package/dist/state/health/index.js +4 -0
- package/dist/state/health/index.js.map +1 -0
- package/dist/state/health/parse.d.ts +3 -0
- package/dist/state/health/parse.d.ts.map +1 -0
- package/dist/state/health/parse.js +121 -0
- package/dist/state/health/parse.js.map +1 -0
- package/dist/state/health/store.d.ts +18 -0
- package/dist/state/health/store.d.ts.map +1 -0
- package/dist/state/health/store.js +55 -0
- package/dist/state/health/store.js.map +1 -0
- package/dist/state/health/types.d.ts +24 -0
- package/dist/state/health/types.d.ts.map +1 -0
- package/dist/state/health/types.js +5 -0
- package/dist/state/health/types.js.map +1 -0
- package/dist/state/parked-work/index.d.ts +5 -0
- package/dist/state/parked-work/index.d.ts.map +1 -0
- package/dist/state/parked-work/index.js +4 -0
- package/dist/state/parked-work/index.js.map +1 -0
- package/dist/state/parked-work/parse.d.ts +7 -0
- package/dist/state/parked-work/parse.d.ts.map +1 -0
- package/dist/state/parked-work/parse.js +83 -0
- package/dist/state/parked-work/parse.js.map +1 -0
- package/dist/state/parked-work/store.d.ts +18 -0
- package/dist/state/parked-work/store.d.ts.map +1 -0
- package/dist/state/parked-work/store.js +81 -0
- package/dist/state/parked-work/store.js.map +1 -0
- package/dist/state/parked-work/types.d.ts +42 -0
- package/dist/state/parked-work/types.d.ts.map +1 -0
- package/dist/state/parked-work/types.js +7 -0
- package/dist/state/parked-work/types.js.map +1 -0
- package/dist/state/receipts/bound.d.ts +15 -0
- package/dist/state/receipts/bound.d.ts.map +1 -0
- package/dist/state/receipts/bound.js +77 -0
- package/dist/state/receipts/bound.js.map +1 -0
- package/dist/state/receipts/index.d.ts +7 -0
- package/dist/state/receipts/index.d.ts.map +1 -0
- package/dist/state/receipts/index.js +5 -0
- package/dist/state/receipts/index.js.map +1 -0
- package/dist/state/receipts/parse.d.ts +7 -0
- package/dist/state/receipts/parse.d.ts.map +1 -0
- package/dist/state/receipts/parse.js +226 -0
- package/dist/state/receipts/parse.js.map +1 -0
- package/dist/state/receipts/store.d.ts +35 -0
- package/dist/state/receipts/store.d.ts.map +1 -0
- package/dist/state/receipts/store.js +128 -0
- package/dist/state/receipts/store.js.map +1 -0
- package/dist/state/receipts/types.d.ts +62 -0
- package/dist/state/receipts/types.d.ts.map +1 -0
- package/dist/state/receipts/types.js +12 -0
- package/dist/state/receipts/types.js.map +1 -0
- package/dist/state/session-modes/index.d.ts +5 -0
- package/dist/state/session-modes/index.d.ts.map +1 -0
- package/dist/state/session-modes/index.js +4 -0
- package/dist/state/session-modes/index.js.map +1 -0
- package/dist/state/session-modes/parse.d.ts +9 -0
- package/dist/state/session-modes/parse.d.ts.map +1 -0
- package/dist/state/session-modes/parse.js +62 -0
- package/dist/state/session-modes/parse.js.map +1 -0
- package/dist/state/session-modes/store.d.ts +21 -0
- package/dist/state/session-modes/store.d.ts.map +1 -0
- package/dist/state/session-modes/store.js +73 -0
- package/dist/state/session-modes/store.js.map +1 -0
- package/dist/state/session-modes/types.d.ts +42 -0
- package/dist/state/session-modes/types.d.ts.map +1 -0
- package/dist/state/session-modes/types.js +7 -0
- package/dist/state/session-modes/types.js.map +1 -0
- package/dist/state/settings/index.d.ts +5 -0
- package/dist/state/settings/index.d.ts.map +1 -0
- package/dist/state/settings/index.js +4 -0
- package/dist/state/settings/index.js.map +1 -0
- package/dist/state/settings/parse.d.ts +34 -0
- package/dist/state/settings/parse.d.ts.map +1 -0
- package/dist/state/settings/parse.js +261 -0
- package/dist/state/settings/parse.js.map +1 -0
- package/dist/state/settings/store.d.ts +22 -0
- package/dist/state/settings/store.d.ts.map +1 -0
- package/dist/state/settings/store.js +57 -0
- package/dist/state/settings/store.js.map +1 -0
- package/dist/state/settings/types.d.ts +63 -0
- package/dist/state/settings/types.d.ts.map +1 -0
- package/dist/state/settings/types.js +12 -0
- package/dist/state/settings/types.js.map +1 -0
- package/dist/supervisor/index.d.ts +5 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +4 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/supervisor/log.d.ts +11 -0
- package/dist/supervisor/log.d.ts.map +1 -0
- package/dist/supervisor/log.js +14 -0
- package/dist/supervisor/log.js.map +1 -0
- package/dist/supervisor/supervisor.d.ts +69 -0
- package/dist/supervisor/supervisor.d.ts.map +1 -0
- package/dist/supervisor/supervisor.js +1343 -0
- package/dist/supervisor/supervisor.js.map +1 -0
- package/dist/supervisor/types.d.ts +50 -0
- package/dist/supervisor/types.d.ts.map +1 -0
- package/dist/supervisor/types.js +3 -0
- package/dist/supervisor/types.js.map +1 -0
- package/dist/supervisor/view.d.ts +4 -0
- package/dist/supervisor/view.d.ts.map +1 -0
- package/dist/supervisor/view.js +4 -0
- package/dist/supervisor/view.js.map +1 -0
- package/dist/tui.d.ts +16 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +252 -0
- package/dist/tui.js.map +1 -0
- package/dist/ui/gui/api.d.ts +18 -0
- package/dist/ui/gui/api.d.ts.map +1 -0
- package/dist/ui/gui/api.js +21 -0
- package/dist/ui/gui/api.js.map +1 -0
- package/dist/ui/gui/view.d.ts +27 -0
- package/dist/ui/gui/view.d.ts.map +1 -0
- package/dist/ui/gui/view.js +49 -0
- package/dist/ui/gui/view.js.map +1 -0
- package/dist/ui/tui/controller.d.ts +98 -0
- package/dist/ui/tui/controller.d.ts.map +1 -0
- package/dist/ui/tui/controller.js +399 -0
- package/dist/ui/tui/controller.js.map +1 -0
- package/dist/ui/tui/menu.d.ts +56 -0
- package/dist/ui/tui/menu.d.ts.map +1 -0
- package/dist/ui/tui/menu.js +176 -0
- package/dist/ui/tui/menu.js.map +1 -0
- package/dist/ui/tui/options.d.ts +20 -0
- package/dist/ui/tui/options.d.ts.map +1 -0
- package/dist/ui/tui/options.js +17 -0
- package/dist/ui/tui/options.js.map +1 -0
- package/dist/ui/tui/receipts.d.ts +22 -0
- package/dist/ui/tui/receipts.d.ts.map +1 -0
- package/dist/ui/tui/receipts.js +109 -0
- package/dist/ui/tui/receipts.js.map +1 -0
- package/dist/ui/tui/status.d.ts +23 -0
- package/dist/ui/tui/status.d.ts.map +1 -0
- package/dist/ui/tui/status.js +90 -0
- package/dist/ui/tui/status.js.map +1 -0
- package/dist/ui/tui/tiers.d.ts +52 -0
- package/dist/ui/tui/tiers.d.ts.map +1 -0
- package/dist/ui/tui/tiers.js +108 -0
- package/dist/ui/tui/tiers.js.map +1 -0
- package/package.json +85 -4
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text fed to the textual last-resort layer is truncated to this bound before
|
|
3
|
+
* matching, so adversarial or enormous error bodies cannot dominate
|
|
4
|
+
* classification cost or smuggle patterns in late bytes (ADP-008).
|
|
5
|
+
*/
|
|
6
|
+
const TEXT_BOUND = 512;
|
|
7
|
+
/**
|
|
8
|
+
* Retry/failover policy per category (ADP-010, ADP-011).
|
|
9
|
+
*
|
|
10
|
+
* - Infrastructure failures (rate limiting, quota, outage, overload, timeout)
|
|
11
|
+
* are failover-eligible: horizontal recovery within the tier is exactly
|
|
12
|
+
* their remedy.
|
|
13
|
+
* - Permanent configuration failures (auth, invalid model, content policy)
|
|
14
|
+
* and context overflow never retry and never failover: retrying the same
|
|
15
|
+
* request cannot help and switching resources would reproduce the failure.
|
|
16
|
+
* - User cancellation is final: no retry, no failover (ADP-010).
|
|
17
|
+
* - Unknown failures defer to OpenCode's native handling.
|
|
18
|
+
*/
|
|
19
|
+
const CATEGORY_POLICY = {
|
|
20
|
+
rate_limited: { retryable: true, failoverEligible: true },
|
|
21
|
+
quota_exhausted: { retryable: false, failoverEligible: true },
|
|
22
|
+
outage: { retryable: true, failoverEligible: true },
|
|
23
|
+
overload: { retryable: true, failoverEligible: true },
|
|
24
|
+
timeout: { retryable: true, failoverEligible: true },
|
|
25
|
+
auth_failure: { retryable: false, failoverEligible: false },
|
|
26
|
+
invalid_model: { retryable: false, failoverEligible: false },
|
|
27
|
+
context_overflow: { retryable: false, failoverEligible: false },
|
|
28
|
+
content_policy: { retryable: false, failoverEligible: false },
|
|
29
|
+
user_cancelled: { retryable: false, failoverEligible: false },
|
|
30
|
+
unknown: { retryable: false, failoverEligible: false },
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Error tags from the documented @opencode/protocol vocabulary that map
|
|
34
|
+
* directly to a failure category. Tags absent here (`ProviderRequestError`,
|
|
35
|
+
* `UnknownError`, anything unrecognized) are structured but not
|
|
36
|
+
* category-specific: they never guess, and classification falls through to
|
|
37
|
+
* the refining layers.
|
|
38
|
+
*/
|
|
39
|
+
const STRUCTURED_TYPES = new Map([
|
|
40
|
+
["UnauthorizedError", "auth_failure"],
|
|
41
|
+
["ForbiddenError", "auth_failure"],
|
|
42
|
+
["ModelNotFoundError", "invalid_model"],
|
|
43
|
+
["UnsupportedModelError", "invalid_model"],
|
|
44
|
+
["ServiceUnavailableError", "outage"],
|
|
45
|
+
]);
|
|
46
|
+
/**
|
|
47
|
+
* Bounded textual patterns, last resort only (ADP-008). Ordered most
|
|
48
|
+
* specific first; the first match wins. These encode provider error-message
|
|
49
|
+
* conventions documented by the research phase, not a general-purpose
|
|
50
|
+
* keyword classifier.
|
|
51
|
+
*/
|
|
52
|
+
const TEXTUAL_PATTERNS = [
|
|
53
|
+
{
|
|
54
|
+
category: "context_overflow",
|
|
55
|
+
pattern: /context (length|window)|maximum context|input length exceeds|prompt is too long|too many (input )?tokens|exceeds the maximum/i,
|
|
56
|
+
},
|
|
57
|
+
{ category: "quota_exhausted", pattern: /\bquota\b|credit balance/i },
|
|
58
|
+
{ category: "rate_limited", pattern: /rate ?limit/i },
|
|
59
|
+
{ category: "timeout", pattern: /\btimeout\b|timed? ?out|deadline exceeded|etimedout/i },
|
|
60
|
+
{
|
|
61
|
+
category: "auth_failure",
|
|
62
|
+
pattern: /unauthorized|invalid (api|access) key|api key (expired|invalid)|authentication|permission denied/i,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
category: "invalid_model",
|
|
66
|
+
pattern: /model.{0,30}(does not exist|not found)|invalid model|unknown model|no such model/i,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
category: "content_policy",
|
|
70
|
+
pattern: /content (management )?(policy|filter)|safety system|violates?.{0,32}policy|flagged as/i,
|
|
71
|
+
},
|
|
72
|
+
{ category: "overload", pattern: /overloaded|over capacity|high demand/i },
|
|
73
|
+
{ category: "user_cancelled", pattern: /cancel+(l)?ed|aborted by (the )?user|user abort/i },
|
|
74
|
+
];
|
|
75
|
+
function isHttpStatus(status) {
|
|
76
|
+
return typeof status === "number" && Number.isInteger(status) && status >= 100 && status <= 599;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Upper bound on a provider-claimed retry delay. `Retry-After` and structured
|
|
80
|
+
* retry metadata are untrusted provider data: a hostile or misconfigured
|
|
81
|
+
* value ("999999999" seconds) must not convert one response into a
|
|
82
|
+
* near-permanent resource blacklist. The host's own retry scheduling waits
|
|
83
|
+
* out the raw header verbatim — this bound only concerns the health window
|
|
84
|
+
* the supervisor derives from the classification (ADP-011 boundedness).
|
|
85
|
+
*/
|
|
86
|
+
const MAX_RETRY_AFTER_MS = 24 * 60 * 60 * 1000;
|
|
87
|
+
function boundedRetryAfterMs(retryAfterMs) {
|
|
88
|
+
if (retryAfterMs === undefined) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return Math.min(retryAfterMs, MAX_RETRY_AFTER_MS);
|
|
92
|
+
}
|
|
93
|
+
function isNonNegativeInteger(value) {
|
|
94
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
95
|
+
}
|
|
96
|
+
function lowercasedHeaders(headers) {
|
|
97
|
+
const lowered = new Map();
|
|
98
|
+
if (headers === undefined) {
|
|
99
|
+
return lowered;
|
|
100
|
+
}
|
|
101
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
102
|
+
lowered.set(name.toLowerCase(), value);
|
|
103
|
+
}
|
|
104
|
+
return lowered;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Parses a `Retry-After` header into milliseconds. Only the integer-seconds
|
|
108
|
+
* form is accepted: the HTTP-date form requires a clock, which the classifier
|
|
109
|
+
* deliberately does not have (reset-time handling belongs to the capacity
|
|
110
|
+
* boundary, T-05/T-15).
|
|
111
|
+
*/
|
|
112
|
+
function retryAfterHeaderMs(headers) {
|
|
113
|
+
const raw = headers.get("retry-after");
|
|
114
|
+
if (raw === undefined || !/^\d+$/.test(raw)) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
return Number(raw) * 1000;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Standard rate-limit headers (case-insensitive `x-ratelimit-remaining*`).
|
|
121
|
+
* All-zero remaining capacity indicates a fixed-window quota exhaustion
|
|
122
|
+
* rather than a short burst limit.
|
|
123
|
+
*/
|
|
124
|
+
function fixedWindowExhausted(headers) {
|
|
125
|
+
let sawRemaining = false;
|
|
126
|
+
for (const [name, value] of headers) {
|
|
127
|
+
if (name.startsWith("x-ratelimit-remaining")) {
|
|
128
|
+
sawRemaining = true;
|
|
129
|
+
if (value !== "0") {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return sawRemaining;
|
|
135
|
+
}
|
|
136
|
+
function retryAdvice(category, retryAfterMs) {
|
|
137
|
+
const policy = CATEGORY_POLICY[category];
|
|
138
|
+
const bounded = boundedRetryAfterMs(retryAfterMs);
|
|
139
|
+
if (bounded === undefined) {
|
|
140
|
+
return { retryable: policy.retryable };
|
|
141
|
+
}
|
|
142
|
+
return { retryable: policy.retryable, retryAfterMs: bounded };
|
|
143
|
+
}
|
|
144
|
+
function classification(category, layer, definitive, retryAfterMs) {
|
|
145
|
+
const policy = CATEGORY_POLICY[category];
|
|
146
|
+
return {
|
|
147
|
+
category,
|
|
148
|
+
layer,
|
|
149
|
+
definitive,
|
|
150
|
+
retry: retryAdvice(category, retryAfterMs),
|
|
151
|
+
failoverEligible: policy.failoverEligible,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Classifies an HTTP status. 429 consults the standard rate-limit headers in
|
|
156
|
+
* the same step: status plus documented standard headers are one HTTP
|
|
157
|
+
* semantics layer, and the quota refinement is more specific evidence than a
|
|
158
|
+
* bare 429, so it cannot weaken the ADP-008 precedence.
|
|
159
|
+
*/
|
|
160
|
+
function classifyStatus(status, headers) {
|
|
161
|
+
if (status === 429) {
|
|
162
|
+
return fixedWindowExhausted(headers) ? "quota_exhausted" : "rate_limited";
|
|
163
|
+
}
|
|
164
|
+
if (status === 401 || status === 403) {
|
|
165
|
+
return "auth_failure";
|
|
166
|
+
}
|
|
167
|
+
if (status === 408) {
|
|
168
|
+
return "timeout";
|
|
169
|
+
}
|
|
170
|
+
if (status === 413) {
|
|
171
|
+
return "context_overflow";
|
|
172
|
+
}
|
|
173
|
+
if (status === 502 || status === 503 || status === 504) {
|
|
174
|
+
return "outage";
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
function classifyText(text) {
|
|
179
|
+
const bounded = text.length > TEXT_BOUND ? text.slice(0, TEXT_BOUND) : text;
|
|
180
|
+
for (const { category, pattern } of TEXTUAL_PATTERNS) {
|
|
181
|
+
if (pattern.test(bounded)) {
|
|
182
|
+
return category;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Total classification of layered failure evidence. Never throws and always
|
|
189
|
+
* returns a category: any evidence shape outside the documented vocabularies
|
|
190
|
+
* classifies as `unknown` via the `none` layer, deferring to OpenCode's
|
|
191
|
+
* native failure handling (ADP-009, ADP-012).
|
|
192
|
+
*/
|
|
193
|
+
export function classifyFailure(evidence) {
|
|
194
|
+
// Layer 0: interruption evidence. Interruptions are host decisions, not
|
|
195
|
+
// provider failures; a user cancellation is final (ADP-010).
|
|
196
|
+
if (evidence.interrupted === "user") {
|
|
197
|
+
return classification("user_cancelled", "interruption", true, undefined);
|
|
198
|
+
}
|
|
199
|
+
if (evidence.interrupted !== undefined) {
|
|
200
|
+
return classification("unknown", "interruption", true, undefined);
|
|
201
|
+
}
|
|
202
|
+
// Layer 1: structured OpenCode metadata.
|
|
203
|
+
const structured = evidence.structured;
|
|
204
|
+
const structuredRetryAfterMs = isNonNegativeInteger(structured?.retryAfterMs)
|
|
205
|
+
? structured.retryAfterMs
|
|
206
|
+
: undefined;
|
|
207
|
+
if (structured !== undefined) {
|
|
208
|
+
const mapped = STRUCTURED_TYPES.get(structured.type);
|
|
209
|
+
if (mapped !== undefined) {
|
|
210
|
+
return classification(mapped, "structured", true, structuredRetryAfterMs);
|
|
211
|
+
}
|
|
212
|
+
// Unmapped tag: fall through so HTTP semantics can refine the category.
|
|
213
|
+
}
|
|
214
|
+
// Layer 2: HTTP status (+ standard headers for the 429 refinement).
|
|
215
|
+
const headers = lowercasedHeaders(evidence.headers);
|
|
216
|
+
if (isHttpStatus(evidence.status)) {
|
|
217
|
+
const category = classifyStatus(evidence.status, headers);
|
|
218
|
+
if (category !== undefined) {
|
|
219
|
+
return classification(category, "status", true, structuredRetryAfterMs ?? retryAfterHeaderMs(headers));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Layer 3: standard headers alone (Retry-After without a decisive status).
|
|
223
|
+
const headerRetryAfterMs = retryAfterHeaderMs(headers);
|
|
224
|
+
if (headerRetryAfterMs !== undefined) {
|
|
225
|
+
return classification("rate_limited", "headers", false, headerRetryAfterMs);
|
|
226
|
+
}
|
|
227
|
+
// Layer 4: documented provider-specific metadata, normalized by our own
|
|
228
|
+
// adapters after validation (T-15).
|
|
229
|
+
if (evidence.providerMetadata?.quotaExhausted === true) {
|
|
230
|
+
return classification("quota_exhausted", "provider-metadata", true, undefined);
|
|
231
|
+
}
|
|
232
|
+
if (evidence.providerMetadata?.overloaded === true) {
|
|
233
|
+
return classification("overload", "provider-metadata", true, structuredRetryAfterMs);
|
|
234
|
+
}
|
|
235
|
+
// Layer 5: bounded textual classification, always non-definitive.
|
|
236
|
+
const text = evidence.text;
|
|
237
|
+
if (text !== undefined) {
|
|
238
|
+
const category = classifyText(text);
|
|
239
|
+
if (category !== undefined) {
|
|
240
|
+
return classification(category, "textual", false, structuredRetryAfterMs);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return classification("unknown", "none", false, undefined);
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/health/classifier/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/health/classifier/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/health/classifier/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Failure classification types (ADP-008, ADP-009).
|
|
3
|
+
*
|
|
4
|
+
* The classifier consumes a layered evidence record assembled by the OpenCode
|
|
5
|
+
* adapter. Evidence layers exist so classification can honor the ADP-008
|
|
6
|
+
* precedence chain: structured metadata beats HTTP status beats standard
|
|
7
|
+
* headers beats documented provider-specific metadata beats bounded text.
|
|
8
|
+
*/
|
|
9
|
+
import type { InterruptReason } from "../../core/work-unit/interruption.js";
|
|
10
|
+
export declare const FAILURE_CATEGORIES: readonly ["rate_limited", "quota_exhausted", "outage", "overload", "timeout", "auth_failure", "invalid_model", "context_overflow", "content_policy", "user_cancelled", "unknown"];
|
|
11
|
+
export type FailureCategory = (typeof FAILURE_CATEGORIES)[number];
|
|
12
|
+
/**
|
|
13
|
+
* Where the winning classification came from. Exposed so receipts can show
|
|
14
|
+
* why a decision was made and so tests can pin the precedence chain.
|
|
15
|
+
*/
|
|
16
|
+
export declare const EVIDENCE_LAYERS: readonly ["interruption", "structured", "status", "headers", "provider-metadata", "textual", "none"];
|
|
17
|
+
export type EvidenceLayer = (typeof EVIDENCE_LAYERS)[number];
|
|
18
|
+
/**
|
|
19
|
+
* Structured OpenCode evidence (`Session.StructuredError`): a server-assigned
|
|
20
|
+
* error tag plus, when the provider sent it, a retry delay OpenCode already
|
|
21
|
+
* parsed from `Retry-After`. `type` is a free-form string on the wire, so the
|
|
22
|
+
* classifier only interprets types from the documented @opencode/protocol
|
|
23
|
+
* vocabulary and falls through to lower layers for anything unmapped instead
|
|
24
|
+
* of guessing.
|
|
25
|
+
*/
|
|
26
|
+
export interface StructuredSignal {
|
|
27
|
+
readonly type: string;
|
|
28
|
+
readonly retryAfterMs?: number | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Documented provider-specific metadata, already normalized by our own
|
|
32
|
+
* adapters (e.g. the Codex capacity sensor validates `x-codex-*` headers
|
|
33
|
+
* before producing these). The classifier never reads raw provider headers
|
|
34
|
+
* itself.
|
|
35
|
+
*/
|
|
36
|
+
export interface ProviderMetadata {
|
|
37
|
+
readonly quotaExhausted?: boolean | undefined;
|
|
38
|
+
readonly overloaded?: boolean | undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Layered failure evidence. `status` is the merged HTTP status (the adapter
|
|
42
|
+
* prefers the wire status seen by `http.response` over any status echoed in
|
|
43
|
+
* structured metadata). `text` is the bounded concatenation of error message
|
|
44
|
+
* and response body, bounded again defensively inside the classifier.
|
|
45
|
+
*/
|
|
46
|
+
export interface ErrorEvidence {
|
|
47
|
+
readonly interrupted?: InterruptReason | undefined;
|
|
48
|
+
readonly structured?: StructuredSignal | undefined;
|
|
49
|
+
readonly status?: number | undefined;
|
|
50
|
+
readonly headers?: Readonly<Record<string, string>> | undefined;
|
|
51
|
+
readonly providerMetadata?: ProviderMetadata | undefined;
|
|
52
|
+
readonly text?: string | undefined;
|
|
53
|
+
}
|
|
54
|
+
/** Advisory retry semantics; the retry policy (T-12) makes final decisions. */
|
|
55
|
+
export interface RetryAdvice {
|
|
56
|
+
readonly retryable: boolean;
|
|
57
|
+
readonly retryAfterMs?: number;
|
|
58
|
+
}
|
|
59
|
+
export interface FailureClassification {
|
|
60
|
+
readonly category: FailureCategory;
|
|
61
|
+
readonly layer: EvidenceLayer;
|
|
62
|
+
/**
|
|
63
|
+
* True when the evidence conclusively identifies the failure. Textual
|
|
64
|
+
* classifications are always non-definitive; scheduling treats
|
|
65
|
+
* non-definitive evidence more conservatively (ADP-012).
|
|
66
|
+
*/
|
|
67
|
+
readonly definitive: boolean;
|
|
68
|
+
readonly retry: RetryAdvice;
|
|
69
|
+
/** Horizontal recovery (switch resource within the tier) is allowed. */
|
|
70
|
+
readonly failoverEligible: boolean;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/health/classifier/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AAE3E,eAAO,MAAM,kBAAkB,mLAYO,CAAA;AAEtC,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE;;;GAGG;AACH,eAAO,MAAM,eAAe,sGAQU,CAAA;AAEtC,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3C;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IAC/D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;CACnC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const FAILURE_CATEGORIES = [
|
|
2
|
+
"rate_limited",
|
|
3
|
+
"quota_exhausted",
|
|
4
|
+
"outage",
|
|
5
|
+
"overload",
|
|
6
|
+
"timeout",
|
|
7
|
+
"auth_failure",
|
|
8
|
+
"invalid_model",
|
|
9
|
+
"context_overflow",
|
|
10
|
+
"content_policy",
|
|
11
|
+
"user_cancelled",
|
|
12
|
+
"unknown",
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Where the winning classification came from. Exposed so receipts can show
|
|
16
|
+
* why a decision was made and so tests can pin the precedence chain.
|
|
17
|
+
*/
|
|
18
|
+
export const EVIDENCE_LAYERS = [
|
|
19
|
+
"interruption",
|
|
20
|
+
"structured",
|
|
21
|
+
"status",
|
|
22
|
+
"headers",
|
|
23
|
+
"provider-metadata",
|
|
24
|
+
"textual",
|
|
25
|
+
"none",
|
|
26
|
+
];
|
|
27
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/health/classifier/types.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc;IACd,iBAAiB;IACjB,QAAQ;IACR,UAAU;IACV,SAAS;IACT,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,SAAS;CAC2B,CAAA;AAItC;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,mBAAmB;IACnB,SAAS;IACT,MAAM;CAC8B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/health/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/health/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/health/resource-health/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/health/resource-health/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource key helpers: scope derivation and canonical identity.
|
|
3
|
+
*/
|
|
4
|
+
import type { ResourceKey, ResourceScope } from "./types.js";
|
|
5
|
+
/** The scope a key is attributed at: the most specific present field. */
|
|
6
|
+
export declare function resourceScope(key: ResourceKey): ResourceScope;
|
|
7
|
+
/** Canonical string identity for map keys and receipts. */
|
|
8
|
+
export declare function resourceKeyID(key: ResourceKey): string;
|
|
9
|
+
/**
|
|
10
|
+
* The chain of scopes implied by `key`, ordered widest → narrowest. Each level
|
|
11
|
+
* keeps the narrower fields that are present, so a key without an account
|
|
12
|
+
* (OpenCode model references carry only provider and model) still yields a
|
|
13
|
+
* model-level entry. Health assessment walks this chain because a blocked
|
|
14
|
+
* ancestor blocks every descendant (e.g. a provider-wide rate limit skips all
|
|
15
|
+
* of its models). A variant field without a model field is degenerate and
|
|
16
|
+
* contributes no level of its own.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resourceChain(key: ResourceKey): ResourceKey[];
|
|
19
|
+
//# sourceMappingURL=key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/health/resource-health/key.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE5D,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAW7D;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAOtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE,CAyB7D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** The scope a key is attributed at: the most specific present field. */
|
|
2
|
+
export function resourceScope(key) {
|
|
3
|
+
if (key.variantID !== undefined) {
|
|
4
|
+
return "variant";
|
|
5
|
+
}
|
|
6
|
+
if (key.modelID !== undefined) {
|
|
7
|
+
return "model";
|
|
8
|
+
}
|
|
9
|
+
if (key.accountID !== undefined) {
|
|
10
|
+
return "account";
|
|
11
|
+
}
|
|
12
|
+
return "provider";
|
|
13
|
+
}
|
|
14
|
+
/** Canonical string identity for map keys and receipts. */
|
|
15
|
+
export function resourceKeyID(key) {
|
|
16
|
+
return JSON.stringify([
|
|
17
|
+
key.providerID,
|
|
18
|
+
key.accountID ?? null,
|
|
19
|
+
key.modelID ?? null,
|
|
20
|
+
key.variantID ?? null,
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The chain of scopes implied by `key`, ordered widest → narrowest. Each level
|
|
25
|
+
* keeps the narrower fields that are present, so a key without an account
|
|
26
|
+
* (OpenCode model references carry only provider and model) still yields a
|
|
27
|
+
* model-level entry. Health assessment walks this chain because a blocked
|
|
28
|
+
* ancestor blocks every descendant (e.g. a provider-wide rate limit skips all
|
|
29
|
+
* of its models). A variant field without a model field is degenerate and
|
|
30
|
+
* contributes no level of its own.
|
|
31
|
+
*/
|
|
32
|
+
export function resourceChain(key) {
|
|
33
|
+
const chain = [{ providerID: key.providerID }];
|
|
34
|
+
if (key.accountID !== undefined) {
|
|
35
|
+
chain.push({ providerID: key.providerID, accountID: key.accountID });
|
|
36
|
+
}
|
|
37
|
+
if (key.modelID !== undefined) {
|
|
38
|
+
chain.push(key.accountID === undefined
|
|
39
|
+
? { providerID: key.providerID, modelID: key.modelID }
|
|
40
|
+
: { providerID: key.providerID, accountID: key.accountID, modelID: key.modelID });
|
|
41
|
+
}
|
|
42
|
+
if (key.modelID !== undefined && key.variantID !== undefined) {
|
|
43
|
+
chain.push(key.accountID === undefined
|
|
44
|
+
? { providerID: key.providerID, modelID: key.modelID, variantID: key.variantID }
|
|
45
|
+
: {
|
|
46
|
+
providerID: key.providerID,
|
|
47
|
+
accountID: key.accountID,
|
|
48
|
+
modelID: key.modelID,
|
|
49
|
+
variantID: key.variantID,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return chain;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../../src/health/resource-health/key.ts"],"names":[],"mappings":"AAKA,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,GAAG,CAAC,UAAU;QACd,GAAG,CAAC,SAAS,IAAI,IAAI;QACrB,GAAG,CAAC,OAAO,IAAI,IAAI;QACnB,GAAG,CAAC,SAAS,IAAI,IAAI;KACtB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,MAAM,KAAK,GAAkB,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IAC7D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,SAAS,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;YACtD,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CACnF,CAAA;IACH,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,SAAS,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE;YAChF,CAAC,CAAC;gBACE,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CACN,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Assessment, type Clock, type HealthEvent, type ProbeOutcome, type ProbeTicket, type ResourceHealthConfig, type ResourceKey, type ResourceRecord } from "./types.js";
|
|
2
|
+
export declare class ResourceHealthRegistry {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(clock: Clock, config?: ResourceHealthConfig);
|
|
5
|
+
/**
|
|
6
|
+
* Seeds the registry from persisted records (restart / cross-instance
|
|
7
|
+
* reload). Records are swept against the current clock and inserted
|
|
8
|
+
* without persisting — hydration must not write back what it just read.
|
|
9
|
+
* A hydrated half_open record cannot keep its probe (the ticket lived in
|
|
10
|
+
* the previous instance's memory), so it re-opens due immediately — its
|
|
11
|
+
* backoff window had already elapsed when it went half-open, and the next
|
|
12
|
+
* assessment admits exactly one probe as usual.
|
|
13
|
+
*/
|
|
14
|
+
hydrate(records: readonly ResourceRecord[]): void;
|
|
15
|
+
observe(event: HealthEvent): ResourceRecord;
|
|
16
|
+
/**
|
|
17
|
+
* Assesses whether the resource may take new work right now, composing the
|
|
18
|
+
* full ancestor chain. Precedence: the most severe hard resource state
|
|
19
|
+
* wins (narrowest scope on ties), then the breaker scan (widest scope
|
|
20
|
+
* first — a due wide breaker is probed before a narrow one), then draining,
|
|
21
|
+
* then available.
|
|
22
|
+
*/
|
|
23
|
+
assess(key: ResourceKey): Assessment;
|
|
24
|
+
/**
|
|
25
|
+
* Non-mutating assessment for decisions that must not admit a probe
|
|
26
|
+
* (escalation-target gating): identical hard-state and draining walk, but
|
|
27
|
+
* an open or half-open breaker blocks without being flipped or ticketed.
|
|
28
|
+
*/
|
|
29
|
+
evaluate(key: ResourceKey): Assessment;
|
|
30
|
+
/**
|
|
31
|
+
* Reports the outcome of an admitted probe. Only the ticket issued for the
|
|
32
|
+
* current half-open record is honored; stale tickets (probe already
|
|
33
|
+
* resolved, record reset, or unknown key) are rejected.
|
|
34
|
+
*/
|
|
35
|
+
reportProbe(ticket: ProbeTicket, outcome: ProbeOutcome): boolean;
|
|
36
|
+
/** Current (swept) record for one key, if the registry tracks it. */
|
|
37
|
+
recordFor(key: ResourceKey): ResourceRecord | undefined;
|
|
38
|
+
/** All tracked records, swept against the clock. */
|
|
39
|
+
snapshot(): ResourceRecord[];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/health/resource-health/registry.ts"],"names":[],"mappings":"AAsBA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAA;AA8FnB,qBAAa,sBAAsB;;gBAMrB,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,oBAA4C;IAK9E;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI;IAiBjD,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc;IAwB3C;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU;IAuDpC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU;IAgCtC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO;IAkBhE,qEAAqE;IACrE,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS;IAIvD,oDAAoD;IACpD,QAAQ,IAAI,cAAc,EAAE;CAI7B"}
|