agent-nuvira 3.3.1 â 3.3.4
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 +18 -13
- package/dist/agent-sdk/src/agent.d.ts +2 -0
- package/dist/agent-sdk/src/agent.d.ts.map +1 -1
- package/dist/agent-sdk/src/define.d.ts +64 -0
- package/dist/agent-sdk/src/define.d.ts.map +1 -0
- package/dist/agent-sdk/src/define.js +76 -0
- package/dist/agent-sdk/src/define.js.map +1 -0
- package/dist/agent-sdk/src/index.d.ts +9 -0
- package/dist/agent-sdk/src/index.d.ts.map +1 -1
- package/dist/agent-sdk/src/index.js +9 -0
- package/dist/agent-sdk/src/index.js.map +1 -1
- package/dist/agent-sdk/src/scaffold.d.ts +11 -0
- package/dist/agent-sdk/src/scaffold.d.ts.map +1 -1
- package/dist/agent-sdk/src/scaffold.js +16 -6
- package/dist/agent-sdk/src/scaffold.js.map +1 -1
- package/dist/agents/agents/runner.d.ts +9 -0
- package/dist/agents/agents/runner.d.ts.map +1 -1
- package/dist/agents/agents/runner.js +34 -12
- package/dist/agents/agents/runner.js.map +1 -1
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +7 -2
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +7 -1
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/artifact-verification.d.ts +102 -0
- package/dist/agents/artifact-verification.d.ts.map +1 -0
- package/dist/agents/artifact-verification.js +216 -0
- package/dist/agents/artifact-verification.js.map +1 -0
- package/dist/agents/checkpoint-store.d.ts +73 -0
- package/dist/agents/checkpoint-store.d.ts.map +1 -1
- package/dist/agents/checkpoint-store.js +161 -0
- package/dist/agents/checkpoint-store.js.map +1 -1
- package/dist/agents/credential-store.d.ts +120 -0
- package/dist/agents/credential-store.d.ts.map +1 -1
- package/dist/agents/credential-store.js +358 -19
- package/dist/agents/credential-store.js.map +1 -1
- package/dist/agents/long-form-plan.d.ts.map +1 -1
- package/dist/agents/long-form-plan.js +2 -1
- package/dist/agents/long-form-plan.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +10 -1
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +239 -79
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/phase-engine.d.ts +61 -0
- package/dist/agents/phase-engine.d.ts.map +1 -1
- package/dist/agents/phase-engine.js +68 -2
- package/dist/agents/phase-engine.js.map +1 -1
- package/dist/agents/prompt-assembly.d.ts +11 -0
- package/dist/agents/prompt-assembly.d.ts.map +1 -1
- package/dist/agents/prompt-assembly.js +17 -0
- package/dist/agents/prompt-assembly.js.map +1 -1
- package/dist/agents/release-preflight.d.ts +121 -0
- package/dist/agents/release-preflight.d.ts.map +1 -0
- package/dist/agents/release-preflight.js +259 -0
- package/dist/agents/release-preflight.js.map +1 -0
- package/dist/agents/release-runner.d.ts +157 -0
- package/dist/agents/release-runner.d.ts.map +1 -0
- package/dist/agents/release-runner.js +719 -0
- package/dist/agents/release-runner.js.map +1 -0
- package/dist/agents/step-handoff.d.ts +190 -0
- package/dist/agents/step-handoff.d.ts.map +1 -0
- package/dist/agents/step-handoff.js +443 -0
- package/dist/agents/step-handoff.js.map +1 -0
- package/dist/cli/agent.d.ts +2 -2
- package/dist/cli/agent.js +10 -10
- package/dist/cli/benchmark.d.ts.map +1 -1
- package/dist/cli/benchmark.js +11 -4
- package/dist/cli/benchmark.js.map +1 -1
- package/dist/cli/chat.d.ts +94 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +379 -24
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +8 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +9 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/credentials.d.ts +28 -0
- package/dist/cli/credentials.d.ts.map +1 -0
- package/dist/cli/credentials.js +213 -0
- package/dist/cli/credentials.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +3 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/edit.js +2 -2
- package/dist/cli/eval.d.ts +17 -0
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +105 -2
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/execute.d.ts +16 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +192 -22
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/failover-runner.d.ts.map +1 -1
- package/dist/cli/failover-runner.js +9 -3
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +55 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +285 -19
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +9 -8
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/models.d.ts +1 -1
- package/dist/cli/models.js +4 -4
- package/dist/cli/nlu.d.ts.map +1 -1
- package/dist/cli/nlu.js +8 -2
- package/dist/cli/nlu.js.map +1 -1
- package/dist/cli/parity.d.ts +85 -0
- package/dist/cli/parity.d.ts.map +1 -0
- package/dist/cli/parity.js +506 -0
- package/dist/cli/parity.js.map +1 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +2 -1
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/publish.d.ts +22 -0
- package/dist/cli/publish.d.ts.map +1 -1
- package/dist/cli/publish.js +109 -13
- package/dist/cli/publish.js.map +1 -1
- package/dist/cli/retrieval.d.ts.map +1 -1
- package/dist/cli/retrieval.js +5 -4
- package/dist/cli/retrieval.js.map +1 -1
- package/dist/cli/sdk.js +4 -4
- package/dist/cli/sdk.js.map +1 -1
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +2 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/cli/workflow.js +2 -2
- package/dist/cli/workflow.js.map +1 -1
- package/dist/config/live-credentials.d.ts +57 -0
- package/dist/config/live-credentials.d.ts.map +1 -0
- package/dist/config/live-credentials.js +126 -0
- package/dist/config/live-credentials.js.map +1 -0
- package/dist/config/paths.d.ts +18 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +25 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +44 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/federation/a2a-types.js +1 -1
- package/dist/federation/a2a-types.js.map +1 -1
- package/dist/findings/verdicts.d.ts +241 -0
- package/dist/findings/verdicts.d.ts.map +1 -0
- package/dist/findings/verdicts.js +284 -0
- package/dist/findings/verdicts.js.map +1 -0
- package/dist/gateway/adapters.d.ts +65 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +216 -10
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/channel-directory.d.ts +31 -0
- package/dist/gateway/channel-directory.d.ts.map +1 -1
- package/dist/gateway/channel-directory.js +40 -0
- package/dist/gateway/channel-directory.js.map +1 -1
- package/dist/gateway/gateway-log.d.ts +1 -1
- package/dist/gateway/gateway-log.d.ts.map +1 -1
- package/dist/gateway/gateway-log.js.map +1 -1
- package/dist/gateway/hooks.d.ts +87 -19
- package/dist/gateway/hooks.d.ts.map +1 -1
- package/dist/gateway/hooks.js +62 -23
- package/dist/gateway/hooks.js.map +1 -1
- package/dist/gateway/inbound-media.d.ts +147 -0
- package/dist/gateway/inbound-media.d.ts.map +1 -0
- package/dist/gateway/inbound-media.js +317 -0
- package/dist/gateway/inbound-media.js.map +1 -0
- package/dist/gateway/inbox.d.ts +8 -1
- package/dist/gateway/inbox.d.ts.map +1 -1
- package/dist/gateway/inbox.js.map +1 -1
- package/dist/gateway/platform-config.d.ts +14 -0
- package/dist/gateway/platform-config.d.ts.map +1 -1
- package/dist/gateway/platform-config.js +26 -8
- package/dist/gateway/platform-config.js.map +1 -1
- package/dist/gateway/realtime.d.ts +114 -0
- package/dist/gateway/realtime.d.ts.map +1 -0
- package/dist/gateway/realtime.js +402 -0
- package/dist/gateway/realtime.js.map +1 -0
- package/dist/gateway/registry.d.ts +31 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +224 -4
- package/dist/gateway/registry.js.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.js +123 -4
- package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
- package/dist/gateway/whatsapp/bridge.d.ts +6 -2
- package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/bridge.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/inference/factory.d.ts +14 -0
- package/dist/inference/factory.d.ts.map +1 -1
- package/dist/inference/factory.js +17 -0
- package/dist/inference/factory.js.map +1 -1
- package/dist/inference/groq-adapter.d.ts +2 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -1
- package/dist/inference/groq-adapter.js +16 -6
- package/dist/inference/groq-adapter.js.map +1 -1
- package/dist/inference/model-validator.d.ts +6 -1
- package/dist/inference/model-validator.d.ts.map +1 -1
- package/dist/inference/model-validator.js +7 -2
- package/dist/inference/model-validator.js.map +1 -1
- package/dist/inference/route-resolver.d.ts +116 -0
- package/dist/inference/route-resolver.d.ts.map +1 -0
- package/dist/inference/route-resolver.js +159 -0
- package/dist/inference/route-resolver.js.map +1 -0
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +29 -0
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/autonomy-policy.d.ts +18 -0
- package/dist/learning/autonomy-policy.d.ts.map +1 -1
- package/dist/learning/autonomy-policy.js +35 -0
- package/dist/learning/autonomy-policy.js.map +1 -1
- package/dist/learning/benchmark.d.ts.map +1 -1
- package/dist/learning/benchmark.js +3 -2
- package/dist/learning/benchmark.js.map +1 -1
- package/dist/learning/continuation.d.ts.map +1 -1
- package/dist/learning/continuation.js +2 -1
- package/dist/learning/continuation.js.map +1 -1
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +2 -1
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/deferred-task.d.ts.map +1 -1
- package/dist/learning/deferred-task.js +13 -4
- package/dist/learning/deferred-task.js.map +1 -1
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +2 -1
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/long-form.d.ts.map +1 -1
- package/dist/learning/long-form.js +2 -1
- package/dist/learning/long-form.js.map +1 -1
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +2 -1
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/reasoning-cache.d.ts.map +1 -1
- package/dist/learning/reasoning-cache.js +2 -1
- package/dist/learning/reasoning-cache.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +38 -2
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +91 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +31 -18
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/retrieval.d.ts.map +1 -1
- package/dist/learning/retrieval.js +2 -1
- package/dist/learning/retrieval.js.map +1 -1
- package/dist/learning/seeded-benchmark.d.ts +160 -0
- package/dist/learning/seeded-benchmark.d.ts.map +1 -0
- package/dist/learning/seeded-benchmark.js +321 -0
- package/dist/learning/seeded-benchmark.js.map +1 -0
- package/dist/learning/seeded-bugs.d.ts +142 -0
- package/dist/learning/seeded-bugs.d.ts.map +1 -0
- package/dist/learning/seeded-bugs.js +535 -0
- package/dist/learning/seeded-bugs.js.map +1 -0
- package/dist/learning/skill-store.d.ts.map +1 -1
- package/dist/learning/skill-store.js +30 -9
- package/dist/learning/skill-store.js.map +1 -1
- package/dist/learning/step-checkpoint.d.ts +127 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -0
- package/dist/learning/step-checkpoint.js +244 -0
- package/dist/learning/step-checkpoint.js.map +1 -0
- package/dist/mcp/catalog.js +2 -3
- package/dist/mcp/catalog.js.map +1 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +5 -3
- package/dist/mcp/manager.js.map +1 -1
- package/dist/nlu/intent-confirm.d.ts +23 -1
- package/dist/nlu/intent-confirm.d.ts.map +1 -1
- package/dist/nlu/intent-confirm.js +85 -2
- package/dist/nlu/intent-confirm.js.map +1 -1
- package/dist/nlu/learnings.d.ts +7 -0
- package/dist/nlu/learnings.d.ts.map +1 -1
- package/dist/nlu/learnings.js +7 -0
- package/dist/nlu/learnings.js.map +1 -1
- package/dist/observability/debug-log.d.ts +250 -0
- package/dist/observability/debug-log.d.ts.map +1 -0
- package/dist/observability/debug-log.js +500 -0
- package/dist/observability/debug-log.js.map +1 -0
- package/dist/observability/event-bus.d.ts.map +1 -1
- package/dist/observability/event-bus.js +4 -1
- package/dist/observability/event-bus.js.map +1 -1
- package/dist/observability/otel.d.ts +278 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +590 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/parity/drivers.d.ts +99 -0
- package/dist/parity/drivers.d.ts.map +1 -0
- package/dist/parity/drivers.js +1362 -0
- package/dist/parity/drivers.js.map +1 -0
- package/dist/parity/graph.d.ts +73 -0
- package/dist/parity/graph.d.ts.map +1 -0
- package/dist/parity/graph.js +162 -0
- package/dist/parity/graph.js.map +1 -0
- package/dist/parity/matrix.d.ts +105 -0
- package/dist/parity/matrix.d.ts.map +1 -0
- package/dist/parity/matrix.js +352 -0
- package/dist/parity/matrix.js.map +1 -0
- package/dist/parity/observation.d.ts +444 -0
- package/dist/parity/observation.d.ts.map +1 -0
- package/dist/parity/observation.js +333 -0
- package/dist/parity/observation.js.map +1 -0
- package/dist/parity/scenarios.d.ts +229 -0
- package/dist/parity/scenarios.d.ts.map +1 -0
- package/dist/parity/scenarios.js +175 -0
- package/dist/parity/scenarios.js.map +1 -0
- package/dist/parity/surfaces.d.ts +122 -0
- package/dist/parity/surfaces.d.ts.map +1 -0
- package/dist/parity/surfaces.js +190 -0
- package/dist/parity/surfaces.js.map +1 -0
- package/dist/runtime/fault-injection.d.ts +173 -0
- package/dist/runtime/fault-injection.d.ts.map +1 -0
- package/dist/runtime/fault-injection.js +281 -0
- package/dist/runtime/fault-injection.js.map +1 -0
- package/dist/skills/secret-capture.d.ts.map +1 -1
- package/dist/skills/secret-capture.js +9 -4
- package/dist/skills/secret-capture.js.map +1 -1
- package/dist/tools/child-agent-entry.d.ts +23 -0
- package/dist/tools/child-agent-entry.d.ts.map +1 -0
- package/dist/tools/child-agent-entry.js +129 -0
- package/dist/tools/child-agent-entry.js.map +1 -0
- package/dist/tools/child-agent-runtime.d.ts +124 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -0
- package/dist/tools/child-agent-runtime.js +704 -0
- package/dist/tools/child-agent-runtime.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +82 -10
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/credentials-tool.d.ts +24 -0
- package/dist/tools/credentials-tool.d.ts.map +1 -0
- package/dist/tools/credentials-tool.js +125 -0
- package/dist/tools/credentials-tool.js.map +1 -0
- package/dist/tools/delegation-system.d.ts +31 -0
- package/dist/tools/delegation-system.d.ts.map +1 -1
- package/dist/tools/delegation-system.js +70 -9
- package/dist/tools/delegation-system.js.map +1 -1
- package/dist/tools/extract/docx.d.ts +27 -0
- package/dist/tools/extract/docx.d.ts.map +1 -0
- package/dist/tools/extract/docx.js +48 -0
- package/dist/tools/extract/docx.js.map +1 -0
- package/dist/tools/extract/html-text.d.ts +27 -0
- package/dist/tools/extract/html-text.d.ts.map +1 -0
- package/dist/tools/extract/html-text.js +86 -0
- package/dist/tools/extract/html-text.js.map +1 -0
- package/dist/tools/extract/pdf-ocr.d.ts +58 -0
- package/dist/tools/extract/pdf-ocr.d.ts.map +1 -0
- package/dist/tools/extract/pdf-ocr.js +116 -0
- package/dist/tools/extract/pdf-ocr.js.map +1 -0
- package/dist/tools/extract/pdf.d.ts +65 -0
- package/dist/tools/extract/pdf.d.ts.map +1 -0
- package/dist/tools/extract/pdf.js +197 -0
- package/dist/tools/extract/pdf.js.map +1 -0
- package/dist/tools/extract/pptx.d.ts +32 -0
- package/dist/tools/extract/pptx.d.ts.map +1 -0
- package/dist/tools/extract/pptx.js +77 -0
- package/dist/tools/extract/pptx.js.map +1 -0
- package/dist/tools/extract/xlsx.d.ts +47 -0
- package/dist/tools/extract/xlsx.d.ts.map +1 -0
- package/dist/tools/extract/xlsx.js +111 -0
- package/dist/tools/extract/xlsx.js.map +1 -0
- package/dist/tools/finding-tool.d.ts +76 -0
- package/dist/tools/finding-tool.d.ts.map +1 -0
- package/dist/tools/finding-tool.js +125 -0
- package/dist/tools/finding-tool.js.map +1 -0
- package/dist/tools/git-tool.d.ts +25 -7
- package/dist/tools/git-tool.d.ts.map +1 -1
- package/dist/tools/git-tool.js +155 -15
- package/dist/tools/git-tool.js.map +1 -1
- package/dist/tools/loop-project-context.d.ts.map +1 -1
- package/dist/tools/loop-project-context.js +16 -0
- package/dist/tools/loop-project-context.js.map +1 -1
- package/dist/tools/loop-route-feed.d.ts +57 -0
- package/dist/tools/loop-route-feed.d.ts.map +1 -0
- package/dist/tools/loop-route-feed.js +101 -0
- package/dist/tools/loop-route-feed.js.map +1 -0
- package/dist/tools/messaging-tools.d.ts +41 -11
- package/dist/tools/messaging-tools.d.ts.map +1 -1
- package/dist/tools/messaging-tools.js +104 -55
- package/dist/tools/messaging-tools.js.map +1 -1
- package/dist/tools/neutts-synth.d.ts +27 -3
- package/dist/tools/neutts-synth.d.ts.map +1 -1
- package/dist/tools/neutts-synth.js +57 -13
- package/dist/tools/neutts-synth.js.map +1 -1
- package/dist/tools/pipeline-tool.d.ts +43 -1
- package/dist/tools/pipeline-tool.d.ts.map +1 -1
- package/dist/tools/pipeline-tool.js +21 -4
- package/dist/tools/pipeline-tool.js.map +1 -1
- package/dist/tools/publish-tool.d.ts.map +1 -1
- package/dist/tools/publish-tool.js +76 -10
- package/dist/tools/publish-tool.js.map +1 -1
- package/dist/tools/read-extract.d.ts +116 -45
- package/dist/tools/read-extract.d.ts.map +1 -1
- package/dist/tools/read-extract.js +494 -158
- package/dist/tools/read-extract.js.map +1 -1
- package/dist/tools/registry.d.ts +23 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +196 -29
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-terminal.d.ts +9 -0
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +80 -2
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/subagent-refusal.d.ts +15 -0
- package/dist/tools/subagent-refusal.d.ts.map +1 -0
- package/dist/tools/subagent-refusal.js +18 -0
- package/dist/tools/subagent-refusal.js.map +1 -0
- package/dist/tools/subagent-spawner.d.ts +122 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +249 -28
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-hooks.d.ts +177 -0
- package/dist/tools/tool-hooks.d.ts.map +1 -0
- package/dist/tools/tool-hooks.js +427 -0
- package/dist/tools/tool-hooks.js.map +1 -0
- package/dist/tools/tool-loop.d.ts +94 -5
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +315 -9
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/tool-refusal.d.ts +68 -0
- package/dist/tools/tool-refusal.d.ts.map +1 -0
- package/dist/tools/tool-refusal.js +78 -0
- package/dist/tools/tool-refusal.js.map +1 -0
- package/dist/tools/toolsets.d.ts +8 -0
- package/dist/tools/toolsets.d.ts.map +1 -1
- package/dist/tools/toolsets.js +14 -4
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/vision-tools.d.ts +88 -83
- package/dist/tools/vision-tools.d.ts.map +1 -1
- package/dist/tools/vision-tools.js +134 -103
- package/dist/tools/vision-tools.js.map +1 -1
- package/dist/tools/worktree.d.ts +210 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +374 -0
- package/dist/tools/worktree.js.map +1 -0
- package/dist/utils/format.d.ts +3 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +32 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/web-dashboard/attachment-extract.d.ts +64 -0
- package/dist/web-dashboard/attachment-extract.d.ts.map +1 -0
- package/dist/web-dashboard/attachment-extract.js +154 -0
- package/dist/web-dashboard/attachment-extract.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +108 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +36 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +37 -0
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +61 -1
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +14 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +247 -13
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +196 -48
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/workflow/registry.js +1 -1
- package/dist/workflow/registry.js.map +1 -1
- package/package.json +22 -6
- package/src/web-dashboard/public/assets/{index-Cyd6tIew.css â index-XJjj2cBX.css} +1 -1
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js +207 -0
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/dist/tools/child-agent-worker.js +0 -212
- package/src/web-dashboard/public/assets/index-CjvoBhlz.js +0 -207
- package/src/web-dashboard/public/assets/index-CjvoBhlz.js.map +0 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS0 (#22) â the capability matrix.
|
|
3
|
+
*
|
|
4
|
+
* The user-facing requirement this encodes: **the experience and the execution
|
|
5
|
+
* must be the same on chat, execute, dashboard chat, the gateway and subagents.**
|
|
6
|
+
* A requirement like that is only real if a capability cannot be added to one
|
|
7
|
+
* surface without someone answering for the other four â otherwise it is a
|
|
8
|
+
* promise in a document, and this repo has already been burned by exactly that
|
|
9
|
+
* shape of promise (the dashboard bundle was hand-maintained generated output;
|
|
10
|
+
* the Subagents tab shipped while the served bundle did not contain it).
|
|
11
|
+
*
|
|
12
|
+
* TWO ORTHOGONAL QUESTIONS, kept apart on purpose:
|
|
13
|
+
*
|
|
14
|
+
* - `status` â what we BELIEVE. Declared here by a human, per surface.
|
|
15
|
+
* - `verified` â what the parity tests PROVE today, per capability à surface.
|
|
16
|
+
*
|
|
17
|
+
* A capability believed to work everywhere but proven on two surfaces is a fair
|
|
18
|
+
* thing to have mid-workstream â and a dishonest thing to call "at par". So
|
|
19
|
+
* `unverifiedClaims(verified)` names every such cell, and the matrix test
|
|
20
|
+
* asserts it equals a frozen list that can only shrink. Same ratchet as
|
|
21
|
+
* `SURFACE_DEBT`: growth fails (a new unprovable claim appeared), and a stale
|
|
22
|
+
* entry fails (one was proven and the list still claims it needs proof).
|
|
23
|
+
*
|
|
24
|
+
* The keys are per capability à surface, never per surface alone: a driver that
|
|
25
|
+
* proves a turn ran does not thereby prove its tool-call lifecycle was reported,
|
|
26
|
+
* and treating those as one thing is how a matrix starts flattering itself.
|
|
27
|
+
*
|
|
28
|
+
* Scope note: fault injection (WS6) and the seeded-bug benchmark (WS7) are test
|
|
29
|
+
* infrastructure, not capabilities a surface can have, so they are deliberately
|
|
30
|
+
* absent rather than marked "not applicable" five times.
|
|
31
|
+
*/
|
|
32
|
+
import { SURFACES } from './surfaces.js';
|
|
33
|
+
/** The tracker issues, so a reader can go from a cell to the work that owns it. */
|
|
34
|
+
export const WORKSTREAM_ISSUES = {
|
|
35
|
+
existing: null,
|
|
36
|
+
WS0: 22,
|
|
37
|
+
WS1: 23,
|
|
38
|
+
WS2: 24,
|
|
39
|
+
WS3: 25,
|
|
40
|
+
WS4: 26,
|
|
41
|
+
WS5: 27,
|
|
42
|
+
WS6: 28,
|
|
43
|
+
WS7: 29,
|
|
44
|
+
};
|
|
45
|
+
/** Every surface, so a row can be built without repeating the list five times. */
|
|
46
|
+
const EACH = SURFACES.map((s) => s.id);
|
|
47
|
+
/** A row with the same cell on every surface. */
|
|
48
|
+
function everywhere(status, note) {
|
|
49
|
+
const cells = {};
|
|
50
|
+
for (const surface of EACH)
|
|
51
|
+
cells[surface] = note ? { status, note } : { status };
|
|
52
|
+
return cells;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The subagent is DRIVEN for real â a forked child against a stub server â and
|
|
56
|
+
* now AGREES, rather than diverging on identity.
|
|
57
|
+
*/
|
|
58
|
+
const SUBAGENT_AT_PAR = 'Proven: a forked child at transport depth (the real Groq adapter talking to a stub server) is folded into the same comparison as the in-process surfaces and comes out at-par. The child still resolves its OWN provider from configuration â that is the isolation boundary, a separate process with its own provider object and loop â and the parity harness points that provider at the SAME id (`groq`) and transport (`native`) the other surfaces report, so agreement is evidence rather than a stub coincidence.';
|
|
59
|
+
export const CAPABILITIES = [
|
|
60
|
+
{
|
|
61
|
+
id: 'turn-parity',
|
|
62
|
+
label: 'The same message produces the same status, answer and reported provider, with no divergent tool calls',
|
|
63
|
+
workstream: 'WS0',
|
|
64
|
+
cells: {
|
|
65
|
+
'cli-chat': { status: 'supported', note: 'Proven: driven through ChatCommand.answerOnce with the stub at provider depth.' },
|
|
66
|
+
'cli-execute': { status: 'supported', note: 'Proven: the driver drives the COMMAND`s own single-goal path (`runSingleGoal`) with the provider stubbed at the shared factory, so the surface itself â not just the loop engine it runs on â produces the same status, answer, provider, model and transport as the chat surfaces. The command no longer owns a provider or an orchestrator (SURFACE_DEBT is empty); its pipeline arm runs through runPipelineTool and its loop arm through runLoopExecutor.' },
|
|
67
|
+
'dashboard-chat': { status: 'supported', note: 'Proven: driven through ChatConsole.answer with no injected engine, so the console loads the same real ChatCommand.' },
|
|
68
|
+
'gateway-chat': { status: 'supported', note: 'Proven: driven through GatewayRegistry.handleInbound with no chat engine injected, so runInboundChat lazy-imports the same real ChatCommand and the reply path runs.' },
|
|
69
|
+
subagent: { status: 'supported', note: SUBAGENT_AT_PAR },
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'run-attribution',
|
|
74
|
+
label: 'A run records the provider, model and transport that served it, success or failure',
|
|
75
|
+
workstream: 'existing',
|
|
76
|
+
cells: {
|
|
77
|
+
'cli-chat': { status: 'supported', note: 'Proven: answerOnce returns the full triple â provider, model and now transport (R2) â and the parity run asserts all three agree across the surfaces that hand the triple to their caller.' },
|
|
78
|
+
'cli-execute': { status: 'supported', note: 'Proven: the command`s single-goal result carries provider, model and transport, and its `--json-events` result line carries the same two plus transport for the loop arm. Both engine arms report: the loop arm from `runLoopExecutor`, the pipeline arm from the wrapper it drives (provider/model; the pipeline`s per-agent tool transport is not tracked, so it is omitted rather than invented).' },
|
|
79
|
+
'dashboard-chat': { status: 'supported', note: 'Proven: ChatAnswerResult carries provider, model and transport (R2), so the console hands its caller the same triple the CLI does, and the parity run asserts they agree.' },
|
|
80
|
+
'gateway-chat': { status: 'supported', note: 'Proven: runInboundChat (src/gateway/registry.ts) returns provider, model and transport to its caller and writes the same triple to the gateway log (`inbound.chat`), so a messaging run is attributable after the fact â the one surface with no terminal to scroll. The driver reads the surface`s own return, not the engine`s.' },
|
|
81
|
+
subagent: { status: 'supported', note: 'Proven: the child announces provider/model/transport before it can fail, repeats them on the error frame, and the manager records them on the run â asserted by the transport-depth parity case, which requires all three to be present and real.' },
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'tool-call-lifecycle',
|
|
86
|
+
label: 'Tool calls are reported as structured lifecycle events (started â called), not just text',
|
|
87
|
+
workstream: 'existing',
|
|
88
|
+
cells: {
|
|
89
|
+
'cli-chat': { status: 'supported', note: 'Verified by the parity harness: the executed call and its outcome are reported to the caller through onToolCall (chat.ts:1412).' },
|
|
90
|
+
'cli-execute': { status: 'supported', note: 'Proven: the loop arm reports each call`s outcome in order (`toolOutcomes`), read from the loop`s own `tool`/`refusal` events and handed back by the command, so a caller can say WHICH call failed rather than pairing an ordered name list with a separate error set (ambiguous when a tool runs twice).' },
|
|
91
|
+
'dashboard-chat': { status: 'supported', note: "Verified by the parity harness through the console event stream. Deliberately different for three tools: ask_user, suggest_followups and plan_todo render as their own cards (question / chips / checklist) instead of tool cards â a UI decision, cited at chat-console.ts:656." },
|
|
92
|
+
'gateway-chat': { status: 'supported', note: 'Proven: runInboundChat wires the engine`s onToolCall seam, records each `called` outcome on its return and in the `inbound.chat` log â internal, exactly like onProgress and never sent to the channel sender. The driver reads the surface`s own return, so a gateway turn`s tool work is attributable.' },
|
|
93
|
+
subagent: { status: 'supported', note: 'Proven: the child reports each call as two IPC frames â `tool_call` (the name) then `tool_result` (the name AND its outcome, on the same `Error:` convention the main loop uses) â and the driver records the call with its outcome. A call whose outcome frame never arrives keeps `ok` absent, which is the honest reading of a truncated run.' },
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'findings-verdicts',
|
|
98
|
+
label: 'A finding carries CONFIRMED/PLAUSIBLE and an outcome, and cannot be promoted without evidence',
|
|
99
|
+
workstream: 'WS1',
|
|
100
|
+
// NOW PROVEN ON EVERY SURFACE, and the proof is two-sided on purpose. The
|
|
101
|
+
// `finding` tool (`tools/finding-tool.ts`) lets the model state a claim and
|
|
102
|
+
// the evidence it checked, and NEVER the verdict â the gate
|
|
103
|
+
// (`findings/verdicts.ts`) decides, promoting only when a non-blank evidence
|
|
104
|
+
// reference was supplied. Two parity scenarios drive it: `finding-confirmed`
|
|
105
|
+
// (usable evidence â CONFIRMED, with the evidence carried) and
|
|
106
|
+
// `finding-refused` (a blank reference â the promotion is refused and every
|
|
107
|
+
// surface must report PLAUSIBLE). The second is the one that matters â
|
|
108
|
+
// agreement on a promoted verdict that nothing earned is the defect this
|
|
109
|
+
// whole workstream exists to close.
|
|
110
|
+
cells: {
|
|
111
|
+
'cli-chat': {
|
|
112
|
+
status: 'supported',
|
|
113
|
+
note: 'Proven: a turn that calls `finding` reports the gated wire finding on the engine result (ChatAnswerResult.findings) AND through the `onFinding` seam, driven by the `finding-confirmed` / `finding-refused` scenarios.',
|
|
114
|
+
},
|
|
115
|
+
'cli-execute': {
|
|
116
|
+
status: 'supported',
|
|
117
|
+
note: 'Proven: the command returns the findings its run recorded â the loop arm from its own context bus (`finding:recorded`), the direct-answer arm from the engine`s `onFinding` seam â asserted by the same two scenarios.',
|
|
118
|
+
},
|
|
119
|
+
'dashboard-chat': {
|
|
120
|
+
status: 'supported',
|
|
121
|
+
note: 'Proven: the console collects findings from the engine seam onto ChatAnswerResult.findings AND forwards each one live as a `finding` event over the chat SSE stream, so a dashboard caller reads the same wire verdicts as the CLI. The GUI draws a verdict card per finding (evidence for a CONFIRMED one, an explicit "no evidence â reported as PLAUSIBLE" for the rest) and the POST response stays authoritative for the snapshot â pinned by the ChatPage finding-card case.',
|
|
122
|
+
},
|
|
123
|
+
'gateway-chat': {
|
|
124
|
+
status: 'supported',
|
|
125
|
+
note: 'Proven: runInboundChat records each finding on its `inbound.chat` log entry and its return â internal, exactly like the tool lifecycle, and never sent to the channel sender. The driver reads the surface`s own durable record.',
|
|
126
|
+
},
|
|
127
|
+
subagent: {
|
|
128
|
+
status: 'supported',
|
|
129
|
+
note: 'Proven: the child ships each recorded finding on its own `finding` progress frame and the manager accumulates them on the run, so a forked subagent reports the verdicts it produced rather than leaving them inside its process.',
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'debug-log',
|
|
135
|
+
label: 'A session debug log you can attach to a bug report, with a header naming the backend',
|
|
136
|
+
workstream: 'WS2',
|
|
137
|
+
// NOW SUPPORTED ON EVERY SURFACE, and the proof is read from DISK rather
|
|
138
|
+
// than from a return value. `observability/debug-log.ts` writes one plain
|
|
139
|
+
// text file per turn â opt-in via `NUVIRA_DEBUG_LOG`, redacted with the
|
|
140
|
+
// gateway's own `scrubSecrets`, bounded in lines and bytes, and written ONCE
|
|
141
|
+
// at turn end so its header can name the backend that ACTUALLY served the
|
|
142
|
+
// turn (the provider walk mutates `session.model`/`lastAttempt`/`servedRoute`
|
|
143
|
+
// mid-turn, so anything captured at turn START would be wrong exactly when
|
|
144
|
+
// failover happened). The parity harness turns logging on for the whole run,
|
|
145
|
+
// then reads each surface's own file back: `written: true` on every surface
|
|
146
|
+
// and the same provider/model/transport triple in every header â asserted by
|
|
147
|
+
// 'writes a session debug log whose header names the backend, on every
|
|
148
|
+
// surface' in `tests/parity/scenario-parity.test.ts`. The `written: false`
|
|
149
|
+
// case is the load-bearing one: a surface that produces NOTHING must diverge,
|
|
150
|
+
// not agree.
|
|
151
|
+
cells: {
|
|
152
|
+
'cli-chat': {
|
|
153
|
+
status: 'supported',
|
|
154
|
+
note: 'Proven: `ChatCommand.runChatAnswer` opens the log for the turn, records turn start, every tool start/end and every finding, then writes it with the backend from `lastAttempt` (which the provider walk keeps current) and reports the path on the console. Read back from disk by the cli-chat driver.',
|
|
155
|
+
},
|
|
156
|
+
'cli-execute': {
|
|
157
|
+
status: 'supported',
|
|
158
|
+
note: 'Proven: BOTH arms log. The loop arm (`runLoopExecutor`) opens the log before routing â so a run that dies in the provider walk still leaves evidence â and records each tool/gate/refusal event, closing with `servedRoute` (kept current through failover). The direct-answer arm passes `debugSurface: "cli-execute"` down to the shared chat engine, so its log is attributed to the command that ran it rather than mislabelled `cli-chat`.',
|
|
159
|
+
},
|
|
160
|
+
'dashboard-chat': {
|
|
161
|
+
status: 'supported',
|
|
162
|
+
note: 'Proven: the console passes `debugSurface: "dashboard-chat"` to the shared engine, so a dashboard turn\'s log names the dashboard rather than the CLI. Read back from the isolated profile the console wrote into. The console also records WHICH conversation the turn belonged to (`debugSession`), so the log is findable rather than only readable: `GET /api/chat/:sessionId/support-bundle` hands back the logs that conversation wrote (selected by each log`s own header, never by recency), plus the conversation and a manifest â pinned by the support-bundle cases in `tests/web-dashboard/chat-api.test.ts`.',
|
|
163
|
+
},
|
|
164
|
+
'gateway-chat': {
|
|
165
|
+
status: 'supported',
|
|
166
|
+
note: 'Proven: `runInboundChat` passes `debugSurface: "gateway-chat"` to the shared engine, so a messaging turn\'s attachable log names the gateway â the surface with no terminal to scroll, and therefore the one where a written artifact matters most.',
|
|
167
|
+
},
|
|
168
|
+
'subagent': {
|
|
169
|
+
status: 'supported',
|
|
170
|
+
note: 'Proven: the CHILD opens its own log after it constructs its own provider (so the header names the backend from the first line), records turn start, each tool start/end, refusals and findings, and writes into ITS isolated profile â the driver reads it from the child`s config dir, not the parent`s, because a forked process is the isolation boundary. A provider refusal still writes the log before throwing.',
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: 'otel-export',
|
|
176
|
+
label: 'A span tree exported over OTLP when configured, with trace context propagated to child processes',
|
|
177
|
+
workstream: 'WS3',
|
|
178
|
+
// `NUVIRA_OTEL=1` turns export on for every surface â the gate lives in ONE
|
|
179
|
+
// module (`observability/otel.ts`) and each surface only opens a turn span
|
|
180
|
+
// there. Off by default, and with it off the SDK is never imported.
|
|
181
|
+
cells: {
|
|
182
|
+
'cli-chat': {
|
|
183
|
+
status: 'supported',
|
|
184
|
+
note: 'Proven: `ChatCommand.runChatAnswer` opens the turn span beside the debug log (before the cache check and the provider walk, so a turn that dies in routing is still visible), passes it to `runToolLoop` so every executed call becomes a child span, records each finding as a span EVENT (a finding has no duration), and closes it with the turn`s own outcome before flushing. Proven by the `otel-export` parity scenario: a real collector receives `nuvira.turn` with a `nuvira.tool.list_dir` child, one trace, service `agent-nuvira`.',
|
|
185
|
+
},
|
|
186
|
+
'cli-execute': {
|
|
187
|
+
status: 'supported',
|
|
188
|
+
note: 'Proven: BOTH arms export. The loop arm opens the turn span in `runLoopExecutor` before routing and closes it on both the success and the THROW path (a crashed run is a red span rather than a missing one); the direct-answer arm reports `cli-execute` through the shared chat engine it passes `debugSurface` to. Proven by the `otel-export` parity scenario, which drives the command`s own `runSingleGoal`.',
|
|
189
|
+
},
|
|
190
|
+
'dashboard-chat': {
|
|
191
|
+
status: 'supported',
|
|
192
|
+
note: 'Proven: the console hands the shared engine its surface (`dashboard-chat`) and its session, so a dashboard turn`s span is attributed to the dashboard and to the conversation it belonged to â the same identity its session debug log carries. The engine flushes per turn, so the provider outlives the turn in a long-running server while each turn`s spans ship as it ends. Proven by the `otel-export` parity scenario.',
|
|
193
|
+
},
|
|
194
|
+
'gateway-chat': {
|
|
195
|
+
status: 'supported',
|
|
196
|
+
note: 'Proven: `runInboundChat` passes `debugSurface: "gateway-chat"` to the shared engine, so the messaging surface â the one with no terminal to scroll â exports the same turn tree as the CLI. Proven by the `otel-export` parity scenario, which drives the REAL registry handler with no engine injected.',
|
|
197
|
+
},
|
|
198
|
+
'subagent': {
|
|
199
|
+
status: 'supported',
|
|
200
|
+
note: 'Proven, INCLUDING the trace context across the fork: the child opens its OWN turn span in `runSubagent` (one-shot, so it flushes and shuts the provider down before it reports its result), and `subagent-spawner` injects the ambient W3C `traceparent` into the child`s environment â read from the ACTIVE span, so two turns interleaving in one server cannot hand each other`s trace ids to a child. The child resumes from that header, so its turn span hangs off the tool call that spawned it and the whole turn is ONE trace. Proven by the `otel-export` parity scenario (the child`s spans are read back from a real collector in its own process) and by the fork case in `tests/tools/subagent-end-to-end.test.ts`, which asserts the child`s remote parent IS the parent`s tool span and that both share one trace id.',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: 'tool-hooks',
|
|
206
|
+
label: 'Tool lifecycle hooks (before/after/failed) an operator can subscribe to for instrumentation or veto',
|
|
207
|
+
workstream: 'WS4',
|
|
208
|
+
cells: {
|
|
209
|
+
'cli-chat': {
|
|
210
|
+
status: 'supported',
|
|
211
|
+
note: 'Proven: the shared engine hands the loop its surface label (`cli-chat`), and `src/tools/tool-loop.ts` runs the operator`s declared `before` hook before the call is announced â so a veto stops the call there and is fed back as a refused result rather than an unexplained gap. `after` fires once for a call that ran, `failed` for one that did not, never both. Proven by the `tool-hooks` and `tool-hook-veto` parity scenarios, whose hook is a real command the harness writes: the assertions are on what that command received (the call as JSON on stdin, the surface it came from) and on what the surface`s own tool lifecycle then did with the verdict.',
|
|
212
|
+
},
|
|
213
|
+
'cli-execute': {
|
|
214
|
+
status: 'supported',
|
|
215
|
+
note: 'Proven: `runLoopExecutor` passes `cli-execute` to the loop, and the command`s own per-call outcomes carry the vetoed call as FAILED â so a policy that stops a call is visible in the result the command returns, not only in the loop. The direct-answer arm is covered through the shared engine it hands `debugSurface` to. Proven by the `tool-hooks` and `tool-hook-veto` parity scenarios, which drive the command`s own `runSingleGoal`.',
|
|
216
|
+
},
|
|
217
|
+
'dashboard-chat': {
|
|
218
|
+
status: 'supported',
|
|
219
|
+
note: 'Proven: the console passes its surface (`dashboard-chat`) and its session down to the shared engine, and the vetoed call reaches the console`s own event stream as a failed tool call â which is the seam the GUI renders. The declarations are resolved per call, so hooking a long-running server neither caches a stale policy nor re-installs one it already has. Proven by the `tool-hooks` and `tool-hook-veto` parity scenarios.',
|
|
220
|
+
},
|
|
221
|
+
'gateway-chat': {
|
|
222
|
+
status: 'supported',
|
|
223
|
+
note: 'Proven: `runInboundChat` passes `gateway-chat` to the shared engine, and the vetoed call lands in the gateway`s own `inbound.chat` record as a failed call â the messaging surface has no terminal, so that durable record is where the operator`s decision has to be legible, and it is. Proven by the `tool-hooks` and `tool-hook-veto` parity scenarios, which drive the REAL registry handler with no engine injected.',
|
|
224
|
+
},
|
|
225
|
+
'subagent': {
|
|
226
|
+
status: 'supported',
|
|
227
|
+
note: 'Proven ACROSS the process boundary, which is where a policy is easiest to lose: the child reads its OWN config and inherits the parent`s environment, resolves the same declarations, and runs the operator`s hook in its own process â a veto that holds on the CLI holds for a forked subagent. It reports a hook that FAILED to run on its own `hook_problem` frame rather than swallowing it, and a vetoed call travels to the parent as a failed `tool_result`, exactly like a call that ran and failed. Proven by the `tool-hooks` and `tool-hook-veto` parity scenarios (the invocations are read back from the log file the CHILD`s hook process appended to) and by `tests/tools/subagent-end-to-end.test.ts`.',
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: 'isolation-worktree',
|
|
233
|
+
label: 'An investigation can be isolated in a git worktree and returns a diff against the base',
|
|
234
|
+
workstream: 'WS5',
|
|
235
|
+
cells: {
|
|
236
|
+
'cli-chat': {
|
|
237
|
+
status: 'supported',
|
|
238
|
+
note: 'Proven: `--worktree` on `nuvira chat`, or `NUVIRA_ISOLATE=1` for a deployment, runs the TURN in its own git worktree â the worktree is created around `answerOnce`/`runChatAnswer`, so the tools` `cwd`, the ambient project snapshot and the working-state ledger all resolve inside it. The result carries the diff against the base commit and the operator sees where the run happened (`đŋ isolated in a git worktree: âĻ`). When the directory cannot be isolated (not a repo, no commit) the turn REFUSES and reports the refusal as its content â it never runs unisolated while claiming otherwise. Proven by the `isolation-worktree` parity scenario, which asserts the changed file, the removal and a real base sha on every surface.',
|
|
239
|
+
},
|
|
240
|
+
'cli-execute': {
|
|
241
|
+
status: 'supported',
|
|
242
|
+
note: 'Proven: `--worktree` on `nuvira execute` isolates BOTH engine arms â `runLoopExecutor` resolves the request before routing (so a refused run costs no provider walk) and the direct-answer arm passes the same flags to the shared engine. The command reports the isolation and its diff on its own result, so a caller reads it from the surface rather than from a log. Proven by the `isolation-worktree` parity scenario, which drives the command`s own `runSingleGoal`.',
|
|
243
|
+
},
|
|
244
|
+
'dashboard-chat': {
|
|
245
|
+
status: 'supported',
|
|
246
|
+
note: 'Proven: the console forwards a per-turn request (`worktree` on `answer`, which the chat request carries) and the server`s environment can declare it for the deployment â the same shared engine does the work. The diff comes back on the console`s own result, so the GUI (or an API caller) can show what an isolated turn changed instead of only that it was isolated. Proven by the `isolation-worktree` parity scenario, which drives the REAL console with no injected engine.',
|
|
247
|
+
},
|
|
248
|
+
'gateway-chat': {
|
|
249
|
+
status: 'supported',
|
|
250
|
+
note: 'Proven: a messaging turn has no flags, so the gateway is asked through `NUVIRA_ISOLATE` and the shared engine isolates the turn; the isolation and its diff are written to the gateway`s own durable `inbound.chat` record, which is where a surface with no terminal has to say what it did. Read back from that record by the parity driver rather than taken from a return value. Proven by the `isolation-worktree` parity scenario, which drives the REAL registry handler.',
|
|
251
|
+
},
|
|
252
|
+
'subagent': {
|
|
253
|
+
status: 'supported',
|
|
254
|
+
note: 'Proven ACROSS the process boundary, and with the isolation made by the PARENT rather than asked of the child: `subagent` accepts `worktree: true`, `tools/subagent-spawner.ts` creates the worktree, forks the child INTO it and measures the diff itself when the child exits â a child that quietly declined would leave the caller believing isolated work happened in the real tree. A spawn that cannot be isolated FAILS rather than running unisolated, and an isolated child that in turn spawns inherits the directory (the spawn tool passes `ctx.cwd`). Proven by the `isolation-worktree` parity scenario and by `tests/tools/subagent-end-to-end.test.ts`.',
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
id: 'partial-resume',
|
|
260
|
+
label: 'A resumed run reuses unchanged steps instead of re-paying for every model call',
|
|
261
|
+
workstream: 'WS5',
|
|
262
|
+
cells: {
|
|
263
|
+
'cli-chat': {
|
|
264
|
+
status: 'supported',
|
|
265
|
+
note: 'Proven: `--resume [id]` (or `NUVIRA_RESUME`) replays the recorded MODEL CALLS of this ask in this directory whose input is byte-identical â the thread and the tool schema, hashed together â and pays only for the steps that changed. An ordinary run opens no record at all (no read, no write, no directory created). The session reports what it replayed and what it paid for. Proven by the `partial-resume` parity scenario, which runs the same ask twice and asserts the second turn made ZERO model calls.',
|
|
266
|
+
},
|
|
267
|
+
'cli-execute': {
|
|
268
|
+
status: 'supported',
|
|
269
|
+
note: 'Proven: `--resume` now means the same thing on BOTH of this command`s engines and at both granularities â completed TASKS are skipped on the pipeline arm (`agents/checkpoint-store.ts`) and unchanged MODEL CALLS are replayed on the loop arm (`learning/step-checkpoint.ts`). Both resolve their id through `checkpointIdFor(goal, cwd)`, so one flag cannot mean two different runs. Proven by the `partial-resume` parity scenario, which drives the command`s own `runSingleGoal`.',
|
|
270
|
+
},
|
|
271
|
+
'dashboard-chat': {
|
|
272
|
+
status: 'supported',
|
|
273
|
+
note: 'Proven: the console forwards a per-turn `resume` request and the server can declare it for the deployment; the composer`s âŠī¸ control is what asks for it (with an optional checkpoint id, blank meaning this ask`s own record), and every reply carries a card with the counts the ledger reported. The shared engine opens the record, replays the unchanged steps and reports the counts on the console`s own result. The parity case drives a FRESH conversation per turn, which is the honest way to ask â two turns in one conversation carry the first answer in the second`s history, so their inputs genuinely differ and the replay correctly misses.',
|
|
274
|
+
},
|
|
275
|
+
'gateway-chat': {
|
|
276
|
+
status: 'supported',
|
|
277
|
+
note: 'Proven: an inbound message has no flags, so the gateway is asked through `NUVIRA_RESUME`; the resumed turn`s counts are recorded on the gateway`s `inbound.chat` record, where a messaging surface has to report them. Proven by the `partial-resume` parity scenario, read back from that record.',
|
|
278
|
+
},
|
|
279
|
+
'subagent': {
|
|
280
|
+
status: 'supported',
|
|
281
|
+
note: 'Proven ACROSS the process boundary and in the child`s OWN process, which is where the model calls happen: the child opens its own record, replays the steps whose thread+schema hash matches, and reports what it avoided to the parent on a progress frame that becomes part of the run`s result. An empty recorded step (a provider failure) is never replayed, so a resume cannot inherit a failure as an answer. Proven by the `partial-resume` parity scenario, whose child root and memory dir are SHARED between the probe`s two turns so the second turn reads what the first wrote.',
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
];
|
|
286
|
+
/**
|
|
287
|
+
* Cells that believe they are `supported` but that the parity tests do not
|
|
288
|
+
* prove, as `capability@surface` keys. Frozen: a new key fails the matrix test,
|
|
289
|
+
* and a key whose cell became verified also fails until it is deleted â so the
|
|
290
|
+
* list can only shrink, and every line is a debt the harness has to pay off.
|
|
291
|
+
*
|
|
292
|
+
* EMPTY â and that is the ratchet working, not the rule being relaxed. Every
|
|
293
|
+
* surface is driven, and every `supported` claim on every surface is backed by a
|
|
294
|
+
* case in `tests/parity/`. The last three left in one step by REPORTING facts at
|
|
295
|
+
* the surface boundary rather than building capabilities: the gateway wired the
|
|
296
|
+
* engine`s onToolCall, the command reported each call`s outcome instead of a name
|
|
297
|
+
* list beside an error set, and the subagent was driven on the same provider id
|
|
298
|
+
* and transport as the in-process surfaces so its turn could be compared rather
|
|
299
|
+
* than merely refused.
|
|
300
|
+
*
|
|
301
|
+
* The constant stays declared with an empty array on purpose: deleting it would
|
|
302
|
+
* stop the rule being measured, and the next unprovable `supported` claim would
|
|
303
|
+
* then be invisible instead of a one-line diff here. The REASON for any future
|
|
304
|
+
* entry lives on the cell's `note`, which the matrix test requires to be
|
|
305
|
+
* non-empty for every entry on the list â one place per fact, so the two cannot
|
|
306
|
+
* drift apart.
|
|
307
|
+
*/
|
|
308
|
+
export const UNVERIFIED_SUPPORTED = [];
|
|
309
|
+
/** The stable key for one cell, so nothing else invents its own format. */
|
|
310
|
+
export function cellKey(capability, surface) {
|
|
311
|
+
return `${capability}@${surface}`;
|
|
312
|
+
}
|
|
313
|
+
/** Every capability à surface cell, flattened, for reporting and assertions. */
|
|
314
|
+
export function matrixCells() {
|
|
315
|
+
const out = [];
|
|
316
|
+
for (const capability of CAPABILITIES) {
|
|
317
|
+
for (const surface of EACH) {
|
|
318
|
+
out.push({ capability: capability.id, surface, cell: capability.cells[surface] });
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return out;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Cells that include `supported` but that the harness does not PROVE, as cell
|
|
325
|
+
* keys. `verified` is the set the parity tests actually assert today.
|
|
326
|
+
*/
|
|
327
|
+
export function unverifiedClaims(verified) {
|
|
328
|
+
const out = [];
|
|
329
|
+
for (const { capability, surface, cell } of matrixCells()) {
|
|
330
|
+
if (cell.status !== 'supported')
|
|
331
|
+
continue;
|
|
332
|
+
if (verified.has(cellKey(capability, surface)))
|
|
333
|
+
continue;
|
|
334
|
+
out.push(cellKey(capability, surface));
|
|
335
|
+
}
|
|
336
|
+
return out.sort();
|
|
337
|
+
}
|
|
338
|
+
/** The frozen list, normalised the same way, for an equality assertion. */
|
|
339
|
+
export function declaredUnverifiedClaims() {
|
|
340
|
+
return [...UNVERIFIED_SUPPORTED].sort();
|
|
341
|
+
}
|
|
342
|
+
/** Surfaces where a capability is deliberately different, and why. */
|
|
343
|
+
export function scopedExceptions() {
|
|
344
|
+
return matrixCells()
|
|
345
|
+
.filter((entry) => entry.cell.status === 'scoped')
|
|
346
|
+
.map((entry) => ({
|
|
347
|
+
capability: entry.capability,
|
|
348
|
+
surface: entry.surface,
|
|
349
|
+
note: entry.cell.note ?? '',
|
|
350
|
+
}));
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../src/parity/matrix.ts"],"names":[],"mappings":"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"}
|