open-multi-agent-kit 0.99.0 → 1.2.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/CHANGELOG.md +30 -1
- package/README.md +3 -3
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +1 -0
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bundled-coding-agent.d.ts +10 -0
- package/dist/bun/register-bundled-coding-agent.d.ts.map +1 -0
- package/dist/bun/register-bundled-coding-agent.js +12 -0
- package/dist/bun/register-bundled-coding-agent.js.map +1 -0
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/neo-cli.d.ts +9 -0
- package/dist/commands/neo-cli.d.ts.map +1 -0
- package/dist/commands/neo-cli.js +61 -0
- package/dist/commands/neo-cli.js.map +1 -0
- package/dist/coordination/awareness.d.ts +32 -0
- package/dist/coordination/awareness.d.ts.map +1 -0
- package/dist/coordination/awareness.js +55 -0
- package/dist/coordination/awareness.js.map +1 -0
- package/dist/coordination/broker.d.ts +79 -0
- package/dist/coordination/broker.d.ts.map +1 -0
- package/dist/coordination/broker.js +195 -0
- package/dist/coordination/broker.js.map +1 -0
- package/dist/coordination/index.d.ts +16 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +16 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/integration.d.ts +59 -0
- package/dist/coordination/integration.d.ts.map +1 -0
- package/dist/coordination/integration.js +126 -0
- package/dist/coordination/integration.js.map +1 -0
- package/dist/coordination/operation.d.ts +106 -0
- package/dist/coordination/operation.d.ts.map +1 -0
- package/dist/coordination/operation.js +179 -0
- package/dist/coordination/operation.js.map +1 -0
- package/dist/coordination/resource.d.ts +33 -0
- package/dist/coordination/resource.d.ts.map +1 -0
- package/dist/coordination/resource.js +89 -0
- package/dist/coordination/resource.js.map +1 -0
- package/dist/coordination/session.d.ts +74 -0
- package/dist/coordination/session.d.ts.map +1 -0
- package/dist/coordination/session.js +143 -0
- package/dist/coordination/session.js.map +1 -0
- package/dist/coordination/types.d.ts +68 -0
- package/dist/coordination/types.d.ts.map +1 -0
- package/dist/coordination/types.js +26 -0
- package/dist/coordination/types.js.map +1 -0
- package/dist/core/agent-session.d.ts +29 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +135 -37
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bundled-skills.d.ts +4 -0
- package/dist/core/bundled-skills.d.ts.map +1 -0
- package/dist/core/bundled-skills.js +32 -0
- package/dist/core/bundled-skills.js.map +1 -0
- package/dist/core/cli-diagnostics.d.ts +6 -0
- package/dist/core/cli-diagnostics.d.ts.map +1 -0
- package/dist/core/cli-diagnostics.js +20 -0
- package/dist/core/cli-diagnostics.js.map +1 -0
- package/dist/core/compaction/control-state.d.ts +41 -0
- package/dist/core/compaction/control-state.d.ts.map +1 -0
- package/dist/core/compaction/control-state.js +85 -0
- package/dist/core/compaction/control-state.js.map +1 -0
- package/dist/core/compaction/fallback.d.ts +60 -0
- package/dist/core/compaction/fallback.d.ts.map +1 -0
- package/dist/core/compaction/fallback.js +117 -0
- package/dist/core/compaction/fallback.js.map +1 -0
- package/dist/core/compaction/index.d.ts +2 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +2 -0
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/context-budget-headroom-candidates.d.ts +16 -1
- package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-candidates.js +31 -13
- package/dist/core/context-budget-headroom-candidates.js.map +1 -1
- package/dist/core/context-budget-headroom-types.d.ts +7 -1
- package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-types.js +0 -1
- package/dist/core/context-budget-headroom-types.js.map +1 -1
- package/dist/core/context-budget-headroom.d.ts +22 -0
- package/dist/core/context-budget-headroom.d.ts.map +1 -1
- package/dist/core/context-budget-headroom.js +46 -2
- package/dist/core/context-budget-headroom.js.map +1 -1
- package/dist/core/context-budget-v2-global-pass.d.ts +21 -0
- package/dist/core/context-budget-v2-global-pass.d.ts.map +1 -0
- package/dist/core/context-budget-v2-global-pass.js +203 -0
- package/dist/core/context-budget-v2-global-pass.js.map +1 -0
- package/dist/core/context-budget-v2-input-validation.d.ts +4 -0
- package/dist/core/context-budget-v2-input-validation.d.ts.map +1 -0
- package/dist/core/context-budget-v2-input-validation.js +79 -0
- package/dist/core/context-budget-v2-input-validation.js.map +1 -0
- package/dist/core/context-budget-v2-observability.d.ts +15 -0
- package/dist/core/context-budget-v2-observability.d.ts.map +1 -0
- package/dist/core/context-budget-v2-observability.js +35 -0
- package/dist/core/context-budget-v2-observability.js.map +1 -0
- package/dist/core/context-budget-v2-planned-items.d.ts +17 -0
- package/dist/core/context-budget-v2-planned-items.d.ts.map +1 -0
- package/dist/core/context-budget-v2-planned-items.js +59 -0
- package/dist/core/context-budget-v2-planned-items.js.map +1 -0
- package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
- package/dist/core/context-budget-v2-planner.js +69 -51
- package/dist/core/context-budget-v2-planner.js.map +1 -1
- package/dist/core/context-budget-v2-scoring.d.ts +7 -1
- package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
- package/dist/core/context-budget-v2-scoring.js.map +1 -1
- package/dist/core/context-budget-v2-selection.d.ts +22 -3
- package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
- package/dist/core/context-budget-v2-selection.js +41 -59
- package/dist/core/context-budget-v2-selection.js.map +1 -1
- package/dist/core/context-budget-v2-tiers.d.ts.map +1 -1
- package/dist/core/context-budget-v2-tiers.js +9 -42
- package/dist/core/context-budget-v2-tiers.js.map +1 -1
- package/dist/core/context-budget-v2-types.d.ts +14 -2
- package/dist/core/context-budget-v2-types.d.ts.map +1 -1
- package/dist/core/context-budget-v2-types.js +6 -1
- package/dist/core/context-budget-v2-types.js.map +1 -1
- package/dist/core/extensions/bundled-virtual-modules.d.ts +15 -0
- package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/bundled-virtual-modules.js +63 -0
- package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -42
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +6 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +10 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/loadout-runtime.d.ts +2 -8
- package/dist/core/loadout-runtime.d.ts.map +1 -1
- package/dist/core/loadout-runtime.js.map +1 -1
- package/dist/core/mcp/client.d.ts +27 -6
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +80 -20
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +10 -1
- package/dist/core/mcp/manager.d.ts.map +1 -1
- package/dist/core/mcp/manager.js +68 -9
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/protocol.d.ts +9 -3
- package/dist/core/mcp/protocol.d.ts.map +1 -1
- package/dist/core/mcp/protocol.js +61 -15
- package/dist/core/mcp/protocol.js.map +1 -1
- package/dist/core/mcp/stdio-transport.d.ts +12 -1
- package/dist/core/mcp/stdio-transport.d.ts.map +1 -1
- package/dist/core/mcp/stdio-transport.js +30 -2
- package/dist/core/mcp/stdio-transport.js.map +1 -1
- package/dist/core/mcp-descriptor-injection.d.ts +26 -0
- package/dist/core/mcp-descriptor-injection.d.ts.map +1 -0
- package/dist/core/mcp-descriptor-injection.js +25 -0
- package/dist/core/mcp-descriptor-injection.js.map +1 -0
- package/dist/core/mcp-public-presets.d.ts +1 -3
- package/dist/core/mcp-public-presets.d.ts.map +1 -1
- package/dist/core/mcp-public-presets.js +3 -15
- package/dist/core/mcp-public-presets.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +24 -3
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/neo/catalog.d.ts +20 -0
- package/dist/core/neo/catalog.d.ts.map +1 -0
- package/dist/core/neo/catalog.js +50 -0
- package/dist/core/neo/catalog.js.map +1 -0
- package/dist/core/neo/setup.d.ts +3 -0
- package/dist/core/neo/setup.d.ts.map +1 -0
- package/dist/core/neo/setup.js +47 -0
- package/dist/core/neo/setup.js.map +1 -0
- package/dist/core/provider-default-models.d.ts +2 -0
- package/dist/core/provider-default-models.d.ts.map +1 -1
- package/dist/core/provider-default-models.js +2 -0
- package/dist/core/provider-default-models.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +2 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/provider-error-classification.d.ts +57 -0
- package/dist/core/provider-error-classification.d.ts.map +1 -0
- package/dist/core/provider-error-classification.js +103 -0
- package/dist/core/provider-error-classification.js.map +1 -0
- package/dist/core/provider-resilience.d.ts +10 -0
- package/dist/core/provider-resilience.d.ts.map +1 -1
- package/dist/core/provider-resilience.js +36 -3
- package/dist/core/provider-resilience.js.map +1 -1
- package/dist/core/provider-usage-commandcode.d.ts +9 -0
- package/dist/core/provider-usage-commandcode.d.ts.map +1 -0
- package/dist/core/provider-usage-commandcode.js +198 -0
- package/dist/core/provider-usage-commandcode.js.map +1 -0
- package/dist/core/provider-usage-devin.d.ts +5 -3
- package/dist/core/provider-usage-devin.d.ts.map +1 -1
- package/dist/core/provider-usage-devin.js +15 -5
- package/dist/core/provider-usage-devin.js.map +1 -1
- package/dist/core/provider-usage-types.d.ts +1 -1
- package/dist/core/provider-usage-types.d.ts.map +1 -1
- package/dist/core/provider-usage-types.js.map +1 -1
- package/dist/core/provider-usage.d.ts.map +1 -1
- package/dist/core/provider-usage.js +6 -0
- package/dist/core/provider-usage.js.map +1 -1
- package/dist/core/reasoning-router-resolver.d.ts +7 -0
- package/dist/core/reasoning-router-resolver.d.ts.map +1 -1
- package/dist/core/reasoning-router-resolver.js +21 -3
- package/dist/core/reasoning-router-resolver.js.map +1 -1
- package/dist/core/reasoning-router-v4.d.ts +8 -5
- package/dist/core/reasoning-router-v4.d.ts.map +1 -1
- package/dist/core/reasoning-router-v4.js +8 -5
- package/dist/core/reasoning-router-v4.js.map +1 -1
- package/dist/core/resource-admission.d.ts +36 -0
- package/dist/core/resource-admission.d.ts.map +1 -1
- package/dist/core/resource-admission.js +59 -0
- package/dist/core/resource-admission.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +2 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/run-usage-ledger.d.ts +47 -0
- package/dist/core/run-usage-ledger.d.ts.map +1 -0
- package/dist/core/run-usage-ledger.js +162 -0
- package/dist/core/run-usage-ledger.js.map +1 -0
- package/dist/core/run-usage-operation.d.ts +8 -0
- package/dist/core/run-usage-operation.d.ts.map +1 -0
- package/dist/core/run-usage-operation.js +12 -0
- package/dist/core/run-usage-operation.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +5 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-compaction-service.d.ts +15 -0
- package/dist/core/session-compaction-service.d.ts.map +1 -1
- package/dist/core/session-compaction-service.js +17 -4
- package/dist/core/session-compaction-service.js.map +1 -1
- package/dist/core/session-failure-cause.d.ts.map +1 -1
- package/dist/core/session-failure-cause.js +14 -5
- package/dist/core/session-failure-cause.js.map +1 -1
- package/dist/core/session-prompt-lifecycle.d.ts +6 -0
- package/dist/core/session-prompt-lifecycle.d.ts.map +1 -1
- package/dist/core/session-prompt-lifecycle.js +47 -2
- package/dist/core/session-prompt-lifecycle.js.map +1 -1
- package/dist/core/session-termination.d.ts.map +1 -1
- package/dist/core/session-termination.js +4 -2
- package/dist/core/session-termination.js.map +1 -1
- package/dist/core/subagent-lane-authority.d.ts +28 -0
- package/dist/core/subagent-lane-authority.d.ts.map +1 -0
- package/dist/core/subagent-lane-authority.js +119 -0
- package/dist/core/subagent-lane-authority.js.map +1 -0
- package/dist/core/subagent-lane-contract.d.ts +114 -0
- package/dist/core/subagent-lane-contract.d.ts.map +1 -0
- package/dist/core/subagent-lane-contract.js +18 -0
- package/dist/core/subagent-lane-contract.js.map +1 -0
- package/dist/core/subagent-lane-launcher.d.ts +3 -6
- package/dist/core/subagent-lane-launcher.d.ts.map +1 -1
- package/dist/core/subagent-lane-launcher.js +53 -12
- package/dist/core/subagent-lane-launcher.js.map +1 -1
- package/dist/core/subagent-orchestration.d.ts +4 -17
- package/dist/core/subagent-orchestration.d.ts.map +1 -1
- package/dist/core/subagent-orchestration.js.map +1 -1
- package/dist/core/todo-runtime-state.d.ts +12 -0
- package/dist/core/todo-runtime-state.d.ts.map +1 -1
- package/dist/core/todo-runtime-state.js +23 -0
- package/dist/core/todo-runtime-state.js.map +1 -1
- package/dist/core/verified-run/broker.d.ts.map +1 -1
- package/dist/core/verified-run/broker.js +4 -1
- package/dist/core/verified-run/broker.js.map +1 -1
- package/dist/core/workload-permit-pool.d.ts +1 -1
- package/dist/core/workload-permit-pool.d.ts.map +1 -1
- package/dist/core/workload-permit-pool.js +3 -0
- package/dist/core/workload-permit-pool.js.map +1 -1
- package/dist/guardrails/strict-evidence-approval-adapter.d.ts +34 -0
- package/dist/guardrails/strict-evidence-approval-adapter.d.ts.map +1 -0
- package/dist/guardrails/strict-evidence-approval-adapter.js +70 -0
- package/dist/guardrails/strict-evidence-approval-adapter.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +11 -18
- package/dist/main.js.map +1 -1
- package/dist/metacognition/calibration-selective.d.ts +78 -0
- package/dist/metacognition/calibration-selective.d.ts.map +1 -0
- package/dist/metacognition/calibration-selective.js +161 -0
- package/dist/metacognition/calibration-selective.js.map +1 -0
- package/dist/metacognition/calibration.d.ts +62 -0
- package/dist/metacognition/calibration.d.ts.map +1 -0
- package/dist/metacognition/calibration.js +122 -0
- package/dist/metacognition/calibration.js.map +1 -0
- package/dist/metacognition/checkpoint.d.ts +60 -0
- package/dist/metacognition/checkpoint.d.ts.map +1 -0
- package/dist/metacognition/checkpoint.js +57 -0
- package/dist/metacognition/checkpoint.js.map +1 -0
- package/dist/metacognition/context7.d.ts +48 -0
- package/dist/metacognition/context7.d.ts.map +1 -0
- package/dist/metacognition/context7.js +154 -0
- package/dist/metacognition/context7.js.map +1 -0
- package/dist/metacognition/decision.d.ts +44 -0
- package/dist/metacognition/decision.d.ts.map +1 -0
- package/dist/metacognition/decision.js +111 -0
- package/dist/metacognition/decision.js.map +1 -0
- package/dist/metacognition/evaluation.d.ts +73 -0
- package/dist/metacognition/evaluation.d.ts.map +1 -0
- package/dist/metacognition/evaluation.js +97 -0
- package/dist/metacognition/evaluation.js.map +1 -0
- package/dist/metacognition/index.d.ts +31 -0
- package/dist/metacognition/index.d.ts.map +1 -0
- package/dist/metacognition/index.js +31 -0
- package/dist/metacognition/index.js.map +1 -0
- package/dist/metacognition/knowledge-action.d.ts +43 -0
- package/dist/metacognition/knowledge-action.d.ts.map +1 -0
- package/dist/metacognition/knowledge-action.js +60 -0
- package/dist/metacognition/knowledge-action.js.map +1 -0
- package/dist/metacognition/knowledge.d.ts +84 -0
- package/dist/metacognition/knowledge.d.ts.map +1 -0
- package/dist/metacognition/knowledge.js +165 -0
- package/dist/metacognition/knowledge.js.map +1 -0
- package/dist/metacognition/obligations.d.ts +82 -0
- package/dist/metacognition/obligations.d.ts.map +1 -0
- package/dist/metacognition/obligations.js +139 -0
- package/dist/metacognition/obligations.js.map +1 -0
- package/dist/metacognition/observation-validity.d.ts +83 -0
- package/dist/metacognition/observation-validity.d.ts.map +1 -0
- package/dist/metacognition/observation-validity.js +118 -0
- package/dist/metacognition/observation-validity.js.map +1 -0
- package/dist/metacognition/observe.d.ts +45 -0
- package/dist/metacognition/observe.d.ts.map +1 -0
- package/dist/metacognition/observe.js +59 -0
- package/dist/metacognition/observe.js.map +1 -0
- package/dist/metacognition/policy.d.ts +53 -0
- package/dist/metacognition/policy.d.ts.map +1 -0
- package/dist/metacognition/policy.js +155 -0
- package/dist/metacognition/policy.js.map +1 -0
- package/dist/metacognition/predictions.d.ts +78 -0
- package/dist/metacognition/predictions.d.ts.map +1 -0
- package/dist/metacognition/predictions.js +181 -0
- package/dist/metacognition/predictions.js.map +1 -0
- package/dist/metacognition/retrieval.d.ts +53 -0
- package/dist/metacognition/retrieval.d.ts.map +1 -0
- package/dist/metacognition/retrieval.js +170 -0
- package/dist/metacognition/retrieval.js.map +1 -0
- package/dist/metacognition/risk.d.ts +48 -0
- package/dist/metacognition/risk.d.ts.map +1 -0
- package/dist/metacognition/risk.js +165 -0
- package/dist/metacognition/risk.js.map +1 -0
- package/dist/metacognition/route-economics.d.ts +95 -0
- package/dist/metacognition/route-economics.d.ts.map +1 -0
- package/dist/metacognition/route-economics.js +110 -0
- package/dist/metacognition/route-economics.js.map +1 -0
- package/dist/metacognition/runtime-bridge.d.ts +54 -0
- package/dist/metacognition/runtime-bridge.d.ts.map +1 -0
- package/dist/metacognition/runtime-bridge.js +140 -0
- package/dist/metacognition/runtime-bridge.js.map +1 -0
- package/dist/metacognition/skills.d.ts +42 -0
- package/dist/metacognition/skills.d.ts.map +1 -0
- package/dist/metacognition/skills.js +220 -0
- package/dist/metacognition/skills.js.map +1 -0
- package/dist/metacognition/state.d.ts +110 -0
- package/dist/metacognition/state.d.ts.map +1 -0
- package/dist/metacognition/state.js +52 -0
- package/dist/metacognition/state.js.map +1 -0
- package/dist/metacognition/validation.d.ts +19 -0
- package/dist/metacognition/validation.d.ts.map +1 -0
- package/dist/metacognition/validation.js +58 -0
- package/dist/metacognition/validation.js.map +1 -0
- package/dist/metacognition/verification.d.ts +93 -0
- package/dist/metacognition/verification.d.ts.map +1 -0
- package/dist/metacognition/verification.js +132 -0
- package/dist/metacognition/verification.js.map +1 -0
- package/dist/metacognition/verifier.d.ts +49 -0
- package/dist/metacognition/verifier.d.ts.map +1 -0
- package/dist/metacognition/verifier.js +88 -0
- package/dist/metacognition/verifier.js.map +1 -0
- package/dist/modes/acp/acp-agent.d.ts +24 -0
- package/dist/modes/acp/acp-agent.d.ts.map +1 -0
- package/dist/modes/acp/acp-agent.js +133 -0
- package/dist/modes/acp/acp-agent.js.map +1 -0
- package/dist/modes/acp/acp-mode.d.ts +4 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +34 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/acp-session.d.ts +4 -0
- package/dist/modes/acp/acp-session.d.ts.map +1 -0
- package/dist/modes/acp/acp-session.js +76 -0
- package/dist/modes/acp/acp-session.js.map +1 -0
- package/dist/modes/acp/acp-transport.d.ts +5 -0
- package/dist/modes/acp/acp-transport.d.ts.map +1 -0
- package/dist/modes/acp/acp-transport.js +90 -0
- package/dist/modes/acp/acp-transport.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/observation/identity.d.ts +14 -0
- package/dist/observation/identity.d.ts.map +1 -0
- package/dist/observation/identity.js +29 -0
- package/dist/observation/identity.js.map +1 -0
- package/dist/observation/index.d.ts +13 -0
- package/dist/observation/index.d.ts.map +1 -0
- package/dist/observation/index.js +13 -0
- package/dist/observation/index.js.map +1 -0
- package/dist/observation/observe-mode.d.ts +46 -0
- package/dist/observation/observe-mode.d.ts.map +1 -0
- package/dist/observation/observe-mode.js +83 -0
- package/dist/observation/observe-mode.js.map +1 -0
- package/dist/observation/store.d.ts +53 -0
- package/dist/observation/store.d.ts.map +1 -0
- package/dist/observation/store.js +126 -0
- package/dist/observation/store.js.map +1 -0
- package/dist/observation/types.d.ts +72 -0
- package/dist/observation/types.d.ts.map +1 -0
- package/dist/observation/types.js +9 -0
- package/dist/observation/types.js.map +1 -0
- package/dist/observation/view.d.ts +39 -0
- package/dist/observation/view.d.ts.map +1 -0
- package/dist/observation/view.js +173 -0
- package/dist/observation/view.js.map +1 -0
- package/docs/audit-revalidation-2026-09-17.md +77 -0
- package/docs/devin-harness.md +33 -4
- package/docs/ecraf-normalization.md +83 -0
- package/docs/metacognition.md +51 -0
- package/docs/model-catalog-refresh.md +110 -1
- package/docs/models.md +1 -1
- package/docs/neo.md +134 -0
- package/docs/providers.md +125 -6
- package/docs/run-usage-ledger.md +56 -0
- package/docs/runtime-algorithms.md +151 -3
- package/docs/skills.md +1 -1
- package/docs/usage.md +2 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/adaptive-agent-runtime.ts +14 -1
- package/examples/extensions/subagent/graph-result.ts +48 -0
- package/examples/extensions/subagent/index.ts +246 -111
- package/examples/extensions/subagent/managed-process-tree.ts +42 -0
- package/examples/extensions/subagent/managed-process.test.ts +24 -0
- package/examples/extensions/subagent/managed-process.ts +93 -112
- package/examples/extensions/subagent/subagent-runtime-types.ts +17 -1
- package/examples/extensions/subagent/subagent-stream.ts +161 -0
- package/examples/extensions/terminal-browser/README.md +54 -0
- package/examples/extensions/terminal-browser/bridge-protocol.ts +29 -0
- package/examples/extensions/terminal-browser/bridge.ts +219 -0
- package/examples/extensions/terminal-browser/browser-surface.ts +288 -0
- package/examples/extensions/terminal-browser/index.ts +215 -0
- package/examples/extensions/terminal-browser/placeholders.ts +49 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +18 -18
- package/package.json +8 -7
- package/resources/neo/skills/omk-browser/SKILL.md +32 -0
- package/resources/neo/skills/omk-code-review/SKILL.md +24 -0
- package/resources/neo/skills/omk-computeruse/SKILL.md +34 -0
- package/resources/neo/skills/omk-mcp-setup/SKILL.md +48 -0
- package/resources/neo/skills/omk-research/SKILL.md +24 -0
- package/resources/neo/skills/omk-site/SKILL.md +28 -0
|
@@ -18,7 +18,7 @@ import { basename, dirname, join as joinPath } from "node:path";
|
|
|
18
18
|
import { isDeepStrictEqual } from "node:util";
|
|
19
19
|
import { getVisionRouteModel } from "omk-agent-core";
|
|
20
20
|
import { clampThinkingLevel, cleanupSessionResources, deriveContextPromptCacheKey, getSupportedThinkingLevels, isBuiltinStreamFn, modelsAreEqual, resetApiProviders, } from "omk-ai";
|
|
21
|
-
import { APP_NAME, VERSION } from "../config.js";
|
|
21
|
+
import { APP_NAME, getAgentDir, VERSION } from "../config.js";
|
|
22
22
|
import { theme } from "../modes/interactive/theme/theme.js";
|
|
23
23
|
import { stripFrontmatter } from "../utils/frontmatter.js";
|
|
24
24
|
import { resolvePath } from "../utils/paths.js";
|
|
@@ -31,8 +31,9 @@ import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth
|
|
|
31
31
|
import { parseBangInvocation } from "./bang-skill-invocation.js";
|
|
32
32
|
import { getCompactionHeadroomThreshold } from "./compaction/compaction.js";
|
|
33
33
|
import { createCompactionHysteresisConfig, createCompactionHysteresisState, stepCompactionHysteresis, } from "./compaction/hysteresis.js";
|
|
34
|
-
import { calculateContextTokens, collectEntriesForBranchSummary, compact, estimateContextTokens, estimateProjectedContextTokens, generateBranchSummary, prepareCompaction, resolveCompactionModel, } from "./compaction/index.js";
|
|
34
|
+
import { calculateContextTokens, collectEntriesForBranchSummary, compact, estimateContextTokens, estimateProjectedContextTokens, generateBranchSummary, prepareCompaction, resolveCompactionModel, summarizeWithFallback, } from "./compaction/index.js";
|
|
35
35
|
import { summarizeWithOAuthRecovery } from "./compaction/oauth-recovery.js";
|
|
36
|
+
import { overflowRetryBlocked } from "./compaction/overflow-retry-guard.js";
|
|
36
37
|
import { compactionEmitWillRetry } from "./compaction/resume-policy.js";
|
|
37
38
|
import { isSessionModelOverflow, shouldSkipCompactionCheck } from "./compaction-gate.js";
|
|
38
39
|
import { estimateToolResultReserve, } from "./context-budget-reserved-tokens.js";
|
|
@@ -47,11 +48,14 @@ import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
|
47
48
|
import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
48
49
|
import { assertTextChatModelForCompletion, grokHarnessAutoApplyEnabled, isGrokOAuthProvider, selectGrokHarnessSkills, } from "./grok-harness.js";
|
|
49
50
|
import { grokPlaybookAppendForProvider } from "./grok-playbook.js";
|
|
51
|
+
import { loadHookInventory } from "./hook-inventory.js";
|
|
50
52
|
import { captureHostResourceSnapshot } from "./host-resource-snapshot.js";
|
|
51
53
|
import { decideLoadoutAccess } from "./loadout-access-policy.js";
|
|
54
|
+
import { buildCapabilityInventory } from "./loadout-runtime.js";
|
|
52
55
|
import { loadMcpServerConfigs } from "./mcp/config.js";
|
|
53
56
|
import { McpManager } from "./mcp/manager.js";
|
|
54
57
|
import { buildRuntimeProvenance } from "./runtime-provenance.js";
|
|
58
|
+
import { createSubagentLaneAuthority } from "./subagent-lane-authority.js";
|
|
55
59
|
import { TurnMetricsSink } from "./turn-metrics.js";
|
|
56
60
|
/** Values that disable a session-level feature through its environment variable. */
|
|
57
61
|
const DISABLED_ENV_VALUES = new Set(["0", "false", "off", "disable", "disabled"]);
|
|
@@ -94,12 +98,12 @@ import { classifyPromptCacheTransition } from "./prompt-cache.js";
|
|
|
94
98
|
import * as promptSettlement from "./prompt-settlement.js";
|
|
95
99
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
96
100
|
import { isQuotaExhaustionMessage, isStickySafetyModel, isUpstreamUnavailableMessage, pickFailoverCandidate, resolveFailoverCandidates, resolveProviderResilience, sameModelRouteCandidates, shouldEjectStickySafetyModel, shouldHonorSafetyFailover, stickySafetyBlockMessage, } from "./provider-resilience.js";
|
|
97
|
-
import { computeRetryDelayMs, failoverModelKey, isFailoverTriggerError, isRetryableAssistantError, nextRetryAttempt, retryBudgetForAssistantError, } from "./provider-retry.js";
|
|
101
|
+
import { computeRetryDelayMs, failoverModelKey, isEmptyStreamedCompletion, isFailoverTriggerError, isRetryableAssistantError, nextRetryAttempt, retryBudgetForAssistantError, } from "./provider-retry.js";
|
|
98
102
|
import { getBiasStepsForCell, parseRouterBiasSnapshot } from "./reasoning-router-bias.js";
|
|
99
103
|
import { classifyTaskV4, deriveRouterFeedbackFeaturesV4, resolveThinkingLevelV4WithUncertainty, TASK_CLASS_THINKING_LEVELS_V4, } from "./reasoning-router-v4.js";
|
|
100
104
|
import { redactSensitiveText, redactSensitiveTextForced } from "./redaction.js";
|
|
101
105
|
import { getRepositoryRouterLearningPaths } from "./repository-learning-scope.js";
|
|
102
|
-
import { decideResourceAdmission } from "./resource-admission.js";
|
|
106
|
+
import { createResourcePressureStabilizer, decideResourceAdmission, evaluateResourcePressure, rederiveResourceAdmissionForPressure, } from "./resource-admission.js";
|
|
103
107
|
import { resolveResourceGovernorSettings } from "./resource-governor-settings.js";
|
|
104
108
|
import { admissionObservationFacts, classificationObservationFacts, ResourceObservationJournal, settledObservationFacts, snapshotObservationFacts, soundObservationFacts, } from "./resource-observation-journal.js";
|
|
105
109
|
import { decideResourceSafetyGate, RESOURCE_PRESSURE_REQUIRED_ACTION } from "./resource-safety-gate.js";
|
|
@@ -120,6 +124,7 @@ import { assembleSessionSystemPrompt } from "./session-system-prompt.js";
|
|
|
120
124
|
import { classifySessionTermination, } from "./session-termination.js";
|
|
121
125
|
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
122
126
|
import { buildSystemPromptPlan } from "./system-prompt.js";
|
|
127
|
+
import { todoControlState } from "./todo-runtime-state.js";
|
|
123
128
|
import { createLocalBashOperations } from "./tools/bash.js";
|
|
124
129
|
import { createAllToolDefinitions } from "./tools/index.js";
|
|
125
130
|
import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
|
|
@@ -289,6 +294,10 @@ export class AgentSession {
|
|
|
289
294
|
_resourceObservationJournals = new Map();
|
|
290
295
|
_latestResourcePromptRunId = null;
|
|
291
296
|
_lastResourceAdmission = null;
|
|
297
|
+
// Per-session pressure hysteresis (audit §16.1): escalation is immediate,
|
|
298
|
+
// recovery requires consecutive healthier probes so the applied cap does
|
|
299
|
+
// not flap around a threshold between prompts.
|
|
300
|
+
_resourcePressureStabilizer;
|
|
292
301
|
_workloadPermitPool;
|
|
293
302
|
_pendingRuntimeTerminationCause;
|
|
294
303
|
_activeRunToolTermination;
|
|
@@ -392,6 +401,10 @@ export class AgentSession {
|
|
|
392
401
|
pendingToolCallIds: () => this.agent.state.pendingToolCalls,
|
|
393
402
|
getUserMessageText: (message) => this._getUserMessageText(message),
|
|
394
403
|
cwd: this._cwd,
|
|
404
|
+
// Host control authority for preserved provenance: the TODO ledger is
|
|
405
|
+
// the only production producer today; the service binds its snapshot to
|
|
406
|
+
// the compaction commit boundary and discards stale summaries.
|
|
407
|
+
controlState: todoControlState,
|
|
395
408
|
invalidateContextBudget: () => this._invalidateContextBudgetCache({ type: "transcriptRepair" }),
|
|
396
409
|
refreshAgentMessages: () => {
|
|
397
410
|
this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
|
|
@@ -861,8 +874,13 @@ export class AgentSession {
|
|
|
861
874
|
this._overflowRecoveryAttempts = 0;
|
|
862
875
|
}
|
|
863
876
|
// Reset retry counter immediately on successful assistant response
|
|
864
|
-
// This prevents accumulation across multiple LLM calls within a turn
|
|
865
|
-
|
|
877
|
+
// This prevents accumulation across multiple LLM calls within a turn.
|
|
878
|
+
// An empty streamed completion wears a success shape (stop=stop, zero
|
|
879
|
+
// usable output) but is a dead stream — counting it as success reset
|
|
880
|
+
// the budget every cycle and retried forever (union-alpha relay loop).
|
|
881
|
+
if (assistantMsg.stopReason !== "error" &&
|
|
882
|
+
!isEmptyStreamedCompletion(assistantMsg) &&
|
|
883
|
+
this._retryAttempt > 0) {
|
|
866
884
|
this._emit({
|
|
867
885
|
type: "auto_retry_end",
|
|
868
886
|
success: true,
|
|
@@ -1371,16 +1389,19 @@ export class AgentSession {
|
|
|
1371
1389
|
* Extract the most recent user query text from conversation messages.
|
|
1372
1390
|
* Returns undefined when no user message exists or content is empty.
|
|
1373
1391
|
* Handles both string content and multimodal (array) content.
|
|
1392
|
+
*
|
|
1393
|
+
* The scan walks the whole transcript backwards and stops at the first user
|
|
1394
|
+
* message. A fixed tail window cannot work here: tool results are their own
|
|
1395
|
+
* messages, so a single turn that calls two tools already leaves
|
|
1396
|
+
* `[user, assistant, toolResult, toolResult]` and buries the task four deep.
|
|
1397
|
+
* Losing it mid-turn collapses every skill to the neutral relevance score and
|
|
1398
|
+
* degrades ranking to catalogue order, precisely while tools are running and
|
|
1399
|
+
* a matching skill matters most.
|
|
1374
1400
|
*/
|
|
1375
1401
|
_extractCurrentQuery() {
|
|
1376
1402
|
const messages = this.messages;
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
}
|
|
1380
|
-
// Scan recent messages (last 3) for the most recent user message
|
|
1381
|
-
const recent = messages.slice(-3);
|
|
1382
|
-
for (let i = recent.length - 1; i >= 0; i--) {
|
|
1383
|
-
const msg = recent[i];
|
|
1403
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
1404
|
+
const msg = messages[i];
|
|
1384
1405
|
if (!msg || !("role" in msg) || msg.role !== "user") {
|
|
1385
1406
|
continue;
|
|
1386
1407
|
}
|
|
@@ -1576,8 +1597,12 @@ export class AgentSession {
|
|
|
1576
1597
|
}
|
|
1577
1598
|
const snapshot = await captureHostResourceSnapshot(probeOptions);
|
|
1578
1599
|
const decision = decideResourceAdmission({ snapshot, config: resolved.admission, configuredCaps });
|
|
1600
|
+
const stabilized = this._stabilizeResourcePressure(snapshot, resolved);
|
|
1601
|
+
const appliedDecision = stabilized === decision.pressure
|
|
1602
|
+
? decision
|
|
1603
|
+
: rederiveResourceAdmissionForPressure(decision, resolved.admission.caps, configuredCaps, stabilized);
|
|
1579
1604
|
if (this._latestResourcePromptRunId === promptRunId) {
|
|
1580
|
-
this._lastResourceAdmission =
|
|
1605
|
+
this._lastResourceAdmission = appliedDecision;
|
|
1581
1606
|
}
|
|
1582
1607
|
resourceObservations?.record("resource_snapshot_v1", snapshotObservationFacts(snapshot));
|
|
1583
1608
|
resourceObservations?.record("resource_admission_v1", admissionObservationFacts(decision));
|
|
@@ -1587,7 +1612,7 @@ export class AgentSession {
|
|
|
1587
1612
|
this.agent.maxToolConcurrency = cap;
|
|
1588
1613
|
},
|
|
1589
1614
|
});
|
|
1590
|
-
const lease = this._resourceLeaseController.acquire({ promptRunId, decision });
|
|
1615
|
+
const lease = this._resourceLeaseController.acquire({ promptRunId, decision: appliedDecision });
|
|
1591
1616
|
resourceObservations?.record("resource_lease_acquired_v1", {
|
|
1592
1617
|
decisionId: decision.decisionId,
|
|
1593
1618
|
appliedToolCap: decision.maxToolConcurrency,
|
|
@@ -1598,6 +1623,15 @@ export class AgentSession {
|
|
|
1598
1623
|
return null;
|
|
1599
1624
|
}
|
|
1600
1625
|
}
|
|
1626
|
+
/**
|
|
1627
|
+
* Feed one snapshot's raw pressure through the per-session stabilizer.
|
|
1628
|
+
* Created lazily so sessions that never probe carry no state; the first
|
|
1629
|
+
* observation installs its own level directly (no warmup lag).
|
|
1630
|
+
*/
|
|
1631
|
+
_stabilizeResourcePressure(snapshot, resolved) {
|
|
1632
|
+
this._resourcePressureStabilizer ??= createResourcePressureStabilizer();
|
|
1633
|
+
return this._resourcePressureStabilizer.observe(evaluateResourcePressure(snapshot, resolved.admission.thresholds));
|
|
1634
|
+
}
|
|
1601
1635
|
_openResourceObservations(promptRunId) {
|
|
1602
1636
|
this._latestResourcePromptRunId = promptRunId;
|
|
1603
1637
|
try {
|
|
@@ -1633,6 +1667,30 @@ export class AgentSession {
|
|
|
1633
1667
|
getCurrentResourceAdmission() {
|
|
1634
1668
|
return this._lastResourceAdmission;
|
|
1635
1669
|
}
|
|
1670
|
+
/**
|
|
1671
|
+
* Spec 020 Req1 — canonical subagent lane authority bound to this session.
|
|
1672
|
+
* Rebuilt on each call so it tracks the live admission decision, shared
|
|
1673
|
+
* permit pool, and open prompt run. Extension tool contexts read it through
|
|
1674
|
+
* `ctx.getSubagentLaneAuthority()`.
|
|
1675
|
+
*/
|
|
1676
|
+
_getSubagentLaneAuthority() {
|
|
1677
|
+
const hookInventory = loadHookInventory(getAgentDir());
|
|
1678
|
+
const sessionView = {
|
|
1679
|
+
_baseToolDefinitions: this._baseToolDefinitions,
|
|
1680
|
+
_extensionRunner: this._extensionRunner,
|
|
1681
|
+
_customTools: this._customTools,
|
|
1682
|
+
};
|
|
1683
|
+
const inventory = buildCapabilityInventory(sessionView, this._resourceLoader, this._cwd, hookInventory);
|
|
1684
|
+
return createSubagentLaneAuthority({
|
|
1685
|
+
runId: this._activeRunId ?? `session-${this.sessionManager.getSessionId() ?? "unknown"}`,
|
|
1686
|
+
promptRunId: this._promptLifecycle.activePromptRunId,
|
|
1687
|
+
decision: this._lastResourceAdmission,
|
|
1688
|
+
permitPool: this.workloadPermitPool,
|
|
1689
|
+
inventory,
|
|
1690
|
+
signal: this.agent?.signal,
|
|
1691
|
+
noteDetachedChild: () => this._promptLifecycle.noteDetachedChild(),
|
|
1692
|
+
});
|
|
1693
|
+
}
|
|
1636
1694
|
/** §19.4 read-only SDK surface: capture a fresh host resource snapshot. */
|
|
1637
1695
|
async getHostResourceSnapshot() {
|
|
1638
1696
|
const resolved = resolveResourceGovernorSettings(this.settingsManager.getResourceGovernorSettings());
|
|
@@ -1741,12 +1799,15 @@ export class AgentSession {
|
|
|
1741
1799
|
if (this._isRetryableError(msg) && (await this._prepareRetry(msg))) {
|
|
1742
1800
|
return true;
|
|
1743
1801
|
}
|
|
1744
|
-
|
|
1802
|
+
// The retry budget is exhausted without a real answer. This covers the
|
|
1803
|
+
// empty-streamed-completion path whose success-shaped stopReason
|
|
1804
|
+
// otherwise left the UI pinned in the retrying state forever.
|
|
1805
|
+
if (this._retryAttempt > 0) {
|
|
1745
1806
|
this._emit({
|
|
1746
1807
|
type: "auto_retry_end",
|
|
1747
1808
|
success: false,
|
|
1748
1809
|
attempt: this._retryAttempt,
|
|
1749
|
-
finalError: msg.errorMessage,
|
|
1810
|
+
finalError: msg.errorMessage ?? "The provider returned an empty response.",
|
|
1750
1811
|
});
|
|
1751
1812
|
this._retryAttempt = 0;
|
|
1752
1813
|
this._refusedModels.clear();
|
|
@@ -3008,8 +3069,13 @@ export class AgentSession {
|
|
|
3008
3069
|
/**
|
|
3009
3070
|
* Effective context window for the upcoming turn.
|
|
3010
3071
|
* Image-bearing turns with a text-only session model are auto-routed to the
|
|
3011
|
-
* vision model (gpt-5.6-luna, 1M)
|
|
3012
|
-
*
|
|
3072
|
+
* vision model (gpt-5.6-luna, 1M), so the request has to fit both windows and
|
|
3073
|
+
* the binding limit is the smaller one. Session windows fall on both sides of
|
|
3074
|
+
* 1M: most catalogued models are smaller (median near 300K) and keep their own
|
|
3075
|
+
* window as the limit, while the larger-than-1M models are the ones the clamp
|
|
3076
|
+
* exists for — without it their threshold is computed against a window the
|
|
3077
|
+
* vision route will not honour, and the request overflows before compaction
|
|
3078
|
+
* fires. Text-only turns keep the session model's window untouched.
|
|
3013
3079
|
*/
|
|
3014
3080
|
_effectiveTurnContextWindow(pendingMessages, sessionWindow) {
|
|
3015
3081
|
// Vision routing keys off the full transcript, not just the pending turn:
|
|
@@ -3246,13 +3312,29 @@ export class AgentSession {
|
|
|
3246
3312
|
details = extensionCompaction.details;
|
|
3247
3313
|
}
|
|
3248
3314
|
else {
|
|
3249
|
-
|
|
3315
|
+
// Summarization can fail in a way no retry fixes (quota). The ladder
|
|
3316
|
+
// tries the live session model, then a deterministic trim, because a
|
|
3317
|
+
// failed compaction over the context window strands the whole run.
|
|
3318
|
+
const signal = this._autoCompactionAbortController.signal;
|
|
3319
|
+
const primaryModel = compactionModel;
|
|
3320
|
+
const compactResult = await summarizeWithFallback({
|
|
3250
3321
|
preparation,
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3322
|
+
primaryModel,
|
|
3323
|
+
sessionModel: this.model,
|
|
3324
|
+
isAborted: () => signal.aborted,
|
|
3325
|
+
summarize: async (model) => {
|
|
3326
|
+
const auth = model.provider === primaryModel.provider && model.id === primaryModel.id
|
|
3327
|
+
? { apiKey, headers }
|
|
3328
|
+
: await this._getCompactionRequestAuth(model);
|
|
3329
|
+
return this._summarizeCompaction({
|
|
3330
|
+
preparation,
|
|
3331
|
+
model,
|
|
3332
|
+
apiKey: auth.apiKey,
|
|
3333
|
+
headers: auth.headers,
|
|
3334
|
+
signal,
|
|
3335
|
+
reason,
|
|
3336
|
+
});
|
|
3337
|
+
},
|
|
3256
3338
|
});
|
|
3257
3339
|
summary = compactResult.summary;
|
|
3258
3340
|
firstKeptEntryId = compactResult.firstKeptEntryId;
|
|
@@ -3288,16 +3370,25 @@ export class AgentSession {
|
|
|
3288
3370
|
// the compaction_end event (so the TUI flushes its queued messages
|
|
3289
3371
|
// correctly) and the return value below.
|
|
3290
3372
|
const resumeMessages = this.agent.state.messages;
|
|
3291
|
-
|
|
3292
|
-
for (let i = resumeMessages.length - 1; i >= 0; i--) {
|
|
3293
|
-
const candidate = resumeMessages[i];
|
|
3294
|
-
if (candidate.role === "assistant") {
|
|
3295
|
-
lastAssistantMsg = candidate;
|
|
3296
|
-
break;
|
|
3297
|
-
}
|
|
3298
|
-
}
|
|
3373
|
+
const lastAssistantMsg = this._findLastAssistantMessage();
|
|
3299
3374
|
const endedCleanly = lastAssistantMsg?.stopReason === "stop";
|
|
3300
3375
|
const willResume = this.agent.hasQueuedMessages() || !endedCleanly;
|
|
3376
|
+
// overflow-retry-guard 배선: 압축 후 재전송 컨텍스트가 창을 확실히 초과하면
|
|
3377
|
+
// 재시도는 프로바이더 왕복만 소모한다 — 정확한 수치 진단과 함께 차단한다.
|
|
3378
|
+
const overflowBlock = willRetry
|
|
3379
|
+
? overflowRetryBlocked(resumeMessages, this.model?.contextWindow ?? 0)
|
|
3380
|
+
: undefined;
|
|
3381
|
+
if (overflowBlock !== undefined) {
|
|
3382
|
+
this._emit({
|
|
3383
|
+
type: "compaction_end",
|
|
3384
|
+
reason,
|
|
3385
|
+
result,
|
|
3386
|
+
aborted: false,
|
|
3387
|
+
willRetry: false,
|
|
3388
|
+
errorMessage: overflowBlock,
|
|
3389
|
+
});
|
|
3390
|
+
return false;
|
|
3391
|
+
}
|
|
3301
3392
|
const emitWillRetry = compactionEmitWillRetry(willRetry, willResume);
|
|
3302
3393
|
this._emit({ type: "compaction_end", reason, result, aborted: false, willRetry: emitWillRetry });
|
|
3303
3394
|
if (willRetry) {
|
|
@@ -3534,6 +3625,10 @@ export class AgentSession {
|
|
|
3534
3625
|
},
|
|
3535
3626
|
getSystemPrompt: () => this.systemPrompt,
|
|
3536
3627
|
getSystemPromptOptions: () => this._baseSystemPromptOptions,
|
|
3628
|
+
// Spec 020 Req1 — session-bound lane authority for extension tool
|
|
3629
|
+
// contexts (subagent spawn funnel). Rebuilt on demand so it always
|
|
3630
|
+
// sees the live admission decision, permit pool, and prompt run.
|
|
3631
|
+
getSubagentLaneAuthority: () => this._getSubagentLaneAuthority(),
|
|
3537
3632
|
}, {
|
|
3538
3633
|
registerProvider: (name, config) => {
|
|
3539
3634
|
this._modelRegistry.registerProvider(name, config);
|
|
@@ -3965,10 +4060,13 @@ export class AgentSession {
|
|
|
3965
4060
|
if (attempt === undefined)
|
|
3966
4061
|
return false;
|
|
3967
4062
|
this._retryAttempt = attempt;
|
|
3968
|
-
// Upstream-unavailable (gateway 5xx / dropped stream
|
|
3969
|
-
// authenticated route of the SAME model family so the
|
|
3970
|
-
// live endpoint instead of hammering the dead one.
|
|
3971
|
-
|
|
4063
|
+
// Upstream-unavailable (gateway 5xx / dropped stream / dead relay stream):
|
|
4064
|
+
// rotate to another authenticated route of the SAME model family so the
|
|
4065
|
+
// retry lands on a live endpoint instead of hammering the dead one. An
|
|
4066
|
+
// empty streamed completion is the same dead-stream signature wearing a
|
|
4067
|
+
// success stopReason, so it rotates too — otherwise the retry re-hits the
|
|
4068
|
+
// route that just returned nothing.
|
|
4069
|
+
const rotatedTo = isUpstreamUnavailableMessage(message.errorMessage) || isEmptyStreamedCompletion(message)
|
|
3972
4070
|
? await this._maybeRotateModelRoutes()
|
|
3973
4071
|
: undefined;
|
|
3974
4072
|
// Content/safety stop (Fable/Opus/Sonnet): switch model BEFORE delay so retry is not same-model refusal.
|