agent-nuvira 3.3.12 → 3.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -1
- package/dist/agents/agents/planner.d.ts.map +1 -1
- package/dist/agents/agents/planner.js +9 -0
- package/dist/agents/agents/planner.js.map +1 -1
- package/dist/agents/agents/reasoner.d.ts.map +1 -1
- package/dist/agents/agents/reasoner.js +13 -0
- package/dist/agents/agents/reasoner.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +31 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +103 -135
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/cli/chat.d.ts +89 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +798 -39
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +20 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts +12 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +107 -3
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/decisions.d.ts +28 -0
- package/dist/cli/decisions.d.ts.map +1 -0
- package/dist/cli/decisions.js +140 -0
- package/dist/cli/decisions.js.map +1 -0
- package/dist/cli/doctor.d.ts +6 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +46 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +6 -0
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/failover-runner.d.ts.map +1 -1
- package/dist/cli/failover-runner.js +19 -1
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/feedback.d.ts.map +1 -1
- package/dist/cli/feedback.js +5 -1
- package/dist/cli/feedback.js.map +1 -1
- package/dist/cli/hooks.d.ts +30 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +224 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/knowledge.d.ts +31 -0
- package/dist/cli/knowledge.d.ts.map +1 -0
- package/dist/cli/knowledge.js +223 -0
- package/dist/cli/knowledge.js.map +1 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +92 -18
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/model.d.ts +20 -0
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +294 -14
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/omniroute-control.d.ts +88 -0
- package/dist/cli/omniroute-control.d.ts.map +1 -0
- package/dist/cli/omniroute-control.js +179 -0
- package/dist/cli/omniroute-control.js.map +1 -0
- package/dist/cli/omniroute.d.ts +21 -0
- package/dist/cli/omniroute.d.ts.map +1 -0
- package/dist/cli/omniroute.js +67 -0
- package/dist/cli/omniroute.js.map +1 -0
- package/dist/cli/rate.d.ts +78 -0
- package/dist/cli/rate.d.ts.map +1 -0
- package/dist/cli/rate.js +294 -0
- package/dist/cli/rate.js.map +1 -0
- package/dist/config/process-env.d.ts.map +1 -1
- package/dist/config/process-env.js +10 -0
- package/dist/config/process-env.js.map +1 -1
- package/dist/config/types.d.ts +8 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/history.d.ts +21 -0
- package/dist/context/history.d.ts.map +1 -1
- package/dist/context/history.js +50 -0
- package/dist/context/history.js.map +1 -1
- package/dist/enterprise/vault.d.ts.map +1 -1
- package/dist/enterprise/vault.js +5 -21
- package/dist/enterprise/vault.js.map +1 -1
- package/dist/gateway/hook-contract.d.ts +206 -0
- package/dist/gateway/hook-contract.d.ts.map +1 -0
- package/dist/gateway/hook-contract.js +449 -0
- package/dist/gateway/hook-contract.js.map +1 -0
- package/dist/gateway/hooks.d.ts.map +1 -1
- package/dist/gateway/hooks.js +14 -0
- package/dist/gateway/hooks.js.map +1 -1
- package/dist/inference/gemini-adapter.d.ts.map +1 -1
- package/dist/inference/gemini-adapter.js +4 -0
- package/dist/inference/gemini-adapter.js.map +1 -1
- package/dist/inference/interface.d.ts +54 -0
- package/dist/inference/interface.d.ts.map +1 -1
- package/dist/inference/model-id-validation.d.ts +57 -0
- package/dist/inference/model-id-validation.d.ts.map +1 -0
- package/dist/inference/model-id-validation.js +127 -0
- package/dist/inference/model-id-validation.js.map +1 -0
- package/dist/inference/native-tools.d.ts +16 -1
- package/dist/inference/native-tools.d.ts.map +1 -1
- package/dist/inference/native-tools.js +34 -10
- package/dist/inference/native-tools.js.map +1 -1
- package/dist/inference/openai-compat-adapter.d.ts.map +1 -1
- package/dist/inference/openai-compat-adapter.js +12 -1
- package/dist/inference/openai-compat-adapter.js.map +1 -1
- package/dist/inference/provider-catalog.d.ts +11 -0
- package/dist/inference/provider-catalog.d.ts.map +1 -1
- package/dist/inference/provider-catalog.js +80 -0
- package/dist/inference/provider-catalog.js.map +1 -1
- package/dist/inference/route-resolver.d.ts +32 -8
- package/dist/inference/route-resolver.d.ts.map +1 -1
- package/dist/inference/route-resolver.js +175 -1
- package/dist/inference/route-resolver.js.map +1 -1
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +10 -8
- package/dist/inference/tool-call-utils.js.map +1 -1
- package/dist/inference/tools.d.ts +17 -1
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +69 -19
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/acceptance-model.d.ts +247 -0
- package/dist/learning/acceptance-model.d.ts.map +1 -0
- package/dist/learning/acceptance-model.js +708 -0
- package/dist/learning/acceptance-model.js.map +1 -0
- package/dist/learning/auto-router.d.ts +121 -24
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +374 -96
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/autonomy-policy.d.ts +12 -16
- package/dist/learning/autonomy-policy.d.ts.map +1 -1
- package/dist/learning/autonomy-policy.js +50 -48
- package/dist/learning/autonomy-policy.js.map +1 -1
- package/dist/learning/behavioural-labels.d.ts +86 -0
- package/dist/learning/behavioural-labels.d.ts.map +1 -0
- package/dist/learning/behavioural-labels.js +166 -0
- package/dist/learning/behavioural-labels.js.map +1 -0
- package/dist/learning/capability-evidence.d.ts +167 -0
- package/dist/learning/capability-evidence.d.ts.map +1 -0
- package/dist/learning/capability-evidence.js +210 -0
- package/dist/learning/capability-evidence.js.map +1 -0
- package/dist/learning/capability-readiness.d.ts +64 -0
- package/dist/learning/capability-readiness.d.ts.map +1 -0
- package/dist/learning/capability-readiness.js +74 -0
- package/dist/learning/capability-readiness.js.map +1 -0
- package/dist/learning/capability-types.d.ts +169 -0
- package/dist/learning/capability-types.d.ts.map +1 -0
- package/dist/learning/capability-types.js +20 -0
- package/dist/learning/capability-types.js.map +1 -0
- package/dist/learning/catalog-feed.d.ts +89 -0
- package/dist/learning/catalog-feed.d.ts.map +1 -0
- package/dist/learning/catalog-feed.js +211 -0
- package/dist/learning/catalog-feed.js.map +1 -0
- package/dist/learning/cli-intent-effects.d.ts +60 -0
- package/dist/learning/cli-intent-effects.d.ts.map +1 -0
- package/dist/learning/cli-intent-effects.js +153 -0
- package/dist/learning/cli-intent-effects.js.map +1 -0
- package/dist/learning/command-adaptation.d.ts +41 -0
- package/dist/learning/command-adaptation.d.ts.map +1 -0
- package/dist/learning/command-adaptation.js +122 -0
- package/dist/learning/command-adaptation.js.map +1 -0
- package/dist/learning/consent-picture.d.ts +42 -0
- package/dist/learning/consent-picture.d.ts.map +1 -0
- package/dist/learning/consent-picture.js +53 -0
- package/dist/learning/consent-picture.js.map +1 -0
- package/dist/learning/context-budget.d.ts +37 -6
- package/dist/learning/context-budget.d.ts.map +1 -1
- package/dist/learning/context-budget.js +38 -9
- package/dist/learning/context-budget.js.map +1 -1
- package/dist/learning/decision-log.d.ts +114 -0
- package/dist/learning/decision-log.d.ts.map +1 -0
- package/dist/learning/decision-log.js +296 -0
- package/dist/learning/decision-log.js.map +1 -0
- package/dist/learning/deliverable-class.d.ts.map +1 -1
- package/dist/learning/deliverable-class.js +19 -0
- package/dist/learning/deliverable-class.js.map +1 -1
- package/dist/learning/deliverable-corpus.d.ts +117 -0
- package/dist/learning/deliverable-corpus.d.ts.map +1 -0
- package/dist/learning/deliverable-corpus.js +176 -0
- package/dist/learning/deliverable-corpus.js.map +1 -0
- package/dist/learning/error-repair.d.ts +45 -2
- package/dist/learning/error-repair.d.ts.map +1 -1
- package/dist/learning/error-repair.js +95 -0
- package/dist/learning/error-repair.js.map +1 -1
- package/dist/learning/exhaustion-report.d.ts +136 -0
- package/dist/learning/exhaustion-report.d.ts.map +1 -0
- package/dist/learning/exhaustion-report.js +239 -0
- package/dist/learning/exhaustion-report.js.map +1 -0
- package/dist/learning/failure-bookkeeping.d.ts +16 -0
- package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
- package/dist/learning/failure-bookkeeping.js +51 -5
- package/dist/learning/failure-bookkeeping.js.map +1 -1
- package/dist/learning/gate-friction.d.ts +39 -0
- package/dist/learning/gate-friction.d.ts.map +1 -0
- package/dist/learning/gate-friction.js +91 -0
- package/dist/learning/gate-friction.js.map +1 -0
- package/dist/learning/harness-narration.d.ts +34 -0
- package/dist/learning/harness-narration.d.ts.map +1 -0
- package/dist/learning/harness-narration.js +58 -0
- package/dist/learning/harness-narration.js.map +1 -0
- package/dist/learning/hub-skill-catalog.d.ts.map +1 -1
- package/dist/learning/hub-skill-catalog.js +1 -2
- package/dist/learning/hub-skill-catalog.js.map +1 -1
- package/dist/learning/hybrid-router.d.ts +65 -0
- package/dist/learning/hybrid-router.d.ts.map +1 -1
- package/dist/learning/hybrid-router.js +186 -0
- package/dist/learning/hybrid-router.js.map +1 -1
- package/dist/learning/knowledge-base.d.ts +350 -0
- package/dist/learning/knowledge-base.d.ts.map +1 -0
- package/dist/learning/knowledge-base.js +906 -0
- package/dist/learning/knowledge-base.js.map +1 -0
- package/dist/learning/knowledge-eval.d.ts +171 -0
- package/dist/learning/knowledge-eval.d.ts.map +1 -0
- package/dist/learning/knowledge-eval.js +196 -0
- package/dist/learning/knowledge-eval.js.map +1 -0
- package/dist/learning/knowledge-turn.d.ts +92 -0
- package/dist/learning/knowledge-turn.d.ts.map +1 -0
- package/dist/learning/knowledge-turn.js +190 -0
- package/dist/learning/knowledge-turn.js.map +1 -0
- package/dist/learning/learned-commands.d.ts +64 -0
- package/dist/learning/learned-commands.d.ts.map +1 -0
- package/dist/learning/learned-commands.js +108 -0
- package/dist/learning/learned-commands.js.map +1 -0
- package/dist/learning/lexical-search.d.ts +50 -0
- package/dist/learning/lexical-search.d.ts.map +1 -0
- package/dist/learning/lexical-search.js +111 -0
- package/dist/learning/lexical-search.js.map +1 -0
- package/dist/learning/machine-facts.d.ts +71 -0
- package/dist/learning/machine-facts.d.ts.map +1 -0
- package/dist/learning/machine-facts.js +164 -0
- package/dist/learning/machine-facts.js.map +1 -0
- package/dist/learning/markdown-outline.d.ts +73 -0
- package/dist/learning/markdown-outline.d.ts.map +1 -0
- package/dist/learning/markdown-outline.js +136 -0
- package/dist/learning/markdown-outline.js.map +1 -0
- package/dist/learning/model-first-router.d.ts +33 -1
- package/dist/learning/model-first-router.d.ts.map +1 -1
- package/dist/learning/model-first-router.js +123 -9
- package/dist/learning/model-first-router.js.map +1 -1
- package/dist/learning/model-identity.d.ts +80 -0
- package/dist/learning/model-identity.d.ts.map +1 -0
- package/dist/learning/model-identity.js +115 -0
- package/dist/learning/model-identity.js.map +1 -0
- package/dist/learning/model-registry.d.ts +141 -2
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +324 -38
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/model-scoring.d.ts.map +1 -1
- package/dist/learning/model-scoring.js +8 -1
- package/dist/learning/model-scoring.js.map +1 -1
- package/dist/learning/model-selection.d.ts +2 -1
- package/dist/learning/model-selection.d.ts.map +1 -1
- package/dist/learning/model-selection.js +76 -2
- package/dist/learning/model-selection.js.map +1 -1
- package/dist/learning/outcome-observation.d.ts +49 -0
- package/dist/learning/outcome-observation.d.ts.map +1 -0
- package/dist/learning/outcome-observation.js +95 -0
- package/dist/learning/outcome-observation.js.map +1 -0
- package/dist/learning/pair-entitlement.d.ts +184 -0
- package/dist/learning/pair-entitlement.d.ts.map +1 -0
- package/dist/learning/pair-entitlement.js +214 -0
- package/dist/learning/pair-entitlement.js.map +1 -0
- package/dist/learning/project-docs.d.ts +83 -0
- package/dist/learning/project-docs.d.ts.map +1 -0
- package/dist/learning/project-docs.js +132 -0
- package/dist/learning/project-docs.js.map +1 -0
- package/dist/learning/provider-fallback.d.ts +23 -1
- package/dist/learning/provider-fallback.d.ts.map +1 -1
- package/dist/learning/provider-fallback.js +24 -0
- package/dist/learning/provider-fallback.js.map +1 -1
- package/dist/learning/quota-ledger.d.ts +13 -0
- package/dist/learning/quota-ledger.d.ts.map +1 -1
- package/dist/learning/quota-ledger.js +28 -0
- package/dist/learning/quota-ledger.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +65 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +123 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/requirement-probe.d.ts +55 -0
- package/dist/learning/requirement-probe.d.ts.map +1 -0
- package/dist/learning/requirement-probe.js +77 -0
- package/dist/learning/requirement-probe.js.map +1 -0
- package/dist/learning/resilient-call.d.ts +20 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +42 -4
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/response-usability.d.ts +85 -0
- package/dist/learning/response-usability.d.ts.map +1 -0
- package/dist/learning/response-usability.js +135 -0
- package/dist/learning/response-usability.js.map +1 -0
- package/dist/learning/router-bandit.d.ts +132 -0
- package/dist/learning/router-bandit.d.ts.map +1 -1
- package/dist/learning/router-bandit.js +253 -0
- package/dist/learning/router-bandit.js.map +1 -1
- package/dist/learning/routing-history.d.ts +41 -2
- package/dist/learning/routing-history.d.ts.map +1 -1
- package/dist/learning/routing-history.js.map +1 -1
- package/dist/learning/run-trace.d.ts +21 -0
- package/dist/learning/run-trace.d.ts.map +1 -1
- package/dist/learning/run-trace.js +38 -0
- package/dist/learning/run-trace.js.map +1 -1
- package/dist/learning/seeded-benchmark.d.ts +14 -0
- package/dist/learning/seeded-benchmark.d.ts.map +1 -1
- package/dist/learning/seeded-benchmark.js +43 -4
- package/dist/learning/seeded-benchmark.js.map +1 -1
- package/dist/learning/session-grant.d.ts +75 -0
- package/dist/learning/session-grant.d.ts.map +1 -0
- package/dist/learning/session-grant.js +112 -0
- package/dist/learning/session-grant.js.map +1 -0
- package/dist/learning/task-model-continuity.d.ts +73 -0
- package/dist/learning/task-model-continuity.d.ts.map +1 -0
- package/dist/learning/task-model-continuity.js +87 -0
- package/dist/learning/task-model-continuity.js.map +1 -0
- package/dist/learning/turn-feedback.d.ts +93 -0
- package/dist/learning/turn-feedback.d.ts.map +1 -0
- package/dist/learning/turn-feedback.js +127 -0
- package/dist/learning/turn-feedback.js.map +1 -0
- package/dist/learning/turn-report.d.ts +104 -2
- package/dist/learning/turn-report.d.ts.map +1 -1
- package/dist/learning/turn-report.js +161 -6
- package/dist/learning/turn-report.js.map +1 -1
- package/dist/learning/verdict-routing.d.ts +51 -0
- package/dist/learning/verdict-routing.d.ts.map +1 -0
- package/dist/learning/verdict-routing.js +122 -0
- package/dist/learning/verdict-routing.js.map +1 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +5 -0
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/manager.d.ts +10 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +20 -0
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/mcp-discovery.d.ts +34 -0
- package/dist/mcp/mcp-discovery.d.ts.map +1 -0
- package/dist/mcp/mcp-discovery.js +71 -0
- package/dist/mcp/mcp-discovery.js.map +1 -0
- package/dist/mcp/mcp-schema-cache.d.ts +17 -0
- package/dist/mcp/mcp-schema-cache.d.ts.map +1 -1
- package/dist/mcp/mcp-schema-cache.js +47 -3
- package/dist/mcp/mcp-schema-cache.js.map +1 -1
- package/dist/mcp/types.d.ts +28 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/security/secret-scan.d.ts +156 -0
- package/dist/security/secret-scan.d.ts.map +1 -0
- package/dist/security/secret-scan.js +525 -0
- package/dist/security/secret-scan.js.map +1 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +4 -0
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/capability-registry.d.ts +150 -0
- package/dist/tools/capability-registry.d.ts.map +1 -0
- package/dist/tools/capability-registry.js +400 -0
- package/dist/tools/capability-registry.js.map +1 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -1
- package/dist/tools/child-agent-runtime.js +19 -5
- package/dist/tools/child-agent-runtime.js.map +1 -1
- package/dist/tools/coding-tools.d.ts +17 -5
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +80 -11
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/command-memo.d.ts +116 -0
- package/dist/tools/command-memo.d.ts.map +1 -0
- package/dist/tools/command-memo.js +202 -0
- package/dist/tools/command-memo.js.map +1 -0
- package/dist/tools/git-tool.d.ts.map +1 -1
- package/dist/tools/git-tool.js +13 -3
- package/dist/tools/git-tool.js.map +1 -1
- package/dist/tools/harness-directive.d.ts +42 -0
- package/dist/tools/harness-directive.d.ts.map +1 -0
- package/dist/tools/harness-directive.js +45 -0
- package/dist/tools/harness-directive.js.map +1 -0
- package/dist/tools/loop-skill-hint.d.ts +74 -174
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +110 -536
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/mcp-client-tool.d.ts +2 -0
- package/dist/tools/mcp-client-tool.d.ts.map +1 -1
- package/dist/tools/mcp-client-tool.js +3 -0
- package/dist/tools/mcp-client-tool.js.map +1 -1
- package/dist/tools/modality/shared.d.ts +1 -4
- package/dist/tools/modality/shared.d.ts.map +1 -1
- package/dist/tools/modality/shared.js +7 -22
- package/dist/tools/modality/shared.js.map +1 -1
- package/dist/tools/plan-store.d.ts +44 -4
- package/dist/tools/plan-store.d.ts.map +1 -1
- package/dist/tools/plan-store.js +93 -9
- package/dist/tools/plan-store.js.map +1 -1
- package/dist/tools/registry.d.ts +76 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +623 -15
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/remediation-ladder.d.ts +91 -0
- package/dist/tools/remediation-ladder.d.ts.map +1 -0
- package/dist/tools/remediation-ladder.js +316 -0
- package/dist/tools/remediation-ladder.js.map +1 -0
- package/dist/tools/run-cli.d.ts.map +1 -1
- package/dist/tools/run-cli.js +29 -4
- package/dist/tools/run-cli.js.map +1 -1
- package/dist/tools/run-terminal.d.ts +11 -0
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +289 -10
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/skills-hub.d.ts +7 -0
- package/dist/tools/skills-hub.d.ts.map +1 -1
- package/dist/tools/skills-hub.js +11 -2
- package/dist/tools/skills-hub.js.map +1 -1
- package/dist/tools/step-artifact.d.ts +35 -0
- package/dist/tools/step-artifact.d.ts.map +1 -0
- package/dist/tools/step-artifact.js +154 -0
- package/dist/tools/step-artifact.js.map +1 -0
- package/dist/tools/tool-loop.d.ts +327 -13
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +891 -66
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/toolsets.js +4 -4
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/worktree.d.ts +11 -2
- package/dist/tools/worktree.d.ts.map +1 -1
- package/dist/tools/worktree.js +11 -2
- package/dist/tools/worktree.js.map +1 -1
- package/dist/utils/atomic-store.d.ts +53 -0
- package/dist/utils/atomic-store.d.ts.map +1 -0
- package/dist/utils/atomic-store.js +178 -0
- package/dist/utils/atomic-store.js.map +1 -0
- package/dist/utils/binary-probe.d.ts +25 -0
- package/dist/utils/binary-probe.d.ts.map +1 -0
- package/dist/utils/binary-probe.js +48 -0
- package/dist/utils/binary-probe.js.map +1 -0
- package/dist/utils/workspace-path.d.ts +50 -0
- package/dist/utils/workspace-path.d.ts.map +1 -0
- package/dist/utils/workspace-path.js +86 -0
- package/dist/utils/workspace-path.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +24 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +38 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/project-context.d.ts +27 -2
- package/dist/web-dashboard/project-context.d.ts.map +1 -1
- package/dist/web-dashboard/project-context.js +32 -2
- package/dist/web-dashboard/project-context.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +40 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +733 -15
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +236 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +18 -2
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.js +94 -12
- package/dist/web-dashboard/workspace-guard.js.map +1 -1
- package/dist/web-dashboard/workspace-resolution.d.ts +87 -0
- package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -0
- package/dist/web-dashboard/workspace-resolution.js +105 -0
- package/dist/web-dashboard/workspace-resolution.js.map +1 -0
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/index-tK8Y2qHB.css +1 -0
- package/src/web-dashboard/public/assets/index-zjbdJnO-.js +210 -0
- package/src/web-dashboard/public/assets/index-zjbdJnO-.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-BrZcYhy6.js +0 -207
- package/src/web-dashboard/public/assets/index-BrZcYhy6.js.map +0 -1
- package/src/web-dashboard/public/assets/index-DsWczTa6.css +0 -1
|
@@ -64,7 +64,7 @@ import { scanForInjections, formatScanReport } from '../security/scanner.js';
|
|
|
64
64
|
import { withLogCorrelation } from '../enterprise/log.js';
|
|
65
65
|
import { withAgentAnswerQualityGate } from './answer-quality-gate.js';
|
|
66
66
|
import { getMetrics } from '../enterprise/metrics.js';
|
|
67
|
-
import { getAutoRouter, isAgenticTask, isAutoModel, isAutoProvider, } from '../learning/auto-router.js';
|
|
67
|
+
import { getAutoRouter, isAgentAutoRoute, isAgenticTask, isAutoModel, isAutoProvider, isProviderOwnAuto, } from '../learning/auto-router.js';
|
|
68
68
|
import { isAgenticCapableModel } from '../learning/model-harness.js';
|
|
69
69
|
import { weakRouteNotice } from '../learning/agentic-route-gate.js';
|
|
70
70
|
import { analyzeComplexity } from '../learning/hybrid-router.js';
|
|
@@ -166,6 +166,33 @@ export const DEFAULT_USE_TOOL_CALLING = true;
|
|
|
166
166
|
export function resolveUseToolCalling(options) {
|
|
167
167
|
return options.useToolCalling ?? DEFAULT_USE_TOOL_CALLING;
|
|
168
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* A5 — the trace-capture context for a pipeline HOUSEKEEPING call (the planner,
|
|
171
|
+
* memory retrieval, trajectory summarization, self-improvement), or `null` when
|
|
172
|
+
* the call must NOT be wrapped again.
|
|
173
|
+
*
|
|
174
|
+
* WHY THIS EXISTS. Those calls all run through `defaultCallLLM`, and each used to
|
|
175
|
+
* be wrapped at its use site with no provider/model:
|
|
176
|
+
* - in AUTO mode `defaultCallLLM` is already traced by `createAutoRoutedLLM`, so
|
|
177
|
+
* the second wrap logged every housekeeping call TWICE — once routed, once
|
|
178
|
+
* `unknown/unknown` (the duplicate the planner already guarded against);
|
|
179
|
+
* - on the EXPLICIT (pinned) path it is raw and must be wrapped — and NAMED, or
|
|
180
|
+
* the step recorded `unknown/unknown` even though `options.provider/model`
|
|
181
|
+
* were known, leaving the trace unable to say which model ran.
|
|
182
|
+
* `null` means "already traced — reuse it". The explicit context carries the
|
|
183
|
+
* audit route when one is known; `resolveAuditRoute` is best-effort and leaves
|
|
184
|
+
* its own `unknown` marker when nothing is known, exactly as before.
|
|
185
|
+
*/
|
|
186
|
+
export function housekeepingTraceContext(autoRoutingActive, base, audit) {
|
|
187
|
+
if (autoRoutingActive)
|
|
188
|
+
return null;
|
|
189
|
+
const context = { ...base };
|
|
190
|
+
if (audit?.provider)
|
|
191
|
+
context.provider = audit.provider;
|
|
192
|
+
if (audit?.model)
|
|
193
|
+
context.model = audit.model;
|
|
194
|
+
return context;
|
|
195
|
+
}
|
|
169
196
|
export class Orchestrator {
|
|
170
197
|
configManager;
|
|
171
198
|
/** The module registry used for agent lookups */
|
|
@@ -515,7 +542,7 @@ export class Orchestrator {
|
|
|
515
542
|
// AutoModelRouter so no call ever sends a literal 'auto' model to a real API.
|
|
516
543
|
// Matches executeSingleTask's rule: an explicit --model always wins.
|
|
517
544
|
const autoRoutingActive = (options.autoRouteModels === true && !options.model) ||
|
|
518
|
-
|
|
545
|
+
isAgentAutoRoute(options.provider, options.model);
|
|
519
546
|
// Cold-start learning: when auto routing is active but the registry has ZERO
|
|
520
547
|
// verified providers (fresh install / stale store), fire ONE background probe
|
|
521
548
|
// pass so later tasks in this pipeline — and the next session — route on
|
|
@@ -572,22 +599,27 @@ export class Orchestrator {
|
|
|
572
599
|
const defaultCallLLM = autoRoutingActive
|
|
573
600
|
? this.createAutoRoutedLLM({ agentType: 'planner', description: goal }, options)
|
|
574
601
|
: this.createLLMProvider(options);
|
|
575
|
-
// P0 reasoning trace: the planner + memory + trajectory
|
|
576
|
-
//
|
|
577
|
-
// task fallback re-uses defaultCallLLM and wrapping
|
|
578
|
-
// every task call
|
|
602
|
+
// P0 reasoning trace: the planner + memory + trajectory + self-improver
|
|
603
|
+
// calls share `defaultCallLLM`, so they are wrapped at ONE use-site helper
|
|
604
|
+
// (never at creation) — a task fallback re-uses defaultCallLLM, and wrapping
|
|
605
|
+
// it at creation would record every task call twice (planner and task).
|
|
579
606
|
//
|
|
580
|
-
//
|
|
581
|
-
//
|
|
582
|
-
//
|
|
583
|
-
//
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
607
|
+
// A5 — THE HOUSEKEEPING STEPS WERE NOT NAMED, AND IN AUTO MODE WERE LOGGED
|
|
608
|
+
// TWICE. Two facts, one helper:
|
|
609
|
+
// - When auto-routing is active `defaultCallLLM` is ALREADY traced by
|
|
610
|
+
// `createAutoRoutedLLM`, so wrapping it again logged each housekeeping
|
|
611
|
+
// call twice (once 'unknown/unknown', once routed). The planner guarded
|
|
612
|
+
// against this; memory/trajectory/self-improver did not.
|
|
613
|
+
// - On the explicit (pinned) path the wrapper carried NO provider/model, so
|
|
614
|
+
// the step recorded `unknown/unknown` even though the pair was known.
|
|
615
|
+
// Reuse the already-traced LLM when auto-routing, and attribute the step to
|
|
616
|
+
// the audit route otherwise. `resolveAuditRoute` is best-effort and leaves
|
|
617
|
+
// its own 'unknown' marker when nothing is known, exactly as before.
|
|
618
|
+
const housekeepingCallLLM = (agentType, description) => {
|
|
619
|
+
const context = housekeepingTraceContext(autoRoutingActive, { traceId: this.activeTraceId ?? '', agentType, description }, this.resolveAuditRoute(options));
|
|
620
|
+
return context ? withTraceCapture(defaultCallLLM, context) : defaultCallLLM;
|
|
621
|
+
};
|
|
622
|
+
const plannerCallLLM = housekeepingCallLLM('planner', goal);
|
|
591
623
|
// On resume, seed the report with the steps already finished in the original
|
|
592
624
|
// run (completed/failed) so the final agent breakdown is complete — these
|
|
593
625
|
// steps are never re-executed, but they still count toward the summary.
|
|
@@ -696,11 +728,7 @@ export class Orchestrator {
|
|
|
696
728
|
// plus the is_trivial_prompt gate — a one-word goal returns empty
|
|
697
729
|
// without touching the stores.
|
|
698
730
|
const { getMemoryManager } = await import('../memory/manager.js');
|
|
699
|
-
const memoryResult = await getMemoryManager().buildMemoryBlock(goal,
|
|
700
|
-
traceId: this.activeTraceId ?? '',
|
|
701
|
-
agentType: 'memory',
|
|
702
|
-
description: `Memory retrieval for: ${goal.slice(0, 80)}`,
|
|
703
|
-
}));
|
|
731
|
+
const memoryResult = await getMemoryManager().buildMemoryBlock(goal, housekeepingCallLLM('memory', `Memory retrieval for: ${goal.slice(0, 80)}`));
|
|
704
732
|
// The manager composes the FULL persistent-memory block (provider's
|
|
705
733
|
// static system block framing the per-field recall). Consume it
|
|
706
734
|
// directly — the old re-composition here was redundant work.
|
|
@@ -770,109 +798,33 @@ export class Orchestrator {
|
|
|
770
798
|
// ── 3b. Auto-route models ─────────────────────────────────────────────
|
|
771
799
|
// `--auto-route` / autoRouteModels enables per-task AutoModelRouter
|
|
772
800
|
// routing in executeSingleTask (no static map needed).
|
|
773
|
-
// ── 3c. Skill
|
|
774
|
-
//
|
|
775
|
-
//
|
|
776
|
-
//
|
|
777
|
-
//
|
|
778
|
-
//
|
|
779
|
-
//
|
|
801
|
+
// ── 3c. Skill discovery (MODEL-DRIVEN) ──────────────────────────────────
|
|
802
|
+
// This step used to KEYWORD-MATCH one skill to the goal (findMatch +
|
|
803
|
+
// findHubSkillMatch, then the isSkillActivated evidence filter) and inject
|
|
804
|
+
// its methodology. That shipped a hand-written stopword/generic-word/host
|
|
805
|
+
// list that kept getting a case wrong ("blood test report" → the software
|
|
806
|
+
// test-strategy skill; "Windows and Linux" → wsl-setup). Word matching
|
|
807
|
+
// cannot decide what a goal MEANS, so it is gone from the pipeline too:
|
|
808
|
+
// the planner is a MODEL, so it is handed the CATALOG and picks the skill
|
|
809
|
+
// (by name) that fits, and the writer can load one in full with
|
|
810
|
+
// skill_view(name). The disabled gate still applies at catalog build time.
|
|
811
|
+
// Best-effort — a skill-store failure must never break planning.
|
|
780
812
|
try {
|
|
781
|
-
const {
|
|
782
|
-
|
|
783
|
-
//
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
const { readDisabledSkills } = await import('../learning/hub-skill-catalog.js');
|
|
788
|
-
if (matchedSkill && new Set(readDisabledSkills()).has(matchedSkill.id))
|
|
789
|
-
matchedSkill = null;
|
|
790
|
-
// Activation gate (industry practice: model-selected activation).
|
|
791
|
-
// findMatch's threshold is intentionally low (score >= 1) for manual
|
|
792
|
-
// discovery; auto-injection must be tighter so a generic "deploy the
|
|
793
|
-
// API" goal does NOT get website-deployment methodology. For a
|
|
794
|
-
// website-deployment skill (bundled OR hub-installed), require
|
|
795
|
-
// hosting-specific intent words.
|
|
796
|
-
//
|
|
797
|
-
// This pipeline path used to apply ONLY the website-deploy rule and NO
|
|
798
|
-
// evidence filter at all — so it was the most exposed injection surface
|
|
799
|
-
// (live 2026-09-21: `wsl-setup` methodology injected into a cross-platform
|
|
800
|
-
// GUI app plan because the goal named "Windows and Linux"). It now uses
|
|
801
|
-
// the SAME `isSkillActivated` predicate as the chat/execute loop, so the
|
|
802
|
-
// three surfaces cannot disagree about what a goal is evidence FOR.
|
|
803
|
-
const { isSkillActivated } = await import('../tools/loop-skill-hint.js');
|
|
804
|
-
if (matchedSkill && !isSkillActivated(goal, matchedSkill))
|
|
805
|
-
matchedSkill = null;
|
|
806
|
-
if (matchedSkill) {
|
|
807
|
-
// Load full methodology from skill_view() (Hermes progressive disclosure)
|
|
808
|
-
let fullMethodology = '';
|
|
809
|
-
try {
|
|
810
|
-
const { getSkillStore } = await import('../learning/skill-store.js');
|
|
811
|
-
const store = getSkillStore();
|
|
812
|
-
fullMethodology = store.skillView(matchedSkill.name);
|
|
813
|
-
}
|
|
814
|
-
catch {
|
|
815
|
-
// Best-effort — skill_view failure must never break the pipeline
|
|
816
|
-
}
|
|
817
|
-
vault.setMeta('skillGuidance', {
|
|
818
|
-
name: matchedSkill.name,
|
|
819
|
-
description: matchedSkill.description,
|
|
820
|
-
steps: matchedSkill.steps.map((s) => ({ agentType: s.agentType, description: s.description })),
|
|
821
|
-
fullMethodology,
|
|
822
|
-
});
|
|
813
|
+
const { buildConfiguredSkillHint } = await import('../tools/loop-skill-hint.js');
|
|
814
|
+
// `skill-view` tail: the pipeline's load path is the writer's skill_view,
|
|
815
|
+
// not the loop's skill tool.
|
|
816
|
+
const skillCatalog = await buildConfiguredSkillHint(this.configManager, { loadHint: 'skill-view' });
|
|
817
|
+
if (skillCatalog) {
|
|
818
|
+
vault.setMeta('skillCatalog', skillCatalog);
|
|
823
819
|
this.eventBus.emit(EventNames.ORCHESTRATOR_AGENT_UPDATE, {
|
|
824
820
|
agentType: 'orchestrator',
|
|
825
821
|
stage: 'skill',
|
|
826
|
-
message:
|
|
822
|
+
message: '🧠 Handing the planner the skill catalog — the model picks which skill (if any) a step needs',
|
|
827
823
|
}, 'orchestrator');
|
|
828
|
-
if (options.verbose) {
|
|
829
|
-
logger.info(` 🧠 Matched skill '${matchedSkill.name}' — injecting its methodology into the planner`);
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
else {
|
|
833
|
-
// I7 P0: no compiled skill matched — consult the HUB catalog (installed
|
|
834
|
-
// SKILL.md skills). These are first-class runtime capabilities too: a
|
|
835
|
-
// fresh `nuvira skills install` is matchable with zero recompilation.
|
|
836
|
-
// Same model-selected activation contract: the skill is a
|
|
837
|
-
// recommendation, the planner still owns the final plan.
|
|
838
|
-
const { findHubSkillMatch } = await import('../learning/hub-skill-catalog.js');
|
|
839
|
-
let hubMatch = findHubSkillMatch(goal);
|
|
840
|
-
// SAME activation gate as the compiled skill (website-deploy needs
|
|
841
|
-
// hosting intent) AND the evidence filter the hub scorer has never had:
|
|
842
|
-
// its name/description keyword score is a candidate RANKING, not proof
|
|
843
|
-
// the goal asked for the methodology.
|
|
844
|
-
if (hubMatch && !isSkillActivated(goal, hubMatch))
|
|
845
|
-
hubMatch = null;
|
|
846
|
-
if (hubMatch) {
|
|
847
|
-
// Load full methodology from skill_view() (Hermes progressive disclosure)
|
|
848
|
-
let fullMethodology = '';
|
|
849
|
-
try {
|
|
850
|
-
const { getSkillStore } = await import('../learning/skill-store.js');
|
|
851
|
-
const store = getSkillStore();
|
|
852
|
-
fullMethodology = store.skillView(hubMatch.name);
|
|
853
|
-
}
|
|
854
|
-
catch {
|
|
855
|
-
// Best-effort — skill_view failure must never break the pipeline
|
|
856
|
-
}
|
|
857
|
-
vault.setMeta('skillGuidance', {
|
|
858
|
-
name: hubMatch.name,
|
|
859
|
-
description: hubMatch.description,
|
|
860
|
-
body: hubMatch.body,
|
|
861
|
-
fullMethodology,
|
|
862
|
-
});
|
|
863
|
-
this.eventBus.emit(EventNames.ORCHESTRATOR_AGENT_UPDATE, {
|
|
864
|
-
agentType: 'orchestrator',
|
|
865
|
-
stage: 'skill',
|
|
866
|
-
message: `🧠 Matched hub skill '${hubMatch.name}' — injecting its SKILL.md methodology into the planner`,
|
|
867
|
-
}, 'orchestrator');
|
|
868
|
-
if (options.verbose) {
|
|
869
|
-
logger.info(` 🧠 Matched hub skill '${hubMatch.name}' — injecting its SKILL.md methodology into the planner`);
|
|
870
|
-
}
|
|
871
|
-
}
|
|
872
824
|
}
|
|
873
825
|
}
|
|
874
826
|
catch {
|
|
875
|
-
// Best-effort — skill
|
|
827
|
+
// Best-effort — skill discovery must never break the pipeline.
|
|
876
828
|
}
|
|
877
829
|
// ── 4. Planner (or pre-built plan from workflow template) ────────────
|
|
878
830
|
// When resuming from a checkpoint the plan is already in the vault — skip
|
|
@@ -1396,20 +1348,12 @@ export class Orchestrator {
|
|
|
1396
1348
|
taskPlan: vault.context.taskPlan,
|
|
1397
1349
|
};
|
|
1398
1350
|
const { storeExecutionTrajectory } = await import('../memory/memory-integration.js');
|
|
1399
|
-
trajectoryId = await storeExecutionTrajectory(orchestrationSummary,
|
|
1400
|
-
traceId: this.activeTraceId ?? '',
|
|
1401
|
-
agentType: 'memory',
|
|
1402
|
-
description: `Trajectory summarization for: ${goal.slice(0, 80)}`,
|
|
1403
|
-
}), vault.context.taskPlan, contextFiles, options.verbose);
|
|
1351
|
+
trajectoryId = await storeExecutionTrajectory(orchestrationSummary, housekeepingCallLLM('memory', `Trajectory summarization for: ${goal.slice(0, 80)}`), vault.context.taskPlan, contextFiles, options.verbose);
|
|
1404
1352
|
// Self-improvement
|
|
1405
1353
|
try {
|
|
1406
1354
|
const { getSelfImprover } = await import('../learning/self-improver.js');
|
|
1407
1355
|
const improver = getSelfImprover();
|
|
1408
|
-
await improver.processRun({ ...orchestrationSummary, trajectoryId },
|
|
1409
|
-
traceId: this.activeTraceId ?? '',
|
|
1410
|
-
agentType: 'self-improver',
|
|
1411
|
-
description: `Pattern/failure-lesson extraction for: ${goal.slice(0, 80)}`,
|
|
1412
|
-
}), options.agentModels, options.verbose);
|
|
1356
|
+
await improver.processRun({ ...orchestrationSummary, trajectoryId }, housekeepingCallLLM('self-improver', `Pattern/failure-lesson extraction for: ${goal.slice(0, 80)}`), options.agentModels, options.verbose);
|
|
1413
1357
|
if (options.verbose && trajectoryId) {
|
|
1414
1358
|
logger.info(' Self-improvement stats saved. Run `nuvira learn optimize` to see recommendations.');
|
|
1415
1359
|
}
|
|
@@ -1766,7 +1710,11 @@ export class Orchestrator {
|
|
|
1766
1710
|
// configured model BEFORE validating, so the validator is never asked to
|
|
1767
1711
|
// repair a sentinel and the 'auto is not available on X' warning is not
|
|
1768
1712
|
// printed for a value the user never chose as a model.
|
|
1769
|
-
|
|
1713
|
+
//
|
|
1714
|
+
// A8 EXCEPTION: a CONCRETE provider pinned with `-m auto` means that
|
|
1715
|
+
// provider's own auto (an OmniRoute combo), so the sentinel is NOT ours
|
|
1716
|
+
// to resolve — it must reach the provider as-is.
|
|
1717
|
+
if (isAutoModel(requestedModel) && !isProviderOwnAuto(rawProvider, requestedModel)) {
|
|
1770
1718
|
requestedModel = config.model || undefined;
|
|
1771
1719
|
}
|
|
1772
1720
|
// ALWAYS validate the pair — the model against THIS provider instance,
|
|
@@ -2221,7 +2169,7 @@ export class Orchestrator {
|
|
|
2221
2169
|
// cheap model while complex tasks get a stronger one. An explicit
|
|
2222
2170
|
// `--model` always wins over auto routing.
|
|
2223
2171
|
const autoRouting = (options.autoRouteModels === true && !options.model) ||
|
|
2224
|
-
|
|
2172
|
+
isAgentAutoRoute(options.provider, options.model);
|
|
2225
2173
|
const effectiveAgentType = strategy.effectiveAgentType || task.agentType;
|
|
2226
2174
|
const agentModel = options.model || options.agentModels?.[effectiveAgentType] || options.agentModels?.[task.agentType];
|
|
2227
2175
|
let taskBoundProvider;
|
|
@@ -2422,6 +2370,13 @@ export class Orchestrator {
|
|
|
2422
2370
|
// model exists to escalate to (never for a healthy pipeline).
|
|
2423
2371
|
try {
|
|
2424
2372
|
vault.context.metadata.lenientFileParsing = true;
|
|
2373
|
+
// Name the task's DECLARED artifacts so a `shrink-scope` repair
|
|
2374
|
+
// can ask for the FIRST one concretely ("produce exactly this
|
|
2375
|
+
// file") instead of a vague "do less". Absent → the narrowed ask
|
|
2376
|
+
// stays generic and never invents a filename.
|
|
2377
|
+
if (task.expectedFiles?.length) {
|
|
2378
|
+
vault.context.metadata.expectedFiles = task.expectedFiles;
|
|
2379
|
+
}
|
|
2425
2380
|
}
|
|
2426
2381
|
catch {
|
|
2427
2382
|
// Best-effort — metadata must never break repair.
|
|
@@ -2488,20 +2443,29 @@ export class Orchestrator {
|
|
|
2488
2443
|
spl.start();
|
|
2489
2444
|
}
|
|
2490
2445
|
}
|
|
2491
|
-
// No-op escalation →
|
|
2492
|
-
//
|
|
2493
|
-
//
|
|
2494
|
-
//
|
|
2446
|
+
// No-op escalation → a bounded WEAK-MODEL CLOSE-THE-LOOP ladder.
|
|
2447
|
+
//
|
|
2448
|
+
// This used to cap the budget at 1 because attempt 2 was the SAME
|
|
2449
|
+
// weak model re-running the SAME failure — pure wasted minutes. It is
|
|
2450
|
+
// now 2, because `weakModel: true` changes what attempt 2 IS: a
|
|
2451
|
+
// `shrink-scope` ask for the smallest single unit (see
|
|
2452
|
+
// error-repair.ts). That is the step that turns a stuck loop around:
|
|
2453
|
+
// re-prompt with the failure, then ask for LESS and move the work
|
|
2454
|
+
// forward, then stop honestly at 3. Healthy pipelines keep the
|
|
2455
|
+
// configured budget and the ordinary per-category ladder.
|
|
2495
2456
|
//
|
|
2496
2457
|
// 'abort' skips repair entirely: the user chose to fix the provider
|
|
2497
2458
|
// config, so re-running the weak model is wasted work. The task is
|
|
2498
2459
|
// marked failed with an actionable message; the pipeline stops.
|
|
2499
2460
|
const userAborted = this.weakModelChoice === 'abort';
|
|
2500
|
-
const
|
|
2461
|
+
const weakModelOnly = noOpEscalation && autoRouting;
|
|
2462
|
+
const effectiveMaxRepairs = weakModelOnly ? 2 : maxRepairs;
|
|
2501
2463
|
const repairEngine = new ErrorRepairEngine({
|
|
2502
2464
|
maxRepairs: effectiveMaxRepairs,
|
|
2503
2465
|
repairMode,
|
|
2504
2466
|
verbose: options.verbose,
|
|
2467
|
+
// Only the weak/no-op-escalation path takes the bounded ladder.
|
|
2468
|
+
weakModel: weakModelOnly,
|
|
2505
2469
|
fallbackModels: options.repairFallbackModels,
|
|
2506
2470
|
// LLM AVAILABILITY GUARD: check if the escalated task's provider
|
|
2507
2471
|
// is rate-limited before retrying. Prevents retry-tool and
|
|
@@ -3336,7 +3300,11 @@ export class Orchestrator {
|
|
|
3336
3300
|
complexity: decision.complexity,
|
|
3337
3301
|
provider: decision.provider,
|
|
3338
3302
|
model: workingModel ?? decision.model,
|
|
3339
|
-
|
|
3303
|
+
// B2-a — this block runs only when the model was REPAIRED
|
|
3304
|
+
// (`workingModel !== decision.model`), so `decision.score`
|
|
3305
|
+
// describes the model that was replaced. The repaired model was
|
|
3306
|
+
// substituted, never ranked: record it with no score rather than
|
|
3307
|
+
// with a number that belongs to a different model.
|
|
3340
3308
|
});
|
|
3341
3309
|
}
|
|
3342
3310
|
catch {
|