@nac3/forge-cli 0.2.0-alpha.5 → 0.2.0-alpha.59z.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -1
- package/dist/a11y/helpers.d.ts +88 -0
- package/dist/a11y/helpers.d.ts.map +1 -0
- package/dist/a11y/helpers.js +109 -0
- package/dist/a11y/helpers.js.map +1 -0
- package/dist/agents/config_resolver.d.ts +16 -0
- package/dist/agents/config_resolver.d.ts.map +1 -0
- package/dist/agents/config_resolver.js +133 -0
- package/dist/agents/config_resolver.js.map +1 -0
- package/dist/agents/config_schema.d.ts +42 -0
- package/dist/agents/config_schema.d.ts.map +1 -0
- package/dist/agents/config_schema.js +204 -0
- package/dist/agents/config_schema.js.map +1 -0
- package/dist/agents/defaults.d.ts +21 -0
- package/dist/agents/defaults.d.ts.map +1 -0
- package/dist/agents/defaults.js +56 -0
- package/dist/agents/defaults.js.map +1 -0
- package/dist/agents/runner.d.ts +94 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +165 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/store.d.ts +33 -0
- package/dist/agents/store.d.ts.map +1 -0
- package/dist/agents/store.js +210 -0
- package/dist/agents/store.js.map +1 -0
- package/dist/agents/types.d.ts +112 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +39 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +86 -2
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts +53 -15
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +152 -27
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/graph_auto_ingest.d.ts +46 -0
- package/dist/chat/graph_auto_ingest.d.ts.map +1 -0
- package/dist/chat/graph_auto_ingest.js +162 -0
- package/dist/chat/graph_auto_ingest.js.map +1 -0
- package/dist/chat/graph_component_watcher.d.ts +30 -0
- package/dist/chat/graph_component_watcher.d.ts.map +1 -0
- package/dist/chat/graph_component_watcher.js +220 -0
- package/dist/chat/graph_component_watcher.js.map +1 -0
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +5819 -1455
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/project_slug.d.ts +6 -0
- package/dist/chat/project_slug.d.ts.map +1 -0
- package/dist/chat/project_slug.js +78 -0
- package/dist/chat/project_slug.js.map +1 -0
- package/dist/chat/semantic_graph_ingest.d.ts +31 -0
- package/dist/chat/semantic_graph_ingest.d.ts.map +1 -0
- package/dist/chat/semantic_graph_ingest.js +84 -0
- package/dist/chat/semantic_graph_ingest.js.map +1 -0
- package/dist/chat/semantic_graph_inject.d.ts +25 -0
- package/dist/chat/semantic_graph_inject.d.ts.map +1 -0
- package/dist/chat/semantic_graph_inject.js +64 -0
- package/dist/chat/semantic_graph_inject.js.map +1 -0
- package/dist/chat/server.d.ts +50 -0
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +1905 -54
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/spec_extract.d.ts +1 -2
- package/dist/chat/spec_extract.d.ts.map +1 -1
- package/dist/chat/spec_extract.js +18 -59
- package/dist/chat/spec_extract.js.map +1 -1
- package/dist/chat/spec_plan.d.ts +1 -2
- package/dist/chat/spec_plan.d.ts.map +1 -1
- package/dist/chat/spec_plan.js +15 -60
- package/dist/chat/spec_plan.js.map +1 -1
- package/dist/chat/tools/app_backend_dispatch.d.ts +39 -0
- package/dist/chat/tools/app_backend_dispatch.d.ts.map +1 -0
- package/dist/chat/tools/app_backend_dispatch.js +239 -0
- package/dist/chat/tools/app_backend_dispatch.js.map +1 -0
- package/dist/chat/tools/audit_consumers.d.ts +66 -0
- package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
- package/dist/chat/tools/audit_consumers.js +231 -0
- package/dist/chat/tools/audit_consumers.js.map +1 -0
- package/dist/chat/tools/fs_editor.d.ts +11 -0
- package/dist/chat/tools/fs_editor.d.ts.map +1 -0
- package/dist/chat/tools/fs_editor.js +162 -0
- package/dist/chat/tools/fs_editor.js.map +1 -0
- package/dist/chat/tools/git.d.ts +24 -0
- package/dist/chat/tools/git.d.ts.map +1 -1
- package/dist/chat/tools/git.js +78 -0
- package/dist/chat/tools/git.js.map +1 -1
- package/dist/chat/tools/keys.d.ts +9 -0
- package/dist/chat/tools/keys.d.ts.map +1 -0
- package/dist/chat/tools/keys.js +152 -0
- package/dist/chat/tools/keys.js.map +1 -0
- package/dist/chat/tools/misc_verbs.d.ts +36 -0
- package/dist/chat/tools/misc_verbs.d.ts.map +1 -0
- package/dist/chat/tools/misc_verbs.js +405 -0
- package/dist/chat/tools/misc_verbs.js.map +1 -0
- package/dist/chat/tools/nac3_invoke.d.ts +53 -0
- package/dist/chat/tools/nac3_invoke.d.ts.map +1 -0
- package/dist/chat/tools/nac3_invoke.js +886 -0
- package/dist/chat/tools/nac3_invoke.js.map +1 -0
- package/dist/chat/tools/pizarron.d.ts +40 -0
- package/dist/chat/tools/pizarron.d.ts.map +1 -0
- package/dist/chat/tools/pizarron.js +123 -0
- package/dist/chat/tools/pizarron.js.map +1 -0
- package/dist/chat/tools/project_lifecycle.d.ts +24 -0
- package/dist/chat/tools/project_lifecycle.d.ts.map +1 -0
- package/dist/chat/tools/project_lifecycle.js +184 -0
- package/dist/chat/tools/project_lifecycle.js.map +1 -0
- package/dist/chat/tools/reader.d.ts.map +1 -1
- package/dist/chat/tools/reader.js +144 -1
- package/dist/chat/tools/reader.js.map +1 -1
- package/dist/chat/tools/shell.d.ts +58 -0
- package/dist/chat/tools/shell.d.ts.map +1 -0
- package/dist/chat/tools/shell.js +253 -0
- package/dist/chat/tools/shell.js.map +1 -0
- package/dist/chat/tools/workflow.d.ts +45 -0
- package/dist/chat/tools/workflow.d.ts.map +1 -0
- package/dist/chat/tools/workflow.js +404 -0
- package/dist/chat/tools/workflow.js.map +1 -0
- package/dist/chat/tools.d.ts +27 -0
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +362 -13
- package/dist/chat/tools.js.map +1 -1
- package/dist/chat/workflow_inject.d.ts +52 -0
- package/dist/chat/workflow_inject.d.ts.map +1 -0
- package/dist/chat/workflow_inject.js +346 -0
- package/dist/chat/workflow_inject.js.map +1 -0
- package/dist/commands/agent.d.ts +22 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +190 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/approve.d.ts +32 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +198 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/block.d.ts +28 -0
- package/dist/commands/block.d.ts.map +1 -0
- package/dist/commands/block.js +189 -0
- package/dist/commands/block.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +35 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +205 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/brain.d.ts +17 -0
- package/dist/commands/brain.d.ts.map +1 -0
- package/dist/commands/brain.js +129 -0
- package/dist/commands/brain.js.map +1 -0
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +112 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/clarify.d.ts +30 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +671 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/discover.d.ts +30 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +178 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doctor.js +26 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctrine.d.ts +24 -0
- package/dist/commands/doctrine.d.ts.map +1 -0
- package/dist/commands/doctrine.js +106 -0
- package/dist/commands/doctrine.js.map +1 -0
- package/dist/commands/doctrines.d.ts +21 -0
- package/dist/commands/doctrines.d.ts.map +1 -0
- package/dist/commands/doctrines.js +158 -0
- package/dist/commands/doctrines.js.map +1 -0
- package/dist/commands/graph.d.ts +21 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +363 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/keys_setup.d.ts.map +1 -1
- package/dist/commands/keys_setup.js +80 -0
- package/dist/commands/keys_setup.js.map +1 -1
- package/dist/commands/legacy-audit.d.ts +34 -0
- package/dist/commands/legacy-audit.d.ts.map +1 -0
- package/dist/commands/legacy-audit.js +270 -0
- package/dist/commands/legacy-audit.js.map +1 -0
- package/dist/commands/lessons.d.ts +28 -0
- package/dist/commands/lessons.d.ts.map +1 -0
- package/dist/commands/lessons.js +309 -0
- package/dist/commands/lessons.js.map +1 -0
- package/dist/commands/license.d.ts.map +1 -1
- package/dist/commands/license.js +56 -1
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/limits.d.ts +15 -0
- package/dist/commands/limits.d.ts.map +1 -0
- package/dist/commands/limits.js +51 -0
- package/dist/commands/limits.js.map +1 -0
- package/dist/commands/manifest-cli.d.ts +12 -0
- package/dist/commands/manifest-cli.d.ts.map +1 -0
- package/dist/commands/manifest-cli.js +42 -0
- package/dist/commands/manifest-cli.js.map +1 -0
- package/dist/commands/mcp.d.ts +24 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +163 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/nac3.d.ts +22 -0
- package/dist/commands/nac3.d.ts.map +1 -0
- package/dist/commands/nac3.js +125 -0
- package/dist/commands/nac3.js.map +1 -0
- package/dist/commands/operate.d.ts +22 -0
- package/dist/commands/operate.d.ts.map +1 -0
- package/dist/commands/operate.js +523 -0
- package/dist/commands/operate.js.map +1 -0
- package/dist/commands/qa.d.ts +24 -0
- package/dist/commands/qa.d.ts.map +1 -0
- package/dist/commands/qa.js +349 -0
- package/dist/commands/qa.js.map +1 -0
- package/dist/commands/spec.d.ts +38 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +256 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/support.d.ts +22 -0
- package/dist/commands/support.d.ts.map +1 -0
- package/dist/commands/support.js +165 -0
- package/dist/commands/support.js.map +1 -0
- package/dist/commands/triage.d.ts +34 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +228 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/vault-inventory.d.ts +30 -0
- package/dist/commands/vault-inventory.d.ts.map +1 -0
- package/dist/commands/vault-inventory.js +222 -0
- package/dist/commands/vault-inventory.js.map +1 -0
- package/dist/commands/vault.d.ts.map +1 -1
- package/dist/commands/vault.js +5 -0
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/voice.d.ts.map +1 -1
- package/dist/commands/voice.js +47 -4
- package/dist/commands/voice.js.map +1 -1
- package/dist/commands/workflow-coverage.d.ts +30 -0
- package/dist/commands/workflow-coverage.d.ts.map +1 -0
- package/dist/commands/workflow-coverage.js +138 -0
- package/dist/commands/workflow-coverage.js.map +1 -0
- package/dist/core/ansi_strip.d.ts +39 -0
- package/dist/core/ansi_strip.d.ts.map +1 -0
- package/dist/core/ansi_strip.js +71 -0
- package/dist/core/ansi_strip.js.map +1 -0
- package/dist/core/audit_log.d.ts +43 -0
- package/dist/core/audit_log.d.ts.map +1 -0
- package/dist/core/audit_log.js +80 -0
- package/dist/core/audit_log.js.map +1 -0
- package/dist/core/brain_config.d.ts +33 -0
- package/dist/core/brain_config.d.ts.map +1 -0
- package/dist/core/brain_config.js +132 -0
- package/dist/core/brain_config.js.map +1 -0
- package/dist/core/budget.d.ts +96 -0
- package/dist/core/budget.d.ts.map +1 -0
- package/dist/core/budget.js +300 -0
- package/dist/core/budget.js.map +1 -0
- package/dist/core/cost_meter.d.ts +35 -0
- package/dist/core/cost_meter.d.ts.map +1 -0
- package/dist/core/cost_meter.js +111 -0
- package/dist/core/cost_meter.js.map +1 -0
- package/dist/core/cost_router.d.ts +106 -0
- package/dist/core/cost_router.d.ts.map +1 -0
- package/dist/core/cost_router.js +465 -0
- package/dist/core/cost_router.js.map +1 -0
- package/dist/core/doctrine_resolver.d.ts +23 -0
- package/dist/core/doctrine_resolver.d.ts.map +1 -0
- package/dist/core/doctrine_resolver.js +108 -0
- package/dist/core/doctrine_resolver.js.map +1 -0
- package/dist/core/error_catalog.d.ts +80 -0
- package/dist/core/error_catalog.d.ts.map +1 -0
- package/dist/core/error_catalog.js +168 -0
- package/dist/core/error_catalog.js.map +1 -0
- package/dist/core/error_formatter.d.ts +30 -0
- package/dist/core/error_formatter.d.ts.map +1 -0
- package/dist/core/error_formatter.js +155 -0
- package/dist/core/error_formatter.js.map +1 -0
- package/dist/core/incomplete_detector.d.ts +51 -0
- package/dist/core/incomplete_detector.d.ts.map +1 -0
- package/dist/core/incomplete_detector.js +140 -0
- package/dist/core/incomplete_detector.js.map +1 -0
- package/dist/core/learnings_client.d.ts +104 -0
- package/dist/core/learnings_client.d.ts.map +1 -0
- package/dist/core/learnings_client.js +262 -0
- package/dist/core/learnings_client.js.map +1 -0
- package/dist/core/limits_config.d.ts +76 -0
- package/dist/core/limits_config.d.ts.map +1 -0
- package/dist/core/limits_config.js +297 -0
- package/dist/core/limits_config.js.map +1 -0
- package/dist/core/provider_keys.d.ts +35 -0
- package/dist/core/provider_keys.d.ts.map +1 -0
- package/dist/core/provider_keys.js +260 -0
- package/dist/core/provider_keys.js.map +1 -0
- package/dist/core/reasoning_gate.d.ts +72 -0
- package/dist/core/reasoning_gate.d.ts.map +1 -0
- package/dist/core/reasoning_gate.js +192 -0
- package/dist/core/reasoning_gate.js.map +1 -0
- package/dist/core/shell_classifier.d.ts +49 -0
- package/dist/core/shell_classifier.d.ts.map +1 -0
- package/dist/core/shell_classifier.js +159 -0
- package/dist/core/shell_classifier.js.map +1 -0
- package/dist/core/sq_resolver.d.ts +14 -0
- package/dist/core/sq_resolver.d.ts.map +1 -0
- package/dist/core/sq_resolver.js +230 -0
- package/dist/core/sq_resolver.js.map +1 -0
- package/dist/core/truncation_detector.d.ts +68 -0
- package/dist/core/truncation_detector.d.ts.map +1 -0
- package/dist/core/truncation_detector.js +115 -0
- package/dist/core/truncation_detector.js.map +1 -0
- package/dist/core/turn_classifier.d.ts +62 -0
- package/dist/core/turn_classifier.d.ts.map +1 -0
- package/dist/core/turn_classifier.js +213 -0
- package/dist/core/turn_classifier.js.map +1 -0
- package/dist/core/whats_new.d.ts +42 -0
- package/dist/core/whats_new.d.ts.map +1 -0
- package/dist/core/whats_new.js +214 -0
- package/dist/core/whats_new.js.map +1 -0
- package/dist/deploy/adapter.d.ts +93 -0
- package/dist/deploy/adapter.d.ts.map +1 -0
- package/dist/deploy/adapter.js +42 -0
- package/dist/deploy/adapter.js.map +1 -0
- package/dist/deploy/aws_adapter.d.ts +28 -0
- package/dist/deploy/aws_adapter.d.ts.map +1 -0
- package/dist/deploy/aws_adapter.js +98 -0
- package/dist/deploy/aws_adapter.js.map +1 -0
- package/dist/deploy/cloudflare.d.ts +24 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -0
- package/dist/deploy/cloudflare.js +169 -0
- package/dist/deploy/cloudflare.js.map +1 -0
- package/dist/docs/LIMITED_RESPONSIBILITY.md +216 -0
- package/dist/docs/PRIVACY_POLICY.md +169 -0
- package/dist/docs/SQ.md +1397 -0
- package/dist/docs/SQ_BY_STEP.yaml +147 -0
- package/dist/docs/doctrine/accessibility.md +78 -0
- package/dist/docs/doctrine/agent-orchestrator.md +76 -0
- package/dist/docs/doctrine/byok-vs-managed.md +81 -0
- package/dist/docs/doctrine/cost-router-escalation.md +73 -0
- package/dist/docs/doctrine/explain-results.md +90 -0
- package/dist/docs/doctrine/g-doc.md +46 -0
- package/dist/docs/doctrine/gates.md +21 -0
- package/dist/docs/doctrine/lessons-workflow.md +68 -0
- package/dist/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
- package/dist/docs/doctrine/nac3-attrs.md +23 -0
- package/dist/docs/doctrine/office-tools.md +102 -0
- package/dist/docs/doctrine/pizarron.md +52 -0
- package/dist/docs/doctrine/r8-modal.md +60 -0
- package/dist/docs/doctrine/safety-refusals.md +73 -0
- package/dist/docs/doctrine/verb-composition.md +68 -0
- package/dist/docs/doctrine/workflow-phases.md +108 -0
- package/dist/docs/doctrine/workflow.md +58 -0
- package/dist/docs/doctrine/yf-commands.md +49 -0
- package/dist/json/query.d.ts +38 -0
- package/dist/json/query.d.ts.map +1 -0
- package/dist/json/query.js +177 -0
- package/dist/json/query.js.map +1 -0
- package/dist/license/hito4_client.d.ts +19 -0
- package/dist/license/hito4_client.d.ts.map +1 -1
- package/dist/license/hito4_client.js +110 -0
- package/dist/license/hito4_client.js.map +1 -1
- package/dist/license/index.d.ts.map +1 -1
- package/dist/license/index.js +7 -0
- package/dist/license/index.js.map +1 -1
- package/dist/license/sync.d.ts +54 -0
- package/dist/license/sync.d.ts.map +1 -0
- package/dist/license/sync.js +138 -0
- package/dist/license/sync.js.map +1 -0
- package/dist/llm/cohere_client.d.ts +81 -0
- package/dist/llm/cohere_client.d.ts.map +1 -0
- package/dist/llm/cohere_client.js +195 -0
- package/dist/llm/cohere_client.js.map +1 -0
- package/dist/llm/deepseek_client.d.ts +63 -0
- package/dist/llm/deepseek_client.d.ts.map +1 -0
- package/dist/llm/deepseek_client.js +188 -0
- package/dist/llm/deepseek_client.js.map +1 -0
- package/dist/llm/gemini_client.d.ts +78 -0
- package/dist/llm/gemini_client.d.ts.map +1 -0
- package/dist/llm/gemini_client.js +189 -0
- package/dist/llm/gemini_client.js.map +1 -0
- package/dist/llm/managed_client.d.ts +70 -0
- package/dist/llm/managed_client.d.ts.map +1 -0
- package/dist/llm/managed_client.js +251 -0
- package/dist/llm/managed_client.js.map +1 -0
- package/dist/llm/mistral_client.d.ts +54 -0
- package/dist/llm/mistral_client.d.ts.map +1 -0
- package/dist/llm/mistral_client.js +174 -0
- package/dist/llm/mistral_client.js.map +1 -0
- package/dist/llm/multi_provider_client.d.ts +57 -0
- package/dist/llm/multi_provider_client.d.ts.map +1 -0
- package/dist/llm/multi_provider_client.js +109 -0
- package/dist/llm/multi_provider_client.js.map +1 -0
- package/dist/llm/openai_client.d.ts +77 -0
- package/dist/llm/openai_client.d.ts.map +1 -0
- package/dist/llm/openai_client.js +200 -0
- package/dist/llm/openai_client.js.map +1 -0
- package/dist/llm/xai_client.d.ts +51 -0
- package/dist/llm/xai_client.d.ts.map +1 -0
- package/dist/llm/xai_client.js +174 -0
- package/dist/llm/xai_client.js.map +1 -0
- package/dist/mcp/bridge_registry.d.ts +77 -0
- package/dist/mcp/bridge_registry.d.ts.map +1 -0
- package/dist/mcp/bridge_registry.js +220 -0
- package/dist/mcp/bridge_registry.js.map +1 -0
- package/dist/mcp/config.d.ts +25 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +116 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/protocol_client.d.ts +63 -0
- package/dist/mcp/protocol_client.d.ts.map +1 -0
- package/dist/mcp/protocol_client.js +340 -0
- package/dist/mcp/protocol_client.js.map +1 -0
- package/dist/mcp/state.d.ts +38 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +144 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/migrate/ai-decorator.d.ts.map +1 -1
- package/dist/migrate/ai-decorator.js +33 -145
- package/dist/migrate/ai-decorator.js.map +1 -1
- package/dist/nac3/approval_queue.d.ts +36 -0
- package/dist/nac3/approval_queue.d.ts.map +1 -0
- package/dist/nac3/approval_queue.js +105 -0
- package/dist/nac3/approval_queue.js.map +1 -0
- package/dist/nac3/backend_tools.d.ts +89 -0
- package/dist/nac3/backend_tools.d.ts.map +1 -0
- package/dist/nac3/backend_tools.js +271 -0
- package/dist/nac3/backend_tools.js.map +1 -0
- package/dist/nac3/dispatch_log.d.ts +35 -0
- package/dist/nac3/dispatch_log.d.ts.map +1 -0
- package/dist/nac3/dispatch_log.js +126 -0
- package/dist/nac3/dispatch_log.js.map +1 -0
- package/dist/nac3/internal_manifest.d.ts +62 -0
- package/dist/nac3/internal_manifest.d.ts.map +1 -0
- package/dist/nac3/internal_manifest.js +1846 -0
- package/dist/nac3/internal_manifest.js.map +1 -0
- package/dist/nac3/manifest_lazy.d.ts +71 -0
- package/dist/nac3/manifest_lazy.d.ts.map +1 -0
- package/dist/nac3/manifest_lazy.js +141 -0
- package/dist/nac3/manifest_lazy.js.map +1 -0
- package/dist/nac3/verb_tier_map.d.ts +80 -0
- package/dist/nac3/verb_tier_map.d.ts.map +1 -0
- package/dist/nac3/verb_tier_map.js +159 -0
- package/dist/nac3/verb_tier_map.js.map +1 -0
- package/dist/office/excel.d.ts +110 -0
- package/dist/office/excel.d.ts.map +1 -0
- package/dist/office/excel.js +276 -0
- package/dist/office/excel.js.map +1 -0
- package/dist/office/pdf.d.ts +35 -0
- package/dist/office/pdf.d.ts.map +1 -0
- package/dist/office/pdf.js +70 -0
- package/dist/office/pdf.js.map +1 -0
- package/dist/office/word.d.ts +64 -0
- package/dist/office/word.d.ts.map +1 -0
- package/dist/office/word.js +243 -0
- package/dist/office/word.js.map +1 -0
- package/dist/qa/brain_matrix/ab_runner.d.ts +44 -0
- package/dist/qa/brain_matrix/ab_runner.d.ts.map +1 -0
- package/dist/qa/brain_matrix/ab_runner.js +144 -0
- package/dist/qa/brain_matrix/ab_runner.js.map +1 -0
- package/dist/qa/brain_matrix/brains.json +80 -0
- package/dist/qa/brain_matrix/compare.d.ts +27 -0
- package/dist/qa/brain_matrix/compare.d.ts.map +1 -0
- package/dist/qa/brain_matrix/compare.js +122 -0
- package/dist/qa/brain_matrix/compare.js.map +1 -0
- package/dist/qa/brain_matrix/fake_brain.d.ts +36 -0
- package/dist/qa/brain_matrix/fake_brain.d.ts.map +1 -0
- package/dist/qa/brain_matrix/fake_brain.js +27 -0
- package/dist/qa/brain_matrix/fake_brain.js.map +1 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_intent.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_announce_no_speak_default.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_consecutive_announces.json +37 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_action.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_with_shortcut.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_announce_min_tool_calls.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_invoke_happy_path.json +65 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_no_invent_without_backend.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_app_schema_fail_recover.json +48 -0
- package/dist/qa/brain_matrix/fixtures/scenario_approval_modal_no_redundancy.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_args_redacted_in_audit.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_consumers_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_audit_log_on_destructive.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_brain_explains_after_invoke.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_byok_on_managed_brain_overflow.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_byok_required_policy.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_concise_no_loop.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_consult_nac_spec_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_contradiction_rfp_cost.json +38 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_attachment_frontier.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_escalation_explicit.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_cost_router_idle_reset.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_csv_via_excel_read.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_destructive_no_text_confirm.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_diff_explains_changes.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_after_unknown_intent.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_a11y.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_agent_orchestrator.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_byok_vs_managed.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_cost_router.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_g_doc.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_gates.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_lessons_workflow.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_mcp_lifecycle.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_nac3_attrs.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_office.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_pizarron.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_r8_modal.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_workflow_phases.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_yf_commands.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_explain_results.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_safety_refusals.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_verb_composition.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_eco_defers_complex.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_eco_short_query.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_list_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_no_secret_leak.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_env_secret_suppression_en.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_handles_csv_refusal.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_sheet_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_append_then_list.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_list_sheets_first.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_excel_sheet_named.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_explain_voice_yes.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_explains_forge_error.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_focus_after_modal_open.json +29 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_find_with_glob.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_mkdir_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_move_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_read_handles_missing.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_fs_stat_before_read.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_generated_app_nac3_default.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_branch_list_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_diff_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_log_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_pull_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_push_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_show_metadata_only.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_branch_combo.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_git_status_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_github_clone_repo_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_github_create_repo_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_id_format_in_reply.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_idempotent_adenda.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_query_history.json +29 -0
- package/dist/qa/brain_matrix/fixtures/scenario_iterations_tracker_acknowledge.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_handles_malformed.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_parse_intent_en.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_query_extract.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_json_stringify_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_set_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_keys_status_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_complex_verb.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_doctrine_only_when_needed.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lazy_simple_verb.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lesson_recall_overrides.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_restart_app_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_run_app_intent_en.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_lifecycle_stop_app_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_long_doctrine_no_truncate.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_manifest_read_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_manual_open_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_bridge_unreachable_graceful.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_disabled_bridge_no_verbs.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_discover_tools_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invariant_1_no_verbs.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_two_hop.json +68 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_with_auth_loaded.json +76 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_revoked_token_graceful.json +33 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_intent.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_set_creds_no_token_arg.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_show_tools_before_invoke.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_toggle_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_multi_turn_clarify_then_act.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_attrs_doctrine.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_discover_schemas_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_nac3_required_attr_missing.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_bare_ok_after_destructive.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_global_learnings_no_recall.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_id_leak_in_reply.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_invent_verb.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_loop_after_repeated_fail.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_password_echo.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_all_current.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_npm_outdated_then_explain.json +35 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_read_intent.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_write_required_args.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_overwrite_explicit.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_word_write_intent.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_panel_open_settings_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_panel_send_message_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pdf_read_intent.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_clear_tab_explicit_close.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_chart.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_for_long_table.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_read_tab_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_pizarron_render_not_inline.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_read_file.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_verb_over_shell.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_prefer_native_workflow_state.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_project_init_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_project_set_root_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_promote_lesson_after_correction.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_r8_destructive_shell_exec.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_read_then_parse_order.json +36 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_jump_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_bookmark_set_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_for_long_doc.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_list_docs_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_next_block_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_read_section_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_recap_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_reader_search_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_blanket_chmod_777.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_bypass_approval_modal.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_delete_critical_en.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_disable_vault_encryption.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_drop_database.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_force_push_main_en.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_leak_vault_en.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_modify_node_modules.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_skip_hooks_en.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_delete_critical.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_refuses_to_leak_vault.json +18 -0
- package/dist/qa/brain_matrix/fixtures/scenario_respects_global_learnings.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_respects_workflow_gate_g2.json +39 -0
- package/dist/qa/brain_matrix/fixtures/scenario_revoke_lesson_request.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sq_rules_active.json +30 -0
- package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_text_diff_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_truncated_response_retry.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_unknown_command_clarify.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_compose.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_handles_invalid.json +27 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_intent_en.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_parse_then_inspect_query.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_url_then_stringify_order.json +34 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_just_greets.json +17 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_overrides_proceeds.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_user_revokes_in_middle.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_voice_open_pizarron.json +21 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_outline_extraction.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_overwrite_explicit.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_word_section_count.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_doctrine.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_done_specs.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_intent_capture.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_jump_block.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_phase_v_step_15.json +41 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_run_step_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_set_intent.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_injection.json +32 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_state_recovers_after_clarify.json +25 -0
- package/dist/qa/brain_matrix/fixtures/scenario_workflow_step_1_intake.json +24 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_command_doctrine.json +56 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_doctrine_list_intent.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_yf_qa_compare_intent.json +17 -0
- package/dist/qa/brain_matrix/invariants.d.ts +18 -0
- package/dist/qa/brain_matrix/invariants.d.ts.map +1 -0
- package/dist/qa/brain_matrix/invariants.js +333 -0
- package/dist/qa/brain_matrix/invariants.js.map +1 -0
- package/dist/qa/brain_matrix/report.d.ts +12 -0
- package/dist/qa/brain_matrix/report.d.ts.map +1 -0
- package/dist/qa/brain_matrix/report.js +131 -0
- package/dist/qa/brain_matrix/report.js.map +1 -0
- package/dist/qa/brain_matrix/runner.d.ts +31 -0
- package/dist/qa/brain_matrix/runner.d.ts.map +1 -0
- package/dist/qa/brain_matrix/runner.js +561 -0
- package/dist/qa/brain_matrix/runner.js.map +1 -0
- package/dist/qa/brain_matrix/types.d.ts +180 -0
- package/dist/qa/brain_matrix/types.d.ts.map +1 -0
- package/dist/qa/brain_matrix/types.js +2 -0
- package/dist/qa/brain_matrix/types.js.map +1 -0
- package/dist/qa/brain_matrix/validate_scenario.d.ts +23 -0
- package/dist/qa/brain_matrix/validate_scenario.d.ts.map +1 -0
- package/dist/qa/brain_matrix/validate_scenario.js +128 -0
- package/dist/qa/brain_matrix/validate_scenario.js.map +1 -0
- package/dist/support/github_dispatcher.d.ts +36 -0
- package/dist/support/github_dispatcher.d.ts.map +1 -0
- package/dist/support/github_dispatcher.js +292 -0
- package/dist/support/github_dispatcher.js.map +1 -0
- package/dist/support/reports.d.ts +31 -0
- package/dist/support/reports.d.ts.map +1 -0
- package/dist/support/reports.js +162 -0
- package/dist/support/reports.js.map +1 -0
- package/dist/telemetry/usage.d.ts +67 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +208 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/config.d.ts +12 -0
- package/dist/voice/config.d.ts.map +1 -1
- package/dist/voice/config.js +25 -2
- package/dist/voice/config.js.map +1 -1
- package/dist/voice/providers/google.d.ts +9 -0
- package/dist/voice/providers/google.d.ts.map +1 -1
- package/dist/voice/providers/google.js +197 -28
- package/dist/voice/providers/google.js.map +1 -1
- package/dist/voice/router.d.ts +10 -0
- package/dist/voice/router.d.ts.map +1 -1
- package/dist/voice/router.js +39 -20
- package/dist/voice/router.js.map +1 -1
- package/dist/voice/types.d.ts +5 -2
- package/dist/voice/types.d.ts.map +1 -1
- package/dist/voice/types.js.map +1 -1
- package/dist/workflow/phase_inference.d.ts +56 -0
- package/dist/workflow/phase_inference.d.ts.map +1 -0
- package/dist/workflow/phase_inference.js +107 -0
- package/dist/workflow/phase_inference.js.map +1 -0
- package/dist/workflow/state.d.ts +238 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +213 -0
- package/dist/workflow/state.js.map +1 -0
- package/docs/SQ.md +1397 -0
- package/docs/SQ_BY_STEP.yaml +147 -0
- package/docs/doctrine/accessibility.md +78 -0
- package/docs/doctrine/agent-orchestrator.md +76 -0
- package/docs/doctrine/byok-vs-managed.md +81 -0
- package/docs/doctrine/cost-router-escalation.md +73 -0
- package/docs/doctrine/explain-results.md +90 -0
- package/docs/doctrine/g-doc.md +46 -0
- package/docs/doctrine/gates.md +21 -0
- package/docs/doctrine/lessons-workflow.md +68 -0
- package/docs/doctrine/mcp-bridge-lifecycle.md +75 -0
- package/docs/doctrine/nac3-attrs.md +23 -0
- package/docs/doctrine/office-tools.md +102 -0
- package/docs/doctrine/pizarron.md +52 -0
- package/docs/doctrine/r8-modal.md +60 -0
- package/docs/doctrine/safety-refusals.md +73 -0
- package/docs/doctrine/verb-composition.md +68 -0
- package/docs/doctrine/workflow-phases.md +108 -0
- package/docs/doctrine/workflow.md +58 -0
- package/docs/doctrine/yf-commands.md +49 -0
- package/package.json +20 -14
- package/src/i18n/catalogs/ar.json +55 -10
- package/src/i18n/catalogs/de.json +55 -10
- package/src/i18n/catalogs/en.json +66 -1
- package/src/i18n/catalogs/es.json +66 -1
- package/src/i18n/catalogs/fr.json +55 -10
- package/src/i18n/catalogs/hi.json +55 -10
- package/src/i18n/catalogs/it.json +55 -10
- package/src/i18n/catalogs/ja.json +55 -10
- package/src/i18n/catalogs/pt.json +55 -10
- package/src/i18n/catalogs/zh.json +55 -10
- package/templates/nextjs-app/README.md +48 -0
- package/templates/nextjs-app/next.config.js +8 -0
- package/templates/nextjs-app/package.json +33 -0
- package/templates/nextjs-app/src/app/globals.css +43 -0
- package/templates/nextjs-app/src/app/layout.tsx +29 -0
- package/templates/nextjs-app/src/app/page.tsx +63 -0
- package/templates/nextjs-app/src/nac/manifest.ts +36 -0
- package/templates/nextjs-app/tsconfig.json +21 -0
- package/templates/nextjs-app/yujin.forge.json +11 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F101 slice 5 sub-slice 1 -- persistent enabled-state for MCP bridges.
|
|
3
|
+
*
|
|
4
|
+
* Stores `{bridge_id: {enabled, updated_at}}` at
|
|
5
|
+
* ~/.yujin-forge/mcp-state.json. discoverBridges() merges the
|
|
6
|
+
* state into each discovered bridge so a bridge disabled here
|
|
7
|
+
* shows as `enabled: false` and the LLM stub omits its proxied
|
|
8
|
+
* tools on the next chat turn.
|
|
9
|
+
*
|
|
10
|
+
* Atomicity: writes go to mcp-state.json.tmp first then rename
|
|
11
|
+
* over the final path. Concurrent yf processes will not corrupt
|
|
12
|
+
* the file (the rename is atomic on POSIX + Windows >= 10).
|
|
13
|
+
*
|
|
14
|
+
* Per-process cache (5s) so a chat turn that calls
|
|
15
|
+
* getActiveBridges() multiple times pays the disk read only
|
|
16
|
+
* once.
|
|
17
|
+
*
|
|
18
|
+
* ASCII-only.
|
|
19
|
+
*/
|
|
20
|
+
import { promises as fs } from 'node:fs';
|
|
21
|
+
import path from 'node:path';
|
|
22
|
+
import { homedir } from 'node:os';
|
|
23
|
+
const HOME_DIR = '.yujin-forge';
|
|
24
|
+
const STATE_FILE = 'mcp-state.json';
|
|
25
|
+
const STATE_VERSION = 1;
|
|
26
|
+
function statePath() {
|
|
27
|
+
return path.join(homedir(), HOME_DIR, STATE_FILE);
|
|
28
|
+
}
|
|
29
|
+
function emptyState() {
|
|
30
|
+
return { version: STATE_VERSION, bridges: {} };
|
|
31
|
+
}
|
|
32
|
+
/* ====================================================================
|
|
33
|
+
* Read path
|
|
34
|
+
* ================================================================== */
|
|
35
|
+
let _readCache = null;
|
|
36
|
+
const READ_CACHE_TTL_MS = 5 * 1000;
|
|
37
|
+
export async function readState(opts = {}) {
|
|
38
|
+
if (!opts.refresh && _readCache && Date.now() - _readCache.at < READ_CACHE_TTL_MS) {
|
|
39
|
+
return _readCache.state;
|
|
40
|
+
}
|
|
41
|
+
const p = statePath();
|
|
42
|
+
let raw;
|
|
43
|
+
try {
|
|
44
|
+
raw = await fs.readFile(p, 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
/* File missing -> empty state. Not an error -- the first run
|
|
48
|
+
* has no state yet. */
|
|
49
|
+
_readCache = { state: emptyState(), at: Date.now() };
|
|
50
|
+
return _readCache.state;
|
|
51
|
+
}
|
|
52
|
+
let parsed;
|
|
53
|
+
try {
|
|
54
|
+
parsed = JSON.parse(raw);
|
|
55
|
+
if (typeof parsed.version !== 'number' || !parsed.bridges || typeof parsed.bridges !== 'object') {
|
|
56
|
+
parsed = emptyState();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
/* Corrupt JSON -> empty state. The next write will rebuild
|
|
61
|
+
* the file. We do not surface the parse error here because
|
|
62
|
+
* MCP state is a soft setting; bridges still discover. */
|
|
63
|
+
parsed = emptyState();
|
|
64
|
+
}
|
|
65
|
+
_readCache = { state: parsed, at: Date.now() };
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
/** Returns whether a bridge is enabled per persisted state.
|
|
69
|
+
* Default true when the bridge has no entry yet. */
|
|
70
|
+
export async function isEnabled(bridge_id) {
|
|
71
|
+
const s = await readState();
|
|
72
|
+
const entry = s.bridges[bridge_id];
|
|
73
|
+
if (!entry)
|
|
74
|
+
return true;
|
|
75
|
+
return entry.enabled !== false;
|
|
76
|
+
}
|
|
77
|
+
/* ====================================================================
|
|
78
|
+
* Write path -- atomic via tmp + rename
|
|
79
|
+
* ================================================================== */
|
|
80
|
+
async function ensureDir() {
|
|
81
|
+
const dir = path.join(homedir(), HOME_DIR);
|
|
82
|
+
await fs.mkdir(dir, { recursive: true });
|
|
83
|
+
return dir;
|
|
84
|
+
}
|
|
85
|
+
async function writeStateAtomic(state) {
|
|
86
|
+
await ensureDir();
|
|
87
|
+
const finalPath = statePath();
|
|
88
|
+
const tmpPath = finalPath + '.tmp';
|
|
89
|
+
const body = JSON.stringify(state, null, 2);
|
|
90
|
+
await fs.writeFile(tmpPath, body, 'utf-8');
|
|
91
|
+
/* fsync the data before rename so a power loss does not leave
|
|
92
|
+
* a half-written tmp + a missing final. */
|
|
93
|
+
try {
|
|
94
|
+
const fh = await fs.open(tmpPath, 'r');
|
|
95
|
+
await fh.sync();
|
|
96
|
+
await fh.close();
|
|
97
|
+
}
|
|
98
|
+
catch { /* sync best-effort; rename below still proceeds */ }
|
|
99
|
+
/* Cross-platform atomic replace. POSIX rename() handles overwrite
|
|
100
|
+
* natively. Windows EPERM/EEXIST when the destination exists and
|
|
101
|
+
* a file handle lingers; fall back to unlink + rename. */
|
|
102
|
+
try {
|
|
103
|
+
await fs.rename(tmpPath, finalPath);
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
const code = e.code;
|
|
107
|
+
if (code === 'EPERM' || code === 'EEXIST') {
|
|
108
|
+
try {
|
|
109
|
+
await fs.unlink(finalPath);
|
|
110
|
+
}
|
|
111
|
+
catch { /* swallow ENOENT */ }
|
|
112
|
+
await fs.rename(tmpPath, finalPath);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
throw e;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/* Bust the read cache so the next isEnabled() reads the fresh
|
|
119
|
+
* state. */
|
|
120
|
+
_readCache = null;
|
|
121
|
+
}
|
|
122
|
+
export async function setBridgeEnabled(bridge_id, enabled) {
|
|
123
|
+
const state = await readState({ refresh: true });
|
|
124
|
+
state.bridges[bridge_id] = {
|
|
125
|
+
enabled,
|
|
126
|
+
updated_at: new Date().toISOString(),
|
|
127
|
+
};
|
|
128
|
+
await writeStateAtomic(state);
|
|
129
|
+
}
|
|
130
|
+
export async function removeBridge(bridge_id) {
|
|
131
|
+
const state = await readState({ refresh: true });
|
|
132
|
+
delete state.bridges[bridge_id];
|
|
133
|
+
await writeStateAtomic(state);
|
|
134
|
+
}
|
|
135
|
+
/* ====================================================================
|
|
136
|
+
* Test helpers
|
|
137
|
+
* ================================================================== */
|
|
138
|
+
export function _resetStateCache() {
|
|
139
|
+
_readCache = null;
|
|
140
|
+
}
|
|
141
|
+
export function _statePathForTests() {
|
|
142
|
+
return statePath();
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/mcp/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,QAAQ,GAAI,cAAc,CAAC;AACjC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,aAAa,GAAG,CAAC,CAAC;AAYxB,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACjD,CAAC;AAED;;wEAEwE;AAExE,IAAI,UAAU,GAAkD,IAAI,CAAC;AACrE,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA8B,EAAE;IAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAClF,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP;+BACuB;QACvB,UAAU,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACrD,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAC5C,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChG,MAAM,GAAG,UAAU,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP;;kEAE0D;QAC1D,MAAM,GAAG,UAAU,EAAE,CAAC;IACxB,CAAC;IACD,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;qDACqD;AACrD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAiB;IAC/C,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;AACjC,CAAC;AAED;;wEAEwE;AAExE,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAsB;IACpD,MAAM,SAAS,EAAE,CAAC;IAClB,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C;+CAC2C;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC,CAAC,mDAAmD,CAAC,CAAC;IAC/D;;8DAE0D;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,GAAI,CAAuB,CAAC,IAAI,CAAC;QAC3C,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC;gBAAC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAClE,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD;gBACY;IACZ,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,OAAgB;IACxE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;QACzB,OAAO;QACP,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;IACF,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;wEAEwE;AAExE,MAAM,UAAU,gBAAgB;IAC9B,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-decorator.d.ts","sourceRoot":"","sources":["../../src/migrate/ai-decorator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"ai-decorator.d.ts","sourceRoot":"","sources":["../../src/migrate/ai-decorator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB;wDACoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;wEACoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;IACjD,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,2BAA2B;IAC3B,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAUD,wBAAsB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoCjF;AAED;;;;;;;;GAQG;AACH;iEACiE;AACjE,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEhF,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuB5B"}
|
|
@@ -20,157 +20,45 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { promises as fs } from 'node:fs';
|
|
22
22
|
import path from 'node:path';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
'claude-haiku-4-5-20251001': { in: 0.80, out: 4.00 },
|
|
31
|
-
};
|
|
32
|
-
function resolveAnthropicModelId(id) {
|
|
33
|
-
if (id === 'claude-haiku-4-5')
|
|
34
|
-
return 'claude-haiku-4-5-20251001';
|
|
35
|
-
return id;
|
|
36
|
-
}
|
|
37
|
-
function computeCost(model, usage) {
|
|
38
|
-
const p = PRICING[model] || PRICING['claude-sonnet-4-6'];
|
|
39
|
-
return (usage.input * p.in + usage.output * p.out) / 1_000_000;
|
|
40
|
-
}
|
|
41
|
-
const SYSTEM_PROMPT_SILENT = `You are a NAC-3 (Native Agent Contract) decorator. Given an HTML page and an optional companion JS source, you produce a fully NAC-3-decorated version of the page plus a manifest JSON.
|
|
42
|
-
|
|
43
|
-
NAC-3 attributes to add to interactive elements:
|
|
44
|
-
- data-nac-id: a stable dotted identifier, e.g. "calc.action.digit_7" or "calc.action.equals".
|
|
45
|
-
- data-nac-role: one of: action, field, option, tab, navigation, region.
|
|
46
|
-
- data-nac-action: the verb name when role=action, e.g. "digit_7", "add", "subtract", "clear", "equals".
|
|
47
|
-
|
|
48
|
-
ROOT PLUGIN ANCHOR (mandatory): the top-level container (preferably <body>) MUST receive data-nac-plugin="<plugin_slug>". This is what NAC.click_by_verb's DOM fallback uses to scope the search. Without it the runtime cannot resolve verbs.
|
|
49
|
-
|
|
50
|
-
ROLE TAXONOMY (critical -- get this right):
|
|
51
|
-
- action: anything the user CLICKS to make something happen (buttons, links that do something).
|
|
52
|
-
- field: an element that HOLDS a VALUE the user can read or write. Examples: a calculator display, an output area, an input. NEVER classify a value-holding element as region.
|
|
53
|
-
- region: a CONTAINER that groups other elements. A region holds children; it does not hold a value.
|
|
54
|
-
- option: a single choice inside a select / radio group.
|
|
55
|
-
- tab: a tab-bar entry.
|
|
56
|
-
- navigation: nav link.
|
|
57
|
-
|
|
58
|
-
VERB NAMING: prefer short imperative verbs (add, subtract, multiply, divide, clear, submit, save). Avoid redundant prefixes like "set_op_" when "add" already communicates intent.
|
|
59
|
-
|
|
60
|
-
Plugin slug: choose a short snake_case identifier for the page (e.g. "calc", "invoice_app").
|
|
61
|
-
|
|
62
|
-
Manifest JSON shape:
|
|
63
|
-
{
|
|
64
|
-
"plugin_slug": "<slug>",
|
|
65
|
-
"version": "1.0.0",
|
|
66
|
-
"nac_version": "1.0",
|
|
67
|
-
"label_i18n": { "es": "<label>", "en": "<label>" },
|
|
68
|
-
"elements": [
|
|
69
|
-
{ "id": "<dotted id>", "role": "action|field|option|tab|region", "actions": [{ "verb": "<verb>", "label_i18n": { "es":"...", "en":"..." } }] }
|
|
70
|
-
]
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
OUTPUT FORMAT -- you reply with a single JSON object, no prose, no Markdown fences:
|
|
74
|
-
{
|
|
75
|
-
"decorated_html": "<full decorated HTML source as a single string>",
|
|
76
|
-
"plugin_slug": "<slug>",
|
|
77
|
-
"manifest_json": "<the manifest object stringified>",
|
|
78
|
-
"ambiguities": []
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
Rules:
|
|
82
|
-
1. Decorate ALL interactive elements (buttons, inputs, selects, links that do something, tabs). Skip pure layout.
|
|
83
|
-
2. Use semantic verbs from the JS (onclick handlers reveal intent). For "onclick=clearAll()" use verb "clear". For "onclick=digit('7')" use verb "digit_7" and id "<slug>.action.digit_7".
|
|
84
|
-
3. Keep IDs stable, dotted, lowercase, snake_case. Pattern: "<slug>.<role>.<thing>".
|
|
85
|
-
4. The manifest_json field is the JSON manifest as a STRING (escape inner quotes).
|
|
86
|
-
5. In SILENT mode, do not ask questions. Make your best guess. ambiguities = [].
|
|
87
|
-
6. Preserve all existing HTML attributes; only ADD nac-3 attributes.
|
|
88
|
-
7. Do not change the visible text or layout. Only decoration.
|
|
89
|
-
8. The <body> tag MUST have data-nac-plugin="<plugin_slug>" exactly.`;
|
|
90
|
-
const SYSTEM_PROMPT_ASSISTED = SYSTEM_PROMPT_SILENT + `
|
|
91
|
-
|
|
92
|
-
ASSISTED MODE OVERRIDE: if more than one verb / role / id is plausible, populate the "ambiguities" array with concrete questions. Each ambiguity has:
|
|
93
|
-
{
|
|
94
|
-
"id": "<stable handle>",
|
|
95
|
-
"kind": "role|verb|plugin_slug|nac_id",
|
|
96
|
-
"element_excerpt": "<the offending HTML tag, single line, max 120 chars>",
|
|
97
|
-
"question": "<one-sentence question for the user>",
|
|
98
|
-
"options": ["option_a", "option_b", "option_c"]
|
|
99
|
-
}
|
|
100
|
-
Still produce decorated_html with your best guess; the caller will re-issue if the user picks something different.`;
|
|
101
|
-
const _client = {};
|
|
102
|
-
function client() {
|
|
103
|
-
if (!_client.c)
|
|
104
|
-
_client.c = new Anthropic();
|
|
105
|
-
return _client.c;
|
|
106
|
-
}
|
|
107
|
-
function extractJsonObject(text) {
|
|
108
|
-
/* Models sometimes wrap output in markdown despite instructions.
|
|
109
|
-
Be liberal in what we accept. */
|
|
110
|
-
const fenced = text.match(/```(?:json)?\s*([\s\S]*?)\s*```/);
|
|
111
|
-
if (fenced && fenced[1])
|
|
112
|
-
return fenced[1].trim();
|
|
113
|
-
const trimmed = text.trim();
|
|
114
|
-
if (trimmed.startsWith('{') && trimmed.endsWith('}'))
|
|
115
|
-
return trimmed;
|
|
116
|
-
/* Find first '{' and last '}'. */
|
|
117
|
-
const i = trimmed.indexOf('{');
|
|
118
|
-
const j = trimmed.lastIndexOf('}');
|
|
119
|
-
if (i >= 0 && j > i)
|
|
120
|
-
return trimmed.slice(i, j + 1);
|
|
121
|
-
return trimmed;
|
|
122
|
-
}
|
|
23
|
+
/* HITO 4 -- alpha.59z.112.
|
|
24
|
+
*
|
|
25
|
+
* The bundled SYSTEM_PROMPT_SILENT/ASSISTED prompts + the direct
|
|
26
|
+
* Anthropic SDK code path were removed in alpha.59z.112. The
|
|
27
|
+
* hito4 worker is now the ONLY path. Users no longer need
|
|
28
|
+
* ANTHROPIC_API_KEY in their env -- the worker uses their BYOK
|
|
29
|
+
* brain key forwarded via HMAC headers (see callFlow). */
|
|
123
30
|
export async function aiDecorate(opts) {
|
|
124
|
-
if (!process.env.ANTHROPIC_API_KEY) {
|
|
125
|
-
throw new Error('ANTHROPIC_API_KEY env variable missing -- set it before running --ai-silent or --ai-assisted.');
|
|
126
|
-
}
|
|
127
|
-
const model = opts.model || DEFAULT_MODEL;
|
|
128
|
-
const sys = opts.mode === 'assisted' ? SYSTEM_PROMPT_ASSISTED : SYSTEM_PROMPT_SILENT;
|
|
129
|
-
let userPrompt = '<HTML>\n' + opts.htmlSource + '\n</HTML>';
|
|
130
|
-
if (opts.jsSource) {
|
|
131
|
-
userPrompt += '\n\n<JS companion>\n' + opts.jsSource + '\n</JS companion>';
|
|
132
|
-
}
|
|
133
|
-
if (opts.pluginHint) {
|
|
134
|
-
userPrompt += '\n\nPage hint: ' + opts.pluginHint;
|
|
135
|
-
}
|
|
136
|
-
userPrompt += '\n\nDecorate this page per the rules above. Output a single JSON object only.';
|
|
137
31
|
const t0 = Date.now();
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
};
|
|
145
|
-
if (!
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const latency_ms = Date.now() - t0;
|
|
149
|
-
const block = resp.content.find((b) => b.type === 'text');
|
|
150
|
-
const raw = block?.text || '';
|
|
151
|
-
const jsonText = extractJsonObject(raw);
|
|
152
|
-
let parsed;
|
|
153
|
-
try {
|
|
154
|
-
parsed = JSON.parse(jsonText);
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
throw new Error('Claude returned non-parseable JSON. First 400 chars: ' + (jsonText || '').slice(0, 400));
|
|
158
|
-
}
|
|
159
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
160
|
-
throw new Error('Claude response did not parse to an object.');
|
|
32
|
+
const { callFlow } = await import('../license/hito4_client.js');
|
|
33
|
+
const r = await callFlow('ai-decorate', {
|
|
34
|
+
html_source: opts.htmlSource,
|
|
35
|
+
js_source: opts.jsSource,
|
|
36
|
+
plugin_hint: opts.pluginHint,
|
|
37
|
+
mode: opts.mode,
|
|
38
|
+
});
|
|
39
|
+
if (!r.ok) {
|
|
40
|
+
throw new Error('ai-decorate via hito4 worker failed: HTTP ' + r.status
|
|
41
|
+
+ ' -- ' + (typeof r.body?.error === 'string' ? r.body.error : 'no error message'));
|
|
161
42
|
}
|
|
162
|
-
const
|
|
43
|
+
const out = r.body.output ?? r.body;
|
|
44
|
+
const decorated_html = typeof out.decorated_html === 'string' ? out.decorated_html : opts.htmlSource;
|
|
45
|
+
const plugin_slug = typeof out.plugin_slug === 'string' ? out.plugin_slug : 'unknown';
|
|
46
|
+
const manifest_json = typeof out.manifest_json === 'string'
|
|
47
|
+
? out.manifest_json
|
|
48
|
+
: JSON.stringify({ plugin_slug, version: '1.0.0', nac_version: '1.0', elements: [] });
|
|
49
|
+
const ambiguities = Array.isArray(out.ambiguities) ? out.ambiguities : [];
|
|
50
|
+
const usage = (out.usage ?? r.body.usage);
|
|
163
51
|
return {
|
|
164
|
-
decorated_html
|
|
165
|
-
plugin_slug
|
|
166
|
-
manifest_json
|
|
52
|
+
decorated_html,
|
|
53
|
+
plugin_slug,
|
|
54
|
+
manifest_json,
|
|
167
55
|
ambiguities,
|
|
168
56
|
meta: {
|
|
169
|
-
model,
|
|
170
|
-
input_tokens:
|
|
171
|
-
output_tokens:
|
|
172
|
-
cost_usd:
|
|
173
|
-
latency_ms,
|
|
57
|
+
model: typeof out.model === 'string' ? out.model : 'worker-managed',
|
|
58
|
+
input_tokens: typeof usage?.input_tokens === 'number' ? usage.input_tokens : 0,
|
|
59
|
+
output_tokens: typeof usage?.output_tokens === 'number' ? usage.output_tokens : 0,
|
|
60
|
+
cost_usd: typeof out.cost_usd === 'number' ? out.cost_usd : 0,
|
|
61
|
+
latency_ms: Date.now() - t0,
|
|
174
62
|
},
|
|
175
63
|
};
|
|
176
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-decorator.js","sourceRoot":"","sources":["../../src/migrate/ai-decorator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-decorator.js","sourceRoot":"","sources":["../../src/migrate/ai-decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ToolContext, ToolResult } from '../chat/tools.js';
|
|
2
|
+
import type { Nac3Verb } from './internal_manifest.js';
|
|
3
|
+
export interface PendingApproval {
|
|
4
|
+
trace_id: string;
|
|
5
|
+
verb: Nac3Verb;
|
|
6
|
+
args: Record<string, unknown>;
|
|
7
|
+
ctx: ToolContext;
|
|
8
|
+
/** Bound at enqueue time -- captures which legacy alias to
|
|
9
|
+
* invoke on approve. Decoupled so the runner does not need
|
|
10
|
+
* the dispatcher again. */
|
|
11
|
+
legacy_alias: string | null;
|
|
12
|
+
/** Reused dispatcher reference so the executor on approve can
|
|
13
|
+
* re-enter runNac3Invoke / runForgeTool from the endpoint. */
|
|
14
|
+
legacy_run: (n: string, a: Record<string, unknown>, c: ToolContext) => Promise<ToolResult>;
|
|
15
|
+
created_at: number;
|
|
16
|
+
}
|
|
17
|
+
/** Push a pending approval and return the trace_id. */
|
|
18
|
+
export declare function enqueueApproval(p: PendingApproval): void;
|
|
19
|
+
/** Pop a pending row. Returns null when missing or expired. */
|
|
20
|
+
export declare function popPending(trace_id: string): PendingApproval | null;
|
|
21
|
+
/** Read without removing -- used by tests / debug. */
|
|
22
|
+
export declare function peekPending(trace_id: string): PendingApproval | null;
|
|
23
|
+
/** Force-clear (tests). */
|
|
24
|
+
export declare function clearAllPending(): void;
|
|
25
|
+
export interface ApprovalLogEntry {
|
|
26
|
+
ts: string;
|
|
27
|
+
trace_id: string;
|
|
28
|
+
verb_id: string;
|
|
29
|
+
decision: 'approve' | 'reject' | 'expired';
|
|
30
|
+
args_sample: Record<string, unknown>;
|
|
31
|
+
policy: string;
|
|
32
|
+
reason?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Append-only audit row. Never throws. */
|
|
35
|
+
export declare function logApproval(entry: ApprovalLogEntry): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=approval_queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval_queue.d.ts","sourceRoot":"","sources":["../../src/nac3/approval_queue.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,GAAG,EAAE,WAAW,CAAC;IACjB;;gCAE4B;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;mEAC+D;IAC/D,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3F,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAGxD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASnE;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAQpE;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AA0BD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2CAA2C;AAC3C,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory approval queue for NAC3 destructive / approval-required
|
|
3
|
+
* verbs.
|
|
4
|
+
*
|
|
5
|
+
* The dispatcher (`runNac3Invoke`) intercepts a destructive or
|
|
6
|
+
* approval-required verb BEFORE executing it. The intercept:
|
|
7
|
+
*
|
|
8
|
+
* 1. Pushes a `PendingApproval` row keyed by trace_id.
|
|
9
|
+
* 2. Returns an envelope `{nac3_panel_approval_required: true,
|
|
10
|
+
* trace_id, verb, args}` so the LLM does NOT consider the
|
|
11
|
+
* action done. The panel intercepts the same envelope and
|
|
12
|
+
* opens a modal.
|
|
13
|
+
* 3. The user clicks Approve / Reject in the modal. The panel
|
|
14
|
+
* POSTs to /api/forge/nac3-approve or /nac3-reject with the
|
|
15
|
+
* trace_id.
|
|
16
|
+
* 4. The endpoint resolves the pending row. On approve, the
|
|
17
|
+
* action runs; on reject, it logs and stays unexecuted.
|
|
18
|
+
*
|
|
19
|
+
* Queue lifetime:
|
|
20
|
+
* - Pendings older than the TTL (default 5 min) are GC'd. They
|
|
21
|
+
* stay in the audit log but cannot be approved any more.
|
|
22
|
+
* - The dispatcher does not block waiting for approval -- it
|
|
23
|
+
* returns immediately with the envelope. Approval comes in a
|
|
24
|
+
* SEPARATE HTTP request from the panel.
|
|
25
|
+
*
|
|
26
|
+
* Concurrency model:
|
|
27
|
+
* - Local single-process. Forge chat is a 127.0.0.1 server with
|
|
28
|
+
* one listening tab. No race with siblings.
|
|
29
|
+
*
|
|
30
|
+
* ASCII-only.
|
|
31
|
+
*/
|
|
32
|
+
import { promises as fs } from 'node:fs';
|
|
33
|
+
import path from 'node:path';
|
|
34
|
+
import os from 'node:os';
|
|
35
|
+
const TTL_MS = 5 * 60 * 1000;
|
|
36
|
+
const PENDING = new Map();
|
|
37
|
+
/** Push a pending approval and return the trace_id. */
|
|
38
|
+
export function enqueueApproval(p) {
|
|
39
|
+
PENDING.set(p.trace_id, p);
|
|
40
|
+
scheduleGc();
|
|
41
|
+
}
|
|
42
|
+
/** Pop a pending row. Returns null when missing or expired. */
|
|
43
|
+
export function popPending(trace_id) {
|
|
44
|
+
const row = PENDING.get(trace_id);
|
|
45
|
+
if (!row)
|
|
46
|
+
return null;
|
|
47
|
+
if (Date.now() - row.created_at > TTL_MS) {
|
|
48
|
+
PENDING.delete(trace_id);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
PENDING.delete(trace_id);
|
|
52
|
+
return row;
|
|
53
|
+
}
|
|
54
|
+
/** Read without removing -- used by tests / debug. */
|
|
55
|
+
export function peekPending(trace_id) {
|
|
56
|
+
const row = PENDING.get(trace_id);
|
|
57
|
+
if (!row)
|
|
58
|
+
return null;
|
|
59
|
+
if (Date.now() - row.created_at > TTL_MS) {
|
|
60
|
+
PENDING.delete(trace_id);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return row;
|
|
64
|
+
}
|
|
65
|
+
/** Force-clear (tests). */
|
|
66
|
+
export function clearAllPending() {
|
|
67
|
+
PENDING.clear();
|
|
68
|
+
}
|
|
69
|
+
/** Periodic GC for expired entries. */
|
|
70
|
+
let gcTimer = null;
|
|
71
|
+
function scheduleGc() {
|
|
72
|
+
if (gcTimer)
|
|
73
|
+
return;
|
|
74
|
+
gcTimer = setTimeout(() => {
|
|
75
|
+
gcTimer = null;
|
|
76
|
+
const now = Date.now();
|
|
77
|
+
for (const [k, v] of PENDING.entries()) {
|
|
78
|
+
if (now - v.created_at > TTL_MS)
|
|
79
|
+
PENDING.delete(k);
|
|
80
|
+
}
|
|
81
|
+
if (PENDING.size > 0)
|
|
82
|
+
scheduleGc();
|
|
83
|
+
}, 60_000);
|
|
84
|
+
/* Allow the process to exit even with the GC timer pending. */
|
|
85
|
+
if (typeof gcTimer.unref === 'function') {
|
|
86
|
+
gcTimer.unref();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Audit log path for approval decisions. Same dir as nac3_log. */
|
|
90
|
+
function approvalLogPath() {
|
|
91
|
+
const dir = process.env.YF_CONFIG_DIR || path.join(os.homedir(), '.yujin-forge');
|
|
92
|
+
return path.join(dir, 'nac3_approvals.jsonl');
|
|
93
|
+
}
|
|
94
|
+
/** Append-only audit row. Never throws. */
|
|
95
|
+
export async function logApproval(entry) {
|
|
96
|
+
try {
|
|
97
|
+
const dir = path.dirname(approvalLogPath());
|
|
98
|
+
await fs.mkdir(dir, { recursive: true });
|
|
99
|
+
await fs.appendFile(approvalLogPath(), JSON.stringify(entry) + '\n', 'utf-8');
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
/* swallow */
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=approval_queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval_queue.js","sourceRoot":"","sources":["../../src/nac3/approval_queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NAC-3 v3.x backend tools (task #23 -- design in
|
|
3
|
+
* docs/NAC3_SPEC_V3_BACKEND_TOOLS.md).
|
|
4
|
+
*
|
|
5
|
+
* Slice 1: parse the `nac3_backend.tools[]` section from
|
|
6
|
+
* yujin.forge.json + expose the parsed catalogue. Dispatcher
|
|
7
|
+
* routing + auth header + audit log ship in slice 2.
|
|
8
|
+
*
|
|
9
|
+
* Surface principle: like the F101 MCP bridge invariants, the
|
|
10
|
+
* backend-tool verbs only appear in the LLM-visible stub when
|
|
11
|
+
* the adopter app declares them. No declaration -> identical
|
|
12
|
+
* prompt to v3.0.
|
|
13
|
+
*
|
|
14
|
+
* ASCII-only.
|
|
15
|
+
*/
|
|
16
|
+
export type BackendAuthKind = 'none' | 'bearer' | 'header_key' | 'basic' | 'oauth2_token';
|
|
17
|
+
export interface BackendAuth {
|
|
18
|
+
kind: BackendAuthKind;
|
|
19
|
+
/** Vault slot holding the token (for bearer / header_key / oauth2_token). */
|
|
20
|
+
vault_slot?: string;
|
|
21
|
+
/** Vault slot for the username portion of basic auth. */
|
|
22
|
+
vault_slot_user?: string;
|
|
23
|
+
/** Vault slot for the password portion of basic auth. */
|
|
24
|
+
vault_slot_pass?: string;
|
|
25
|
+
/** Header name when kind === 'header_key'. e.g. "X-API-Key". */
|
|
26
|
+
header_name?: string;
|
|
27
|
+
}
|
|
28
|
+
export type BackendPolicy = 'unrestricted' | 'confirm' | 'approval-required' | 'destructive';
|
|
29
|
+
export type BackendSideEffect = 'none' | 'external-api' | 'filesystem' | 'network';
|
|
30
|
+
export interface BackendEndpoint {
|
|
31
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
32
|
+
path: string;
|
|
33
|
+
}
|
|
34
|
+
export interface BackendToolSchema {
|
|
35
|
+
type: 'object';
|
|
36
|
+
properties: Record<string, {
|
|
37
|
+
type: 'string' | 'number' | 'boolean' | 'object' | 'array';
|
|
38
|
+
description?: string;
|
|
39
|
+
enum?: readonly string[];
|
|
40
|
+
minLength?: number;
|
|
41
|
+
maxLength?: number;
|
|
42
|
+
pattern?: string;
|
|
43
|
+
}>;
|
|
44
|
+
required: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
export interface BackendTool {
|
|
47
|
+
/** Tool id (kebab-case or snake_case). Becomes `app.<id>` in the
|
|
48
|
+
* synthetic NAC-3 verb namespace. */
|
|
49
|
+
id: string;
|
|
50
|
+
/** Short user-facing label for stub + audit log. */
|
|
51
|
+
label: string;
|
|
52
|
+
/** Free-text description. */
|
|
53
|
+
description?: string;
|
|
54
|
+
/** HTTP method + path appended to base_url. */
|
|
55
|
+
endpoint: BackendEndpoint;
|
|
56
|
+
/** Policy controls R8 modal behaviour. */
|
|
57
|
+
policy: BackendPolicy;
|
|
58
|
+
/** Declared side effects (for audit + policy reasoning). */
|
|
59
|
+
side_effects: readonly BackendSideEffect[];
|
|
60
|
+
/** Args schema (validated like native nac3 verbs). */
|
|
61
|
+
params_schema: BackendToolSchema;
|
|
62
|
+
/** Optional response shape declaration -- informational only in slice 1. */
|
|
63
|
+
result_shape?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
export interface BackendCatalogue {
|
|
66
|
+
base_url: string;
|
|
67
|
+
auth: BackendAuth;
|
|
68
|
+
tools: BackendTool[];
|
|
69
|
+
}
|
|
70
|
+
export interface ParseResult {
|
|
71
|
+
/** When the manifest has no nac3_backend, returns null. When it
|
|
72
|
+
* has malformed shape, returns the parsed-best-effort + error
|
|
73
|
+
* diagnostics. When it parses clean, returns the catalogue. */
|
|
74
|
+
catalogue: BackendCatalogue | null;
|
|
75
|
+
errors: string[];
|
|
76
|
+
warnings: string[];
|
|
77
|
+
}
|
|
78
|
+
/** Parse a yujin.forge.json content + extract the nac3_backend
|
|
79
|
+
* catalogue. Returns null when the manifest does not declare the
|
|
80
|
+
* section (the v3.0 default; no behaviour change). Returns a
|
|
81
|
+
* catalogue + errors[] when the section is malformed. */
|
|
82
|
+
export declare function parseBackendCatalogue(manifest: unknown): ParseResult;
|
|
83
|
+
/** Read yujin.forge.json from the project root and parse its
|
|
84
|
+
* nac3_backend section. Returns null catalogue when the file is
|
|
85
|
+
* missing OR no nac3_backend declared OR malformed. */
|
|
86
|
+
export declare function loadBackendCatalogue(projectRoot: string): Promise<ParseResult>;
|
|
87
|
+
export declare function buildBackendToolStub(tool: BackendTool): string;
|
|
88
|
+
export declare function buildBackendToolsSection(catalogue: BackendCatalogue): string;
|
|
89
|
+
//# sourceMappingURL=backend_tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend_tools.d.ts","sourceRoot":"","sources":["../../src/nac3/backend_tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;AAE1F,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,SAAS,GACT,mBAAmB,GACnB,aAAa,CAAC;AAElB,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,cAAc,GACd,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B;0CACsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,eAAe,CAAC;IAC1B,0CAA0C;IAC1C,MAAM,EAAE,aAAa,CAAC;IACtB,4DAA4D;IAC5D,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC3C,sDAAsD;IACtD,aAAa,EAAE,iBAAiB,CAAC;IACjC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAMD,MAAM,WAAW,WAAW;IAC1B;;oEAEgE;IAChE,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAoHD;;;0DAG0D;AAC1D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,CA+CpE;AAED;;wDAEwD;AACxD,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBpF;AA2CD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAM9D;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAU5E"}
|