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
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remediation ladder — a recognised toolchain failure gets a KNOWN fix instead
|
|
3
|
+
* of another exploration loop.
|
|
4
|
+
*
|
|
5
|
+
* WHY (A4). On the supervised `cal` Android run (2026-10-05) the agent
|
|
6
|
+
* diagnosed the real cause of a Gradle failure correctly — Capacitor 8 compiles
|
|
7
|
+
* at `JavaVersion.VERSION_21`, the environment had JDK 17 — and then stopped:
|
|
8
|
+
* it retried the same command with small variations and closed the turn telling
|
|
9
|
+
* the user to install JDK 21 themselves. A supervisor fixed the same tree in
|
|
10
|
+
* ~30 s with a project-local edit (`android/local.properties` + a JDK-21
|
|
11
|
+
* `JAVA_HOME`). The failure was not environmental in the sense of "impossible";
|
|
12
|
+
* it was a fix the agent could see and did not take.
|
|
13
|
+
*
|
|
14
|
+
* The ladder closes that gap with a SMALL, DECLARED map: error signature →
|
|
15
|
+
* what it means → the bounded fix, split into the part that belongs to THIS
|
|
16
|
+
* project (a file write, a chmod, an env var scoped to the command) and the
|
|
17
|
+
* part that is the user's decision (installing a system JDK). By DEFAULT it is
|
|
18
|
+
* advisory: the note is appended to the failed tool result, so the model takes
|
|
19
|
+
* the fix with the same tools it already has. A very small subset may carry a
|
|
20
|
+
* machine-readable safe action (see AUTO-APPLY below), but nothing is ever
|
|
21
|
+
* changed without an explicit opt-in — a remediation the agent cannot see is
|
|
22
|
+
* indistinguishable from a bug, and the agent must stay able to reason about
|
|
23
|
+
* what changed.
|
|
24
|
+
*
|
|
25
|
+
* Rules are intentionally a handful of high-signal signatures, not a general
|
|
26
|
+
* log classifier: a wrong "known fix" is worse than none.
|
|
27
|
+
*
|
|
28
|
+
* AUTO-APPLY (opt-in). A subset of the fixes is a single, idempotent,
|
|
29
|
+
* project-local file operation that cannot strand the user — `chmod +x` on the
|
|
30
|
+
* wrapper, writing `android/local.properties`. For those a rule may also
|
|
31
|
+
* declare a machine-readable {@link AutoFixAction}. When the run opts in
|
|
32
|
+
* (`NUVIRA_REMEDIATE=auto`) the fix is applied to the workspace and the note
|
|
33
|
+
* reports exactly what changed; by default the note is advisory only. Anything
|
|
34
|
+
* that needs a discovery or a per-run env var stays advisory — the agent can
|
|
35
|
+
* still see it and take it.
|
|
36
|
+
*/
|
|
37
|
+
export interface Remediation {
|
|
38
|
+
/** Stable id (telemetry / tests). */
|
|
39
|
+
id: string;
|
|
40
|
+
/** What this signature means, in one line. */
|
|
41
|
+
summary: string;
|
|
42
|
+
/** Bounded steps, in order. Concrete commands/paths, not advice. */
|
|
43
|
+
fix: string[];
|
|
44
|
+
/**
|
|
45
|
+
* `project-local` steps are the agent's job; `system` steps change the
|
|
46
|
+
* machine and may need the user. Both are shown; only the distinction is.
|
|
47
|
+
*/
|
|
48
|
+
scope: 'project-local' | 'system';
|
|
49
|
+
/**
|
|
50
|
+
* Safe, idempotent, project-local operations a machine may take on the agent's
|
|
51
|
+
* behalf when auto-apply is enabled. Absent means advisory-only (the default).
|
|
52
|
+
*/
|
|
53
|
+
autoFix?: AutoFixAction[];
|
|
54
|
+
}
|
|
55
|
+
/** A no-surprise filesystem operation confined to the project workspace. */
|
|
56
|
+
export type AutoFixAction = {
|
|
57
|
+
kind: 'chmod-exec';
|
|
58
|
+
path: string;
|
|
59
|
+
} | {
|
|
60
|
+
kind: 'write-file';
|
|
61
|
+
path: string;
|
|
62
|
+
content: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Diagnose a FAILED command. Returns null when the output matches no known
|
|
66
|
+
* signature — the ladder must never invent a fix for an unknown failure.
|
|
67
|
+
*/
|
|
68
|
+
export declare function diagnoseFailure(command: string, output: string, cwd?: string, env?: NodeJS.ProcessEnv): Remediation | null;
|
|
69
|
+
/** Is auto-apply requested for this run? Off unless explicitly opted in. */
|
|
70
|
+
export declare function remediationAutoApplyEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
71
|
+
export interface AutoApplyResult {
|
|
72
|
+
/** Human strings for the operations that changed the workspace. */
|
|
73
|
+
applied: string[];
|
|
74
|
+
/** Operations that were already satisfied or could not be taken safely. */
|
|
75
|
+
skipped: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Apply the remediations's safe auto-fixes. Every operation is idempotent and
|
|
79
|
+
* confined to the workspace; anything that fails is reported as skipped, never
|
|
80
|
+
* thrown — a remediation must not break the tool result it annotates.
|
|
81
|
+
*/
|
|
82
|
+
export declare function applyRemediationAutoFixes(r: Remediation): AutoApplyResult;
|
|
83
|
+
/** Render the auto-apply outcome as a note appended after the advisory fix. */
|
|
84
|
+
export declare function formatAutoApply(result: AutoApplyResult): string;
|
|
85
|
+
/**
|
|
86
|
+
* Render a remediation as the note appended to the failed tool result. Plain
|
|
87
|
+
* text (not markdown headers) so it reads the same in a terminal, a transcript,
|
|
88
|
+
* and a model prompt.
|
|
89
|
+
*/
|
|
90
|
+
export declare function formatRemediation(r: Remediation): string;
|
|
91
|
+
//# sourceMappingURL=remediation-ladder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediation-ladder.d.ts","sourceRoot":"","sources":["../../src/tools/remediation-ladder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,eAAe,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA8L1D;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,GAAG,IAAI,CAapB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzF;AAED,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAiDzE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAO/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAQxD"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remediation ladder — a recognised toolchain failure gets a KNOWN fix instead
|
|
3
|
+
* of another exploration loop.
|
|
4
|
+
*
|
|
5
|
+
* WHY (A4). On the supervised `cal` Android run (2026-10-05) the agent
|
|
6
|
+
* diagnosed the real cause of a Gradle failure correctly — Capacitor 8 compiles
|
|
7
|
+
* at `JavaVersion.VERSION_21`, the environment had JDK 17 — and then stopped:
|
|
8
|
+
* it retried the same command with small variations and closed the turn telling
|
|
9
|
+
* the user to install JDK 21 themselves. A supervisor fixed the same tree in
|
|
10
|
+
* ~30 s with a project-local edit (`android/local.properties` + a JDK-21
|
|
11
|
+
* `JAVA_HOME`). The failure was not environmental in the sense of "impossible";
|
|
12
|
+
* it was a fix the agent could see and did not take.
|
|
13
|
+
*
|
|
14
|
+
* The ladder closes that gap with a SMALL, DECLARED map: error signature →
|
|
15
|
+
* what it means → the bounded fix, split into the part that belongs to THIS
|
|
16
|
+
* project (a file write, a chmod, an env var scoped to the command) and the
|
|
17
|
+
* part that is the user's decision (installing a system JDK). By DEFAULT it is
|
|
18
|
+
* advisory: the note is appended to the failed tool result, so the model takes
|
|
19
|
+
* the fix with the same tools it already has. A very small subset may carry a
|
|
20
|
+
* machine-readable safe action (see AUTO-APPLY below), but nothing is ever
|
|
21
|
+
* changed without an explicit opt-in — a remediation the agent cannot see is
|
|
22
|
+
* indistinguishable from a bug, and the agent must stay able to reason about
|
|
23
|
+
* what changed.
|
|
24
|
+
*
|
|
25
|
+
* Rules are intentionally a handful of high-signal signatures, not a general
|
|
26
|
+
* log classifier: a wrong "known fix" is worse than none.
|
|
27
|
+
*
|
|
28
|
+
* AUTO-APPLY (opt-in). A subset of the fixes is a single, idempotent,
|
|
29
|
+
* project-local file operation that cannot strand the user — `chmod +x` on the
|
|
30
|
+
* wrapper, writing `android/local.properties`. For those a rule may also
|
|
31
|
+
* declare a machine-readable {@link AutoFixAction}. When the run opts in
|
|
32
|
+
* (`NUVIRA_REMEDIATE=auto`) the fix is applied to the workspace and the note
|
|
33
|
+
* reports exactly what changed; by default the note is advisory only. Anything
|
|
34
|
+
* that needs a discovery or a per-run env var stays advisory — the agent can
|
|
35
|
+
* still see it and take it.
|
|
36
|
+
*/
|
|
37
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
38
|
+
import { dirname, join } from 'node:path';
|
|
39
|
+
/** Filesystem seam so rules stay testable without touching the real tree. */
|
|
40
|
+
const defaultFs = { existsSync, statSync };
|
|
41
|
+
/**
|
|
42
|
+
* Find the Gradle wrapper script relative to the project root, if it exists.
|
|
43
|
+
* The `cal` tree keeps it under `android/`; a bare Android project keeps it at
|
|
44
|
+
* the root, so both are checked (most specific first).
|
|
45
|
+
*/
|
|
46
|
+
function findGradlew(cwd) {
|
|
47
|
+
if (!cwd)
|
|
48
|
+
return null;
|
|
49
|
+
for (const rel of ['android/gradlew', 'gradlew']) {
|
|
50
|
+
const abs = join(cwd, rel);
|
|
51
|
+
try {
|
|
52
|
+
if (defaultFs.existsSync(abs) && defaultFs.statSync(abs).isFile())
|
|
53
|
+
return abs;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
/* unreadable — treat as absent */
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Where the Android SDK lives, if this machine merely has it configured. Used
|
|
63
|
+
* to write `android/local.properties`, which is the whole of the SDK-location
|
|
64
|
+
* failure. Returns null when no path can be found, so nothing is written.
|
|
65
|
+
*/
|
|
66
|
+
function findAndroidSdk(cwd, env) {
|
|
67
|
+
const explicit = env.ANDROID_HOME || env.ANDROID_SDK_ROOT;
|
|
68
|
+
if (explicit && existsSync(explicit))
|
|
69
|
+
return explicit;
|
|
70
|
+
const home = env.HOME || '';
|
|
71
|
+
const candidates = [
|
|
72
|
+
join(home, 'android-toolchain/android-sdk'),
|
|
73
|
+
join(home, 'Library/Android/sdk'),
|
|
74
|
+
join(home, 'Android/Sdk'),
|
|
75
|
+
...(cwd ? [join(cwd, 'android-sdk'), join(cwd, '.android-sdk')] : []),
|
|
76
|
+
];
|
|
77
|
+
for (const c of candidates) {
|
|
78
|
+
try {
|
|
79
|
+
// A real SDK has a `platform-tools` (or `platforms`) directory.
|
|
80
|
+
if (c && existsSync(join(c, 'platform-tools')))
|
|
81
|
+
return c;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
/* ignore */
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const ANDROID_JDK_LINE = /requires\s+java\s+(1[1-9]|[2-9]\d)|java\s*21|VERSION_21|Unsupported class file major version/i;
|
|
90
|
+
/**
|
|
91
|
+
* The rules, most specific first. Each `test` is deliberately narrow so the
|
|
92
|
+
* ladder fires only on a signature it can actually help with.
|
|
93
|
+
*/
|
|
94
|
+
const RULES = [
|
|
95
|
+
{
|
|
96
|
+
id: 'jdk-version',
|
|
97
|
+
test: (cmd, out) => ANDROID_JDK_LINE.test(out) ||
|
|
98
|
+
/(android|gradle|sdk)/i.test(cmd) && /(java|jdk).*(version|home|17|21)|could not determine java version/i.test(out),
|
|
99
|
+
build: () => ({
|
|
100
|
+
id: 'jdk-version',
|
|
101
|
+
summary: 'This build needs a newer JDK than the one on PATH (for example Capacitor/AGP 8 requires JDK 21, not 17).',
|
|
102
|
+
fix: [
|
|
103
|
+
'Find a JDK that satisfies the required version (e.g. `~/android-toolchain/jdk21/Contents/Home`, `/usr/libexec/java_home -v 21`, or `ls /usr/lib/jvm`).',
|
|
104
|
+
'Point THIS build at it without changing the user’s default: re-run the command with `JAVA_HOME=<jdk> PATH="$JAVA_HOME/bin:$PATH" <command>` (project-local, do this now).',
|
|
105
|
+
'If the JDK is not installed at all, install it (e.g. `brew install --cask temurin@21`) — this changes the machine, so say so rather than blocking on it.',
|
|
106
|
+
'For Gradle you can also pin it in the project: add `org.gradle.java.home=<jdk>` to `android/gradle.properties` (project-local, survives the turn).',
|
|
107
|
+
'Do NOT retry the same command with the same JAVA_HOME — the version cannot change by retrying.',
|
|
108
|
+
],
|
|
109
|
+
scope: 'project-local',
|
|
110
|
+
}),
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'android-sdk-location',
|
|
114
|
+
test: (_cmd, out) => /SDK location not found|ANDROID_HOME|ANDROID_SDK_ROOT|sdk\.dir|accepted the SDK license|licenses? .* not accepted/i.test(out),
|
|
115
|
+
build: ({ cwd, env }) => {
|
|
116
|
+
const sdk = findAndroidSdk(cwd, env);
|
|
117
|
+
const localProps = cwd ? join(cwd, 'android/local.properties') : '';
|
|
118
|
+
return {
|
|
119
|
+
id: 'android-sdk-location',
|
|
120
|
+
summary: 'Gradle cannot find (or is not allowed to use) the Android SDK.',
|
|
121
|
+
...(sdk && localProps
|
|
122
|
+
? { autoFix: [{ kind: 'write-file', path: localProps, content: `sdk.dir=${sdk}\n` }] }
|
|
123
|
+
: {}),
|
|
124
|
+
fix: [
|
|
125
|
+
'Create `android/local.properties` (project-local) containing `sdk.dir=<path-to-Android-SDK>` — this is the whole of the SDK-location failure.',
|
|
126
|
+
'Install the required components if missing: `sdkmanager "platforms;android-34" "build-tools;34.0.0" "platform-tools"`.',
|
|
127
|
+
'Accept pending licences: `yes | sdkmanager --licenses`.',
|
|
128
|
+
'Re-run `./gradlew assembleDebug` (or the original build) in the SAME directory.',
|
|
129
|
+
],
|
|
130
|
+
scope: 'project-local',
|
|
131
|
+
};
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: 'gradlew-not-executable',
|
|
136
|
+
test: (cmd, out) => /gradlew/i.test(cmd) && /Permission denied|not executable/i.test(out),
|
|
137
|
+
build: ({ cwd }) => {
|
|
138
|
+
const gradlew = findGradlew(cwd);
|
|
139
|
+
return {
|
|
140
|
+
id: 'gradlew-not-executable',
|
|
141
|
+
summary: 'The Gradle wrapper script is not executable in this checkout.',
|
|
142
|
+
...(gradlew ? { autoFix: [{ kind: 'chmod-exec', path: gradlew }] } : {}),
|
|
143
|
+
fix: [
|
|
144
|
+
'Run `chmod +x android/gradlew` (project-local), then re-run the build.',
|
|
145
|
+
'Alternatively invoke it through the shell: `sh android/gradlew assembleDebug`.',
|
|
146
|
+
],
|
|
147
|
+
scope: 'project-local',
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: 'toolchain-missing',
|
|
153
|
+
test: (_cmd, out) => /\b(java|javac|gradle|adb|sdkmanager|kotlinc)\b.*(command not found|not recognized as)/i.test(out),
|
|
154
|
+
build: () => ({
|
|
155
|
+
id: 'toolchain-missing',
|
|
156
|
+
summary: 'A build tool is not installed (or not on PATH).',
|
|
157
|
+
fix: [
|
|
158
|
+
'Check whether the tool exists somewhere first (`which java`, `ls ~/android-toolchain`).',
|
|
159
|
+
'Install the missing component, or add its path to PATH for THIS command (`PATH="$HOME/android-toolchain/android-sdk/platform-tools:$PATH" <command>`) — project-local for the run.',
|
|
160
|
+
'Installing a toolchain system-wide is the user’s decision; state it plainly if it is genuinely required.',
|
|
161
|
+
],
|
|
162
|
+
scope: 'project-local',
|
|
163
|
+
}),
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
id: 'python-env',
|
|
167
|
+
test: (_cmd, out) => /externally-managed-environment|No module named|Could not find a version that satisfies|python[0-9.]*: (command )?not found/i.test(out),
|
|
168
|
+
build: () => ({
|
|
169
|
+
id: 'python-env',
|
|
170
|
+
summary: 'Python dependencies are missing or the environment is externally managed.',
|
|
171
|
+
fix: [
|
|
172
|
+
'Create a project venv: `python3 -m venv .venv` (project-local).',
|
|
173
|
+
'Install into it: `.venv/bin/pip install -r requirements.txt` (or the named package).',
|
|
174
|
+
'Re-run the original command with the venv active: `.venv/bin/python <command>`.',
|
|
175
|
+
'Do NOT `pip install --break-system-packages` — the venv is the fix.',
|
|
176
|
+
],
|
|
177
|
+
scope: 'project-local',
|
|
178
|
+
}),
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: 'node-engines',
|
|
182
|
+
test: (_cmd, out) => /EBADENGINE|Unsupported engine|requires Node(\.js)? (version )?|node: (command )?not found/i.test(out),
|
|
183
|
+
build: () => ({
|
|
184
|
+
id: 'node-engines',
|
|
185
|
+
summary: 'The installed Node/npm does not satisfy this project’s engine requirement.',
|
|
186
|
+
fix: [
|
|
187
|
+
'Read the required version from `package.json` (`engines`).',
|
|
188
|
+
'Select a matching runtime for THIS command (e.g. `nvm use 20`, `fnm use`, or point PATH at the right install) — project-local for the run.',
|
|
189
|
+
'If no matching runtime exists, installing one is the user’s decision — say so instead of retrying.',
|
|
190
|
+
],
|
|
191
|
+
scope: 'project-local',
|
|
192
|
+
}),
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
id: 'docker-daemon',
|
|
196
|
+
test: (_cmd, out) => /Cannot connect to the Docker daemon|Is the docker daemon running/i.test(out),
|
|
197
|
+
build: () => ({
|
|
198
|
+
id: 'docker-daemon',
|
|
199
|
+
summary: 'Docker is installed but its daemon is not running.',
|
|
200
|
+
fix: [
|
|
201
|
+
'Start it: `open -a Docker` (macOS), `sudo systemctl start docker` (Linux), or start Docker Desktop.',
|
|
202
|
+
'Wait for `docker info` to succeed, then re-run the original command.',
|
|
203
|
+
'If it cannot be started, choose a non-container path for the build rather than retrying.',
|
|
204
|
+
],
|
|
205
|
+
scope: 'system',
|
|
206
|
+
}),
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
/**
|
|
210
|
+
* Diagnose a FAILED command. Returns null when the output matches no known
|
|
211
|
+
* signature — the ladder must never invent a fix for an unknown failure.
|
|
212
|
+
*/
|
|
213
|
+
export function diagnoseFailure(command, output, cwd, env = process.env) {
|
|
214
|
+
const cmd = String(command ?? '');
|
|
215
|
+
const out = String(output ?? '');
|
|
216
|
+
if (!out)
|
|
217
|
+
return null;
|
|
218
|
+
for (const rule of RULES) {
|
|
219
|
+
try {
|
|
220
|
+
if (rule.test(cmd, out))
|
|
221
|
+
return rule.build({ command: cmd, output: out, cwd, env });
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// A rule must never break the tool result it is annotating.
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
/** Is auto-apply requested for this run? Off unless explicitly opted in. */
|
|
231
|
+
export function remediationAutoApplyEnabled(env = process.env) {
|
|
232
|
+
return (env.NUVIRA_REMEDIATE || '').toLowerCase() === 'auto';
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Apply the remediations's safe auto-fixes. Every operation is idempotent and
|
|
236
|
+
* confined to the workspace; anything that fails is reported as skipped, never
|
|
237
|
+
* thrown — a remediation must not break the tool result it annotates.
|
|
238
|
+
*/
|
|
239
|
+
export function applyRemediationAutoFixes(r) {
|
|
240
|
+
const applied = [];
|
|
241
|
+
const skipped = [];
|
|
242
|
+
for (const action of r.autoFix ?? []) {
|
|
243
|
+
try {
|
|
244
|
+
if (action.kind === 'chmod-exec') {
|
|
245
|
+
// Windows has no POSIX execute bit — `chmod` there can only toggle the
|
|
246
|
+
// read-only attribute. Running it would report a fix that did not happen
|
|
247
|
+
// (and could never become idempotent), so say plainly that it does not
|
|
248
|
+
// apply instead of claiming success.
|
|
249
|
+
if (process.platform === 'win32') {
|
|
250
|
+
skipped.push(`chmod +x ${action.path} (not applicable on Windows — no POSIX execute bit)`);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (!existsSync(action.path)) {
|
|
254
|
+
skipped.push(`chmod +x ${action.path} (file not found)`);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const mode = statSync(action.path).mode;
|
|
258
|
+
if (mode & 0o111) {
|
|
259
|
+
skipped.push(`chmod +x ${action.path} (already executable)`);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
chmodSync(action.path, 0o755);
|
|
263
|
+
applied.push(`chmod +x ${action.path}`);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
// write-file: never clobber a file that already says what we would say.
|
|
267
|
+
if (existsSync(action.path)) {
|
|
268
|
+
const current = readFileSync(action.path, 'utf-8');
|
|
269
|
+
const wanted = action.content.trim();
|
|
270
|
+
if (current.includes(wanted)) {
|
|
271
|
+
skipped.push(`${action.path} (already set)`);
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
// Append rather than overwrite — other keys in the file are the user's.
|
|
275
|
+
const sep = current.endsWith('\n') || current === '' ? '' : '\n';
|
|
276
|
+
writeFileSync(action.path, `${current}${sep}${action.content}`);
|
|
277
|
+
applied.push(`${action.path} (+ ${wanted})`);
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
mkdirSync(dirname(action.path), { recursive: true });
|
|
281
|
+
writeFileSync(action.path, action.content);
|
|
282
|
+
applied.push(`${action.path} (created)`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (e) {
|
|
286
|
+
skipped.push(`${action.kind} ${'path' in action ? action.path : ''} (${e.message})`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return { applied, skipped };
|
|
290
|
+
}
|
|
291
|
+
/** Render the auto-apply outcome as a note appended after the advisory fix. */
|
|
292
|
+
export function formatAutoApply(result) {
|
|
293
|
+
if (result.applied.length === 0 && result.skipped.length === 0)
|
|
294
|
+
return '';
|
|
295
|
+
const lines = ['⚙️ Auto-applied safe project-local fix(es):'];
|
|
296
|
+
for (const a of result.applied)
|
|
297
|
+
lines.push(` ✓ ${a}`);
|
|
298
|
+
for (const s of result.skipped)
|
|
299
|
+
lines.push(` – ${s}`);
|
|
300
|
+
lines.push(' (NUVIRA_REMEDIATE=auto; re-run the original command now.)');
|
|
301
|
+
return lines.join('\n');
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Render a remediation as the note appended to the failed tool result. Plain
|
|
305
|
+
* text (not markdown headers) so it reads the same in a terminal, a transcript,
|
|
306
|
+
* and a model prompt.
|
|
307
|
+
*/
|
|
308
|
+
export function formatRemediation(r) {
|
|
309
|
+
const head = `🔧 Known failure (${r.id}): ${r.summary}`;
|
|
310
|
+
const body = r.fix.map((step, i) => ` ${i + 1}. ${step}`).join('\n');
|
|
311
|
+
const tail = r.scope === 'project-local'
|
|
312
|
+
? ' → Take the project-local step above and re-run; do not repeat the same command unchanged.'
|
|
313
|
+
: ' → This one is a machine-level change; state it plainly if it is required.';
|
|
314
|
+
return `${head}\n${body}\n${tail}`;
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=remediation-ladder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediation-ladder.js","sourceRoot":"","sources":["../../src/tools/remediation-ladder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyBjD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvD;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBtD;AAwBD;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA4KjF"}
|
package/dist/tools/run-cli.js
CHANGED
|
@@ -33,8 +33,10 @@ import { fileURLToPath } from 'node:url';
|
|
|
33
33
|
import { recordArtifact } from './artifact-append.js';
|
|
34
34
|
import { envBuff, resolveNuviraHome } from '../config/paths.js';
|
|
35
35
|
import { resolveAsk } from '../commands/intent-router.js';
|
|
36
|
-
import { decideCliIntentConfirmation
|
|
36
|
+
import { decideCliIntentConfirmation } from '../learning/autonomy-policy.js';
|
|
37
|
+
import { cliIntentGateFacts } from '../learning/cli-intent-effects.js';
|
|
37
38
|
import { envelopeCoversAction } from '../learning/intent-envelope.js';
|
|
39
|
+
import { sessionGrantCovers } from '../learning/session-grant.js';
|
|
38
40
|
import { maskSenderId } from '../utils/mask.js';
|
|
39
41
|
/** Cap on how much CLI output is fed back to the model. */
|
|
40
42
|
const MAX_OUTPUT_CHARS = 6000;
|
|
@@ -163,14 +165,37 @@ export async function runCliTool(args, ctx) {
|
|
|
163
165
|
// widen what may run: irreversible intents keep the gate they had, and this
|
|
164
166
|
// only lets an approved plan carry out system work without a round trip per
|
|
165
167
|
// command.
|
|
168
|
+
// ONE declaration answers every question below — what it does to the world,
|
|
169
|
+
// whether re-running undoes it, and which grant may cover it. See
|
|
170
|
+
// `learning/cli-intent-effects.ts`; the three hand-maintained sets this used to
|
|
171
|
+
// consult are retired.
|
|
172
|
+
const gatedIntent = cliIntentGateFacts(top.intent);
|
|
166
173
|
const envVerdict = envelopeCoversAction(ctx.envelope, {
|
|
167
174
|
tool: 'run_cli',
|
|
168
|
-
changeClass:
|
|
175
|
+
changeClass: gatedIntent.recoverable ? 'local-state' : 'destructive',
|
|
169
176
|
});
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
// A grant may only cover an intent the policy itself classifies as recoverable
|
|
178
|
+
// or off-machine — NEVER an irreversible local one (`history.clear`,
|
|
179
|
+
// `memory.prune`), which keeps its gate whatever the user granted.
|
|
180
|
+
const grantCovers = (gatedIntent.external || gatedIntent.recoverable) &&
|
|
181
|
+
gatedIntent.grantCategory !== undefined &&
|
|
182
|
+
sessionGrantCovers(ctx.planStore, gatedIntent.grantCategory);
|
|
183
|
+
const verdict = envVerdict.covered || grantCovers
|
|
184
|
+
? {
|
|
185
|
+
action: 'proceed',
|
|
186
|
+
reason: envVerdict.covered ? envVerdict.reason : 'allowed for this session by the user',
|
|
187
|
+
}
|
|
172
188
|
: decideCliIntentConfirmation({ intent: top.intent, namedByRequest });
|
|
173
189
|
if (verdict.action !== 'proceed') {
|
|
190
|
+
ctx.pendingConfirmation = {
|
|
191
|
+
tool: 'run_cli',
|
|
192
|
+
command,
|
|
193
|
+
// Offer a session grant ONLY where one could actually help; an
|
|
194
|
+
// irreversible local intent declares no category, so no grant is offered.
|
|
195
|
+
...((gatedIntent.external || gatedIntent.recoverable) && gatedIntent.grantCategory
|
|
196
|
+
? { category: gatedIntent.grantCategory }
|
|
197
|
+
: {}),
|
|
198
|
+
};
|
|
174
199
|
return (`Error: run_cli: "${top.intent}" changes running services/state and needs explicit confirmation ` +
|
|
175
200
|
`(${verdict.reason}). ` +
|
|
176
201
|
`Call ask_user with choices yes/no confirming this exact command, then re-call ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAc,IAAI,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../../src/tools/run-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
* (maskSenderId — phone numbers never echo back in full).
|
|
32
32
|
*/
|
|
33
33
|
import type { ToolContext } from './registry.js';
|
|
34
|
+
/** Test/DI seam: forget every recorded failure streak. */
|
|
35
|
+
export declare function resetTerminalFailureStreaks(): void;
|
|
36
|
+
/** The guidance a timed-out command gets instead of a bare "timed out". */
|
|
37
|
+
export declare function timeoutGuidance(command: string, timeoutMs: number, repeated: boolean): string;
|
|
34
38
|
/**
|
|
35
39
|
* Does this command ADD a dependency (rather than install what is declared)?
|
|
36
40
|
*
|
|
@@ -53,6 +57,13 @@ export interface RunTerminalArgs {
|
|
|
53
57
|
command: string;
|
|
54
58
|
confirm?: boolean;
|
|
55
59
|
timeout_ms?: number;
|
|
60
|
+
/**
|
|
61
|
+
* What this command is FOR (e.g. "install java"). When the command SUCCEEDS,
|
|
62
|
+
* it is remembered for this verb on this OS (a learned command, source
|
|
63
|
+
* 'observed'), so a later `tool_search resolve` offers it. Optional: absent
|
|
64
|
+
* means nothing is learned — the harness cannot name a verb the model did not.
|
|
65
|
+
*/
|
|
66
|
+
verb?: string;
|
|
56
67
|
}
|
|
57
68
|
export declare function runTerminalTool(args: RunTerminalArgs, ctx: ToolContext): Promise<string>;
|
|
58
69
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;
|
|
1
|
+
{"version":3,"file":"run-terminal.d.ts","sourceRoot":"","sources":["../../src/tools/run-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmDjD,0DAA0D;AAC1D,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AA+BD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAW7F;AAoND;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBvD;AAOD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAetE;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAkElD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAe7D;AAED,iFAAiF;AAEjF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAsR9F"}
|