@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,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* limits_config.ts -- runtime limits Pablo (or any operator) can
|
|
3
|
+
* tune without rebuilding the CLI (alpha.59c).
|
|
4
|
+
*
|
|
5
|
+
* Pablo rule: NADA hardcode. Every limit a turn enforces lives
|
|
6
|
+
* here and the panel + CLI expose it for editing. Defaults are
|
|
7
|
+
* conservative; the user widens them when they hit a wall (e.g.
|
|
8
|
+
* reader-heavy turn exhausts the default 5 rounds -> bump the
|
|
9
|
+
* reader_family cap).
|
|
10
|
+
*
|
|
11
|
+
* Storage:
|
|
12
|
+
* $YF_CONFIG_DIR/limits.json (or ~/.yujin-forge/limits.json)
|
|
13
|
+
*
|
|
14
|
+
* Shape:
|
|
15
|
+
* {
|
|
16
|
+
* "version": 1,
|
|
17
|
+
* "max_tool_rounds": {
|
|
18
|
+
* "default": 5,
|
|
19
|
+
* "reader_family": 25,
|
|
20
|
+
* "search_family": 15,
|
|
21
|
+
* "writer_family": 10
|
|
22
|
+
* },
|
|
23
|
+
* "request_timeout_ms": {
|
|
24
|
+
* "managed_proxy": 60000,
|
|
25
|
+
* "byok_anthropic": 60000,
|
|
26
|
+
* "byok_openai": 60000,
|
|
27
|
+
* "byok_gemini": 30000
|
|
28
|
+
* },
|
|
29
|
+
* "classifier_timeout_ms": 2500,
|
|
30
|
+
* "managed_max_tokens_per_turn": 8192
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* Verb-family detection: each turn the LLM may invoke verbs
|
|
34
|
+
* from different families. We look at the FIRST verb the LLM
|
|
35
|
+
* tries to call and the family it belongs to to pick the cap.
|
|
36
|
+
* If subsequent verbs are from different families, the cap
|
|
37
|
+
* stays at whatever the first family suggested -- this avoids
|
|
38
|
+
* mid-turn cap shifts that would surprise the model.
|
|
39
|
+
*
|
|
40
|
+
* Families:
|
|
41
|
+
* reader_family : yujin.reader.* + yujin.fs.read-*
|
|
42
|
+
* + yujin.docs.read-*
|
|
43
|
+
* search_family : yujin.reader.search + future search verbs
|
|
44
|
+
* writer_family : yujin.fs.write-* + yujin.fs.append-*
|
|
45
|
+
* default : everything else (cap = 5 -- short tool
|
|
46
|
+
* loops, chats, single-action verbs)
|
|
47
|
+
*
|
|
48
|
+
* ASCII-only.
|
|
49
|
+
*/
|
|
50
|
+
import { promises as fs } from 'node:fs';
|
|
51
|
+
import path from 'node:path';
|
|
52
|
+
import os from 'node:os';
|
|
53
|
+
export function defaultLimitsConfig() {
|
|
54
|
+
return {
|
|
55
|
+
version: 1,
|
|
56
|
+
max_tool_rounds: {
|
|
57
|
+
default: 5,
|
|
58
|
+
reader_family: 25,
|
|
59
|
+
search_family: 15,
|
|
60
|
+
writer_family: 10,
|
|
61
|
+
autonomous: 50,
|
|
62
|
+
},
|
|
63
|
+
request_timeout_ms: {
|
|
64
|
+
managed_proxy: 60000,
|
|
65
|
+
byok_anthropic: 60000,
|
|
66
|
+
byok_openai: 60000,
|
|
67
|
+
byok_gemini: 30000,
|
|
68
|
+
},
|
|
69
|
+
classifier_timeout_ms: 2500,
|
|
70
|
+
managed_max_tokens_per_turn: 8192,
|
|
71
|
+
shell: {
|
|
72
|
+
timeout_ms_default: 30000,
|
|
73
|
+
timeout_ms_max: 300000,
|
|
74
|
+
max_output_bytes: 1048576,
|
|
75
|
+
cwd_boundary_strict: true,
|
|
76
|
+
},
|
|
77
|
+
danger_zone: {
|
|
78
|
+
auto_approve_all: false,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function limitsConfigPath() {
|
|
83
|
+
const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
84
|
+
const base = process.env.YF_CONFIG_DIR || path.join(home, '.yujin-forge');
|
|
85
|
+
return path.join(base, 'limits.json');
|
|
86
|
+
}
|
|
87
|
+
function clamp(v, min, max, fallback) {
|
|
88
|
+
if (typeof v !== 'number' || !Number.isFinite(v))
|
|
89
|
+
return fallback;
|
|
90
|
+
if (v < min)
|
|
91
|
+
return min;
|
|
92
|
+
if (v > max)
|
|
93
|
+
return max;
|
|
94
|
+
return Math.floor(v);
|
|
95
|
+
}
|
|
96
|
+
/** Apply per-field validation + clamping when reading from
|
|
97
|
+
* disk. Out-of-range values silently snap to safe bounds so a
|
|
98
|
+
* fat-fingered edit doesn't brick the CLI. */
|
|
99
|
+
function normaliseLimitsConfig(raw) {
|
|
100
|
+
const def = defaultLimitsConfig();
|
|
101
|
+
if (!raw || typeof raw !== 'object')
|
|
102
|
+
return def;
|
|
103
|
+
const j = raw;
|
|
104
|
+
const rounds = j.max_tool_rounds || {};
|
|
105
|
+
const timeouts = j.request_timeout_ms || {};
|
|
106
|
+
const shell = j.shell || {};
|
|
107
|
+
const danger = j.danger_zone || {};
|
|
108
|
+
return {
|
|
109
|
+
version: 1,
|
|
110
|
+
max_tool_rounds: {
|
|
111
|
+
default: clamp(rounds.default, 1, 100, def.max_tool_rounds.default),
|
|
112
|
+
reader_family: clamp(rounds.reader_family, 1, 100, def.max_tool_rounds.reader_family),
|
|
113
|
+
search_family: clamp(rounds.search_family, 1, 100, def.max_tool_rounds.search_family),
|
|
114
|
+
writer_family: clamp(rounds.writer_family, 1, 100, def.max_tool_rounds.writer_family),
|
|
115
|
+
autonomous: clamp(rounds.autonomous, 1, 200, def.max_tool_rounds.autonomous),
|
|
116
|
+
},
|
|
117
|
+
request_timeout_ms: {
|
|
118
|
+
managed_proxy: clamp(timeouts.managed_proxy, 1000, 300000, def.request_timeout_ms.managed_proxy),
|
|
119
|
+
byok_anthropic: clamp(timeouts.byok_anthropic, 1000, 300000, def.request_timeout_ms.byok_anthropic),
|
|
120
|
+
byok_openai: clamp(timeouts.byok_openai, 1000, 300000, def.request_timeout_ms.byok_openai),
|
|
121
|
+
byok_gemini: clamp(timeouts.byok_gemini, 1000, 300000, def.request_timeout_ms.byok_gemini),
|
|
122
|
+
},
|
|
123
|
+
classifier_timeout_ms: clamp(j.classifier_timeout_ms, 250, 30000, def.classifier_timeout_ms),
|
|
124
|
+
managed_max_tokens_per_turn: clamp(j.managed_max_tokens_per_turn, 64, 64000, def.managed_max_tokens_per_turn),
|
|
125
|
+
shell: {
|
|
126
|
+
timeout_ms_default: clamp(shell.timeout_ms_default, 1000, 600000, def.shell.timeout_ms_default),
|
|
127
|
+
timeout_ms_max: clamp(shell.timeout_ms_max, 1000, 600000, def.shell.timeout_ms_max),
|
|
128
|
+
max_output_bytes: clamp(shell.max_output_bytes, 1024, 16 * 1024 * 1024, def.shell.max_output_bytes),
|
|
129
|
+
cwd_boundary_strict: typeof shell.cwd_boundary_strict === 'boolean'
|
|
130
|
+
? shell.cwd_boundary_strict
|
|
131
|
+
: def.shell.cwd_boundary_strict,
|
|
132
|
+
},
|
|
133
|
+
danger_zone: {
|
|
134
|
+
auto_approve_all: typeof danger.auto_approve_all === 'boolean'
|
|
135
|
+
? danger.auto_approve_all
|
|
136
|
+
: def.danger_zone.auto_approve_all,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
let _cache = null;
|
|
141
|
+
let _cacheMTime = 0;
|
|
142
|
+
/** Read the active config. Cached for ~3 seconds to avoid
|
|
143
|
+
* hammering the FS on every router call. Use forceRefresh=true
|
|
144
|
+
* in tests / CLI after a setValue. */
|
|
145
|
+
export async function readLimitsConfig(forceRefresh = false) {
|
|
146
|
+
if (!forceRefresh && _cache && Date.now() - _cacheMTime < 3000) {
|
|
147
|
+
return _cache;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const raw = await fs.readFile(limitsConfigPath(), 'utf-8');
|
|
151
|
+
const j = JSON.parse(raw);
|
|
152
|
+
_cache = normaliseLimitsConfig(j);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
_cache = defaultLimitsConfig();
|
|
156
|
+
}
|
|
157
|
+
_cacheMTime = Date.now();
|
|
158
|
+
return _cache;
|
|
159
|
+
}
|
|
160
|
+
export async function writeLimitsConfig(cfg) {
|
|
161
|
+
const p = limitsConfigPath();
|
|
162
|
+
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
163
|
+
const tmp = p + '.tmp';
|
|
164
|
+
const normalised = normaliseLimitsConfig(cfg);
|
|
165
|
+
await fs.writeFile(tmp, JSON.stringify(normalised, null, 2), 'utf-8');
|
|
166
|
+
await fs.rename(tmp, p);
|
|
167
|
+
_cache = normalised;
|
|
168
|
+
_cacheMTime = Date.now();
|
|
169
|
+
}
|
|
170
|
+
export async function resetLimitsConfig() {
|
|
171
|
+
const def = defaultLimitsConfig();
|
|
172
|
+
await writeLimitsConfig(def);
|
|
173
|
+
return def;
|
|
174
|
+
}
|
|
175
|
+
/** Reset the in-memory cache. Tests use this between specs. */
|
|
176
|
+
export function _resetLimitsCache() {
|
|
177
|
+
_cache = null;
|
|
178
|
+
_cacheMTime = 0;
|
|
179
|
+
}
|
|
180
|
+
/* ----- Verb family detection ------------------------------- */
|
|
181
|
+
const READER_VERB_PATTERNS = [
|
|
182
|
+
/^yujin\.reader\.(open|next-block|read-section|recap|bookmark-set|bookmark-jump|list-docs)$/,
|
|
183
|
+
/^yujin\.fs\.read-/,
|
|
184
|
+
/^yujin\.docs\.read-/,
|
|
185
|
+
];
|
|
186
|
+
const SEARCH_VERB_PATTERNS = [
|
|
187
|
+
/^yujin\.reader\.search$/,
|
|
188
|
+
/^yujin\.search\./,
|
|
189
|
+
/^yujin\.web\.search/,
|
|
190
|
+
];
|
|
191
|
+
const WRITER_VERB_PATTERNS = [
|
|
192
|
+
/^yujin\.fs\.write-/,
|
|
193
|
+
/^yujin\.fs\.append-/,
|
|
194
|
+
];
|
|
195
|
+
export function classifyVerbFamily(verbId) {
|
|
196
|
+
if (!verbId)
|
|
197
|
+
return 'default';
|
|
198
|
+
for (const p of READER_VERB_PATTERNS)
|
|
199
|
+
if (p.test(verbId))
|
|
200
|
+
return 'reader_family';
|
|
201
|
+
for (const p of SEARCH_VERB_PATTERNS)
|
|
202
|
+
if (p.test(verbId))
|
|
203
|
+
return 'search_family';
|
|
204
|
+
for (const p of WRITER_VERB_PATTERNS)
|
|
205
|
+
if (p.test(verbId))
|
|
206
|
+
return 'writer_family';
|
|
207
|
+
return 'default';
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Pick the max_tool_rounds limit for a turn based on the verb
|
|
211
|
+
* family the LLM is using. The family is derived from the
|
|
212
|
+
* FIRST nac3 verb the LLM emits in this turn -- once decided,
|
|
213
|
+
* the cap stays for the rest of the turn (no mid-turn shifts).
|
|
214
|
+
*
|
|
215
|
+
* Callers track the first verb invoked + pass it here.
|
|
216
|
+
*/
|
|
217
|
+
export function getMaxToolRoundsForFamily(cfg, family) {
|
|
218
|
+
switch (family) {
|
|
219
|
+
case 'reader_family': return cfg.reader_family;
|
|
220
|
+
case 'search_family': return cfg.search_family;
|
|
221
|
+
case 'writer_family': return cfg.writer_family;
|
|
222
|
+
case 'default': return cfg.default;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/* ----- Field-path API for CLI setter ----------------------- */
|
|
226
|
+
/** All settable field paths in dotted notation, used by `yf
|
|
227
|
+
* limits set <field> <value>`. */
|
|
228
|
+
export const LIMITS_FIELD_PATHS = [
|
|
229
|
+
'max_tool_rounds.default',
|
|
230
|
+
'max_tool_rounds.reader_family',
|
|
231
|
+
'max_tool_rounds.search_family',
|
|
232
|
+
'max_tool_rounds.writer_family',
|
|
233
|
+
'max_tool_rounds.autonomous',
|
|
234
|
+
'request_timeout_ms.managed_proxy',
|
|
235
|
+
'request_timeout_ms.byok_anthropic',
|
|
236
|
+
'request_timeout_ms.byok_openai',
|
|
237
|
+
'request_timeout_ms.byok_gemini',
|
|
238
|
+
'classifier_timeout_ms',
|
|
239
|
+
'managed_max_tokens_per_turn',
|
|
240
|
+
'shell.timeout_ms_default',
|
|
241
|
+
'shell.timeout_ms_max',
|
|
242
|
+
'shell.max_output_bytes',
|
|
243
|
+
];
|
|
244
|
+
export function isLimitsFieldPath(p) {
|
|
245
|
+
return LIMITS_FIELD_PATHS.includes(p);
|
|
246
|
+
}
|
|
247
|
+
/* alpha.59d -- boolean settings live apart so setLimitsField
|
|
248
|
+
* can stay numeric-only. */
|
|
249
|
+
export const LIMITS_BOOLEAN_FIELD_PATHS = [
|
|
250
|
+
'shell.cwd_boundary_strict',
|
|
251
|
+
'danger_zone.auto_approve_all',
|
|
252
|
+
];
|
|
253
|
+
export function isLimitsBooleanFieldPath(p) {
|
|
254
|
+
return LIMITS_BOOLEAN_FIELD_PATHS.includes(p);
|
|
255
|
+
}
|
|
256
|
+
export async function setLimitsBooleanField(field, value) {
|
|
257
|
+
if (!isLimitsBooleanFieldPath(field)) {
|
|
258
|
+
throw new Error('limits: unknown boolean field path "' + field + '"');
|
|
259
|
+
}
|
|
260
|
+
if (typeof value !== 'boolean') {
|
|
261
|
+
throw new Error('limits: boolean field value must be a boolean');
|
|
262
|
+
}
|
|
263
|
+
const cur = await readLimitsConfig(true);
|
|
264
|
+
const parts = field.split('.');
|
|
265
|
+
if (parts.length === 2 && parts[0] && parts[1]) {
|
|
266
|
+
const root = cur[parts[0]];
|
|
267
|
+
if (!root)
|
|
268
|
+
throw new Error('limits: parent field missing: ' + parts[0]);
|
|
269
|
+
root[parts[1]] = value;
|
|
270
|
+
}
|
|
271
|
+
await writeLimitsConfig(cur);
|
|
272
|
+
return cur;
|
|
273
|
+
}
|
|
274
|
+
/** Apply a single setValue. Returns the updated config. Throws
|
|
275
|
+
* on invalid path or non-numeric value. */
|
|
276
|
+
export async function setLimitsField(field, value) {
|
|
277
|
+
if (!isLimitsFieldPath(field)) {
|
|
278
|
+
throw new Error('limits: unknown field path "' + field + '". Run `yf limits list-fields` to see options.');
|
|
279
|
+
}
|
|
280
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
281
|
+
throw new Error('limits: value must be a finite number, got ' + String(value));
|
|
282
|
+
}
|
|
283
|
+
const cur = await readLimitsConfig(true);
|
|
284
|
+
const parts = field.split('.');
|
|
285
|
+
if (parts.length === 1 && parts[0]) {
|
|
286
|
+
cur[parts[0]] = value;
|
|
287
|
+
}
|
|
288
|
+
else if (parts.length === 2 && parts[0] && parts[1]) {
|
|
289
|
+
const root = cur[parts[0]];
|
|
290
|
+
if (!root)
|
|
291
|
+
throw new Error('limits: parent field missing: ' + parts[0]);
|
|
292
|
+
root[parts[1]] = value;
|
|
293
|
+
}
|
|
294
|
+
await writeLimitsConfig(cur);
|
|
295
|
+
return cur;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=limits_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits_config.js","sourceRoot":"","sources":["../../src/core/limits_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
declare const ALLOWED_SLOTS: readonly ["anthropic_api_key", "openai_api_key", "google_ai_key", "deepseek_api_key", "xai_api_key", "mistral_api_key", "cohere_api_key", "google_stt_key", "google_tts_key", "whisper_api_key", "elevenlabs_api_key", "yujin_admin_key"];
|
|
2
|
+
export type ProviderSlot = (typeof ALLOWED_SLOTS)[number];
|
|
3
|
+
export declare function listAllowedSlots(): readonly string[];
|
|
4
|
+
export declare function isAllowedSlot(s: string): s is ProviderSlot;
|
|
5
|
+
/** Force a re-open (tests). */
|
|
6
|
+
export declare function _resetVaultCache(): void;
|
|
7
|
+
/** Run once per process. Imports legacy plaintext JSON keys +
|
|
8
|
+
* any vault slots stored under the non-prefixed slot name
|
|
9
|
+
* (legacy from before alpha.44 OR from users following an old
|
|
10
|
+
* yf vault set instruction). Idempotent + tolerant of partial
|
|
11
|
+
* imports. */
|
|
12
|
+
export declare function migrateLegacyIfNeeded(): Promise<{
|
|
13
|
+
imported: string[];
|
|
14
|
+
skipped: string[];
|
|
15
|
+
legacy_present: boolean;
|
|
16
|
+
vault_slots_migrated: string[];
|
|
17
|
+
}>;
|
|
18
|
+
/** Read a BYOK key plaintext. Returns null when the slot is not
|
|
19
|
+
* set or the slot name is invalid. Migrates legacy storage on
|
|
20
|
+
* first call. */
|
|
21
|
+
export declare function getKey(slot: string): Promise<string | null>;
|
|
22
|
+
/** Set a BYOK key. Empty / null value clears the slot. */
|
|
23
|
+
export declare function setKey(slot: string, value: string | null | undefined): Promise<void>;
|
|
24
|
+
/** Has-check (no plaintext leak). */
|
|
25
|
+
export declare function hasKey(slot: string): Promise<boolean>;
|
|
26
|
+
/** Status snapshot of all allowed slots -- booleans, not values. */
|
|
27
|
+
export declare function listStatus(): Promise<Record<string, boolean>>;
|
|
28
|
+
/** Convenience: synchronous-ish wrappers for the legacy code paths
|
|
29
|
+
* that did `readKeys(): Record<string, unknown>` and expected a
|
|
30
|
+
* full snapshot. Returns plaintext values for set slots; null
|
|
31
|
+
* for unset. Keep call sites aware this DECRYPTS everything --
|
|
32
|
+
* do not log the return. */
|
|
33
|
+
export declare function readAllPlaintext(): Promise<Record<string, string | null>>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=provider_keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider_keys.d.ts","sourceRoot":"","sources":["../../src/core/provider_keys.ts"],"names":[],"mappings":"AAkCA,QAAA,MAAM,aAAa,2OAyBT,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,wBAAgB,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAEpD;AAgBD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,YAAY,CAM1D;AAqBD,+BAA+B;AAC/B,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAID;;;;eAIe;AACf,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC,CA4DD;AAED;;kBAEkB;AAClB,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOjE;AAED,0DAA0D;AAC1D,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1F;AAED,qCAAqC;AACrC,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK3D;AAED,oEAAoE;AACpE,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQnE;AAED;;;;6BAI6B;AAC7B,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAY/E"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/provider_keys.ts -- BYOK API key storage (alpha.44 C1).
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for read / write / list of BYOK provider
|
|
5
|
+
* keys (Anthropic, OpenAI, Google AI, Google STT, Google TTS,
|
|
6
|
+
* Whisper, ElevenLabs).
|
|
7
|
+
*
|
|
8
|
+
* Storage: encrypted Vault (AES-256-GCM, derived from machine
|
|
9
|
+
* fingerprint -- see src/vault/crypto.ts). Slots are namespaced
|
|
10
|
+
* `byok.<slot>` so they cannot collide with other vault tenants.
|
|
11
|
+
*
|
|
12
|
+
* Migration: on first call the helper checks for the legacy file
|
|
13
|
+
* `~/.yujin-forge/provider_keys.json` (plaintext, mode 0600 only).
|
|
14
|
+
* If present:
|
|
15
|
+
* 1. Imports every recognised slot value into the vault.
|
|
16
|
+
* 2. Renames the legacy file to `provider_keys.json.legacy.bak`
|
|
17
|
+
* so a fresh chat session does not re-import it. The backup
|
|
18
|
+
* stays so the user can grep for emergency recovery if the
|
|
19
|
+
* vault somehow gets corrupted before the next chat turn.
|
|
20
|
+
*
|
|
21
|
+
* All callers (chat tool, server endpoints, voice providers,
|
|
22
|
+
* claude client init, CLI commands, license sync, etc) MUST go
|
|
23
|
+
* through this module. Direct reads of provider_keys.json are
|
|
24
|
+
* forbidden from alpha.44 onward; the audit_consumers tool will
|
|
25
|
+
* flag any re-introduction.
|
|
26
|
+
*
|
|
27
|
+
* ASCII-only.
|
|
28
|
+
*/
|
|
29
|
+
import { promises as fs } from 'node:fs';
|
|
30
|
+
import path from 'node:path';
|
|
31
|
+
import os from 'node:os';
|
|
32
|
+
import { Vault } from '../vault/store.js';
|
|
33
|
+
import { configDir } from '../license/index.js';
|
|
34
|
+
const ALLOWED_SLOTS = [
|
|
35
|
+
/* Brain provider keys (one of these resolves the active tier
|
|
36
|
+
* in src/core/brain_config.ts). */
|
|
37
|
+
'anthropic_api_key',
|
|
38
|
+
'openai_api_key',
|
|
39
|
+
'google_ai_key',
|
|
40
|
+
/* alpha.51 -- added brain providers reachable from
|
|
41
|
+
* cost_router. Slots registered so the BYOK CLI + vault
|
|
42
|
+
* recognise them; runtime wire happens in alpha.51b/52. */
|
|
43
|
+
'deepseek_api_key',
|
|
44
|
+
'xai_api_key',
|
|
45
|
+
'mistral_api_key',
|
|
46
|
+
'cohere_api_key',
|
|
47
|
+
/* Voice providers (decoupled from brain selection). */
|
|
48
|
+
'google_stt_key',
|
|
49
|
+
'google_tts_key',
|
|
50
|
+
'whisper_api_key',
|
|
51
|
+
'elevenlabs_api_key',
|
|
52
|
+
/* alpha.59z.17 HITO 6.4 -- F103 admin key. Stored locally so
|
|
53
|
+
* Pablo does not have to paste it for every promote/demote/
|
|
54
|
+
* reject/doctrine-update command. Matches the YUJIN_ADMIN_KEY
|
|
55
|
+
* secret configured in the HITO 4 worker. */
|
|
56
|
+
'yujin_admin_key',
|
|
57
|
+
];
|
|
58
|
+
export function listAllowedSlots() {
|
|
59
|
+
return ALLOWED_SLOTS;
|
|
60
|
+
}
|
|
61
|
+
/* alpha.59z.34 F101 slice 5 sub-slice 2 -- dynamic slot patterns
|
|
62
|
+
* for per-bridge MCP credentials. The bridge_id is user-controlled
|
|
63
|
+
* but the slot shape is constrained:
|
|
64
|
+
* mcp_<bridge_id>_token where bridge_id is [a-z0-9_-]{1,80}
|
|
65
|
+
*
|
|
66
|
+
* The regex is anchored + length-limited so a malformed bridge_id
|
|
67
|
+
* cannot exfiltrate into other vault keys via setKey('../foo').
|
|
68
|
+
* Vault.set itself also enforces ^[a-z][a-z0-9_-]*$ on the prefixed
|
|
69
|
+
* key, but defence-in-depth: we validate here too.
|
|
70
|
+
*/
|
|
71
|
+
const DYNAMIC_SLOT_PATTERNS = [
|
|
72
|
+
/^mcp_[a-z0-9][a-z0-9_-]{0,78}_token$/,
|
|
73
|
+
];
|
|
74
|
+
export function isAllowedSlot(s) {
|
|
75
|
+
if (ALLOWED_SLOTS.includes(s))
|
|
76
|
+
return true;
|
|
77
|
+
/* Type guard widening: dynamic slots are not in the ProviderSlot
|
|
78
|
+
* union, but for runtime callers passing `string` the guard still
|
|
79
|
+
* narrows enough at the static-known callsites. */
|
|
80
|
+
return DYNAMIC_SLOT_PATTERNS.some((re) => re.test(s));
|
|
81
|
+
}
|
|
82
|
+
/* Slot prefix in the vault. The Vault enforces
|
|
83
|
+
* ^[a-z][a-z0-9_-]*$ so we use an underscore, not a dot. */
|
|
84
|
+
const VAULT_PREFIX = 'byok_';
|
|
85
|
+
function legacyKeysFile() {
|
|
86
|
+
const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
87
|
+
const base = process.env.YF_CONFIG_DIR || path.join(home, '.yujin-forge');
|
|
88
|
+
return path.join(base, 'provider_keys.json');
|
|
89
|
+
}
|
|
90
|
+
/** Cache the Vault open. Each ProviderKeys API call reuses the
|
|
91
|
+
* same instance so we don't re-derive the AES key on every read. */
|
|
92
|
+
let _vaultCache = null;
|
|
93
|
+
async function openVault() {
|
|
94
|
+
if (_vaultCache)
|
|
95
|
+
return _vaultCache;
|
|
96
|
+
_vaultCache = await Vault.open({ configDir: configDir() });
|
|
97
|
+
return _vaultCache;
|
|
98
|
+
}
|
|
99
|
+
/** Force a re-open (tests). */
|
|
100
|
+
export function _resetVaultCache() {
|
|
101
|
+
_vaultCache = null;
|
|
102
|
+
_migrationDone = false;
|
|
103
|
+
}
|
|
104
|
+
let _migrationDone = false;
|
|
105
|
+
/** Run once per process. Imports legacy plaintext JSON keys +
|
|
106
|
+
* any vault slots stored under the non-prefixed slot name
|
|
107
|
+
* (legacy from before alpha.44 OR from users following an old
|
|
108
|
+
* yf vault set instruction). Idempotent + tolerant of partial
|
|
109
|
+
* imports. */
|
|
110
|
+
export async function migrateLegacyIfNeeded() {
|
|
111
|
+
if (_migrationDone)
|
|
112
|
+
return { imported: [], skipped: [], legacy_present: false, vault_slots_migrated: [] };
|
|
113
|
+
_migrationDone = true;
|
|
114
|
+
const vault = await openVault();
|
|
115
|
+
const imported = [];
|
|
116
|
+
const skipped = [];
|
|
117
|
+
const vaultSlotsMigrated = [];
|
|
118
|
+
/* alpha.54 -- migrate vault slots that exist WITHOUT the
|
|
119
|
+
* byok_ prefix into the canonical prefixed slot. Happens when
|
|
120
|
+
* users follow an old guide ("yf vault set google_ai_key").
|
|
121
|
+
* Each migrated row also clears the source slot so the vault
|
|
122
|
+
* inventory stays clean. */
|
|
123
|
+
for (const slot of ALLOWED_SLOTS) {
|
|
124
|
+
const prefixed = VAULT_PREFIX + slot;
|
|
125
|
+
if (vault.has(prefixed))
|
|
126
|
+
continue; // already in canonical place
|
|
127
|
+
if (!vault.has(slot))
|
|
128
|
+
continue; // nothing in legacy slot either
|
|
129
|
+
try {
|
|
130
|
+
const v = vault.get(slot);
|
|
131
|
+
if (typeof v === 'string' && v.length >= 4) {
|
|
132
|
+
await vault.set(prefixed, v);
|
|
133
|
+
await vault.remove(slot);
|
|
134
|
+
vaultSlotsMigrated.push(slot);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
/* if read fails (vault corruption on that row), skip */
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/* Existing JSON legacy migration (alpha.44). */
|
|
142
|
+
const legacyFile = legacyKeysFile();
|
|
143
|
+
let raw;
|
|
144
|
+
try {
|
|
145
|
+
raw = await fs.readFile(legacyFile, 'utf-8');
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
if (err.code === 'ENOENT') {
|
|
149
|
+
return { imported, skipped, legacy_present: false, vault_slots_migrated: vaultSlotsMigrated };
|
|
150
|
+
}
|
|
151
|
+
throw err;
|
|
152
|
+
}
|
|
153
|
+
let json;
|
|
154
|
+
try {
|
|
155
|
+
json = JSON.parse(raw);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return { imported, skipped, legacy_present: true, vault_slots_migrated: vaultSlotsMigrated };
|
|
159
|
+
}
|
|
160
|
+
for (const slot of ALLOWED_SLOTS) {
|
|
161
|
+
const val = json[slot];
|
|
162
|
+
if (typeof val !== 'string' || val.length < 4)
|
|
163
|
+
continue;
|
|
164
|
+
const vaultKey = VAULT_PREFIX + slot;
|
|
165
|
+
if (vault.has(vaultKey)) {
|
|
166
|
+
skipped.push(slot);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
await vault.set(vaultKey, val);
|
|
171
|
+
imported.push(slot);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
skipped.push(slot);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/* Rename legacy file so next session doesn't re-import. */
|
|
178
|
+
try {
|
|
179
|
+
await fs.rename(legacyFile, legacyFile + '.legacy.bak');
|
|
180
|
+
}
|
|
181
|
+
catch { /* ignore */ }
|
|
182
|
+
return { imported, skipped, legacy_present: true, vault_slots_migrated: vaultSlotsMigrated };
|
|
183
|
+
}
|
|
184
|
+
/** Read a BYOK key plaintext. Returns null when the slot is not
|
|
185
|
+
* set or the slot name is invalid. Migrates legacy storage on
|
|
186
|
+
* first call. */
|
|
187
|
+
export async function getKey(slot) {
|
|
188
|
+
if (!isAllowedSlot(slot))
|
|
189
|
+
return null;
|
|
190
|
+
await migrateLegacyIfNeeded();
|
|
191
|
+
const vault = await openVault();
|
|
192
|
+
const vaultKey = VAULT_PREFIX + slot;
|
|
193
|
+
if (!vault.has(vaultKey))
|
|
194
|
+
return null;
|
|
195
|
+
try {
|
|
196
|
+
return vault.get(vaultKey);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/** Set a BYOK key. Empty / null value clears the slot. */
|
|
203
|
+
export async function setKey(slot, value) {
|
|
204
|
+
if (!isAllowedSlot(slot))
|
|
205
|
+
throw new Error('provider_keys: slot not allowed: ' + slot);
|
|
206
|
+
await migrateLegacyIfNeeded();
|
|
207
|
+
const vault = await openVault();
|
|
208
|
+
const vaultKey = VAULT_PREFIX + slot;
|
|
209
|
+
if (value == null || value === '') {
|
|
210
|
+
await vault.remove(vaultKey);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (typeof value !== 'string' || value.length < 8) {
|
|
214
|
+
throw new Error('provider_keys: value must be a string >= 8 chars (got ' + (typeof value) + ', length=' + (typeof value === 'string' ? value.length : 0) + ')');
|
|
215
|
+
}
|
|
216
|
+
await vault.set(vaultKey, value);
|
|
217
|
+
}
|
|
218
|
+
/** Has-check (no plaintext leak). */
|
|
219
|
+
export async function hasKey(slot) {
|
|
220
|
+
if (!isAllowedSlot(slot))
|
|
221
|
+
return false;
|
|
222
|
+
await migrateLegacyIfNeeded();
|
|
223
|
+
const vault = await openVault();
|
|
224
|
+
return vault.has(VAULT_PREFIX + slot);
|
|
225
|
+
}
|
|
226
|
+
/** Status snapshot of all allowed slots -- booleans, not values. */
|
|
227
|
+
export async function listStatus() {
|
|
228
|
+
await migrateLegacyIfNeeded();
|
|
229
|
+
const vault = await openVault();
|
|
230
|
+
const out = {};
|
|
231
|
+
for (const slot of ALLOWED_SLOTS) {
|
|
232
|
+
out[slot] = vault.has(VAULT_PREFIX + slot);
|
|
233
|
+
}
|
|
234
|
+
return out;
|
|
235
|
+
}
|
|
236
|
+
/** Convenience: synchronous-ish wrappers for the legacy code paths
|
|
237
|
+
* that did `readKeys(): Record<string, unknown>` and expected a
|
|
238
|
+
* full snapshot. Returns plaintext values for set slots; null
|
|
239
|
+
* for unset. Keep call sites aware this DECRYPTS everything --
|
|
240
|
+
* do not log the return. */
|
|
241
|
+
export async function readAllPlaintext() {
|
|
242
|
+
await migrateLegacyIfNeeded();
|
|
243
|
+
const vault = await openVault();
|
|
244
|
+
const out = {};
|
|
245
|
+
for (const slot of ALLOWED_SLOTS) {
|
|
246
|
+
if (vault.has(VAULT_PREFIX + slot)) {
|
|
247
|
+
try {
|
|
248
|
+
out[slot] = vault.get(VAULT_PREFIX + slot);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
out[slot] = null;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
out[slot] = null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=provider_keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider_keys.js","sourceRoot":"","sources":["../../src/core/provider_keys.ts"],"names":[],"mappings":"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"}
|