@nac3/forge-cli 0.2.0-alpha.5 → 0.2.0-alpha.59z.119
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 +16 -1
- package/dist/a11y/helpers.d.ts +88 -0
- package/dist/a11y/helpers.d.ts.map +1 -0
- package/dist/a11y/helpers.js +109 -0
- package/dist/a11y/helpers.js.map +1 -0
- package/dist/agents/config_resolver.d.ts +16 -0
- package/dist/agents/config_resolver.d.ts.map +1 -0
- package/dist/agents/config_resolver.js +133 -0
- package/dist/agents/config_resolver.js.map +1 -0
- package/dist/agents/config_schema.d.ts +42 -0
- package/dist/agents/config_schema.d.ts.map +1 -0
- package/dist/agents/config_schema.js +204 -0
- package/dist/agents/config_schema.js.map +1 -0
- package/dist/agents/defaults.d.ts +21 -0
- package/dist/agents/defaults.d.ts.map +1 -0
- package/dist/agents/defaults.js +56 -0
- package/dist/agents/defaults.js.map +1 -0
- package/dist/agents/runner.d.ts +94 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +165 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/store.d.ts +33 -0
- package/dist/agents/store.d.ts.map +1 -0
- package/dist/agents/store.js +210 -0
- package/dist/agents/store.js.map +1 -0
- package/dist/agents/types.d.ts +112 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +39 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +86 -2
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts +53 -15
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +152 -27
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/graph_auto_ingest.d.ts +46 -0
- package/dist/chat/graph_auto_ingest.d.ts.map +1 -0
- package/dist/chat/graph_auto_ingest.js +162 -0
- package/dist/chat/graph_auto_ingest.js.map +1 -0
- package/dist/chat/graph_component_watcher.d.ts +30 -0
- package/dist/chat/graph_component_watcher.d.ts.map +1 -0
- package/dist/chat/graph_component_watcher.js +220 -0
- package/dist/chat/graph_component_watcher.js.map +1 -0
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +5819 -1455
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/project_slug.d.ts +6 -0
- package/dist/chat/project_slug.d.ts.map +1 -0
- package/dist/chat/project_slug.js +78 -0
- package/dist/chat/project_slug.js.map +1 -0
- package/dist/chat/semantic_graph_ingest.d.ts +31 -0
- package/dist/chat/semantic_graph_ingest.d.ts.map +1 -0
- package/dist/chat/semantic_graph_ingest.js +84 -0
- package/dist/chat/semantic_graph_ingest.js.map +1 -0
- package/dist/chat/semantic_graph_inject.d.ts +25 -0
- package/dist/chat/semantic_graph_inject.d.ts.map +1 -0
- package/dist/chat/semantic_graph_inject.js +64 -0
- package/dist/chat/semantic_graph_inject.js.map +1 -0
- package/dist/chat/server.d.ts +50 -0
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +1905 -54
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/spec_extract.d.ts +1 -2
- package/dist/chat/spec_extract.d.ts.map +1 -1
- package/dist/chat/spec_extract.js +18 -59
- package/dist/chat/spec_extract.js.map +1 -1
- package/dist/chat/spec_plan.d.ts +1 -2
- package/dist/chat/spec_plan.d.ts.map +1 -1
- package/dist/chat/spec_plan.js +15 -60
- package/dist/chat/spec_plan.js.map +1 -1
- package/dist/chat/tools/app_backend_dispatch.d.ts +39 -0
- package/dist/chat/tools/app_backend_dispatch.d.ts.map +1 -0
- package/dist/chat/tools/app_backend_dispatch.js +239 -0
- package/dist/chat/tools/app_backend_dispatch.js.map +1 -0
- package/dist/chat/tools/audit_consumers.d.ts +66 -0
- package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
- package/dist/chat/tools/audit_consumers.js +231 -0
- package/dist/chat/tools/audit_consumers.js.map +1 -0
- package/dist/chat/tools/fs_editor.d.ts +11 -0
- package/dist/chat/tools/fs_editor.d.ts.map +1 -0
- package/dist/chat/tools/fs_editor.js +162 -0
- package/dist/chat/tools/fs_editor.js.map +1 -0
- package/dist/chat/tools/git.d.ts +24 -0
- package/dist/chat/tools/git.d.ts.map +1 -1
- package/dist/chat/tools/git.js +78 -0
- package/dist/chat/tools/git.js.map +1 -1
- package/dist/chat/tools/keys.d.ts +9 -0
- package/dist/chat/tools/keys.d.ts.map +1 -0
- package/dist/chat/tools/keys.js +152 -0
- package/dist/chat/tools/keys.js.map +1 -0
- package/dist/chat/tools/misc_verbs.d.ts +36 -0
- package/dist/chat/tools/misc_verbs.d.ts.map +1 -0
- package/dist/chat/tools/misc_verbs.js +405 -0
- package/dist/chat/tools/misc_verbs.js.map +1 -0
- package/dist/chat/tools/nac3_invoke.d.ts +53 -0
- package/dist/chat/tools/nac3_invoke.d.ts.map +1 -0
- package/dist/chat/tools/nac3_invoke.js +886 -0
- package/dist/chat/tools/nac3_invoke.js.map +1 -0
- package/dist/chat/tools/pizarron.d.ts +40 -0
- package/dist/chat/tools/pizarron.d.ts.map +1 -0
- package/dist/chat/tools/pizarron.js +123 -0
- package/dist/chat/tools/pizarron.js.map +1 -0
- package/dist/chat/tools/project_lifecycle.d.ts +24 -0
- package/dist/chat/tools/project_lifecycle.d.ts.map +1 -0
- package/dist/chat/tools/project_lifecycle.js +184 -0
- package/dist/chat/tools/project_lifecycle.js.map +1 -0
- package/dist/chat/tools/reader.d.ts.map +1 -1
- package/dist/chat/tools/reader.js +144 -1
- package/dist/chat/tools/reader.js.map +1 -1
- package/dist/chat/tools/shell.d.ts +58 -0
- package/dist/chat/tools/shell.d.ts.map +1 -0
- package/dist/chat/tools/shell.js +253 -0
- package/dist/chat/tools/shell.js.map +1 -0
- package/dist/chat/tools/workflow.d.ts +45 -0
- package/dist/chat/tools/workflow.d.ts.map +1 -0
- package/dist/chat/tools/workflow.js +404 -0
- package/dist/chat/tools/workflow.js.map +1 -0
- package/dist/chat/tools.d.ts +27 -0
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +362 -13
- package/dist/chat/tools.js.map +1 -1
- package/dist/chat/workflow_inject.d.ts +52 -0
- package/dist/chat/workflow_inject.d.ts.map +1 -0
- package/dist/chat/workflow_inject.js +346 -0
- package/dist/chat/workflow_inject.js.map +1 -0
- package/dist/commands/agent.d.ts +22 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +190 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/approve.d.ts +32 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +198 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/block.d.ts +28 -0
- package/dist/commands/block.d.ts.map +1 -0
- package/dist/commands/block.js +189 -0
- package/dist/commands/block.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +35 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +205 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/brain.d.ts +17 -0
- package/dist/commands/brain.d.ts.map +1 -0
- package/dist/commands/brain.js +129 -0
- package/dist/commands/brain.js.map +1 -0
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +112 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/clarify.d.ts +30 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +671 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/discover.d.ts +30 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +178 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doctor.js +26 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctrine.d.ts +24 -0
- package/dist/commands/doctrine.d.ts.map +1 -0
- package/dist/commands/doctrine.js +106 -0
- package/dist/commands/doctrine.js.map +1 -0
- package/dist/commands/doctrines.d.ts +21 -0
- package/dist/commands/doctrines.d.ts.map +1 -0
- package/dist/commands/doctrines.js +158 -0
- package/dist/commands/doctrines.js.map +1 -0
- package/dist/commands/graph.d.ts +21 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +363 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/keys_setup.d.ts.map +1 -1
- package/dist/commands/keys_setup.js +80 -0
- package/dist/commands/keys_setup.js.map +1 -1
- package/dist/commands/legacy-audit.d.ts +34 -0
- package/dist/commands/legacy-audit.d.ts.map +1 -0
- package/dist/commands/legacy-audit.js +270 -0
- package/dist/commands/legacy-audit.js.map +1 -0
- package/dist/commands/lessons.d.ts +28 -0
- package/dist/commands/lessons.d.ts.map +1 -0
- package/dist/commands/lessons.js +309 -0
- package/dist/commands/lessons.js.map +1 -0
- package/dist/commands/license.d.ts.map +1 -1
- package/dist/commands/license.js +56 -1
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/limits.d.ts +15 -0
- package/dist/commands/limits.d.ts.map +1 -0
- package/dist/commands/limits.js +51 -0
- package/dist/commands/limits.js.map +1 -0
- package/dist/commands/manifest-cli.d.ts +12 -0
- package/dist/commands/manifest-cli.d.ts.map +1 -0
- package/dist/commands/manifest-cli.js +42 -0
- package/dist/commands/manifest-cli.js.map +1 -0
- package/dist/commands/mcp.d.ts +24 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +163 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/nac3.d.ts +22 -0
- package/dist/commands/nac3.d.ts.map +1 -0
- package/dist/commands/nac3.js +125 -0
- package/dist/commands/nac3.js.map +1 -0
- package/dist/commands/operate.d.ts +22 -0
- package/dist/commands/operate.d.ts.map +1 -0
- package/dist/commands/operate.js +523 -0
- package/dist/commands/operate.js.map +1 -0
- package/dist/commands/qa.d.ts +24 -0
- package/dist/commands/qa.d.ts.map +1 -0
- package/dist/commands/qa.js +349 -0
- package/dist/commands/qa.js.map +1 -0
- package/dist/commands/spec.d.ts +38 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +256 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/support.d.ts +22 -0
- package/dist/commands/support.d.ts.map +1 -0
- package/dist/commands/support.js +165 -0
- package/dist/commands/support.js.map +1 -0
- package/dist/commands/triage.d.ts +34 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +228 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/vault-inventory.d.ts +30 -0
- package/dist/commands/vault-inventory.d.ts.map +1 -0
- package/dist/commands/vault-inventory.js +222 -0
- package/dist/commands/vault-inventory.js.map +1 -0
- package/dist/commands/vault.d.ts.map +1 -1
- package/dist/commands/vault.js +5 -0
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/voice.d.ts.map +1 -1
- package/dist/commands/voice.js +47 -4
- package/dist/commands/voice.js.map +1 -1
- package/dist/commands/workflow-coverage.d.ts +30 -0
- package/dist/commands/workflow-coverage.d.ts.map +1 -0
- package/dist/commands/workflow-coverage.js +138 -0
- package/dist/commands/workflow-coverage.js.map +1 -0
- package/dist/core/ansi_strip.d.ts +39 -0
- package/dist/core/ansi_strip.d.ts.map +1 -0
- package/dist/core/ansi_strip.js +71 -0
- package/dist/core/ansi_strip.js.map +1 -0
- package/dist/core/audit_log.d.ts +43 -0
- package/dist/core/audit_log.d.ts.map +1 -0
- package/dist/core/audit_log.js +80 -0
- package/dist/core/audit_log.js.map +1 -0
- package/dist/core/brain_config.d.ts +33 -0
- package/dist/core/brain_config.d.ts.map +1 -0
- package/dist/core/brain_config.js +132 -0
- package/dist/core/brain_config.js.map +1 -0
- package/dist/core/budget.d.ts +96 -0
- package/dist/core/budget.d.ts.map +1 -0
- package/dist/core/budget.js +300 -0
- package/dist/core/budget.js.map +1 -0
- package/dist/core/cost_meter.d.ts +35 -0
- package/dist/core/cost_meter.d.ts.map +1 -0
- package/dist/core/cost_meter.js +111 -0
- package/dist/core/cost_meter.js.map +1 -0
- package/dist/core/cost_router.d.ts +106 -0
- package/dist/core/cost_router.d.ts.map +1 -0
- package/dist/core/cost_router.js +465 -0
- package/dist/core/cost_router.js.map +1 -0
- package/dist/core/doctrine_resolver.d.ts +23 -0
- package/dist/core/doctrine_resolver.d.ts.map +1 -0
- package/dist/core/doctrine_resolver.js +108 -0
- package/dist/core/doctrine_resolver.js.map +1 -0
- package/dist/core/error_catalog.d.ts +80 -0
- package/dist/core/error_catalog.d.ts.map +1 -0
- package/dist/core/error_catalog.js +168 -0
- package/dist/core/error_catalog.js.map +1 -0
- package/dist/core/error_formatter.d.ts +30 -0
- package/dist/core/error_formatter.d.ts.map +1 -0
- package/dist/core/error_formatter.js +155 -0
- package/dist/core/error_formatter.js.map +1 -0
- package/dist/core/incomplete_detector.d.ts +51 -0
- package/dist/core/incomplete_detector.d.ts.map +1 -0
- package/dist/core/incomplete_detector.js +140 -0
- package/dist/core/incomplete_detector.js.map +1 -0
- package/dist/core/learnings_client.d.ts +104 -0
- package/dist/core/learnings_client.d.ts.map +1 -0
- package/dist/core/learnings_client.js +262 -0
- package/dist/core/learnings_client.js.map +1 -0
- package/dist/core/limits_config.d.ts +76 -0
- package/dist/core/limits_config.d.ts.map +1 -0
- package/dist/core/limits_config.js +297 -0
- package/dist/core/limits_config.js.map +1 -0
- package/dist/core/provider_keys.d.ts +35 -0
- package/dist/core/provider_keys.d.ts.map +1 -0
- package/dist/core/provider_keys.js +260 -0
- package/dist/core/provider_keys.js.map +1 -0
- package/dist/core/reasoning_gate.d.ts +72 -0
- package/dist/core/reasoning_gate.d.ts.map +1 -0
- package/dist/core/reasoning_gate.js +192 -0
- package/dist/core/reasoning_gate.js.map +1 -0
- package/dist/core/shell_classifier.d.ts +49 -0
- package/dist/core/shell_classifier.d.ts.map +1 -0
- package/dist/core/shell_classifier.js +159 -0
- package/dist/core/shell_classifier.js.map +1 -0
- package/dist/core/sq_resolver.d.ts +14 -0
- package/dist/core/sq_resolver.d.ts.map +1 -0
- package/dist/core/sq_resolver.js +230 -0
- package/dist/core/sq_resolver.js.map +1 -0
- package/dist/core/truncation_detector.d.ts +68 -0
- package/dist/core/truncation_detector.d.ts.map +1 -0
- package/dist/core/truncation_detector.js +115 -0
- package/dist/core/truncation_detector.js.map +1 -0
- package/dist/core/turn_classifier.d.ts +62 -0
- package/dist/core/turn_classifier.d.ts.map +1 -0
- package/dist/core/turn_classifier.js +213 -0
- package/dist/core/turn_classifier.js.map +1 -0
- package/dist/core/whats_new.d.ts +42 -0
- package/dist/core/whats_new.d.ts.map +1 -0
- package/dist/core/whats_new.js +214 -0
- package/dist/core/whats_new.js.map +1 -0
- package/dist/deploy/adapter.d.ts +93 -0
- package/dist/deploy/adapter.d.ts.map +1 -0
- package/dist/deploy/adapter.js +42 -0
- package/dist/deploy/adapter.js.map +1 -0
- package/dist/deploy/aws_adapter.d.ts +28 -0
- package/dist/deploy/aws_adapter.d.ts.map +1 -0
- package/dist/deploy/aws_adapter.js +98 -0
- package/dist/deploy/aws_adapter.js.map +1 -0
- package/dist/deploy/cloudflare.d.ts +24 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -0
- package/dist/deploy/cloudflare.js +169 -0
- package/dist/deploy/cloudflare.js.map +1 -0
- package/dist/docs/LIMITED_RESPONSIBILITY.md +216 -0
- package/dist/docs/PRIVACY_POLICY.md +169 -0
- package/dist/docs/SQ.md +1397 -0
- package/dist/docs/SQ_BY_STEP.yaml +147 -0
- package/dist/docs/doctrine/accessibility.md +78 -0
- package/dist/docs/doctrine/agent-orchestrator.md +76 -0
- package/dist/docs/doctrine/byok-vs-managed.md +81 -0
- package/dist/docs/doctrine/cost-router-escalation.md +73 -0
- package/dist/docs/doctrine/explain-results.md +90 -0
- package/dist/docs/doctrine/g-doc.md +46 -0
- package/dist/docs/doctrine/gates.md +21 -0
- package/dist/docs/doctrine/lessons-workflow.md +68 -0
- package/dist/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
- package/dist/docs/doctrine/nac3-attrs.md +23 -0
- package/dist/docs/doctrine/office-tools.md +102 -0
- package/dist/docs/doctrine/pizarron.md +52 -0
- package/dist/docs/doctrine/r8-modal.md +60 -0
- package/dist/docs/doctrine/safety-refusals.md +73 -0
- package/dist/docs/doctrine/verb-composition.md +68 -0
- package/dist/docs/doctrine/workflow-phases.md +108 -0
- package/dist/docs/doctrine/workflow.md +58 -0
- package/dist/docs/doctrine/yf-commands.md +49 -0
- package/dist/json/query.d.ts +38 -0
- package/dist/json/query.d.ts.map +1 -0
- package/dist/json/query.js +177 -0
- package/dist/json/query.js.map +1 -0
- package/dist/license/hito4_client.d.ts +19 -0
- package/dist/license/hito4_client.d.ts.map +1 -1
- package/dist/license/hito4_client.js +110 -0
- package/dist/license/hito4_client.js.map +1 -1
- package/dist/license/index.d.ts.map +1 -1
- package/dist/license/index.js +7 -0
- package/dist/license/index.js.map +1 -1
- package/dist/license/sync.d.ts +54 -0
- package/dist/license/sync.d.ts.map +1 -0
- package/dist/license/sync.js +138 -0
- package/dist/license/sync.js.map +1 -0
- package/dist/llm/cohere_client.d.ts +81 -0
- package/dist/llm/cohere_client.d.ts.map +1 -0
- package/dist/llm/cohere_client.js +195 -0
- package/dist/llm/cohere_client.js.map +1 -0
- package/dist/llm/deepseek_client.d.ts +63 -0
- package/dist/llm/deepseek_client.d.ts.map +1 -0
- package/dist/llm/deepseek_client.js +188 -0
- package/dist/llm/deepseek_client.js.map +1 -0
- package/dist/llm/gemini_client.d.ts +78 -0
- package/dist/llm/gemini_client.d.ts.map +1 -0
- package/dist/llm/gemini_client.js +189 -0
- package/dist/llm/gemini_client.js.map +1 -0
- package/dist/llm/managed_client.d.ts +70 -0
- package/dist/llm/managed_client.d.ts.map +1 -0
- package/dist/llm/managed_client.js +251 -0
- package/dist/llm/managed_client.js.map +1 -0
- package/dist/llm/mistral_client.d.ts +54 -0
- package/dist/llm/mistral_client.d.ts.map +1 -0
- package/dist/llm/mistral_client.js +174 -0
- package/dist/llm/mistral_client.js.map +1 -0
- package/dist/llm/multi_provider_client.d.ts +57 -0
- package/dist/llm/multi_provider_client.d.ts.map +1 -0
- package/dist/llm/multi_provider_client.js +109 -0
- package/dist/llm/multi_provider_client.js.map +1 -0
- package/dist/llm/openai_client.d.ts +77 -0
- package/dist/llm/openai_client.d.ts.map +1 -0
- package/dist/llm/openai_client.js +200 -0
- package/dist/llm/openai_client.js.map +1 -0
- package/dist/llm/xai_client.d.ts +51 -0
- package/dist/llm/xai_client.d.ts.map +1 -0
- package/dist/llm/xai_client.js +174 -0
- package/dist/llm/xai_client.js.map +1 -0
- package/dist/mcp/bridge_registry.d.ts +77 -0
- package/dist/mcp/bridge_registry.d.ts.map +1 -0
- package/dist/mcp/bridge_registry.js +220 -0
- package/dist/mcp/bridge_registry.js.map +1 -0
- package/dist/mcp/config.d.ts +25 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +116 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/protocol_client.d.ts +63 -0
- package/dist/mcp/protocol_client.d.ts.map +1 -0
- package/dist/mcp/protocol_client.js +340 -0
- package/dist/mcp/protocol_client.js.map +1 -0
- package/dist/mcp/state.d.ts +38 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +144 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/migrate/ai-decorator.d.ts.map +1 -1
- package/dist/migrate/ai-decorator.js +33 -145
- package/dist/migrate/ai-decorator.js.map +1 -1
- package/dist/nac3/approval_queue.d.ts +36 -0
- package/dist/nac3/approval_queue.d.ts.map +1 -0
- package/dist/nac3/approval_queue.js +105 -0
- package/dist/nac3/approval_queue.js.map +1 -0
- package/dist/nac3/backend_tools.d.ts +89 -0
- package/dist/nac3/backend_tools.d.ts.map +1 -0
- package/dist/nac3/backend_tools.js +271 -0
- package/dist/nac3/backend_tools.js.map +1 -0
- package/dist/nac3/dispatch_log.d.ts +35 -0
- package/dist/nac3/dispatch_log.d.ts.map +1 -0
- package/dist/nac3/dispatch_log.js +126 -0
- package/dist/nac3/dispatch_log.js.map +1 -0
- package/dist/nac3/internal_manifest.d.ts +62 -0
- package/dist/nac3/internal_manifest.d.ts.map +1 -0
- package/dist/nac3/internal_manifest.js +1846 -0
- package/dist/nac3/internal_manifest.js.map +1 -0
- package/dist/nac3/manifest_lazy.d.ts +71 -0
- package/dist/nac3/manifest_lazy.d.ts.map +1 -0
- package/dist/nac3/manifest_lazy.js +141 -0
- package/dist/nac3/manifest_lazy.js.map +1 -0
- package/dist/nac3/verb_tier_map.d.ts +80 -0
- package/dist/nac3/verb_tier_map.d.ts.map +1 -0
- package/dist/nac3/verb_tier_map.js +159 -0
- package/dist/nac3/verb_tier_map.js.map +1 -0
- package/dist/office/excel.d.ts +110 -0
- package/dist/office/excel.d.ts.map +1 -0
- package/dist/office/excel.js +276 -0
- package/dist/office/excel.js.map +1 -0
- package/dist/office/pdf.d.ts +35 -0
- package/dist/office/pdf.d.ts.map +1 -0
- package/dist/office/pdf.js +70 -0
- package/dist/office/pdf.js.map +1 -0
- package/dist/office/word.d.ts +64 -0
- package/dist/office/word.d.ts.map +1 -0
- package/dist/office/word.js +243 -0
- package/dist/office/word.js.map +1 -0
- package/dist/qa/brain_matrix/ab_runner.d.ts +44 -0
- package/dist/qa/brain_matrix/ab_runner.d.ts.map +1 -0
- package/dist/qa/brain_matrix/ab_runner.js +144 -0
- package/dist/qa/brain_matrix/ab_runner.js.map +1 -0
- package/dist/qa/brain_matrix/brains.json +80 -0
- package/dist/qa/brain_matrix/compare.d.ts +27 -0
- package/dist/qa/brain_matrix/compare.d.ts.map +1 -0
- package/dist/qa/brain_matrix/compare.js +122 -0
- package/dist/qa/brain_matrix/compare.js.map +1 -0
- package/dist/qa/brain_matrix/fake_brain.d.ts +36 -0
- package/dist/qa/brain_matrix/fake_brain.d.ts.map +1 -0
- package/dist/qa/brain_matrix/fake_brain.js +27 -0
- package/dist/qa/brain_matrix/fake_brain.js.map +1 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_intent.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_no_speak_default.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_consecutive_announces.json +37 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_action.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_with_shortcut.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_announce_min_tool_calls.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_invoke_happy_path.json +65 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_no_invent_without_backend.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_schema_fail_recover.json +48 -0
- package/dist/qa/brain_matrix/fixtures/scenario_approval_modal_no_redundancy.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_args_redacted_in_audit.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_log_on_destructive.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_brain_explains_after_invoke.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_byok_on_managed_brain_overflow.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_byok_required_policy.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_concise_no_loop.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_consult_nac_spec_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_contradiction_rfp_cost.json +38 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_attachment_frontier.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_escalation_explicit.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_idle_reset.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_csv_via_excel_read.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_destructive_no_text_confirm.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_diff_explains_changes.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_after_unknown_intent.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_a11y.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_agent_orchestrator.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_byok_vs_managed.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_cost_router.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_g_doc.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_gates.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_lessons_workflow.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_mcp_lifecycle.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_nac3_attrs.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_office.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_pizarron.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_r8_modal.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow_phases.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_yf_commands.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_explain_results.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_safety_refusals.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_verb_composition.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_eco_defers_complex.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_eco_short_query.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_no_secret_leak.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression_en.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_handles_csv_refusal.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_then_list.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_list_sheets_first.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_sheet_named.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_explain_voice_yes.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_explains_forge_error.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_focus_after_modal_open.json +29 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_with_glob.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_mkdir_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_move_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_read_handles_missing.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_stat_before_read.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_generated_app_nac3_default.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_branch_list_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_diff_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_pull_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_push_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_show_metadata_only.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_branch_combo.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_github_clone_repo_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_github_create_repo_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_id_format_in_reply.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_idempotent_adenda.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_query_history.json +29 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_tracker_acknowledge.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_handles_malformed.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent_en.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_query_extract.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_set_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_complex_verb.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_doctrine_only_when_needed.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_simple_verb.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lesson_recall_overrides.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_restart_app_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_long_doctrine_no_truncate.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_manifest_read_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_manual_open_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_bridge_unreachable_graceful.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_disabled_bridge_no_verbs.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_discover_tools_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invariant_1_no_verbs.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_two_hop.json +68 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_with_auth_loaded.json +76 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_revoked_token_graceful.json +33 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_intent.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_no_token_arg.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_show_tools_before_invoke.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_toggle_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_multi_turn_clarify_then_act.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_attrs_doctrine.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_discover_schemas_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_required_attr_missing.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_bare_ok_after_destructive.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_global_learnings_no_recall.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_id_leak_in_reply.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_invent_verb.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_loop_after_repeated_fail.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_password_echo.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_all_current.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_then_explain.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_read_intent.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_write_required_args.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_overwrite_explicit.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_word_write_intent.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_panel_open_settings_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_panel_send_message_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pdf_read_intent.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_clear_tab_explicit_close.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_chart.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_long_table.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_read_tab_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_render_not_inline.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_read_file.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_verb_over_shell.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_workflow_state.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_project_init_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_project_set_root_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_promote_lesson_after_correction.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_r8_destructive_shell_exec.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_read_then_parse_order.json +36 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_jump_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_set_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_for_long_doc.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_list_docs_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_next_block_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_read_section_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_recap_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_blanket_chmod_777.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_bypass_approval_modal.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_delete_critical_en.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_disable_vault_encryption.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_drop_database.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main_en.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_leak_vault_en.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_modify_node_modules.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks_en.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_delete_critical.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_leak_vault.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_respects_global_learnings.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_respects_workflow_gate_g2.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_revoke_lesson_request.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sq_rules_active.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_truncated_response_retry.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_unknown_command_clarify.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_compose.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_handles_invalid.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_then_inspect_query.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_then_stringify_order.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_just_greets.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_overrides_proceeds.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_revokes_in_middle.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_voice_open_pizarron.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_outline_extraction.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_overwrite_explicit.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_section_count.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_doctrine.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_done_specs.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_intent_capture.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_jump_block.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_v_step_15.json +41 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_run_step_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_set_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_injection.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_recovers_after_clarify.json +25 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_step_1_intake.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_command_doctrine.json +56 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_doctrine_list_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_qa_compare_intent.json +17 -0
- package/dist/qa/brain_matrix/invariants.d.ts +18 -0
- package/dist/qa/brain_matrix/invariants.d.ts.map +1 -0
- package/dist/qa/brain_matrix/invariants.js +333 -0
- package/dist/qa/brain_matrix/invariants.js.map +1 -0
- package/dist/qa/brain_matrix/report.d.ts +12 -0
- package/dist/qa/brain_matrix/report.d.ts.map +1 -0
- package/dist/qa/brain_matrix/report.js +131 -0
- package/dist/qa/brain_matrix/report.js.map +1 -0
- package/dist/qa/brain_matrix/runner.d.ts +31 -0
- package/dist/qa/brain_matrix/runner.d.ts.map +1 -0
- package/dist/qa/brain_matrix/runner.js +561 -0
- package/dist/qa/brain_matrix/runner.js.map +1 -0
- package/dist/qa/brain_matrix/types.d.ts +180 -0
- package/dist/qa/brain_matrix/types.d.ts.map +1 -0
- package/dist/qa/brain_matrix/types.js +2 -0
- package/dist/qa/brain_matrix/types.js.map +1 -0
- package/dist/qa/brain_matrix/validate_scenario.d.ts +23 -0
- package/dist/qa/brain_matrix/validate_scenario.d.ts.map +1 -0
- package/dist/qa/brain_matrix/validate_scenario.js +128 -0
- package/dist/qa/brain_matrix/validate_scenario.js.map +1 -0
- package/dist/support/github_dispatcher.d.ts +36 -0
- package/dist/support/github_dispatcher.d.ts.map +1 -0
- package/dist/support/github_dispatcher.js +292 -0
- package/dist/support/github_dispatcher.js.map +1 -0
- package/dist/support/reports.d.ts +31 -0
- package/dist/support/reports.d.ts.map +1 -0
- package/dist/support/reports.js +162 -0
- package/dist/support/reports.js.map +1 -0
- package/dist/telemetry/usage.d.ts +67 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +208 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/config.d.ts +12 -0
- package/dist/voice/config.d.ts.map +1 -1
- package/dist/voice/config.js +25 -2
- package/dist/voice/config.js.map +1 -1
- package/dist/voice/providers/google.d.ts +9 -0
- package/dist/voice/providers/google.d.ts.map +1 -1
- package/dist/voice/providers/google.js +197 -28
- package/dist/voice/providers/google.js.map +1 -1
- package/dist/voice/router.d.ts +10 -0
- package/dist/voice/router.d.ts.map +1 -1
- package/dist/voice/router.js +39 -20
- package/dist/voice/router.js.map +1 -1
- package/dist/voice/types.d.ts +5 -2
- package/dist/voice/types.d.ts.map +1 -1
- package/dist/voice/types.js.map +1 -1
- package/dist/workflow/phase_inference.d.ts +56 -0
- package/dist/workflow/phase_inference.d.ts.map +1 -0
- package/dist/workflow/phase_inference.js +107 -0
- package/dist/workflow/phase_inference.js.map +1 -0
- package/dist/workflow/state.d.ts +238 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +213 -0
- package/dist/workflow/state.js.map +1 -0
- package/docs/SQ.md +1397 -0
- package/docs/SQ_BY_STEP.yaml +147 -0
- package/docs/doctrine/accessibility.md +78 -0
- package/docs/doctrine/agent-orchestrator.md +76 -0
- package/docs/doctrine/byok-vs-managed.md +81 -0
- package/docs/doctrine/cost-router-escalation.md +73 -0
- package/docs/doctrine/explain-results.md +90 -0
- package/docs/doctrine/g-doc.md +46 -0
- package/docs/doctrine/gates.md +21 -0
- package/docs/doctrine/lessons-workflow.md +68 -0
- package/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
- package/docs/doctrine/nac3-attrs.md +23 -0
- package/docs/doctrine/office-tools.md +102 -0
- package/docs/doctrine/pizarron.md +52 -0
- package/docs/doctrine/r8-modal.md +60 -0
- package/docs/doctrine/safety-refusals.md +73 -0
- package/docs/doctrine/verb-composition.md +68 -0
- package/docs/doctrine/workflow-phases.md +108 -0
- package/docs/doctrine/workflow.md +58 -0
- package/docs/doctrine/yf-commands.md +49 -0
- package/package.json +20 -14
- package/src/i18n/catalogs/ar.json +55 -10
- package/src/i18n/catalogs/de.json +55 -10
- package/src/i18n/catalogs/en.json +66 -1
- package/src/i18n/catalogs/es.json +66 -1
- package/src/i18n/catalogs/fr.json +55 -10
- package/src/i18n/catalogs/hi.json +55 -10
- package/src/i18n/catalogs/it.json +55 -10
- package/src/i18n/catalogs/ja.json +55 -10
- package/src/i18n/catalogs/pt.json +55 -10
- package/src/i18n/catalogs/zh.json +55 -10
- package/templates/nextjs-app/README.md +48 -0
- package/templates/nextjs-app/next.config.js +8 -0
- package/templates/nextjs-app/package.json +33 -0
- package/templates/nextjs-app/src/app/globals.css +43 -0
- package/templates/nextjs-app/src/app/layout.tsx +29 -0
- package/templates/nextjs-app/src/app/page.tsx +63 -0
- package/templates/nextjs-app/src/nac/manifest.ts +36 -0
- package/templates/nextjs-app/tsconfig.json +21 -0
- package/templates/nextjs-app/yujin.forge.json +11 -0
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brain matrix QA -- runner.
|
|
3
|
+
*
|
|
4
|
+
* Execution flow per (scenario, brain):
|
|
5
|
+
* 1. Build a synthetic system prompt: real Forge static prompt +
|
|
6
|
+
* manifest stub + injected workflow_state + injected graph
|
|
7
|
+
* section (when scenario.setup declares them).
|
|
8
|
+
* 2. Build the message history from pre_history + scenario.turns
|
|
9
|
+
* where kind='user_says'.
|
|
10
|
+
* 3. Call the brain's chat() with the prompt + history + Forge
|
|
11
|
+
* tools (just nac3_invoke -- the LLM is supposed to use it for
|
|
12
|
+
* everything).
|
|
13
|
+
* 4. Capture the brain's response: text + tool_calls + tokens.
|
|
14
|
+
* 5. For multi-turn flows (scenario.turns with kind='tool_result'
|
|
15
|
+
* and follow-up user_says), inject the mocked tool_result as a
|
|
16
|
+
* tool_result message, then call again.
|
|
17
|
+
* 6. Stop when the scenario's turn list is exhausted OR the LLM
|
|
18
|
+
* yields no more tool calls AND the scenario has no further
|
|
19
|
+
* user_says.
|
|
20
|
+
* 7. Evaluate invariants against the captured ScenarioRun.
|
|
21
|
+
*
|
|
22
|
+
* The runner DOES NOT actually execute the LLM's tool calls. It
|
|
23
|
+
* just observes them. This is a test harness for "what would the
|
|
24
|
+
* LLM do", not a live exec.
|
|
25
|
+
*
|
|
26
|
+
* ASCII-only.
|
|
27
|
+
*/
|
|
28
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
29
|
+
import path from 'node:path';
|
|
30
|
+
import { fileURLToPath } from 'node:url';
|
|
31
|
+
import { VERSION } from '../../version.js';
|
|
32
|
+
import { buildManifestStub, buildManifestEager } from '../../nac3/manifest_lazy.js';
|
|
33
|
+
import { FORGE_TOOL_SPECS } from '../../chat/tools.js';
|
|
34
|
+
import { renderWorkflowSection } from '../../chat/workflow_inject.js';
|
|
35
|
+
import { buildSystemPrompt } from '../../chat/server.js';
|
|
36
|
+
import { evaluateAll } from './invariants.js';
|
|
37
|
+
import { makeFakeBrain } from './fake_brain.js';
|
|
38
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
39
|
+
const __dirname = path.dirname(__filename);
|
|
40
|
+
const FIXTURES_DIR = path.join(__dirname, 'fixtures');
|
|
41
|
+
const BRAINS_PATH = path.join(__dirname, 'brains.json');
|
|
42
|
+
/* ====================== synthetic tool_result ====================== *
|
|
43
|
+
* alpha.59z.42 -- when the brain invokes yujin.doctrine.discover, the
|
|
44
|
+
* harness reads the actual doctrine markdown from
|
|
45
|
+
* dist/docs/doctrine/<slug>.md (the same files the production
|
|
46
|
+
* runtime serves) and returns it as the synthetic tool_result. The
|
|
47
|
+
* brain can then read the real content + compose a faithful reply.
|
|
48
|
+
*
|
|
49
|
+
* Without this, every doctrine_discover_* scenario received a
|
|
50
|
+
* {fake:true} stub + the brain improvised invented command names
|
|
51
|
+
* (chronic 100% fail). */
|
|
52
|
+
const DOCTRINE_DIRS = [
|
|
53
|
+
path.join(__dirname, '..', '..', '..', 'dist', 'docs', 'doctrine'),
|
|
54
|
+
path.join(__dirname, '..', '..', '..', 'docs', 'doctrine'),
|
|
55
|
+
];
|
|
56
|
+
async function loadDoctrineSlug(slug) {
|
|
57
|
+
const safeSlug = slug.replace(/[^a-z0-9_-]/gi, '');
|
|
58
|
+
if (!safeSlug)
|
|
59
|
+
return null;
|
|
60
|
+
for (const dir of DOCTRINE_DIRS) {
|
|
61
|
+
try {
|
|
62
|
+
const p = path.join(dir, safeSlug + '.md');
|
|
63
|
+
const md = await readFile(p, 'utf-8');
|
|
64
|
+
return md;
|
|
65
|
+
}
|
|
66
|
+
catch { /* try next dir */ }
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
async function synthesiseToolResult(lastTurn, scenarioHarnessResponses) {
|
|
71
|
+
const calls = lastTurn?.tool_calls ?? [];
|
|
72
|
+
/* The brain wraps every verb call through nac3_invoke -- pull the
|
|
73
|
+
* inner verb_id out. */
|
|
74
|
+
for (const call of calls) {
|
|
75
|
+
const inner = call.args;
|
|
76
|
+
if (!inner?.verb_id)
|
|
77
|
+
continue;
|
|
78
|
+
/* alpha.59z.45 -- scenario-declared harness_responses take
|
|
79
|
+
* precedence. Lets each scenario precisely script what a
|
|
80
|
+
* given verb returns (e.g. a public manifest for
|
|
81
|
+
* yujin.manifest.read). */
|
|
82
|
+
if (scenarioHarnessResponses && inner.verb_id in scenarioHarnessResponses) {
|
|
83
|
+
return scenarioHarnessResponses[inner.verb_id];
|
|
84
|
+
}
|
|
85
|
+
if (inner.verb_id === 'yujin.doctrine.discover') {
|
|
86
|
+
const slugsRaw = inner.args?.slugs;
|
|
87
|
+
const slugs = Array.isArray(slugsRaw)
|
|
88
|
+
? slugsRaw.filter((s) => typeof s === 'string')
|
|
89
|
+
: [];
|
|
90
|
+
const doctrines = {};
|
|
91
|
+
for (const s of slugs) {
|
|
92
|
+
const md = await loadDoctrineSlug(s);
|
|
93
|
+
doctrines[s] = md ?? '(doctrine not found)';
|
|
94
|
+
}
|
|
95
|
+
return { ok: true, doctrines };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { ok: true, fake: true };
|
|
99
|
+
}
|
|
100
|
+
/* ====================== fixture loading ====================== */
|
|
101
|
+
export async function loadScenarios(filter, includeSkipDefault = false) {
|
|
102
|
+
const files = (await readdir(FIXTURES_DIR)).filter((f) => f.endsWith('.json'));
|
|
103
|
+
const out = [];
|
|
104
|
+
for (const f of files) {
|
|
105
|
+
const raw = await readFile(path.join(FIXTURES_DIR, f), 'utf-8');
|
|
106
|
+
const obj = JSON.parse(raw);
|
|
107
|
+
if (filter && filter.length > 0) {
|
|
108
|
+
if (!filter.includes(obj.id))
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
else if (!includeSkipDefault && obj.skip_default) {
|
|
112
|
+
/* Skip A/B-only scenarios in default matrix runs. They are
|
|
113
|
+
* meant to be exercised explicitly via runABMatrix. */
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
out.push(obj);
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
export async function loadBrains(filter, includeSkipDefault = false) {
|
|
121
|
+
const raw = await readFile(BRAINS_PATH, 'utf-8');
|
|
122
|
+
const obj = JSON.parse(raw);
|
|
123
|
+
let brains = obj.brains;
|
|
124
|
+
if (filter && filter.length > 0)
|
|
125
|
+
brains = brains.filter((b) => filter.includes(b.id));
|
|
126
|
+
if (!includeSkipDefault)
|
|
127
|
+
brains = brains.filter((b) => !b.skip_default);
|
|
128
|
+
return brains;
|
|
129
|
+
}
|
|
130
|
+
/* ====================== prompt assembly ====================== */
|
|
131
|
+
const TINY_SYSTEM_PROMPT_PREFIX = [
|
|
132
|
+
'You are Yujin Forge -- a voice-first NAC-3 React development framework.',
|
|
133
|
+
'',
|
|
134
|
+
'RULES:',
|
|
135
|
+
' R1. Pick verb_id from the manifest below. If no verb matches, REPLY in chat "No tengo verbo NAC3 para X" -- do NOT improvise.',
|
|
136
|
+
' R2. For complex verbs (enum values, length limits), call yujin.nac3.discover-schemas FIRST.',
|
|
137
|
+
' R3. policy D=destructive A=approval-required => DO NOT also ask "confirmas?" in chat (R8 -- modal is the question).',
|
|
138
|
+
' R5. Past-tense only after a successful invoke.',
|
|
139
|
+
'',
|
|
140
|
+
].join('\n');
|
|
141
|
+
async function buildSystemPromptForScenario(scenario, brain) {
|
|
142
|
+
/* alpha.59z.5 -- use the REAL Forge buildSystemPrompt so the
|
|
143
|
+
* scenario evaluates the LLM against the prompt that runs in
|
|
144
|
+
* production. The previous TINY_SYSTEM_PROMPT_PREFIX was a
|
|
145
|
+
* 6-line stub that omitted G-DOC, R7/R8, Pizarron doctrine,
|
|
146
|
+
* BYOK, workflow state machine -- the eco brains predictably
|
|
147
|
+
* invented verbs because they saw R1 alone, no Pizarron flow
|
|
148
|
+
* to constrain them. */
|
|
149
|
+
const ctx = {
|
|
150
|
+
projectName: 'brain-matrix',
|
|
151
|
+
projectRoot: process.cwd(),
|
|
152
|
+
projectSlug: 'brain-matrix',
|
|
153
|
+
aborter: new AbortController(),
|
|
154
|
+
};
|
|
155
|
+
const parts = [buildSystemPrompt(ctx)];
|
|
156
|
+
void TINY_SYSTEM_PROMPT_PREFIX; /* legacy, kept for downstream refs */
|
|
157
|
+
/* alpha.59z.6 F5 -- eco brains tend to over-elaborate and
|
|
158
|
+
* exhaust the per-turn round cap. A short reminder up front
|
|
159
|
+
* keeps them concise. Frontier brains do not need it (they
|
|
160
|
+
* pace themselves). */
|
|
161
|
+
if (brain && brain.tier === 'eco') {
|
|
162
|
+
parts.push('');
|
|
163
|
+
parts.push('[ECO TIER BUDGET REMINDER] You have a limited round budget per turn. Be concise: one or two short paragraphs. Invoke a tool when needed, then summarise its outcome in one sentence. Do NOT enumerate options, do NOT list questions; pick the next step and act. Skip headers + emojis + tables.');
|
|
164
|
+
}
|
|
165
|
+
/* alpha.59z.23 -- inject synthetic GLOBAL LEARNINGS section
|
|
166
|
+
* when scenario.setup declares lessons. Mirrors the shape of
|
|
167
|
+
* buildGlobalLearningsSection() in production so scenarios that
|
|
168
|
+
* validate respect-of-lesson behaviour see the same prompt the
|
|
169
|
+
* real Forge handleChat would build. Decoupled from worker D1
|
|
170
|
+
* state on purpose: brain matrix runs are deterministic. */
|
|
171
|
+
if (scenario.setup.injected_global_learnings
|
|
172
|
+
&& scenario.setup.injected_global_learnings.length > 0) {
|
|
173
|
+
parts.push('=================================================================');
|
|
174
|
+
parts.push('GLOBAL LEARNINGS (server-managed, promoted by admin)');
|
|
175
|
+
parts.push('=================================================================');
|
|
176
|
+
parts.push('');
|
|
177
|
+
parts.push('These rules are active for every Forge user. They came from');
|
|
178
|
+
parts.push('the brain matrix scenarios that validated each pattern.');
|
|
179
|
+
parts.push('');
|
|
180
|
+
for (const lesson of scenario.setup.injected_global_learnings) {
|
|
181
|
+
parts.push('* ' + lesson.slug + ': ' + lesson.rule_text);
|
|
182
|
+
}
|
|
183
|
+
parts.push('');
|
|
184
|
+
}
|
|
185
|
+
if (scenario.setup.workflow_state) {
|
|
186
|
+
/* Append the AUTHORITATIVE workflow state + SQ rules block. */
|
|
187
|
+
const wfText = renderWorkflowSection(scenario.setup.workflow_state, 'brain-matrix');
|
|
188
|
+
if (wfText) {
|
|
189
|
+
parts.push('', wfText);
|
|
190
|
+
const directRules = scenario.setup.workflow_state.active_sq_rules;
|
|
191
|
+
if (Array.isArray(directRules) && directRules.length > 0) {
|
|
192
|
+
try {
|
|
193
|
+
const { renderRulesBlockBySlugs } = await import('../../core/sq_resolver.js');
|
|
194
|
+
const slugs = directRules.filter((s) => typeof s === 'string');
|
|
195
|
+
const block = await renderRulesBlockBySlugs(slugs);
|
|
196
|
+
if (block)
|
|
197
|
+
parts.push('', block);
|
|
198
|
+
}
|
|
199
|
+
catch { /* swallow */ }
|
|
200
|
+
}
|
|
201
|
+
parts.push('');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (scenario.setup.graph_nodes && scenario.setup.graph_nodes.length > 0) {
|
|
205
|
+
parts.push('=== PROJECT KNOWLEDGE GRAPH ===');
|
|
206
|
+
for (const n of scenario.setup.graph_nodes) {
|
|
207
|
+
parts.push('- ' + n.kind + ':' + n.slug + (n.description ? ' -- ' + n.description : ''));
|
|
208
|
+
}
|
|
209
|
+
parts.push('');
|
|
210
|
+
}
|
|
211
|
+
/* alpha.59z.5 -- buildSystemPrompt already embeds the manifest
|
|
212
|
+
* stub. Skip the duplicate unless the scenario explicitly asks
|
|
213
|
+
* for eager mode (rare; promotion-A/B fixtures only). */
|
|
214
|
+
if (scenario.setup.manifest_mode === 'eager') {
|
|
215
|
+
parts.push('MANIFEST (eager override):');
|
|
216
|
+
parts.push(buildManifestEager());
|
|
217
|
+
}
|
|
218
|
+
/* alpha.59z.45 -- expose MCP-meta verbs when the scenario tests
|
|
219
|
+
* MCP flows. Default buildSystemPrompt filters them (Invariant
|
|
220
|
+
* 1 -- Forge without MCP behaves identically to pre-F101). */
|
|
221
|
+
if (scenario.setup.expose_mcp_verbs) {
|
|
222
|
+
parts.push('');
|
|
223
|
+
parts.push('MCP BRIDGE VERBS (active for this scenario):');
|
|
224
|
+
parts.push(buildManifestStub({ includeMcpVerbs: true }).split('\n')
|
|
225
|
+
.filter((line) => line.startsWith('yujin.mcp.'))
|
|
226
|
+
.join('\n'));
|
|
227
|
+
}
|
|
228
|
+
/* alpha.59z.45 -- ad-hoc extra system prompt section, useful for
|
|
229
|
+
* scenarios that test verbs not in the default lazy stub (e.g.
|
|
230
|
+
* backend tools app.* declared by adopter yujin.forge.json). */
|
|
231
|
+
if (scenario.setup.extra_system_prompt) {
|
|
232
|
+
parts.push('');
|
|
233
|
+
parts.push(scenario.setup.extra_system_prompt);
|
|
234
|
+
}
|
|
235
|
+
void buildManifestStub; /* keep import live -- used elsewhere */
|
|
236
|
+
return parts.join('\n');
|
|
237
|
+
}
|
|
238
|
+
/** Build the brain client. For fake brain reads the scenario's
|
|
239
|
+
* scripted responses. For real brains reads the env var with the
|
|
240
|
+
* same name as vault_slot. Returns null when key missing or
|
|
241
|
+
* provider unreachable. */
|
|
242
|
+
async function makeBrainClient(brain, scenario) {
|
|
243
|
+
const selection = {
|
|
244
|
+
tier: brain.tier,
|
|
245
|
+
provider: brain.provider,
|
|
246
|
+
model: brain.model,
|
|
247
|
+
api_key: null,
|
|
248
|
+
reason: 'brain-matrix run',
|
|
249
|
+
runtime_wired: true,
|
|
250
|
+
};
|
|
251
|
+
if (brain.provider === 'fake') {
|
|
252
|
+
const responses = scenario.fake_responses || [];
|
|
253
|
+
return { client: makeFakeBrain(selection, responses) };
|
|
254
|
+
}
|
|
255
|
+
/* Real brain: prefer env var with the same name as vault_slot
|
|
256
|
+
* (cheap path -- no Vault prompt, no key derivation). If the
|
|
257
|
+
* env var is unset, fall back to the encrypted Vault using the
|
|
258
|
+
* provider-canonical slot name. brains.json uses provider-SDK
|
|
259
|
+
* conventions (CLAUDE_API_KEY, GEMINI_API_KEY) which differ from
|
|
260
|
+
* the Forge Vault canonical slot names (anthropic_api_key,
|
|
261
|
+
* google_ai_key). Map them here so the QA harness can read both
|
|
262
|
+
* paths uniformly (alpha.59z.22 Decision 1c + alpha.59z.24 alias
|
|
263
|
+
* fix). */
|
|
264
|
+
const envKey = brain.vault_slot;
|
|
265
|
+
if (!envKey)
|
|
266
|
+
return { client: null, reason: 'no vault_slot configured' };
|
|
267
|
+
/* alpha.59z.47 -- also try common alternative env-var names. The
|
|
268
|
+
* user's .env may use the Forge Vault canonical name
|
|
269
|
+
* (ANTHROPIC_API_KEY, GOOGLE_AI_KEY) instead of the SDK-convention
|
|
270
|
+
* name (CLAUDE_API_KEY, GEMINI_API_KEY) that brains.json declares. */
|
|
271
|
+
const ENV_KEY_ALIASES = {
|
|
272
|
+
'CLAUDE_API_KEY': ['ANTHROPIC_API_KEY'],
|
|
273
|
+
'GEMINI_API_KEY': ['GOOGLE_AI_KEY', 'GOOGLE_API_KEY'],
|
|
274
|
+
'ANTHROPIC_API_KEY': ['CLAUDE_API_KEY'],
|
|
275
|
+
'GOOGLE_AI_KEY': ['GEMINI_API_KEY', 'GOOGLE_API_KEY'],
|
|
276
|
+
};
|
|
277
|
+
let apiKey = process.env[envKey];
|
|
278
|
+
if (!apiKey) {
|
|
279
|
+
for (const alt of ENV_KEY_ALIASES[envKey] || []) {
|
|
280
|
+
if (process.env[alt]) {
|
|
281
|
+
apiKey = process.env[alt];
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
let triedVaultSlot = null;
|
|
287
|
+
if (!apiKey) {
|
|
288
|
+
const VAULT_SLOT_ALIAS = {
|
|
289
|
+
'claude_api_key': 'anthropic_api_key',
|
|
290
|
+
'gemini_api_key': 'google_ai_key',
|
|
291
|
+
};
|
|
292
|
+
const lowerSlot = envKey.toLowerCase();
|
|
293
|
+
triedVaultSlot = VAULT_SLOT_ALIAS[lowerSlot] || lowerSlot;
|
|
294
|
+
try {
|
|
295
|
+
const { getKey } = await import('../../core/provider_keys.js');
|
|
296
|
+
apiKey = await getKey(triedVaultSlot);
|
|
297
|
+
}
|
|
298
|
+
catch { /* Vault unavailable -- treated same as missing */ }
|
|
299
|
+
}
|
|
300
|
+
if (!apiKey) {
|
|
301
|
+
const slotHint = triedVaultSlot ? ' + Vault slot ' + triedVaultSlot + ' empty' : '';
|
|
302
|
+
return { client: null, reason: 'env var ' + envKey + ' not set' + slotHint };
|
|
303
|
+
}
|
|
304
|
+
selection.api_key = apiKey;
|
|
305
|
+
const { makeUnifiedClient } = await import('../../llm/multi_provider_client.js');
|
|
306
|
+
const client = makeUnifiedClient(selection);
|
|
307
|
+
if (!client)
|
|
308
|
+
return { client: null, reason: 'provider not wired' };
|
|
309
|
+
return { client };
|
|
310
|
+
}
|
|
311
|
+
/* ====================== run a scenario against a brain ====================== */
|
|
312
|
+
/** alpha.59z.8 -- given the requested eco brain + the scenario's
|
|
313
|
+
* first user turn + the workflow state, returns either:
|
|
314
|
+
* - the same brain (no escalation triggered)
|
|
315
|
+
* - a frontier substitute brain (router escalated)
|
|
316
|
+
*
|
|
317
|
+
* Mirrors what production cost_router would do, so the matrix
|
|
318
|
+
* measures the SAME tier the user would actually see in panel.
|
|
319
|
+
* Frontier brains are never downgraded. */
|
|
320
|
+
async function applyCostRouterPreRoute(scenario, brain, brainsAll) {
|
|
321
|
+
/* Frontier brains pass through unchanged. */
|
|
322
|
+
if (brain.tier === 'frontier')
|
|
323
|
+
return { brain, escalated: false };
|
|
324
|
+
/* fake brain never escalates -- scripted responses bind to brain.id. */
|
|
325
|
+
if (brain.provider === 'fake')
|
|
326
|
+
return { brain, escalated: false };
|
|
327
|
+
/* Extract first user_says text. */
|
|
328
|
+
const firstUserTurn = scenario.turns.find((t) => t.kind === 'user_says');
|
|
329
|
+
const userText = firstUserTurn && firstUserTurn.kind === 'user_says' ? firstUserTurn.text : undefined;
|
|
330
|
+
const wf = scenario.setup.workflow_state;
|
|
331
|
+
const rules = Array.isArray(wf?.active_sq_rules) ? wf.active_sq_rules : undefined;
|
|
332
|
+
const { looksLikeRuleViolation, looksLikePhaseCrossover } = await import('../../core/cost_router.js');
|
|
333
|
+
let trigger = null;
|
|
334
|
+
if (rules && rules.length > 0) {
|
|
335
|
+
const v = looksLikeRuleViolation(userText);
|
|
336
|
+
if (v.hit)
|
|
337
|
+
trigger = 'sq_rule_defense[' + (v.pattern || '?') + ']';
|
|
338
|
+
}
|
|
339
|
+
if (!trigger) {
|
|
340
|
+
const p = looksLikePhaseCrossover(userText, undefined);
|
|
341
|
+
if (p.hit)
|
|
342
|
+
trigger = 'phase_crossover[' + (p.pattern || '?') + ']';
|
|
343
|
+
}
|
|
344
|
+
if (!trigger)
|
|
345
|
+
return { brain, escalated: false };
|
|
346
|
+
/* Pick a frontier substitute: prefer same provider, else first
|
|
347
|
+
* frontier brain available. */
|
|
348
|
+
const samePvFrontier = brainsAll.find((b) => b.tier === 'frontier' && b.provider === brain.provider && !b.skip_default);
|
|
349
|
+
const anyFrontier = brainsAll.find((b) => b.tier === 'frontier' && !b.skip_default);
|
|
350
|
+
const sub = samePvFrontier || anyFrontier;
|
|
351
|
+
if (!sub)
|
|
352
|
+
return { brain, escalated: false }; /* no frontier available, stay */
|
|
353
|
+
return { brain: sub, escalated: true, reason: trigger };
|
|
354
|
+
}
|
|
355
|
+
export async function runScenarioOnBrain(scenario, brain, opts = {}) {
|
|
356
|
+
const started_at = new Date().toISOString();
|
|
357
|
+
const t0 = Date.now();
|
|
358
|
+
/* alpha.59z.8 -- pre-route through cost_router if eco. The
|
|
359
|
+
* effective brain for THIS scenario may be a frontier
|
|
360
|
+
* substitute. The cell report tracks both the requested and
|
|
361
|
+
* effective brain_id so the matrix is faithful to production. */
|
|
362
|
+
let effectiveBrain = brain;
|
|
363
|
+
let routerNote;
|
|
364
|
+
if (opts.allBrains && opts.allBrains.length > 0) {
|
|
365
|
+
const pr = await applyCostRouterPreRoute(scenario, brain, opts.allBrains);
|
|
366
|
+
if (pr.escalated) {
|
|
367
|
+
effectiveBrain = pr.brain;
|
|
368
|
+
routerNote = 'router-escalated requested=' + brain.id + ' effective=' + pr.brain.id + ' reason=' + pr.reason;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
const cb = await makeBrainClient(effectiveBrain, scenario);
|
|
372
|
+
if (!cb.client) {
|
|
373
|
+
const run = {
|
|
374
|
+
scenario_id: scenario.id, brain_id: brain.id,
|
|
375
|
+
started_at, ended_at: new Date().toISOString(),
|
|
376
|
+
turns: [], total_tokens_in: 0, total_tokens_out: 0, total_ms: Date.now() - t0,
|
|
377
|
+
error: (routerNote ? routerNote + '; ' : '') + (cb.reason || 'unknown'),
|
|
378
|
+
};
|
|
379
|
+
return { run, invariants: [], pass: false };
|
|
380
|
+
}
|
|
381
|
+
const client = cb.client;
|
|
382
|
+
const system = await buildSystemPromptForScenario(scenario, effectiveBrain);
|
|
383
|
+
const messages = [];
|
|
384
|
+
for (const p of scenario.setup.pre_history || []) {
|
|
385
|
+
messages.push({ role: p.role, content: p.content });
|
|
386
|
+
}
|
|
387
|
+
const turns = [];
|
|
388
|
+
let tokensIn = 0;
|
|
389
|
+
let tokensOut = 0;
|
|
390
|
+
/** Walk the scenario.turns list. For each user_says, runs an
|
|
391
|
+
* internal mini-loop that mirrors the panel's SSE autonomous
|
|
392
|
+
* multi-step: chat() -> if tool_calls present, inject canned
|
|
393
|
+
* tool_result + chat() again -> stop when no tool_calls OR
|
|
394
|
+
* internal-round cap is hit. */
|
|
395
|
+
const MAX_INTERNAL_ROUNDS = 8;
|
|
396
|
+
async function singleChatTurn() {
|
|
397
|
+
const start = Date.now();
|
|
398
|
+
let resp;
|
|
399
|
+
try {
|
|
400
|
+
resp = await client.chat({
|
|
401
|
+
messages, system, maxTokens: 1024,
|
|
402
|
+
/* Real LLM brains need the tool catalogue or they
|
|
403
|
+
* generate pseudo-code text instead of real tool_use
|
|
404
|
+
* blocks. The fake brain ignores this field. */
|
|
405
|
+
tools: FORGE_TOOL_SPECS,
|
|
406
|
+
/* runTool stub: the harness OBSERVES tool calls without
|
|
407
|
+
* executing them. The stub returns a canned ok result so
|
|
408
|
+
* the chat client can complete its inner round (the
|
|
409
|
+
* toolRounds[] field will contain the captured calls).
|
|
410
|
+
* We cap maxToolRounds at 1 so the inner client does at
|
|
411
|
+
* most one round; our outer loop handles further turns
|
|
412
|
+
* through the scenario script. */
|
|
413
|
+
runTool: async (name, input) => {
|
|
414
|
+
/* Stash for the outer loop's tool_calls capture (the
|
|
415
|
+
* ToolRound shape carries input + output). */
|
|
416
|
+
void name;
|
|
417
|
+
void input;
|
|
418
|
+
return { result: { ok: true, fake: true, observed: true } };
|
|
419
|
+
},
|
|
420
|
+
/* 3 rounds default: tool_use -> result -> final reply.
|
|
421
|
+
* Scenarios can bump via scenario.max_tool_rounds for
|
|
422
|
+
* stateful flows where eco brains need 5+ rounds. */
|
|
423
|
+
maxToolRounds: scenario.max_tool_rounds ?? 3,
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
catch (err) {
|
|
427
|
+
throw err;
|
|
428
|
+
}
|
|
429
|
+
tokensIn += resp.tokensIn;
|
|
430
|
+
tokensOut += resp.tokensOut;
|
|
431
|
+
const tool_calls = (resp.toolRounds || []).map((r) => ({
|
|
432
|
+
name: r.tool || 'unknown',
|
|
433
|
+
args: (r.input || {}),
|
|
434
|
+
}));
|
|
435
|
+
turns.push({
|
|
436
|
+
index: turns.length,
|
|
437
|
+
text: resp.text,
|
|
438
|
+
tool_calls,
|
|
439
|
+
tokens_in: resp.tokensIn,
|
|
440
|
+
tokens_out: resp.tokensOut,
|
|
441
|
+
duration_ms: Date.now() - start,
|
|
442
|
+
});
|
|
443
|
+
messages.push({ role: 'assistant', content: resp.text });
|
|
444
|
+
return tool_calls.length > 0;
|
|
445
|
+
}
|
|
446
|
+
for (let i = 0; i < scenario.turns.length; i++) {
|
|
447
|
+
const t = scenario.turns[i];
|
|
448
|
+
if (t.kind === 'user_says') {
|
|
449
|
+
messages.push({ role: 'user', content: t.text });
|
|
450
|
+
try {
|
|
451
|
+
let hadTools = await singleChatTurn();
|
|
452
|
+
let internalRound = 0;
|
|
453
|
+
while (hadTools && internalRound < MAX_INTERNAL_ROUNDS) {
|
|
454
|
+
internalRound++;
|
|
455
|
+
/* Mock the tool result. If the next scenario.turn is a
|
|
456
|
+
* tool_result, consume it. Otherwise inject a canned
|
|
457
|
+
* {ok:true} so the LLM can continue. */
|
|
458
|
+
const next = scenario.turns[i + 1];
|
|
459
|
+
if (next && next.kind === 'tool_result') {
|
|
460
|
+
messages.push({
|
|
461
|
+
role: 'user',
|
|
462
|
+
content: '[tool_result' + (next.tool_name ? ':' + next.tool_name : '') + '] '
|
|
463
|
+
+ (next.is_error ? 'ERROR: ' : '')
|
|
464
|
+
+ (typeof next.result === 'string' ? next.result : JSON.stringify(next.result)),
|
|
465
|
+
});
|
|
466
|
+
i++;
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
/* alpha.59z.42 -- when the brain invoked
|
|
470
|
+
* yujin.doctrine.discover, read the actual doctrine
|
|
471
|
+
* markdown from dist/docs/doctrine/<slug>.md and
|
|
472
|
+
* return it as the tool_result. Otherwise the brain
|
|
473
|
+
* asked for the doctrine + got back a {fake:true}
|
|
474
|
+
* stub + improvised an answer with invented content
|
|
475
|
+
* (chronic-fail in doctrine_discover_* scenarios). */
|
|
476
|
+
const lastTurn = turns[turns.length - 1];
|
|
477
|
+
const synthResult = await synthesiseToolResult(lastTurn, scenario.setup.harness_responses);
|
|
478
|
+
messages.push({
|
|
479
|
+
role: 'user',
|
|
480
|
+
content: '[tool_result] ' + JSON.stringify(synthResult),
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
hadTools = await singleChatTurn();
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
catch (err) {
|
|
487
|
+
return {
|
|
488
|
+
run: {
|
|
489
|
+
scenario_id: scenario.id, brain_id: brain.id,
|
|
490
|
+
started_at, ended_at: new Date().toISOString(),
|
|
491
|
+
turns, total_tokens_in: tokensIn, total_tokens_out: tokensOut,
|
|
492
|
+
total_ms: Date.now() - t0,
|
|
493
|
+
error: err instanceof Error ? err.message : String(err),
|
|
494
|
+
},
|
|
495
|
+
invariants: [], pass: false,
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
else if (t.kind === 'tool_result') {
|
|
500
|
+
/* Standalone tool_result outside an active loop -- inject as
|
|
501
|
+
* synthetic user message. */
|
|
502
|
+
messages.push({
|
|
503
|
+
role: 'user',
|
|
504
|
+
content: '[tool_result' + (t.tool_name ? ':' + t.tool_name : '') + '] '
|
|
505
|
+
+ (t.is_error ? 'ERROR: ' : '')
|
|
506
|
+
+ (typeof t.result === 'string' ? t.result : JSON.stringify(t.result)),
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
const ended_at = new Date().toISOString();
|
|
511
|
+
const run = {
|
|
512
|
+
scenario_id: scenario.id, brain_id: brain.id,
|
|
513
|
+
started_at, ended_at,
|
|
514
|
+
turns,
|
|
515
|
+
total_tokens_in: tokensIn,
|
|
516
|
+
total_tokens_out: tokensOut,
|
|
517
|
+
total_ms: Date.now() - t0,
|
|
518
|
+
};
|
|
519
|
+
const invariants = evaluateAll(scenario.invariants, run);
|
|
520
|
+
const pass = invariants.every((r) => r.pass);
|
|
521
|
+
return { run, invariants, pass };
|
|
522
|
+
}
|
|
523
|
+
export async function runMatrix(opts = {}) {
|
|
524
|
+
const scenarios = await loadScenarios(opts.scenario_filter);
|
|
525
|
+
const brains = await loadBrains(opts.brain_filter, opts.include_skip_default);
|
|
526
|
+
/* alpha.59z.8 -- also load brains tagged skip_default so the
|
|
527
|
+
* router can pick Opus / GPT-4o as frontier substitutes when
|
|
528
|
+
* the requested eco brain triggers escalation. */
|
|
529
|
+
const brainsAll = await loadBrains(undefined, true);
|
|
530
|
+
const results = {};
|
|
531
|
+
const total = scenarios.length * brains.length;
|
|
532
|
+
let index = 0;
|
|
533
|
+
for (const s of scenarios) {
|
|
534
|
+
results[s.id] = {};
|
|
535
|
+
for (const b of brains) {
|
|
536
|
+
index++;
|
|
537
|
+
const r = await runScenarioOnBrain(s, b, { allBrains: brainsAll });
|
|
538
|
+
results[s.id][b.id] = r;
|
|
539
|
+
if (opts.onCellComplete) {
|
|
540
|
+
opts.onCellComplete({
|
|
541
|
+
index, total,
|
|
542
|
+
scenario_id: s.id,
|
|
543
|
+
brain_id: b.id,
|
|
544
|
+
pass: r.pass && !r.run.error,
|
|
545
|
+
error: r.run.error,
|
|
546
|
+
duration_ms: r.run.total_ms,
|
|
547
|
+
tokens_in: r.run.total_tokens_in,
|
|
548
|
+
tokens_out: r.run.total_tokens_out,
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
return {
|
|
554
|
+
generated_at: new Date().toISOString(),
|
|
555
|
+
forge_version: VERSION,
|
|
556
|
+
scenarios: scenarios.map((s) => ({ id: s.id, description: s.description })),
|
|
557
|
+
brains,
|
|
558
|
+
results,
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/qa/brain_matrix/runner.ts"],"names":[],"mappings":"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"}
|