@nac3/forge-cli 0.2.0-alpha.5 → 0.2.0-alpha.59z.118
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 +5815 -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,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQ rules resolver (alpha.59y.3).
|
|
3
|
+
*
|
|
4
|
+
* Given the current workflow step, returns the subset of SQ rules
|
|
5
|
+
* that apply, with their one-line title from docs/SQ.md.
|
|
6
|
+
*
|
|
7
|
+
* Source of truth:
|
|
8
|
+
* docs/SQ_BY_STEP.yaml -- manual matrix (step -> rule_slugs)
|
|
9
|
+
* docs/SQ.md -- rule titles (parsed from ### headings)
|
|
10
|
+
*
|
|
11
|
+
* Output (renderActiveRulesBlock) goes into the workflow inject
|
|
12
|
+
* block so the LLM sees ONLY the rules that matter at the current
|
|
13
|
+
* step + the always-active cross-cutting rules. Keeps the prompt
|
|
14
|
+
* compact + relevant.
|
|
15
|
+
*
|
|
16
|
+
* ASCII-only.
|
|
17
|
+
*/
|
|
18
|
+
import { promises as fs } from 'node:fs';
|
|
19
|
+
import path from 'node:path';
|
|
20
|
+
import { fileURLToPath } from 'node:url';
|
|
21
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const __dirname = path.dirname(__filename);
|
|
23
|
+
/** docs/ lives at repo root; dist files run from dist/core; tsx
|
|
24
|
+
* runs from src/core. Walk up until we find docs/SQ.md. */
|
|
25
|
+
function resolveDocsDir() {
|
|
26
|
+
let cur = __dirname;
|
|
27
|
+
for (let i = 0; i < 8; i++) {
|
|
28
|
+
const candidate = path.join(cur, 'docs', 'SQ.md');
|
|
29
|
+
/* fs.existsSync would be nice but we are async; instead we
|
|
30
|
+
* hop levels and let readFile fail later if not found. */
|
|
31
|
+
if (cur === path.parse(cur).root)
|
|
32
|
+
break;
|
|
33
|
+
cur = path.dirname(cur);
|
|
34
|
+
}
|
|
35
|
+
/* Fallback: cwd. */
|
|
36
|
+
return path.resolve(process.cwd(), 'docs');
|
|
37
|
+
}
|
|
38
|
+
const DOCS_DIR_HINTS = [
|
|
39
|
+
/* dist/core -> ../../docs (repo root) when running from source repo */
|
|
40
|
+
path.resolve(__dirname, '..', '..', 'docs'),
|
|
41
|
+
/* dist/core -> ../docs (when copy_qa_assets put docs alongside core) */
|
|
42
|
+
path.resolve(__dirname, '..', 'docs'),
|
|
43
|
+
/* src/core -> ../../docs */
|
|
44
|
+
path.resolve(__dirname, '..', '..', 'docs'),
|
|
45
|
+
/* cwd / docs */
|
|
46
|
+
path.resolve(process.cwd(), 'docs'),
|
|
47
|
+
];
|
|
48
|
+
async function readDoc(name) {
|
|
49
|
+
for (const dir of DOCS_DIR_HINTS) {
|
|
50
|
+
try {
|
|
51
|
+
const p = path.join(dir, name);
|
|
52
|
+
const s = await fs.readFile(p, 'utf-8');
|
|
53
|
+
return s;
|
|
54
|
+
}
|
|
55
|
+
catch { /* try next */ }
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
let _yamlCache = null;
|
|
60
|
+
let _titlesCache = null;
|
|
61
|
+
/** Parse our limited YAML subset (top-level keys with arrays of
|
|
62
|
+
* strings). We control the file, so no need for a real YAML lib.
|
|
63
|
+
* Lines starting with '#' are comments. */
|
|
64
|
+
function parseYaml(text) {
|
|
65
|
+
const out = {};
|
|
66
|
+
let currentKey = null;
|
|
67
|
+
let currentArr = [];
|
|
68
|
+
for (const rawLine of text.split(/\r?\n/)) {
|
|
69
|
+
const line = rawLine.replace(/\r/g, '');
|
|
70
|
+
/* Skip blank + comments. */
|
|
71
|
+
if (!line.trim() || line.trim().startsWith('#'))
|
|
72
|
+
continue;
|
|
73
|
+
/* Top-level key (no indent): `name:` */
|
|
74
|
+
if (/^[a-zA-Z0-9_]+:/.test(line)) {
|
|
75
|
+
if (currentKey)
|
|
76
|
+
out[currentKey] = currentArr;
|
|
77
|
+
currentKey = line.split(':')[0].trim();
|
|
78
|
+
currentArr = [];
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
/* Array entry: ` - "0.1"` */
|
|
82
|
+
const m = line.match(/^\s*-\s*"?([^"#]+)"?/);
|
|
83
|
+
if (m && currentKey) {
|
|
84
|
+
const val = m[1].trim();
|
|
85
|
+
if (val)
|
|
86
|
+
currentArr.push(val);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (currentKey)
|
|
90
|
+
out[currentKey] = currentArr;
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
/** Parse `### N.N Title` headings from SQ.md, returns slug->title map. */
|
|
94
|
+
function parseSqTitles(text) {
|
|
95
|
+
const m = new Map();
|
|
96
|
+
for (const line of text.split(/\r?\n/)) {
|
|
97
|
+
/* Match either `### 0.1 Title` or `### 14 Title` */
|
|
98
|
+
const r = line.match(/^###\s+(\d+(?:\.\d+)?)\s+(.+?)\s*$/);
|
|
99
|
+
if (r)
|
|
100
|
+
m.set(r[1], r[2].trim());
|
|
101
|
+
/* Also catch `## N. Title` (top-level section names). */
|
|
102
|
+
const r2 = line.match(/^##\s+(\d+)\.\s+(.+?)\s*$/);
|
|
103
|
+
if (r2)
|
|
104
|
+
m.set(r2[1], r2[2].trim());
|
|
105
|
+
}
|
|
106
|
+
return m;
|
|
107
|
+
}
|
|
108
|
+
/** alpha.59z.42 -- parse `G<N>: Title` lines from docs/doctrine/gates.md.
|
|
109
|
+
* Returns slug -> title (e.g. "G2" -> "No minimum brain (LLM) key in vault").
|
|
110
|
+
* The scenario fixtures use richer slugs like "G2-vault-min-keys" which
|
|
111
|
+
* also resolve here via the normaliseGateSlug step. */
|
|
112
|
+
function parseGateTitles(text) {
|
|
113
|
+
const m = new Map();
|
|
114
|
+
for (const line of text.split(/\r?\n/)) {
|
|
115
|
+
const r = line.match(/^(G\d+):\s+(.+?)\s*$/);
|
|
116
|
+
if (r)
|
|
117
|
+
m.set(r[1], r[2].trim());
|
|
118
|
+
}
|
|
119
|
+
return m;
|
|
120
|
+
}
|
|
121
|
+
/** Strip the descriptive suffix from gate slugs: "G2-vault-min-keys" -> "G2".
|
|
122
|
+
* Non-gate slugs (purely numeric SQ rules) are returned unchanged. */
|
|
123
|
+
function normaliseGateSlug(slug) {
|
|
124
|
+
const m = slug.match(/^(G\d+)(?:[-_].*)?$/);
|
|
125
|
+
return m ? m[1] : slug;
|
|
126
|
+
}
|
|
127
|
+
async function loadYaml() {
|
|
128
|
+
if (_yamlCache)
|
|
129
|
+
return _yamlCache;
|
|
130
|
+
const t = await readDoc('SQ_BY_STEP.yaml');
|
|
131
|
+
if (!t) {
|
|
132
|
+
_yamlCache = {};
|
|
133
|
+
return _yamlCache;
|
|
134
|
+
}
|
|
135
|
+
_yamlCache = parseYaml(t);
|
|
136
|
+
return _yamlCache;
|
|
137
|
+
}
|
|
138
|
+
async function loadTitles() {
|
|
139
|
+
if (_titlesCache)
|
|
140
|
+
return _titlesCache;
|
|
141
|
+
const t = await readDoc('SQ.md');
|
|
142
|
+
const m = t ? parseSqTitles(t) : new Map();
|
|
143
|
+
/* alpha.59z.42 -- merge gate titles from doctrine/gates.md so
|
|
144
|
+
* active_sq_rules entries like "G2-vault-min-keys" resolve to
|
|
145
|
+
* the gate description. Gates are part of the same "rule
|
|
146
|
+
* enforcement at this step" surface from the brain's POV. */
|
|
147
|
+
const gates = await readDoc(path.join('doctrine', 'gates.md'));
|
|
148
|
+
if (gates) {
|
|
149
|
+
const gateTitles = parseGateTitles(gates);
|
|
150
|
+
for (const [k, v] of gateTitles.entries())
|
|
151
|
+
m.set(k, v);
|
|
152
|
+
}
|
|
153
|
+
_titlesCache = m;
|
|
154
|
+
return _titlesCache;
|
|
155
|
+
}
|
|
156
|
+
/** Force-clear caches. Used by tests. */
|
|
157
|
+
export function _clearSqResolverCaches() {
|
|
158
|
+
_yamlCache = null;
|
|
159
|
+
_titlesCache = null;
|
|
160
|
+
}
|
|
161
|
+
/** Canonicalise a step descriptor to the YAML key. Accepts:
|
|
162
|
+
* - 'step_15_block_dev' (already canonical)
|
|
163
|
+
* - 15 (number; we resolve by scanning yaml keys starting with `step_15_`)
|
|
164
|
+
* - 'phase_v' (returns null -- not granular enough)
|
|
165
|
+
*/
|
|
166
|
+
function canonicalStepKey(yaml, descriptor) {
|
|
167
|
+
if (typeof descriptor === 'string' && descriptor.startsWith('step_')) {
|
|
168
|
+
return descriptor in yaml ? descriptor : null;
|
|
169
|
+
}
|
|
170
|
+
if (typeof descriptor === 'number') {
|
|
171
|
+
const prefix = 'step_' + descriptor + '_';
|
|
172
|
+
for (const k of Object.keys(yaml)) {
|
|
173
|
+
if (k.startsWith(prefix))
|
|
174
|
+
return k;
|
|
175
|
+
}
|
|
176
|
+
/* Also try plain "step_<N>" without slug. */
|
|
177
|
+
return 'step_' + descriptor in yaml ? 'step_' + descriptor : null;
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
/** Return the active SQ rule slugs for a given step, merged with
|
|
182
|
+
* the always-active cross-cutting set. Deduped. */
|
|
183
|
+
export async function activeRulesForStep(stepDescriptor) {
|
|
184
|
+
const yaml = await loadYaml();
|
|
185
|
+
const cross = yaml['cross_cutting'] || [];
|
|
186
|
+
if (stepDescriptor === null || stepDescriptor === undefined) {
|
|
187
|
+
return cross.slice();
|
|
188
|
+
}
|
|
189
|
+
const key = canonicalStepKey(yaml, stepDescriptor);
|
|
190
|
+
const stepRules = key ? (yaml[key] || []) : [];
|
|
191
|
+
const merged = new Set([...cross, ...stepRules]);
|
|
192
|
+
return Array.from(merged);
|
|
193
|
+
}
|
|
194
|
+
/** Render a compact "ACTIVE SQ RULES" block for the system prompt.
|
|
195
|
+
* Format: `SQ <slug> <title>` one per line. Returns empty when
|
|
196
|
+
* no rules apply (e.g., yaml missing). */
|
|
197
|
+
export async function renderActiveRulesBlock(stepDescriptor) {
|
|
198
|
+
const slugs = await activeRulesForStep(stepDescriptor);
|
|
199
|
+
return renderRulesBlockBySlugs(slugs);
|
|
200
|
+
}
|
|
201
|
+
/** Render the ACTIVE SQ RULES block from an explicit slug list.
|
|
202
|
+
* Used when the workflow state declares `active_sq_rules` directly
|
|
203
|
+
* (alpha.59z.5 F1 -- skip the step inference path). */
|
|
204
|
+
export async function renderRulesBlockBySlugs(slugs) {
|
|
205
|
+
if (slugs.length === 0)
|
|
206
|
+
return '';
|
|
207
|
+
const titles = await loadTitles();
|
|
208
|
+
const lines = [];
|
|
209
|
+
lines.push('ACTIVE SQ RULES (subset of docs/SQ.md) -- ENFORCE actively:');
|
|
210
|
+
for (const slug of slugs) {
|
|
211
|
+
/* alpha.59z.42 -- accept rich gate slugs like
|
|
212
|
+
* "G2-vault-min-keys" + resolve to the base gate description
|
|
213
|
+
* from docs/doctrine/gates.md. SQ rules (numeric slugs) pass
|
|
214
|
+
* through unchanged. The `[GATE]` marker is appended inline
|
|
215
|
+
* so the brain treats it as a hard block while the existing
|
|
216
|
+
* "SQ <slug>" prefix stays stable for tests + consumers. */
|
|
217
|
+
const lookup = normaliseGateSlug(slug);
|
|
218
|
+
const title = titles.get(lookup) || '(no title found)';
|
|
219
|
+
const gateMarker = lookup.startsWith('G') ? ' [GATE -- hard block]' : '';
|
|
220
|
+
lines.push('SQ ' + lookup.padEnd(5) + ' ' + title + gateMarker);
|
|
221
|
+
}
|
|
222
|
+
lines.push('');
|
|
223
|
+
lines.push('Enforcement: these rules are AUTHORITATIVE for this turn.');
|
|
224
|
+
lines.push('If the user asks to violate one (skip tests, ignore docs,');
|
|
225
|
+
lines.push('paste secrets, advance past a [GATE], etc), you MUST refuse +');
|
|
226
|
+
lines.push('cite the rule by its SQ number + explain the cost briefly.');
|
|
227
|
+
lines.push('Do NOT simply comply -- the user expects you to defend the rules.');
|
|
228
|
+
return lines.join('\n');
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=sq_resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sq_resolver.js","sourceRoot":"","sources":["../../src/core/sq_resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F104 -- Truncation detector.
|
|
3
|
+
*
|
|
4
|
+
* Detects when an LLM response was cut off by the max_tokens cap.
|
|
5
|
+
* Pablo's insight 2026-06-03: instead of trusting the provider's
|
|
6
|
+
* stop_reason field (which varies in shape across Anthropic /
|
|
7
|
+
* OpenAI / Google / xAI / Mistral / DeepSeek / Cohere), compare
|
|
8
|
+
* the reported output_tokens against the requested max_tokens
|
|
9
|
+
* with a small safety margin. If output_tokens >= max_tokens -
|
|
10
|
+
* MARGIN, treat the response as truncated.
|
|
11
|
+
*
|
|
12
|
+
* Rationale:
|
|
13
|
+
* - Provider-agnostic: every provider reports output_tokens
|
|
14
|
+
* (or input_tokens we can derive output from). stop_reason
|
|
15
|
+
* names + values differ.
|
|
16
|
+
* - Robust: simple arithmetic, no string parsing.
|
|
17
|
+
* - Conservative: we use a small margin to catch boundary
|
|
18
|
+
* cases (e.g. response landed at 8190 of 8192 -- almost
|
|
19
|
+
* certainly truncated even if the model finished a sentence
|
|
20
|
+
* by chance).
|
|
21
|
+
*
|
|
22
|
+
* ASCII-only.
|
|
23
|
+
*/
|
|
24
|
+
/** Default margin: how close to max_tokens counts as truncation.
|
|
25
|
+
* A response within 32 tokens of the cap is treated as truncated.
|
|
26
|
+
* Tuned to catch boundary cases without false positives on
|
|
27
|
+
* responses that legitimately end near the cap. */
|
|
28
|
+
export declare const TRUNCATION_MARGIN_TOKENS = 32;
|
|
29
|
+
export interface TruncationDetection {
|
|
30
|
+
/** True if the response is treated as truncated. */
|
|
31
|
+
truncated: boolean;
|
|
32
|
+
/** Reason text for diagnostics. Empty if not truncated. */
|
|
33
|
+
reason: string;
|
|
34
|
+
/** The output tokens the provider reported. */
|
|
35
|
+
output_tokens: number;
|
|
36
|
+
/** The max_tokens limit the caller requested. */
|
|
37
|
+
max_tokens: number;
|
|
38
|
+
/** How many tokens away from the cap (max_tokens - output_tokens). */
|
|
39
|
+
margin: number;
|
|
40
|
+
}
|
|
41
|
+
/** Inspect a response. Returns {truncated: true, ...} when the
|
|
42
|
+
* output_tokens are within MARGIN of max_tokens, OR when the
|
|
43
|
+
* provider's stop_reason explicitly says max_tokens (as a
|
|
44
|
+
* secondary signal -- the arithmetic check is primary).
|
|
45
|
+
*
|
|
46
|
+
* Both args are required. If the caller does not know
|
|
47
|
+
* max_tokens (e.g. a streaming response from a provider that
|
|
48
|
+
* refused to honour the cap), pass 0 and we return
|
|
49
|
+
* {truncated: false} -- we cannot detect without it. */
|
|
50
|
+
export declare function detectTruncation(opts: {
|
|
51
|
+
output_tokens: number;
|
|
52
|
+
max_tokens: number;
|
|
53
|
+
stop_reason?: string;
|
|
54
|
+
margin?: number;
|
|
55
|
+
}): TruncationDetection;
|
|
56
|
+
/** Helper to format the truncation banner appended to user-visible
|
|
57
|
+
* responses. Returns empty string if not truncated.
|
|
58
|
+
*
|
|
59
|
+
* The banner is intentionally short -- it does NOT include the
|
|
60
|
+
* full ForgeError block; the renderer wires that separately via
|
|
61
|
+
* renderForgeError(E_RESPONSE_TRUNCATED, {...}). This helper is
|
|
62
|
+
* for the trailing inline note.
|
|
63
|
+
*
|
|
64
|
+
* alpha.59z.15 -- localised via i18n. The banner text comes from
|
|
65
|
+
* `error.response_truncated.banner` in src/i18n/catalogs/*.json
|
|
66
|
+
* with {max} and {suggested} substituted in. */
|
|
67
|
+
export declare function truncationBanner(d: TruncationDetection, lang?: import('../i18n/index.js').SupportedLanguage): Promise<string>;
|
|
68
|
+
//# sourceMappingURL=truncation_detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncation_detector.d.ts","sourceRoot":"","sources":["../../src/core/truncation_detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;oDAGoD;AACpD,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;yDAQyD;AACzD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,mBAAmB,CA4DtB;AAED;;;;;;;;;;iDAUiD;AACjD,wBAAsB,gBAAgB,CACpC,CAAC,EAAE,mBAAmB,EACtB,IAAI,CAAC,EAAE,OAAO,kBAAkB,EAAE,iBAAiB,GAClD,OAAO,CAAC,MAAM,CAAC,CAQjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F104 -- Truncation detector.
|
|
3
|
+
*
|
|
4
|
+
* Detects when an LLM response was cut off by the max_tokens cap.
|
|
5
|
+
* Pablo's insight 2026-06-03: instead of trusting the provider's
|
|
6
|
+
* stop_reason field (which varies in shape across Anthropic /
|
|
7
|
+
* OpenAI / Google / xAI / Mistral / DeepSeek / Cohere), compare
|
|
8
|
+
* the reported output_tokens against the requested max_tokens
|
|
9
|
+
* with a small safety margin. If output_tokens >= max_tokens -
|
|
10
|
+
* MARGIN, treat the response as truncated.
|
|
11
|
+
*
|
|
12
|
+
* Rationale:
|
|
13
|
+
* - Provider-agnostic: every provider reports output_tokens
|
|
14
|
+
* (or input_tokens we can derive output from). stop_reason
|
|
15
|
+
* names + values differ.
|
|
16
|
+
* - Robust: simple arithmetic, no string parsing.
|
|
17
|
+
* - Conservative: we use a small margin to catch boundary
|
|
18
|
+
* cases (e.g. response landed at 8190 of 8192 -- almost
|
|
19
|
+
* certainly truncated even if the model finished a sentence
|
|
20
|
+
* by chance).
|
|
21
|
+
*
|
|
22
|
+
* ASCII-only.
|
|
23
|
+
*/
|
|
24
|
+
/** Default margin: how close to max_tokens counts as truncation.
|
|
25
|
+
* A response within 32 tokens of the cap is treated as truncated.
|
|
26
|
+
* Tuned to catch boundary cases without false positives on
|
|
27
|
+
* responses that legitimately end near the cap. */
|
|
28
|
+
export const TRUNCATION_MARGIN_TOKENS = 32;
|
|
29
|
+
/** Inspect a response. Returns {truncated: true, ...} when the
|
|
30
|
+
* output_tokens are within MARGIN of max_tokens, OR when the
|
|
31
|
+
* provider's stop_reason explicitly says max_tokens (as a
|
|
32
|
+
* secondary signal -- the arithmetic check is primary).
|
|
33
|
+
*
|
|
34
|
+
* Both args are required. If the caller does not know
|
|
35
|
+
* max_tokens (e.g. a streaming response from a provider that
|
|
36
|
+
* refused to honour the cap), pass 0 and we return
|
|
37
|
+
* {truncated: false} -- we cannot detect without it. */
|
|
38
|
+
export function detectTruncation(opts) {
|
|
39
|
+
const output = Math.max(0, Math.floor(opts.output_tokens || 0));
|
|
40
|
+
const max = Math.max(0, Math.floor(opts.max_tokens || 0));
|
|
41
|
+
const margin = Math.max(0, opts.margin ?? TRUNCATION_MARGIN_TOKENS);
|
|
42
|
+
if (max === 0) {
|
|
43
|
+
/* Unknown cap -- can't decide via arithmetic. Fall back to
|
|
44
|
+
* the stop_reason signal alone. */
|
|
45
|
+
if (opts.stop_reason === 'max_tokens' || opts.stop_reason === 'length') {
|
|
46
|
+
return {
|
|
47
|
+
truncated: true,
|
|
48
|
+
reason: 'provider reported stop_reason=' + opts.stop_reason + ' (max_tokens unknown to caller)',
|
|
49
|
+
output_tokens: output,
|
|
50
|
+
max_tokens: max,
|
|
51
|
+
margin: 0,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
truncated: false,
|
|
56
|
+
reason: '',
|
|
57
|
+
output_tokens: output,
|
|
58
|
+
max_tokens: max,
|
|
59
|
+
margin: 0,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const distance = max - output;
|
|
63
|
+
if (distance <= margin) {
|
|
64
|
+
return {
|
|
65
|
+
truncated: true,
|
|
66
|
+
reason: 'output_tokens=' + output + ' is within ' + margin + ' of max_tokens=' + max
|
|
67
|
+
+ (opts.stop_reason ? ' (provider stop_reason=' + opts.stop_reason + ')' : ''),
|
|
68
|
+
output_tokens: output,
|
|
69
|
+
max_tokens: max,
|
|
70
|
+
margin: distance,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/* Secondary signal: even if arithmetic says we have headroom,
|
|
74
|
+
* trust the provider if it explicitly says it stopped due to
|
|
75
|
+
* max_tokens (provider may have inflated output_tokens
|
|
76
|
+
* estimate, or applied a stricter internal cap). */
|
|
77
|
+
if (opts.stop_reason === 'max_tokens' || opts.stop_reason === 'length') {
|
|
78
|
+
return {
|
|
79
|
+
truncated: true,
|
|
80
|
+
reason: 'provider reported stop_reason=' + opts.stop_reason + ' (arithmetic would have allowed continuation: ' + distance + ' tokens of headroom)',
|
|
81
|
+
output_tokens: output,
|
|
82
|
+
max_tokens: max,
|
|
83
|
+
margin: distance,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
truncated: false,
|
|
88
|
+
reason: '',
|
|
89
|
+
output_tokens: output,
|
|
90
|
+
max_tokens: max,
|
|
91
|
+
margin: distance,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** Helper to format the truncation banner appended to user-visible
|
|
95
|
+
* responses. Returns empty string if not truncated.
|
|
96
|
+
*
|
|
97
|
+
* The banner is intentionally short -- it does NOT include the
|
|
98
|
+
* full ForgeError block; the renderer wires that separately via
|
|
99
|
+
* renderForgeError(E_RESPONSE_TRUNCATED, {...}). This helper is
|
|
100
|
+
* for the trailing inline note.
|
|
101
|
+
*
|
|
102
|
+
* alpha.59z.15 -- localised via i18n. The banner text comes from
|
|
103
|
+
* `error.response_truncated.banner` in src/i18n/catalogs/*.json
|
|
104
|
+
* with {max} and {suggested} substituted in. */
|
|
105
|
+
export async function truncationBanner(d, lang) {
|
|
106
|
+
if (!d.truncated)
|
|
107
|
+
return '';
|
|
108
|
+
const { tForLang } = await import('../i18n/index.js');
|
|
109
|
+
const text = tForLang(lang ?? 'es', 'error.response_truncated.banner', {
|
|
110
|
+
max: d.max_tokens,
|
|
111
|
+
suggested: d.max_tokens * 2,
|
|
112
|
+
});
|
|
113
|
+
return '\n\n' + text;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=truncation_detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncation_detector.js","sourceRoot":"","sources":["../../src/core/truncation_detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* turn_classifier.ts -- Gemini mini-prompt that decides tier for
|
|
3
|
+
* a turn the reasoning_gate flagged as ambiguous (alpha.55).
|
|
4
|
+
*
|
|
5
|
+
* Why eco-model for the classifier itself: the question
|
|
6
|
+
* "simple verb invocation or complex reasoning?" is a routing
|
|
7
|
+
* decision, not a content decision. Gemini Flash Lite handles it
|
|
8
|
+
* in ~400 ms for fractions of a cent. The verdict gates whether
|
|
9
|
+
* the EXPENSIVE turn (full LLM call) goes to eco or frontier.
|
|
10
|
+
*
|
|
11
|
+
* Fallback path when Gemini is not reachable or the key is
|
|
12
|
+
* missing: the gate's own (low-confidence) tier suggestion is
|
|
13
|
+
* returned with a "classifier_unreachable" signal so the cost log
|
|
14
|
+
* shows what happened. The chat NEVER blocks on classifier
|
|
15
|
+
* availability.
|
|
16
|
+
*
|
|
17
|
+
* Cache: LRU keyed by sha256 of the user text + previous tier.
|
|
18
|
+
* 50 entries / 5 min TTL. Saves the classifier call on repeated
|
|
19
|
+
* short prompts ("hola", "ok", "si").
|
|
20
|
+
*
|
|
21
|
+
* ASCII-only.
|
|
22
|
+
*/
|
|
23
|
+
export type ClassifierVerdict = 'simple' | 'complex' | 'destructive';
|
|
24
|
+
export interface ClassifierInput {
|
|
25
|
+
/** The user message. */
|
|
26
|
+
text: string;
|
|
27
|
+
/** Tier the gate would have picked when called alone. Used as
|
|
28
|
+
* fallback if the classifier fails. */
|
|
29
|
+
gate_tier: 'eco' | 'frontier';
|
|
30
|
+
/** Previous tier in the conversation, used for the cache key. */
|
|
31
|
+
previous_tier?: 'eco' | 'frontier';
|
|
32
|
+
/** Optional override for the model used (test fixture). */
|
|
33
|
+
model?: string;
|
|
34
|
+
/** Optional override for the API key fetch (test fixture). */
|
|
35
|
+
api_key?: string | null;
|
|
36
|
+
/** Optional fetch implementation (test fixture). */
|
|
37
|
+
fetchImpl?: typeof fetch;
|
|
38
|
+
/** Optional timeout override (ms). Default 2500. */
|
|
39
|
+
timeoutMs?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ClassifierResult {
|
|
42
|
+
/** Tier chosen for the turn. */
|
|
43
|
+
tier: 'eco' | 'frontier';
|
|
44
|
+
/** Confidence 0..1. 0.50 when classifier failed and we fell
|
|
45
|
+
* back to the gate verdict. */
|
|
46
|
+
confidence: number;
|
|
47
|
+
/** Verdict the classifier returned (null when unreachable). */
|
|
48
|
+
verdict: ClassifierVerdict | null;
|
|
49
|
+
/** Trail of what happened. Goes to brain_routing.jsonl. */
|
|
50
|
+
signals: string[];
|
|
51
|
+
/** True when the call was served from cache. */
|
|
52
|
+
cached: boolean;
|
|
53
|
+
}
|
|
54
|
+
/** Test hook -- clear cache between specs. */
|
|
55
|
+
export declare function _resetClassifierCache(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Run the classifier. Never throws -- on any failure, returns
|
|
58
|
+
* the gate's fallback tier with a "classifier_unreachable"
|
|
59
|
+
* signal and confidence 0.50.
|
|
60
|
+
*/
|
|
61
|
+
export declare function classifyTurn(input: ClassifierInput): Promise<ClassifierResult>;
|
|
62
|
+
//# sourceMappingURL=turn_classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn_classifier.d.ts","sourceRoot":"","sources":["../../src/core/turn_classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;4CACwC;IACxC,SAAS,EAAE,KAAK,GAAG,UAAU,CAAC;IAC9B,iEAAiE;IACjE,aAAa,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IACnC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB;oCACgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gDAAgD;IAChD,MAAM,EAAE,OAAO,CAAC;CACjB;AA4DD,8CAA8C;AAC9C,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AA6ED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoEpF"}
|