soloforge 1.5.0 → 2.0.0
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/CHANGELOG.md +279 -0
- package/README.md +93 -54
- package/dist/adapters/claude_code/claude_md.d.ts +2 -1
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js +6 -6
- package/dist/adapters/claude_code/claude_md.js.map +1 -1
- package/dist/adapters/claude_code/hooks.d.ts.map +1 -1
- package/dist/adapters/claude_code/hooks.js +2 -2
- package/dist/adapters/claude_code/hooks.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +9 -327
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +7 -4221
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/codex/codex_config.d.ts.map +1 -1
- package/dist/adapters/codex/codex_config.js +2 -2
- package/dist/adapters/codex/codex_config.js.map +1 -1
- package/dist/adapters/codex/codex_rules.d.ts +2 -1
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
- package/dist/adapters/codex/codex_rules.js +25 -2
- package/dist/adapters/codex/codex_rules.js.map +1 -1
- package/dist/adapters/shared/hook_command.d.ts +20 -0
- package/dist/adapters/shared/hook_command.d.ts.map +1 -0
- package/dist/adapters/shared/hook_command.js +80 -0
- package/dist/adapters/shared/hook_command.js.map +1 -0
- package/dist/adapters/shared/workflow_template.d.ts +1 -1
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +4 -5
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/adapters/trae/trae_config.d.ts +17 -1
- package/dist/adapters/trae/trae_config.d.ts.map +1 -1
- package/dist/adapters/trae/trae_config.js +3 -3
- package/dist/adapters/trae/trae_config.js.map +1 -1
- package/dist/adapters/trae/trae_rules.d.ts +2 -1
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
- package/dist/adapters/trae/trae_rules.js +25 -2
- package/dist/adapters/trae/trae_rules.js.map +1 -1
- package/dist/bin/args.d.ts +13 -0
- package/dist/bin/args.d.ts.map +1 -0
- package/dist/bin/args.js +52 -0
- package/dist/bin/args.js.map +1 -0
- package/dist/bin/commands/analyze.d.ts +7 -0
- package/dist/bin/commands/analyze.d.ts.map +1 -0
- package/dist/bin/commands/analyze.js +52 -0
- package/dist/bin/commands/analyze.js.map +1 -0
- package/dist/bin/commands/audit.d.ts +11 -0
- package/dist/bin/commands/audit.d.ts.map +1 -0
- package/dist/bin/commands/audit.js +468 -0
- package/dist/bin/commands/audit.js.map +1 -0
- package/dist/bin/commands/check_bash.d.ts +15 -0
- package/dist/bin/commands/check_bash.d.ts.map +1 -0
- package/dist/bin/commands/check_bash.js +264 -0
- package/dist/bin/commands/check_bash.js.map +1 -0
- package/dist/bin/commands/check_write.d.ts +41 -0
- package/dist/bin/commands/check_write.d.ts.map +1 -0
- package/dist/bin/commands/check_write.js +437 -0
- package/dist/bin/commands/check_write.js.map +1 -0
- package/dist/bin/commands/hooks.d.ts +8 -0
- package/dist/bin/commands/hooks.d.ts.map +1 -0
- package/dist/bin/commands/hooks.js +83 -0
- package/dist/bin/commands/hooks.js.map +1 -0
- package/dist/bin/commands/init.d.ts +38 -0
- package/dist/bin/commands/init.d.ts.map +1 -0
- package/dist/bin/commands/init.js +406 -0
- package/dist/bin/commands/init.js.map +1 -0
- package/dist/bin/commands/modify.d.ts +7 -0
- package/dist/bin/commands/modify.d.ts.map +1 -0
- package/dist/bin/commands/modify.js +74 -0
- package/dist/bin/commands/modify.js.map +1 -0
- package/dist/bin/commands/reasoning.d.ts +14 -0
- package/dist/bin/commands/reasoning.d.ts.map +1 -0
- package/dist/bin/commands/reasoning.js +158 -0
- package/dist/bin/commands/reasoning.js.map +1 -0
- package/dist/bin/commands/review.d.ts +7 -0
- package/dist/bin/commands/review.d.ts.map +1 -0
- package/dist/bin/commands/review.js +79 -0
- package/dist/bin/commands/review.js.map +1 -0
- package/dist/bin/commands/status.d.ts +12 -0
- package/dist/bin/commands/status.d.ts.map +1 -0
- package/dist/bin/commands/status.js +614 -0
- package/dist/bin/commands/status.js.map +1 -0
- package/dist/bin/commands/sync.d.ts +11 -0
- package/dist/bin/commands/sync.d.ts.map +1 -0
- package/dist/bin/commands/sync.js +517 -0
- package/dist/bin/commands/sync.js.map +1 -0
- package/dist/bin/commands/validate.d.ts +10 -0
- package/dist/bin/commands/validate.d.ts.map +1 -0
- package/dist/bin/commands/validate.js +504 -0
- package/dist/bin/commands/validate.js.map +1 -0
- package/dist/bin/config_commands.d.ts +21 -20
- package/dist/bin/config_commands.d.ts.map +1 -1
- package/dist/bin/config_commands.js +214 -227
- package/dist/bin/config_commands.js.map +1 -1
- package/dist/bin/soloforge.d.ts +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +100 -2786
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/adapter_prompt_contract.d.ts +2 -2
- package/dist/engine/adapter_prompt_contract.d.ts.map +1 -1
- package/dist/engine/adapter_prompt_contract.js +1 -1
- package/dist/engine/adapter_prompt_contract.js.map +1 -1
- package/dist/engine/audit/audit_pool.d.ts.map +1 -0
- package/dist/engine/audit/audit_pool.js +121 -0
- package/dist/engine/audit/audit_pool.js.map +1 -0
- package/dist/engine/audit/audit_sampler.d.ts +22 -0
- package/dist/engine/audit/audit_sampler.d.ts.map +1 -0
- package/dist/engine/audit/audit_sampler.js +29 -0
- package/dist/engine/audit/audit_sampler.js.map +1 -0
- package/dist/engine/audit/code_reviewer.d.ts +73 -0
- package/dist/engine/audit/code_reviewer.d.ts.map +1 -0
- package/dist/engine/audit/code_reviewer.js +632 -0
- package/dist/engine/audit/code_reviewer.js.map +1 -0
- package/dist/engine/audit/confidence_scorer.d.ts +48 -0
- package/dist/engine/audit/confidence_scorer.d.ts.map +1 -0
- package/dist/engine/audit/confidence_scorer.js +64 -0
- package/dist/engine/audit/confidence_scorer.js.map +1 -0
- package/dist/engine/audit/core_engineering_principles.d.ts +155 -0
- package/dist/engine/audit/core_engineering_principles.d.ts.map +1 -0
- package/dist/engine/audit/core_engineering_principles.js +414 -0
- package/dist/engine/audit/core_engineering_principles.js.map +1 -0
- package/dist/engine/audit/core_experience_principle.d.ts.map +1 -0
- package/dist/engine/audit/core_experience_principle.js +349 -0
- package/dist/engine/audit/core_experience_principle.js.map +1 -0
- package/dist/engine/audit/debt_reporter.d.ts +12 -0
- package/dist/engine/audit/debt_reporter.d.ts.map +1 -0
- package/dist/engine/audit/debt_reporter.js +94 -0
- package/dist/engine/audit/debt_reporter.js.map +1 -0
- package/dist/engine/audit/debt_tracker.d.ts +72 -0
- package/dist/engine/audit/debt_tracker.d.ts.map +1 -0
- package/dist/engine/audit/debt_tracker.js +231 -0
- package/dist/engine/audit/debt_tracker.js.map +1 -0
- package/dist/engine/audit/debugger.d.ts +15 -0
- package/dist/engine/audit/debugger.d.ts.map +1 -0
- package/dist/engine/audit/debugger.js +415 -0
- package/dist/engine/audit/debugger.js.map +1 -0
- package/dist/engine/audit/degradation.d.ts.map +1 -0
- package/dist/engine/audit/degradation.js.map +1 -0
- package/dist/engine/audit/delivery.d.ts +49 -0
- package/dist/engine/audit/delivery.d.ts.map +1 -0
- package/dist/engine/audit/delivery.js +405 -0
- package/dist/engine/audit/delivery.js.map +1 -0
- package/dist/engine/audit/delivery_readiness.d.ts +72 -0
- package/dist/engine/audit/delivery_readiness.d.ts.map +1 -0
- package/dist/engine/audit/delivery_readiness.js +200 -0
- package/dist/engine/audit/delivery_readiness.js.map +1 -0
- package/dist/engine/audit/developer_sovereignty.d.ts +24 -0
- package/dist/engine/audit/developer_sovereignty.d.ts.map +1 -0
- package/dist/engine/audit/developer_sovereignty.js +137 -0
- package/dist/engine/audit/developer_sovereignty.js.map +1 -0
- package/dist/engine/audit/diagnostic_registry.d.ts.map +1 -0
- package/dist/engine/audit/diagnostic_registry.js +288 -0
- package/dist/engine/audit/diagnostic_registry.js.map +1 -0
- package/dist/engine/audit/evolver.d.ts +78 -0
- package/dist/engine/audit/evolver.d.ts.map +1 -0
- package/dist/engine/audit/evolver.js +402 -0
- package/dist/engine/audit/evolver.js.map +1 -0
- package/dist/engine/audit/failure_classifier.d.ts +39 -0
- package/dist/engine/audit/failure_classifier.d.ts.map +1 -0
- package/dist/engine/audit/failure_classifier.js +175 -0
- package/dist/engine/audit/failure_classifier.js.map +1 -0
- package/dist/engine/audit/failure_report.d.ts.map +1 -0
- package/dist/engine/audit/failure_report.js.map +1 -0
- package/dist/engine/audit/governance_report.d.ts +101 -0
- package/dist/engine/audit/governance_report.d.ts.map +1 -0
- package/dist/engine/audit/governance_report.js +185 -0
- package/dist/engine/audit/governance_report.js.map +1 -0
- package/dist/engine/audit/java_quality_guard.d.ts.map +1 -0
- package/dist/engine/audit/java_quality_guard.js +228 -0
- package/dist/engine/audit/java_quality_guard.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/constants.d.ts +27 -0
- package/dist/engine/audit/main_path_integration_contract/constants.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/constants.js +71 -0
- package/dist/engine/audit/main_path_integration_contract/constants.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/factories.d.ts +35 -0
- package/dist/engine/audit/main_path_integration_contract/factories.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/factories.js +62 -0
- package/dist/engine/audit/main_path_integration_contract/factories.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/gates.d.ts +25 -0
- package/dist/engine/audit/main_path_integration_contract/gates.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/gates.js +307 -0
- package/dist/engine/audit/main_path_integration_contract/gates.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/index.d.ts +17 -0
- package/dist/engine/audit/main_path_integration_contract/index.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/index.js +21 -0
- package/dist/engine/audit/main_path_integration_contract/index.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/queries.d.ts +46 -0
- package/dist/engine/audit/main_path_integration_contract/queries.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/queries.js +91 -0
- package/dist/engine/audit/main_path_integration_contract/queries.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/scanning.d.ts +13 -0
- package/dist/engine/audit/main_path_integration_contract/scanning.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/scanning.js +476 -0
- package/dist/engine/audit/main_path_integration_contract/scanning.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/scanning_infra.d.ts +35 -0
- package/dist/engine/audit/main_path_integration_contract/scanning_infra.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/scanning_infra.js +343 -0
- package/dist/engine/audit/main_path_integration_contract/scanning_infra.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/types.d.ts +87 -0
- package/dist/engine/audit/main_path_integration_contract/types.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract/types.js +5 -0
- package/dist/engine/audit/main_path_integration_contract/types.js.map +1 -0
- package/dist/engine/audit/main_path_integration_contract.d.ts +13 -0
- package/dist/engine/audit/main_path_integration_contract.d.ts.map +1 -0
- package/dist/engine/audit/main_path_integration_contract.js +17 -0
- package/dist/engine/audit/main_path_integration_contract.js.map +1 -0
- package/dist/engine/audit/mutation_audit.d.ts +39 -0
- package/dist/engine/audit/mutation_audit.d.ts.map +1 -0
- package/dist/engine/audit/mutation_audit.js +153 -0
- package/dist/engine/audit/mutation_audit.js.map +1 -0
- package/dist/engine/audit/observability.d.ts +68 -0
- package/dist/engine/audit/observability.d.ts.map +1 -0
- package/dist/engine/audit/observability.js +437 -0
- package/dist/engine/audit/observability.js.map +1 -0
- package/dist/engine/audit/privacy_grants.d.ts +108 -0
- package/dist/engine/audit/privacy_grants.d.ts.map +1 -0
- package/dist/engine/audit/privacy_grants.js +171 -0
- package/dist/engine/audit/privacy_grants.js.map +1 -0
- package/dist/engine/audit/privacy_patterns.d.ts +24 -0
- package/dist/engine/audit/privacy_patterns.d.ts.map +1 -0
- package/dist/engine/audit/privacy_patterns.js +143 -0
- package/dist/engine/audit/privacy_patterns.js.map +1 -0
- package/dist/engine/audit/privacy_scanning.d.ts +153 -0
- package/dist/engine/audit/privacy_scanning.d.ts.map +1 -0
- package/dist/engine/audit/privacy_scanning.js +567 -0
- package/dist/engine/audit/privacy_scanning.js.map +1 -0
- package/dist/engine/audit/privacy_secret_contract.d.ts +12 -0
- package/dist/engine/audit/privacy_secret_contract.d.ts.map +1 -0
- package/dist/engine/audit/privacy_secret_contract.js +14 -0
- package/dist/engine/audit/privacy_secret_contract.js.map +1 -0
- package/dist/engine/audit/privacy_types.d.ts +48 -0
- package/dist/engine/audit/privacy_types.d.ts.map +1 -0
- package/dist/engine/audit/privacy_types.js +14 -0
- package/dist/engine/audit/privacy_types.js.map +1 -0
- package/dist/engine/audit/risk_sampler.d.ts +45 -0
- package/dist/engine/audit/risk_sampler.d.ts.map +1 -0
- package/dist/engine/audit/risk_sampler.js +81 -0
- package/dist/engine/audit/risk_sampler.js.map +1 -0
- package/dist/engine/audit/runtime_safety.d.ts.map +1 -0
- package/dist/engine/audit/runtime_safety.js +200 -0
- package/dist/engine/audit/runtime_safety.js.map +1 -0
- package/dist/engine/audit/semantic_evidence.d.ts +33 -0
- package/dist/engine/audit/semantic_evidence.d.ts.map +1 -0
- package/dist/engine/audit/semantic_evidence.js +93 -0
- package/dist/engine/audit/semantic_evidence.js.map +1 -0
- package/dist/engine/audit/test_generator.d.ts +10 -0
- package/dist/engine/audit/test_generator.d.ts.map +1 -0
- package/dist/engine/audit/test_generator.js +268 -0
- package/dist/engine/audit/test_generator.js.map +1 -0
- package/dist/engine/audit/test_quality.d.ts +39 -0
- package/dist/engine/audit/test_quality.d.ts.map +1 -0
- package/dist/engine/audit/test_quality.js +642 -0
- package/dist/engine/audit/test_quality.js.map +1 -0
- package/dist/engine/audit/test_strategy.d.ts.map +1 -0
- package/dist/engine/audit/test_strategy.js.map +1 -0
- package/dist/engine/change_coordinator.d.ts +1 -1
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js +33 -33
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/cognitive_anchor.d.ts.map +1 -1
- package/dist/engine/cognitive_anchor.js +7 -8
- package/dist/engine/cognitive_anchor.js.map +1 -1
- package/dist/engine/config/config_write_boundary.d.ts.map +1 -0
- package/dist/engine/config/config_write_boundary.js +85 -0
- package/dist/engine/config/config_write_boundary.js.map +1 -0
- package/dist/engine/config/conflicts.d.ts +39 -0
- package/dist/engine/config/conflicts.d.ts.map +1 -0
- package/dist/engine/config/conflicts.js +79 -0
- package/dist/engine/config/conflicts.js.map +1 -0
- package/dist/engine/config/detector/blueprint.d.ts +25 -0
- package/dist/engine/config/detector/blueprint.d.ts.map +1 -0
- package/dist/engine/config/detector/blueprint.js +47 -0
- package/dist/engine/config/detector/blueprint.js.map +1 -0
- package/dist/engine/config/detector/fingerprint.d.ts +67 -0
- package/dist/engine/config/detector/fingerprint.d.ts.map +1 -0
- package/dist/engine/config/detector/fingerprint.js +160 -0
- package/dist/engine/config/detector/fingerprint.js.map +1 -0
- package/dist/engine/config/detector/framework_map.d.ts +89 -0
- package/dist/engine/config/detector/framework_map.d.ts.map +1 -0
- package/dist/engine/config/detector/framework_map.js +406 -0
- package/dist/engine/config/detector/framework_map.js.map +1 -0
- package/dist/engine/config/detector/index.d.ts +12 -0
- package/dist/engine/config/detector/index.d.ts.map +1 -0
- package/dist/engine/config/detector/index.js +12 -0
- package/dist/engine/config/detector/index.js.map +1 -0
- package/dist/engine/config/detector/verify.d.ts +32 -0
- package/dist/engine/config/detector/verify.d.ts.map +1 -0
- package/dist/engine/config/detector/verify.js +107 -0
- package/dist/engine/config/detector/verify.js.map +1 -0
- package/dist/engine/config/intent.d.ts +26 -0
- package/dist/engine/config/intent.d.ts.map +1 -0
- package/dist/engine/config/intent.js +81 -0
- package/dist/engine/config/intent.js.map +1 -0
- package/dist/engine/config/intent_schema.d.ts +873 -0
- package/dist/engine/config/intent_schema.d.ts.map +1 -0
- package/dist/engine/config/intent_schema.js +98 -0
- package/dist/engine/config/intent_schema.js.map +1 -0
- package/dist/engine/config/regression_matrix.d.ts.map +1 -0
- package/dist/engine/config/regression_matrix.js +389 -0
- package/dist/engine/config/regression_matrix.js.map +1 -0
- package/dist/engine/config/resolver.d.ts +136 -0
- package/dist/engine/config/resolver.d.ts.map +1 -0
- package/dist/engine/config/resolver.js +251 -0
- package/dist/engine/config/resolver.js.map +1 -0
- package/dist/engine/context_engine/bootstrap.d.ts +12 -0
- package/dist/engine/context_engine/bootstrap.d.ts.map +1 -0
- package/dist/engine/context_engine/bootstrap.js +28 -0
- package/dist/engine/context_engine/bootstrap.js.map +1 -0
- package/dist/engine/context_engine/companion_injector.d.ts +49 -0
- package/dist/engine/context_engine/companion_injector.d.ts.map +1 -0
- package/dist/engine/context_engine/companion_injector.js +157 -0
- package/dist/engine/context_engine/companion_injector.js.map +1 -0
- package/dist/engine/context_engine/context_resolver.d.ts +46 -0
- package/dist/engine/context_engine/context_resolver.d.ts.map +1 -0
- package/dist/engine/context_engine/context_resolver.js +139 -0
- package/dist/engine/context_engine/context_resolver.js.map +1 -0
- package/dist/engine/context_engine/index.d.ts +25 -0
- package/dist/engine/context_engine/index.d.ts.map +1 -0
- package/dist/engine/context_engine/index.js +25 -0
- package/dist/engine/context_engine/index.js.map +1 -0
- package/dist/engine/context_engine/view_registry.d.ts +45 -0
- package/dist/engine/context_engine/view_registry.d.ts.map +1 -0
- package/dist/engine/context_engine/view_registry.js +36 -0
- package/dist/engine/context_engine/view_registry.js.map +1 -0
- package/dist/engine/context_engine/views/change_impact.d.ts +34 -0
- package/dist/engine/context_engine/views/change_impact.d.ts.map +1 -0
- package/dist/engine/context_engine/views/change_impact.js +288 -0
- package/dist/engine/context_engine/views/change_impact.js.map +1 -0
- package/dist/engine/context_engine/views/coverage_gap.d.ts +45 -0
- package/dist/engine/context_engine/views/coverage_gap.d.ts.map +1 -0
- package/dist/engine/context_engine/views/coverage_gap.js +238 -0
- package/dist/engine/context_engine/views/coverage_gap.js.map +1 -0
- package/dist/engine/context_engine/views/dependency_graph.d.ts +45 -0
- package/dist/engine/context_engine/views/dependency_graph.d.ts.map +1 -0
- package/dist/engine/context_engine/views/dependency_graph.js +358 -0
- package/dist/engine/context_engine/views/dependency_graph.js.map +1 -0
- package/dist/engine/context_engine/views/file_impact.d.ts +46 -0
- package/dist/engine/context_engine/views/file_impact.d.ts.map +1 -0
- package/dist/engine/context_engine/views/file_impact.js +181 -0
- package/dist/engine/context_engine/views/file_impact.js.map +1 -0
- package/dist/engine/context_engine/views/knowledge_ref.d.ts +37 -0
- package/dist/engine/context_engine/views/knowledge_ref.d.ts.map +1 -0
- package/dist/engine/context_engine/views/knowledge_ref.js +264 -0
- package/dist/engine/context_engine/views/knowledge_ref.js.map +1 -0
- package/dist/engine/context_engine/views/reference_trace.d.ts +49 -0
- package/dist/engine/context_engine/views/reference_trace.d.ts.map +1 -0
- package/dist/engine/context_engine/views/reference_trace.js +227 -0
- package/dist/engine/context_engine/views/reference_trace.js.map +1 -0
- package/dist/engine/contracts/architecture_decision_workshop.d.ts +63 -0
- package/dist/engine/contracts/architecture_decision_workshop.d.ts.map +1 -0
- package/dist/engine/contracts/architecture_decision_workshop.js +122 -0
- package/dist/engine/contracts/architecture_decision_workshop.js.map +1 -0
- package/dist/engine/contracts/architecture_design_contract.d.ts.map +1 -0
- package/dist/engine/contracts/architecture_design_contract.js.map +1 -0
- package/dist/engine/contracts/artifact_contract_registry.d.ts +138 -0
- package/dist/engine/contracts/artifact_contract_registry.d.ts.map +1 -0
- package/dist/engine/contracts/artifact_contract_registry.js +420 -0
- package/dist/engine/contracts/artifact_contract_registry.js.map +1 -0
- package/dist/engine/contracts/artifact_process_rules.d.ts +46 -0
- package/dist/engine/contracts/artifact_process_rules.d.ts.map +1 -0
- package/dist/engine/contracts/artifact_process_rules.js +396 -0
- package/dist/engine/contracts/artifact_process_rules.js.map +1 -0
- package/dist/engine/contracts/artifact_schema_registry.d.ts +139 -0
- package/dist/engine/contracts/artifact_schema_registry.d.ts.map +1 -0
- package/dist/engine/contracts/artifact_schema_registry.js +803 -0
- package/dist/engine/contracts/artifact_schema_registry.js.map +1 -0
- package/dist/engine/contracts/backend_implementation_contract.d.ts.map +1 -0
- package/dist/engine/contracts/backend_implementation_contract.js +164 -0
- package/dist/engine/contracts/backend_implementation_contract.js.map +1 -0
- package/dist/engine/contracts/behavior_coverage_verifier.d.ts +35 -0
- package/dist/engine/contracts/behavior_coverage_verifier.d.ts.map +1 -0
- package/dist/engine/contracts/behavior_coverage_verifier.js +220 -0
- package/dist/engine/contracts/behavior_coverage_verifier.js.map +1 -0
- package/dist/engine/contracts/brainstorm_contract.d.ts +48 -0
- package/dist/engine/contracts/brainstorm_contract.d.ts.map +1 -0
- package/dist/engine/contracts/brainstorm_contract.js +146 -0
- package/dist/engine/contracts/brainstorm_contract.js.map +1 -0
- package/dist/engine/contracts/capability_action_advisor.d.ts.map +1 -0
- package/dist/engine/contracts/capability_action_advisor.js +158 -0
- package/dist/engine/contracts/capability_action_advisor.js.map +1 -0
- package/dist/engine/contracts/capability_registry.d.ts.map +1 -0
- package/dist/engine/contracts/capability_registry.js +778 -0
- package/dist/engine/contracts/capability_registry.js.map +1 -0
- package/dist/engine/contracts/capability_state_store.d.ts +115 -0
- package/dist/engine/contracts/capability_state_store.d.ts.map +1 -0
- package/dist/engine/contracts/capability_state_store.js +182 -0
- package/dist/engine/contracts/capability_state_store.js.map +1 -0
- package/dist/engine/contracts/code_maintainability_observability_contract.d.ts.map +1 -0
- package/dist/engine/contracts/code_maintainability_observability_contract.js +711 -0
- package/dist/engine/contracts/code_maintainability_observability_contract.js.map +1 -0
- package/dist/engine/contracts/coding_readiness_gate.d.ts +46 -0
- package/dist/engine/contracts/coding_readiness_gate.d.ts.map +1 -0
- package/dist/engine/contracts/coding_readiness_gate.js +175 -0
- package/dist/engine/contracts/coding_readiness_gate.js.map +1 -0
- package/dist/engine/contracts/command_execution_contract.d.ts +216 -0
- package/dist/engine/contracts/command_execution_contract.d.ts.map +1 -0
- package/dist/engine/contracts/command_execution_contract.js +562 -0
- package/dist/engine/contracts/command_execution_contract.js.map +1 -0
- package/dist/engine/contracts/contract_guard.d.ts +37 -0
- package/dist/engine/contracts/contract_guard.d.ts.map +1 -0
- package/dist/engine/contracts/contract_guard.js +598 -0
- package/dist/engine/contracts/contract_guard.js.map +1 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core.d.ts +10 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core.js +300 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core.js.map +1 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core_2.d.ts +10 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core_2.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core_2.js +298 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_core_2.js.map +1 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_extended.d.ts +13 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_extended.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_extended.js +494 -0
- package/dist/engine/contracts/contract_registry/builtin_contracts_extended.js.map +1 -0
- package/dist/engine/contracts/contract_registry/index.d.ts +8 -0
- package/dist/engine/contracts/contract_registry/index.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/index.js +7 -0
- package/dist/engine/contracts/contract_registry/index.js.map +1 -0
- package/dist/engine/contracts/contract_registry/registry.d.ts +61 -0
- package/dist/engine/contracts/contract_registry/registry.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/registry.js +191 -0
- package/dist/engine/contracts/contract_registry/registry.js.map +1 -0
- package/dist/engine/contracts/contract_registry/registry_internal.d.ts +12 -0
- package/dist/engine/contracts/contract_registry/registry_internal.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/registry_internal.js +47 -0
- package/dist/engine/contracts/contract_registry/registry_internal.js.map +1 -0
- package/dist/engine/contracts/contract_registry/types.d.ts +47 -0
- package/dist/engine/contracts/contract_registry/types.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/types.js +5 -0
- package/dist/engine/contracts/contract_registry/types.js.map +1 -0
- package/dist/engine/contracts/contract_registry/validation.d.ts +18 -0
- package/dist/engine/contracts/contract_registry/validation.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry/validation.js +339 -0
- package/dist/engine/contracts/contract_registry/validation.js.map +1 -0
- package/dist/engine/contracts/contract_registry.d.ts +9 -0
- package/dist/engine/contracts/contract_registry.d.ts.map +1 -0
- package/dist/engine/contracts/contract_registry.js +8 -0
- package/dist/engine/contracts/contract_registry.js.map +1 -0
- package/dist/engine/contracts/contract_state_store.d.ts +69 -0
- package/dist/engine/contracts/contract_state_store.d.ts.map +1 -0
- package/dist/engine/contracts/contract_state_store.js +170 -0
- package/dist/engine/contracts/contract_state_store.js.map +1 -0
- package/dist/engine/contracts/control_plane_contract.d.ts.map +1 -0
- package/dist/engine/contracts/control_plane_contract.js +266 -0
- package/dist/engine/contracts/control_plane_contract.js.map +1 -0
- package/dist/engine/contracts/decision_contract.d.ts +38 -0
- package/dist/engine/contracts/decision_contract.d.ts.map +1 -0
- package/dist/engine/contracts/decision_contract.js +57 -0
- package/dist/engine/contracts/decision_contract.js.map +1 -0
- package/dist/engine/contracts/decision_workshop.d.ts +166 -0
- package/dist/engine/contracts/decision_workshop.d.ts.map +1 -0
- package/dist/engine/contracts/decision_workshop.js.map +1 -0
- package/dist/engine/contracts/design_artifact_pack.d.ts +13 -0
- package/dist/engine/contracts/design_artifact_pack.d.ts.map +1 -0
- package/dist/engine/contracts/design_artifact_pack.js.map +1 -0
- package/dist/engine/contracts/design_lifecycle_contract.d.ts +60 -0
- package/dist/engine/contracts/design_lifecycle_contract.d.ts.map +1 -0
- package/dist/engine/contracts/design_lifecycle_contract.js +505 -0
- package/dist/engine/contracts/design_lifecycle_contract.js.map +1 -0
- package/dist/engine/contracts/detail_discipline.d.ts.map +1 -0
- package/dist/engine/contracts/detail_discipline.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/index.d.ts +9 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/index.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/index.js +8 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/index.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit.js +414 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.js +81 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_audit_tail.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_core.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_core.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_core.js +448 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_core.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_extension.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_extension.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_extension.js +445 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_extension.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_governance.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_governance.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_governance.js +274 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_governance.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_infra.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_infra.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_infra.js +247 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_infra.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_platform.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_platform.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_platform.js +470 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_platform.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_release.d.ts +7 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_release.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_release.js +320 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/mechanisms_release.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/shared.d.ts +8 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/shared.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/shared.js +60 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/shared.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/validation.d.ts +68 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/validation.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/validation.js +354 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry/validation.js.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry.d.ts +9 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry.d.ts.map +1 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry.js +8 -0
- package/dist/engine/contracts/dual_layer_mechanism_registry.js.map +1 -0
- package/dist/engine/contracts/enforcement_guard.d.ts +110 -0
- package/dist/engine/contracts/enforcement_guard.d.ts.map +1 -0
- package/dist/engine/contracts/enforcement_guard.js +473 -0
- package/dist/engine/contracts/enforcement_guard.js.map +1 -0
- package/dist/engine/contracts/error_path_verifier.d.ts +36 -0
- package/dist/engine/contracts/error_path_verifier.d.ts.map +1 -0
- package/dist/engine/contracts/error_path_verifier.js +131 -0
- package/dist/engine/contracts/error_path_verifier.js.map +1 -0
- package/dist/engine/contracts/escape_report.d.ts.map +1 -0
- package/dist/engine/contracts/escape_report.js +137 -0
- package/dist/engine/contracts/escape_report.js.map +1 -0
- package/dist/engine/contracts/evidence_grounding_contract.d.ts +135 -0
- package/dist/engine/contracts/evidence_grounding_contract.d.ts.map +1 -0
- package/dist/engine/contracts/evidence_grounding_contract.js +404 -0
- package/dist/engine/contracts/evidence_grounding_contract.js.map +1 -0
- package/dist/engine/contracts/evolution_regression_gate.d.ts +44 -0
- package/dist/engine/contracts/evolution_regression_gate.d.ts.map +1 -0
- package/dist/engine/contracts/evolution_regression_gate.js +161 -0
- package/dist/engine/contracts/evolution_regression_gate.js.map +1 -0
- package/dist/engine/contracts/existing_system_analysis.d.ts.map +1 -0
- package/dist/engine/contracts/existing_system_analysis.js.map +1 -0
- package/dist/engine/contracts/existing_system_analyzer.d.ts +153 -0
- package/dist/engine/contracts/existing_system_analyzer.d.ts.map +1 -0
- package/dist/engine/contracts/existing_system_analyzer.js +615 -0
- package/dist/engine/contracts/existing_system_analyzer.js.map +1 -0
- package/dist/engine/contracts/extension_contract.d.ts +50 -0
- package/dist/engine/contracts/extension_contract.d.ts.map +1 -0
- package/dist/engine/contracts/extension_contract.js +158 -0
- package/dist/engine/contracts/extension_contract.js.map +1 -0
- package/dist/engine/contracts/extension_platform_contracts.d.ts.map +1 -0
- package/dist/engine/contracts/extension_platform_contracts.js.map +1 -0
- package/dist/engine/contracts/extension_scenario_definitions.d.ts +10 -0
- package/dist/engine/contracts/extension_scenario_definitions.d.ts.map +1 -0
- package/dist/engine/contracts/extension_scenario_definitions.js +112 -0
- package/dist/engine/contracts/extension_scenario_definitions.js.map +1 -0
- package/dist/engine/contracts/extension_scenario_registry.d.ts +24 -0
- package/dist/engine/contracts/extension_scenario_registry.d.ts.map +1 -0
- package/dist/engine/contracts/extension_scenario_registry.js +711 -0
- package/dist/engine/contracts/extension_scenario_registry.js.map +1 -0
- package/dist/engine/contracts/first_principles.d.ts +84 -0
- package/dist/engine/contracts/first_principles.d.ts.map +1 -0
- package/dist/engine/contracts/first_principles.js +197 -0
- package/dist/engine/contracts/first_principles.js.map +1 -0
- package/dist/engine/contracts/instruction_contract.d.ts.map +1 -0
- package/dist/engine/contracts/instruction_contract.js +178 -0
- package/dist/engine/contracts/instruction_contract.js.map +1 -0
- package/dist/engine/contracts/lazy_pattern_detector.d.ts +43 -0
- package/dist/engine/contracts/lazy_pattern_detector.d.ts.map +1 -0
- package/dist/engine/contracts/lazy_pattern_detector.js +164 -0
- package/dist/engine/contracts/lazy_pattern_detector.js.map +1 -0
- package/dist/engine/contracts/lifecycle_knowledge_contract.d.ts +59 -0
- package/dist/engine/contracts/lifecycle_knowledge_contract.d.ts.map +1 -0
- package/dist/engine/contracts/lifecycle_knowledge_contract.js +203 -0
- package/dist/engine/contracts/lifecycle_knowledge_contract.js.map +1 -0
- package/dist/engine/contracts/local_docker_acceptance.d.ts +94 -0
- package/dist/engine/contracts/local_docker_acceptance.d.ts.map +1 -0
- package/dist/engine/contracts/local_docker_acceptance.js +312 -0
- package/dist/engine/contracts/local_docker_acceptance.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-audit.d.ts +13 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-audit.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-audit.js +422 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-audit.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-governance.d.ts +14 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-governance.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-governance.js +444 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-governance.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-pipeline.d.ts +11 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-pipeline.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-pipeline.js +246 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-pipeline.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-platform.d.ts +15 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-platform.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-platform.js +378 -0
- package/dist/engine/contracts/mechanism_contract_registry/contracts-platform.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/index.d.ts +19 -0
- package/dist/engine/contracts/mechanism_contract_registry/index.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/index.js +21 -0
- package/dist/engine/contracts/mechanism_contract_registry/index.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/types.d.ts +33 -0
- package/dist/engine/contracts/mechanism_contract_registry/types.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/types.js +5 -0
- package/dist/engine/contracts/mechanism_contract_registry/types.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/validation.d.ts +28 -0
- package/dist/engine/contracts/mechanism_contract_registry/validation.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry/validation.js +124 -0
- package/dist/engine/contracts/mechanism_contract_registry/validation.js.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry.d.ts +8 -0
- package/dist/engine/contracts/mechanism_contract_registry.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_contract_registry.js +7 -0
- package/dist/engine/contracts/mechanism_contract_registry.js.map +1 -0
- package/dist/engine/contracts/mechanism_health_check.d.ts +25 -0
- package/dist/engine/contracts/mechanism_health_check.d.ts.map +1 -0
- package/dist/engine/contracts/mechanism_health_check.js +143 -0
- package/dist/engine/contracts/mechanism_health_check.js.map +1 -0
- package/dist/engine/contracts/metric_governance.d.ts.map +1 -0
- package/dist/engine/contracts/metric_governance.js.map +1 -0
- package/dist/engine/contracts/omission_scanner.d.ts +83 -0
- package/dist/engine/contracts/omission_scanner.d.ts.map +1 -0
- package/dist/engine/contracts/omission_scanner.js +191 -0
- package/dist/engine/contracts/omission_scanner.js.map +1 -0
- package/dist/engine/contracts/ood_solid_contract.d.ts.map +1 -0
- package/dist/engine/contracts/ood_solid_contract.js +115 -0
- package/dist/engine/contracts/ood_solid_contract.js.map +1 -0
- package/dist/engine/contracts/platform_context.d.ts +46 -0
- package/dist/engine/contracts/platform_context.d.ts.map +1 -0
- package/dist/engine/contracts/platform_context.js +171 -0
- package/dist/engine/contracts/platform_context.js.map +1 -0
- package/dist/engine/contracts/project_knowledge_contract.d.ts +133 -0
- package/dist/engine/contracts/project_knowledge_contract.d.ts.map +1 -0
- package/dist/engine/contracts/project_knowledge_contract.js +559 -0
- package/dist/engine/contracts/project_knowledge_contract.js.map +1 -0
- package/dist/engine/contracts/slice_fix_loop.d.ts +86 -0
- package/dist/engine/contracts/slice_fix_loop.d.ts.map +1 -0
- package/dist/engine/contracts/slice_fix_loop.js +98 -0
- package/dist/engine/contracts/slice_fix_loop.js.map +1 -0
- package/dist/engine/contracts/state_machine_contracts.d.ts +17 -0
- package/dist/engine/contracts/state_machine_contracts.d.ts.map +1 -0
- package/dist/engine/contracts/state_machine_contracts.js +97 -0
- package/dist/engine/contracts/state_machine_contracts.js.map +1 -0
- package/dist/engine/contracts/technology_decision.d.ts +58 -0
- package/dist/engine/contracts/technology_decision.d.ts.map +1 -0
- package/dist/engine/contracts/technology_decision.js +175 -0
- package/dist/engine/contracts/technology_decision.js.map +1 -0
- package/dist/engine/contracts/template_schema_loader.d.ts +79 -0
- package/dist/engine/contracts/template_schema_loader.d.ts.map +1 -0
- package/dist/engine/contracts/template_schema_loader.js +301 -0
- package/dist/engine/contracts/template_schema_loader.js.map +1 -0
- package/dist/engine/contracts/tool_invocation_contract_registry.d.ts +76 -0
- package/dist/engine/contracts/tool_invocation_contract_registry.d.ts.map +1 -0
- package/dist/engine/contracts/tool_invocation_contract_registry.js +782 -0
- package/dist/engine/contracts/tool_invocation_contract_registry.js.map +1 -0
- package/dist/engine/contracts/traceability.d.ts +49 -0
- package/dist/engine/contracts/traceability.d.ts.map +1 -0
- package/dist/engine/contracts/traceability.js +470 -0
- package/dist/engine/contracts/traceability.js.map +1 -0
- package/dist/engine/contracts/user_feedback_contract.d.ts +162 -0
- package/dist/engine/contracts/user_feedback_contract.d.ts.map +1 -0
- package/dist/engine/contracts/user_feedback_contract.js +415 -0
- package/dist/engine/contracts/user_feedback_contract.js.map +1 -0
- package/dist/engine/contracts/user_promise.d.ts +67 -0
- package/dist/engine/contracts/user_promise.d.ts.map +1 -0
- package/dist/engine/contracts/user_promise.js +436 -0
- package/dist/engine/contracts/user_promise.js.map +1 -0
- package/dist/engine/contracts/verification_contract.d.ts.map +1 -0
- package/dist/engine/contracts/verification_contract.js.map +1 -0
- package/dist/engine/contracts/workflow_template_pack.d.ts +71 -0
- package/dist/engine/contracts/workflow_template_pack.d.ts.map +1 -0
- package/dist/engine/contracts/workflow_template_pack.js +246 -0
- package/dist/engine/contracts/workflow_template_pack.js.map +1 -0
- package/dist/engine/convention_detector.js +1 -1
- package/dist/engine/convention_detector.js.map +1 -1
- package/dist/engine/core/config_defaults.d.ts +11 -0
- package/dist/engine/core/config_defaults.d.ts.map +1 -0
- package/dist/engine/core/config_defaults.js +11 -0
- package/dist/engine/core/config_defaults.js.map +1 -0
- package/dist/engine/core/debug_log.d.ts +5 -0
- package/dist/engine/core/debug_log.d.ts.map +1 -0
- package/dist/engine/core/debug_log.js +5 -0
- package/dist/engine/core/debug_log.js.map +1 -0
- package/dist/engine/core/denied_paths.d.ts +25 -0
- package/dist/engine/core/denied_paths.d.ts.map +1 -0
- package/dist/engine/core/denied_paths.js +57 -0
- package/dist/engine/core/denied_paths.js.map +1 -0
- package/dist/engine/core/env.d.ts +12 -0
- package/dist/engine/core/env.d.ts.map +1 -0
- package/dist/engine/core/env.js +12 -0
- package/dist/engine/core/env.js.map +1 -0
- package/dist/engine/core/errors.d.ts +21 -0
- package/dist/engine/core/errors.d.ts.map +1 -0
- package/dist/engine/core/errors.js +35 -0
- package/dist/engine/core/errors.js.map +1 -0
- package/dist/engine/core/exit_codes.d.ts +14 -0
- package/dist/engine/core/exit_codes.d.ts.map +1 -0
- package/dist/engine/core/exit_codes.js +14 -0
- package/dist/engine/core/exit_codes.js.map +1 -0
- package/dist/engine/core/fail_closed.d.ts +39 -0
- package/dist/engine/core/fail_closed.d.ts.map +1 -0
- package/dist/engine/core/fail_closed.js +38 -0
- package/dist/engine/core/fail_closed.js.map +1 -0
- package/dist/engine/core/helpers.d.ts +24 -0
- package/dist/engine/core/helpers.d.ts.map +1 -0
- package/dist/engine/core/helpers.js +44 -0
- package/dist/engine/core/helpers.js.map +1 -0
- package/dist/engine/core/index.d.ts +17 -0
- package/dist/engine/core/index.d.ts.map +1 -0
- package/dist/engine/core/index.js +24 -0
- package/dist/engine/core/index.js.map +1 -0
- package/dist/engine/core/io_controller.d.ts +88 -0
- package/dist/engine/core/io_controller.d.ts.map +1 -0
- package/dist/engine/core/io_controller.js +219 -0
- package/dist/engine/core/io_controller.js.map +1 -0
- package/dist/engine/core/knowledge_config_loader.d.ts +28 -0
- package/dist/engine/core/knowledge_config_loader.d.ts.map +1 -0
- package/dist/engine/core/knowledge_config_loader.js +102 -0
- package/dist/engine/core/knowledge_config_loader.js.map +1 -0
- package/dist/engine/core/llm_gateway.d.ts +184 -0
- package/dist/engine/core/llm_gateway.d.ts.map +1 -0
- package/dist/engine/core/llm_gateway.js +374 -0
- package/dist/engine/core/llm_gateway.js.map +1 -0
- package/dist/engine/core/log_governance.d.ts.map +1 -0
- package/dist/engine/core/log_governance.js +71 -0
- package/dist/engine/core/log_governance.js.map +1 -0
- package/dist/engine/core/logger.d.ts.map +1 -0
- package/dist/engine/core/logger.js +118 -0
- package/dist/engine/core/logger.js.map +1 -0
- package/dist/engine/core/path_scope_utils.d.ts +21 -0
- package/dist/engine/core/path_scope_utils.d.ts.map +1 -0
- package/dist/engine/core/path_scope_utils.js +126 -0
- package/dist/engine/core/path_scope_utils.js.map +1 -0
- package/dist/engine/core/paths.d.ts +90 -0
- package/dist/engine/core/paths.d.ts.map +1 -0
- package/dist/engine/core/paths.js +109 -0
- package/dist/engine/core/paths.js.map +1 -0
- package/dist/engine/core/write_file_atomic.d.ts +25 -0
- package/dist/engine/core/write_file_atomic.d.ts.map +1 -0
- package/dist/engine/core/write_file_atomic.js +63 -0
- package/dist/engine/core/write_file_atomic.js.map +1 -0
- package/dist/engine/dependency_scanner.d.ts.map +1 -1
- package/dist/engine/dependency_scanner.js +16 -18
- package/dist/engine/dependency_scanner.js.map +1 -1
- package/dist/engine/exploration.d.ts.map +1 -1
- package/dist/engine/exploration.js +11 -10
- package/dist/engine/exploration.js.map +1 -1
- package/dist/engine/feasibility_checker.js +2 -2
- package/dist/engine/feasibility_checker.js.map +1 -1
- package/dist/engine/impact_analyzer.js +3 -3
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/knowledge/chinese_semantic_priority.d.ts.map +1 -0
- package/dist/engine/knowledge/chinese_semantic_priority.js.map +1 -0
- package/dist/engine/knowledge/documentation_governance.d.ts.map +1 -0
- package/dist/engine/knowledge/documentation_governance.js.map +1 -0
- package/dist/engine/knowledge/drift_classifier.d.ts +26 -0
- package/dist/engine/knowledge/drift_classifier.d.ts.map +1 -0
- package/dist/engine/knowledge/drift_classifier.js +82 -0
- package/dist/engine/knowledge/drift_classifier.js.map +1 -0
- package/dist/engine/knowledge/knowledge_acceptance_registry.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_acceptance_registry.js +261 -0
- package/dist/engine/knowledge/knowledge_acceptance_registry.js.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_audit.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_audit.js +231 -0
- package/dist/engine/knowledge/knowledge_asset_audit.js.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_consumer.d.ts +157 -0
- package/dist/engine/knowledge/knowledge_asset_consumer.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_consumer.js +288 -0
- package/dist/engine/knowledge/knowledge_asset_consumer.js.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_generation_gate.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_generation_gate.js.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_migration.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_migration.js +204 -0
- package/dist/engine/knowledge/knowledge_asset_migration.js.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_schema.d.ts +102 -0
- package/dist/engine/knowledge/knowledge_asset_schema.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_asset_schema.js +427 -0
- package/dist/engine/knowledge/knowledge_asset_schema.js.map +1 -0
- package/dist/engine/knowledge/knowledge_config_loader.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_config_loader.js +144 -0
- package/dist/engine/knowledge/knowledge_config_loader.js.map +1 -0
- package/dist/engine/knowledge/knowledge_consumption_snapshot.d.ts +91 -0
- package/dist/engine/knowledge/knowledge_consumption_snapshot.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_consumption_snapshot.js +113 -0
- package/dist/engine/knowledge/knowledge_consumption_snapshot.js.map +1 -0
- package/dist/engine/knowledge/knowledge_evolution.d.ts +66 -0
- package/dist/engine/knowledge/knowledge_evolution.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_evolution.js +200 -0
- package/dist/engine/knowledge/knowledge_evolution.js.map +1 -0
- package/dist/engine/knowledge/knowledge_governance_gate.d.ts +41 -0
- package/dist/engine/knowledge/knowledge_governance_gate.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_governance_gate.js +123 -0
- package/dist/engine/knowledge/knowledge_governance_gate.js.map +1 -0
- package/dist/engine/knowledge/knowledge_health.d.ts +44 -0
- package/dist/engine/knowledge/knowledge_health.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_health.js +305 -0
- package/dist/engine/knowledge/knowledge_health.js.map +1 -0
- package/dist/engine/knowledge/knowledge_injection_boundary.d.ts +108 -0
- package/dist/engine/knowledge/knowledge_injection_boundary.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_injection_boundary.js +760 -0
- package/dist/engine/knowledge/knowledge_injection_boundary.js.map +1 -0
- package/dist/engine/knowledge/knowledge_lifecycle.d.ts +97 -0
- package/dist/engine/knowledge/knowledge_lifecycle.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_lifecycle.js +299 -0
- package/dist/engine/knowledge/knowledge_lifecycle.js.map +1 -0
- package/dist/engine/knowledge/knowledge_manager.d.ts +3 -0
- package/dist/engine/knowledge/knowledge_manager.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_manager.js +5 -0
- package/dist/engine/knowledge/knowledge_manager.js.map +1 -0
- package/dist/engine/knowledge/knowledge_scenario_registry.d.ts +21 -0
- package/dist/engine/knowledge/knowledge_scenario_registry.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_scenario_registry.js +329 -0
- package/dist/engine/knowledge/knowledge_scenario_registry.js.map +1 -0
- package/dist/engine/knowledge/knowledge_sovereignty.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_sovereignty.js +196 -0
- package/dist/engine/knowledge/knowledge_sovereignty.js.map +1 -0
- package/dist/engine/knowledge/knowledge_template_contracts.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_template_contracts.js.map +1 -0
- package/dist/engine/knowledge/knowledge_writer.d.ts +108 -0
- package/dist/engine/knowledge/knowledge_writer.d.ts.map +1 -0
- package/dist/engine/knowledge/knowledge_writer.js +637 -0
- package/dist/engine/knowledge/knowledge_writer.js.map +1 -0
- package/dist/engine/knowledge/language_policy.d.ts +78 -0
- package/dist/engine/knowledge/language_policy.d.ts.map +1 -0
- package/dist/engine/knowledge/language_policy.js +139 -0
- package/dist/engine/knowledge/language_policy.js.map +1 -0
- package/dist/engine/knowledge/language_policy_contract.d.ts.map +1 -0
- package/dist/engine/knowledge/language_policy_contract.js.map +1 -0
- package/dist/engine/knowledge/release_compatibility.d.ts.map +1 -0
- package/dist/engine/knowledge/release_compatibility.js.map +1 -0
- package/dist/engine/migration_guard.js +5 -5
- package/dist/engine/migration_guard.js.map +1 -1
- package/dist/engine/onboarding.d.ts +2 -2
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/onboarding.js +8 -5
- package/dist/engine/onboarding.js.map +1 -1
- package/dist/engine/pipeline/artifact_aliases.d.ts +19 -0
- package/dist/engine/pipeline/artifact_aliases.d.ts.map +1 -0
- package/dist/engine/pipeline/artifact_aliases.js +39 -0
- package/dist/engine/pipeline/artifact_aliases.js.map +1 -0
- package/dist/engine/pipeline/conflict_gate.d.ts.map +1 -0
- package/dist/engine/pipeline/conflict_gate.js +92 -0
- package/dist/engine/pipeline/conflict_gate.js.map +1 -0
- package/dist/engine/pipeline/diff_ownership.d.ts.map +1 -0
- package/dist/engine/pipeline/diff_ownership.js +159 -0
- package/dist/engine/pipeline/diff_ownership.js.map +1 -0
- package/dist/engine/pipeline/diff_ownership_store.d.ts.map +1 -0
- package/dist/engine/pipeline/diff_ownership_store.js +293 -0
- package/dist/engine/pipeline/diff_ownership_store.js.map +1 -0
- package/dist/engine/pipeline/input_material_contract_registry.d.ts +185 -0
- package/dist/engine/pipeline/input_material_contract_registry.d.ts.map +1 -0
- package/dist/engine/pipeline/input_material_contract_registry.js +565 -0
- package/dist/engine/pipeline/input_material_contract_registry.js.map +1 -0
- package/dist/engine/pipeline/input_material_extractor.d.ts +47 -0
- package/dist/engine/pipeline/input_material_extractor.d.ts.map +1 -0
- package/dist/engine/pipeline/input_material_extractor.js +156 -0
- package/dist/engine/pipeline/input_material_extractor.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/helpers.d.ts +44 -0
- package/dist/engine/pipeline/intent_expander/helpers.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/helpers.js +158 -0
- package/dist/engine/pipeline/intent_expander/helpers.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/index.d.ts +12 -0
- package/dist/engine/pipeline/intent_expander/index.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/index.js +14 -0
- package/dist/engine/pipeline/intent_expander/index.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/knowledge.d.ts +16 -0
- package/dist/engine/pipeline/intent_expander/knowledge.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/knowledge.js +154 -0
- package/dist/engine/pipeline/intent_expander/knowledge.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/knowledge_resolution.d.ts +47 -0
- package/dist/engine/pipeline/intent_expander/knowledge_resolution.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/knowledge_resolution.js +301 -0
- package/dist/engine/pipeline/intent_expander/knowledge_resolution.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/privacy_gates.d.ts +33 -0
- package/dist/engine/pipeline/intent_expander/privacy_gates.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/privacy_gates.js +66 -0
- package/dist/engine/pipeline/intent_expander/privacy_gates.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/scope_acceptance.d.ts +80 -0
- package/dist/engine/pipeline/intent_expander/scope_acceptance.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/scope_acceptance.js +219 -0
- package/dist/engine/pipeline/intent_expander/scope_acceptance.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/templates.d.ts +28 -0
- package/dist/engine/pipeline/intent_expander/templates.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/templates.js +662 -0
- package/dist/engine/pipeline/intent_expander/templates.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/types.d.ts +101 -0
- package/dist/engine/pipeline/intent_expander/types.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/types.js +8 -0
- package/dist/engine/pipeline/intent_expander/types.js.map +1 -0
- package/dist/engine/pipeline/intent_expander/uncertainty_circuit.d.ts +33 -0
- package/dist/engine/pipeline/intent_expander/uncertainty_circuit.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander/uncertainty_circuit.js +187 -0
- package/dist/engine/pipeline/intent_expander/uncertainty_circuit.js.map +1 -0
- package/dist/engine/pipeline/intent_expander.d.ts +12 -0
- package/dist/engine/pipeline/intent_expander.d.ts.map +1 -0
- package/dist/engine/pipeline/intent_expander.js +14 -0
- package/dist/engine/pipeline/intent_expander.js.map +1 -0
- package/dist/engine/pipeline/job_manager.d.ts +111 -0
- package/dist/engine/pipeline/job_manager.d.ts.map +1 -0
- package/dist/engine/pipeline/job_manager.js +284 -0
- package/dist/engine/pipeline/job_manager.js.map +1 -0
- package/dist/engine/pipeline/plan_proposal_gate.d.ts.map +1 -0
- package/dist/engine/pipeline/plan_proposal_gate.js +340 -0
- package/dist/engine/pipeline/plan_proposal_gate.js.map +1 -0
- package/dist/engine/pipeline/prompt_template_resolver.d.ts +13 -0
- package/dist/engine/pipeline/prompt_template_resolver.d.ts.map +1 -0
- package/dist/engine/pipeline/prompt_template_resolver.js +25 -0
- package/dist/engine/pipeline/prompt_template_resolver.js.map +1 -0
- package/dist/engine/pipeline/rollback_router.d.ts +35 -0
- package/dist/engine/pipeline/rollback_router.d.ts.map +1 -0
- package/dist/engine/pipeline/rollback_router.js +57 -0
- package/dist/engine/pipeline/rollback_router.js.map +1 -0
- package/dist/engine/pipeline/scope_controller.d.ts +17 -0
- package/dist/engine/pipeline/scope_controller.d.ts.map +1 -0
- package/dist/engine/pipeline/scope_controller.js +224 -0
- package/dist/engine/pipeline/scope_controller.js.map +1 -0
- package/dist/engine/pipeline/scope_lease.d.ts +92 -0
- package/dist/engine/pipeline/scope_lease.d.ts.map +1 -0
- package/dist/engine/pipeline/scope_lease.js +178 -0
- package/dist/engine/pipeline/scope_lease.js.map +1 -0
- package/dist/engine/pipeline/scope_resolver.d.ts +18 -0
- package/dist/engine/pipeline/scope_resolver.d.ts.map +1 -0
- package/dist/engine/pipeline/scope_resolver.js +533 -0
- package/dist/engine/pipeline/scope_resolver.js.map +1 -0
- package/dist/engine/pipeline/slice_executor.d.ts +83 -0
- package/dist/engine/pipeline/slice_executor.d.ts.map +1 -0
- package/dist/engine/pipeline/slice_executor.js +103 -0
- package/dist/engine/pipeline/slice_executor.js.map +1 -0
- package/dist/engine/pipeline/stale_current_task_detector.d.ts +30 -0
- package/dist/engine/pipeline/stale_current_task_detector.d.ts.map +1 -0
- package/dist/engine/pipeline/stale_current_task_detector.js +171 -0
- package/dist/engine/pipeline/stale_current_task_detector.js.map +1 -0
- package/dist/engine/pipeline/state_machine/audit_logger.d.ts +42 -0
- package/dist/engine/pipeline/state_machine/audit_logger.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/audit_logger.js +71 -0
- package/dist/engine/pipeline/state_machine/audit_logger.js.map +1 -0
- package/dist/engine/pipeline/state_machine/capability_safety_valve.d.ts +51 -0
- package/dist/engine/pipeline/state_machine/capability_safety_valve.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/capability_safety_valve.js +131 -0
- package/dist/engine/pipeline/state_machine/capability_safety_valve.js.map +1 -0
- package/dist/engine/pipeline/state_machine/certainty_gate.d.ts +92 -0
- package/dist/engine/pipeline/state_machine/certainty_gate.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/certainty_gate.js +391 -0
- package/dist/engine/pipeline/state_machine/certainty_gate.js.map +1 -0
- package/dist/engine/pipeline/state_machine/command_state_verifier.d.ts +50 -0
- package/dist/engine/pipeline/state_machine/command_state_verifier.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/command_state_verifier.js +160 -0
- package/dist/engine/pipeline/state_machine/command_state_verifier.js.map +1 -0
- package/dist/engine/pipeline/state_machine/hook_classifier.d.ts +71 -0
- package/dist/engine/pipeline/state_machine/hook_classifier.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/hook_classifier.js +146 -0
- package/dist/engine/pipeline/state_machine/hook_classifier.js.map +1 -0
- package/dist/engine/pipeline/state_machine/human_uncertainty_detector.d.ts +33 -0
- package/dist/engine/pipeline/state_machine/human_uncertainty_detector.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/human_uncertainty_detector.js +72 -0
- package/dist/engine/pipeline/state_machine/human_uncertainty_detector.js.map +1 -0
- package/dist/engine/pipeline/state_machine/knowledge_stage_query.d.ts +21 -0
- package/dist/engine/pipeline/state_machine/knowledge_stage_query.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/knowledge_stage_query.js +33 -0
- package/dist/engine/pipeline/state_machine/knowledge_stage_query.js.map +1 -0
- package/dist/engine/pipeline/state_machine/pipeline_state_machine.d.ts +158 -0
- package/dist/engine/pipeline/state_machine/pipeline_state_machine.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/pipeline_state_machine.js +1197 -0
- package/dist/engine/pipeline/state_machine/pipeline_state_machine.js.map +1 -0
- package/dist/engine/pipeline/state_machine/risk_pattern_scanner.d.ts +34 -0
- package/dist/engine/pipeline/state_machine/risk_pattern_scanner.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/risk_pattern_scanner.js +152 -0
- package/dist/engine/pipeline/state_machine/risk_pattern_scanner.js.map +1 -0
- package/dist/engine/pipeline/state_machine/route_usage_stats.d.ts +28 -0
- package/dist/engine/pipeline/state_machine/route_usage_stats.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/route_usage_stats.js +76 -0
- package/dist/engine/pipeline/state_machine/route_usage_stats.js.map +1 -0
- package/dist/engine/pipeline/state_machine/sf_command_parser.d.ts +22 -0
- package/dist/engine/pipeline/state_machine/sf_command_parser.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/sf_command_parser.js +171 -0
- package/dist/engine/pipeline/state_machine/sf_command_parser.js.map +1 -0
- package/dist/engine/pipeline/state_machine/stage_command_registry.d.ts +38 -0
- package/dist/engine/pipeline/state_machine/stage_command_registry.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/stage_command_registry.js +218 -0
- package/dist/engine/pipeline/state_machine/stage_command_registry.js.map +1 -0
- package/dist/engine/pipeline/state_machine/stage_executor.d.ts +37 -0
- package/dist/engine/pipeline/state_machine/stage_executor.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/stage_executor.js +67 -0
- package/dist/engine/pipeline/state_machine/stage_executor.js.map +1 -0
- package/dist/engine/pipeline/state_machine/state_migrator.d.ts +21 -0
- package/dist/engine/pipeline/state_machine/state_migrator.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/state_migrator.js +130 -0
- package/dist/engine/pipeline/state_machine/state_migrator.js.map +1 -0
- package/dist/engine/pipeline/state_machine/state_self_diagnostic.d.ts +48 -0
- package/dist/engine/pipeline/state_machine/state_self_diagnostic.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/state_self_diagnostic.js +566 -0
- package/dist/engine/pipeline/state_machine/state_self_diagnostic.js.map +1 -0
- package/dist/engine/pipeline/state_machine/static_route_table.d.ts +36 -0
- package/dist/engine/pipeline/state_machine/static_route_table.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/static_route_table.js +112 -0
- package/dist/engine/pipeline/state_machine/static_route_table.js.map +1 -0
- package/dist/engine/pipeline/state_machine/strong_confirmation.d.ts +45 -0
- package/dist/engine/pipeline/state_machine/strong_confirmation.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/strong_confirmation.js +57 -0
- package/dist/engine/pipeline/state_machine/strong_confirmation.js.map +1 -0
- package/dist/engine/pipeline/state_machine/uncertainty_bridge.d.ts +55 -0
- package/dist/engine/pipeline/state_machine/uncertainty_bridge.d.ts.map +1 -0
- package/dist/engine/pipeline/state_machine/uncertainty_bridge.js +48 -0
- package/dist/engine/pipeline/state_machine/uncertainty_bridge.js.map +1 -0
- package/dist/engine/pipeline/task_context/cleanup.d.ts +13 -0
- package/dist/engine/pipeline/task_context/cleanup.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/cleanup.js +68 -0
- package/dist/engine/pipeline/task_context/cleanup.js.map +1 -0
- package/dist/engine/pipeline/task_context/constants.d.ts +9 -0
- package/dist/engine/pipeline/task_context/constants.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/constants.js +20 -0
- package/dist/engine/pipeline/task_context/constants.js.map +1 -0
- package/dist/engine/pipeline/task_context/expansion_privacy.d.ts +18 -0
- package/dist/engine/pipeline/task_context/expansion_privacy.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/expansion_privacy.js +82 -0
- package/dist/engine/pipeline/task_context/expansion_privacy.js.map +1 -0
- package/dist/engine/pipeline/task_context/index.d.ts +19 -0
- package/dist/engine/pipeline/task_context/index.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/index.js +19 -0
- package/dist/engine/pipeline/task_context/index.js.map +1 -0
- package/dist/engine/pipeline/task_context/manager.d.ts +200 -0
- package/dist/engine/pipeline/task_context/manager.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/manager.js +758 -0
- package/dist/engine/pipeline/task_context/manager.js.map +1 -0
- package/dist/engine/pipeline/task_context/manager_setters.d.ts +65 -0
- package/dist/engine/pipeline/task_context/manager_setters.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/manager_setters.js +288 -0
- package/dist/engine/pipeline/task_context/manager_setters.js.map +1 -0
- package/dist/engine/pipeline/task_context/phase_directive.d.ts +10 -0
- package/dist/engine/pipeline/task_context/phase_directive.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/phase_directive.js +75 -0
- package/dist/engine/pipeline/task_context/phase_directive.js.map +1 -0
- package/dist/engine/pipeline/task_context/status_transitions.d.ts +17 -0
- package/dist/engine/pipeline/task_context/status_transitions.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context/status_transitions.js +76 -0
- package/dist/engine/pipeline/task_context/status_transitions.js.map +1 -0
- package/dist/engine/pipeline/task_context.d.ts +15 -0
- package/dist/engine/pipeline/task_context.d.ts.map +1 -0
- package/dist/engine/pipeline/task_context.js +15 -0
- package/dist/engine/pipeline/task_context.js.map +1 -0
- package/dist/engine/pipeline/task_planner.d.ts +30 -0
- package/dist/engine/pipeline/task_planner.d.ts.map +1 -0
- package/dist/engine/pipeline/task_planner.js +334 -0
- package/dist/engine/pipeline/task_planner.js.map +1 -0
- package/dist/engine/pipeline/task_stage_detector.d.ts +27 -0
- package/dist/engine/pipeline/task_stage_detector.d.ts.map +1 -0
- package/dist/engine/pipeline/task_stage_detector.js +191 -0
- package/dist/engine/pipeline/task_stage_detector.js.map +1 -0
- package/dist/engine/pipeline/workspace_lease.d.ts +78 -0
- package/dist/engine/pipeline/workspace_lease.d.ts.map +1 -0
- package/dist/engine/pipeline/workspace_lease.js +180 -0
- package/dist/engine/pipeline/workspace_lease.js.map +1 -0
- package/dist/engine/pipeline/workspace_resumer.d.ts.map +1 -0
- package/dist/engine/pipeline/workspace_resumer.js +210 -0
- package/dist/engine/pipeline/workspace_resumer.js.map +1 -0
- package/dist/engine/release/foundation_scenario_registry.d.ts +44 -0
- package/dist/engine/release/foundation_scenario_registry.d.ts.map +1 -0
- package/dist/engine/release/foundation_scenario_registry.js +281 -0
- package/dist/engine/release/foundation_scenario_registry.js.map +1 -0
- package/dist/engine/release/foundation_scenario_runners.d.ts +54 -0
- package/dist/engine/release/foundation_scenario_runners.d.ts.map +1 -0
- package/dist/engine/release/foundation_scenario_runners.js +151 -0
- package/dist/engine/release/foundation_scenario_runners.js.map +1 -0
- package/dist/engine/release/gate_checks/checkControlPlaneTrust.d.ts +9 -0
- package/dist/engine/release/gate_checks/checkControlPlaneTrust.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkControlPlaneTrust.js +121 -0
- package/dist/engine/release/gate_checks/checkControlPlaneTrust.js.map +1 -0
- package/dist/engine/release/gate_checks/checkCriticalProblemConsumption.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkCriticalProblemConsumption.js +498 -0
- package/dist/engine/release/gate_checks/checkCriticalProblemConsumption.js.map +1 -0
- package/dist/engine/release/gate_checks/checkDependencyAudit.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkDependencyAudit.js +45 -0
- package/dist/engine/release/gate_checks/checkDependencyAudit.js.map +1 -0
- package/dist/engine/release/gate_checks/checkDistFreshness.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkDistFreshness.js +59 -0
- package/dist/engine/release/gate_checks/checkDistFreshness.js.map +1 -0
- package/dist/engine/release/gate_checks/checkKnowledgeAssetSchemaP0.d.ts +6 -0
- package/dist/engine/release/gate_checks/checkKnowledgeAssetSchemaP0.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkKnowledgeAssetSchemaP0.js +30 -0
- package/dist/engine/release/gate_checks/checkKnowledgeAssetSchemaP0.js.map +1 -0
- package/dist/engine/release/gate_checks/checkMainlineConsumption.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkMainlineConsumption.js +356 -0
- package/dist/engine/release/gate_checks/checkMainlineConsumption.js.map +1 -0
- package/dist/engine/release/gate_checks/checkNpmPack.d.ts +10 -0
- package/dist/engine/release/gate_checks/checkNpmPack.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkNpmPack.js +69 -0
- package/dist/engine/release/gate_checks/checkNpmPack.js.map +1 -0
- package/dist/engine/release/gate_checks/checkTemplateKnowledgeHygiene.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkTemplateKnowledgeHygiene.js +267 -0
- package/dist/engine/release/gate_checks/checkTemplateKnowledgeHygiene.js.map +1 -0
- package/dist/engine/release/gate_checks/checkWorkflowNavigation.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/checkWorkflowNavigation.js +189 -0
- package/dist/engine/release/gate_checks/checkWorkflowNavigation.js.map +1 -0
- package/dist/engine/release/gate_checks/helpers.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/helpers.js +92 -0
- package/dist/engine/release/gate_checks/helpers.js.map +1 -0
- package/dist/engine/release/gate_checks/types.d.ts.map +1 -0
- package/dist/engine/release/gate_checks/types.js.map +1 -0
- package/dist/engine/release/index.d.ts +6 -0
- package/dist/engine/release/index.d.ts.map +1 -0
- package/dist/engine/release/index.js +6 -0
- package/dist/engine/release/index.js.map +1 -0
- package/dist/engine/release/release_gate_scenario_registry.d.ts.map +1 -0
- package/dist/engine/release/release_gate_scenario_registry.js +717 -0
- package/dist/engine/release/release_gate_scenario_registry.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/fixtures.d.ts +8 -0
- package/dist/engine/release/release_issue_scenario_registry/fixtures.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/fixtures.js +54 -0
- package/dist/engine/release/release_issue_scenario_registry/fixtures.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/index.d.ts +8 -0
- package/dist/engine/release/release_issue_scenario_registry/index.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/index.js +7 -0
- package/dist/engine/release/release_issue_scenario_registry/index.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/registry.d.ts +26 -0
- package/dist/engine/release/release_issue_scenario_registry/registry.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/registry.js +83 -0
- package/dist/engine/release/release_issue_scenario_registry/registry.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_architecture_workshop.d.ts +6 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_architecture_workshop.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_architecture_workshop.js +284 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_architecture_workshop.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_code_observability.d.ts +6 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_code_observability.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_code_observability.js +214 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_code_observability.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_decision_workshop.d.ts +6 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_decision_workshop.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_decision_workshop.js +356 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_decision_workshop.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_design_pack.d.ts +6 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_design_pack.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_design_pack.js +232 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_design_pack.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_contract.d.ts +6 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_contract.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_contract.js +358 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_contract.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_visibility.d.ts +6 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_visibility.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_visibility.js +292 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_template_visibility.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_workflow_navigation.d.ts +12 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_workflow_navigation.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_workflow_navigation.js +147 -0
- package/dist/engine/release/release_issue_scenario_registry/scenarios_workflow_navigation.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/types.d.ts +37 -0
- package/dist/engine/release/release_issue_scenario_registry/types.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/types.js +5 -0
- package/dist/engine/release/release_issue_scenario_registry/types.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/workshop_helpers.d.ts +35 -0
- package/dist/engine/release/release_issue_scenario_registry/workshop_helpers.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry/workshop_helpers.js +78 -0
- package/dist/engine/release/release_issue_scenario_registry/workshop_helpers.js.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry.d.ts +9 -0
- package/dist/engine/release/release_issue_scenario_registry.d.ts.map +1 -0
- package/dist/engine/release/release_issue_scenario_registry.js +8 -0
- package/dist/engine/release/release_issue_scenario_registry.js.map +1 -0
- package/dist/engine/release/release_readiness_gate.d.ts +26 -0
- package/dist/engine/release/release_readiness_gate.d.ts.map +1 -0
- package/dist/engine/release/release_readiness_gate.js +209 -0
- package/dist/engine/release/release_readiness_gate.js.map +1 -0
- package/dist/engine/release/release_tool_harness.d.ts +84 -0
- package/dist/engine/release/release_tool_harness.d.ts.map +1 -0
- package/dist/engine/release/release_tool_harness.js +169 -0
- package/dist/engine/release/release_tool_harness.js.map +1 -0
- package/dist/engine/release/types.d.ts +81 -0
- package/dist/engine/release/types.d.ts.map +1 -0
- package/dist/engine/release/types.js +7 -0
- package/dist/engine/release/types.js.map +1 -0
- package/dist/engine/release/verifier.d.ts +45 -0
- package/dist/engine/release/verifier.d.ts.map +1 -0
- package/dist/engine/release/verifier.js +629 -0
- package/dist/engine/release/verifier.js.map +1 -0
- package/dist/engine/retention_policy.js +1 -1
- package/dist/engine/retention_policy.js.map +1 -1
- package/dist/engine/state_fact_classifier.d.ts +3 -3
- package/dist/engine/state_fact_classifier.js +4 -4
- package/dist/engine/state_fact_classifier.js.map +1 -1
- package/dist/engine/team_awareness.d.ts +1 -1
- package/dist/engine/team_awareness.d.ts.map +1 -1
- package/dist/engine/team_awareness.js +1 -1
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/engine/templates/asset_manifest.d.ts +67 -0
- package/dist/engine/templates/asset_manifest.d.ts.map +1 -0
- package/dist/engine/templates/asset_manifest.js +316 -0
- package/dist/engine/templates/asset_manifest.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_core.d.ts +8 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_core.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_core.js +326 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_core.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_core.d.ts +7 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_core.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_core.js +310 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_core.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext.d.ts +7 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext.js +255 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext2.d.ts +8 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext2.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext2.js +281 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_dual_layer_ext2.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_pipeline.d.ts +7 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_pipeline.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_pipeline.js +60 -0
- package/dist/engine/templates/consumable_asset_registry/builtin_assets_pipeline.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/index.d.ts +9 -0
- package/dist/engine/templates/consumable_asset_registry/index.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/index.js +9 -0
- package/dist/engine/templates/consumable_asset_registry/index.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/registry.d.ts +33 -0
- package/dist/engine/templates/consumable_asset_registry/registry.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/registry.js +55 -0
- package/dist/engine/templates/consumable_asset_registry/registry.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/types.d.ts +55 -0
- package/dist/engine/templates/consumable_asset_registry/types.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry/types.js +246 -0
- package/dist/engine/templates/consumable_asset_registry/types.js.map +1 -0
- package/dist/engine/templates/consumable_asset_registry.d.ts +11 -0
- package/dist/engine/templates/consumable_asset_registry.d.ts.map +1 -0
- package/dist/engine/templates/consumable_asset_registry.js +10 -0
- package/dist/engine/templates/consumable_asset_registry.js.map +1 -0
- package/dist/engine/templates/consumption_trace_store.d.ts +93 -0
- package/dist/engine/templates/consumption_trace_store.d.ts.map +1 -0
- package/dist/engine/templates/consumption_trace_store.js +128 -0
- package/dist/engine/templates/consumption_trace_store.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/adapters.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/adapters.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/adapters.js +67 -0
- package/dist/engine/templates/explicit_asset_registry/adapters.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_existing_system.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_existing_system.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_existing_system.js +163 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_existing_system.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part1.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part1.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part1.js +403 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part1.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part2.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part2.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part2.js +83 -0
- package/dist/engine/templates/explicit_asset_registry/artifacts_shared_part2.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/checklists.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/checklists.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/checklists.js +115 -0
- package/dist/engine/templates/explicit_asset_registry/checklists.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/contributing.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/contributing.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/contributing.js +19 -0
- package/dist/engine/templates/explicit_asset_registry/contributing.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/domain.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/domain.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/domain.js +147 -0
- package/dist/engine/templates/explicit_asset_registry/domain.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/gates.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/gates.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/gates.js +374 -0
- package/dist/engine/templates/explicit_asset_registry/gates.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/index.d.ts +4 -0
- package/dist/engine/templates/explicit_asset_registry/index.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/index.js +58 -0
- package/dist/engine/templates/explicit_asset_registry/index.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/internal_patterns.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/internal_patterns.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/internal_patterns.js +435 -0
- package/dist/engine/templates/explicit_asset_registry/internal_patterns.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part1.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part1.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part1.js +419 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part1.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part2.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part2.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part2.js +323 -0
- package/dist/engine/templates/explicit_asset_registry/internal_rules_part2.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part1.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part1.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part1.js +403 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part1.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part2.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part2.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part2.js +403 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part2.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part3.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part3.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part3.js +35 -0
- package/dist/engine/templates/explicit_asset_registry/patterns_part3.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part1.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part1.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part1.js +435 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part1.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part2.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part2.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part2.js +230 -0
- package/dist/engine/templates/explicit_asset_registry/procedures_part2.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/profiles.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/profiles.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/profiles.js +51 -0
- package/dist/engine/templates/explicit_asset_registry/profiles.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/rules_pipeline.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/rules_pipeline.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/rules_pipeline.js +163 -0
- package/dist/engine/templates/explicit_asset_registry/rules_pipeline.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/rules_shared.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/rules_shared.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/rules_shared.js +622 -0
- package/dist/engine/templates/explicit_asset_registry/rules_shared.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/scaffolds.d.ts +3 -0
- package/dist/engine/templates/explicit_asset_registry/scaffolds.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/scaffolds.js +378 -0
- package/dist/engine/templates/explicit_asset_registry/scaffolds.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/types.d.ts +29 -0
- package/dist/engine/templates/explicit_asset_registry/types.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry/types.js +7 -0
- package/dist/engine/templates/explicit_asset_registry/types.js.map +1 -0
- package/dist/engine/templates/explicit_asset_registry.d.ts +9 -0
- package/dist/engine/templates/explicit_asset_registry.d.ts.map +1 -0
- package/dist/engine/templates/explicit_asset_registry.js +9 -0
- package/dist/engine/templates/explicit_asset_registry.js.map +1 -0
- package/dist/engine/templates/observed_consumption.d.ts +54 -0
- package/dist/engine/templates/observed_consumption.d.ts.map +1 -0
- package/dist/engine/templates/observed_consumption.js +364 -0
- package/dist/engine/templates/observed_consumption.js.map +1 -0
- package/dist/engine/templates/scaffolder.d.ts +19 -0
- package/dist/engine/templates/scaffolder.d.ts.map +1 -0
- package/dist/engine/templates/scaffolder.js +412 -0
- package/dist/engine/templates/scaffolder.js.map +1 -0
- package/dist/engine/templates/standard_asset_contract.d.ts +105 -0
- package/dist/engine/templates/standard_asset_contract.d.ts.map +1 -0
- package/dist/engine/templates/standard_asset_contract.js +540 -0
- package/dist/engine/templates/standard_asset_contract.js.map +1 -0
- package/dist/engine/templates/standard_asset_coverage.d.ts.map +1 -0
- package/dist/engine/templates/standard_asset_coverage.js +220 -0
- package/dist/engine/templates/standard_asset_coverage.js.map +1 -0
- package/dist/engine/templates/template_asset_contract_registry.d.ts +162 -0
- package/dist/engine/templates/template_asset_contract_registry.d.ts.map +1 -0
- package/dist/engine/templates/template_asset_contract_registry.js +662 -0
- package/dist/engine/templates/template_asset_contract_registry.js.map +1 -0
- package/dist/engine/templates/template_asset_visibility.d.ts +109 -0
- package/dist/engine/templates/template_asset_visibility.d.ts.map +1 -0
- package/dist/engine/templates/template_asset_visibility.js +304 -0
- package/dist/engine/templates/template_asset_visibility.js.map +1 -0
- package/dist/engine/templates/template_init_sync.d.ts +103 -0
- package/dist/engine/templates/template_init_sync.d.ts.map +1 -0
- package/dist/engine/templates/template_init_sync.js +447 -0
- package/dist/engine/templates/template_init_sync.js.map +1 -0
- package/dist/engine/templates/template_manifest_io.d.ts +57 -0
- package/dist/engine/templates/template_manifest_io.d.ts.map +1 -0
- package/dist/engine/templates/template_manifest_io.js +189 -0
- package/dist/engine/templates/template_manifest_io.js.map +1 -0
- package/dist/engine/templates/template_mechanism_auditor.d.ts +95 -0
- package/dist/engine/templates/template_mechanism_auditor.d.ts.map +1 -0
- package/dist/engine/templates/template_mechanism_auditor.js +627 -0
- package/dist/engine/templates/template_mechanism_auditor.js.map +1 -0
- package/dist/engine/templates/template_sync.d.ts +98 -0
- package/dist/engine/templates/template_sync.d.ts.map +1 -0
- package/dist/engine/templates/template_sync.js.map +1 -0
- package/dist/engine/templates/workflow_rule_generator.d.ts +22 -0
- package/dist/engine/templates/workflow_rule_generator.d.ts.map +1 -0
- package/dist/engine/templates/workflow_rule_generator.js +81 -0
- package/dist/engine/templates/workflow_rule_generator.js.map +1 -0
- package/dist/engine/workflow/index.d.ts +10 -0
- package/dist/engine/workflow/index.d.ts.map +1 -0
- package/dist/engine/workflow/index.js +12 -0
- package/dist/engine/workflow/index.js.map +1 -0
- package/dist/engine/workflow/next_action_planner.d.ts +32 -0
- package/dist/engine/workflow/next_action_planner.d.ts.map +1 -0
- package/dist/engine/workflow/next_action_planner.js +868 -0
- package/dist/engine/workflow/next_action_planner.js.map +1 -0
- package/dist/engine/workflow/project_stage_detector.d.ts.map +1 -0
- package/dist/engine/workflow/project_stage_detector.js +253 -0
- package/dist/engine/workflow/project_stage_detector.js.map +1 -0
- package/dist/engine/workflow/workflow_contract_registry.d.ts +126 -0
- package/dist/engine/workflow/workflow_contract_registry.d.ts.map +1 -0
- package/dist/engine/workflow/workflow_contract_registry.js +271 -0
- package/dist/engine/workflow/workflow_contract_registry.js.map +1 -0
- package/dist/engine/workflow/workflow_navigation_contract.d.ts +178 -0
- package/dist/engine/workflow/workflow_navigation_contract.d.ts.map +1 -0
- package/dist/engine/workflow/workflow_navigation_contract.js +30 -0
- package/dist/engine/workflow/workflow_navigation_contract.js.map +1 -0
- package/dist/git/git_deps.d.ts +72 -0
- package/dist/git/git_deps.d.ts.map +1 -0
- package/dist/git/git_deps.js +9 -0
- package/dist/git/git_deps.js.map +1 -0
- package/dist/git/operations.d.ts +1 -0
- package/dist/git/operations.d.ts.map +1 -1
- package/dist/git/operations.js +3 -1
- package/dist/git/operations.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +61 -20
- package/dist/index.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts +14 -0
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +82 -4
- package/dist/knowledge/conflict_detector.js.map +1 -1
- package/dist/knowledge/health_checker.d.ts.map +1 -1
- package/dist/knowledge/health_checker.js +19 -8
- package/dist/knowledge/health_checker.js.map +1 -1
- package/dist/knowledge/index_manager.d.ts +25 -1
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +355 -109
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/loader.d.ts +8 -4
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +204 -40
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/knowledge/writer.d.ts +10 -0
- package/dist/knowledge/writer.d.ts.map +1 -1
- package/dist/knowledge/writer.js +44 -3
- package/dist/knowledge/writer.js.map +1 -1
- package/dist/server/index.d.ts +26 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +55 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lifecycle.d.ts +25 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/lifecycle.js +66 -0
- package/dist/server/lifecycle.js.map +1 -0
- package/dist/server/tools/cep_assessment.d.ts +172 -0
- package/dist/server/tools/cep_assessment.d.ts.map +1 -0
- package/dist/server/tools/cep_assessment.js +397 -0
- package/dist/server/tools/cep_assessment.js.map +1 -0
- package/dist/server/tools/gate_checks.d.ts +123 -0
- package/dist/server/tools/gate_checks.d.ts.map +1 -0
- package/dist/server/tools/gate_checks.js +267 -0
- package/dist/server/tools/gate_checks.js.map +1 -0
- package/dist/server/tools/index.d.ts +12 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +62 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/server/tools/lazy_loaders.d.ts +66 -0
- package/dist/server/tools/lazy_loaders.d.ts.map +1 -0
- package/dist/server/tools/lazy_loaders.js +78 -0
- package/dist/server/tools/lazy_loaders.js.map +1 -0
- package/dist/server/tools/middleware.d.ts +52 -0
- package/dist/server/tools/middleware.d.ts.map +1 -0
- package/dist/server/tools/middleware.js +648 -0
- package/dist/server/tools/middleware.js.map +1 -0
- package/dist/server/tools/schemas.d.ts +220 -0
- package/dist/server/tools/schemas.d.ts.map +1 -0
- package/dist/server/tools/schemas.js +162 -0
- package/dist/server/tools/schemas.js.map +1 -0
- package/dist/server/tools/tool_groups/admin.d.ts +3 -0
- package/dist/server/tools/tool_groups/admin.d.ts.map +1 -0
- package/dist/server/tools/tool_groups/admin.js +162 -0
- package/dist/server/tools/tool_groups/admin.js.map +1 -0
- package/dist/server/tools/tool_groups/auxiliary.d.ts +3 -0
- package/dist/server/tools/tool_groups/auxiliary.d.ts.map +1 -0
- package/dist/server/tools/tool_groups/auxiliary.js +144 -0
- package/dist/server/tools/tool_groups/auxiliary.js.map +1 -0
- package/dist/server/tools/tool_groups/knowledge.d.ts +3 -0
- package/dist/server/tools/tool_groups/knowledge.d.ts.map +1 -0
- package/dist/server/tools/tool_groups/knowledge.js +71 -0
- package/dist/server/tools/tool_groups/knowledge.js.map +1 -0
- package/dist/server/tools/tool_groups/product_operations.d.ts +9 -0
- package/dist/server/tools/tool_groups/product_operations.d.ts.map +1 -0
- package/dist/server/tools/tool_groups/product_operations.js +143 -0
- package/dist/server/tools/tool_groups/product_operations.js.map +1 -0
- package/dist/server/tools/tool_groups/scaffold_accept_deliver.d.ts +3 -0
- package/dist/server/tools/tool_groups/scaffold_accept_deliver.d.ts.map +1 -0
- package/dist/server/tools/tool_groups/scaffold_accept_deliver.js +37 -0
- package/dist/server/tools/tool_groups/scaffold_accept_deliver.js.map +1 -0
- package/dist/server/tools/tool_groups/state_machine.d.ts +13 -0
- package/dist/server/tools/tool_groups/state_machine.d.ts.map +1 -0
- package/dist/server/tools/tool_groups/state_machine.js +606 -0
- package/dist/server/tools/tool_groups/state_machine.js.map +1 -0
- package/dist/server/tools/tool_names.d.ts +59 -0
- package/dist/server/tools/tool_names.d.ts.map +1 -0
- package/dist/server/tools/tool_names.js +67 -0
- package/dist/server/tools/tool_names.js.map +1 -0
- package/dist/server/tools/types.d.ts +14 -0
- package/dist/server/tools/types.d.ts.map +1 -0
- package/dist/server/tools/types.js +2 -0
- package/dist/server/tools/types.js.map +1 -0
- package/dist/server/tools/utils.d.ts +17 -0
- package/dist/server/tools/utils.d.ts.map +1 -0
- package/dist/server/tools/utils.js +65 -0
- package/dist/server/tools/utils.js.map +1 -0
- package/dist/types/analysis.d.ts +5 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/base.d.ts +2 -0
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/delivery.d.ts +44 -1
- package/dist/types/delivery.d.ts.map +1 -1
- package/dist/types/dual_layer.d.ts +3 -3
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/knowledge.d.ts +19 -8
- package/dist/types/knowledge.d.ts.map +1 -1
- package/dist/types/knowledge.js.map +1 -1
- package/dist/types/pipeline.d.ts +202 -17
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/types/pipeline.js +4 -0
- package/dist/types/pipeline.js.map +1 -1
- package/dist/types/state_machine.d.ts +353 -0
- package/dist/types/state_machine.d.ts.map +1 -0
- package/dist/types/state_machine.js +47 -0
- package/dist/types/state_machine.js.map +1 -0
- package/dist/types/task.d.ts +151 -40
- package/dist/types/task.d.ts.map +1 -1
- package/package.json +27 -11
- package/templates/artifacts/existing-system//344/270/200/351/224/256/345/274/200/345/205/263/351/205/215/347/275/256/346/250/241/347/211/210.json +23 -2
- package/templates/artifacts/existing-system//345/216/206/345/217/262/346/225/260/346/215/256/346/270/205/346/264/227/350/204/232/346/234/254/346/250/241/347/211/210.md +18 -10
- package/templates/artifacts/existing-system//345/216/206/345/217/262/351/201/227/347/225/231/351/233/267/345/214/272/346/270/205/345/215/225/346/250/241/347/211/210.md +29 -25
- package/templates/artifacts/existing-system//345/220/221/345/220/216/345/205/274/345/256/271/346/200/247/345/220/210/350/247/204/346/212/245/345/221/212/346/250/241/347/211/210.md +31 -18
- package/templates/artifacts/existing-system//345/242/236/351/207/217/350/276/271/347/225/214/347/225/214/345/256/232/346/226/207/346/241/243/346/250/241/347/211/210.md +27 -18
- package/templates/artifacts/existing-system//346/224/271/351/200/240/345/275/261/345/223/215/350/214/203/345/233/264/350/257/204/344/274/260/346/250/241/347/211/210.md +24 -10
- package/templates/artifacts/existing-system//346/225/260/346/215/256/350/241/200/347/274/230/345/233/276/346/250/241/347/211/210.md +21 -10
- package/templates/artifacts/existing-system//346/226/260/350/200/201/351/200/273/350/276/221/346/257/224/345/257/271/346/227/245/345/277/227/346/250/241/347/211/210.md +15 -10
- package/templates/artifacts/existing-system//347/264/247/346/200/245/345/233/236/346/273/232/346/211/213/345/206/214/346/250/241/347/211/210.md +54 -17
- package/templates/artifacts/existing-system//351/232/224/347/246/273/351/200/202/351/205/215/345/231/250/346/226/271/346/241/210/346/250/241/347/211/210.md +19 -11
- package/templates/artifacts/shared/ADR/346/250/241/347/211/210.md +22 -9
- package/templates/artifacts/shared/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243/346/250/241/347/211/210.md +32 -26
- package/templates/artifacts/shared/Bug/345/210/206/346/236/220/346/250/241/347/211/210.md +7 -16
- package/templates/artifacts/shared/OOD/350/256/276/350/256/241/346/221/230/350/246/201/346/250/241/347/211/210.md +6 -15
- package/templates/artifacts/shared/POC/347/273/223/350/256/272/346/250/241/347/211/210.md +7 -16
- package/templates/artifacts/shared//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212/346/250/241/347/211/210.md +52 -14
- package/templates/artifacts/shared//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266/346/250/241/347/211/210.md +68 -0
- package/templates/artifacts/shared//345/210/207/347/211/207/350/256/241/345/210/222/346/250/241/347/211/210.md +126 -21
- package/templates/artifacts/shared//345/211/215/347/253/257/351/241/265/351/235/242/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -19
- package/templates/artifacts/shared//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +117 -152
- package/templates/artifacts/shared//345/220/216/347/253/257API/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -18
- package/templates/artifacts/shared//345/220/216/347/253/257/345/256/236/347/216/260/351/252/214/346/224/266/346/270/205/345/215/225.md +13 -15
- package/templates/artifacts/shared//345/256/211/345/205/250/345/256/241/350/256/241/346/250/241/347/211/210.md +13 -39
- package/templates/artifacts/shared//345/256/241/346/237/245/346/221/230/350/246/201.md +14 -21
- package/templates/artifacts/shared//346/200/247/350/203/275/345/210/206/346/236/220/346/250/241/347/211/210.md +7 -16
- package/templates/artifacts/shared//346/212/200/346/234/257/351/200/211/345/236/213/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -18
- package/templates/artifacts/shared//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210/346/250/241/347/211/210.md +56 -23
- package/templates/artifacts/shared//346/225/205/351/232/234/345/244/215/347/233/230/346/250/241/347/211/210.md +7 -17
- package/templates/artifacts/shared//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210/346/250/241/347/211/210.md +46 -35
- package/templates/artifacts/shared//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -20
- package/templates/artifacts/shared//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243/346/250/241/347/211/210.md +122 -17
- package/templates/artifacts/shared//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +113 -29
- package/templates/artifacts/shared//346/265/213/350/257/225/350/256/241/345/210/222/346/250/241/347/211/210.md +30 -22
- package/templates/artifacts/shared//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212/346/250/241/347/211/210.md +7 -12
- package/templates/artifacts/shared//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md +85 -33
- package/templates/artifacts/shared//350/277/201/347/247/273/350/257/204/344/274/260/346/250/241/347/211/210.md +18 -16
- package/templates/artifacts/shared//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +159 -39
- package/templates/artifacts/shared//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +7 -16
- package/templates/artifacts/shared//351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/347/211/210.md +77 -19
- package/templates/artifacts/shared//351/234/200/346/261/202/345/216/237/345/236/213/350/256/276/350/256/241/345/256/236/347/216/260/350/277/275/350/270/252/347/237/251/351/230/265/346/250/241/347/211/210.md +41 -53
- package/templates/checklists//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -16
- package/templates/checklists//344/274/232/350/257/235/346/201/242/345/244/215.md +8 -25
- package/templates/checklists//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -17
- package/templates/checklists//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -16
- package/templates/checklists//347/237/245/350/257/206/346/263/250/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +7 -18
- package/templates/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +6 -16
- package/templates/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +6 -16
- package/templates/domain//345/244/232/347/247/237/346/210/267.md +5 -18
- package/templates/domain//345/256/241/350/256/241/346/227/245/345/277/227.md +5 -17
- package/templates/domain//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md +8 -22
- package/templates/domain//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +5 -22
- package/templates/domain//346/212/245/350/241/250/347/273/237/350/256/241.md +5 -20
- package/templates/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +5 -21
- package/templates/domain//346/225/260/346/215/256/346/235/203/351/231/220.md +5 -18
- package/templates/domain//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +5 -20
- package/templates/domain//351/200/232/347/237/245/350/247/204/345/210/231.md +8 -23
- package/templates/gates/existing-system/gate-/346/236/266/346/236/204/350/256/276/350/256/241.yaml +26 -0
- package/templates/gates/existing-system/gate-/347/216/260/346/234/211/347/263/273/347/273/237/345/210/206/346/236/220.yaml +50 -2
- package/templates/gates/existing-system/gate-/347/274/226/347/240/201/344/270/216/345/215/225/345/205/203/346/265/213/350/257/225.yaml +42 -8
- package/templates/gates/existing-system/gate-/350/257/225/350/277/220/350/241/214.yaml +30 -12
- package/templates/gates/existing-system/gate-/350/257/246/347/273/206/350/256/276/350/256/241.yaml +33 -0
- package/templates/gates/shared/gate-/344/272/244/344/273/230.yaml +32 -0
- package/templates/gates/shared/gate-/344/273/243/347/240/201/345/256/241/346/237/245.yaml +53 -0
- package/templates/gates/shared/gate-/344/273/273/345/212/241/350/247/204/345/210/222.yaml +134 -8
- package/templates/gates/shared/gate-/344/274/232/350/257/235/345/220/257/345/212/250.yaml +14 -0
- package/templates/gates/shared/gate-/345/206/263/347/255/226/347/240/224/350/256/250.yaml +14 -0
- package/templates/gates/shared/gate-/345/210/207/347/211/207/345/256/241/346/237/245.yaml +50 -0
- package/templates/gates/shared/gate-/345/210/207/347/211/207/346/211/247/350/241/214.yaml +51 -0
- package/templates/gates/shared/gate-/345/217/221/345/270/203/345/220/216/350/247/202/345/257/237.yaml +46 -0
- package/templates/gates/shared/gate-/345/256/211/345/205/250/345/256/241/350/256/241.yaml +77 -0
- package/templates/gates/shared/gate-/346/234/254/345/234/260/351/252/214/346/224/266.yaml +14 -0
- package/templates/gates/shared/gate-/346/236/266/346/236/204/350/256/276/350/256/241.yaml +145 -0
- package/templates/gates/shared/gate-/347/274/226/347/240/201/344/270/216/345/215/225/345/205/203/346/265/213/350/257/225.yaml +30 -4
- package/templates/gates/shared/gate-/347/274/226/347/240/201/345/207/206/345/244/207.yaml +50 -0
- package/templates/gates/shared/gate-/347/274/226/347/240/201/345/256/236/347/216/260.yaml +52 -0
- package/templates/gates/shared/gate-/347/274/226/347/240/201/351/252/214/350/257/201.yaml +47 -0
- package/templates/gates/shared/gate-/350/201/224/350/260/203/351/252/214/350/257/201.yaml +53 -0
- package/templates/gates/shared/gate-/350/257/246/347/273/206/350/256/276/350/256/241.yaml +123 -0
- package/templates/gates/shared/gate-/351/234/200/346/261/202/345/210/206/346/236/220.yaml +164 -0
- package/templates/internal/patterns/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +6 -17
- package/templates/internal/patterns/Hook/345/261/202/344/272/247/347/211/251/347/273/223/346/236/204/346/240/241/351/252/214.md +55 -0
- package/templates/internal/patterns/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +6 -18
- package/templates/internal/patterns/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +6 -17
- package/templates/internal/patterns//344/272/247/347/211/251Schema/346/263/250/345/206/214/344/270/255/345/277/203.md +55 -0
- package/templates/internal/patterns//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237.md +6 -17
- package/templates/internal/patterns//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +6 -18
- package/templates/internal/patterns//344/275/234/347/224/250/345/237/237/344/270/216/345/257/206/351/222/245/346/213/246/346/210/252.md +6 -17
- package/templates/internal/patterns//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +6 -18
- package/templates/internal/patterns//345/206/262/347/252/201/351/227/250/347/246/201.md +6 -17
- package/templates/internal/patterns//345/206/263/347/255/226/347/275/221/345/205/263.md +6 -19
- package/templates/internal/patterns//345/210/206/345/234/272/346/231/257/350/277/207/347/250/213/350/247/204/345/210/231.md +55 -0
- package/templates/internal/patterns//345/217/230/345/274/202/345/256/241/350/256/241.md +6 -18
- package/templates/internal/patterns//345/233/236/345/275/222/347/237/251/351/230/265.md +7 -18
- package/templates/internal/patterns//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +6 -17
- package/templates/internal/patterns//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +6 -17
- package/templates/internal/patterns//345/271/266/345/217/221/351/224/201.md +6 -19
- package/templates/internal/patterns//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +7 -20
- package/templates/internal/patterns//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +6 -17
- package/templates/internal/patterns//346/250/241/347/211/210Frontmatter/350/247/243/346/236/220.md +55 -0
- package/templates/internal/patterns//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +6 -18
- package/templates/internal/patterns//346/265/201/345/274/217/345/277/203/350/267/263.md +7 -19
- package/templates/internal/patterns//347/237/245/350/257/206/344/270/273/346/235/203.md +7 -19
- package/templates/internal/patterns//350/257/255/344/271/211/350/257/201/346/215/256.md +6 -17
- package/templates/internal/patterns//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +6 -18
- package/templates/internal/patterns//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +10 -20
- package/templates/internal/rules/OOD/344/270/216SOLID/350/256/276/350/256/241/350/247/204/345/210/231.md +5 -20
- package/templates/internal/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +7 -16
- package/templates/internal/rules//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246/350/247/204/345/210/231.md +8 -36
- package/templates/internal/rules//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md +5 -14
- package/templates/internal/rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246/350/247/204/345/210/231.md +5 -20
- package/templates/internal/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +6 -15
- package/templates/internal/rules//345/221/275/344/273/244/350/267/257/347/224/261/350/247/204/345/210/231.md +30 -0
- package/templates/internal/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md +7 -16
- package/templates/internal/rules//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246/350/247/204/345/210/231.md +21 -34
- package/templates/internal/rules//345/267/245/344/275/234/346/265/201/346/250/241/347/211/210/345/214/205/350/247/204/345/210/231.md +40 -0
- package/templates/internal/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +6 -15
- package/templates/internal/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +10 -17
- package/templates/internal/rules//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260/350/247/204/345/210/231.md +9 -18
- package/templates/internal/rules//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md +5 -13
- package/templates/internal/rules//346/212/200/346/234/257/345/206/263/347/255/226/344/270/273/346/235/203/350/247/204/345/210/231.md +5 -15
- package/templates/internal/rules//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206/350/247/204/345/210/231.md +10 -27
- package/templates/internal/rules//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246/350/247/204/345/210/231.md +5 -14
- package/templates/internal/rules//346/227/245/345/277/227/346/262/273/347/220/206/350/247/204/345/210/231.md +5 -18
- package/templates/internal/rules//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206/350/247/204/345/210/231.md +5 -18
- package/templates/internal/rules//346/236/266/346/236/204/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +10 -15
- package/templates/internal/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md +8 -21
- package/templates/internal/rules//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +6 -18
- package/templates/internal/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +7 -16
- package/templates/internal/rules//346/250/241/347/211/210Frontmatter/350/247/204/350/214/203.md +301 -0
- package/templates/internal/rules//346/250/241/347/211/210/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +57 -0
- package/templates/internal/rules//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/345/210/231.md +9 -18
- package/templates/internal/rules//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247/350/247/204/345/210/231.md +11 -24
- package/templates/internal/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +14 -33
- package/templates/internal/rules//347/237/245/350/257/206/346/262/273/347/220/206/350/247/204/345/210/231.md +6 -20
- package/templates/internal/rules//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214/350/247/204/345/210/231.md +8 -17
- package/templates/internal/rules//347/237/245/350/257/206/350/265/204/344/272/247/346/262/273/347/220/206/350/247/204/345/210/231.md +7 -23
- package/templates/internal/rules//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206/350/247/204/345/210/231.md +8 -18
- package/templates/internal/rules//347/273/206/350/212/202/347/272/252/345/276/213/350/247/204/345/210/231.md +5 -15
- package/templates/internal/rules//350/204/221/346/232/264/344/270/216/346/226/271/346/241/210/346/216/242/347/264/242/350/247/204/345/210/231.md +5 -15
- package/templates/internal/rules//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250/350/247/204/345/210/231.md +7 -25
- package/templates/internal/rules//350/256/276/350/256/241/344/272/247/347/211/251/345/214/205/350/247/204/345/210/231.md +12 -17
- package/templates/internal/rules//350/257/201/346/215/256/351/251/261/345/212/250/344/270/216/345/217/215/345/271/273/350/247/211/350/247/204/345/210/231.md +5 -17
- package/templates/internal/rules//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250/350/247/204/345/210/231.md +5 -13
- package/templates/internal/rules//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246/350/247/204/345/210/231.md +7 -16
- package/templates/internal/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +5 -23
- package/templates/internal/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md +41 -30
- package/templates/internal/rules//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214/350/247/204/345/210/231.md +11 -21
- package/templates/internal/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md +6 -15
- package/templates/internal/rules//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226/350/247/204/345/210/231.md +34 -40
- package/templates/internal/rules//351/252/214/346/224/266/346/250/241/347/211/210/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +80 -0
- package/templates/internal/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +6 -15
- package/templates/patterns/API/350/256/276/350/256/241/350/247/204/350/214/203.md +5 -20
- package/templates/patterns/Docker/351/203/250/347/275/262/350/247/204/350/214/203.md +5 -18
- package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +5 -22
- package/templates/patterns/N/345/212/2401/346/237/245/350/257/242/350/247/204/350/214/203.md +5 -21
- package/templates/patterns/React/345/210/227/350/241/250/350/241/250/346/240/274/350/247/204/350/214/203.md +6 -21
- package/templates/patterns/React/346/216/245/345/217/243/351/233/206/346/210/220/350/247/204/350/214/203.md +5 -21
- package/templates/patterns/React/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +5 -21
- package/templates/patterns/React/347/273/204/344/273/266/350/247/204/350/214/203.md +5 -20
- package/templates/patterns/React/350/241/250/345/215/225/350/247/204/350/214/203.md +5 -20
- package/templates/patterns/React/350/267/257/347/224/261/350/247/204/350/214/203.md +5 -21
- package/templates/patterns/SOLID/350/256/276/350/256/241/350/247/204/350/214/203.md +4 -13
- package/templates/patterns/Schema/345/205/274/345/256/271/350/247/204/350/214/203.md +5 -20
- package/templates/patterns/Vue/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +5 -19
- package/templates/patterns/Vue/347/273/204/344/273/266/350/247/204/350/214/203.md +5 -23
- package/templates/patterns/Vue/350/267/257/347/224/261/350/247/204/350/214/203.md +5 -18
- package/templates/patterns//344/272/213/344/273/266/351/251/261/345/212/250/350/247/204/350/214/203.md +5 -22
- package/templates/patterns//344/272/213/345/212/241/346/250/241/345/274/217/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//344/274/230/351/233/205/345/201/234/346/234/272/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +5 -19
- package/templates/patterns//345/210/206/351/241/265/346/237/245/350/257/242/350/247/204/350/214/203.md +5 -24
- package/templates/patterns//345/211/215/347/253/257/346/200/247/350/203/275/350/247/204/350/214/203.md +5 -22
- package/templates/patterns//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/350/247/204/350/214/203.md +4 -13
- package/templates/patterns//345/221/275/345/220/215/350/247/204/350/214/203.md +5 -19
- package/templates/patterns//345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +6 -22
- package/templates/patterns//345/242/236/345/210/240/346/224/271/346/237/245/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//345/244/226/351/203/250/344/276/235/350/265/226/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//345/245/221/347/272/246/345/205/274/345/256/271/350/247/204/350/214/203.md +5 -18
- package/templates/patterns//345/256/232/346/227/266/344/273/273/345/212/241/350/247/204/350/214/203.md +5 -22
- package/templates/patterns//345/256/236/346/227/266/346/216/250/351/200/201/350/247/204/350/214/203.md +5 -20
- package/templates/patterns//345/267/245/347/250/213/347/272/252/345/276/213.md +5 -19
- package/templates/patterns//345/271/266/345/217/221/346/216/247/345/210/266/350/247/204/350/214/203.md +5 -24
- package/templates/patterns//345/274/202/346/255/245/345/257/274/345/207/272/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//346/216/245/345/217/243/345/245/221/347/272/246/350/247/204/350/214/203.md +5 -19
- package/templates/patterns//346/220/234/347/264/242/346/250/241/345/274/217/350/247/204/350/214/203.md +5 -22
- package/templates/patterns//346/225/260/346/215/256/351/232/220/347/247/201/350/247/204/350/214/203.md +6 -24
- package/templates/patterns//346/226/207/344/273/266/344/270/212/344/274/240/350/247/204/350/214/203.md +5 -20
- package/templates/patterns//346/227/240/351/232/234/347/242/215/350/247/204/350/214/203.md +5 -20
- package/templates/patterns//346/227/245/345/277/227/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//346/235/203/351/231/220/350/256/244/350/257/201/350/247/204/350/214/203.md +5 -24
- package/templates/patterns//346/236/266/346/236/204/347/272/242/347/272/277.md +5 -18
- package/templates/patterns//346/265/213/350/257/225/350/264/250/351/207/217/350/247/204/350/214/203.md +5 -19
- package/templates/patterns//347/206/224/346/226/255/351/231/215/347/272/247/350/247/204/350/214/203.md +5 -22
- package/templates/patterns//347/212/266/346/200/201/346/265/201/350/275/254/350/247/204/350/214/203.md +5 -19
- package/templates/patterns//347/272/246/346/235/237/345/256/236/347/216/260/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//347/274/223/345/255/230/347/255/226/347/225/245/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//347/274/226/347/240/201/350/264/250/351/207/217/350/247/204/350/214/203.md +5 -19
- package/templates/patterns//347/274/272/351/231/267/347/256/241/347/220/206/350/247/204/350/214/203.md +6 -19
- package/templates/patterns//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +5 -19
- package/templates/patterns//350/276/223/345/205/245/346/240/241/351/252/214/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//351/224/231/350/257/257/345/244/204/347/220/206/350/247/204/350/214/203.md +5 -21
- package/templates/patterns//351/224/231/350/257/257/350/276/271/347/225/214/350/247/204/350/214/203.md +5 -23
- package/templates/patterns//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241/350/247/204/350/214/203.md +5 -20
- package/templates/procedures/OOD/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +46 -25
- package/templates/procedures/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +17 -25
- package/templates/procedures//344/270/215/347/241/256/345/256/232/346/227/266/345/244/264/350/204/221/351/243/216/346/232/264/346/265/201/347/250/213.md +92 -0
- package/templates/procedures//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201/346/265/201/347/250/213.md +14 -18
- package/templates/procedures//344/273/243/347/240/201/351/227/250/347/246/201/346/265/201/347/250/213.md +7 -16
- package/templates/procedures//344/273/273/345/212/241/346/213/206/350/247/243/346/265/201/347/250/213.md +14 -16
- package/templates/procedures//344/273/273/345/212/241/350/247/204/345/210/222/345/267/245/344/275/234/346/265/201.md +83 -0
- package/templates/procedures//344/274/232/350/257/235/346/201/242/345/244/215/346/265/201/347/250/213.md +74 -0
- package/templates/procedures//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +14 -26
- package/templates/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +15 -23
- package/templates/procedures//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260/345/267/245/344/275/234/346/265/201.md +5 -15
- package/templates/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +9 -17
- package/templates/procedures//345/221/275/344/273/244/350/267/257/347/224/261/346/265/201/347/250/213.md +32 -0
- package/templates/procedures//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +17 -25
- package/templates/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +9 -17
- package/templates/procedures//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +16 -24
- package/templates/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +11 -18
- package/templates/procedures//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +25 -27
- package/templates/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +8 -16
- package/templates/procedures//346/234/254/345/234/260/346/265/217/350/247/210/345/231/250/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md +7 -16
- package/templates/procedures//346/236/266/346/236/204/345/206/263/347/255/226/347/240/224/350/256/250/345/267/245/344/275/234/346/265/201.md +11 -12
- package/templates/procedures//346/236/266/346/236/204/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +28 -17
- package/templates/procedures//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +17 -23
- package/templates/procedures//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201/345/267/245/344/275/234/346/265/201.md +22 -17
- package/templates/procedures//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230/346/265/201/347/250/213.md +16 -25
- package/templates/procedures//347/216/260/346/234/211/347/263/273/347/273/237/345/267/256/350/267/235/345/210/206/346/236/220/345/267/245/344/275/234/346/265/201.md +35 -16
- package/templates/procedures//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +14 -23
- package/templates/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +19 -27
- package/templates/procedures//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md +16 -19
- package/templates/procedures//347/274/226/347/240/201/351/230/266/346/256/265/346/211/247/350/241/214/345/267/245/344/275/234/346/265/201.md +101 -0
- package/templates/procedures//350/207/252/344/270/273/351/200/211/345/236/213/346/265/201/347/250/213.md +9 -17
- package/templates/procedures//350/256/276/350/256/241/344/272/247/347/211/251/347/224/237/346/210/220/344/270/216/345/244/215/351/252/214/345/267/245/344/275/234/346/265/201.md +34 -17
- package/templates/procedures//350/256/276/350/256/241/345/256/241/350/256/241/346/265/201/347/250/213.md +180 -0
- package/templates/procedures//350/257/246/347/273/206/350/256/276/350/256/241/346/265/201/347/250/213.md +97 -31
- package/templates/procedures//350/260/203/350/257/225/346/216/222/346/237/245/346/265/201/347/250/213.md +36 -16
- package/templates/procedures//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +16 -24
- package/templates/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +39 -16
- package/templates/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +16 -24
- package/templates/procedures//351/233/206/346/210/220/351/252/214/350/257/201/346/265/201/347/250/213.md +13 -16
- package/templates/procedures//351/234/200/346/261/202/346/276/204/346/270/205/346/265/201/347/250/213.md +28 -24
- package/templates/procedures//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +13 -17
- package/templates/rules/existing-system//345/205/274/345/256/271/346/200/247/346/243/200/346/237/245/350/247/204/345/210/231.md +71 -27
- package/templates/rules/existing-system//350/200/201/347/263/273/347/273/237/345/210/207/347/211/207/350/247/204/345/210/222/350/247/204/345/210/231.md +35 -0
- package/templates/rules/existing-system//350/200/246/345/220/210/346/243/200/346/265/213/350/247/204/345/210/231.md +63 -25
- package/templates/rules/existing-system//350/257/225/350/277/220/350/241/214/347/206/224/346/226/255/350/247/204/345/210/231.md +54 -28
- package/templates/rules/existing-system//351/230/262/345/276/241/346/200/247/347/274/226/347/240/201/350/247/204/345/210/231.md +75 -29
- package/templates/rules/existing-system//351/233/267/345/214/272/345/217/215/346/250/241/345/274/217/346/270/205/345/215/225.md +115 -28
- package/templates/rules/new-system//350/201/224/350/260/203/350/256/276/350/256/241/347/274/272/351/231/267/345/210/244/345/256/232/350/247/204/345/210/231.md +44 -22
- package/templates/rules/shared/SOLID/344/273/243/347/240/201/345/256/241/346/237/245/350/247/204/345/210/231.md +51 -24
- package/templates/rules/shared//344/270/200/350/207/264/346/200/247/346/240/241/351/252/214/350/247/204/345/210/231.md +88 -13
- package/templates/rules/shared//344/270/212/346/270/270/344/272/244/345/217/211/351/252/214/350/257/201/350/247/204/345/210/231.md +56 -0
- package/templates/rules/shared//344/270/212/346/270/270/350/256/276/350/256/241/344/272/244/345/217/211/351/252/214/350/257/201/345/256/241/346/237/245/350/247/204/345/210/231.md +67 -0
- package/templates/rules/shared//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +41 -22
- package/templates/rules/shared//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +48 -63
- package/templates/rules/shared//345/206/263/347/255/226/345/256/214/346/225/264/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +63 -0
- package/templates/rules/shared//345/210/207/347/211/207/346/211/247/350/241/214/347/272/252/345/276/213/350/247/204/345/210/231.md +96 -0
- package/templates/rules/shared//345/210/207/347/211/207/350/247/204/345/210/222/350/247/204/345/210/231.md +64 -0
- package/templates/rules/shared//345/216/237/345/236/213/346/272/220/347/240/201/346/217/220/345/217/226/350/247/204/345/210/231.md +67 -0
- package/templates/rules/shared//345/216/237/345/236/213/350/257/264/346/230/216/345/256/241/346/237/245/350/247/204/345/210/231.md +73 -0
- package/templates/rules/shared//345/217/221/345/270/203/345/220/216/345/256/241/346/237/245/350/247/204/345/210/231.md +65 -0
- package/templates/rules/shared//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245/350/247/204/345/210/231.md +47 -22
- package/templates/rules/shared//345/256/211/345/205/250/345/256/241/346/237/245/350/247/204/345/210/231.md +55 -23
- package/templates/rules/shared//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md +41 -16
- package/templates/rules/shared//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md +34 -16
- package/templates/rules/shared//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245/350/247/204/345/210/231.md +42 -17
- package/templates/rules/shared//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md +33 -17
- package/templates/rules/shared//346/236/266/346/236/204/350/256/276/350/256/241/345/256/241/346/237/245/350/247/204/345/210/231.md +102 -0
- package/templates/rules/shared//346/236/266/346/236/204/350/256/276/350/256/241/350/247/204/345/210/231.md +64 -0
- package/templates/rules/shared//347/213/254/347/253/213/345/256/241/346/237/245/350/247/204/345/210/231.md +33 -0
- package/templates/rules/shared//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206/350/247/204/345/210/231.md +171 -0
- package/templates/rules/shared//347/274/226/347/240/201/345/260/261/347/273/252/345/256/241/346/237/245/350/247/204/345/210/231.md +52 -0
- package/templates/rules/shared//350/201/224/350/260/203/351/252/214/350/257/201/346/270/205/345/215/225.md +66 -19
- package/templates/rules/shared//350/246/206/347/233/226/347/216/207/346/240/207/345/207/206.md +7 -6
- package/templates/rules/shared//350/257/246/347/273/206/350/256/276/350/256/241/345/256/241/346/237/245/350/247/204/345/210/231.md +82 -0
- package/templates/rules/shared//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +19 -18
- package/templates/rules/shared//350/277/275/350/270/252/347/237/251/351/230/265ID/350/247/204/345/210/231.md +48 -0
- package/templates/rules/shared//350/277/275/350/270/252/347/237/251/351/230/265/345/256/241/346/237/245/350/247/204/345/210/231.md +51 -0
- package/templates/rules/shared//351/234/200/346/261/202/350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +80 -0
- package/templates/rules/shared//351/252/214/346/224/266/346/240/207/345/207/206/345/256/241/346/237/245/350/247/204/345/210/231.md +56 -0
- package/templates/scaffolds/react/ErrorBoundary.tsx.hbs +49 -0
- package/templates/scaffolds/react/Layout.tsx.hbs +20 -0
- package/templates/scaffolds/spring-boot/ControllerTest.java.hbs +36 -0
- package/templates/scaffolds/spring-boot/Mapper.xml.hbs +29 -0
- package/templates//346/250/241/347/211/210/350/264/241/347/214/256/346/214/207/345/215/227.md +147 -0
- package/dist/adapters/claude_code/pre_prompt_contract.d.ts +0 -9
- package/dist/adapters/claude_code/pre_prompt_contract.d.ts.map +0 -1
- package/dist/adapters/claude_code/pre_prompt_contract.js +0 -8
- package/dist/adapters/claude_code/pre_prompt_contract.js.map +0 -1
- package/dist/adapters/claude_code/server.d.ts +0 -26
- package/dist/adapters/claude_code/server.d.ts.map +0 -1
- package/dist/adapters/claude_code/server.js +0 -59
- package/dist/adapters/claude_code/server.js.map +0 -1
- package/dist/engine/architecture_decision_workshop.d.ts +0 -58
- package/dist/engine/architecture_decision_workshop.d.ts.map +0 -1
- package/dist/engine/architecture_decision_workshop.js +0 -118
- package/dist/engine/architecture_decision_workshop.js.map +0 -1
- package/dist/engine/architecture_design_contract.d.ts.map +0 -1
- package/dist/engine/architecture_design_contract.js.map +0 -1
- package/dist/engine/artifact_contract_registry.d.ts +0 -138
- package/dist/engine/artifact_contract_registry.d.ts.map +0 -1
- package/dist/engine/artifact_contract_registry.js +0 -420
- package/dist/engine/artifact_contract_registry.js.map +0 -1
- package/dist/engine/asset_manifest.d.ts +0 -67
- package/dist/engine/asset_manifest.d.ts.map +0 -1
- package/dist/engine/asset_manifest.js +0 -299
- package/dist/engine/asset_manifest.js.map +0 -1
- package/dist/engine/audit_pool.d.ts.map +0 -1
- package/dist/engine/audit_pool.js +0 -120
- package/dist/engine/audit_pool.js.map +0 -1
- package/dist/engine/audit_sampler.d.ts +0 -20
- package/dist/engine/audit_sampler.d.ts.map +0 -1
- package/dist/engine/audit_sampler.js +0 -29
- package/dist/engine/audit_sampler.js.map +0 -1
- package/dist/engine/audit_verifier.d.ts +0 -52
- package/dist/engine/audit_verifier.d.ts.map +0 -1
- package/dist/engine/audit_verifier.js +0 -101
- package/dist/engine/audit_verifier.js.map +0 -1
- package/dist/engine/backend_implementation_contract.d.ts.map +0 -1
- package/dist/engine/backend_implementation_contract.js +0 -164
- package/dist/engine/backend_implementation_contract.js.map +0 -1
- package/dist/engine/brainstorm_contract.d.ts +0 -48
- package/dist/engine/brainstorm_contract.d.ts.map +0 -1
- package/dist/engine/brainstorm_contract.js +0 -146
- package/dist/engine/brainstorm_contract.js.map +0 -1
- package/dist/engine/capability_action_advisor.d.ts.map +0 -1
- package/dist/engine/capability_action_advisor.js +0 -158
- package/dist/engine/capability_action_advisor.js.map +0 -1
- package/dist/engine/capability_registry.d.ts.map +0 -1
- package/dist/engine/capability_registry.js +0 -731
- package/dist/engine/capability_registry.js.map +0 -1
- package/dist/engine/capability_state_store.d.ts +0 -113
- package/dist/engine/capability_state_store.d.ts.map +0 -1
- package/dist/engine/capability_state_store.js +0 -172
- package/dist/engine/capability_state_store.js.map +0 -1
- package/dist/engine/chinese_semantic_priority.d.ts.map +0 -1
- package/dist/engine/chinese_semantic_priority.js.map +0 -1
- package/dist/engine/classifier.d.ts +0 -24
- package/dist/engine/classifier.d.ts.map +0 -1
- package/dist/engine/classifier.js +0 -209
- package/dist/engine/classifier.js.map +0 -1
- package/dist/engine/code_maintainability_observability_contract.d.ts.map +0 -1
- package/dist/engine/code_maintainability_observability_contract.js +0 -711
- package/dist/engine/code_maintainability_observability_contract.js.map +0 -1
- package/dist/engine/code_reviewer.d.ts +0 -71
- package/dist/engine/code_reviewer.d.ts.map +0 -1
- package/dist/engine/code_reviewer.js +0 -643
- package/dist/engine/code_reviewer.js.map +0 -1
- package/dist/engine/coding_readiness_gate.d.ts +0 -46
- package/dist/engine/coding_readiness_gate.d.ts.map +0 -1
- package/dist/engine/coding_readiness_gate.js +0 -175
- package/dist/engine/coding_readiness_gate.js.map +0 -1
- package/dist/engine/command_execution_contract.d.ts +0 -226
- package/dist/engine/command_execution_contract.d.ts.map +0 -1
- package/dist/engine/command_execution_contract.js +0 -572
- package/dist/engine/command_execution_contract.js.map +0 -1
- package/dist/engine/confidence_scorer.d.ts +0 -32
- package/dist/engine/confidence_scorer.d.ts.map +0 -1
- package/dist/engine/confidence_scorer.js +0 -45
- package/dist/engine/confidence_scorer.js.map +0 -1
- package/dist/engine/config_auto_repair.d.ts +0 -29
- package/dist/engine/config_auto_repair.d.ts.map +0 -1
- package/dist/engine/config_auto_repair.js +0 -254
- package/dist/engine/config_auto_repair.js.map +0 -1
- package/dist/engine/config_precedence_contract.d.ts +0 -269
- package/dist/engine/config_precedence_contract.d.ts.map +0 -1
- package/dist/engine/config_precedence_contract.js +0 -949
- package/dist/engine/config_precedence_contract.js.map +0 -1
- package/dist/engine/config_write_boundary.d.ts.map +0 -1
- package/dist/engine/config_write_boundary.js +0 -69
- package/dist/engine/config_write_boundary.js.map +0 -1
- package/dist/engine/conflict_gate.d.ts.map +0 -1
- package/dist/engine/conflict_gate.js +0 -92
- package/dist/engine/conflict_gate.js.map +0 -1
- package/dist/engine/consumable_asset_registry.d.ts +0 -50
- package/dist/engine/consumable_asset_registry.d.ts.map +0 -1
- package/dist/engine/consumable_asset_registry.js +0 -1446
- package/dist/engine/consumable_asset_registry.js.map +0 -1
- package/dist/engine/consumption_trace_store.d.ts +0 -92
- package/dist/engine/consumption_trace_store.d.ts.map +0 -1
- package/dist/engine/consumption_trace_store.js +0 -134
- package/dist/engine/consumption_trace_store.js.map +0 -1
- package/dist/engine/contract_guard.d.ts +0 -37
- package/dist/engine/contract_guard.d.ts.map +0 -1
- package/dist/engine/contract_guard.js +0 -590
- package/dist/engine/contract_guard.js.map +0 -1
- package/dist/engine/contract_registry.d.ts +0 -113
- package/dist/engine/contract_registry.d.ts.map +0 -1
- package/dist/engine/contract_registry.js +0 -1630
- package/dist/engine/contract_registry.js.map +0 -1
- package/dist/engine/contract_state_store.d.ts +0 -67
- package/dist/engine/contract_state_store.d.ts.map +0 -1
- package/dist/engine/contract_state_store.js +0 -167
- package/dist/engine/contract_state_store.js.map +0 -1
- package/dist/engine/control_plane_contract.d.ts.map +0 -1
- package/dist/engine/control_plane_contract.js +0 -251
- package/dist/engine/control_plane_contract.js.map +0 -1
- package/dist/engine/core_engineering_principles.d.ts +0 -155
- package/dist/engine/core_engineering_principles.d.ts.map +0 -1
- package/dist/engine/core_engineering_principles.js +0 -417
- package/dist/engine/core_engineering_principles.js.map +0 -1
- package/dist/engine/core_experience_principle.d.ts.map +0 -1
- package/dist/engine/core_experience_principle.js +0 -349
- package/dist/engine/core_experience_principle.js.map +0 -1
- package/dist/engine/debt_reporter.d.ts +0 -9
- package/dist/engine/debt_reporter.d.ts.map +0 -1
- package/dist/engine/debt_reporter.js +0 -94
- package/dist/engine/debt_reporter.js.map +0 -1
- package/dist/engine/debt_tracker.d.ts +0 -72
- package/dist/engine/debt_tracker.d.ts.map +0 -1
- package/dist/engine/debt_tracker.js +0 -224
- package/dist/engine/debt_tracker.js.map +0 -1
- package/dist/engine/debug_log.d.ts +0 -5
- package/dist/engine/debug_log.d.ts.map +0 -1
- package/dist/engine/debug_log.js +0 -5
- package/dist/engine/debug_log.js.map +0 -1
- package/dist/engine/debugger.d.ts +0 -12
- package/dist/engine/debugger.d.ts.map +0 -1
- package/dist/engine/debugger.js +0 -415
- package/dist/engine/debugger.js.map +0 -1
- package/dist/engine/decision_contract.d.ts +0 -38
- package/dist/engine/decision_contract.d.ts.map +0 -1
- package/dist/engine/decision_contract.js +0 -57
- package/dist/engine/decision_contract.js.map +0 -1
- package/dist/engine/decision_workshop.d.ts +0 -168
- package/dist/engine/decision_workshop.d.ts.map +0 -1
- package/dist/engine/decision_workshop.js.map +0 -1
- package/dist/engine/degradation.d.ts.map +0 -1
- package/dist/engine/degradation.js.map +0 -1
- package/dist/engine/delivery.d.ts +0 -49
- package/dist/engine/delivery.d.ts.map +0 -1
- package/dist/engine/delivery.js +0 -373
- package/dist/engine/delivery.js.map +0 -1
- package/dist/engine/delivery_readiness.d.ts +0 -70
- package/dist/engine/delivery_readiness.d.ts.map +0 -1
- package/dist/engine/delivery_readiness.js +0 -198
- package/dist/engine/delivery_readiness.js.map +0 -1
- package/dist/engine/design_artifact_pack.d.ts +0 -50
- package/dist/engine/design_artifact_pack.d.ts.map +0 -1
- package/dist/engine/design_artifact_pack.js.map +0 -1
- package/dist/engine/design_lifecycle_contract.d.ts +0 -60
- package/dist/engine/design_lifecycle_contract.d.ts.map +0 -1
- package/dist/engine/design_lifecycle_contract.js +0 -499
- package/dist/engine/design_lifecycle_contract.js.map +0 -1
- package/dist/engine/detail_discipline.d.ts.map +0 -1
- package/dist/engine/detail_discipline.js.map +0 -1
- package/dist/engine/developer_sovereignty.d.ts +0 -62
- package/dist/engine/developer_sovereignty.d.ts.map +0 -1
- package/dist/engine/developer_sovereignty.js +0 -141
- package/dist/engine/developer_sovereignty.js.map +0 -1
- package/dist/engine/diagnostic_registry.d.ts.map +0 -1
- package/dist/engine/diagnostic_registry.js +0 -268
- package/dist/engine/diagnostic_registry.js.map +0 -1
- package/dist/engine/diff_ownership.d.ts.map +0 -1
- package/dist/engine/diff_ownership.js +0 -152
- package/dist/engine/diff_ownership.js.map +0 -1
- package/dist/engine/diff_ownership_store.d.ts.map +0 -1
- package/dist/engine/diff_ownership_store.js +0 -291
- package/dist/engine/diff_ownership_store.js.map +0 -1
- package/dist/engine/documentation_governance.d.ts.map +0 -1
- package/dist/engine/documentation_governance.js.map +0 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts +0 -68
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +0 -1
- package/dist/engine/dual_layer_mechanism_registry.js +0 -2530
- package/dist/engine/dual_layer_mechanism_registry.js.map +0 -1
- package/dist/engine/enforcement_guard.d.ts +0 -84
- package/dist/engine/enforcement_guard.d.ts.map +0 -1
- package/dist/engine/enforcement_guard.js +0 -320
- package/dist/engine/enforcement_guard.js.map +0 -1
- package/dist/engine/escape_report.d.ts.map +0 -1
- package/dist/engine/escape_report.js +0 -136
- package/dist/engine/escape_report.js.map +0 -1
- package/dist/engine/evidence_grounding_contract.d.ts +0 -137
- package/dist/engine/evidence_grounding_contract.d.ts.map +0 -1
- package/dist/engine/evidence_grounding_contract.js +0 -410
- package/dist/engine/evidence_grounding_contract.js.map +0 -1
- package/dist/engine/evolution_regression_gate.d.ts +0 -42
- package/dist/engine/evolution_regression_gate.d.ts.map +0 -1
- package/dist/engine/evolution_regression_gate.js +0 -159
- package/dist/engine/evolution_regression_gate.js.map +0 -1
- package/dist/engine/evolver.d.ts +0 -78
- package/dist/engine/evolver.d.ts.map +0 -1
- package/dist/engine/evolver.js +0 -377
- package/dist/engine/evolver.js.map +0 -1
- package/dist/engine/existing_system_analysis.d.ts.map +0 -1
- package/dist/engine/existing_system_analysis.js.map +0 -1
- package/dist/engine/expand_pipeline.d.ts +0 -121
- package/dist/engine/expand_pipeline.d.ts.map +0 -1
- package/dist/engine/expand_pipeline.js +0 -141
- package/dist/engine/expand_pipeline.js.map +0 -1
- package/dist/engine/explicit_asset_registry.d.ts +0 -30
- package/dist/engine/explicit_asset_registry.d.ts.map +0 -1
- package/dist/engine/explicit_asset_registry.js +0 -4235
- package/dist/engine/explicit_asset_registry.js.map +0 -1
- package/dist/engine/extension_contract.d.ts +0 -50
- package/dist/engine/extension_contract.d.ts.map +0 -1
- package/dist/engine/extension_contract.js +0 -158
- package/dist/engine/extension_contract.js.map +0 -1
- package/dist/engine/extension_platform_contracts.d.ts.map +0 -1
- package/dist/engine/extension_platform_contracts.js.map +0 -1
- package/dist/engine/extension_scenario_registry.d.ts +0 -30
- package/dist/engine/extension_scenario_registry.d.ts.map +0 -1
- package/dist/engine/extension_scenario_registry.js +0 -963
- package/dist/engine/extension_scenario_registry.js.map +0 -1
- package/dist/engine/failure_classifier.d.ts +0 -39
- package/dist/engine/failure_classifier.d.ts.map +0 -1
- package/dist/engine/failure_classifier.js +0 -175
- package/dist/engine/failure_classifier.js.map +0 -1
- package/dist/engine/failure_report.d.ts.map +0 -1
- package/dist/engine/failure_report.js.map +0 -1
- package/dist/engine/first_principles.d.ts +0 -37
- package/dist/engine/first_principles.d.ts.map +0 -1
- package/dist/engine/first_principles.js +0 -141
- package/dist/engine/first_principles.js.map +0 -1
- package/dist/engine/foundation_scenario_registry.d.ts +0 -44
- package/dist/engine/foundation_scenario_registry.d.ts.map +0 -1
- package/dist/engine/foundation_scenario_registry.js +0 -280
- package/dist/engine/foundation_scenario_registry.js.map +0 -1
- package/dist/engine/foundation_scenario_runners.d.ts +0 -54
- package/dist/engine/foundation_scenario_runners.d.ts.map +0 -1
- package/dist/engine/foundation_scenario_runners.js +0 -602
- package/dist/engine/foundation_scenario_runners.js.map +0 -1
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.d.ts +0 -6
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.js +0 -117
- package/dist/engine/gate_checks/checkAdapterLayerConsistency.js.map +0 -1
- package/dist/engine/gate_checks/checkCodeObservability.d.ts +0 -6
- package/dist/engine/gate_checks/checkCodeObservability.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkCodeObservability.js +0 -252
- package/dist/engine/gate_checks/checkCodeObservability.js.map +0 -1
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.d.ts +0 -7
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.js +0 -73
- package/dist/engine/gate_checks/checkCodeStyleEnforcement.js.map +0 -1
- package/dist/engine/gate_checks/checkControlPlaneTrust.d.ts +0 -9
- package/dist/engine/gate_checks/checkControlPlaneTrust.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkControlPlaneTrust.js +0 -111
- package/dist/engine/gate_checks/checkControlPlaneTrust.js.map +0 -1
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.js +0 -476
- package/dist/engine/gate_checks/checkCriticalProblemConsumption.js.map +0 -1
- package/dist/engine/gate_checks/checkDependencyAudit.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkDependencyAudit.js +0 -40
- package/dist/engine/gate_checks/checkDependencyAudit.js.map +0 -1
- package/dist/engine/gate_checks/checkDeprecatedCode.d.ts +0 -6
- package/dist/engine/gate_checks/checkDeprecatedCode.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkDeprecatedCode.js +0 -262
- package/dist/engine/gate_checks/checkDeprecatedCode.js.map +0 -1
- package/dist/engine/gate_checks/checkDiagnosticCentralization.d.ts +0 -9
- package/dist/engine/gate_checks/checkDiagnosticCentralization.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkDiagnosticCentralization.js +0 -24
- package/dist/engine/gate_checks/checkDiagnosticCentralization.js.map +0 -1
- package/dist/engine/gate_checks/checkDistFreshness.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkDistFreshness.js +0 -57
- package/dist/engine/gate_checks/checkDistFreshness.js.map +0 -1
- package/dist/engine/gate_checks/checkDualLayerSemantics.d.ts +0 -6
- package/dist/engine/gate_checks/checkDualLayerSemantics.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkDualLayerSemantics.js +0 -88
- package/dist/engine/gate_checks/checkDualLayerSemantics.js.map +0 -1
- package/dist/engine/gate_checks/checkImplementationContract.d.ts +0 -6
- package/dist/engine/gate_checks/checkImplementationContract.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkImplementationContract.js +0 -90
- package/dist/engine/gate_checks/checkImplementationContract.js.map +0 -1
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.d.ts +0 -6
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.js +0 -30
- package/dist/engine/gate_checks/checkKnowledgeAssetSchemaP0.js.map +0 -1
- package/dist/engine/gate_checks/checkKnowledgeLayer.d.ts +0 -6
- package/dist/engine/gate_checks/checkKnowledgeLayer.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkKnowledgeLayer.js +0 -163
- package/dist/engine/gate_checks/checkKnowledgeLayer.js.map +0 -1
- package/dist/engine/gate_checks/checkLongTermMechanization.d.ts +0 -6
- package/dist/engine/gate_checks/checkLongTermMechanization.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkLongTermMechanization.js +0 -55
- package/dist/engine/gate_checks/checkLongTermMechanization.js.map +0 -1
- package/dist/engine/gate_checks/checkMainlineConsumption.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkMainlineConsumption.js +0 -312
- package/dist/engine/gate_checks/checkMainlineConsumption.js.map +0 -1
- package/dist/engine/gate_checks/checkMechanismChain.d.ts +0 -6
- package/dist/engine/gate_checks/checkMechanismChain.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkMechanismChain.js +0 -196
- package/dist/engine/gate_checks/checkMechanismChain.js.map +0 -1
- package/dist/engine/gate_checks/checkMechanismIdentity.d.ts +0 -6
- package/dist/engine/gate_checks/checkMechanismIdentity.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkMechanismIdentity.js +0 -125
- package/dist/engine/gate_checks/checkMechanismIdentity.js.map +0 -1
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.d.ts +0 -6
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.js +0 -736
- package/dist/engine/gate_checks/checkReleaseIssueDesignPath.js.map +0 -1
- package/dist/engine/gate_checks/checkStandardAssetCoverage.d.ts +0 -6
- package/dist/engine/gate_checks/checkStandardAssetCoverage.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkStandardAssetCoverage.js +0 -34
- package/dist/engine/gate_checks/checkStandardAssetCoverage.js.map +0 -1
- package/dist/engine/gate_checks/checkStateChainHealth.d.ts +0 -6
- package/dist/engine/gate_checks/checkStateChainHealth.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkStateChainHealth.js +0 -147
- package/dist/engine/gate_checks/checkStateChainHealth.js.map +0 -1
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.js +0 -314
- package/dist/engine/gate_checks/checkTemplateKnowledgeHygiene.js.map +0 -1
- package/dist/engine/gate_checks/checkTestPollution.d.ts +0 -6
- package/dist/engine/gate_checks/checkTestPollution.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkTestPollution.js +0 -67
- package/dist/engine/gate_checks/checkTestPollution.js.map +0 -1
- package/dist/engine/gate_checks/checkWorkflowNavigation.d.ts.map +0 -1
- package/dist/engine/gate_checks/checkWorkflowNavigation.js +0 -168
- package/dist/engine/gate_checks/checkWorkflowNavigation.js.map +0 -1
- package/dist/engine/gate_checks/helpers.d.ts.map +0 -1
- package/dist/engine/gate_checks/helpers.js +0 -91
- package/dist/engine/gate_checks/helpers.js.map +0 -1
- package/dist/engine/gate_checks/types.d.ts.map +0 -1
- package/dist/engine/gate_checks/types.js.map +0 -1
- package/dist/engine/git_deps.d.ts +0 -69
- package/dist/engine/git_deps.d.ts.map +0 -1
- package/dist/engine/git_deps.js +0 -9
- package/dist/engine/git_deps.js.map +0 -1
- package/dist/engine/governance_report.d.ts +0 -100
- package/dist/engine/governance_report.d.ts.map +0 -1
- package/dist/engine/governance_report.js +0 -184
- package/dist/engine/governance_report.js.map +0 -1
- package/dist/engine/helpers.d.ts +0 -9
- package/dist/engine/helpers.d.ts.map +0 -1
- package/dist/engine/helpers.js +0 -13
- package/dist/engine/helpers.js.map +0 -1
- package/dist/engine/hook_context_types.d.ts +0 -66
- package/dist/engine/hook_context_types.d.ts.map +0 -1
- package/dist/engine/hook_context_types.js +0 -118
- package/dist/engine/hook_context_types.js.map +0 -1
- package/dist/engine/input_material_contract_registry.d.ts +0 -185
- package/dist/engine/input_material_contract_registry.d.ts.map +0 -1
- package/dist/engine/input_material_contract_registry.js +0 -564
- package/dist/engine/input_material_contract_registry.js.map +0 -1
- package/dist/engine/input_material_extractor.d.ts +0 -47
- package/dist/engine/input_material_extractor.d.ts.map +0 -1
- package/dist/engine/input_material_extractor.js +0 -156
- package/dist/engine/input_material_extractor.js.map +0 -1
- package/dist/engine/instruction_contract.d.ts.map +0 -1
- package/dist/engine/instruction_contract.js +0 -184
- package/dist/engine/instruction_contract.js.map +0 -1
- package/dist/engine/intent_expander.d.ts +0 -68
- package/dist/engine/intent_expander.d.ts.map +0 -1
- package/dist/engine/intent_expander.js +0 -2190
- package/dist/engine/intent_expander.js.map +0 -1
- package/dist/engine/intent_route_scorer.d.ts +0 -45
- package/dist/engine/intent_route_scorer.d.ts.map +0 -1
- package/dist/engine/intent_route_scorer.js +0 -341
- package/dist/engine/intent_route_scorer.js.map +0 -1
- package/dist/engine/intent_router.d.ts +0 -130
- package/dist/engine/intent_router.d.ts.map +0 -1
- package/dist/engine/intent_router.js +0 -628
- package/dist/engine/intent_router.js.map +0 -1
- package/dist/engine/intent_signal_extractor.d.ts +0 -73
- package/dist/engine/intent_signal_extractor.d.ts.map +0 -1
- package/dist/engine/intent_signal_extractor.js +0 -296
- package/dist/engine/intent_signal_extractor.js.map +0 -1
- package/dist/engine/io_controller.d.ts +0 -87
- package/dist/engine/io_controller.d.ts.map +0 -1
- package/dist/engine/io_controller.js +0 -203
- package/dist/engine/io_controller.js.map +0 -1
- package/dist/engine/java_quality_guard.d.ts.map +0 -1
- package/dist/engine/java_quality_guard.js +0 -228
- package/dist/engine/java_quality_guard.js.map +0 -1
- package/dist/engine/job_manager.d.ts +0 -111
- package/dist/engine/job_manager.d.ts.map +0 -1
- package/dist/engine/job_manager.js +0 -270
- package/dist/engine/job_manager.js.map +0 -1
- package/dist/engine/knowledge_acceptance_registry.d.ts.map +0 -1
- package/dist/engine/knowledge_acceptance_registry.js +0 -261
- package/dist/engine/knowledge_acceptance_registry.js.map +0 -1
- package/dist/engine/knowledge_asset_audit.d.ts.map +0 -1
- package/dist/engine/knowledge_asset_audit.js +0 -230
- package/dist/engine/knowledge_asset_audit.js.map +0 -1
- package/dist/engine/knowledge_asset_consumer.d.ts +0 -150
- package/dist/engine/knowledge_asset_consumer.d.ts.map +0 -1
- package/dist/engine/knowledge_asset_consumer.js +0 -287
- package/dist/engine/knowledge_asset_consumer.js.map +0 -1
- package/dist/engine/knowledge_asset_generation_gate.d.ts.map +0 -1
- package/dist/engine/knowledge_asset_generation_gate.js.map +0 -1
- package/dist/engine/knowledge_asset_migration.d.ts.map +0 -1
- package/dist/engine/knowledge_asset_migration.js +0 -204
- package/dist/engine/knowledge_asset_migration.js.map +0 -1
- package/dist/engine/knowledge_asset_schema.d.ts +0 -97
- package/dist/engine/knowledge_asset_schema.d.ts.map +0 -1
- package/dist/engine/knowledge_asset_schema.js +0 -413
- package/dist/engine/knowledge_asset_schema.js.map +0 -1
- package/dist/engine/knowledge_config_loader.d.ts.map +0 -1
- package/dist/engine/knowledge_config_loader.js +0 -144
- package/dist/engine/knowledge_config_loader.js.map +0 -1
- package/dist/engine/knowledge_consumption_snapshot.d.ts +0 -91
- package/dist/engine/knowledge_consumption_snapshot.d.ts.map +0 -1
- package/dist/engine/knowledge_consumption_snapshot.js +0 -113
- package/dist/engine/knowledge_consumption_snapshot.js.map +0 -1
- package/dist/engine/knowledge_evolution.d.ts +0 -82
- package/dist/engine/knowledge_evolution.d.ts.map +0 -1
- package/dist/engine/knowledge_evolution.js +0 -272
- package/dist/engine/knowledge_evolution.js.map +0 -1
- package/dist/engine/knowledge_governance_gate.d.ts +0 -38
- package/dist/engine/knowledge_governance_gate.d.ts.map +0 -1
- package/dist/engine/knowledge_governance_gate.js +0 -123
- package/dist/engine/knowledge_governance_gate.js.map +0 -1
- package/dist/engine/knowledge_injection_boundary.d.ts +0 -59
- package/dist/engine/knowledge_injection_boundary.d.ts.map +0 -1
- package/dist/engine/knowledge_injection_boundary.js +0 -623
- package/dist/engine/knowledge_injection_boundary.js.map +0 -1
- package/dist/engine/knowledge_lifecycle.d.ts +0 -83
- package/dist/engine/knowledge_lifecycle.d.ts.map +0 -1
- package/dist/engine/knowledge_lifecycle.js +0 -247
- package/dist/engine/knowledge_lifecycle.js.map +0 -1
- package/dist/engine/knowledge_manager.d.ts +0 -149
- package/dist/engine/knowledge_manager.d.ts.map +0 -1
- package/dist/engine/knowledge_manager.js +0 -934
- package/dist/engine/knowledge_manager.js.map +0 -1
- package/dist/engine/knowledge_scenario_registry.d.ts +0 -21
- package/dist/engine/knowledge_scenario_registry.d.ts.map +0 -1
- package/dist/engine/knowledge_scenario_registry.js +0 -329
- package/dist/engine/knowledge_scenario_registry.js.map +0 -1
- package/dist/engine/knowledge_sovereignty.d.ts.map +0 -1
- package/dist/engine/knowledge_sovereignty.js +0 -196
- package/dist/engine/knowledge_sovereignty.js.map +0 -1
- package/dist/engine/knowledge_template_contracts.d.ts.map +0 -1
- package/dist/engine/knowledge_template_contracts.js.map +0 -1
- package/dist/engine/language_policy.d.ts +0 -78
- package/dist/engine/language_policy.d.ts.map +0 -1
- package/dist/engine/language_policy.js +0 -139
- package/dist/engine/language_policy.js.map +0 -1
- package/dist/engine/language_policy_contract.d.ts.map +0 -1
- package/dist/engine/language_policy_contract.js.map +0 -1
- package/dist/engine/legacy_type_migration.d.ts +0 -63
- package/dist/engine/legacy_type_migration.d.ts.map +0 -1
- package/dist/engine/legacy_type_migration.js +0 -227
- package/dist/engine/legacy_type_migration.js.map +0 -1
- package/dist/engine/lifecycle_knowledge_contract.d.ts +0 -59
- package/dist/engine/lifecycle_knowledge_contract.d.ts.map +0 -1
- package/dist/engine/lifecycle_knowledge_contract.js +0 -203
- package/dist/engine/lifecycle_knowledge_contract.js.map +0 -1
- package/dist/engine/llm_gateway.d.ts +0 -167
- package/dist/engine/llm_gateway.d.ts.map +0 -1
- package/dist/engine/llm_gateway.js +0 -292
- package/dist/engine/llm_gateway.js.map +0 -1
- package/dist/engine/local_docker_acceptance.d.ts +0 -94
- package/dist/engine/local_docker_acceptance.d.ts.map +0 -1
- package/dist/engine/local_docker_acceptance.js +0 -312
- package/dist/engine/local_docker_acceptance.js.map +0 -1
- package/dist/engine/log_governance.d.ts.map +0 -1
- package/dist/engine/log_governance.js +0 -76
- package/dist/engine/log_governance.js.map +0 -1
- package/dist/engine/logger.d.ts.map +0 -1
- package/dist/engine/logger.js +0 -115
- package/dist/engine/logger.js.map +0 -1
- package/dist/engine/main_path_integration_contract.d.ts +0 -383
- package/dist/engine/main_path_integration_contract.d.ts.map +0 -1
- package/dist/engine/main_path_integration_contract.js +0 -1582
- package/dist/engine/main_path_integration_contract.js.map +0 -1
- package/dist/engine/mechanism_contract_registry.d.ts +0 -59
- package/dist/engine/mechanism_contract_registry.d.ts.map +0 -1
- package/dist/engine/mechanism_contract_registry.js +0 -1289
- package/dist/engine/mechanism_contract_registry.js.map +0 -1
- package/dist/engine/mechanism_health_check.d.ts +0 -23
- package/dist/engine/mechanism_health_check.d.ts.map +0 -1
- package/dist/engine/mechanism_health_check.js +0 -139
- package/dist/engine/mechanism_health_check.js.map +0 -1
- package/dist/engine/metric_governance.d.ts.map +0 -1
- package/dist/engine/metric_governance.js.map +0 -1
- package/dist/engine/mutation_audit.d.ts +0 -53
- package/dist/engine/mutation_audit.d.ts.map +0 -1
- package/dist/engine/mutation_audit.js +0 -136
- package/dist/engine/mutation_audit.js.map +0 -1
- package/dist/engine/next_action_planner.d.ts +0 -32
- package/dist/engine/next_action_planner.d.ts.map +0 -1
- package/dist/engine/next_action_planner.js +0 -823
- package/dist/engine/next_action_planner.js.map +0 -1
- package/dist/engine/observability.d.ts +0 -68
- package/dist/engine/observability.d.ts.map +0 -1
- package/dist/engine/observability.js +0 -435
- package/dist/engine/observability.js.map +0 -1
- package/dist/engine/observed_consumption.d.ts +0 -54
- package/dist/engine/observed_consumption.d.ts.map +0 -1
- package/dist/engine/observed_consumption.js +0 -381
- package/dist/engine/observed_consumption.js.map +0 -1
- package/dist/engine/ood_solid_contract.d.ts.map +0 -1
- package/dist/engine/ood_solid_contract.js +0 -115
- package/dist/engine/ood_solid_contract.js.map +0 -1
- package/dist/engine/path_scope_utils.d.ts +0 -21
- package/dist/engine/path_scope_utils.d.ts.map +0 -1
- package/dist/engine/path_scope_utils.js +0 -126
- package/dist/engine/path_scope_utils.js.map +0 -1
- package/dist/engine/plan_proposal_gate.d.ts.map +0 -1
- package/dist/engine/plan_proposal_gate.js +0 -341
- package/dist/engine/plan_proposal_gate.js.map +0 -1
- package/dist/engine/platform_context.d.ts +0 -44
- package/dist/engine/platform_context.d.ts.map +0 -1
- package/dist/engine/platform_context.js +0 -169
- package/dist/engine/platform_context.js.map +0 -1
- package/dist/engine/policy_drift_detector.d.ts +0 -72
- package/dist/engine/policy_drift_detector.d.ts.map +0 -1
- package/dist/engine/policy_drift_detector.js +0 -277
- package/dist/engine/policy_drift_detector.js.map +0 -1
- package/dist/engine/privacy_secret_contract.d.ts +0 -320
- package/dist/engine/privacy_secret_contract.d.ts.map +0 -1
- package/dist/engine/privacy_secret_contract.js +0 -875
- package/dist/engine/privacy_secret_contract.js.map +0 -1
- package/dist/engine/project_knowledge_contract.d.ts +0 -132
- package/dist/engine/project_knowledge_contract.d.ts.map +0 -1
- package/dist/engine/project_knowledge_contract.js +0 -555
- package/dist/engine/project_knowledge_contract.js.map +0 -1
- package/dist/engine/project_stage_detector.d.ts.map +0 -1
- package/dist/engine/project_stage_detector.js +0 -185
- package/dist/engine/project_stage_detector.js.map +0 -1
- package/dist/engine/regression_matrix.d.ts.map +0 -1
- package/dist/engine/regression_matrix.js +0 -410
- package/dist/engine/regression_matrix.js.map +0 -1
- package/dist/engine/release_compatibility.d.ts.map +0 -1
- package/dist/engine/release_compatibility.js.map +0 -1
- package/dist/engine/release_gate_scenario_registry.d.ts.map +0 -1
- package/dist/engine/release_gate_scenario_registry.js +0 -717
- package/dist/engine/release_gate_scenario_registry.js.map +0 -1
- package/dist/engine/release_issue_scenario_registry.d.ts +0 -62
- package/dist/engine/release_issue_scenario_registry.d.ts.map +0 -1
- package/dist/engine/release_issue_scenario_registry.js +0 -1748
- package/dist/engine/release_issue_scenario_registry.js.map +0 -1
- package/dist/engine/release_readiness_gate.d.ts +0 -35
- package/dist/engine/release_readiness_gate.d.ts.map +0 -1
- package/dist/engine/release_readiness_gate.js +0 -158
- package/dist/engine/release_readiness_gate.js.map +0 -1
- package/dist/engine/release_tool_harness.d.ts +0 -71
- package/dist/engine/release_tool_harness.d.ts.map +0 -1
- package/dist/engine/release_tool_harness.js +0 -161
- package/dist/engine/release_tool_harness.js.map +0 -1
- package/dist/engine/risk_sampler.d.ts +0 -43
- package/dist/engine/risk_sampler.d.ts.map +0 -1
- package/dist/engine/risk_sampler.js +0 -79
- package/dist/engine/risk_sampler.js.map +0 -1
- package/dist/engine/rollback_router.d.ts +0 -35
- package/dist/engine/rollback_router.d.ts.map +0 -1
- package/dist/engine/rollback_router.js +0 -50
- package/dist/engine/rollback_router.js.map +0 -1
- package/dist/engine/route_decision_contract_verifier.d.ts +0 -44
- package/dist/engine/route_decision_contract_verifier.d.ts.map +0 -1
- package/dist/engine/route_decision_contract_verifier.js +0 -154
- package/dist/engine/route_decision_contract_verifier.js.map +0 -1
- package/dist/engine/runtime_safety.d.ts.map +0 -1
- package/dist/engine/runtime_safety.js +0 -200
- package/dist/engine/runtime_safety.js.map +0 -1
- package/dist/engine/scaffolder.d.ts +0 -19
- package/dist/engine/scaffolder.d.ts.map +0 -1
- package/dist/engine/scaffolder.js +0 -411
- package/dist/engine/scaffolder.js.map +0 -1
- package/dist/engine/scope_controller.d.ts +0 -16
- package/dist/engine/scope_controller.d.ts.map +0 -1
- package/dist/engine/scope_controller.js +0 -195
- package/dist/engine/scope_controller.js.map +0 -1
- package/dist/engine/scope_lease.d.ts +0 -88
- package/dist/engine/scope_lease.d.ts.map +0 -1
- package/dist/engine/scope_lease.js +0 -166
- package/dist/engine/scope_lease.js.map +0 -1
- package/dist/engine/scope_resolver.d.ts +0 -11
- package/dist/engine/scope_resolver.d.ts.map +0 -1
- package/dist/engine/scope_resolver.js +0 -526
- package/dist/engine/scope_resolver.js.map +0 -1
- package/dist/engine/semantic_evidence.d.ts +0 -29
- package/dist/engine/semantic_evidence.d.ts.map +0 -1
- package/dist/engine/semantic_evidence.js +0 -91
- package/dist/engine/semantic_evidence.js.map +0 -1
- package/dist/engine/slice_executor.d.ts +0 -79
- package/dist/engine/slice_executor.d.ts.map +0 -1
- package/dist/engine/slice_executor.js +0 -100
- package/dist/engine/slice_executor.js.map +0 -1
- package/dist/engine/stage_gate_engine.d.ts +0 -32
- package/dist/engine/stage_gate_engine.d.ts.map +0 -1
- package/dist/engine/stage_gate_engine.js +0 -105
- package/dist/engine/stage_gate_engine.js.map +0 -1
- package/dist/engine/stale_current_task_detector.d.ts +0 -30
- package/dist/engine/stale_current_task_detector.d.ts.map +0 -1
- package/dist/engine/stale_current_task_detector.js +0 -168
- package/dist/engine/stale_current_task_detector.js.map +0 -1
- package/dist/engine/standard_asset_contract.d.ts +0 -75
- package/dist/engine/standard_asset_contract.d.ts.map +0 -1
- package/dist/engine/standard_asset_contract.js +0 -388
- package/dist/engine/standard_asset_contract.js.map +0 -1
- package/dist/engine/standard_asset_coverage.d.ts.map +0 -1
- package/dist/engine/standard_asset_coverage.js +0 -220
- package/dist/engine/standard_asset_coverage.js.map +0 -1
- package/dist/engine/state_update_bypass.d.ts +0 -19
- package/dist/engine/state_update_bypass.d.ts.map +0 -1
- package/dist/engine/state_update_bypass.js +0 -17
- package/dist/engine/state_update_bypass.js.map +0 -1
- package/dist/engine/task_context.d.ts +0 -249
- package/dist/engine/task_context.d.ts.map +0 -1
- package/dist/engine/task_context.js +0 -983
- package/dist/engine/task_context.js.map +0 -1
- package/dist/engine/task_planner.d.ts +0 -28
- package/dist/engine/task_planner.d.ts.map +0 -1
- package/dist/engine/task_planner.js +0 -325
- package/dist/engine/task_planner.js.map +0 -1
- package/dist/engine/task_stage_detector.d.ts +0 -25
- package/dist/engine/task_stage_detector.d.ts.map +0 -1
- package/dist/engine/task_stage_detector.js +0 -160
- package/dist/engine/task_stage_detector.js.map +0 -1
- package/dist/engine/technology_decision.d.ts +0 -40
- package/dist/engine/technology_decision.d.ts.map +0 -1
- package/dist/engine/technology_decision.js +0 -137
- package/dist/engine/technology_decision.js.map +0 -1
- package/dist/engine/template_asset_contract_registry.d.ts +0 -162
- package/dist/engine/template_asset_contract_registry.d.ts.map +0 -1
- package/dist/engine/template_asset_contract_registry.js +0 -626
- package/dist/engine/template_asset_contract_registry.js.map +0 -1
- package/dist/engine/template_asset_visibility.d.ts +0 -109
- package/dist/engine/template_asset_visibility.d.ts.map +0 -1
- package/dist/engine/template_asset_visibility.js +0 -321
- package/dist/engine/template_asset_visibility.js.map +0 -1
- package/dist/engine/template_init_sync.d.ts +0 -97
- package/dist/engine/template_init_sync.d.ts.map +0 -1
- package/dist/engine/template_init_sync.js +0 -395
- package/dist/engine/template_init_sync.js.map +0 -1
- package/dist/engine/template_manifest_io.d.ts +0 -57
- package/dist/engine/template_manifest_io.d.ts.map +0 -1
- package/dist/engine/template_manifest_io.js +0 -188
- package/dist/engine/template_manifest_io.js.map +0 -1
- package/dist/engine/template_mechanism_auditor.d.ts +0 -95
- package/dist/engine/template_mechanism_auditor.d.ts.map +0 -1
- package/dist/engine/template_mechanism_auditor.js +0 -626
- package/dist/engine/template_mechanism_auditor.js.map +0 -1
- package/dist/engine/template_sync.d.ts +0 -98
- package/dist/engine/template_sync.d.ts.map +0 -1
- package/dist/engine/template_sync.js.map +0 -1
- package/dist/engine/test_generator.d.ts +0 -10
- package/dist/engine/test_generator.d.ts.map +0 -1
- package/dist/engine/test_generator.js +0 -265
- package/dist/engine/test_generator.js.map +0 -1
- package/dist/engine/test_quality.d.ts +0 -36
- package/dist/engine/test_quality.d.ts.map +0 -1
- package/dist/engine/test_quality.js +0 -642
- package/dist/engine/test_quality.js.map +0 -1
- package/dist/engine/test_strategy.d.ts.map +0 -1
- package/dist/engine/test_strategy.js.map +0 -1
- package/dist/engine/tool_invocation_contract_registry.d.ts +0 -136
- package/dist/engine/tool_invocation_contract_registry.d.ts.map +0 -1
- package/dist/engine/tool_invocation_contract_registry.js +0 -762
- package/dist/engine/tool_invocation_contract_registry.js.map +0 -1
- package/dist/engine/traceability.d.ts +0 -48
- package/dist/engine/traceability.d.ts.map +0 -1
- package/dist/engine/traceability.js +0 -470
- package/dist/engine/traceability.js.map +0 -1
- package/dist/engine/user_feedback_contract.d.ts +0 -162
- package/dist/engine/user_feedback_contract.d.ts.map +0 -1
- package/dist/engine/user_feedback_contract.js +0 -418
- package/dist/engine/user_feedback_contract.js.map +0 -1
- package/dist/engine/user_promise.d.ts +0 -67
- package/dist/engine/user_promise.d.ts.map +0 -1
- package/dist/engine/user_promise.js +0 -436
- package/dist/engine/user_promise.js.map +0 -1
- package/dist/engine/verification_contract.d.ts.map +0 -1
- package/dist/engine/verification_contract.js.map +0 -1
- package/dist/engine/verifier.d.ts +0 -45
- package/dist/engine/verifier.d.ts.map +0 -1
- package/dist/engine/verifier.js +0 -629
- package/dist/engine/verifier.js.map +0 -1
- package/dist/engine/workflow_contract_registry.d.ts +0 -108
- package/dist/engine/workflow_contract_registry.d.ts.map +0 -1
- package/dist/engine/workflow_contract_registry.js +0 -832
- package/dist/engine/workflow_contract_registry.js.map +0 -1
- package/dist/engine/workflow_navigation_contract.d.ts +0 -171
- package/dist/engine/workflow_navigation_contract.d.ts.map +0 -1
- package/dist/engine/workflow_navigation_contract.js +0 -31
- package/dist/engine/workflow_navigation_contract.js.map +0 -1
- package/dist/engine/workflow_rule_generator.d.ts +0 -22
- package/dist/engine/workflow_rule_generator.d.ts.map +0 -1
- package/dist/engine/workflow_rule_generator.js +0 -83
- package/dist/engine/workflow_rule_generator.js.map +0 -1
- package/dist/engine/workflow_template_pack.d.ts +0 -71
- package/dist/engine/workflow_template_pack.d.ts.map +0 -1
- package/dist/engine/workflow_template_pack.js +0 -246
- package/dist/engine/workflow_template_pack.js.map +0 -1
- package/dist/engine/workspace_lease.d.ts +0 -69
- package/dist/engine/workspace_lease.d.ts.map +0 -1
- package/dist/engine/workspace_lease.js +0 -154
- package/dist/engine/workspace_lease.js.map +0 -1
- package/dist/engine/workspace_resumer.d.ts.map +0 -1
- package/dist/engine/workspace_resumer.js +0 -207
- package/dist/engine/workspace_resumer.js.map +0 -1
- package/dist/engine/zero_config_init.d.ts +0 -152
- package/dist/engine/zero_config_init.d.ts.map +0 -1
- package/dist/engine/zero_config_init.js +0 -810
- package/dist/engine/zero_config_init.js.map +0 -1
- package/templates/artifacts/shared//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266/346/250/241/346/235/277.md +0 -78
- package/templates/internal/patterns//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +0 -64
- package/templates/internal/rules//345/267/245/344/275/234/346/265/201/346/250/241/346/235/277/345/214/205/350/247/204/345/210/231.md +0 -48
- package/templates/internal/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +0 -71
- package/templates/internal/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +0 -96
- /package/dist/engine/{audit_pool.d.ts → audit/audit_pool.d.ts} +0 -0
- /package/dist/engine/{core_experience_principle.d.ts → audit/core_experience_principle.d.ts} +0 -0
- /package/dist/engine/{degradation.d.ts → audit/degradation.d.ts} +0 -0
- /package/dist/engine/{degradation.js → audit/degradation.js} +0 -0
- /package/dist/engine/{diagnostic_registry.d.ts → audit/diagnostic_registry.d.ts} +0 -0
- /package/dist/engine/{failure_report.d.ts → audit/failure_report.d.ts} +0 -0
- /package/dist/engine/{failure_report.js → audit/failure_report.js} +0 -0
- /package/dist/engine/{java_quality_guard.d.ts → audit/java_quality_guard.d.ts} +0 -0
- /package/dist/engine/{runtime_safety.d.ts → audit/runtime_safety.d.ts} +0 -0
- /package/dist/engine/{test_strategy.d.ts → audit/test_strategy.d.ts} +0 -0
- /package/dist/engine/{test_strategy.js → audit/test_strategy.js} +0 -0
- /package/dist/engine/{config_write_boundary.d.ts → config/config_write_boundary.d.ts} +0 -0
- /package/dist/engine/{regression_matrix.d.ts → config/regression_matrix.d.ts} +0 -0
- /package/dist/engine/{architecture_design_contract.d.ts → contracts/architecture_design_contract.d.ts} +0 -0
- /package/dist/engine/{architecture_design_contract.js → contracts/architecture_design_contract.js} +0 -0
- /package/dist/engine/{backend_implementation_contract.d.ts → contracts/backend_implementation_contract.d.ts} +0 -0
- /package/dist/engine/{capability_action_advisor.d.ts → contracts/capability_action_advisor.d.ts} +0 -0
- /package/dist/engine/{capability_registry.d.ts → contracts/capability_registry.d.ts} +0 -0
- /package/dist/engine/{code_maintainability_observability_contract.d.ts → contracts/code_maintainability_observability_contract.d.ts} +0 -0
- /package/dist/engine/{control_plane_contract.d.ts → contracts/control_plane_contract.d.ts} +0 -0
- /package/dist/engine/{decision_workshop.js → contracts/decision_workshop.js} +0 -0
- /package/dist/engine/{design_artifact_pack.js → contracts/design_artifact_pack.js} +0 -0
- /package/dist/engine/{detail_discipline.d.ts → contracts/detail_discipline.d.ts} +0 -0
- /package/dist/engine/{detail_discipline.js → contracts/detail_discipline.js} +0 -0
- /package/dist/engine/{escape_report.d.ts → contracts/escape_report.d.ts} +0 -0
- /package/dist/engine/{existing_system_analysis.d.ts → contracts/existing_system_analysis.d.ts} +0 -0
- /package/dist/engine/{existing_system_analysis.js → contracts/existing_system_analysis.js} +0 -0
- /package/dist/engine/{extension_platform_contracts.d.ts → contracts/extension_platform_contracts.d.ts} +0 -0
- /package/dist/engine/{extension_platform_contracts.js → contracts/extension_platform_contracts.js} +0 -0
- /package/dist/engine/{instruction_contract.d.ts → contracts/instruction_contract.d.ts} +0 -0
- /package/dist/engine/{metric_governance.d.ts → contracts/metric_governance.d.ts} +0 -0
- /package/dist/engine/{metric_governance.js → contracts/metric_governance.js} +0 -0
- /package/dist/engine/{ood_solid_contract.d.ts → contracts/ood_solid_contract.d.ts} +0 -0
- /package/dist/engine/{verification_contract.d.ts → contracts/verification_contract.d.ts} +0 -0
- /package/dist/engine/{verification_contract.js → contracts/verification_contract.js} +0 -0
- /package/dist/engine/{log_governance.d.ts → core/log_governance.d.ts} +0 -0
- /package/dist/engine/{logger.d.ts → core/logger.d.ts} +0 -0
- /package/dist/engine/{chinese_semantic_priority.d.ts → knowledge/chinese_semantic_priority.d.ts} +0 -0
- /package/dist/engine/{chinese_semantic_priority.js → knowledge/chinese_semantic_priority.js} +0 -0
- /package/dist/engine/{documentation_governance.d.ts → knowledge/documentation_governance.d.ts} +0 -0
- /package/dist/engine/{documentation_governance.js → knowledge/documentation_governance.js} +0 -0
- /package/dist/engine/{knowledge_acceptance_registry.d.ts → knowledge/knowledge_acceptance_registry.d.ts} +0 -0
- /package/dist/engine/{knowledge_asset_audit.d.ts → knowledge/knowledge_asset_audit.d.ts} +0 -0
- /package/dist/engine/{knowledge_asset_generation_gate.d.ts → knowledge/knowledge_asset_generation_gate.d.ts} +0 -0
- /package/dist/engine/{knowledge_asset_generation_gate.js → knowledge/knowledge_asset_generation_gate.js} +0 -0
- /package/dist/engine/{knowledge_asset_migration.d.ts → knowledge/knowledge_asset_migration.d.ts} +0 -0
- /package/dist/engine/{knowledge_config_loader.d.ts → knowledge/knowledge_config_loader.d.ts} +0 -0
- /package/dist/engine/{knowledge_sovereignty.d.ts → knowledge/knowledge_sovereignty.d.ts} +0 -0
- /package/dist/engine/{knowledge_template_contracts.d.ts → knowledge/knowledge_template_contracts.d.ts} +0 -0
- /package/dist/engine/{knowledge_template_contracts.js → knowledge/knowledge_template_contracts.js} +0 -0
- /package/dist/engine/{language_policy_contract.d.ts → knowledge/language_policy_contract.d.ts} +0 -0
- /package/dist/engine/{language_policy_contract.js → knowledge/language_policy_contract.js} +0 -0
- /package/dist/engine/{release_compatibility.d.ts → knowledge/release_compatibility.d.ts} +0 -0
- /package/dist/engine/{release_compatibility.js → knowledge/release_compatibility.js} +0 -0
- /package/dist/engine/{conflict_gate.d.ts → pipeline/conflict_gate.d.ts} +0 -0
- /package/dist/engine/{diff_ownership.d.ts → pipeline/diff_ownership.d.ts} +0 -0
- /package/dist/engine/{diff_ownership_store.d.ts → pipeline/diff_ownership_store.d.ts} +0 -0
- /package/dist/engine/{plan_proposal_gate.d.ts → pipeline/plan_proposal_gate.d.ts} +0 -0
- /package/dist/engine/{workspace_resumer.d.ts → pipeline/workspace_resumer.d.ts} +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/checkCriticalProblemConsumption.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/checkDependencyAudit.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/checkDistFreshness.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/checkMainlineConsumption.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/checkTemplateKnowledgeHygiene.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/checkWorkflowNavigation.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/helpers.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/types.d.ts +0 -0
- /package/dist/engine/{gate_checks → release/gate_checks}/types.js +0 -0
- /package/dist/engine/{release_gate_scenario_registry.d.ts → release/release_gate_scenario_registry.d.ts} +0 -0
- /package/dist/engine/{standard_asset_coverage.d.ts → templates/standard_asset_coverage.d.ts} +0 -0
- /package/dist/engine/{template_sync.js → templates/template_sync.js} +0 -0
- /package/dist/engine/{project_stage_detector.d.ts → workflow/project_stage_detector.d.ts} +0 -0
|
@@ -1,4224 +1,10 @@
|
|
|
1
|
-
import { debug, internalWarn } from "../../engine/logger.js";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { promises as fsp } from "node:fs";
|
|
5
|
-
import crypto from "node:crypto";
|
|
6
|
-
import { normalizePathCandidate } from "../../engine/input_material_extractor.js";
|
|
7
|
-
import { archiveStaleCurrentPointer, detectStaleCurrentTask } from "../../engine/stale_current_task_detector.js";
|
|
8
|
-
import { verifyArtifact } from "../../engine/artifact_contract_registry.js";
|
|
9
|
-
import { verifyRouteDecisionContract } from "../../engine/route_decision_contract_verifier.js";
|
|
10
|
-
import { isSameOrDescendantPath } from "../../engine/path_scope_utils.js";
|
|
11
|
-
import { findToolInvocationContractByName, createToolTrace, validateToolInvocation, hasWriteSideEffect, } from "../../engine/tool_invocation_contract_registry.js";
|
|
12
|
-
import { TOOL_DIAGNOSTIC_CODES } from "../../engine/diagnostic_registry.js";
|
|
13
|
-
function createLazy(loader) {
|
|
14
|
-
let mod = { loaded: null, promise: null };
|
|
15
|
-
return () => {
|
|
16
|
-
if (mod.loaded)
|
|
17
|
-
return Promise.resolve(mod.loaded);
|
|
18
|
-
if (!mod.promise)
|
|
19
|
-
mod.promise = loader().then(m => { mod.loaded = m; return m; });
|
|
20
|
-
return mod.promise;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
const lazyClassifier = createLazy(() => import("../../engine/classifier.js"));
|
|
24
|
-
const lazyIntentRouter = createLazy(() => import("../../engine/intent_router.js"));
|
|
25
|
-
const lazyExpander = createLazy(() => import("../../engine/intent_expander.js"));
|
|
26
|
-
const lazyVerifier = createLazy(() => import("../../engine/verifier.js"));
|
|
27
|
-
const lazyEvolver = createLazy(() => import("../../engine/evolver.js"));
|
|
28
|
-
const lazyPlanner = createLazy(() => import("../../engine/task_planner.js"));
|
|
29
|
-
const lazyImpact = createLazy(() => import("../../engine/impact_analyzer.js"));
|
|
30
|
-
const lazyReviewer = createLazy(() => import("../../engine/code_reviewer.js"));
|
|
31
|
-
const lazyDebt = createLazy(() => import("../../engine/debt_tracker.js"));
|
|
32
|
-
const lazyScaffolder = createLazy(() => import("../../engine/scaffolder.js"));
|
|
33
|
-
const lazyDelivery = createLazy(() => import("../../engine/delivery.js"));
|
|
34
|
-
const lazyChangeCoord = createLazy(() => import("../../engine/change_coordinator.js"));
|
|
35
|
-
const lazyTeam = createLazy(() => import("../../engine/team_awareness.js"));
|
|
36
|
-
const lazyContractGuard = createLazy(() => import("../../engine/contract_guard.js"));
|
|
37
|
-
const lazyOnboarding = createLazy(() => import("../../engine/onboarding.js"));
|
|
38
|
-
const lazyGitDeps = createLazy(() => import("../../engine/git_deps.js"));
|
|
39
|
-
const lazyKnowledge = createLazy(() => import("../../engine/knowledge_manager.js"));
|
|
40
|
-
const lazyFeasibility = createLazy(() => import("../../engine/feasibility_checker.js"));
|
|
41
|
-
const lazyDebugger = createLazy(() => import("../../engine/debugger.js"));
|
|
42
|
-
const lazyObservability = createLazy(() => import("../../engine/observability.js"));
|
|
43
|
-
const lazyGovernance = createLazy(() => import("../../engine/governance_report.js"));
|
|
44
|
-
const lazyMigration = createLazy(() => import("../../engine/migration_guard.js"));
|
|
45
|
-
const lazyTestGen = createLazy(() => import("../../engine/test_generator.js"));
|
|
46
|
-
const lazyTestQuality = createLazy(() => import("../../engine/test_quality.js"));
|
|
47
|
-
const lazyDepScan = createLazy(() => import("../../engine/dependency_scanner.js"));
|
|
48
|
-
const lazyDebtReport = createLazy(() => import("../../engine/debt_reporter.js"));
|
|
49
|
-
const lazyExploration = createLazy(() => import("../../engine/exploration.js"));
|
|
50
|
-
const lazyWorkspaceResumer = createLazy(() => import("../../engine/workspace_resumer.js"));
|
|
51
|
-
const lazyLLM = createLazy(() => import("../../engine/llm_gateway.js"));
|
|
52
|
-
const lazyIO = createLazy(() => import("../../engine/io_controller.js"));
|
|
53
|
-
const lazyCapability = createLazy(() => import("../../engine/capability_registry.js"));
|
|
54
|
-
const lazyDecision = createLazy(() => import("../../engine/decision_contract.js"));
|
|
55
|
-
const lazyAnchor = createLazy(() => import("../../engine/cognitive_anchor.js"));
|
|
56
|
-
const lazyJob = createLazy(() => import("../../engine/job_manager.js"));
|
|
57
|
-
const lazyAuditPool = createLazy(() => import("../../engine/audit_pool.js"));
|
|
58
|
-
const lazyEscape = createLazy(() => import("../../engine/escape_report.js"));
|
|
59
|
-
const lazyAuditSampler = createLazy(() => import("../../engine/audit_sampler.js"));
|
|
60
|
-
const lazyCapAdvisor = createLazy(() => import("../../engine/capability_action_advisor.js"));
|
|
61
|
-
const lazyCapState = createLazy(() => import("../../engine/capability_state_store.js"));
|
|
62
|
-
const lazyMainPath = createLazy(() => import("../../engine/main_path_integration_contract.js"));
|
|
63
|
-
const lazyDualLayer = createLazy(() => import("../../engine/dual_layer_mechanism_registry.js"));
|
|
64
|
-
const lazyInputMaterial = createLazy(() => import("../../engine/input_material_contract_registry.js"));
|
|
65
|
-
const lazyConfigPrecedence = createLazy(() => import("../../engine/config_precedence_contract.js"));
|
|
66
|
-
const lazyEnforcementGuard = createLazy(() => import("../../engine/enforcement_guard.js"));
|
|
67
|
-
const lazyWorkspaceLease = createLazy(() => import("../../engine/workspace_lease.js"));
|
|
68
|
-
const lazyDeliveryReadiness = createLazy(() => import("../../engine/delivery_readiness.js"));
|
|
69
|
-
const lazyVerificationContract = createLazy(() => import("../../engine/verification_contract.js"));
|
|
70
|
-
const lazyFailureReport = createLazy(() => import("../../engine/failure_report.js"));
|
|
71
|
-
const lazyDegradation = createLazy(() => import("../../engine/degradation.js"));
|
|
72
|
-
const lazyArchitectureDesign = createLazy(() => import("../../engine/architecture_design_contract.js"));
|
|
73
|
-
const lazyExistingSystemAnalysis = createLazy(() => import("../../engine/existing_system_analysis.js"));
|
|
74
|
-
const lazyCodingReadiness = createLazy(() => import("../../engine/coding_readiness_gate.js"));
|
|
75
|
-
const lazyLocalAcceptance = createLazy(() => import("../../engine/local_docker_acceptance.js"));
|
|
76
|
-
const lazyInstructionContract = createLazy(() => import("../../engine/instruction_contract.js"));
|
|
77
|
-
const lazyTechnologyDecision = createLazy(() => import("../../engine/technology_decision.js"));
|
|
78
|
-
const lazyDetailDiscipline = createLazy(() => import("../../engine/detail_discipline.js"));
|
|
79
|
-
const lazyFirstPrinciples = createLazy(() => import("../../engine/first_principles.js"));
|
|
80
|
-
const lazyBrainstormContract = createLazy(() => import("../../engine/brainstorm_contract.js"));
|
|
81
|
-
const lazyArchitectureWorkshop = createLazy(() => import("../../engine/architecture_decision_workshop.js"));
|
|
82
|
-
const lazyDesignArtifactPack = createLazy(() => import("../../engine/design_artifact_pack.js"));
|
|
83
|
-
const lazyStandardAssetContract = createLazy(() => import("../../engine/standard_asset_contract.js"));
|
|
84
|
-
const lazyDecisionWorkshop = createLazy(() => import("../../engine/decision_workshop.js"));
|
|
85
|
-
const lazyNavigation = createLazy(() => import("../../engine/next_action_planner.js"));
|
|
86
|
-
const lazyOodSolid = createLazy(() => import("../../engine/ood_solid_contract.js"));
|
|
87
|
-
const lazyBackendImplementation = createLazy(() => import("../../engine/backend_implementation_contract.js"));
|
|
88
|
-
const lazyCodeObservability = createLazy(() => import("../../engine/code_maintainability_observability_contract.js"));
|
|
89
|
-
const lazyTraceability = createLazy(() => import("../../engine/traceability.js"));
|
|
90
|
-
const ARCHITECTURE_CONTEXT_PATTERN = /架构|architecture|系统设计|技术方案|现有系统|差距分析|gap.?analysis/i;
|
|
91
|
-
function stripPathLikeReferences(text) {
|
|
92
|
-
return text.replace(/(^|[\s"'((])(?:~\/|\.{1,2}\/|\/|[A-Za-z0-9_.-]+\/)[^\s"',。;,;::))]+/g, "$1 ");
|
|
93
|
-
}
|
|
94
|
-
function hasArchitectureIntentSignal(intent) {
|
|
95
|
-
return ARCHITECTURE_CONTEXT_PATTERN.test(stripPathLikeReferences(intent ?? ""));
|
|
96
|
-
}
|
|
97
|
-
function decodeIndexedJsonString(value) {
|
|
98
|
-
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
99
|
-
return value;
|
|
100
|
-
const entries = Object.entries(value);
|
|
101
|
-
if (entries.length === 0)
|
|
102
|
-
return value;
|
|
103
|
-
const isIndexedChars = entries.every(([key, entryValue]) => /^\d+$/.test(key) && typeof entryValue === "string" && entryValue.length <= 1);
|
|
104
|
-
if (!isIndexedChars)
|
|
105
|
-
return value;
|
|
106
|
-
const serialized = entries
|
|
107
|
-
.sort(([a], [b]) => Number(a) - Number(b))
|
|
108
|
-
.map(([, entryValue]) => entryValue)
|
|
109
|
-
.join("")
|
|
110
|
-
.trim();
|
|
111
|
-
if (!serialized.startsWith("{"))
|
|
112
|
-
return value;
|
|
113
|
-
try {
|
|
114
|
-
return JSON.parse(serialized);
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
return value;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
1
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
2
|
+
* Backward-compatible re-export shim for tools.
|
|
3
|
+
*
|
|
4
|
+
* The MCP Server tools were extracted from this location to `src/server/tools/`.
|
|
5
|
+
* This shim preserves backward compatibility for any external consumers
|
|
6
|
+
* that imported from the old path.
|
|
124
7
|
*/
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return {};
|
|
128
|
-
// 字符串 → 尝试 JSON 解析(可能被 MCP 客户端序列化为 JSON 字符串)
|
|
129
|
-
let parsed;
|
|
130
|
-
if (typeof value === "string") {
|
|
131
|
-
try {
|
|
132
|
-
parsed = JSON.parse(value);
|
|
133
|
-
}
|
|
134
|
-
catch (parseErr) {
|
|
135
|
-
return { error: `${fieldName} 的 JSON 解析失败: ${parseErr.message}。请检查 JSON 格式是否正确` };
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
parsed = value;
|
|
140
|
-
}
|
|
141
|
-
const candidate = decodeIndexedJsonString(parsed);
|
|
142
|
-
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
|
|
143
|
-
return { error: `${fieldName} 必须是 JSON 对象(当前类型: ${Array.isArray(candidate) ? "array" : typeof candidate})。期望格式请参考 expected_schema` };
|
|
144
|
-
}
|
|
145
|
-
return { value: candidate };
|
|
146
|
-
}
|
|
147
|
-
/** 需要通过 parseContractObject 校验的契约字段列表 */
|
|
148
|
-
const CONTRACT_OBJECT_FIELDS = [
|
|
149
|
-
"architecture_decision_workshop", "decision_workshop",
|
|
150
|
-
"technology_decision_contract", "technology_decision_record",
|
|
151
|
-
"detail_discipline_contract", "provided_details",
|
|
152
|
-
"first_principles_frame", "brainstorm_session",
|
|
153
|
-
"design_artifact_pack", "ood_solid_summary",
|
|
154
|
-
"backend_implementation_work_package", "code_observability_work_package",
|
|
155
|
-
];
|
|
156
|
-
/** 需要规范化的字段 */
|
|
157
|
-
const NORMALIZED_FIELDS = {
|
|
158
|
-
decision_workshop: "decision_workshop",
|
|
159
|
-
};
|
|
160
|
-
// ── Zod Schema 定义 ──
|
|
161
|
-
const ClassifySchema = {
|
|
162
|
-
intent: z.string().describe("开发者意图描述"),
|
|
163
|
-
project_path: z.string().optional().describe("项目路径(默认当前目录)"),
|
|
164
|
-
};
|
|
165
|
-
const ExpandSchema = {
|
|
166
|
-
task_id: z.string().describe("sf_classify 返回的任务 ID"),
|
|
167
|
-
clarification_answers: z.array(z.string()).optional().describe("对澄清问题的回答"),
|
|
168
|
-
input_material_confirmations: z.array(z.string()).optional().describe("已确认安全的输入材料路径列表"),
|
|
169
|
-
architecture_decision_workshop: z.record(z.unknown()).optional().describe("架构设计前六域决策记录。示例 {domains:[{domain:'backend',options:[{id:'opt-a',title:'...'}],recommended_option_id:'opt-a',user_confirmation_ref:'confirm:...'}],status:'confirmed'}"),
|
|
170
|
-
decision_workshop: z.record(z.unknown()).optional().describe("通用决策研讨合同。示例 {activated_packs:['delivery_validation'],domains:[{domain:'delivery_validation',options:[{id:'opt-a',title:'...'}],recommended_option_id:'opt-a',user_confirmation_ref:'confirm:...'}],status:'confirmed'}"),
|
|
171
|
-
technology_decision_contract: z.record(z.unknown()).optional().describe("技术决策主权契约。示例 {decision_id:'TECH-001',decision_scope:'architecture',options:[{option_id:'opt-a',title:'A',description:'...'}],recommended_option:'opt-a',rejected_options:[{option:'opt-b',reason:'...'}],evidence:[{claim:'...',supporting_facts:['...']}],falsification:['...'],failure_conditions:['...'],validation_plan:['...'],rollback_or_exit_plan:['...'],human_gate_required:true,human_gate_evidence:'confirm:...',executable_without_human:false}"),
|
|
172
|
-
technology_decision_record: z.record(z.unknown()).optional().describe("技术决策执行记录。示例 {decision_id:'TECH-001',selected_option:'opt-a',status:'approved',approved_by:'user',evidence_refs:['confirm:...']}"),
|
|
173
|
-
detail_discipline_contract: z.record(z.unknown()).optional().describe("细节纪律契约。示例 {contract_id:'detail-001',required_dimensions:['boundary','failure_path','rollback'],blocking_dimensions:['boundary'],status:'ready'}"),
|
|
174
|
-
provided_details: z.record(z.unknown()).optional().describe("细节纪律已提供证据。示例 {boundary:['只检查 readiness,不改代码'],failure_path:['unknown 时标记证据不足'],rollback:['无写入,无需回滚']}"),
|
|
175
|
-
first_principles_frame: z.record(z.unknown()).optional().describe("高影响任务第一性原理框架。示例 {fundamental_need:'...',known_facts:['...'],assumptions:['...'],candidate_solutions:[{solution_id:'s1',description:'...',complexity:'low'}],simplest_viable_solution:'s1',chosen_solution:'s1',falsification_questions:['...'],why_not_legacy_path:'...'}"),
|
|
176
|
-
brainstorm_session: z.record(z.unknown()).optional().describe("不确定项/方案选择会话。示例 {trigger:'uncertainty',options:[{option_id:'opt-a',title:'...',description:'...',pros:['...'],cons:['...']}],recommended_option_id:'opt-a',rejected_option_ids:['opt-b'],failure_conditions:['...'],brainstorm_status:'options_ready'}"),
|
|
177
|
-
design_artifact_pack: z.record(z.unknown()).optional().describe("设计产物包路径映射或复验状态。示例 {status:'implementation_ready',paths:{architecture_document:'docs/architecture/01-架构设计文档.md'},verification_refs:['verification:...']}"),
|
|
178
|
-
ood_solid_summary: z.record(z.unknown()).optional().describe("复杂编码任务 OOD/SOLID 摘要。示例 {status:'confirmed',responsibilities:['...'],interfaces:['...'],risks:['...'],evidence_refs:['...']}"),
|
|
179
|
-
backend_implementation_work_package: z.record(z.unknown()).optional().describe("后端接口实现工程工作包。示例 {status:'confirmed',api_boundary:['...'],transaction_boundary:['...'],error_contract:['...'],evidence_refs:['...']}"),
|
|
180
|
-
code_observability_work_package: z.record(z.unknown()).optional().describe("代码可维护性与可观测性工作包。示例 {status:'confirmed',logging_plan:['...'],comment_plan:['...'],sensitive_logging_policy:'redact',evidence_refs:['...']}"),
|
|
181
|
-
};
|
|
182
|
-
const VerifySchema = {
|
|
183
|
-
task_id: z.string().describe("任务 ID"),
|
|
184
|
-
changed_files: z.array(z.string()).describe("本次修改的文件列表"),
|
|
185
|
-
};
|
|
186
|
-
const LearnSchema = {
|
|
187
|
-
task_id: z.string().describe("任务 ID"),
|
|
188
|
-
result: z.enum(["success", "failure"]).describe("执行结果"),
|
|
189
|
-
failure_type: z.enum(["deterministic", "fixable", "scope_insufficient"]).optional().describe("失败类型"),
|
|
190
|
-
verify_output: z.object({
|
|
191
|
-
build_passed: z.boolean(),
|
|
192
|
-
tests_passed: z.boolean(),
|
|
193
|
-
acceptance_results: z.record(z.string(), z.boolean()).optional(),
|
|
194
|
-
}).optional().describe("验证输出"),
|
|
195
|
-
confirm: z.boolean().optional().describe("确认执行学习(写入状态)"),
|
|
196
|
-
authorized: z.boolean().optional().describe("confirm 的兼容别名"),
|
|
197
|
-
};
|
|
198
|
-
const StatusSchema = {
|
|
199
|
-
task_id: z.string().optional().describe("任务 ID(不传则查当前任务)"),
|
|
200
|
-
action: z.enum(["current", "recent", "resume", "cancel", "archive_stale", "retry_expand"]).optional().describe("操作类型"),
|
|
201
|
-
confirm: z.boolean().optional().describe("确认执行会写入状态的操作,例如 cancel/archive_stale/job_cancel"),
|
|
202
|
-
authorized: z.boolean().optional().describe("confirm 的兼容别名"),
|
|
203
|
-
job_id: z.string().optional().describe("Job ID(用于 job_status / job_resume / job_cancel)"),
|
|
204
|
-
job_action: z.enum(["job_status", "job_resume", "job_cancel"]).optional().describe("Job 操作: 查询状态、从 checkpoint 恢复、取消 job(advisory)"),
|
|
205
|
-
};
|
|
206
|
-
const PlanSchema = {
|
|
207
|
-
task_id: z.string().describe("sf_classify 返回的任务 ID"),
|
|
208
|
-
};
|
|
209
|
-
const AnalyzeSchema = {
|
|
210
|
-
task_id: z.string().describe("sf_expand 返回的任务 ID(需要先执行 expand)"),
|
|
211
|
-
};
|
|
212
|
-
const ReviewSchema = {
|
|
213
|
-
task_id: z.string().describe("任务 ID"),
|
|
214
|
-
changed_files: z.array(z.string()).describe("本次修改的文件列表"),
|
|
215
|
-
file_contents: z.record(z.string(), z.string()).optional().describe("变更文件的当前内容(key=文件路径,value=文件内容),不传则自动读取"),
|
|
216
|
-
};
|
|
217
|
-
const ScaffoldSchema = {
|
|
218
|
-
task_id: z.string().describe("sf_classify 返回的任务 ID(task_type 应为 scaffold)"),
|
|
219
|
-
};
|
|
220
|
-
const RecordVerificationExecutionSchema = {
|
|
221
|
-
task_id: z.string().describe("任务 ID"),
|
|
222
|
-
plan_id: z.string().describe("关联的 VerificationPlan ID"),
|
|
223
|
-
execution_records: z.array(z.object({
|
|
224
|
-
command: z.string().describe("执行的验证命令"),
|
|
225
|
-
exit_code: z.number().describe("命令退出码,0 表示通过"),
|
|
226
|
-
stdout_hash: z.string().describe("stdout 的 SHA256 hash"),
|
|
227
|
-
stderr_hash: z.string().describe("stderr 的 SHA256 hash"),
|
|
228
|
-
started_at: z.string().describe("命令开始时间 ISO 8601"),
|
|
229
|
-
finished_at: z.string().describe("命令结束时间 ISO 8601"),
|
|
230
|
-
evidence_id: z.string().describe("执行证据 ID"),
|
|
231
|
-
})).describe("真实执行记录列表"),
|
|
232
|
-
};
|
|
233
|
-
const AcceptSchema = {
|
|
234
|
-
task_id: z.string().describe("任务 ID"),
|
|
235
|
-
confirm: z.boolean().describe("用户显式确认验收结果,必须为 true"),
|
|
236
|
-
confirmed_by: z.string().describe("执行确认的用户或审批者标识"),
|
|
237
|
-
confirmation_ref: z.string().describe("可审计的用户确认引用"),
|
|
238
|
-
acceptance_notes: z.string().describe("验收备注或不适用理由"),
|
|
239
|
-
run_mode: z.enum(["manual_review", "not_applicable"]).describe("验收模式"),
|
|
240
|
-
final_access: z.object({
|
|
241
|
-
frontend_urls: z.array(z.string()),
|
|
242
|
-
backend_urls: z.array(z.string()),
|
|
243
|
-
docs_or_swagger_urls: z.array(z.string()),
|
|
244
|
-
start_commands: z.array(z.string()),
|
|
245
|
-
stop_commands: z.array(z.string()),
|
|
246
|
-
running_status: z.string(),
|
|
247
|
-
manual_review_steps_zh: z.array(z.string()),
|
|
248
|
-
known_limits_zh: z.array(z.string()),
|
|
249
|
-
}).optional().describe("manual_review 模式下的真实本地访问证据"),
|
|
250
|
-
};
|
|
251
|
-
const DeliverSchema = {
|
|
252
|
-
task_id: z.string().describe("任务 ID"),
|
|
253
|
-
changed_files: z.array(z.string()).optional().describe("变更文件列表(不传则使用任务记录中的文件)"),
|
|
254
|
-
skip_push: z.boolean().optional().describe("跳过推送"),
|
|
255
|
-
skip_pr: z.boolean().optional().describe("跳过 PR 创建"),
|
|
256
|
-
confirm: z.boolean().optional().describe("确认执行交付(破坏性操作)"),
|
|
257
|
-
authorized: z.boolean().optional().describe("confirm 的兼容别名"),
|
|
258
|
-
};
|
|
259
|
-
const CoordCheckSchema = {
|
|
260
|
-
task_id: z.string().optional().describe("任务 ID(用于获取变更文件列表)"),
|
|
261
|
-
branch: z.string().optional().describe("指定分支(不传则使用当前分支)"),
|
|
262
|
-
};
|
|
263
|
-
const TeamStatusSchema = {
|
|
264
|
-
since: z.string().optional().describe("起始日期(ISO 格式,默认 7 天前)"),
|
|
265
|
-
include_knowledge: z.boolean().optional().describe("包含知识库更新信息"),
|
|
266
|
-
};
|
|
267
|
-
const ContractCheckSchema = {
|
|
268
|
-
task_id: z.string().describe("任务 ID"),
|
|
269
|
-
changed_files: z.array(z.string()).optional().describe("变更文件列表(不传则从任务记录获取)"),
|
|
270
|
-
};
|
|
271
|
-
const OnboardSchema = {
|
|
272
|
-
step: z.enum(["project_overview", "code_tour", "knowledge_review", "first_task"]).optional().describe("当前引导步骤"),
|
|
273
|
-
reset: z.boolean().optional().describe("重置引导会话"),
|
|
274
|
-
};
|
|
275
|
-
const FeasibilityCheckSchema = {
|
|
276
|
-
task_id: z.string().describe("任务 ID(需要已完成 classify)"),
|
|
277
|
-
};
|
|
278
|
-
const DebugSchema = {
|
|
279
|
-
error_output: z.string().describe("错误输出文本"),
|
|
280
|
-
task_id: z.string().optional().describe("关联任务 ID"),
|
|
281
|
-
};
|
|
282
|
-
const ObservabilitySchema = {
|
|
283
|
-
period_days: z.number().optional().describe("报告周期天数(默认 30)"),
|
|
284
|
-
};
|
|
285
|
-
const MigrationCheckSchema = {
|
|
286
|
-
content: z.string().describe("迁移文件内容(SQL/DDL)"),
|
|
287
|
-
filename: z.string().describe("文件名(如 V001__create_users.sql)"),
|
|
288
|
-
};
|
|
289
|
-
const TestGuideSchema = {
|
|
290
|
-
changed_files: z.array(z.string()).describe("变更文件列表"),
|
|
291
|
-
};
|
|
292
|
-
const TestQualitySchema = {
|
|
293
|
-
content: z.string().describe("测试文件内容"),
|
|
294
|
-
filename: z.string().describe("测试文件名"),
|
|
295
|
-
};
|
|
296
|
-
const DependencyScanSchema = {
|
|
297
|
-
content: z.string().describe("依赖声明文件内容(package.json / pom.xml / build.gradle)"),
|
|
298
|
-
filename: z.string().describe("文件名"),
|
|
299
|
-
};
|
|
300
|
-
const ExploreSchema = {
|
|
301
|
-
domain_query: z.string().describe("技术选型领域关键词(如:分布式锁、流式处理、复杂表单状态管理、缓存策略)"),
|
|
302
|
-
task_id: z.string().optional().describe("关联任务 ID(可选,用于关联项目上下文)"),
|
|
303
|
-
};
|
|
304
|
-
// ── 工具注册 ──
|
|
305
|
-
/**
|
|
306
|
-
* 注册所有 SoloForge MCP 工具。
|
|
307
|
-
* @description 核心注册函数,将全部 MCP 工具注册到指定的 McpServer 实例。
|
|
308
|
-
* 包含:sf_classify、sf_expand、sf_verify、sf_learn、sf_status、
|
|
309
|
-
* sf_plan、sf_plan_advance、sf_analyze、sf_review、sf_scaffold、
|
|
310
|
-
* sf_deliver、sf_coord_check、sf_team_status、sf_contract_check、
|
|
311
|
-
* sf_onboard、sf_feasibility_check、sf_debug、sf_observability、
|
|
312
|
-
* sf_migration_check、sf_test_guide、sf_test_quality、sf_dependency_scan、
|
|
313
|
-
* sf_debt_report、sf_explore、sf_knowledge_audit/add/update、sf_resume_workspace。
|
|
314
|
-
* @param server - MCP 服务器实例
|
|
315
|
-
* @param deps - SoloForge 核心依赖项
|
|
316
|
-
*/
|
|
317
|
-
/**
|
|
318
|
-
* Plan Gate 写工具拦截 — 从 registerSafeTool 中间件提取的纯函数。
|
|
319
|
-
* gate 和外部测试可直接调用,无需 MCP server mock。
|
|
320
|
-
*/
|
|
321
|
-
export function checkWriteToolPlanGate(params) {
|
|
322
|
-
if (!hasWriteSideEffect(params.sideEffects))
|
|
323
|
-
return { allowed: true };
|
|
324
|
-
if (!params.ctx || !params.ctx.plan_proposal_gate) {
|
|
325
|
-
return {
|
|
326
|
-
allowed: false,
|
|
327
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.planGate,
|
|
328
|
-
violation_type: "guard_blocked",
|
|
329
|
-
reason: `工具 ${params.toolName} 执行前缺少 Plan Proposal Gate`,
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
return { allowed: true };
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* 施工指令契约门 — 写操作前检查施工指令完整性。
|
|
336
|
-
* 通过引擎模块函数真实消费。
|
|
337
|
-
* 调用链 1: registerInstructionIssueCandidate(无契约时创建候选 draft)
|
|
338
|
-
* 调用链 2: enforceInstructionBeforeImplementation → checkInstructionCompleteness → validateInstructionContract
|
|
339
|
-
*/
|
|
340
|
-
export async function checkInstructionContractGate(params) {
|
|
341
|
-
if (!hasWriteSideEffect(params.sideEffects))
|
|
342
|
-
return { allowed: true };
|
|
343
|
-
if (!params.ctx)
|
|
344
|
-
return { allowed: true };
|
|
345
|
-
let instruction = params.ctx.instruction_contract;
|
|
346
|
-
const instrModule = await lazyInstructionContract();
|
|
347
|
-
// 无契约时消费 registerInstructionIssueCandidate — 创建 draft 候选并保存
|
|
348
|
-
if (!instruction && params.task_id) {
|
|
349
|
-
instruction = instrModule.registerInstructionIssueCandidate({
|
|
350
|
-
task_id: params.task_id,
|
|
351
|
-
description: params.toolName,
|
|
352
|
-
source: "auto_detected",
|
|
353
|
-
suggested_fields: {},
|
|
354
|
-
});
|
|
355
|
-
params.ctx.instruction_contract = instruction;
|
|
356
|
-
if (params.taskContextMgr) {
|
|
357
|
-
await params.taskContextMgr.save(params.ctx);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
if (!instruction)
|
|
361
|
-
return { allowed: true };
|
|
362
|
-
// 消费 enforceInstructionBeforeImplementation(链式消费 checkInstructionCompleteness + validateInstructionContract)
|
|
363
|
-
const result = await instrModule.enforceInstructionBeforeImplementation(instruction, params.toolName);
|
|
364
|
-
// Draft 状态不阻断 — 仅在 confirmed/executing/blocked 状态时强制
|
|
365
|
-
if (instruction?.status === "draft") {
|
|
366
|
-
return { allowed: true, findings: result.allowed ? [] : [result.reason_zh] };
|
|
367
|
-
}
|
|
368
|
-
if (!result.allowed) {
|
|
369
|
-
return {
|
|
370
|
-
allowed: false,
|
|
371
|
-
diagnostic_code: result.diagnostic_code,
|
|
372
|
-
violation_type: "guard_blocked",
|
|
373
|
-
reason: result.reason_zh,
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
return { allowed: true };
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* 设计产物编码门 — 依赖设计包的任务,在真实复验完成前不得写入业务实现。
|
|
380
|
-
* 仅阻断文件/配置/外部交付写入;任务状态、设计文档复验和讨论本身仍可推进。
|
|
381
|
-
*/
|
|
382
|
-
export function checkDesignArtifactWriteGate(params) {
|
|
383
|
-
const implementationWrite = params.sideEffects.some((effect) => ["file_write", "config_write", "external_write", "git_commit", "git_push", "pr_create"].includes(effect));
|
|
384
|
-
if (!implementationWrite || !params.ctx?.design_artifact_pack)
|
|
385
|
-
return { allowed: true };
|
|
386
|
-
if (params.ctx.design_artifact_pack.status === "implementation_ready")
|
|
387
|
-
return { allowed: true };
|
|
388
|
-
return {
|
|
389
|
-
allowed: false,
|
|
390
|
-
diagnostic_code: "SF-DESIGN-PACK-NOT-READY",
|
|
391
|
-
reason: `工具 ${params.toolName} 依赖的设计产物包状态为 ${params.ctx.design_artifact_pack.status},未完成真实复验,不得写入实现或交付`,
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* 架构设计门 — 架构设计类任务膨胀前执行 reviewArchitectureDesign。
|
|
396
|
-
* Architecture Design Contract enforcement。
|
|
397
|
-
*/
|
|
398
|
-
export async function checkArchitectureDesignGate(params) {
|
|
399
|
-
const route = params.route;
|
|
400
|
-
if (route !== "artifact_generation" && route !== "analysis")
|
|
401
|
-
return { allowed: true };
|
|
402
|
-
if (!params.ctx)
|
|
403
|
-
return { allowed: true };
|
|
404
|
-
const expansion = params.ctx.expansion;
|
|
405
|
-
if (!expansion)
|
|
406
|
-
return { allowed: true };
|
|
407
|
-
const archModule = await lazyArchitectureDesign();
|
|
408
|
-
const contract = expansion.architecture_contract;
|
|
409
|
-
if (contract) {
|
|
410
|
-
const result = archModule.reviewArchitectureDesign(contract);
|
|
411
|
-
if (!result.passed) {
|
|
412
|
-
return {
|
|
413
|
-
allowed: false,
|
|
414
|
-
reason_zh: "架构设计审查未通过",
|
|
415
|
-
findings: result.review.missing_sections ?? ["架构设计审查失败"],
|
|
416
|
-
};
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
return { allowed: true };
|
|
420
|
-
}
|
|
421
|
-
/**
|
|
422
|
-
* 架构决策研讨门 — 正式架构设计前六域决策必须闭合。
|
|
423
|
-
* 与是否存在施工指令契约无关,架构设计路由必经此门。
|
|
424
|
-
*/
|
|
425
|
-
export async function checkArchitectureDecisionWorkshopGate(params) {
|
|
426
|
-
const workshopModule = await lazyArchitectureWorkshop();
|
|
427
|
-
if (!workshopModule.requiresArchitectureDecisionWorkshop(params.workflowIntent, params.ctx.intent)) {
|
|
428
|
-
return { allowed: true };
|
|
429
|
-
}
|
|
430
|
-
const existing = params.ctx.architecture_decision_workshop;
|
|
431
|
-
const contract = existing ?? workshopModule.createArchitectureDecisionWorkshop(params.ctx.task_id, params.projectContext ?? "new_system");
|
|
432
|
-
if (params.projectContext === "existing_system" && contract.project_context !== "existing_system") {
|
|
433
|
-
contract.project_context = "existing_system";
|
|
434
|
-
}
|
|
435
|
-
const evaluatedContract = workshopModule.applyArchitectureWorkshopGate(contract) ?? contract;
|
|
436
|
-
const gate = workshopModule.evaluateArchitectureDecisionWorkshop(evaluatedContract);
|
|
437
|
-
params.ctx.architecture_decision_workshop = evaluatedContract;
|
|
438
|
-
return {
|
|
439
|
-
allowed: gate.allowed,
|
|
440
|
-
findings: gate.blocking_findings,
|
|
441
|
-
next_domain: gate.next_domain,
|
|
442
|
-
contract: evaluatedContract,
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* 现有系统分析门 — 现有项目编码前必须先做分析。
|
|
447
|
-
* Existing System Analysis Contract enforcement。
|
|
448
|
-
*/
|
|
449
|
-
export async function checkExistingSystemAnalysisGate(params) {
|
|
450
|
-
const archModule = await lazyExistingSystemAnalysis();
|
|
451
|
-
const context = archModule.detectProjectContext(params.hasExistingCode, params.hasPackageJson, params.hasSrcDir);
|
|
452
|
-
const gateResult = archModule.checkAnalysisGate(context, params.hasAnalysis, params.hasGapAnalysis);
|
|
453
|
-
if (!gateResult.allowed) {
|
|
454
|
-
return {
|
|
455
|
-
allowed: false,
|
|
456
|
-
reason_zh: gateResult.reason,
|
|
457
|
-
missing_analysis: gateResult.missing_analysis,
|
|
458
|
-
};
|
|
459
|
-
}
|
|
460
|
-
return { allowed: true };
|
|
461
|
-
}
|
|
462
|
-
/**
|
|
463
|
-
* 编码就绪门 — 编码前必须有测试计划 + 验收标准。
|
|
464
|
-
* Coding Readiness / Test-First enforcement。
|
|
465
|
-
*/
|
|
466
|
-
export async function checkCodingReadinessGate(params) {
|
|
467
|
-
if (!params.ctx)
|
|
468
|
-
return { allowed: true };
|
|
469
|
-
const readinessModule = await lazyCodingReadiness();
|
|
470
|
-
const contract = params.ctx.coding_readiness_contract;
|
|
471
|
-
if (!contract) {
|
|
472
|
-
return {
|
|
473
|
-
allowed: true,
|
|
474
|
-
reason_zh: "无编码就绪契约(非编码任务),放行",
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
const result = readinessModule.evaluateCodingReadiness(contract, false, false, false);
|
|
478
|
-
if (!result.allowed) {
|
|
479
|
-
return {
|
|
480
|
-
allowed: false,
|
|
481
|
-
reason_zh: result.reason,
|
|
482
|
-
missing_preconditions: result.missing_preconditions,
|
|
483
|
-
};
|
|
484
|
-
}
|
|
485
|
-
return { allowed: true };
|
|
486
|
-
}
|
|
487
|
-
/**
|
|
488
|
-
* 本地验收门 — 前端/全栈交付前必须有本地访问证据。
|
|
489
|
-
* Local Docker / Browser Acceptance enforcement。
|
|
490
|
-
*/
|
|
491
|
-
export async function checkLocalAcceptanceGate(params) {
|
|
492
|
-
const acceptanceModule = await lazyLocalAcceptance();
|
|
493
|
-
const requirement = acceptanceModule.requiresLocalAcceptance(params.hasFrontend, params.hasBackend, params.hasDockerCompose, params.hasDockerfile);
|
|
494
|
-
if (!requirement.required)
|
|
495
|
-
return { allowed: true };
|
|
496
|
-
if (!params.ctx) {
|
|
497
|
-
return {
|
|
498
|
-
allowed: false,
|
|
499
|
-
reason_zh: "需要本地验收但无任务上下文",
|
|
500
|
-
required_but_missing: ["local_acceptance_evidence"],
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
const evidence = params.ctx.local_acceptance_evidence;
|
|
504
|
-
if (!evidence) {
|
|
505
|
-
return {
|
|
506
|
-
allowed: false,
|
|
507
|
-
reason_zh: `项目需要本地验收(模式: ${requirement.run_mode})但缺少验收证据`,
|
|
508
|
-
required_but_missing: ["local_acceptance_evidence", "final_access_url"],
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
if (evidence.run_mode === "not_applicable") {
|
|
512
|
-
return {
|
|
513
|
-
allowed: false,
|
|
514
|
-
reason_zh: "该项目需要本地验收,不得以 not_applicable 代替真实访问证据",
|
|
515
|
-
required_but_missing: ["manual_review", "final_access_url"],
|
|
516
|
-
};
|
|
517
|
-
}
|
|
518
|
-
const finalAccessResult = acceptanceModule.validateFinalAccess(evidence.final_access, requirement.run_mode);
|
|
519
|
-
if (!finalAccessResult.passed) {
|
|
520
|
-
return {
|
|
521
|
-
allowed: false,
|
|
522
|
-
reason_zh: `本地验收证据不完整: ${finalAccessResult.blocking_reasons.join("; ")}`,
|
|
523
|
-
required_but_missing: ["validated_final_access"],
|
|
524
|
-
};
|
|
525
|
-
}
|
|
526
|
-
return { allowed: true };
|
|
527
|
-
}
|
|
528
|
-
// ── S4 触发判定函数 ──
|
|
529
|
-
// 不依赖 hasInstructionContract,基于 route + intent 风险信号判断是否需要 enforcement。
|
|
530
|
-
// 关键设计: 不是所有 code_change 都触发,只有 intent 含高风险/复杂信号时才触发。
|
|
531
|
-
// 低风险场景(skip_chat / direct_answer / 无风险信号的 code_change)不触发。
|
|
532
|
-
const HIGH_IMPACT_KEYWORDS = /架构|技术选型|数据库|框架|多端|跨模块|高影响|高风险|migration|技术路线|选型|rework/i;
|
|
533
|
-
const UNCERTAINTY_KEYWORDS = /不确定|方案选择|多选项|权衡|脑暴|brainstorm|多方案|选型|比较/i;
|
|
534
|
-
const DETAIL_INTENSIVE_KEYWORDS = /多步骤|复杂|跨模块|高风险|多端|分布式|微服务/i;
|
|
535
|
-
const LOW_RISK_ROUTES = new Set(["skip_chat", "direct_answer", "operation", "planning", "review", "source_extraction", "acceptance"]);
|
|
536
|
-
/** 技术选型/架构/数据库/框架/高影响决策 → 需 decision sovereignty gate */
|
|
537
|
-
export function requiresDecisionSovereignty(ctx, route) {
|
|
538
|
-
if (!ctx)
|
|
539
|
-
return false;
|
|
540
|
-
const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
|
|
541
|
-
if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
|
|
542
|
-
return false;
|
|
543
|
-
// 所有路由都要求 intent 含高影响信号
|
|
544
|
-
const hasHighImpact = ctx.intent && HIGH_IMPACT_KEYWORDS.test(ctx.intent);
|
|
545
|
-
if (!hasHighImpact) {
|
|
546
|
-
// instruction_contract 的 risk/high_impact 也可作为信号
|
|
547
|
-
const ic = ctx.instruction_contract;
|
|
548
|
-
if (!ic || (!ic.risk && !ic.high_impact))
|
|
549
|
-
return false;
|
|
550
|
-
if (ic.risk !== "high" && !ic.high_impact)
|
|
551
|
-
return false;
|
|
552
|
-
}
|
|
553
|
-
// artifact_generation / analysis / code_change + 高影响 intent → 触发
|
|
554
|
-
return true;
|
|
555
|
-
}
|
|
556
|
-
/** 多步骤/不确定/高风险任务 → 需 detail discipline gate */
|
|
557
|
-
export function requiresDetailDiscipline(ctx, route) {
|
|
558
|
-
if (!ctx)
|
|
559
|
-
return false;
|
|
560
|
-
const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
|
|
561
|
-
if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
|
|
562
|
-
return false;
|
|
563
|
-
// 复杂 intent 触发
|
|
564
|
-
const hasComplexSignals = ctx.intent && DETAIL_INTENSIVE_KEYWORDS.test(ctx.intent);
|
|
565
|
-
if (!hasComplexSignals) {
|
|
566
|
-
const ic = ctx.instruction_contract;
|
|
567
|
-
if (!ic || (!ic.risk && !ic.high_impact))
|
|
568
|
-
return false;
|
|
569
|
-
if (ic.risk !== "high" && !ic.high_impact)
|
|
570
|
-
return false;
|
|
571
|
-
}
|
|
572
|
-
return true;
|
|
573
|
-
}
|
|
574
|
-
/** 高影响任务/架构设计/复杂编码/跨模块变更 → 需 first principles gate */
|
|
575
|
-
export function requiresFirstPrinciples(ctx, route) {
|
|
576
|
-
if (!ctx)
|
|
577
|
-
return false;
|
|
578
|
-
const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
|
|
579
|
-
if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
|
|
580
|
-
return false;
|
|
581
|
-
// 所有路由都要求 intent 含高影响信号
|
|
582
|
-
const hasHighImpact = ctx.intent && HIGH_IMPACT_KEYWORDS.test(ctx.intent);
|
|
583
|
-
if (!hasHighImpact) {
|
|
584
|
-
const ic = ctx.instruction_contract;
|
|
585
|
-
if (!ic || (!ic.risk && !ic.high_impact))
|
|
586
|
-
return false;
|
|
587
|
-
if (ic.risk !== "high" && !ic.high_impact)
|
|
588
|
-
return false;
|
|
589
|
-
}
|
|
590
|
-
return true;
|
|
591
|
-
}
|
|
592
|
-
/** 不确定项/方案选择/多选项 → 需 brainstorm gate */
|
|
593
|
-
export function requiresBrainstorm(ctx, route) {
|
|
594
|
-
if (!ctx)
|
|
595
|
-
return false;
|
|
596
|
-
const routeVal = route ?? ctx.classification?.route_decision?.route ?? ctx.route_decision?.route;
|
|
597
|
-
if (!routeVal || LOW_RISK_ROUTES.has(routeVal))
|
|
598
|
-
return false;
|
|
599
|
-
// 仅当 intent 含不确定性信号时才触发
|
|
600
|
-
const hasUncertainty = ctx.intent && UNCERTAINTY_KEYWORDS.test(ctx.intent);
|
|
601
|
-
if (!hasUncertainty)
|
|
602
|
-
return false;
|
|
603
|
-
if (routeVal === "analysis" || routeVal === "artifact_generation")
|
|
604
|
-
return true;
|
|
605
|
-
if (routeVal === "code_change")
|
|
606
|
-
return true;
|
|
607
|
-
const ic = ctx.instruction_contract;
|
|
608
|
-
if (ic && ic.uncertainty)
|
|
609
|
-
return true;
|
|
610
|
-
return false;
|
|
611
|
-
}
|
|
612
|
-
/**
|
|
613
|
-
* 技术选型决策门 — 高影响技术决策需用户确认。
|
|
614
|
-
* Decision Sovereignty enforcement。
|
|
615
|
-
* 不依赖 hasInstructionContract — 触发由 requiresDecisionSovereignty 判定。
|
|
616
|
-
*/
|
|
617
|
-
export async function checkDecisionSovereigntyGate(params) {
|
|
618
|
-
if (!params.ctx)
|
|
619
|
-
return { allowed: true, not_applicable_with_reason: "无任务上下文" };
|
|
620
|
-
const triggered = requiresDecisionSovereignty(params.ctx, params.route);
|
|
621
|
-
if (!triggered) {
|
|
622
|
-
return { allowed: true, not_applicable_with_reason: "非高影响技术决策场景,跳过 decision sovereignty gate" };
|
|
623
|
-
}
|
|
624
|
-
const decisionContract = params.ctx.technology_decision_contract;
|
|
625
|
-
if (!decisionContract) {
|
|
626
|
-
return { allowed: false, reason_zh: "高影响技术决策场景缺 technology_decision_contract,无法执行决策主权校验" };
|
|
627
|
-
}
|
|
628
|
-
const decisionModule = await lazyTechnologyDecision();
|
|
629
|
-
const validation = decisionModule.validateTechnologyDecision(decisionContract);
|
|
630
|
-
if (!validation.valid) {
|
|
631
|
-
return { allowed: false, reason_zh: `技术选型决策校验失败: ${validation.violations.join("; ")}`, expected_schema: validation.expected_schema };
|
|
632
|
-
}
|
|
633
|
-
// 有决策记录时评估执行状态
|
|
634
|
-
const decisionRecord = params.ctx.technology_decision_record;
|
|
635
|
-
if (decisionRecord) {
|
|
636
|
-
const evaluation = decisionModule.evaluateDecisionExecution(decisionContract, decisionRecord);
|
|
637
|
-
if (evaluation.requires_human_gate && !decisionContract.human_gate_evidence) {
|
|
638
|
-
return { allowed: false, reason_zh: "高影响技术决策需用户确认(human gate),请提供确认证据", requires_human_gate: true };
|
|
639
|
-
}
|
|
640
|
-
if (!evaluation.allowed) {
|
|
641
|
-
return { allowed: false, reason_zh: evaluation.reason };
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
else {
|
|
645
|
-
// 无决策记录: 契约已验证通过,但需 human_gate_evidence 确认(如有高范围决策)
|
|
646
|
-
if (decisionContract.human_gate_required && !decisionContract.human_gate_evidence) {
|
|
647
|
-
return { allowed: false, reason_zh: "高影响技术决策需用户确认(human gate),请提供确认证据", requires_human_gate: true };
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
return { allowed: true };
|
|
651
|
-
}
|
|
652
|
-
/**
|
|
653
|
-
* 细节纪律门 — 复杂任务缺关键细节维度时阻断。
|
|
654
|
-
* Detail Discipline enforcement。
|
|
655
|
-
* 不依赖 hasInstructionContract — 触发由 requiresDetailDiscipline 判定。
|
|
656
|
-
*/
|
|
657
|
-
export async function checkDetailDisciplineGate(params) {
|
|
658
|
-
if (!params.ctx)
|
|
659
|
-
return { allowed: true, not_applicable_with_reason: "无任务上下文" };
|
|
660
|
-
const triggered = requiresDetailDiscipline(params.ctx, params.route);
|
|
661
|
-
if (!triggered) {
|
|
662
|
-
return { allowed: true, not_applicable_with_reason: "非复杂/多步骤任务场景,跳过 detail discipline gate" };
|
|
663
|
-
}
|
|
664
|
-
const detailContract = params.ctx.detail_discipline_contract;
|
|
665
|
-
if (!detailContract) {
|
|
666
|
-
return { allowed: false, reason_zh: "多步骤/复杂任务缺 detail_discipline_contract,无法执行细节纪律校验" };
|
|
667
|
-
}
|
|
668
|
-
const detailModule = await lazyDetailDiscipline();
|
|
669
|
-
const check = detailModule.performDetailCheck(detailContract, detailContract.contract_id ?? "unknown", "implementation", params.ctx.provided_details ?? {});
|
|
670
|
-
if (check.blocking) {
|
|
671
|
-
const riskItems = detailModule.generateRiskItems(check);
|
|
672
|
-
const blockingLabels = riskItems.filter(r => r.severity === "blocking").map(r => r.dimension ?? r.description);
|
|
673
|
-
return { allowed: false, reason_zh: `任务方案缺关键细节: ${blockingLabels.join("; ")}`, missing_details: blockingLabels };
|
|
674
|
-
}
|
|
675
|
-
return { allowed: true };
|
|
676
|
-
}
|
|
677
|
-
/**
|
|
678
|
-
* 第一性原理门 — 高影响任务需目标/约束/本质问题/权衡。
|
|
679
|
-
* First Principles enforcement。
|
|
680
|
-
* 不依赖 hasInstructionContract — 触发由 requiresFirstPrinciples 判定。
|
|
681
|
-
*/
|
|
682
|
-
export async function checkFirstPrinciplesGate(params) {
|
|
683
|
-
if (!params.ctx)
|
|
684
|
-
return { allowed: true, not_applicable_with_reason: "无任务上下文" };
|
|
685
|
-
const triggered = requiresFirstPrinciples(params.ctx, params.route);
|
|
686
|
-
if (!triggered) {
|
|
687
|
-
return { allowed: true, not_applicable_with_reason: "非高影响任务场景,跳过 first principles gate" };
|
|
688
|
-
}
|
|
689
|
-
const fpFrame = params.ctx.first_principles_frame;
|
|
690
|
-
if (!fpFrame) {
|
|
691
|
-
return { allowed: false, reason_zh: "高影响任务缺 first_principles_frame,无法执行第一性原理校验" };
|
|
692
|
-
}
|
|
693
|
-
const fpModule = await lazyFirstPrinciples();
|
|
694
|
-
const validation = fpModule.validateFirstPrinciplesForHighImpact(fpFrame);
|
|
695
|
-
if (!validation.passed) {
|
|
696
|
-
return { allowed: false, reason_zh: `高影响任务缺第一性原理推理: ${validation.violations.join("; ")}`, failures: validation.violations, expected_schema: validation.expected_schema };
|
|
697
|
-
}
|
|
698
|
-
return { allowed: true };
|
|
699
|
-
}
|
|
700
|
-
/**
|
|
701
|
-
* 脑暴/方案探索门 — 不确定项需多方案+推荐理由+用户确认。
|
|
702
|
-
* Brainstorm Contract enforcement。
|
|
703
|
-
* 不依赖 hasInstructionContract — 触发由 requiresBrainstorm 判定。
|
|
704
|
-
*/
|
|
705
|
-
export async function checkBrainstormGate(params) {
|
|
706
|
-
if (!params.ctx)
|
|
707
|
-
return { allowed: true, not_applicable_with_reason: "无任务上下文" };
|
|
708
|
-
const triggered = requiresBrainstorm(params.ctx, params.route);
|
|
709
|
-
if (!triggered) {
|
|
710
|
-
return { allowed: true, not_applicable_with_reason: "非不确定/方案选择场景,跳过 brainstorm gate" };
|
|
711
|
-
}
|
|
712
|
-
const brainstormSession = params.ctx.brainstorm_session;
|
|
713
|
-
if (!brainstormSession) {
|
|
714
|
-
return { allowed: false, reason_zh: "不确定项/方案选择缺 brainstorm_session,无法执行方案探索校验" };
|
|
715
|
-
}
|
|
716
|
-
const brainstormModule = await lazyBrainstormContract();
|
|
717
|
-
const validation = brainstormModule.validateBrainstormSession(brainstormSession);
|
|
718
|
-
if (!validation.valid) {
|
|
719
|
-
return { allowed: false, reason_zh: `方案探索不完整: ${validation.violations.join("; ")}`, violations: validation.violations, expected_schema: validation.expected_schema };
|
|
720
|
-
}
|
|
721
|
-
// 脑暴推荐永远不能自动执行 — 需 Decision Sovereignty human gate
|
|
722
|
-
const canAutoExec = brainstormModule.canBrainstormAutoExecute(brainstormSession);
|
|
723
|
-
if (canAutoExec) {
|
|
724
|
-
return { allowed: false, reason_zh: "脑暴推荐不能绕过用户确认,需通过 Decision Sovereignty human gate" };
|
|
725
|
-
}
|
|
726
|
-
return { allowed: true };
|
|
727
|
-
}
|
|
728
|
-
/**
|
|
729
|
-
*/
|
|
730
|
-
export async function assessCepAfterVerification(params) {
|
|
731
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
732
|
-
const result = cepModule.evaluateCoreExperiencePrinciple({
|
|
733
|
-
task_id: params.task_id,
|
|
734
|
-
workflow_id: "sf_verify",
|
|
735
|
-
has_mainline_hooks: true,
|
|
736
|
-
has_owner_contracts: true,
|
|
737
|
-
natural_language_entry: true,
|
|
738
|
-
requires_internal_contract_knowledge: false,
|
|
739
|
-
user_path_steps: 3,
|
|
740
|
-
has_failures: params.has_failures ?? false,
|
|
741
|
-
hard_fail_downgraded: params.hard_fail_downgraded ?? false,
|
|
742
|
-
forced_heavy_process: false,
|
|
743
|
-
has_sufficient_evidence: params.has_verification_evidence,
|
|
744
|
-
output_too_long_no_summary: false,
|
|
745
|
-
report_only_no_repair: false,
|
|
746
|
-
failed_but_marked_done: params.failed_but_marked_done ?? false,
|
|
747
|
-
auto_repair_overreach: false,
|
|
748
|
-
repair_reverified: false,
|
|
749
|
-
outputs_raw_noise: false,
|
|
750
|
-
});
|
|
751
|
-
return {
|
|
752
|
-
passed: result.passed,
|
|
753
|
-
violations: result.violations.map((v) => ({
|
|
754
|
-
principle: v.principle,
|
|
755
|
-
severity: v.severity,
|
|
756
|
-
reason_zh: v.reason_zh ?? "",
|
|
757
|
-
required_action: v.required_action,
|
|
758
|
-
})),
|
|
759
|
-
evaluated_principles: result.evaluated_principles,
|
|
760
|
-
};
|
|
761
|
-
}
|
|
762
|
-
/**
|
|
763
|
-
* CEP 集成: 交付前 false completion 检查 — 从 sf_deliver handler 提取的真实主链路函数。
|
|
764
|
-
* 返回 CEP 决策(blocked/repair_reverify/allowed),由 handler 和 gate 共用。
|
|
765
|
-
*/
|
|
766
|
-
export async function assessCepBeforeDelivery(params) {
|
|
767
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
768
|
-
const nfcResult = cepModule.evaluateNoFalseCompletion({
|
|
769
|
-
verification_passed: params.verification_passed,
|
|
770
|
-
build_passed: params.build_passed,
|
|
771
|
-
browser_acceptance_passed: params.browser_acceptance_passed,
|
|
772
|
-
guard_passed: params.guard_passed,
|
|
773
|
-
evidence_sufficient: params.evidence_sufficient,
|
|
774
|
-
current_status: params.current_status,
|
|
775
|
-
});
|
|
776
|
-
return {
|
|
777
|
-
decision: nfcResult.decision,
|
|
778
|
-
reason_zh: nfcResult.reason_zh ?? "",
|
|
779
|
-
passed: nfcResult.decision === "completed",
|
|
780
|
-
};
|
|
781
|
-
}
|
|
782
|
-
/**
|
|
783
|
-
* CEP 集成: 工作流解析后评估 — 检查机制是否接入真实主链路、用户路径是否过短。
|
|
784
|
-
*/
|
|
785
|
-
export async function assessCepAfterWorkflowResolve(params) {
|
|
786
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
787
|
-
const result = cepModule.evaluateCoreExperiencePrinciple({
|
|
788
|
-
task_id: params.task_id,
|
|
789
|
-
workflow_id: "workflow_resolve",
|
|
790
|
-
has_mainline_hooks: params.workflow_resolved,
|
|
791
|
-
has_owner_contracts: params.workflow_resolved,
|
|
792
|
-
natural_language_entry: true,
|
|
793
|
-
requires_internal_contract_knowledge: false,
|
|
794
|
-
user_path_steps: 3,
|
|
795
|
-
has_failures: !params.workflow_resolved,
|
|
796
|
-
hard_fail_downgraded: false,
|
|
797
|
-
forced_heavy_process: false,
|
|
798
|
-
has_sufficient_evidence: params.workflow_resolved,
|
|
799
|
-
output_too_long_no_summary: false,
|
|
800
|
-
report_only_no_repair: false,
|
|
801
|
-
failed_but_marked_done: false,
|
|
802
|
-
auto_repair_overreach: false,
|
|
803
|
-
repair_reverified: false,
|
|
804
|
-
outputs_raw_noise: false,
|
|
805
|
-
});
|
|
806
|
-
return {
|
|
807
|
-
passed: result.passed,
|
|
808
|
-
violations: result.violations.map((v) => ({
|
|
809
|
-
principle: v.principle,
|
|
810
|
-
severity: v.severity,
|
|
811
|
-
reason_zh: v.reason_zh ?? "",
|
|
812
|
-
})),
|
|
813
|
-
evaluated_principles: result.evaluated_principles,
|
|
814
|
-
};
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* CEP 集成: 护栏评估后检查 — 硬规则是否被降级、低风险是否过重。
|
|
818
|
-
*/
|
|
819
|
-
export async function assessCepAfterGuardEvaluation(params) {
|
|
820
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
821
|
-
const result = cepModule.evaluateCoreExperiencePrinciple({
|
|
822
|
-
task_id: params.task_id,
|
|
823
|
-
workflow_id: "guard_evaluation",
|
|
824
|
-
has_mainline_hooks: true,
|
|
825
|
-
has_owner_contracts: true,
|
|
826
|
-
natural_language_entry: true,
|
|
827
|
-
requires_internal_contract_knowledge: false,
|
|
828
|
-
user_path_steps: 3,
|
|
829
|
-
has_failures: !params.guard_passed,
|
|
830
|
-
hard_fail_downgraded: params.hard_fail_downgraded,
|
|
831
|
-
forced_heavy_process: params.is_low_risk && !params.guard_passed,
|
|
832
|
-
has_sufficient_evidence: params.guard_passed,
|
|
833
|
-
output_too_long_no_summary: false,
|
|
834
|
-
report_only_no_repair: false,
|
|
835
|
-
failed_but_marked_done: false,
|
|
836
|
-
auto_repair_overreach: false,
|
|
837
|
-
repair_reverified: false,
|
|
838
|
-
outputs_raw_noise: false,
|
|
839
|
-
});
|
|
840
|
-
return {
|
|
841
|
-
passed: result.passed,
|
|
842
|
-
violations: result.violations.map((v) => ({
|
|
843
|
-
principle: v.principle,
|
|
844
|
-
severity: v.severity,
|
|
845
|
-
reason_zh: v.reason_zh ?? "",
|
|
846
|
-
})),
|
|
847
|
-
evaluated_principles: result.evaluated_principles,
|
|
848
|
-
};
|
|
849
|
-
}
|
|
850
|
-
/**
|
|
851
|
-
* CEP 集成: 修复重验证决策 — 检查是否假完成、是否进入正确修复路径。
|
|
852
|
-
*/
|
|
853
|
-
export async function assessCepForRepairReverify(params) {
|
|
854
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
855
|
-
const nfcResult = cepModule.evaluateNoFalseCompletion({
|
|
856
|
-
verification_passed: params.verification_passed,
|
|
857
|
-
build_passed: params.build_passed,
|
|
858
|
-
browser_acceptance_passed: true,
|
|
859
|
-
guard_passed: true,
|
|
860
|
-
evidence_sufficient: params.evidence_sufficient,
|
|
861
|
-
current_status: params.current_status,
|
|
862
|
-
});
|
|
863
|
-
return {
|
|
864
|
-
decision: nfcResult.decision,
|
|
865
|
-
reason_zh: nfcResult.reason_zh ?? "",
|
|
866
|
-
passed: nfcResult.decision === "completed",
|
|
867
|
-
};
|
|
868
|
-
}
|
|
869
|
-
/**
|
|
870
|
-
* CEP 集成: 用户反馈输出质量 — 检查结论优先、摘要清晰、不隐藏失败、中文语义。
|
|
871
|
-
*/
|
|
872
|
-
export async function assessCepForUserFeedback(params) {
|
|
873
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
874
|
-
const cep = cepModule.evaluateUserVisibleOutput({
|
|
875
|
-
has_conclusion_first: params.has_conclusion_first,
|
|
876
|
-
has_clear_summary: params.has_clear_summary,
|
|
877
|
-
has_actionable_next_step: params.has_actionable_next_step,
|
|
878
|
-
exposes_internal_noise: params.exposes_internal_noise,
|
|
879
|
-
hides_critical_failure: params.hides_critical_failure,
|
|
880
|
-
chinese_semantic_first: params.chinese_semantic_first,
|
|
881
|
-
});
|
|
882
|
-
const logGov = await import("../../engine/log_governance.js");
|
|
883
|
-
const logReport = logGov.evaluateFeedbackOutputQuality({
|
|
884
|
-
output: [
|
|
885
|
-
params.has_conclusion_first ? "结论优先" : "缺少结论",
|
|
886
|
-
params.has_clear_summary ? "摘要清晰" : "摘要不足",
|
|
887
|
-
params.has_actionable_next_step ? "下一步明确" : "下一步缺失",
|
|
888
|
-
].join(";"),
|
|
889
|
-
critical_failure_hidden: params.hides_critical_failure,
|
|
890
|
-
});
|
|
891
|
-
return {
|
|
892
|
-
passed: cep.passed && logReport.passed,
|
|
893
|
-
issues_zh: [
|
|
894
|
-
...cep.issues_zh,
|
|
895
|
-
...logReport.findings.map((f) => f.message_zh),
|
|
896
|
-
],
|
|
897
|
-
};
|
|
898
|
-
}
|
|
899
|
-
/**
|
|
900
|
-
* 注册所有 MCP 工具到服务器实例。
|
|
901
|
-
* @param server - McpServer 实例
|
|
902
|
-
* @param deps - 工具依赖项(配置、知识索引、任务上下文)
|
|
903
|
-
*/
|
|
904
|
-
export async function registerTools(server, deps) {
|
|
905
|
-
debug("工具注册", "开始注册 MCP 工具...");
|
|
906
|
-
const { config, knowledgeIndex, taskContext } = deps;
|
|
907
|
-
const projectPath = config._projectPath || process.cwd();
|
|
908
|
-
// H1: LLM Gateway — Token 预算熔断,防止单任务 Token 超支
|
|
909
|
-
const gateway = deps.gateway ?? new (await lazyLLM()).LLMGateway();
|
|
910
|
-
// H4: IO Controller — 工作区互斥锁,防止外部修改导致的静默覆盖
|
|
911
|
-
const ioController = new (await lazyIO()).IOController(projectPath);
|
|
912
|
-
// ── 统一网关 : 唯一工具调用边界 ──
|
|
913
|
-
/** 计算 sf_status cancel 的动态 category */
|
|
914
|
-
function computeEffectiveCategory(toolName, args, contract) {
|
|
915
|
-
if (toolName === "sf_status" && (args.action === "cancel" || args.action === "archive_stale" || args.job_action === "job_cancel")) {
|
|
916
|
-
return "normal_controlled";
|
|
917
|
-
}
|
|
918
|
-
return contract.category;
|
|
919
|
-
}
|
|
920
|
-
/** 计算 sf_status cancel 的动态 side_effects */
|
|
921
|
-
function computeEffectiveSideEffects(toolName, args, contract) {
|
|
922
|
-
if (toolName === "sf_status" && (args.action === "cancel" || args.action === "archive_stale" || args.job_action === "job_cancel")) {
|
|
923
|
-
return ["task_context_write"];
|
|
924
|
-
}
|
|
925
|
-
return contract.side_effects;
|
|
926
|
-
}
|
|
927
|
-
/** State precheck: validate task status before contract guard */
|
|
928
|
-
const STATE_PRECHECKS = {
|
|
929
|
-
sf_accept: ["executing", "verifying", "retrying"],
|
|
930
|
-
sf_verify: ["executing", "retrying"],
|
|
931
|
-
sf_record_verification_execution: ["verifying", "executing"],
|
|
932
|
-
sf_learn: ["verifying", "executing"],
|
|
933
|
-
sf_expand: ["classifying", "expanding", "clarifying"],
|
|
934
|
-
};
|
|
935
|
-
const STATE_ERROR_LABELS = {
|
|
936
|
-
sf_accept: "不可验收",
|
|
937
|
-
sf_verify: "不可验证",
|
|
938
|
-
sf_record_verification_execution: "不可录入验证结果",
|
|
939
|
-
sf_learn: "不可学习",
|
|
940
|
-
sf_expand: "不可膨胀",
|
|
941
|
-
};
|
|
942
|
-
/** 授权模型: explicit > dynamic write gate > destructive gate > workflow gate > category default */
|
|
943
|
-
function checkAuth(toolName, args, contract, ctx, effectiveCategory) {
|
|
944
|
-
// 1. 显式确认
|
|
945
|
-
if (args.confirm === true || args.authorized === true || args.authorization_token) {
|
|
946
|
-
return { required: true, granted: true, reason: "explicit confirmation" };
|
|
947
|
-
}
|
|
948
|
-
// 1b. sf_status 的写入型动作必须显式确认,即便普通查询本身允许自动维护状态。
|
|
949
|
-
if (toolName === "sf_status" && (args.action === "cancel" || args.action === "archive_stale" || args.job_action === "job_cancel")) {
|
|
950
|
-
return { required: true, granted: false, reason: "dynamic write upgrade requires explicit confirmation" };
|
|
951
|
-
}
|
|
952
|
-
// 2. 动态写入升级: cancel/job_cancel 从 read_only 变为 write → 必须确认
|
|
953
|
-
if (effectiveCategory && effectiveCategory !== contract.category && effectiveCategory !== "read_only_bypass") {
|
|
954
|
-
return { required: true, granted: false, reason: "dynamic write upgrade requires explicit confirmation" };
|
|
955
|
-
}
|
|
956
|
-
// 3. 破坏性副作用始终需要显式确认
|
|
957
|
-
const destructive = ["git_commit", "git_push", "pr_create", "external_write"];
|
|
958
|
-
if (contract.side_effects.some((e) => destructive.includes(e))) {
|
|
959
|
-
return { required: true, granted: false, reason: "destructive side effects require explicit confirmation" };
|
|
960
|
-
}
|
|
961
|
-
// 4. 独立严格工具(无 workflow 要求,无 task context)→ 由 handler 自行检查
|
|
962
|
-
if (contract.category === "strict_controlled" && !ctx && !contract.requires_workflow) {
|
|
963
|
-
if (contract.requires_authorization) {
|
|
964
|
-
return { required: true, granted: false, reason: "standalone strict tool requires explicit confirmation" };
|
|
965
|
-
}
|
|
966
|
-
return { required: false, granted: true, reason: "standalone strict tool" };
|
|
967
|
-
}
|
|
968
|
-
// 5. strict_controlled 的 workflow 合同门控
|
|
969
|
-
if (contract.category === "strict_controlled" && ctx?.last_tool_trace) {
|
|
970
|
-
const allowed = ctx.last_tool_trace.next_allowed_tools ?? [];
|
|
971
|
-
if (allowed.includes(toolName)) {
|
|
972
|
-
return { required: true, granted: true, reason: "workflow contract gate" };
|
|
973
|
-
}
|
|
974
|
-
}
|
|
975
|
-
// 5b. 基于状态的回退: 严格工具且任务处于有效状态但无 tool_trace
|
|
976
|
-
if (contract.category === "strict_controlled" && ctx && !ctx.last_tool_trace && contract.requires_workflow) {
|
|
977
|
-
const validStates = STATE_PRECHECKS[toolName];
|
|
978
|
-
if (validStates && validStates.includes(ctx.status)) {
|
|
979
|
-
return { required: true, granted: true, reason: "task in valid state for tool" };
|
|
980
|
-
}
|
|
981
|
-
}
|
|
982
|
-
// 5c. 非严格工具: 自动授权,除非 requires_authorization
|
|
983
|
-
if (contract.category === "read_only_bypass" || contract.category === "normal_controlled") {
|
|
984
|
-
if (contract.requires_authorization) {
|
|
985
|
-
return { required: true, granted: false, reason: "tool requires explicit authorization" };
|
|
986
|
-
}
|
|
987
|
-
return { required: false, granted: true, reason: "non-strict category" };
|
|
988
|
-
}
|
|
989
|
-
return { required: true, granted: false, reason: "no authorization source" };
|
|
990
|
-
}
|
|
991
|
-
function registerSafeTool(name, desc, schema, handler) {
|
|
992
|
-
server.tool(name, desc, schema, async (args) => {
|
|
993
|
-
const invocationId = `inv-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
994
|
-
const taskId = args.task_id;
|
|
995
|
-
const contract = findToolInvocationContractByName(name);
|
|
996
|
-
// 无合同 → hard fail
|
|
997
|
-
if (!contract) {
|
|
998
|
-
return {
|
|
999
|
-
content: [{ type: "text", text: JSON.stringify({ error: `工具 ${name} 未注册契约` }) }],
|
|
1000
|
-
isError: true,
|
|
1001
|
-
};
|
|
1002
|
-
}
|
|
1003
|
-
const effectiveCategory = computeEffectiveCategory(name, args, contract);
|
|
1004
|
-
const effectiveSideEffects = computeEffectiveSideEffects(name, args, contract);
|
|
1005
|
-
// 加载 TaskContext
|
|
1006
|
-
let ctx = null;
|
|
1007
|
-
if (taskId) {
|
|
1008
|
-
ctx = await taskContext.load(taskId);
|
|
1009
|
-
}
|
|
1010
|
-
// 状态预检: 在合同守卫之前验证任务状态
|
|
1011
|
-
if (taskId && STATE_PRECHECKS[name] && ctx) {
|
|
1012
|
-
const validStates = STATE_PRECHECKS[name];
|
|
1013
|
-
if (!validStates.includes(ctx.status)) {
|
|
1014
|
-
const label = STATE_ERROR_LABELS[name] ?? "状态不正确";
|
|
1015
|
-
return {
|
|
1016
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1017
|
-
error: `任务状态 ${ctx.status} ${label},需要 ${validStates.join(" 或 ")}`,
|
|
1018
|
-
status: ctx.status,
|
|
1019
|
-
}) }],
|
|
1020
|
-
isError: true,
|
|
1021
|
-
};
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
// 严格受控但缺少 task_id
|
|
1025
|
-
const isStandaloneStrict = !contract.requires_workflow;
|
|
1026
|
-
if (contract.category === "strict_controlled" && !taskId && !isStandaloneStrict) {
|
|
1027
|
-
return {
|
|
1028
|
-
content: [{ type: "text", text: JSON.stringify({ error: `strict controlled 工具 ${name} 需要 task_id` }) }],
|
|
1029
|
-
isError: true,
|
|
1030
|
-
};
|
|
1031
|
-
}
|
|
1032
|
-
// 授权检查
|
|
1033
|
-
const authorization = checkAuth(name, args, contract, ctx ?? undefined, effectiveCategory);
|
|
1034
|
-
// 授权拒绝 → 仅对网关级拒绝执行 hard fail
|
|
1035
|
-
// (动态写入升级、破坏性操作、无授权源的 strict_controlled)
|
|
1036
|
-
// Handler 级授权(如 sf_capability_update confirm)由 handler 自行处理
|
|
1037
|
-
const gatewayDenial = !authorization.granted &&
|
|
1038
|
-
authorization.reason !== "tool requires explicit authorization";
|
|
1039
|
-
if (gatewayDenial) {
|
|
1040
|
-
const blockedTrace = createToolTrace({
|
|
1041
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1042
|
-
actual_side_effects: effectiveSideEffects,
|
|
1043
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1044
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1045
|
-
authorization, bypass: undefined,
|
|
1046
|
-
});
|
|
1047
|
-
const authViolation = {
|
|
1048
|
-
invocation_id: invocationId, tool_name: name,
|
|
1049
|
-
violation_type: "missing_authorization", severity: "hard_fail",
|
|
1050
|
-
reason: authorization.reason ?? "authorization denied",
|
|
1051
|
-
recovery: "提供 confirm=true / authorized=true / authorization_token",
|
|
1052
|
-
};
|
|
1053
|
-
if (taskId && ctx) {
|
|
1054
|
-
await taskContext.setToolTrace(taskId, blockedTrace, [authViolation]);
|
|
1055
|
-
}
|
|
1056
|
-
return {
|
|
1057
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1058
|
-
error: authViolation.reason, violation: authViolation,
|
|
1059
|
-
tool_trace: blockedTrace,
|
|
1060
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1061
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1062
|
-
}) }],
|
|
1063
|
-
isError: true,
|
|
1064
|
-
};
|
|
1065
|
-
}
|
|
1066
|
-
// read_only_bypass 的旁路处理
|
|
1067
|
-
const bypass = effectiveCategory === "read_only_bypass"
|
|
1068
|
-
? { allowed: true, reason: "read_only" } : undefined;
|
|
1069
|
-
// 计划前置门: 在合同验证之前检查 — 写工具必须有 plan_proposal_gate
|
|
1070
|
-
// sf_classify 创建任务、sf_expand 创建 plan_proposal_gate — 两者豁免
|
|
1071
|
-
const hasWriteEffect = hasWriteSideEffect(effectiveSideEffects);
|
|
1072
|
-
const planGateExempt = name === "sf_classify" || name === "sf_expand";
|
|
1073
|
-
if (hasWriteEffect && taskId && !planGateExempt) {
|
|
1074
|
-
const pgResult = checkWriteToolPlanGate({ ctx, toolName: name, sideEffects: effectiveSideEffects });
|
|
1075
|
-
if (!pgResult.allowed) {
|
|
1076
|
-
const planViolation = {
|
|
1077
|
-
invocation_id: invocationId, tool_name: name,
|
|
1078
|
-
violation_type: "guard_blocked", severity: "hard_fail",
|
|
1079
|
-
reason: pgResult.reason ?? "执行前缺少 Plan Proposal Gate",
|
|
1080
|
-
recovery: "先调用 sf_classify → sf_expand → 设置 plan_proposal_gate 后再执行此工具",
|
|
1081
|
-
};
|
|
1082
|
-
const blockedTrace = createToolTrace({
|
|
1083
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1084
|
-
actual_side_effects: effectiveSideEffects,
|
|
1085
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1086
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1087
|
-
authorization, bypass,
|
|
1088
|
-
});
|
|
1089
|
-
await taskContext.setToolTrace(taskId, blockedTrace, [planViolation]);
|
|
1090
|
-
return {
|
|
1091
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1092
|
-
error: planViolation.reason,
|
|
1093
|
-
violation: planViolation,
|
|
1094
|
-
diagnostic_code: pgResult.diagnostic_code ?? TOOL_DIAGNOSTIC_CODES.planGate,
|
|
1095
|
-
recovery: planViolation.recovery,
|
|
1096
|
-
}) }],
|
|
1097
|
-
isError: true,
|
|
1098
|
-
};
|
|
1099
|
-
}
|
|
1100
|
-
const planGateCheck = taskContext.checkPlanGateBeforeWrite(ctx);
|
|
1101
|
-
if (!planGateCheck.allowed) {
|
|
1102
|
-
const planViolation = {
|
|
1103
|
-
invocation_id: invocationId, tool_name: name,
|
|
1104
|
-
violation_type: "guard_blocked", severity: "hard_fail",
|
|
1105
|
-
reason: planGateCheck.reason_zh,
|
|
1106
|
-
recovery: "请先通过 PlanProposalFirstGate 生成并确认执行计划",
|
|
1107
|
-
};
|
|
1108
|
-
const blockedTrace = createToolTrace({
|
|
1109
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1110
|
-
actual_side_effects: effectiveSideEffects,
|
|
1111
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1112
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1113
|
-
authorization, bypass,
|
|
1114
|
-
});
|
|
1115
|
-
await taskContext.setToolTrace(taskId, blockedTrace, [planViolation]);
|
|
1116
|
-
return {
|
|
1117
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1118
|
-
error: planViolation.reason,
|
|
1119
|
-
violation: planViolation,
|
|
1120
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.planGate,
|
|
1121
|
-
recovery: planViolation.recovery,
|
|
1122
|
-
}) }],
|
|
1123
|
-
isError: true,
|
|
1124
|
-
};
|
|
1125
|
-
}
|
|
1126
|
-
}
|
|
1127
|
-
// 施工指令契约门: 写操作前检查 instruction_contract 状态
|
|
1128
|
-
if (hasWriteEffect && taskId) {
|
|
1129
|
-
const instrResult = await checkInstructionContractGate({ ctx, toolName: name, sideEffects: effectiveSideEffects, task_id: taskId, taskContextMgr: taskContext });
|
|
1130
|
-
if (!instrResult.allowed) {
|
|
1131
|
-
const instrViolation = {
|
|
1132
|
-
invocation_id: invocationId, tool_name: name,
|
|
1133
|
-
violation_type: "guard_blocked", severity: "hard_fail",
|
|
1134
|
-
reason: instrResult.reason ?? "施工指令未就绪",
|
|
1135
|
-
recovery: "请先完善施工指令(目标、范围、非目标、落点、验收标准、禁止绕过项)",
|
|
1136
|
-
};
|
|
1137
|
-
const instrTrace = createToolTrace({
|
|
1138
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1139
|
-
actual_side_effects: effectiveSideEffects,
|
|
1140
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1141
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1142
|
-
authorization, bypass,
|
|
1143
|
-
});
|
|
1144
|
-
await taskContext.setToolTrace(taskId, instrTrace, [instrViolation]);
|
|
1145
|
-
return {
|
|
1146
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1147
|
-
error: instrViolation.reason,
|
|
1148
|
-
violation: instrViolation,
|
|
1149
|
-
diagnostic_code: instrResult.diagnostic_code ?? TOOL_DIAGNOSTIC_CODES.instructionContract,
|
|
1150
|
-
recovery: instrViolation.recovery,
|
|
1151
|
-
}) }],
|
|
1152
|
-
isError: true,
|
|
1153
|
-
};
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
// 问题六十二: MCP 写入路径同样必须消费设计产物包状态,不能绕开 CLI hook。
|
|
1157
|
-
if (hasWriteEffect && taskId) {
|
|
1158
|
-
const designWriteGate = checkDesignArtifactWriteGate({ ctx, toolName: name, sideEffects: effectiveSideEffects });
|
|
1159
|
-
if (!designWriteGate.allowed) {
|
|
1160
|
-
const designViolation = {
|
|
1161
|
-
invocation_id: invocationId, tool_name: name,
|
|
1162
|
-
violation_type: "guard_blocked", severity: "hard_fail",
|
|
1163
|
-
reason: designWriteGate.reason ?? "设计产物包未达到实现就绪状态",
|
|
1164
|
-
recovery: "仅可继续补充设计资产并执行 sf_verify 真实复验;通过前不得写入业务实现",
|
|
1165
|
-
};
|
|
1166
|
-
const designTrace = createToolTrace({
|
|
1167
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1168
|
-
actual_side_effects: effectiveSideEffects,
|
|
1169
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1170
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1171
|
-
authorization, bypass,
|
|
1172
|
-
});
|
|
1173
|
-
await taskContext.setToolTrace(taskId, designTrace, [designViolation]);
|
|
1174
|
-
return {
|
|
1175
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1176
|
-
error: designViolation.reason,
|
|
1177
|
-
violation: designViolation,
|
|
1178
|
-
diagnostic_code: designWriteGate.diagnostic_code,
|
|
1179
|
-
recovery: designViolation.recovery,
|
|
1180
|
-
}) }],
|
|
1181
|
-
isError: true,
|
|
1182
|
-
};
|
|
1183
|
-
}
|
|
1184
|
-
}
|
|
1185
|
-
// 用户项目知识门禁: review/verify/deliver 不能绕过不可消费的项目 hard rule。
|
|
1186
|
-
if (["sf_review", "sf_verify", "sf_deliver"].includes(name)) {
|
|
1187
|
-
const { evaluateLifecycleKnowledgeDecision } = await import("../../engine/lifecycle_knowledge_contract.js");
|
|
1188
|
-
const lifecycleStage = name === "sf_review" ? "implementation" : name === "sf_verify" ? "testing" : "delivery";
|
|
1189
|
-
const lifecycleDecision = evaluateLifecycleKnowledgeDecision({
|
|
1190
|
-
projectPath,
|
|
1191
|
-
consumer: name,
|
|
1192
|
-
intent: ctx?.intent ?? name,
|
|
1193
|
-
route: name === "sf_review" ? "review" : name === "sf_verify" ? "verification" : "delivery",
|
|
1194
|
-
lifecycle_stage: lifecycleStage,
|
|
1195
|
-
changed_files: Array.isArray(args.changed_files) ? args.changed_files : ctx?.execution?.changed_files ?? [],
|
|
1196
|
-
verified_files: Array.isArray(args.changed_files) ? args.changed_files : ctx?.execution?.changed_files ?? [],
|
|
1197
|
-
traceability_ids: [
|
|
1198
|
-
...(ctx?.traceability_binding?.requirement_ids ?? []),
|
|
1199
|
-
...(ctx?.traceability_binding?.prototype_ids ?? []),
|
|
1200
|
-
...(ctx?.traceability_binding?.architecture_ids ?? []),
|
|
1201
|
-
...(ctx?.traceability_binding?.detail_design_ids ?? []),
|
|
1202
|
-
...(ctx?.traceability_binding?.phase_ids ?? []),
|
|
1203
|
-
...(ctx?.traceability_binding?.slice_ids ?? []),
|
|
1204
|
-
...(ctx?.traceability_binding?.acceptance_ids ?? []),
|
|
1205
|
-
],
|
|
1206
|
-
config,
|
|
1207
|
-
task_id: taskId,
|
|
1208
|
-
require_design_audit: false,
|
|
1209
|
-
enforce_control_plane: name !== "sf_review",
|
|
1210
|
-
generation_traces: [
|
|
1211
|
-
...(ctx?.classification ? [{ tool_name: "sf_classify", task_id: taskId, status: "passed", evidence_kind: "result" }] : []),
|
|
1212
|
-
...(ctx?.expansion ? [{ tool_name: "sf_expand", task_id: taskId, status: "passed", evidence_kind: "result" }] : []),
|
|
1213
|
-
...(name === "sf_verify" ? [{ tool_name: "sf_verify", task_id: taskId, status: "blocked", evidence_kind: "plan" }] : []),
|
|
1214
|
-
],
|
|
1215
|
-
selection_limit: 8,
|
|
1216
|
-
});
|
|
1217
|
-
if (lifecycleDecision.hard_fail_count > 0) {
|
|
1218
|
-
const hardFindings = lifecycleDecision.findings
|
|
1219
|
-
.filter((finding) => finding.severity === "hard_fail")
|
|
1220
|
-
.map((finding) => `[${finding.code}] ${finding.message_zh}`);
|
|
1221
|
-
const pkViolation = {
|
|
1222
|
-
invocation_id: invocationId,
|
|
1223
|
-
tool_name: name,
|
|
1224
|
-
violation_type: "guard_blocked",
|
|
1225
|
-
severity: "hard_fail",
|
|
1226
|
-
reason: lifecycleDecision.decision_summary_zh,
|
|
1227
|
-
recovery: lifecycleDecision.recovery_commands.join(";") || "运行 soloforge next 查看统一生命周期知识合同阻断项",
|
|
1228
|
-
};
|
|
1229
|
-
const pkTrace = createToolTrace({
|
|
1230
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1231
|
-
actual_side_effects: effectiveSideEffects,
|
|
1232
|
-
next_allowed_tools: ["sf_expand", "sf_status"],
|
|
1233
|
-
forbidden_tools: ["sf_review", "sf_verify", "sf_deliver"],
|
|
1234
|
-
authorization, bypass,
|
|
1235
|
-
});
|
|
1236
|
-
if (taskId && ctx)
|
|
1237
|
-
await taskContext.setToolTrace(taskId, pkTrace, [pkViolation]);
|
|
1238
|
-
return {
|
|
1239
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1240
|
-
error: pkViolation.reason,
|
|
1241
|
-
violation: pkViolation,
|
|
1242
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.projectKnowledgeBlocked,
|
|
1243
|
-
findings: hardFindings,
|
|
1244
|
-
lifecycle_knowledge_decision: {
|
|
1245
|
-
contract_id: lifecycleDecision.contract_id,
|
|
1246
|
-
lifecycle_stage: lifecycleDecision.lifecycle_stage,
|
|
1247
|
-
authoritative_paths: lifecycleDecision.authoritative_paths,
|
|
1248
|
-
recovery_commands: lifecycleDecision.recovery_commands,
|
|
1249
|
-
},
|
|
1250
|
-
recovery: pkViolation.recovery,
|
|
1251
|
-
}) }],
|
|
1252
|
-
isError: true,
|
|
1253
|
-
};
|
|
1254
|
-
}
|
|
1255
|
-
}
|
|
1256
|
-
// 合同验证
|
|
1257
|
-
const lastTrace = ctx?.last_tool_trace;
|
|
1258
|
-
// 为动态工具构建有效的合同覆盖(如 sf_status cancel)
|
|
1259
|
-
let contractOverride;
|
|
1260
|
-
if (effectiveCategory !== contract.category || effectiveSideEffects !== contract.side_effects) {
|
|
1261
|
-
contractOverride = { ...contract, category: effectiveCategory, side_effects: effectiveSideEffects };
|
|
1262
|
-
}
|
|
1263
|
-
// Workflow ID: 仅来自真实的 expansion trace
|
|
1264
|
-
const explicitWorkflowId = ctx?.expansion?.workflow_trace?.workflow_id;
|
|
1265
|
-
const violations = validateToolInvocation({
|
|
1266
|
-
tool_name: name,
|
|
1267
|
-
current_next_allowed: lastTrace?.next_allowed_tools ?? [],
|
|
1268
|
-
current_forbidden: lastTrace?.forbidden_tools ?? [],
|
|
1269
|
-
authorization,
|
|
1270
|
-
bypass,
|
|
1271
|
-
actual_side_effects: effectiveSideEffects,
|
|
1272
|
-
workflow_id: explicitWorkflowId,
|
|
1273
|
-
_contractOverride: contractOverride,
|
|
1274
|
-
});
|
|
1275
|
-
// 基于状态的回退: 将 contract_state_mismatch 从 hard_fail 降级为 require_human
|
|
1276
|
-
if (authorization.reason === "task in valid state for tool") {
|
|
1277
|
-
for (const v of violations) {
|
|
1278
|
-
if (v.violation_type === "contract_state_mismatch" && v.severity === "hard_fail") {
|
|
1279
|
-
v.severity = "require_human";
|
|
1280
|
-
v.reason += " (state-based fallback: no real workflow_id)";
|
|
1281
|
-
}
|
|
1282
|
-
}
|
|
1283
|
-
}
|
|
1284
|
-
// Hard-fail 违规 → 阻止
|
|
1285
|
-
const hardFail = violations.find(v => v.severity === "hard_fail");
|
|
1286
|
-
if (hardFail) {
|
|
1287
|
-
const blockedTrace = createToolTrace({
|
|
1288
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1289
|
-
actual_side_effects: effectiveSideEffects,
|
|
1290
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1291
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1292
|
-
authorization, bypass,
|
|
1293
|
-
});
|
|
1294
|
-
if (taskId && ctx) {
|
|
1295
|
-
await taskContext.setToolTrace(taskId, blockedTrace, violations);
|
|
1296
|
-
}
|
|
1297
|
-
return {
|
|
1298
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1299
|
-
error: hardFail.reason, violation: hardFail,
|
|
1300
|
-
tool_trace: blockedTrace,
|
|
1301
|
-
next_allowed_tools: contract.default_next_tools,
|
|
1302
|
-
forbidden_tools: contract.forbidden_next_tools,
|
|
1303
|
-
}) }],
|
|
1304
|
-
isError: true,
|
|
1305
|
-
};
|
|
1306
|
-
}
|
|
1307
|
-
// 执行 handler
|
|
1308
|
-
try {
|
|
1309
|
-
const raw = await handler(args);
|
|
1310
|
-
// 如果 handler 直接返回 { content } 则透传
|
|
1311
|
-
if (raw && typeof raw === "object" && "content" in raw && Array.isArray(raw.content)) {
|
|
1312
|
-
return raw;
|
|
1313
|
-
}
|
|
1314
|
-
// 从 { result } 模式中提取数据
|
|
1315
|
-
const data = raw?.result !== undefined ? raw.result : raw;
|
|
1316
|
-
const hasError = !!(data && typeof data === "object" && "error" in data);
|
|
1317
|
-
const recoveryNextTools = hasError && Array.isArray(data.recovery_next_tools)
|
|
1318
|
-
? data.recovery_next_tools
|
|
1319
|
-
: contract.default_next_tools;
|
|
1320
|
-
const recoveryForbiddenTools = hasError && Array.isArray(data.recovery_forbidden_tools)
|
|
1321
|
-
? data.recovery_forbidden_tools
|
|
1322
|
-
: contract.forbidden_next_tools;
|
|
1323
|
-
// 构建 trace;失败处理器可显式开放修复重验路径
|
|
1324
|
-
const trace = createToolTrace({
|
|
1325
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1326
|
-
workflow_id: ctx?.expansion?.workflow_trace?.workflow_id,
|
|
1327
|
-
actual_side_effects: effectiveSideEffects,
|
|
1328
|
-
next_allowed_tools: recoveryNextTools,
|
|
1329
|
-
forbidden_tools: recoveryForbiddenTools,
|
|
1330
|
-
authorization, bypass,
|
|
1331
|
-
});
|
|
1332
|
-
// 将 trace 写入 TaskContext
|
|
1333
|
-
if (taskId) {
|
|
1334
|
-
await taskContext.setToolTrace(taskId, trace, violations.length > 0 ? violations : undefined);
|
|
1335
|
-
}
|
|
1336
|
-
// 用 trace + next/forbidden 装饰响应
|
|
1337
|
-
const response = {
|
|
1338
|
-
...data,
|
|
1339
|
-
tool_trace: trace,
|
|
1340
|
-
next_allowed_tools: recoveryNextTools,
|
|
1341
|
-
forbidden_tools: recoveryForbiddenTools,
|
|
1342
|
-
};
|
|
1343
|
-
// 基于状态的回退: 在响应中暴露降级 workflow
|
|
1344
|
-
if (authorization.reason === "task in valid state for tool") {
|
|
1345
|
-
response.degraded_workflow = true;
|
|
1346
|
-
response.workflow_source = "state-based-fallback";
|
|
1347
|
-
}
|
|
1348
|
-
return {
|
|
1349
|
-
content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
|
|
1350
|
-
isError: hasError ? true : undefined,
|
|
1351
|
-
};
|
|
1352
|
-
}
|
|
1353
|
-
catch (err) {
|
|
1354
|
-
const errorNextTools = name === "sf_expand"
|
|
1355
|
-
? ["sf_expand", "sf_status", "sf_debug", "sf_governance_report"]
|
|
1356
|
-
: contract.default_next_tools;
|
|
1357
|
-
const errorForbiddenTools = name === "sf_expand"
|
|
1358
|
-
? ["sf_verify", "sf_review", "sf_deliver", "sf_scaffold"]
|
|
1359
|
-
: contract.forbidden_next_tools;
|
|
1360
|
-
if (name === "sf_expand" && taskId) {
|
|
1361
|
-
try {
|
|
1362
|
-
await taskContext.updateStatus(taskId, "failed");
|
|
1363
|
-
}
|
|
1364
|
-
catch { /* best effort */ }
|
|
1365
|
-
}
|
|
1366
|
-
const errorTrace = createToolTrace({
|
|
1367
|
-
tool_name: name, invocation_id: invocationId, task_id: taskId,
|
|
1368
|
-
actual_side_effects: effectiveSideEffects,
|
|
1369
|
-
next_allowed_tools: errorNextTools,
|
|
1370
|
-
forbidden_tools: errorForbiddenTools,
|
|
1371
|
-
authorization, bypass,
|
|
1372
|
-
});
|
|
1373
|
-
if (taskId) {
|
|
1374
|
-
try {
|
|
1375
|
-
await taskContext.setToolTrace(taskId, errorTrace);
|
|
1376
|
-
}
|
|
1377
|
-
catch { /* best effort */ }
|
|
1378
|
-
}
|
|
1379
|
-
return {
|
|
1380
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
1381
|
-
error: err instanceof Error ? err.message : String(err),
|
|
1382
|
-
tool_trace: errorTrace,
|
|
1383
|
-
next_allowed_tools: errorNextTools,
|
|
1384
|
-
forbidden_tools: errorForbiddenTools,
|
|
1385
|
-
}) }],
|
|
1386
|
-
isError: true,
|
|
1387
|
-
};
|
|
1388
|
-
}
|
|
1389
|
-
});
|
|
1390
|
-
}
|
|
1391
|
-
// 加载认知锚点上下文 — 必须提供相关性参数,禁止全量加载
|
|
1392
|
-
async function loadRelevantAnchors(query) {
|
|
1393
|
-
debug("工具注册", "加载认知锚点");
|
|
1394
|
-
return _loadRelevantAnchorsInner(query);
|
|
1395
|
-
}
|
|
1396
|
-
async function _loadRelevantAnchorsInner(query) {
|
|
1397
|
-
const stateDir = taskContext.getStateDir();
|
|
1398
|
-
const mapPath = path.join(stateDir, "cognitive.map.json");
|
|
1399
|
-
const mapData = (await lazyAnchor()).readMapJson(mapPath);
|
|
1400
|
-
if (!mapData || mapData.anchors.length === 0)
|
|
1401
|
-
return undefined;
|
|
1402
|
-
const existingFiles = new Set();
|
|
1403
|
-
try {
|
|
1404
|
-
for (const anchor of mapData.anchors) {
|
|
1405
|
-
for (const ref of anchor.source_refs) {
|
|
1406
|
-
if (ref.type === "file" && await fsp.access(path.join(projectPath, ref.ref)).then(() => true, () => false)) {
|
|
1407
|
-
existingFiles.add(ref.ref);
|
|
1408
|
-
}
|
|
1409
|
-
}
|
|
1410
|
-
}
|
|
1411
|
-
}
|
|
1412
|
-
catch { /* ignore */ }
|
|
1413
|
-
const checked = (await lazyAnchor()).checkAnchorStaleness(mapData.anchors, existingFiles);
|
|
1414
|
-
// 必须有 module 或 file_paths,否则不返回任何锚点(禁止全量加载)
|
|
1415
|
-
if (!query.module && (!query.file_paths || query.file_paths.length === 0))
|
|
1416
|
-
return undefined;
|
|
1417
|
-
// 收集与任意提供的 file_paths 或 module 匹配的锚点
|
|
1418
|
-
const seen = new Set();
|
|
1419
|
-
const relevant = [];
|
|
1420
|
-
if (query.module) {
|
|
1421
|
-
for (const a of (await lazyAnchor()).filterRelevantAnchors(checked, { module: query.module })) {
|
|
1422
|
-
if (!seen.has(a.anchor_id)) {
|
|
1423
|
-
seen.add(a.anchor_id);
|
|
1424
|
-
relevant.push(a);
|
|
1425
|
-
}
|
|
1426
|
-
}
|
|
1427
|
-
}
|
|
1428
|
-
if (query.file_paths) {
|
|
1429
|
-
for (const fp of query.file_paths) {
|
|
1430
|
-
for (const a of (await lazyAnchor()).filterRelevantAnchors(checked, { file_path: fp })) {
|
|
1431
|
-
if (!seen.has(a.anchor_id)) {
|
|
1432
|
-
seen.add(a.anchor_id);
|
|
1433
|
-
relevant.push(a);
|
|
1434
|
-
}
|
|
1435
|
-
}
|
|
1436
|
-
}
|
|
1437
|
-
}
|
|
1438
|
-
if (relevant.length === 0)
|
|
1439
|
-
return undefined;
|
|
1440
|
-
return relevant.map((a) => ({
|
|
1441
|
-
anchor_id: a.anchor_id,
|
|
1442
|
-
module: a.module,
|
|
1443
|
-
summary: a.core_contracts.slice(0, 3).join("; "),
|
|
1444
|
-
stale_anchor: a.stale_anchor,
|
|
1445
|
-
}));
|
|
1446
|
-
}
|
|
1447
|
-
debug("工具注册", "批量注册核心/辅助/知识维护工具...");
|
|
1448
|
-
// ── sf_classify: 意图分类入口,创建任务上下文并返回分类结果 ──
|
|
1449
|
-
registerSafeTool("sf_classify", "分析开发者意图,返回任务类型、风险、复杂度和执行策略", ClassifySchema, async (args) => {
|
|
1450
|
-
const asksForNavigation = /(?:下一步|继续(?:做|执行|开发)?|现在(?:可以|能)(?:开始)?(?:写代码|编码|开发|测试|交付)|接下来(?:做什么|该做什么)|该(?:做什么|怎么继续))/i.test(args.intent);
|
|
1451
|
-
if (asksForNavigation) {
|
|
1452
|
-
const navigation = await (await lazyNavigation()).planNextAction(projectPath);
|
|
1453
|
-
return {
|
|
1454
|
-
result: {
|
|
1455
|
-
status: "navigation_required",
|
|
1456
|
-
reason_zh: "检测到阶段推进意图,必须先依据 SoloForge 状态规划下一步",
|
|
1457
|
-
navigation,
|
|
1458
|
-
},
|
|
1459
|
-
};
|
|
1460
|
-
}
|
|
1461
|
-
// 检查是否存在进行中的任务
|
|
1462
|
-
const existing = await taskContext.getCurrentTask();
|
|
1463
|
-
if (existing && !["done", "failed"].includes(existing.status)) {
|
|
1464
|
-
const navigation = await (await lazyNavigation()).planNextAction(projectPath);
|
|
1465
|
-
if (navigation.stale_task?.is_stale) {
|
|
1466
|
-
return {
|
|
1467
|
-
result: {
|
|
1468
|
-
status: "stale_task_requires_resolution",
|
|
1469
|
-
error: "存在陈旧任务指针,必须先选择恢复、归档或开始新任务",
|
|
1470
|
-
existing_task_id: existing.task_id,
|
|
1471
|
-
existing_status: existing.status,
|
|
1472
|
-
navigation,
|
|
1473
|
-
hint: "先调用 sf_navigation 查看可执行处理步骤,不得绕过 SoloForge 状态直接分析或编码",
|
|
1474
|
-
},
|
|
1475
|
-
};
|
|
1476
|
-
}
|
|
1477
|
-
return {
|
|
1478
|
-
result: {
|
|
1479
|
-
error: "存在未完成的任务",
|
|
1480
|
-
warning: "存在未完成的任务",
|
|
1481
|
-
existing_task_id: existing.task_id,
|
|
1482
|
-
existing_status: existing.status,
|
|
1483
|
-
existing_intent: existing.intent,
|
|
1484
|
-
hint: "调用 sf_status action=cancel 取消旧任务,或继续完成它",
|
|
1485
|
-
},
|
|
1486
|
-
};
|
|
1487
|
-
}
|
|
1488
|
-
// 创建任务上下文
|
|
1489
|
-
const ctx = await taskContext.create(args.intent, config.product_profile);
|
|
1490
|
-
const input = { intent: args.intent, project_path: projectPath, task_id: ctx.task_id };
|
|
1491
|
-
const classification = (await lazyClassifier()).classify(input);
|
|
1492
|
-
// 存储分类结果
|
|
1493
|
-
await taskContext.setClassification(ctx.task_id, classification);
|
|
1494
|
-
if (!(await lazyIntentRouter()).shouldEnterSoloForge(classification?.route_decision)) {
|
|
1495
|
-
await taskContext.updateStatus(ctx.task_id, "done");
|
|
1496
|
-
}
|
|
1497
|
-
return {
|
|
1498
|
-
result: {
|
|
1499
|
-
task_id: ctx.task_id,
|
|
1500
|
-
...classification,
|
|
1501
|
-
},
|
|
1502
|
-
};
|
|
1503
|
-
});
|
|
1504
|
-
// ── sf_expand: 意图膨胀,生成结构化 prompt 并注入计划上下文 ──
|
|
1505
|
-
registerSafeTool("sf_expand", "将意图膨胀为结构化 prompt,包含 scope、验收标准和知识匹配。当存在计划时自动注入当前阶段上下文和输出模板", ExpandSchema, async (args) => {
|
|
1506
|
-
const ctx = await taskContext.load(args.task_id);
|
|
1507
|
-
if (!ctx || !ctx.classification) {
|
|
1508
|
-
return { result: { error: "任务不存在或尚未分类,请先调用 sf_classify" } };
|
|
1509
|
-
}
|
|
1510
|
-
// 合并校验 + 应用:ctx 已存储值 → args 覆盖值,统一解析和规范化
|
|
1511
|
-
let needsSave = false;
|
|
1512
|
-
for (const field of CONTRACT_OBJECT_FIELDS) {
|
|
1513
|
-
// args 优先,其次 ctx 已存储值
|
|
1514
|
-
const raw = args[field] ?? ctx[field];
|
|
1515
|
-
if (!raw)
|
|
1516
|
-
continue;
|
|
1517
|
-
const parsed = parseContractObject(raw, field);
|
|
1518
|
-
if (parsed.error)
|
|
1519
|
-
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1520
|
-
if (parsed.value) {
|
|
1521
|
-
ctx[field] = field === "decision_workshop"
|
|
1522
|
-
? ((await lazyDecisionWorkshop()).normalizeDecisionWorkshopContract(parsed.value, args.task_id) ?? parsed.value)
|
|
1523
|
-
: parsed.value;
|
|
1524
|
-
needsSave = true;
|
|
1525
|
-
}
|
|
1526
|
-
}
|
|
1527
|
-
if (needsSave)
|
|
1528
|
-
await taskContext.save(ctx);
|
|
1529
|
-
// 状态守卫:classifying/expanding/clarifying/failed → expanding
|
|
1530
|
-
if (ctx.status === "classifying" || ctx.status === "clarifying" || ctx.status === "failed") {
|
|
1531
|
-
await taskContext.updateStatus(args.task_id, "expanding");
|
|
1532
|
-
ctx.status = "expanding";
|
|
1533
|
-
}
|
|
1534
|
-
else if (ctx.status !== "expanding") {
|
|
1535
|
-
return {
|
|
1536
|
-
result: { error: `任务状态 ${ctx.status} 不可膨胀,需要 classifying 或 expanding`, status: ctx.status },
|
|
1537
|
-
};
|
|
1538
|
-
}
|
|
1539
|
-
// 构建计划上下文(如果存在计划)
|
|
1540
|
-
let planContext;
|
|
1541
|
-
if (ctx.planning && ctx.planning.sub_tasks.length > 0 && ctx.planning.current_step_index < ctx.planning.sub_tasks.length) {
|
|
1542
|
-
const currentStep = ctx.planning.sub_tasks[ctx.planning.current_step_index];
|
|
1543
|
-
const previousOutputs = {};
|
|
1544
|
-
// 读取前序步骤的产出文件(P3: 产物系统)
|
|
1545
|
-
for (let i = 0; i < ctx.planning.current_step_index; i++) {
|
|
1546
|
-
const step = ctx.planning.sub_tasks[i];
|
|
1547
|
-
if (step.output_path) {
|
|
1548
|
-
try {
|
|
1549
|
-
const fs = await import("node:fs/promises");
|
|
1550
|
-
const content = await fs.readFile(step.output_path, "utf-8");
|
|
1551
|
-
previousOutputs[step.title] = content;
|
|
1552
|
-
}
|
|
1553
|
-
catch {
|
|
1554
|
-
// 文件不存在则跳过
|
|
1555
|
-
}
|
|
1556
|
-
}
|
|
1557
|
-
}
|
|
1558
|
-
planContext = { current_step: currentStep, previous_outputs: previousOutputs };
|
|
1559
|
-
}
|
|
1560
|
-
// H1: Token 预算检查 — advisory 模式,仅警告不阻断
|
|
1561
|
-
gateway.beginTask(args.task_id);
|
|
1562
|
-
let h1Warning;
|
|
1563
|
-
try {
|
|
1564
|
-
const gateResult = gateway.request("solution_brainstorm");
|
|
1565
|
-
if (!gateResult.allowed) {
|
|
1566
|
-
h1Warning = { warning: `H1 advisory: ${gateResult.reason}`, budget_remaining: gateResult.remaining_budget };
|
|
1567
|
-
}
|
|
1568
|
-
}
|
|
1569
|
-
catch (e) {
|
|
1570
|
-
h1Warning = { warning: `H1 advisory: ${e.message}`, budget_remaining: 0 };
|
|
1571
|
-
}
|
|
1572
|
-
// H4: advisory-only — 不获取持久锁,仅检查当前锁定状态
|
|
1573
|
-
let h4LockWarning;
|
|
1574
|
-
const lockStatus = await ioController.isLocked();
|
|
1575
|
-
if (lockStatus.locked && lockStatus.task_id !== args.task_id) {
|
|
1576
|
-
h4LockWarning = `H4 advisory: 工作区已被任务 ${lockStatus.task_id} 锁定(${lockStatus.reason ?? "未知"}),当前 H4 未进入强制层`;
|
|
1577
|
-
}
|
|
1578
|
-
let expansion;
|
|
1579
|
-
try {
|
|
1580
|
-
expansion = await (await lazyExpander()).expand({
|
|
1581
|
-
intent: ctx.intent,
|
|
1582
|
-
classification: ctx.classification,
|
|
1583
|
-
projectPath,
|
|
1584
|
-
config,
|
|
1585
|
-
knowledgeIndex,
|
|
1586
|
-
clarificationAnswers: args.clarification_answers,
|
|
1587
|
-
route_decision: ctx.classification?.route_decision,
|
|
1588
|
-
plan_context: planContext,
|
|
1589
|
-
input_material_confirmations: args.input_material_confirmations,
|
|
1590
|
-
task_id: args.task_id,
|
|
1591
|
-
brainstorm_session: ctx.brainstorm_session ?? undefined,
|
|
1592
|
-
});
|
|
1593
|
-
}
|
|
1594
|
-
catch (expandErr) {
|
|
1595
|
-
// 尝试回退到 failed 状态,避免任务停留在 expanding
|
|
1596
|
-
try {
|
|
1597
|
-
await taskContext.updateStatus(args.task_id, "failed");
|
|
1598
|
-
}
|
|
1599
|
-
catch {
|
|
1600
|
-
// 状态转换非法(如已非 expanding),忽略
|
|
1601
|
-
}
|
|
1602
|
-
throw expandErr;
|
|
1603
|
-
}
|
|
1604
|
-
finally {
|
|
1605
|
-
if (!h1Warning)
|
|
1606
|
-
gateway.completeOperation();
|
|
1607
|
-
gateway.endTask();
|
|
1608
|
-
}
|
|
1609
|
-
expansion.task_id = args.task_id;
|
|
1610
|
-
const projectRoot = await fsp.realpath(projectPath);
|
|
1611
|
-
const referencedMaterialPaths = new Set((expansion.input_materials ?? [])
|
|
1612
|
-
.map((material) => material.path_or_ref)
|
|
1613
|
-
.filter((materialPath) => typeof materialPath === "string" && materialPath.length > 0)
|
|
1614
|
-
.map((materialPath) => path.resolve(projectRoot, normalizePathCandidate(materialPath))));
|
|
1615
|
-
const _confirmedCandidates = (args.input_material_confirmations ?? [])
|
|
1616
|
-
.map((materialPath) => path.resolve(projectRoot, normalizePathCandidate(materialPath)))
|
|
1617
|
-
.filter((absolutePath) => isSameOrDescendantPath(absolutePath, projectRoot, { caseSensitive: false }))
|
|
1618
|
-
.filter((absolutePath) => referencedMaterialPaths.has(absolutePath));
|
|
1619
|
-
const confirmedProjectSourcePaths = [];
|
|
1620
|
-
for (const absolutePath of _confirmedCandidates) {
|
|
1621
|
-
try {
|
|
1622
|
-
if ((await fsp.stat(absolutePath)).isFile()
|
|
1623
|
-
&& (await fsp.realpath(absolutePath)).startsWith(`${projectRoot}${path.sep}`)) {
|
|
1624
|
-
confirmedProjectSourcePaths.push(absolutePath);
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
catch {
|
|
1628
|
-
// 跳过无效路径
|
|
1629
|
-
}
|
|
1630
|
-
}
|
|
1631
|
-
const registerConfirmedProjectSources = (registry) => {
|
|
1632
|
-
for (const absolutePath of confirmedProjectSourcePaths) {
|
|
1633
|
-
const sourceRef = path.relative(projectRoot, absolutePath);
|
|
1634
|
-
registry.register({
|
|
1635
|
-
source_type: "project_file",
|
|
1636
|
-
evidence_role: "project_source_file",
|
|
1637
|
-
authority: "authoritative",
|
|
1638
|
-
freshness: "current",
|
|
1639
|
-
permission: "allowed",
|
|
1640
|
-
scope: "confirmed_input_material",
|
|
1641
|
-
description: `已确认项目输入材料: ${sourceRef}`,
|
|
1642
|
-
source_ref: sourceRef,
|
|
1643
|
-
});
|
|
1644
|
-
}
|
|
1645
|
-
};
|
|
1646
|
-
const workflowIntent = ctx.route_decision?.workflow_intent ?? ctx.classification.route_decision?.workflow_intent;
|
|
1647
|
-
// 问题六十: 高风险项目事实声明先过证据门,避免后续架构研讨门遮蔽无证据问题。
|
|
1648
|
-
{
|
|
1649
|
-
const evRoute = ctx.route_decision?.route ?? ctx.classification?.route_decision?.route;
|
|
1650
|
-
const evWorkflowIntent = ctx.route_decision?.workflow_intent ?? ctx.classification?.route_decision?.workflow_intent;
|
|
1651
|
-
const evRisk = (await import("../../engine/evidence_grounding_contract.js")).assessTaskRisk(ctx.classification?.task_type, evRoute, ctx.intent);
|
|
1652
|
-
const isArchitectureContext = evWorkflowIntent === "architecture_design"
|
|
1653
|
-
|| evWorkflowIntent === "existing_system_gap_analysis"
|
|
1654
|
-
|| evRoute === "artifact_generation"
|
|
1655
|
-
|| hasArchitectureIntentSignal(ctx.intent);
|
|
1656
|
-
if (isArchitectureContext && (evRisk === "high" || evRisk === "critical")) {
|
|
1657
|
-
const { createEvidenceGroundingSystem } = await import("../../engine/evidence_grounding_contract.js");
|
|
1658
|
-
const evg = createEvidenceGroundingSystem();
|
|
1659
|
-
evg.registry.register({
|
|
1660
|
-
source_type: "task_context",
|
|
1661
|
-
evidence_role: "classification",
|
|
1662
|
-
authority: "authoritative",
|
|
1663
|
-
freshness: "current",
|
|
1664
|
-
permission: "allowed",
|
|
1665
|
-
scope: "classification",
|
|
1666
|
-
description: "任务分类结果",
|
|
1667
|
-
source_ref: `task:${args.task_id}`,
|
|
1668
|
-
});
|
|
1669
|
-
if (knowledgeIndex) {
|
|
1670
|
-
const { project } = knowledgeIndex.getAllEntries();
|
|
1671
|
-
for (const entry of project) {
|
|
1672
|
-
if (entry.status !== "active")
|
|
1673
|
-
continue;
|
|
1674
|
-
evg.registry.register({
|
|
1675
|
-
source_type: "knowledge_asset",
|
|
1676
|
-
evidence_role: "template_guidance",
|
|
1677
|
-
authority: "trusted",
|
|
1678
|
-
freshness: "current",
|
|
1679
|
-
permission: "allowed",
|
|
1680
|
-
scope: entry.scope?.join(",") ?? "knowledge",
|
|
1681
|
-
description: entry.name,
|
|
1682
|
-
source_ref: entry.file_path,
|
|
1683
|
-
});
|
|
1684
|
-
}
|
|
1685
|
-
}
|
|
1686
|
-
const tdc = ctx.technology_decision_contract;
|
|
1687
|
-
if (tdc?.human_gate_evidence) {
|
|
1688
|
-
evg.registry.register({
|
|
1689
|
-
source_type: "user_confirmation",
|
|
1690
|
-
evidence_role: "user_confirmation",
|
|
1691
|
-
authority: "authoritative",
|
|
1692
|
-
freshness: "current",
|
|
1693
|
-
permission: "allowed",
|
|
1694
|
-
scope: "technology_decision",
|
|
1695
|
-
description: `技术决策确认: ${tdc.decision_scope ?? "general"}`,
|
|
1696
|
-
source_ref: `decision:${tdc.decision_id ?? args.task_id}`,
|
|
1697
|
-
});
|
|
1698
|
-
}
|
|
1699
|
-
registerConfirmedProjectSources(evg.registry);
|
|
1700
|
-
const evClaims = [
|
|
1701
|
-
{
|
|
1702
|
-
id: "claim-expand-0",
|
|
1703
|
-
category: "user_confirmation",
|
|
1704
|
-
claim_text: "任务路由和执行范围已确认",
|
|
1705
|
-
evidence_ids: evg.registry.query({ source_type: "task_context" }).map((e) => e.id),
|
|
1706
|
-
is_uncertain: false,
|
|
1707
|
-
risk_level: evRisk,
|
|
1708
|
-
},
|
|
1709
|
-
{
|
|
1710
|
-
id: "claim-expand-1",
|
|
1711
|
-
category: "architecture",
|
|
1712
|
-
claim_text: "技术方案基于现有系统分析",
|
|
1713
|
-
evidence_ids: evg.registry.query({}).filter((e) => e.evidence_role && e.evidence_role !== "template_guidance" && e.evidence_role !== "classification").map((e) => e.id),
|
|
1714
|
-
is_uncertain: false,
|
|
1715
|
-
risk_level: evRisk,
|
|
1716
|
-
},
|
|
1717
|
-
];
|
|
1718
|
-
const evMatrix = evg.builder.buildContext(evClaims, {
|
|
1719
|
-
target_claims: evClaims.map((c) => c.claim_text),
|
|
1720
|
-
source_types: [],
|
|
1721
|
-
keywords: [],
|
|
1722
|
-
max_results: 10,
|
|
1723
|
-
});
|
|
1724
|
-
evMatrix.task_id = args.task_id;
|
|
1725
|
-
const evGate = evg.gate.evaluate(evMatrix, evRisk);
|
|
1726
|
-
await taskContext.setEvidenceGroundingResult(args.task_id, {
|
|
1727
|
-
evidence_matrix: evMatrix,
|
|
1728
|
-
evidence_gate_result: evGate,
|
|
1729
|
-
unsupported_claims: evGate.unsupported_claims,
|
|
1730
|
-
conflict_resolutions: evMatrix.conflicts,
|
|
1731
|
-
});
|
|
1732
|
-
if (!evGate.allowed) {
|
|
1733
|
-
return {
|
|
1734
|
-
result: {
|
|
1735
|
-
error: `证据驱动门禁阻断: ${evGate.reason_zh}`,
|
|
1736
|
-
diagnostic_code: evGate.diagnostic_code,
|
|
1737
|
-
reason_zh: evGate.reason_zh,
|
|
1738
|
-
unsupported_claims: evGate.unsupported_claims,
|
|
1739
|
-
missing_evidence: evGate.missing_evidence,
|
|
1740
|
-
status: "blocked",
|
|
1741
|
-
recovery: "请提供项目文件、命令输出或其他权威证据支撑关键声明后重新 sf_expand",
|
|
1742
|
-
},
|
|
1743
|
-
};
|
|
1744
|
-
}
|
|
1745
|
-
}
|
|
1746
|
-
}
|
|
1747
|
-
// 问题六十一: 架构设计前的六域研讨门独立执行,不得被施工指令契约有无绕过。
|
|
1748
|
-
let existingSourceRoot = false;
|
|
1749
|
-
for (const candidate of ["src", "backend", "frontend", "apps", "services"]) {
|
|
1750
|
-
if (await fsp.access(path.join(projectPath, candidate)).then(() => true, () => false)) {
|
|
1751
|
-
existingSourceRoot = true;
|
|
1752
|
-
break;
|
|
1753
|
-
}
|
|
1754
|
-
}
|
|
1755
|
-
let existingManifest = false;
|
|
1756
|
-
for (const candidate of ["package.json", "pom.xml", "build.gradle", "settings.gradle"]) {
|
|
1757
|
-
if (await fsp.access(path.join(projectPath, candidate)).then(() => true, () => false)) {
|
|
1758
|
-
existingManifest = true;
|
|
1759
|
-
break;
|
|
1760
|
-
}
|
|
1761
|
-
}
|
|
1762
|
-
const detectedArchitectureContext = existingSourceRoot && existingManifest
|
|
1763
|
-
? "existing_system"
|
|
1764
|
-
: (!existingSourceRoot && !existingManifest ? "empty_project" : "new_system");
|
|
1765
|
-
const workshopGate = await checkArchitectureDecisionWorkshopGate({
|
|
1766
|
-
ctx,
|
|
1767
|
-
workflowIntent,
|
|
1768
|
-
projectContext: detectedArchitectureContext,
|
|
1769
|
-
});
|
|
1770
|
-
await taskContext.save(ctx);
|
|
1771
|
-
if (!workshopGate.allowed) {
|
|
1772
|
-
return {
|
|
1773
|
-
result: {
|
|
1774
|
-
error: "架构设计前必须先完成六类架构决策研讨与用户确认",
|
|
1775
|
-
status: "awaiting_confirmation",
|
|
1776
|
-
architecture_decision_workshop: workshopGate.contract,
|
|
1777
|
-
blocking_findings: workshopGate.findings,
|
|
1778
|
-
next_domain: workshopGate.next_domain,
|
|
1779
|
-
recovery: "请从当前待讨论域开始,提供候选方案、推荐理由、风险和用户确认后重新调用 sf_expand",
|
|
1780
|
-
},
|
|
1781
|
-
};
|
|
1782
|
-
}
|
|
1783
|
-
// 六域决策闭合后创建设计产物生命周期;正式设计与后续实现必须以其复验结果为准。
|
|
1784
|
-
if (workflowIntent === "architecture_design" && !ctx.design_artifact_pack) {
|
|
1785
|
-
const designModule = await lazyDesignArtifactPack();
|
|
1786
|
-
ctx.design_artifact_pack = designModule.createDesignArtifactPack(args.task_id);
|
|
1787
|
-
ctx.design_artifact_pack.status = "awaiting_decisions";
|
|
1788
|
-
ctx.design_artifact_pack.decision_workshop_ref = `task:${args.task_id}:architecture_decision_workshop`;
|
|
1789
|
-
ctx.design_artifact_pack.user_confirmation_ref = ctx.architecture_decision_workshop?.document_output_confirmation_ref;
|
|
1790
|
-
await taskContext.save(ctx);
|
|
1791
|
-
}
|
|
1792
|
-
// 问题六十一(通用): 可组合决策包门禁
|
|
1793
|
-
const dwModule = await lazyDecisionWorkshop();
|
|
1794
|
-
const packMatch = dwModule.matchDecisionPacks({
|
|
1795
|
-
workflow_intent: workflowIntent,
|
|
1796
|
-
intent: ctx.intent,
|
|
1797
|
-
task_type: ctx.classification?.task_type,
|
|
1798
|
-
});
|
|
1799
|
-
// 过滤掉架构(架构由上面的专用子包处理)
|
|
1800
|
-
const nonArchPacks = packMatch.packs.filter((p) => p !== "architecture");
|
|
1801
|
-
if (nonArchPacks.length > 0) {
|
|
1802
|
-
const dwContract = ctx.decision_workshop ?? dwModule.createDecisionWorkshop(args.task_id, nonArchPacks, detectedArchitectureContext, packMatch.reasons.join(";"));
|
|
1803
|
-
const dwGate = dwModule.evaluateDecisionWorkshop(dwContract);
|
|
1804
|
-
ctx.decision_workshop = dwModule.applyDecisionWorkshopGate(dwContract);
|
|
1805
|
-
await taskContext.save(ctx);
|
|
1806
|
-
if (!dwGate.allowed) {
|
|
1807
|
-
return {
|
|
1808
|
-
result: {
|
|
1809
|
-
error: `${packMatch.reasons.join(";")},必须先完成决策研讨与用户确认`,
|
|
1810
|
-
status: "awaiting_confirmation",
|
|
1811
|
-
decision_workshop: ctx.decision_workshop,
|
|
1812
|
-
blocking_findings: dwGate.blocking_findings,
|
|
1813
|
-
next_domain: dwGate.next_domain,
|
|
1814
|
-
activated_packs: nonArchPacks,
|
|
1815
|
-
recovery: "请从当前待讨论域开始,提供候选方案、推荐理由、风险和用户确认后重新调用 sf_expand",
|
|
1816
|
-
},
|
|
1817
|
-
};
|
|
1818
|
-
}
|
|
1819
|
-
}
|
|
1820
|
-
// 问题四十九/五十: 已有架构合同或现有系统证据的进一步审查。
|
|
1821
|
-
const expansionRoute = expansion?.workflow_trace
|
|
1822
|
-
? expansion?.workflow_trace?.route
|
|
1823
|
-
: undefined;
|
|
1824
|
-
const hasInstructionContract = !!ctx?.instruction_contract;
|
|
1825
|
-
if (hasInstructionContract) {
|
|
1826
|
-
if (expansionRoute === "artifact_generation" || expansionRoute === "analysis") {
|
|
1827
|
-
const archGate = await checkArchitectureDesignGate({ ctx, route: expansionRoute });
|
|
1828
|
-
if (!archGate.allowed) {
|
|
1829
|
-
return {
|
|
1830
|
-
result: {
|
|
1831
|
-
error: archGate.reason_zh,
|
|
1832
|
-
architecture_gate_findings: archGate.findings,
|
|
1833
|
-
status: "blocked",
|
|
1834
|
-
recovery: "架构设计审查未通过,请补充缺失项后重新 sf_expand",
|
|
1835
|
-
},
|
|
1836
|
-
};
|
|
1837
|
-
}
|
|
1838
|
-
}
|
|
1839
|
-
if (expansionRoute === "code_change" || expansionRoute === "artifact_generation") {
|
|
1840
|
-
const analysisGate = await checkExistingSystemAnalysisGate({
|
|
1841
|
-
hasExistingCode: !!config?.tech_stack,
|
|
1842
|
-
hasPackageJson: !!projectPath,
|
|
1843
|
-
hasSrcDir: true,
|
|
1844
|
-
hasAnalysis: !!ctx.existing_system_analysis,
|
|
1845
|
-
hasGapAnalysis: !!ctx.requirement_gap_analysis,
|
|
1846
|
-
});
|
|
1847
|
-
if (!analysisGate.allowed) {
|
|
1848
|
-
return {
|
|
1849
|
-
result: {
|
|
1850
|
-
error: `现有系统分析门禁未通过: ${analysisGate.reason_zh}`,
|
|
1851
|
-
missing_analysis: analysisGate.missing_analysis,
|
|
1852
|
-
status: "blocked",
|
|
1853
|
-
recovery: "请先对现有项目执行系统分析和差距分析,再继续架构设计或编码",
|
|
1854
|
-
},
|
|
1855
|
-
};
|
|
1856
|
-
}
|
|
1857
|
-
}
|
|
1858
|
-
}
|
|
1859
|
-
// ── S4 gates: 轻量路径(acceptance/review/read_only)整体跳过 ──
|
|
1860
|
-
const isLightweightRoute = expansionRoute === "acceptance" || expansionRoute === "review"
|
|
1861
|
-
|| expansionRoute === "direct_answer" || expansionRoute === "analysis";
|
|
1862
|
-
if (!isLightweightRoute) {
|
|
1863
|
-
// ── S4 gates: 独立于 hasInstructionContract,由 requires* 触发判定 ──
|
|
1864
|
-
// 问题十六: 技术选型决策主权 gate — 高影响技术决策缺证据时 blocked
|
|
1865
|
-
{
|
|
1866
|
-
const decisionGate = await checkDecisionSovereigntyGate({ ctx, route: expansionRoute });
|
|
1867
|
-
if (!decisionGate.allowed) {
|
|
1868
|
-
return {
|
|
1869
|
-
result: {
|
|
1870
|
-
error: decisionGate.reason_zh,
|
|
1871
|
-
status: "blocked",
|
|
1872
|
-
expected_schema: decisionGate.expected_schema,
|
|
1873
|
-
recovery: decisionGate.requires_human_gate ? "请提供技术决策确认证据(human_gate_evidence)" : "技术选型决策校验失败,请按照 expected_schema 格式提供 technology_decision_contract",
|
|
1874
|
-
},
|
|
1875
|
-
};
|
|
1876
|
-
}
|
|
1877
|
-
}
|
|
1878
|
-
// 问题二十六: 细节纪律 gate — 复杂任务缺关键细节时 blocked
|
|
1879
|
-
{
|
|
1880
|
-
const detailGate = await checkDetailDisciplineGate({ ctx, route: expansionRoute });
|
|
1881
|
-
if (!detailGate.allowed) {
|
|
1882
|
-
return {
|
|
1883
|
-
result: {
|
|
1884
|
-
error: detailGate.reason_zh,
|
|
1885
|
-
missing_details: detailGate.missing_details,
|
|
1886
|
-
status: "blocked",
|
|
1887
|
-
recovery: "多步骤/复杂任务缺 detail_discipline_contract,请提供后重新 sf_expand",
|
|
1888
|
-
},
|
|
1889
|
-
};
|
|
1890
|
-
}
|
|
1891
|
-
}
|
|
1892
|
-
// 问题二十七: 第一性原理 gate — 高影响任务缺推理时 blocked
|
|
1893
|
-
{
|
|
1894
|
-
const fpGate = await checkFirstPrinciplesGate({ ctx, route: expansionRoute });
|
|
1895
|
-
if (!fpGate.allowed) {
|
|
1896
|
-
return {
|
|
1897
|
-
result: {
|
|
1898
|
-
error: fpGate.reason_zh,
|
|
1899
|
-
failures: fpGate.failures,
|
|
1900
|
-
expected_schema: fpGate.expected_schema,
|
|
1901
|
-
status: "blocked",
|
|
1902
|
-
recovery: "高影响任务缺 first_principles_frame,请按照 expected_schema 格式提供后重新 sf_expand",
|
|
1903
|
-
},
|
|
1904
|
-
};
|
|
1905
|
-
}
|
|
1906
|
-
}
|
|
1907
|
-
// 问题四十二(brainstorm): 脑暴契约 gate — 不确定项缺方案探索时 blocked
|
|
1908
|
-
{
|
|
1909
|
-
const brainstormGate = await checkBrainstormGate({ ctx, route: expansionRoute });
|
|
1910
|
-
if (!brainstormGate.allowed) {
|
|
1911
|
-
return {
|
|
1912
|
-
result: {
|
|
1913
|
-
error: brainstormGate.reason_zh,
|
|
1914
|
-
violations: brainstormGate.violations,
|
|
1915
|
-
expected_schema: brainstormGate.expected_schema,
|
|
1916
|
-
status: "blocked",
|
|
1917
|
-
recovery: "不确定项/方案选择缺 brainstorm_session,请按照 expected_schema 格式提供后重新 sf_expand",
|
|
1918
|
-
},
|
|
1919
|
-
};
|
|
1920
|
-
}
|
|
1921
|
-
}
|
|
1922
|
-
// 问题六十六/六十七/六十八: 编码前工程约束必须聚合返回。
|
|
1923
|
-
// 不能让 OOD 或后端工程门禁抢先返回,遮蔽用户项目的注释/日志契约。
|
|
1924
|
-
{
|
|
1925
|
-
const preImplementationBlocks = [];
|
|
1926
|
-
const preImplementationPayload = {};
|
|
1927
|
-
const artifactDesignIntent = expansionRoute === "artifact_generation"
|
|
1928
|
-
|| ["architecture_design", "detailed_design", "database_design", "api_design"].includes(String(workflowIntent))
|
|
1929
|
-
|| /(?:架构|数据库|API|接口|OpenAPI).{0,12}(?:设计|规格|文档)|(?:设计|规格|文档).{0,12}(?:API|接口|OpenAPI)/i.test(ctx.intent);
|
|
1930
|
-
const isImplementationRoute = !artifactDesignIntent && (expansionRoute === "code_change"
|
|
1931
|
-
|| String(workflowIntent) === "backend_api_implementation"
|
|
1932
|
-
|| String(workflowIntent) === "frontend_business_logic"
|
|
1933
|
-
|| /编码|实现|开发|controller|service|component/i.test(ctx.intent));
|
|
1934
|
-
const traceabilityModule = await lazyTraceability();
|
|
1935
|
-
const traceReport = isImplementationRoute
|
|
1936
|
-
? traceabilityModule.auditDesignImplementationTraceability(projectPath)
|
|
1937
|
-
: {
|
|
1938
|
-
passed: true,
|
|
1939
|
-
matrix_exists: false,
|
|
1940
|
-
findings: [],
|
|
1941
|
-
checked_files: [],
|
|
1942
|
-
matrix_path: traceabilityModule.DEFAULT_DESIGN_IMPLEMENTATION_TRACEABILITY_PATH,
|
|
1943
|
-
};
|
|
1944
|
-
if (isImplementationRoute && !traceReport.passed) {
|
|
1945
|
-
ctx.traceability_binding = {
|
|
1946
|
-
requirement_ids: [],
|
|
1947
|
-
prototype_ids: [],
|
|
1948
|
-
architecture_ids: [],
|
|
1949
|
-
detail_design_ids: [],
|
|
1950
|
-
phase_ids: [],
|
|
1951
|
-
slice_ids: [],
|
|
1952
|
-
acceptance_ids: [],
|
|
1953
|
-
status: "needs_backfill",
|
|
1954
|
-
findings: traceReport.findings.map((finding) => `${finding.code}: ${finding.message_zh}`),
|
|
1955
|
-
};
|
|
1956
|
-
await taskContext.save(ctx);
|
|
1957
|
-
return {
|
|
1958
|
-
result: {
|
|
1959
|
-
error: "需求/原型/设计/切片/验收追踪链路未闭合,不得进入编码实现",
|
|
1960
|
-
status: "blocked",
|
|
1961
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityMissing,
|
|
1962
|
-
traceability_findings: traceReport.findings,
|
|
1963
|
-
checked_files: traceReport.checked_files,
|
|
1964
|
-
matrix_path: traceReport.matrix_path,
|
|
1965
|
-
template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
|
|
1966
|
-
recovery_command: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_COMMAND,
|
|
1967
|
-
recovery: `${traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_GUIDANCE}。不得取消任务后直接写代码,不得改用 Bash 绕过追踪矩阵。`,
|
|
1968
|
-
},
|
|
1969
|
-
};
|
|
1970
|
-
}
|
|
1971
|
-
const traceBindingIds = traceabilityModule.extractTraceabilityBindingIds(ctx);
|
|
1972
|
-
if (traceReport.matrix_exists && isImplementationRoute) {
|
|
1973
|
-
const missingPrefixes = ["PHASE", "SLICE", "DD", "AC"].filter((prefix) => !traceBindingIds.some((id) => id.startsWith(`${prefix}-`)));
|
|
1974
|
-
if (missingPrefixes.length > 0) {
|
|
1975
|
-
ctx.traceability_binding = {
|
|
1976
|
-
requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
|
|
1977
|
-
prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
|
|
1978
|
-
architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
|
|
1979
|
-
detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
|
|
1980
|
-
phase_ids: traceBindingIds.filter((id) => id.startsWith("PHASE-")),
|
|
1981
|
-
slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
|
|
1982
|
-
acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
|
|
1983
|
-
status: "missing",
|
|
1984
|
-
findings: missingPrefixes.map((prefix) => `编码前缺少 ${prefix}-* 绑定`),
|
|
1985
|
-
};
|
|
1986
|
-
await taskContext.save(ctx);
|
|
1987
|
-
return {
|
|
1988
|
-
result: {
|
|
1989
|
-
error: "编码任务必须先绑定阶段、切片、详细设计和验收 ID",
|
|
1990
|
-
status: "awaiting_traceability_binding",
|
|
1991
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityBindingMissing,
|
|
1992
|
-
missing_prefixes: missingPrefixes,
|
|
1993
|
-
matrix_path: traceReport.matrix_path,
|
|
1994
|
-
template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
|
|
1995
|
-
recovery_command: "sf_expand",
|
|
1996
|
-
recovery: "在任务上下文或指令中明确本次实现对应的 PHASE-*、SLICE-*、DD-*、AC-*,再重新调用 sf_expand;不得脱离已确认设计直接编码,不得取消任务后改用 Bash/Edit/Write 直接实现",
|
|
1997
|
-
},
|
|
1998
|
-
};
|
|
1999
|
-
}
|
|
2000
|
-
ctx.traceability_binding = {
|
|
2001
|
-
requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
|
|
2002
|
-
prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
|
|
2003
|
-
architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
|
|
2004
|
-
detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
|
|
2005
|
-
phase_ids: traceBindingIds.filter((id) => id.startsWith("PHASE-")),
|
|
2006
|
-
slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
|
|
2007
|
-
acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
|
|
2008
|
-
status: "bound",
|
|
2009
|
-
findings: [],
|
|
2010
|
-
};
|
|
2011
|
-
preImplementationPayload.traceability_binding = ctx.traceability_binding;
|
|
2012
|
-
}
|
|
2013
|
-
const oodModule = await lazyOodSolid();
|
|
2014
|
-
const oodGate = oodModule.evaluateOodDesignGate({
|
|
2015
|
-
task_id: args.task_id,
|
|
2016
|
-
intent: ctx.intent,
|
|
2017
|
-
route: expansionRoute,
|
|
2018
|
-
summary: ctx.ood_solid_summary,
|
|
2019
|
-
});
|
|
2020
|
-
if (oodGate.applicable) {
|
|
2021
|
-
ctx.ood_solid_summary = oodGate.required_summary;
|
|
2022
|
-
preImplementationPayload.ood_solid_summary = oodGate.required_summary;
|
|
2023
|
-
}
|
|
2024
|
-
if (!oodGate.allowed) {
|
|
2025
|
-
preImplementationBlocks.push({
|
|
2026
|
-
code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
|
|
2027
|
-
reason_zh: oodGate.reason_zh,
|
|
2028
|
-
});
|
|
2029
|
-
}
|
|
2030
|
-
const backendModule = await lazyBackendImplementation();
|
|
2031
|
-
const backendGate = backendModule.evaluateBackendImplementationGate({
|
|
2032
|
-
task_id: args.task_id,
|
|
2033
|
-
intent: ctx.intent,
|
|
2034
|
-
route: expansionRoute,
|
|
2035
|
-
work_package: ctx.backend_implementation_work_package,
|
|
2036
|
-
});
|
|
2037
|
-
if (backendGate.applicable) {
|
|
2038
|
-
ctx.backend_implementation_work_package = backendGate.work_package;
|
|
2039
|
-
preImplementationPayload.backend_implementation_work_package = backendGate.work_package;
|
|
2040
|
-
}
|
|
2041
|
-
if (!backendGate.allowed) {
|
|
2042
|
-
preImplementationBlocks.push({
|
|
2043
|
-
code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
|
|
2044
|
-
reason_zh: backendGate.reason_zh,
|
|
2045
|
-
});
|
|
2046
|
-
}
|
|
2047
|
-
if (ctx.classification.task_type !== "scaffold") {
|
|
2048
|
-
const obsModule = await lazyCodeObservability();
|
|
2049
|
-
const obsGate = obsModule.evaluateCodeObservabilityGate({
|
|
2050
|
-
task_id: args.task_id,
|
|
2051
|
-
intent: ctx.intent,
|
|
2052
|
-
route: expansionRoute,
|
|
2053
|
-
changed_files: ctx.execution?.changed_files,
|
|
2054
|
-
work_package: ctx.code_observability_work_package,
|
|
2055
|
-
});
|
|
2056
|
-
if (obsGate.applicable) {
|
|
2057
|
-
ctx.code_observability_work_package = obsGate.work_package;
|
|
2058
|
-
preImplementationPayload.code_observability_work_package = obsGate.work_package;
|
|
2059
|
-
}
|
|
2060
|
-
if (!obsGate.allowed) {
|
|
2061
|
-
preImplementationBlocks.push({
|
|
2062
|
-
code: TOOL_DIAGNOSTIC_CODES.codeObservabilityWorkPackage,
|
|
2063
|
-
reason_zh: obsGate.reason_zh,
|
|
2064
|
-
});
|
|
2065
|
-
}
|
|
2066
|
-
}
|
|
2067
|
-
if (Object.keys(preImplementationPayload).length > 0) {
|
|
2068
|
-
await taskContext.save(ctx);
|
|
2069
|
-
}
|
|
2070
|
-
if (preImplementationBlocks.length > 0) {
|
|
2071
|
-
return {
|
|
2072
|
-
result: {
|
|
2073
|
-
error: "编码前工程契约未全部确认,不得开始实现",
|
|
2074
|
-
status: "awaiting_implementation_contracts",
|
|
2075
|
-
diagnostic_codes: preImplementationBlocks.map((b) => b.code),
|
|
2076
|
-
blocking_findings: preImplementationBlocks,
|
|
2077
|
-
...preImplementationPayload,
|
|
2078
|
-
recovery: "请同时确认 OOD/SOLID、后端工程边界、代码注释与日志契约后重新调用 sf_expand",
|
|
2079
|
-
},
|
|
2080
|
-
};
|
|
2081
|
-
}
|
|
2082
|
-
}
|
|
2083
|
-
} // end if (!isLightweightRoute) — 轻量路径跳过 S4 gates + 编码前工程约束
|
|
2084
|
-
// Input Material Contract: 处理 hard-blocking 结果
|
|
2085
|
-
// Privacy Gate: 隐私/敏感信息策略阻断
|
|
2086
|
-
const isBlocked = expansion.prompt.startsWith("## 阻塞:输入材料禁止读取")
|
|
2087
|
-
|| expansion.prompt.startsWith("## 阻塞:隐私/敏感信息策略");
|
|
2088
|
-
let isMaterialClarification = false;
|
|
2089
|
-
if (expansion.prompt.startsWith("## 澄清请求") && expansion.input_materials) {
|
|
2090
|
-
for (const m of expansion.input_materials) {
|
|
2091
|
-
if (m.access_mode !== "forbidden" && (await lazyInputMaterial()).classifyIngestionStatus(m.path_or_ref) === "requires_confirmation") {
|
|
2092
|
-
isMaterialClarification = true;
|
|
2093
|
-
break;
|
|
2094
|
-
}
|
|
2095
|
-
}
|
|
2096
|
-
}
|
|
2097
|
-
// 注入 H1/H4 advisory warnings
|
|
2098
|
-
const advisories = {};
|
|
2099
|
-
if (h1Warning)
|
|
2100
|
-
advisories.h1_advisory = h1Warning;
|
|
2101
|
-
if (h4LockWarning)
|
|
2102
|
-
advisories.h4_advisory = h4LockWarning;
|
|
2103
|
-
// 问题六十:证据驱动门禁 — 高风险任务必须阻断无证据声明
|
|
2104
|
-
const _evRoute = ctx.route_decision?.route ?? ctx.classification?.route_decision?.route;
|
|
2105
|
-
const _evRisk = (await import("../../engine/evidence_grounding_contract.js")).assessTaskRisk(ctx.classification?.task_type, _evRoute, ctx.intent);
|
|
2106
|
-
if (_evRisk === "high" || _evRisk === "critical") {
|
|
2107
|
-
const { createEvidenceGroundingSystem } = await import("../../engine/evidence_grounding_contract.js");
|
|
2108
|
-
const _evg = createEvidenceGroundingSystem();
|
|
2109
|
-
if (ctx.classification) {
|
|
2110
|
-
_evg.registry.register({
|
|
2111
|
-
source_type: "task_context",
|
|
2112
|
-
evidence_role: "classification",
|
|
2113
|
-
authority: "authoritative",
|
|
2114
|
-
freshness: "current",
|
|
2115
|
-
permission: "allowed",
|
|
2116
|
-
scope: "classification",
|
|
2117
|
-
description: "任务分类结果",
|
|
2118
|
-
source_ref: `task:${args.task_id}`,
|
|
2119
|
-
});
|
|
2120
|
-
}
|
|
2121
|
-
// 注册知识索引中的项目知识作为证据(仅项目级,不含全局通用规则)
|
|
2122
|
-
// 所有知识索引条目都是 template_guidance 角色,不得支撑项目事实声明
|
|
2123
|
-
if (knowledgeIndex) {
|
|
2124
|
-
const { project } = knowledgeIndex.getAllEntries();
|
|
2125
|
-
for (const entry of project) {
|
|
2126
|
-
if (entry.status !== "active")
|
|
2127
|
-
continue;
|
|
2128
|
-
_evg.registry.register({
|
|
2129
|
-
source_type: "knowledge_asset",
|
|
2130
|
-
evidence_role: "template_guidance",
|
|
2131
|
-
authority: "trusted",
|
|
2132
|
-
freshness: "current",
|
|
2133
|
-
permission: "allowed",
|
|
2134
|
-
scope: entry.scope?.join(",") ?? "knowledge",
|
|
2135
|
-
description: entry.name,
|
|
2136
|
-
source_ref: entry.file_path,
|
|
2137
|
-
});
|
|
2138
|
-
}
|
|
2139
|
-
}
|
|
2140
|
-
// 技术决策契约含 human_gate_evidence → 注册为 user_confirmation(真实项目证据)
|
|
2141
|
-
const _tdc = ctx.technology_decision_contract;
|
|
2142
|
-
if (_tdc?.human_gate_evidence) {
|
|
2143
|
-
_evg.registry.register({
|
|
2144
|
-
source_type: "user_confirmation",
|
|
2145
|
-
evidence_role: "user_confirmation",
|
|
2146
|
-
authority: "authoritative",
|
|
2147
|
-
freshness: "current",
|
|
2148
|
-
permission: "allowed",
|
|
2149
|
-
scope: "technology_decision",
|
|
2150
|
-
description: `技术决策确认: ${_tdc.decision_scope ?? "general"}`,
|
|
2151
|
-
source_ref: `decision:${_tdc.decision_id ?? args.task_id}`,
|
|
2152
|
-
});
|
|
2153
|
-
}
|
|
2154
|
-
registerConfirmedProjectSources(_evg.registry);
|
|
2155
|
-
const _evClaims = [
|
|
2156
|
-
{
|
|
2157
|
-
id: "claim-expand-0",
|
|
2158
|
-
category: "user_confirmation",
|
|
2159
|
-
claim_text: "任务路由和执行范围已确认",
|
|
2160
|
-
evidence_ids: _evg.registry.query({ source_type: "task_context" }).map((e) => e.id),
|
|
2161
|
-
is_uncertain: false,
|
|
2162
|
-
risk_level: _evRisk,
|
|
2163
|
-
},
|
|
2164
|
-
];
|
|
2165
|
-
// 只在架构设计/现有系统分析场景生成 architecture claim
|
|
2166
|
-
const _evWorkflowIntent = ctx.route_decision?.workflow_intent ?? ctx.classification?.route_decision?.workflow_intent;
|
|
2167
|
-
const _isArchitectureContext = _evWorkflowIntent === "architecture_design"
|
|
2168
|
-
|| _evWorkflowIntent === "existing_system_gap_analysis"
|
|
2169
|
-
|| _evRoute === "artifact_generation"
|
|
2170
|
-
|| hasArchitectureIntentSignal(ctx.intent);
|
|
2171
|
-
if (_isArchitectureContext) {
|
|
2172
|
-
_evClaims.push({
|
|
2173
|
-
id: "claim-expand-1",
|
|
2174
|
-
category: "architecture",
|
|
2175
|
-
claim_text: "技术方案基于现有系统分析",
|
|
2176
|
-
evidence_ids: _evg.registry.query({}).filter((e) => e.evidence_role && e.evidence_role !== "template_guidance" && e.evidence_role !== "classification").map((e) => e.id),
|
|
2177
|
-
is_uncertain: false,
|
|
2178
|
-
risk_level: _evRisk,
|
|
2179
|
-
});
|
|
2180
|
-
}
|
|
2181
|
-
const _evVerify = _evg.verifier.verify(_evClaims, _evRisk);
|
|
2182
|
-
const _evMatrix = _evg.builder.buildContext(_evClaims, {
|
|
2183
|
-
target_claims: _evClaims.map((c) => c.claim_text),
|
|
2184
|
-
source_types: [], keywords: [], max_results: 10,
|
|
2185
|
-
});
|
|
2186
|
-
_evMatrix.task_id = args.task_id;
|
|
2187
|
-
const _evGate = _evg.gate.evaluate(_evMatrix, _evRisk);
|
|
2188
|
-
// 写回 TaskContext(blocked 也保存)
|
|
2189
|
-
await taskContext.setEvidenceGroundingResult(args.task_id, {
|
|
2190
|
-
evidence_matrix: _evMatrix,
|
|
2191
|
-
evidence_gate_result: _evGate,
|
|
2192
|
-
unsupported_claims: _evGate.unsupported_claims,
|
|
2193
|
-
conflict_resolutions: _evMatrix.conflicts,
|
|
2194
|
-
});
|
|
2195
|
-
if (!_evGate.allowed) {
|
|
2196
|
-
return {
|
|
2197
|
-
result: {
|
|
2198
|
-
error: `证据驱动门禁阻断: ${_evGate.reason_zh}`,
|
|
2199
|
-
diagnostic_code: _evGate.diagnostic_code,
|
|
2200
|
-
reason_zh: _evGate.reason_zh,
|
|
2201
|
-
unsupported_claims: _evGate.unsupported_claims,
|
|
2202
|
-
missing_evidence: _evGate.missing_evidence,
|
|
2203
|
-
status: "blocked",
|
|
2204
|
-
recovery: "请提供项目文件、命令输出或其他权威证据支撑关键声明后重新 sf_expand",
|
|
2205
|
-
},
|
|
2206
|
-
};
|
|
2207
|
-
}
|
|
2208
|
-
if (_evGate.requires_user_confirmation.length > 0) {
|
|
2209
|
-
advisories.evidence_advisory = {
|
|
2210
|
-
level: "requires_confirmation",
|
|
2211
|
-
items: _evGate.requires_user_confirmation,
|
|
2212
|
-
diagnostic_code: _evGate.diagnostic_code,
|
|
2213
|
-
};
|
|
2214
|
-
}
|
|
2215
|
-
}
|
|
2216
|
-
else {
|
|
2217
|
-
// 低风险通用问答:标注为通用建议
|
|
2218
|
-
advisories.evidence_advisory = "通用建议,非项目事实;证据驱动门禁低风险放行";
|
|
2219
|
-
}
|
|
2220
|
-
// 配置优先级警告
|
|
2221
|
-
if (expansion.config_resolution_reports && expansion.config_resolution_reports.length > 0) {
|
|
2222
|
-
const configWarnings = expansion.config_resolution_reports
|
|
2223
|
-
.filter(r => r.conflicts.length > 0)
|
|
2224
|
-
.map(r => r.conflicts.map(c => `${c.reason}`).join("; "));
|
|
2225
|
-
if (configWarnings.length > 0) {
|
|
2226
|
-
advisories.config_precedence_warnings = configWarnings;
|
|
2227
|
-
}
|
|
2228
|
-
}
|
|
2229
|
-
// 决策契约 advisory: 校验 expand 输出是否包含默认决策字段
|
|
2230
|
-
const decisionContract = (await lazyDecision()).validateDecisionOutput(expansion);
|
|
2231
|
-
if (!decisionContract.passed) {
|
|
2232
|
-
advisories.decision_contract_advisory = decisionContract.advisory;
|
|
2233
|
-
}
|
|
2234
|
-
// 统一持久化:load 一次,所有修改共享同一个 ctx,最后 save 一次
|
|
2235
|
-
// 避免 setExpansion/updateStatus/setPlanProposalGate 各自 load-save 互相覆盖
|
|
2236
|
-
try {
|
|
2237
|
-
const freshCtx = await taskContext.load(args.task_id);
|
|
2238
|
-
if (freshCtx) {
|
|
2239
|
-
// 1. 写入 expansion
|
|
2240
|
-
await taskContext.setExpansion(args.task_id, expansion, freshCtx);
|
|
2241
|
-
// 2. 写入 artifact(共享同一 ctx,不会重新 load)
|
|
2242
|
-
if (expansion.output_artifact_record) {
|
|
2243
|
-
await taskContext.setArtifact(args.task_id, expansion.output_artifact_record, freshCtx);
|
|
2244
|
-
}
|
|
2245
|
-
// 3. 状态转换(共享 ctx,校验通过后 save)
|
|
2246
|
-
const nextStatus = isBlocked ? "failed"
|
|
2247
|
-
: expansion.prompt.startsWith("## 澄清请求") ? "clarifying"
|
|
2248
|
-
: "executing";
|
|
2249
|
-
await taskContext.updateStatus(args.task_id, nextStatus, freshCtx);
|
|
2250
|
-
// 4. 设置 plan_proposal_gate(共享 ctx,最后一次 save)
|
|
2251
|
-
{
|
|
2252
|
-
const { evaluatePlanProposalGate, inferPlanGateTaskType } = await import("../../engine/plan_proposal_gate.js");
|
|
2253
|
-
const routeForGate = expansion?.workflow_trace?.route ?? expansionRoute ?? "code_change";
|
|
2254
|
-
const taskTypeForGate = inferPlanGateTaskType(ctx.intent);
|
|
2255
|
-
const isLightweight = routeForGate === "acceptance" || routeForGate === "review"
|
|
2256
|
-
|| routeForGate === "direct_answer" || routeForGate === "analysis"
|
|
2257
|
-
|| taskTypeForGate === "local_acceptance";
|
|
2258
|
-
if (isLightweight) {
|
|
2259
|
-
await taskContext.setPlanProposalGate(args.task_id, {
|
|
2260
|
-
passed: true,
|
|
2261
|
-
plan_gate_status: "passed",
|
|
2262
|
-
required_level: "brief_plan",
|
|
2263
|
-
reason_zh: "轻量路径自动通过",
|
|
2264
|
-
violations: [],
|
|
2265
|
-
evidence_refs: [],
|
|
2266
|
-
blocked_actions: [],
|
|
2267
|
-
}, freshCtx);
|
|
2268
|
-
}
|
|
2269
|
-
else {
|
|
2270
|
-
const gateResult = evaluatePlanProposalGate({
|
|
2271
|
-
task_id: args.task_id,
|
|
2272
|
-
task_type: taskTypeForGate,
|
|
2273
|
-
user_intent: ctx.intent,
|
|
2274
|
-
plan_level: "execution_plan",
|
|
2275
|
-
plan_summary_zh: ctx.intent.slice(0, 200),
|
|
2276
|
-
proposed_steps: [expansionRoute ?? "execute"],
|
|
2277
|
-
verification_plan: (expansion.acceptance?.automated ?? []).map((a) => a.description ?? String(a)),
|
|
2278
|
-
risks: [],
|
|
2279
|
-
evidence_refs: expansion.matched_knowledge ?? [],
|
|
2280
|
-
});
|
|
2281
|
-
await taskContext.setPlanProposalGate(args.task_id, gateResult, freshCtx);
|
|
2282
|
-
}
|
|
2283
|
-
}
|
|
2284
|
-
}
|
|
2285
|
-
}
|
|
2286
|
-
catch (persistErr) {
|
|
2287
|
-
try {
|
|
2288
|
-
await taskContext.updateStatus(args.task_id, "failed");
|
|
2289
|
-
}
|
|
2290
|
-
catch {
|
|
2291
|
-
// 状态转换非法,忽略
|
|
2292
|
-
}
|
|
2293
|
-
throw persistErr;
|
|
2294
|
-
}
|
|
2295
|
-
const expandPayload = Object.keys(advisories).length > 0
|
|
2296
|
-
? { ...expansion, advisories }
|
|
2297
|
-
: expansion;
|
|
2298
|
-
return {
|
|
2299
|
-
result: expandPayload,
|
|
2300
|
-
};
|
|
2301
|
-
});
|
|
2302
|
-
// ── sf_verify: 生成验证命令(构建、测试、验收检查) ──
|
|
2303
|
-
registerSafeTool("sf_verify", "根据变更文件生成验证命令(构建、测试、验收检查),由 Claude Code Bash 执行", VerifySchema, async (args) => {
|
|
2304
|
-
const ctx = await taskContext.load(args.task_id);
|
|
2305
|
-
if (!ctx) {
|
|
2306
|
-
return {
|
|
2307
|
-
result: { error: "任务不存在" },
|
|
2308
|
-
};
|
|
2309
|
-
}
|
|
2310
|
-
const implementationFiles = args.changed_files.filter((file) => /\.(?:ts|tsx|js|jsx|java|kt|cs|go|py)$/.test(file)
|
|
2311
|
-
&& !/(?:^|\/)tests?\//.test(file));
|
|
2312
|
-
if (implementationFiles.length > 0) {
|
|
2313
|
-
const implementationContents = {};
|
|
2314
|
-
for (const changedFile of implementationFiles) {
|
|
2315
|
-
const absoluteFile = path.resolve(projectPath, changedFile);
|
|
2316
|
-
try {
|
|
2317
|
-
if (isSameOrDescendantPath(absoluteFile, path.resolve(projectPath), { caseSensitive: false }) && (await fsp.stat(absoluteFile)).isFile()) {
|
|
2318
|
-
implementationContents[changedFile] = await fsp.readFile(absoluteFile, "utf-8");
|
|
2319
|
-
}
|
|
2320
|
-
}
|
|
2321
|
-
catch {
|
|
2322
|
-
// 文件缺失会由验证命令或现有产物检查报告。
|
|
2323
|
-
}
|
|
2324
|
-
}
|
|
2325
|
-
const traceabilityModule = await lazyTraceability();
|
|
2326
|
-
const traceVerification = traceabilityModule.verifyChangedFilesAgainstDesignTraceability(projectPath, implementationFiles, ctx);
|
|
2327
|
-
if (!traceVerification.passed) {
|
|
2328
|
-
ctx.traceability_binding = {
|
|
2329
|
-
requirement_ids: traceVerification.binding_ids.filter((id) => id.startsWith("REQ-")),
|
|
2330
|
-
prototype_ids: traceVerification.binding_ids.filter((id) => id.startsWith("PROTO-")),
|
|
2331
|
-
architecture_ids: traceVerification.binding_ids.filter((id) => id.startsWith("ARCH-")),
|
|
2332
|
-
detail_design_ids: traceVerification.binding_ids.filter((id) => id.startsWith("DD-")),
|
|
2333
|
-
phase_ids: traceVerification.binding_ids.filter((id) => id.startsWith("PHASE-")),
|
|
2334
|
-
slice_ids: traceVerification.binding_ids.filter((id) => id.startsWith("SLICE-")),
|
|
2335
|
-
acceptance_ids: traceVerification.binding_ids.filter((id) => id.startsWith("AC-")),
|
|
2336
|
-
status: "missing",
|
|
2337
|
-
findings: traceVerification.findings.map((finding) => `${finding.code}: ${finding.message_zh}`),
|
|
2338
|
-
};
|
|
2339
|
-
await taskContext.save(ctx);
|
|
2340
|
-
return {
|
|
2341
|
-
result: {
|
|
2342
|
-
error: "编码变更未绑定需求/原型/设计/切片/验收追踪链路,需修复后重验",
|
|
2343
|
-
status: "blocked",
|
|
2344
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityVerifyFailed,
|
|
2345
|
-
traceability_findings: traceVerification.findings,
|
|
2346
|
-
recovery: "补齐追踪矩阵并在任务中绑定 PHASE-*、SLICE-*、DD-*、AC-* 后重新执行 sf_verify",
|
|
2347
|
-
},
|
|
2348
|
-
};
|
|
2349
|
-
}
|
|
2350
|
-
const oodModule = await lazyOodSolid();
|
|
2351
|
-
const oodGate = oodModule.evaluateOodDesignGate({
|
|
2352
|
-
task_id: args.task_id,
|
|
2353
|
-
intent: ctx.intent,
|
|
2354
|
-
route: ctx.expansion?.workflow_trace?.route,
|
|
2355
|
-
changed_files: implementationFiles,
|
|
2356
|
-
summary: ctx.ood_solid_summary,
|
|
2357
|
-
});
|
|
2358
|
-
if (!oodGate.allowed) {
|
|
2359
|
-
return {
|
|
2360
|
-
result: {
|
|
2361
|
-
error: oodGate.reason_zh,
|
|
2362
|
-
status: "blocked",
|
|
2363
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
|
|
2364
|
-
ood_solid_summary: oodGate.required_summary,
|
|
2365
|
-
recovery: "完成 OOD/SOLID 摘要后重新执行 sf_expand 与 sf_verify",
|
|
2366
|
-
},
|
|
2367
|
-
};
|
|
2368
|
-
}
|
|
2369
|
-
const backendModule = await lazyBackendImplementation();
|
|
2370
|
-
const backendGate = backendModule.evaluateBackendImplementationGate({
|
|
2371
|
-
task_id: args.task_id,
|
|
2372
|
-
intent: ctx.intent,
|
|
2373
|
-
route: ctx.expansion?.workflow_trace?.route,
|
|
2374
|
-
changed_files: implementationFiles,
|
|
2375
|
-
work_package: ctx.backend_implementation_work_package,
|
|
2376
|
-
});
|
|
2377
|
-
if (!backendGate.allowed) {
|
|
2378
|
-
return {
|
|
2379
|
-
result: {
|
|
2380
|
-
error: backendGate.reason_zh,
|
|
2381
|
-
status: "blocked",
|
|
2382
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
|
|
2383
|
-
backend_implementation_work_package: backendGate.work_package,
|
|
2384
|
-
recovery: "完成后端工程工作包后重新执行 sf_expand 与 sf_verify",
|
|
2385
|
-
},
|
|
2386
|
-
};
|
|
2387
|
-
}
|
|
2388
|
-
const solidFindings = oodGate.applicable ? oodModule.reviewSolidCode(implementationContents) : [];
|
|
2389
|
-
const backendFindings = backendGate.applicable ? backendModule.reviewBackendImplementationFiles(implementationContents) : [];
|
|
2390
|
-
if (backendGate.applicable) {
|
|
2391
|
-
const openApiPath = path.join(projectPath, "docs", "api", "openapi.yaml");
|
|
2392
|
-
const apiMarkdownPath = path.join(projectPath, "docs", "architecture", "03-API接口规格文档.md");
|
|
2393
|
-
const migrationDirectory = path.join(projectPath, "db", "migrations");
|
|
2394
|
-
const openapiText = await fsp.access(openApiPath).then(() => true, () => false) ? await fsp.readFile(openApiPath, "utf-8") : undefined;
|
|
2395
|
-
const apiDocumentText = await fsp.access(apiMarkdownPath).then(() => true, () => false) ? await fsp.readFile(apiMarkdownPath, "utf-8") : undefined;
|
|
2396
|
-
let migrationText;
|
|
2397
|
-
if (await fsp.access(migrationDirectory).then(() => true, () => false)) {
|
|
2398
|
-
const migrationFiles = (await fsp.readdir(migrationDirectory)).filter((name) => /\.sql$/i.test(name));
|
|
2399
|
-
const migrationContents = await Promise.all(migrationFiles.map((name) => fsp.readFile(path.join(migrationDirectory, name), "utf-8")));
|
|
2400
|
-
migrationText = migrationContents.join("\n");
|
|
2401
|
-
}
|
|
2402
|
-
backendFindings.push(...backendModule.verifyBackendArtifactAlignment({
|
|
2403
|
-
openapiText,
|
|
2404
|
-
apiDocumentText,
|
|
2405
|
-
migrationText,
|
|
2406
|
-
sourceFiles: implementationContents,
|
|
2407
|
-
}));
|
|
2408
|
-
}
|
|
2409
|
-
ctx.ood_solid_findings = solidFindings;
|
|
2410
|
-
ctx.backend_implementation_findings = backendFindings;
|
|
2411
|
-
await taskContext.save(ctx);
|
|
2412
|
-
if (oodModule.hasBlockingSolidFindings(solidFindings)) {
|
|
2413
|
-
return {
|
|
2414
|
-
result: {
|
|
2415
|
-
error: "OOD/SOLID 代码复验发现阻断项,需修复后重验",
|
|
2416
|
-
status: "blocked",
|
|
2417
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock,
|
|
2418
|
-
ood_solid_findings: solidFindings,
|
|
2419
|
-
},
|
|
2420
|
-
};
|
|
2421
|
-
}
|
|
2422
|
-
if (backendModule.hasBlockingBackendFindings(backendFindings)) {
|
|
2423
|
-
return {
|
|
2424
|
-
result: {
|
|
2425
|
-
error: "后端实现工程复验发现阻断项,需修复后重验",
|
|
2426
|
-
status: "blocked",
|
|
2427
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock,
|
|
2428
|
-
backend_implementation_findings: backendFindings,
|
|
2429
|
-
},
|
|
2430
|
-
};
|
|
2431
|
-
}
|
|
2432
|
-
// 问题六十八: 代码可维护性与可观测性契约
|
|
2433
|
-
const codeObsModule = await lazyCodeObservability();
|
|
2434
|
-
const obsFindings = codeObsModule.verifyChangedFilesObservability({
|
|
2435
|
-
changed_files: implementationFiles,
|
|
2436
|
-
file_contents: implementationContents,
|
|
2437
|
-
intent: ctx.intent,
|
|
2438
|
-
});
|
|
2439
|
-
ctx.code_observability_findings = obsFindings;
|
|
2440
|
-
await taskContext.save(ctx);
|
|
2441
|
-
if (codeObsModule.hasBlockingObservabilityFindings(obsFindings)) {
|
|
2442
|
-
return {
|
|
2443
|
-
result: {
|
|
2444
|
-
error: "代码可维护性/可观测性复验发现阻断项,需修复后重验",
|
|
2445
|
-
status: "blocked",
|
|
2446
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding,
|
|
2447
|
-
code_observability_findings: obsFindings,
|
|
2448
|
-
},
|
|
2449
|
-
};
|
|
2450
|
-
}
|
|
2451
|
-
}
|
|
2452
|
-
// 问题六十二: 设计产物验证必须读取用户项目真实文件,不接受占位合同自证通过。
|
|
2453
|
-
const verifyWorkflowIntent = ctx.route_decision?.workflow_intent ?? ctx.classification?.route_decision?.workflow_intent;
|
|
2454
|
-
const touchesDesignArtifacts = args.changed_files.some((file) => /docs\/architecture\/|docs\/api\/|openapi|db\/(?:migrations|schema)|架构设计|数据库设计|API接口规格/i.test(file));
|
|
2455
|
-
if (verifyWorkflowIntent === "architecture_design" || touchesDesignArtifacts) {
|
|
2456
|
-
const designModule = await lazyDesignArtifactPack();
|
|
2457
|
-
const designPack = ctx.design_artifact_pack ?? designModule.createDesignArtifactPack(args.task_id);
|
|
2458
|
-
const designVerification = designModule.verifyDesignArtifactPack(projectPath, designPack);
|
|
2459
|
-
ctx.design_artifact_pack = {
|
|
2460
|
-
...designPack,
|
|
2461
|
-
status: designVerification.status,
|
|
2462
|
-
findings: designVerification.findings,
|
|
2463
|
-
baseline_hashes: designVerification.hashes,
|
|
2464
|
-
verified_at: new Date().toISOString(),
|
|
2465
|
-
};
|
|
2466
|
-
await taskContext.save(ctx);
|
|
2467
|
-
if (!designVerification.passed) {
|
|
2468
|
-
return {
|
|
2469
|
-
result: {
|
|
2470
|
-
error: "设计产物包复验未通过,不得继续生成编码或交付结论",
|
|
2471
|
-
status: "blocked",
|
|
2472
|
-
diagnostic_code: "SF-DESIGN-PACK-VERIFY-FAILED",
|
|
2473
|
-
design_artifact_findings: designVerification.findings,
|
|
2474
|
-
checked_files: designVerification.checked_files,
|
|
2475
|
-
recovery: "修复设计产物、补充用户确认并重新执行 sf_verify;不得只提交报告绕过缺口",
|
|
2476
|
-
},
|
|
2477
|
-
};
|
|
2478
|
-
}
|
|
2479
|
-
}
|
|
2480
|
-
// 问题六十三: 模板契约验证 — 按文件逐一匹配契约并校验
|
|
2481
|
-
const sacModule = await lazyStandardAssetContract();
|
|
2482
|
-
const formalArtifactContract = sacModule.matchTemplateContract({
|
|
2483
|
-
output_artifact_kind: ctx.artifact_output?.kind,
|
|
2484
|
-
workflow_intent: verifyWorkflowIntent,
|
|
2485
|
-
route_decision: ctx.route_decision?.workflow_intent,
|
|
2486
|
-
});
|
|
2487
|
-
if (formalArtifactContract || !sacModule.isLowRiskTask({
|
|
2488
|
-
route_decision: verifyWorkflowIntent ?? ctx.classification?.route_decision?.workflow_intent,
|
|
2489
|
-
workflow_intent: verifyWorkflowIntent,
|
|
2490
|
-
changed_files: args.changed_files,
|
|
2491
|
-
})) {
|
|
2492
|
-
for (const changedFile of args.changed_files) {
|
|
2493
|
-
const absFile = path.join(projectPath, changedFile);
|
|
2494
|
-
if (!await fsp.access(absFile).then(() => true, () => false) || !/\.md$/.test(changedFile))
|
|
2495
|
-
continue;
|
|
2496
|
-
// 按实际文件路径匹配契约(不再使用 changed_files[0] 的契约校验全部文件)
|
|
2497
|
-
const perFileContract = sacModule.matchTemplateContract({
|
|
2498
|
-
output_artifact_kind: ctx.artifact_output?.kind,
|
|
2499
|
-
workflow_intent: verifyWorkflowIntent,
|
|
2500
|
-
route_decision: ctx.route_decision?.workflow_intent,
|
|
2501
|
-
file_path: changedFile,
|
|
2502
|
-
});
|
|
2503
|
-
if (!perFileContract)
|
|
2504
|
-
continue;
|
|
2505
|
-
const content = await fsp.readFile(absFile, "utf-8");
|
|
2506
|
-
// 草稿阻断下游消费 — 不再静默跳过
|
|
2507
|
-
if (sacModule.isDraftDocument(content)) {
|
|
2508
|
-
ctx.repair_reverify_directive = {
|
|
2509
|
-
contract_id: perFileContract.asset_id,
|
|
2510
|
-
file_path: changedFile,
|
|
2511
|
-
status: "draft_blocked",
|
|
2512
|
-
repair_suggestion: `文件 ${changedFile} 仍为草稿状态,草稿不可用于实现。请完善内容后重新验证。`,
|
|
2513
|
-
blocked: true,
|
|
2514
|
-
};
|
|
2515
|
-
await taskContext.save(ctx);
|
|
2516
|
-
return {
|
|
2517
|
-
result: {
|
|
2518
|
-
error: `草稿文件 ${changedFile} 不可用于实现,需完善后重新验证`,
|
|
2519
|
-
status: "blocked",
|
|
2520
|
-
diagnostic_code: "SF-CONTRACT-DRAFT",
|
|
2521
|
-
template_contract_id: perFileContract.asset_id,
|
|
2522
|
-
recovery: "完善草稿内容后重新执行 sf_verify",
|
|
2523
|
-
},
|
|
2524
|
-
};
|
|
2525
|
-
}
|
|
2526
|
-
const contractResult = sacModule.verifyOutputAgainstContract(perFileContract, content, projectPath);
|
|
2527
|
-
if (!contractResult.passed) {
|
|
2528
|
-
const repairDirective = sacModule.createRepairReverifyDirective(perFileContract, contractResult);
|
|
2529
|
-
ctx.repair_reverify_directive = {
|
|
2530
|
-
contract_id: perFileContract.asset_id,
|
|
2531
|
-
file_path: changedFile,
|
|
2532
|
-
status: "repair_required",
|
|
2533
|
-
repair_suggestion: repairDirective.repair_suggestion,
|
|
2534
|
-
blocked: true,
|
|
2535
|
-
};
|
|
2536
|
-
await taskContext.save(ctx);
|
|
2537
|
-
return {
|
|
2538
|
-
result: {
|
|
2539
|
-
error: `文件 ${changedFile} 模板契约验证未通过,进入修复重验闭环`,
|
|
2540
|
-
status: "blocked",
|
|
2541
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.contractDraft,
|
|
2542
|
-
template_contract_id: perFileContract.asset_id,
|
|
2543
|
-
missing_fields: contractResult.missing_fields,
|
|
2544
|
-
messages: contractResult.messages,
|
|
2545
|
-
repair_suggestion: repairDirective.repair_suggestion,
|
|
2546
|
-
recovery: "修复文档缺口后重新执行 sf_verify;不得只报告不修复",
|
|
2547
|
-
},
|
|
2548
|
-
};
|
|
2549
|
-
}
|
|
2550
|
-
}
|
|
2551
|
-
// 全部契约验证通过 — 清零修复重验指令
|
|
2552
|
-
if (ctx.repair_reverify_directive) {
|
|
2553
|
-
delete ctx.repair_reverify_directive;
|
|
2554
|
-
await taskContext.save(ctx);
|
|
2555
|
-
}
|
|
2556
|
-
}
|
|
2557
|
-
// RouteDecision 合同验证 — 无条件,在状态预检之前
|
|
2558
|
-
const rdFromCtx = ctx.route_decision ?? ctx.classification?.route_decision ?? null;
|
|
2559
|
-
const wtFromCtx = ctx.workflow_trace ?? ctx.expansion?.workflow_trace ?? null;
|
|
2560
|
-
const rdContractInput = {
|
|
2561
|
-
route_decision: rdFromCtx,
|
|
2562
|
-
workflow_trace: wtFromCtx,
|
|
2563
|
-
expansion_input_materials: ctx.expansion?.input_materials?.map((m) => ({ path_or_ref: m.path_or_ref })),
|
|
2564
|
-
expansion_output_artifact: ctx.artifact_output ? { kind: ctx.artifact_output.kind, path: ctx.artifact_output.path } : null,
|
|
2565
|
-
expansion_constraints: ctx.expansion?.contract?.constraints,
|
|
2566
|
-
};
|
|
2567
|
-
const rdFindings = verifyRouteDecisionContract(rdContractInput);
|
|
2568
|
-
const hasHardFail = rdFindings.some(f => f.severity === "hard_fail" || f.severity === "blocked");
|
|
2569
|
-
if (hasHardFail) {
|
|
2570
|
-
return {
|
|
2571
|
-
result: {
|
|
2572
|
-
error: "RouteDecision 合同检查失败",
|
|
2573
|
-
route_decision_contract_findings: rdFindings,
|
|
2574
|
-
status: "blocked",
|
|
2575
|
-
},
|
|
2576
|
-
};
|
|
2577
|
-
}
|
|
2578
|
-
const VALID_VERIFY_STATES = ["executing", "retrying"];
|
|
2579
|
-
if (!VALID_VERIFY_STATES.includes(ctx.status)) {
|
|
2580
|
-
return {
|
|
2581
|
-
result: { error: `任务状态 ${ctx.status} 不可验证,需要 executing 或 retrying`, status: ctx.status },
|
|
2582
|
-
};
|
|
2583
|
-
}
|
|
2584
|
-
const acceptanceItems = ctx.expansion
|
|
2585
|
-
? [...ctx.expansion.acceptance.automated, ...ctx.expansion.acceptance.manual]
|
|
2586
|
-
: [];
|
|
2587
|
-
// H4: 工作区完整性检查 — advisory 模式,仅警告不阻断
|
|
2588
|
-
const integrity = await ioController.verify();
|
|
2589
|
-
const h4Warning = !integrity.clean
|
|
2590
|
-
? { warning: `H4 advisory: ${integrity.message}`, dirty_files: integrity.dirty_files }
|
|
2591
|
-
: undefined;
|
|
2592
|
-
const verifyResult = (await lazyVerifier()).generateVerifyCommands(config, args.changed_files, acceptanceItems, ctx?.expansion?.workflow_trace?.route);
|
|
2593
|
-
verifyResult.task_id = args.task_id;
|
|
2594
|
-
// 创建 VerificationPlan(plan_only,非执行结果)
|
|
2595
|
-
const vcModule = await lazyVerificationContract();
|
|
2596
|
-
const allCommands = [
|
|
2597
|
-
...(verifyResult.checks?.build ?? []),
|
|
2598
|
-
...(verifyResult.checks?.tests ?? []),
|
|
2599
|
-
].map((c) => c.command);
|
|
2600
|
-
const vPlan = vcModule.createVerificationPlan(args.task_id, allCommands, acceptanceItems.map((a) => a.description));
|
|
2601
|
-
// sf_verify 仅生成计划,不执行命令 — 始终保存 not_executed
|
|
2602
|
-
// 真实执行结果必须通过 recordVerificationExecution 单独录入
|
|
2603
|
-
const vResult = vcModule.createNotExecutedResult(args.task_id, vPlan.plan_id, "sf_verify 生成命令,等待执行");
|
|
2604
|
-
// 存储验证契约到任务上下文
|
|
2605
|
-
const ctxForV = await taskContext.load(args.task_id);
|
|
2606
|
-
if (ctxForV) {
|
|
2607
|
-
ctxForV.verification_plan = vPlan;
|
|
2608
|
-
ctxForV.verification_result = vResult;
|
|
2609
|
-
await taskContext.save(ctxForV);
|
|
2610
|
-
}
|
|
2611
|
-
// 产物生命周期检查: draft → verified 需要 ArtifactVerificationResult.passed
|
|
2612
|
-
let artifactVerificationResult;
|
|
2613
|
-
let artifactFileMissing = false;
|
|
2614
|
-
if (ctx.artifact_output && ctx.artifact_output.status === "draft") {
|
|
2615
|
-
// 验证前解析产物文件并计算 hash
|
|
2616
|
-
const artifact = ctx.artifact_output;
|
|
2617
|
-
const fullPath = path.join(projectPath, artifact.path);
|
|
2618
|
-
if (await fsp.access(fullPath).then(() => true, () => false)) {
|
|
2619
|
-
const fileContent = await fsp.readFile(fullPath);
|
|
2620
|
-
const hash = crypto.createHash("sha256").update(fileContent).digest("hex");
|
|
2621
|
-
artifact.hash = `sha256:${hash}`;
|
|
2622
|
-
if (!artifact.evidence_refs.some(r => r.startsWith("file:artifact:"))) {
|
|
2623
|
-
artifact.evidence_refs.push(`file:artifact:path=${artifact.path} hash=sha256:${hash}`);
|
|
2624
|
-
}
|
|
2625
|
-
// 保存更新后的产物(含 hash)
|
|
2626
|
-
const ctxForHash = await taskContext.load(args.task_id);
|
|
2627
|
-
if (ctxForHash?.artifact_output) {
|
|
2628
|
-
ctxForHash.artifact_output.hash = artifact.hash;
|
|
2629
|
-
if (!ctxForHash.artifact_output.evidence_refs.some(r => r.startsWith("file:artifact:"))) {
|
|
2630
|
-
ctxForHash.artifact_output.evidence_refs.push(`file:artifact:path=${artifact.path} hash=sha256:${hash}`);
|
|
2631
|
-
}
|
|
2632
|
-
await taskContext.save(ctxForHash);
|
|
2633
|
-
}
|
|
2634
|
-
}
|
|
2635
|
-
else {
|
|
2636
|
-
artifactFileMissing = true;
|
|
2637
|
-
}
|
|
2638
|
-
artifactVerificationResult = verifyArtifact(artifact.kind, artifact);
|
|
2639
|
-
}
|
|
2640
|
-
// 记录变更文件
|
|
2641
|
-
// 写入护栏 — 检查变更文件是否在允许范围
|
|
2642
|
-
if (args.changed_files.length > 0) {
|
|
2643
|
-
const guardModule = await lazyEnforcementGuard();
|
|
2644
|
-
const scopePaths = ctx.expansion?.scope?.allowed_paths ?? [];
|
|
2645
|
-
for (const cf of args.changed_files) {
|
|
2646
|
-
const writeFindings = guardModule.evaluateWriteGuard(ctx.classification?.route_decision?.route ?? "code_execution", cf, scopePaths, "command_execution_contract");
|
|
2647
|
-
if (writeFindings.some((f) => f.blocked)) {
|
|
2648
|
-
return {
|
|
2649
|
-
result: {
|
|
2650
|
-
error: `写入护栏阻断: ${writeFindings[0].reason_zh}`,
|
|
2651
|
-
blocked_file: cf,
|
|
2652
|
-
guard_id: writeFindings[0].guard_id,
|
|
2653
|
-
},
|
|
2654
|
-
};
|
|
2655
|
-
}
|
|
2656
|
-
}
|
|
2657
|
-
}
|
|
2658
|
-
await taskContext.setExecution(args.task_id, args.changed_files);
|
|
2659
|
-
// 无实际文件变更但存在产物时标记 no_change_artifact
|
|
2660
|
-
if (args.changed_files.length === 0 && ctx.artifact_output) {
|
|
2661
|
-
const execCtx = await taskContext.load(args.task_id);
|
|
2662
|
-
if (execCtx?.execution) {
|
|
2663
|
-
execCtx.execution.no_change_artifact = true;
|
|
2664
|
-
await taskContext.save(execCtx);
|
|
2665
|
-
}
|
|
2666
|
-
}
|
|
2667
|
-
// 生成验证命令成功后再转换状态,避免操作失败导致任务卡在 verifying
|
|
2668
|
-
if (ctx.status === "retrying") {
|
|
2669
|
-
await taskContext.updateStatus(args.task_id, "executing");
|
|
2670
|
-
}
|
|
2671
|
-
await taskContext.updateStatus(args.task_id, "verifying");
|
|
2672
|
-
// 存储验证结果
|
|
2673
|
-
await taskContext.setVerification(args.task_id, verifyResult);
|
|
2674
|
-
// 产物生命周期转换: draft → verified 仅在 ArtifactVerificationResult.passed 时
|
|
2675
|
-
if (ctx.artifact_output && ctx.artifact_output.status === "draft" && artifactVerificationResult?.passed) {
|
|
2676
|
-
const evidenceRef = `verification:${ctx.task_id}:checks=${artifactVerificationResult.checks.length}:summary=${artifactVerificationResult.summary.slice(0, 60)}`;
|
|
2677
|
-
try {
|
|
2678
|
-
await taskContext.updateArtifactStatus(args.task_id, {
|
|
2679
|
-
status: "verified",
|
|
2680
|
-
evidenceRef,
|
|
2681
|
-
hasVerification: true,
|
|
2682
|
-
});
|
|
2683
|
-
}
|
|
2684
|
-
catch {
|
|
2685
|
-
// 转换被阻止 — 产物保持 draft,流水线继续
|
|
2686
|
-
}
|
|
2687
|
-
}
|
|
2688
|
-
// 认知锚点上下文回放(按变更文件相关性)
|
|
2689
|
-
const verifyAnchors = await loadRelevantAnchors({ file_paths: args.changed_files });
|
|
2690
|
-
const verifyExtras = {};
|
|
2691
|
-
if (h4Warning)
|
|
2692
|
-
verifyExtras.h4_advisory = h4Warning;
|
|
2693
|
-
if (verifyAnchors && verifyAnchors.length > 0)
|
|
2694
|
-
verifyExtras.cognitive_anchors = verifyAnchors;
|
|
2695
|
-
if (ctx.artifact_output && ctx.artifact_output.status === "draft" && artifactVerificationResult && !artifactVerificationResult.passed) {
|
|
2696
|
-
const reason = artifactFileMissing
|
|
2697
|
-
? `产物文件不存在 (${ctx.artifact_output.path}),无法计算 hash`
|
|
2698
|
-
: artifactVerificationResult.summary;
|
|
2699
|
-
verifyExtras.artifact_warning = `产物验收检查未通过: ${reason}`;
|
|
2700
|
-
verifyExtras.artifact_verification = artifactVerificationResult;
|
|
2701
|
-
}
|
|
2702
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2703
|
-
const verifyPayload = Object.keys(verifyExtras).length > 0
|
|
2704
|
-
? { ...verifyResult, ...verifyExtras }
|
|
2705
|
-
: { ...verifyResult };
|
|
2706
|
-
// 附加验证契约引用到返回结果
|
|
2707
|
-
verifyPayload.verification_plan = vPlan;
|
|
2708
|
-
verifyPayload.verification_result = vResult;
|
|
2709
|
-
// 问题六十:验证结论必须经过 FactClaimVerifier,不得把计划当结果
|
|
2710
|
-
{
|
|
2711
|
-
const { createEvidenceGroundingSystem, assessTaskRisk } = await import("../../engine/evidence_grounding_contract.js");
|
|
2712
|
-
const _vRoute = ctx.route_decision?.route ?? ctx.classification?.route_decision?.route;
|
|
2713
|
-
const _vRisk = assessTaskRisk(ctx.classification?.task_type, _vRoute, ctx.intent);
|
|
2714
|
-
if (_vRisk !== "low") {
|
|
2715
|
-
const _veg = createEvidenceGroundingSystem();
|
|
2716
|
-
// 只有真实执行结果才能作为 validation_result 证据
|
|
2717
|
-
const _hasRealPassed = ctx.verification_result && ctx.verification_result.status === "passed";
|
|
2718
|
-
if (_hasRealPassed) {
|
|
2719
|
-
_veg.registry.register({
|
|
2720
|
-
source_type: "validation_result",
|
|
2721
|
-
authority: "authoritative",
|
|
2722
|
-
freshness: "current",
|
|
2723
|
-
permission: "allowed",
|
|
2724
|
-
scope: "verification",
|
|
2725
|
-
description: `验证状态: ${ctx.verification_result.status}`,
|
|
2726
|
-
source_ref: `verification:${args.task_id}`,
|
|
2727
|
-
});
|
|
2728
|
-
}
|
|
2729
|
-
// 验证计划注册为 task_context,不冒充 validation_result
|
|
2730
|
-
_veg.registry.register({
|
|
2731
|
-
source_type: "task_context",
|
|
2732
|
-
authority: "supporting",
|
|
2733
|
-
freshness: "current",
|
|
2734
|
-
permission: "allowed",
|
|
2735
|
-
scope: "verification_plan",
|
|
2736
|
-
description: `验证计划: ${vPlan ? "已生成" : "未生成"}`,
|
|
2737
|
-
source_ref: `verification-plan:${args.task_id}`,
|
|
2738
|
-
});
|
|
2739
|
-
if (args.changed_files.length > 0) {
|
|
2740
|
-
_veg.registry.register({
|
|
2741
|
-
source_type: "project_file",
|
|
2742
|
-
authority: "authoritative",
|
|
2743
|
-
freshness: "current",
|
|
2744
|
-
permission: "allowed",
|
|
2745
|
-
scope: "changed_files",
|
|
2746
|
-
description: `变更文件: ${args.changed_files.join(", ")}`,
|
|
2747
|
-
source_ref: `files:${args.changed_files.join(",")}`,
|
|
2748
|
-
});
|
|
2749
|
-
}
|
|
2750
|
-
const _vClaims = [{
|
|
2751
|
-
id: "claim-verify-1",
|
|
2752
|
-
category: "validation_result",
|
|
2753
|
-
claim_text: "验证结果基于真实命令执行",
|
|
2754
|
-
evidence_ids: _veg.registry.query({ source_type: "validation_result" }).map((e) => e.id),
|
|
2755
|
-
is_uncertain: false,
|
|
2756
|
-
risk_level: _vRisk,
|
|
2757
|
-
}];
|
|
2758
|
-
const _vVerResult = _veg.verifier.verify(_vClaims, _vRisk);
|
|
2759
|
-
const _vMatrix = _veg.builder.buildContext(_vClaims, {
|
|
2760
|
-
target_claims: _vClaims.map((c) => c.claim_text),
|
|
2761
|
-
source_types: [], keywords: [], max_results: 10,
|
|
2762
|
-
});
|
|
2763
|
-
_vMatrix.task_id = args.task_id;
|
|
2764
|
-
const _vGate = _veg.gate.evaluate(_vMatrix, _vRisk);
|
|
2765
|
-
// 写回 TaskContext
|
|
2766
|
-
await taskContext.setEvidenceGroundingResult(args.task_id, {
|
|
2767
|
-
evidence_matrix: _vMatrix,
|
|
2768
|
-
evidence_gate_result: _vGate,
|
|
2769
|
-
unsupported_claims: _vGate.unsupported_claims,
|
|
2770
|
-
conflict_resolutions: _vMatrix.conflicts,
|
|
2771
|
-
});
|
|
2772
|
-
if (_vVerResult.unsupported.length > 0) {
|
|
2773
|
-
// 高风险:只有 plan 无 result → 写入 payload(不用 verifyExtras)
|
|
2774
|
-
verifyPayload._evidence_status = "not_verified";
|
|
2775
|
-
verifyPayload._evidence_reason = "验证结论需真实命令执行结果支撑,验证计划不能当作验证结果。请通过 sf_record_verification_execution 录入真实验证结果。";
|
|
2776
|
-
if (_vRisk === "high" || _vRisk === "critical") {
|
|
2777
|
-
verifyPayload._evidence_blocked = true;
|
|
2778
|
-
}
|
|
2779
|
-
else {
|
|
2780
|
-
verifyPayload._evidence_advisory = "验证结论需真实命令执行结果支撑,验证计划不能当作验证结果";
|
|
2781
|
-
}
|
|
2782
|
-
}
|
|
2783
|
-
}
|
|
2784
|
-
}
|
|
2785
|
-
// 验证后核心体验评估
|
|
2786
|
-
try {
|
|
2787
|
-
const hasVerificationEvidence = (verifyResult.checks?.build?.length ?? 0) > 0 || (verifyResult.checks?.tests?.length ?? 0) > 0;
|
|
2788
|
-
const cepEvalResult = await assessCepAfterVerification({
|
|
2789
|
-
task_id: args.task_id,
|
|
2790
|
-
has_verification_evidence: hasVerificationEvidence,
|
|
2791
|
-
});
|
|
2792
|
-
// 将完整 CEP 结果写入 TaskContext
|
|
2793
|
-
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
2794
|
-
const fullCepEval = cepModule.evaluateCoreExperiencePrinciple({
|
|
2795
|
-
task_id: args.task_id, workflow_id: "sf_verify",
|
|
2796
|
-
has_mainline_hooks: true, has_owner_contracts: true, natural_language_entry: true,
|
|
2797
|
-
requires_internal_contract_knowledge: false, user_path_steps: 3,
|
|
2798
|
-
has_failures: false, hard_fail_downgraded: false, forced_heavy_process: false,
|
|
2799
|
-
has_sufficient_evidence: hasVerificationEvidence,
|
|
2800
|
-
output_too_long_no_summary: false, report_only_no_repair: false,
|
|
2801
|
-
failed_but_marked_done: false, auto_repair_overreach: false,
|
|
2802
|
-
repair_reverified: false, outputs_raw_noise: false,
|
|
2803
|
-
});
|
|
2804
|
-
const ctxForCep = await taskContext.load(args.task_id);
|
|
2805
|
-
if (ctxForCep) {
|
|
2806
|
-
ctxForCep.core_experience_evaluation = fullCepEval;
|
|
2807
|
-
await taskContext.save(ctxForCep);
|
|
2808
|
-
}
|
|
2809
|
-
}
|
|
2810
|
-
catch (cepErr) {
|
|
2811
|
-
internalWarn("CEP评估", "评估异常 (task=" + args.task_id + "):", cepErr?.message ?? cepErr);
|
|
2812
|
-
}
|
|
2813
|
-
return {
|
|
2814
|
-
result: verifyPayload,
|
|
2815
|
-
};
|
|
2816
|
-
});
|
|
2817
|
-
// ── sf_record_verification_execution: 录入真实验证执行结果(唯一 passed 入口) ──
|
|
2818
|
-
registerSafeTool("sf_record_verification_execution", "录入真实验证执行结果,VerificationResult.status=passed 的唯一合法入口", RecordVerificationExecutionSchema, async (args) => {
|
|
2819
|
-
const ctx = await taskContext.load(args.task_id);
|
|
2820
|
-
if (!ctx) {
|
|
2821
|
-
return { result: { error: "任务不存在" } };
|
|
2822
|
-
}
|
|
2823
|
-
// 必须有 VerificationPlan
|
|
2824
|
-
const currentPlan = ctx.verification_plan;
|
|
2825
|
-
if (!currentPlan) {
|
|
2826
|
-
return { result: { error: "任务无 VerificationPlan,先执行 sf_verify 生成计划" } };
|
|
2827
|
-
}
|
|
2828
|
-
// plan_id 必须与 TaskContext 中当前 plan 一致
|
|
2829
|
-
if (args.plan_id !== currentPlan.plan_id) {
|
|
2830
|
-
return {
|
|
2831
|
-
result: {
|
|
2832
|
-
error: `plan_id 不匹配: 请求 "${args.plan_id}",当前任务计划 "${currentPlan.plan_id}" [${TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch}]`,
|
|
2833
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch,
|
|
2834
|
-
},
|
|
2835
|
-
};
|
|
2836
|
-
}
|
|
2837
|
-
const vcModule = await lazyVerificationContract();
|
|
2838
|
-
const result = vcModule.recordVerificationExecution(args.task_id, args.plan_id, args.execution_records, currentPlan);
|
|
2839
|
-
// 持久化到 TaskContext
|
|
2840
|
-
const ctxForSave = await taskContext.load(args.task_id);
|
|
2841
|
-
if (ctxForSave) {
|
|
2842
|
-
ctxForSave.verification_result = result;
|
|
2843
|
-
await taskContext.save(ctxForSave);
|
|
2844
|
-
}
|
|
2845
|
-
return { result };
|
|
2846
|
-
});
|
|
2847
|
-
// ── sf_learn: 从执行结果中提取知识,支持重试循环控制 ──
|
|
2848
|
-
registerSafeTool("sf_learn", "从任务执行结果中提取知识,低置信度暂存,高置信度直接入库", LearnSchema, async (args) => {
|
|
2849
|
-
const ctx = await taskContext.load(args.task_id);
|
|
2850
|
-
if (!ctx) {
|
|
2851
|
-
return {
|
|
2852
|
-
result: { error: "任务不存在" },
|
|
2853
|
-
};
|
|
2854
|
-
}
|
|
2855
|
-
const VALID_LEARN_STATES = ["verifying", "executing"];
|
|
2856
|
-
if (!VALID_LEARN_STATES.includes(ctx.status)) {
|
|
2857
|
-
return {
|
|
2858
|
-
result: { error: `任务状态 ${ctx.status} 不可学习,需要 verifying 或 executing`, status: ctx.status },
|
|
2859
|
-
};
|
|
2860
|
-
}
|
|
2861
|
-
// 如适用,记录失败
|
|
2862
|
-
if (args.result === "failure" && args.failure_type) {
|
|
2863
|
-
await taskContext.setExecution(args.task_id, [], {
|
|
2864
|
-
attempt: (ctx.execution?.attempt_count ?? 0) + 1,
|
|
2865
|
-
type: args.failure_type,
|
|
2866
|
-
message: args.verify_output
|
|
2867
|
-
? `build=${args.verify_output.build_passed} tests=${args.verify_output.tests_passed}`
|
|
2868
|
-
: "unknown failure",
|
|
2869
|
-
timestamp: new Date().toISOString(),
|
|
2870
|
-
});
|
|
2871
|
-
// 创建 FailureReport(脱敏,非 raw error_output)
|
|
2872
|
-
const frModule = await lazyFailureReport();
|
|
2873
|
-
const failureClass = args.failure_type;
|
|
2874
|
-
const errorOutput = args.verify_output
|
|
2875
|
-
? `build=${args.verify_output.build_passed} tests=${args.verify_output.tests_passed}`
|
|
2876
|
-
: "unknown failure";
|
|
2877
|
-
const retryCount = (ctx.execution?.attempt_count ?? 0) + 1;
|
|
2878
|
-
const policy = frModule.getRecoveryPolicy(failureClass);
|
|
2879
|
-
const failureReport = frModule.createFailureReport(args.task_id, failureClass, errorOutput, retryCount, policy?.max_retries ?? 0);
|
|
2880
|
-
// 存储 FailureReport 到任务上下文
|
|
2881
|
-
const ctxForFailure = await taskContext.load(args.task_id);
|
|
2882
|
-
if (ctxForFailure) {
|
|
2883
|
-
ctxForFailure.failure_report = failureReport;
|
|
2884
|
-
await taskContext.save(ctxForFailure);
|
|
2885
|
-
}
|
|
2886
|
-
// verifier 不可用时创建 DegradationEvent
|
|
2887
|
-
if (!args.verify_output) {
|
|
2888
|
-
const degModule = await lazyDegradation();
|
|
2889
|
-
const degradationEvent = degModule.createDegradationEvent(args.task_id, "verifier", "full", "验证器输出不可用,无法判断 build/test 结果", ["verification_execution"]);
|
|
2890
|
-
if (degradationEvent) {
|
|
2891
|
-
const ctxForDeg = await taskContext.load(args.task_id);
|
|
2892
|
-
if (ctxForDeg) {
|
|
2893
|
-
ctxForDeg.degradation_event = degradationEvent;
|
|
2894
|
-
await taskContext.save(ctxForDeg);
|
|
2895
|
-
}
|
|
2896
|
-
}
|
|
2897
|
-
}
|
|
2898
|
-
}
|
|
2899
|
-
// 转换到学习阶段
|
|
2900
|
-
await taskContext.updateStatus(args.task_id, "learning");
|
|
2901
|
-
const learnResult = await (await lazyEvolver()).evolve({
|
|
2902
|
-
taskContext: ctx,
|
|
2903
|
-
result: args.result,
|
|
2904
|
-
verifyOutput: args.verify_output,
|
|
2905
|
-
failureType: args.failure_type,
|
|
2906
|
-
retryCount: ctx.execution?.attempt_count ?? 0,
|
|
2907
|
-
}, projectPath);
|
|
2908
|
-
// 确定最终状态: 重试或完成
|
|
2909
|
-
const attemptCount = (ctx.execution?.attempt_count ?? 0) + (args.result === "failure" ? 1 : 0);
|
|
2910
|
-
const maxAttempts = ctx.execution?.max_attempts ?? 3;
|
|
2911
|
-
if (args.result === "failure" && attemptCount < maxAttempts && args.failure_type !== "deterministic") {
|
|
2912
|
-
// 可重试: 转换到重试阶段
|
|
2913
|
-
await taskContext.updateStatus(args.task_id, "retrying");
|
|
2914
|
-
learnResult.retry_hint = `第 ${attemptCount}/${maxAttempts} 次尝试失败,${args.failure_type === "scope_insufficient" ? "需要扩大范围" : "请修复后重试"}`;
|
|
2915
|
-
}
|
|
2916
|
-
else {
|
|
2917
|
-
// 检查主链路集成 — 即使 build/test 全绿,孤岛仍阻断 done
|
|
2918
|
-
const integrationBlocked = ctx.verification?.main_path_integration
|
|
2919
|
-
&& !ctx.verification.main_path_integration.passed;
|
|
2920
|
-
// 核心工程执行原则门禁 — required 原则失败不能进入 completed
|
|
2921
|
-
const principlesBlocked = ctx.verification?.core_principles
|
|
2922
|
-
&& !ctx.verification.core_principles.overall_passed;
|
|
2923
|
-
const finalStatus = args.result === "failure"
|
|
2924
|
-
? "failed"
|
|
2925
|
-
: (integrationBlocked || principlesBlocked) ? "retrying" : "done";
|
|
2926
|
-
await taskContext.updateStatus(args.task_id, finalStatus);
|
|
2927
|
-
if (integrationBlocked && finalStatus === "retrying") {
|
|
2928
|
-
learnResult.retry_hint = "主链路集成检查失败: 存在孤岛模块,请接入主链路后重试";
|
|
2929
|
-
}
|
|
2930
|
-
if (principlesBlocked && finalStatus === "retrying") {
|
|
2931
|
-
const failedPrinciples = ctx.verification.core_principles.principles
|
|
2932
|
-
.filter((p) => p.status === "failed")
|
|
2933
|
-
.map((p) => p.principle_id);
|
|
2934
|
-
learnResult.retry_hint = `核心工程执行原则检查失败: ${failedPrinciples.join(", ")},请修复后重试`;
|
|
2935
|
-
}
|
|
2936
|
-
}
|
|
2937
|
-
return {
|
|
2938
|
-
result: learnResult,
|
|
2939
|
-
};
|
|
2940
|
-
});
|
|
2941
|
-
// ── sf_status: 任务状态查询(current/recent/resume/cancel) ──
|
|
2942
|
-
registerSafeTool("sf_status", "查询当前任务状态、列出近期任务、恢复中断任务或取消任务", StatusSchema, async (args) => {
|
|
2943
|
-
const action = args.action || "current";
|
|
2944
|
-
// Job 操作 — advisory,独立于任务操作
|
|
2945
|
-
if (args.job_action) {
|
|
2946
|
-
if (!args.job_id) {
|
|
2947
|
-
return {
|
|
2948
|
-
result: { error: "job 操作需要 job_id" },
|
|
2949
|
-
};
|
|
2950
|
-
}
|
|
2951
|
-
const jm = new (await lazyJob()).JobManager(taskContext.getStateDir());
|
|
2952
|
-
const taskId = args.task_id ?? await jm.resolveTaskId(args.job_id) ?? "";
|
|
2953
|
-
if (args.job_action === "job_status") {
|
|
2954
|
-
const status = await jm.getJobStatus(args.job_id, taskId);
|
|
2955
|
-
if (!status) {
|
|
2956
|
-
return {
|
|
2957
|
-
result: { error: `job ${args.job_id} 不存在或已过期` },
|
|
2958
|
-
};
|
|
2959
|
-
}
|
|
2960
|
-
return {
|
|
2961
|
-
result: { job: status },
|
|
2962
|
-
};
|
|
2963
|
-
}
|
|
2964
|
-
if (args.job_action === "job_resume") {
|
|
2965
|
-
const checkpoint = await jm.resumeFromCheckpoint(args.job_id, taskId);
|
|
2966
|
-
if (!checkpoint) {
|
|
2967
|
-
return {
|
|
2968
|
-
result: { error: `job ${args.job_id} 无可恢复的 checkpoint` },
|
|
2969
|
-
};
|
|
2970
|
-
}
|
|
2971
|
-
return {
|
|
2972
|
-
result: {
|
|
2973
|
-
advisory: "job 恢复为 advisory 操作,需确认 checkpoint 数据与当前状态一致",
|
|
2974
|
-
job_id: checkpoint.job_id,
|
|
2975
|
-
task_id: checkpoint.task_id,
|
|
2976
|
-
phase: checkpoint.phase,
|
|
2977
|
-
checkpoint_number: checkpoint.checkpoint_number,
|
|
2978
|
-
cognitive_anchor: checkpoint.cognitive_anchor,
|
|
2979
|
-
},
|
|
2980
|
-
};
|
|
2981
|
-
}
|
|
2982
|
-
if (args.job_action === "job_cancel") {
|
|
2983
|
-
const removed = await jm.cancelJob(args.job_id, taskId);
|
|
2984
|
-
return {
|
|
2985
|
-
result: {
|
|
2986
|
-
advisory: "job 取消为 advisory 操作",
|
|
2987
|
-
job_id: args.job_id,
|
|
2988
|
-
cancelled: removed,
|
|
2989
|
-
},
|
|
2990
|
-
};
|
|
2991
|
-
}
|
|
2992
|
-
}
|
|
2993
|
-
// 读取前自动将过期非终态任务标记为失败
|
|
2994
|
-
try {
|
|
2995
|
-
await taskContext.autoFailStale();
|
|
2996
|
-
}
|
|
2997
|
-
catch (e) {
|
|
2998
|
-
internalWarn("autoFailStale", "出错:", e);
|
|
2999
|
-
}
|
|
3000
|
-
switch (action) {
|
|
3001
|
-
case "current": {
|
|
3002
|
-
const ctx = args.task_id
|
|
3003
|
-
? await taskContext.load(args.task_id)
|
|
3004
|
-
: await taskContext.getCurrentTask();
|
|
3005
|
-
if (!ctx) {
|
|
3006
|
-
return {
|
|
3007
|
-
result: { message: "当前无活跃任务" },
|
|
3008
|
-
};
|
|
3009
|
-
}
|
|
3010
|
-
const resumable = taskContext.isResumable(ctx);
|
|
3011
|
-
const result = {
|
|
3012
|
-
task_id: ctx.task_id,
|
|
3013
|
-
intent: ctx.intent,
|
|
3014
|
-
status: ctx.status,
|
|
3015
|
-
created_at: ctx.created_at,
|
|
3016
|
-
resumable,
|
|
3017
|
-
};
|
|
3018
|
-
if (resumable) {
|
|
3019
|
-
result.resume_hint = taskContext.getResumeHint(ctx);
|
|
3020
|
-
}
|
|
3021
|
-
if (ctx.classification) {
|
|
3022
|
-
result.task_type = ctx.classification.task_type;
|
|
3023
|
-
result.risk = ctx.classification.risk;
|
|
3024
|
-
result.strategy = ctx.classification.strategy;
|
|
3025
|
-
}
|
|
3026
|
-
if (ctx.execution) {
|
|
3027
|
-
result.changed_files = ctx.execution.changed_files;
|
|
3028
|
-
result.attempt_count = ctx.execution.attempt_count;
|
|
3029
|
-
}
|
|
3030
|
-
// JobManager advisory: 查询关联 job 状态
|
|
3031
|
-
try {
|
|
3032
|
-
const jm = new (await lazyJob()).JobManager(taskContext.getStateDir());
|
|
3033
|
-
const activeJobs = await jm.listActiveJobs();
|
|
3034
|
-
const relatedJob = activeJobs.find((j) => j.task_id === ctx.task_id);
|
|
3035
|
-
if (relatedJob) {
|
|
3036
|
-
result.job = {
|
|
3037
|
-
job_id: relatedJob.job_id,
|
|
3038
|
-
phase: relatedJob.current_phase,
|
|
3039
|
-
checkpoint_count: relatedJob.checkpoint_count,
|
|
3040
|
-
is_alive: relatedJob.is_alive,
|
|
3041
|
-
latest_anchor_summary: relatedJob.latest_anchor?.summary,
|
|
3042
|
-
};
|
|
3043
|
-
}
|
|
3044
|
-
}
|
|
3045
|
-
catch {
|
|
3046
|
-
// JobManager advisory — 忽略错误
|
|
3047
|
-
}
|
|
3048
|
-
return {
|
|
3049
|
-
result: result,
|
|
3050
|
-
};
|
|
3051
|
-
}
|
|
3052
|
-
case "recent": {
|
|
3053
|
-
const recent = await taskContext.listRecent(10);
|
|
3054
|
-
return {
|
|
3055
|
-
result: { tasks: recent },
|
|
3056
|
-
};
|
|
3057
|
-
}
|
|
3058
|
-
case "resume": {
|
|
3059
|
-
if (!args.task_id) {
|
|
3060
|
-
return {
|
|
3061
|
-
result: { error: "恢复任务需要 task_id" },
|
|
3062
|
-
};
|
|
3063
|
-
}
|
|
3064
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3065
|
-
if (!ctx) {
|
|
3066
|
-
return {
|
|
3067
|
-
result: { error: "任务不存在" },
|
|
3068
|
-
};
|
|
3069
|
-
}
|
|
3070
|
-
if (!taskContext.isResumable(ctx)) {
|
|
3071
|
-
return {
|
|
3072
|
-
result: { error: `任务状态 ${ctx.status} 不可恢复`, status: ctx.status },
|
|
3073
|
-
};
|
|
3074
|
-
}
|
|
3075
|
-
const resumeResult = {
|
|
3076
|
-
task_id: ctx.task_id,
|
|
3077
|
-
intent: ctx.intent,
|
|
3078
|
-
status: ctx.status,
|
|
3079
|
-
resume_hint: taskContext.getResumeHint(ctx),
|
|
3080
|
-
};
|
|
3081
|
-
if (ctx.execution)
|
|
3082
|
-
resumeResult.execution = ctx.execution;
|
|
3083
|
-
const resumeAnchors = ctx.execution?.changed_files
|
|
3084
|
-
? await loadRelevantAnchors({ file_paths: ctx.execution.changed_files })
|
|
3085
|
-
: undefined;
|
|
3086
|
-
if (resumeAnchors && resumeAnchors.length > 0)
|
|
3087
|
-
resumeResult.cognitive_anchors = resumeAnchors;
|
|
3088
|
-
return { result: resumeResult };
|
|
3089
|
-
}
|
|
3090
|
-
case "cancel": {
|
|
3091
|
-
if (!args.task_id) {
|
|
3092
|
-
return {
|
|
3093
|
-
result: { error: "取消任务需要 task_id" },
|
|
3094
|
-
};
|
|
3095
|
-
}
|
|
3096
|
-
const cancelled = await taskContext.cancel(args.task_id);
|
|
3097
|
-
return {
|
|
3098
|
-
result: { task_id: args.task_id, cancelled },
|
|
3099
|
-
};
|
|
3100
|
-
}
|
|
3101
|
-
case "retry_expand": {
|
|
3102
|
-
if (!args.task_id) {
|
|
3103
|
-
return {
|
|
3104
|
-
result: { error: "重试 expand 需要 task_id" },
|
|
3105
|
-
};
|
|
3106
|
-
}
|
|
3107
|
-
const retried = await taskContext.retryExpand(args.task_id);
|
|
3108
|
-
if (!retried) {
|
|
3109
|
-
return {
|
|
3110
|
-
result: { error: "任务不存在、非 failed 状态或缺少 classification,无法重试 expand", task_id: args.task_id },
|
|
3111
|
-
};
|
|
3112
|
-
}
|
|
3113
|
-
return {
|
|
3114
|
-
result: { task_id: args.task_id, retried: true, hint: "任务已恢复到 expanding 状态,可重新调用 sf_expand" },
|
|
3115
|
-
};
|
|
3116
|
-
}
|
|
3117
|
-
case "archive_stale": {
|
|
3118
|
-
const stale = await detectStaleCurrentTask(taskContext.getStateDir());
|
|
3119
|
-
const taskId = args.task_id ?? stale.task_id;
|
|
3120
|
-
if (!taskId) {
|
|
3121
|
-
return {
|
|
3122
|
-
result: { error: "归档陈旧任务指针需要 task_id,且当前未检测到陈旧任务" },
|
|
3123
|
-
};
|
|
3124
|
-
}
|
|
3125
|
-
if (!stale.is_stale || stale.task_id !== taskId) {
|
|
3126
|
-
return {
|
|
3127
|
-
result: {
|
|
3128
|
-
error: "当前任务指针未被判定为陈旧,不执行归档",
|
|
3129
|
-
task_id: taskId,
|
|
3130
|
-
stale_task: stale.is_stale ? stale : null,
|
|
3131
|
-
},
|
|
3132
|
-
};
|
|
3133
|
-
}
|
|
3134
|
-
const archived = await archiveStaleCurrentPointer(taskContext.getStateDir(), taskId);
|
|
3135
|
-
return {
|
|
3136
|
-
result: {
|
|
3137
|
-
task_id: taskId,
|
|
3138
|
-
archived,
|
|
3139
|
-
archived_pointer_only: true,
|
|
3140
|
-
task_file_preserved: true,
|
|
3141
|
-
},
|
|
3142
|
-
};
|
|
3143
|
-
}
|
|
3144
|
-
default:
|
|
3145
|
-
return {
|
|
3146
|
-
result: { error: `未知操作: ${action}` },
|
|
3147
|
-
};
|
|
3148
|
-
}
|
|
3149
|
-
});
|
|
3150
|
-
// ── sf_plan: 复杂意图任务拆解为子任务列表 ──
|
|
3151
|
-
registerSafeTool("sf_plan", "将复杂意图拆解为子任务列表。支持知识驱动的 pipeline_procedure 流程(自动绑定模板)和仓库边界拆分两种策略。仅在 complexity=high 时有效", PlanSchema, async (args) => {
|
|
3152
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3153
|
-
if (!ctx?.classification) {
|
|
3154
|
-
return {
|
|
3155
|
-
result: { error: "任务不存在或尚未分类" },
|
|
3156
|
-
};
|
|
3157
|
-
}
|
|
3158
|
-
const result = (await lazyPlanner()).planTask({
|
|
3159
|
-
intent: ctx.intent,
|
|
3160
|
-
classification: ctx.classification,
|
|
3161
|
-
config,
|
|
3162
|
-
knowledgeIndex,
|
|
3163
|
-
});
|
|
3164
|
-
result.task_id = args.task_id;
|
|
3165
|
-
await taskContext.setPlanning(args.task_id, result);
|
|
3166
|
-
return {
|
|
3167
|
-
result: result,
|
|
3168
|
-
};
|
|
3169
|
-
});
|
|
3170
|
-
// ── sf_plan_advance: 推进多阶段计划到下一步 ──
|
|
3171
|
-
registerSafeTool("sf_plan_advance", "将多阶段计划推进到下一步。完成当前阶段后调用,自动更新 current_step_index 并返回下一阶段信息", PlanSchema, async (args) => {
|
|
3172
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3173
|
-
if (!ctx?.planning || ctx.planning.sub_tasks.length === 0) {
|
|
3174
|
-
return {
|
|
3175
|
-
result: { error: "任务没有多阶段计划,请先调用 sf_plan" },
|
|
3176
|
-
};
|
|
3177
|
-
}
|
|
3178
|
-
const plan = ctx.planning;
|
|
3179
|
-
const previousStep = plan.sub_tasks[plan.current_step_index];
|
|
3180
|
-
const previousStepTitle = previousStep?.title ?? "未知";
|
|
3181
|
-
const nextIndex = plan.current_step_index + 1;
|
|
3182
|
-
if (nextIndex >= plan.sub_tasks.length) {
|
|
3183
|
-
return { result: {
|
|
3184
|
-
task_id: args.task_id,
|
|
3185
|
-
previous_step: previousStepTitle,
|
|
3186
|
-
current_step_index: plan.current_step_index,
|
|
3187
|
-
total_steps: plan.sub_tasks.length,
|
|
3188
|
-
is_completed: true,
|
|
3189
|
-
message: `所有 ${plan.sub_tasks.length} 个阶段已完成`,
|
|
3190
|
-
} };
|
|
3191
|
-
}
|
|
3192
|
-
// 推进阶段索引
|
|
3193
|
-
plan.current_step_index = nextIndex;
|
|
3194
|
-
await taskContext.setPlanning(args.task_id, plan);
|
|
3195
|
-
const nextStep = plan.sub_tasks[nextIndex];
|
|
3196
|
-
return {
|
|
3197
|
-
result: {
|
|
3198
|
-
task_id: args.task_id,
|
|
3199
|
-
previous_step: previousStepTitle,
|
|
3200
|
-
current_step_index: nextIndex,
|
|
3201
|
-
current_step: {
|
|
3202
|
-
id: nextStep.id,
|
|
3203
|
-
title: nextStep.title,
|
|
3204
|
-
output_path: nextStep.output_path,
|
|
3205
|
-
},
|
|
3206
|
-
total_steps: plan.sub_tasks.length,
|
|
3207
|
-
is_completed: false,
|
|
3208
|
-
message: `阶段推进: ${previousStepTitle} → ${nextStep.title}`,
|
|
3209
|
-
},
|
|
3210
|
-
};
|
|
3211
|
-
});
|
|
3212
|
-
// ── sf_analyze: 影响范围分析,建议是否扩大作用域 ──
|
|
3213
|
-
registerSafeTool("sf_analyze", "分析意图的影响范围,对比声明范围,提示是否需要扩大作用域。建议性,不强制", AnalyzeSchema, async (args) => {
|
|
3214
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3215
|
-
if (!ctx?.expansion) {
|
|
3216
|
-
return {
|
|
3217
|
-
result: { error: "任务尚未膨胀,请先调用 sf_expand" },
|
|
3218
|
-
};
|
|
3219
|
-
}
|
|
3220
|
-
const result = await (await lazyImpact()).analyzeImpact({
|
|
3221
|
-
intent: ctx.intent,
|
|
3222
|
-
classification: ctx.classification,
|
|
3223
|
-
expansion: ctx.expansion,
|
|
3224
|
-
config,
|
|
3225
|
-
projectPath,
|
|
3226
|
-
});
|
|
3227
|
-
result.task_id = args.task_id;
|
|
3228
|
-
// 决策契约 advisory: 校验 analyze 输出
|
|
3229
|
-
const decisionContract = (await lazyDecision()).validateDecisionOutput(result);
|
|
3230
|
-
const advisoryExtras = {};
|
|
3231
|
-
if (!decisionContract.passed) {
|
|
3232
|
-
advisoryExtras.decision_contract_advisory = decisionContract.advisory;
|
|
3233
|
-
}
|
|
3234
|
-
return { result: Object.keys(advisoryExtras).length > 0 ? { ...result, ...advisoryExtras } : result };
|
|
3235
|
-
});
|
|
3236
|
-
// ── sf_review: 代码审查(质量、安全、性能、技术债务) ──
|
|
3237
|
-
registerSafeTool("sf_review", "审查代码变更的质量、安全、性能和技术债务。hotfix 场景可跳过。建议性,不强制修复", ReviewSchema, async (args) => {
|
|
3238
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3239
|
-
if (!ctx) {
|
|
3240
|
-
return {
|
|
3241
|
-
result: { error: "任务不存在" },
|
|
3242
|
-
};
|
|
3243
|
-
}
|
|
3244
|
-
const tracker = new (await lazyDebt()).DebtTracker(projectPath);
|
|
3245
|
-
const result = await (await lazyReviewer()).reviewCode({
|
|
3246
|
-
changedFiles: args.changed_files,
|
|
3247
|
-
projectPath,
|
|
3248
|
-
config,
|
|
3249
|
-
classification: ctx.classification,
|
|
3250
|
-
fileContents: args.file_contents,
|
|
3251
|
-
knowledgeIndex,
|
|
3252
|
-
uncertainty_triggers: ctx.expansion?.uncertainty_triggers,
|
|
3253
|
-
}, tracker);
|
|
3254
|
-
result.task_id = args.task_id;
|
|
3255
|
-
await taskContext.setCodeReview(args.task_id, result);
|
|
3256
|
-
const contractContents = { ...(args.file_contents ?? {}) };
|
|
3257
|
-
for (const changedFile of args.changed_files) {
|
|
3258
|
-
if (contractContents[changedFile] !== undefined)
|
|
3259
|
-
continue;
|
|
3260
|
-
const absoluteFile = path.resolve(projectPath, changedFile);
|
|
3261
|
-
try {
|
|
3262
|
-
if (isSameOrDescendantPath(absoluteFile, path.resolve(projectPath), { caseSensitive: false }) && (await fsp.stat(absoluteFile)).isFile()) {
|
|
3263
|
-
contractContents[changedFile] = await fsp.readFile(absoluteFile, "utf-8");
|
|
3264
|
-
}
|
|
3265
|
-
}
|
|
3266
|
-
catch {
|
|
3267
|
-
// 无法读取的文件留给现有 reviewer 报告,不制造假结论。
|
|
3268
|
-
}
|
|
3269
|
-
}
|
|
3270
|
-
const oodModule = await lazyOodSolid();
|
|
3271
|
-
const solidFindings = oodModule.requiresOodSolidContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
|
|
3272
|
-
|| ctx.ood_solid_summary
|
|
3273
|
-
? [
|
|
3274
|
-
...oodModule.reviewSolidCode(contractContents),
|
|
3275
|
-
...oodModule.evaluateOverdesignRisk(ctx.intent, ctx.ood_solid_summary),
|
|
3276
|
-
]
|
|
3277
|
-
: [];
|
|
3278
|
-
const backendModule = await lazyBackendImplementation();
|
|
3279
|
-
const backendFindings = backendModule.requiresBackendImplementationContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
|
|
3280
|
-
|| ctx.backend_implementation_work_package
|
|
3281
|
-
? backendModule.reviewBackendImplementationFiles(contractContents)
|
|
3282
|
-
: [];
|
|
3283
|
-
// 问题六十八: 代码可维护性与可观测性审查
|
|
3284
|
-
const obsModule = await lazyCodeObservability();
|
|
3285
|
-
const obsFindings = obsModule.requiresCodeObservabilityContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
|
|
3286
|
-
|| ctx.code_observability_work_package
|
|
3287
|
-
? obsModule.reviewCodeObservability(contractContents)
|
|
3288
|
-
: [];
|
|
3289
|
-
if (solidFindings.length > 0 || backendFindings.length > 0 || obsFindings.length > 0) {
|
|
3290
|
-
const updatedCtx = await taskContext.load(args.task_id);
|
|
3291
|
-
if (updatedCtx) {
|
|
3292
|
-
updatedCtx.ood_solid_findings = solidFindings;
|
|
3293
|
-
updatedCtx.backend_implementation_findings = backendFindings;
|
|
3294
|
-
updatedCtx.code_observability_findings = obsFindings;
|
|
3295
|
-
await taskContext.save(updatedCtx);
|
|
3296
|
-
}
|
|
3297
|
-
}
|
|
3298
|
-
// 决策契约 advisory: 校验 review 输出
|
|
3299
|
-
const decisionContract = (await lazyDecision()).validateDecisionOutput(result);
|
|
3300
|
-
const reviewExtras = {};
|
|
3301
|
-
if (!decisionContract.passed) {
|
|
3302
|
-
reviewExtras.decision_contract_advisory = decisionContract.advisory;
|
|
3303
|
-
}
|
|
3304
|
-
if (solidFindings.length > 0)
|
|
3305
|
-
reviewExtras.ood_solid_findings = solidFindings;
|
|
3306
|
-
if (backendFindings.length > 0)
|
|
3307
|
-
reviewExtras.backend_implementation_findings = backendFindings;
|
|
3308
|
-
if (obsFindings.length > 0)
|
|
3309
|
-
reviewExtras.code_observability_findings = obsFindings;
|
|
3310
|
-
if (oodModule.hasBlockingSolidFindings(solidFindings) || backendModule.hasBlockingBackendFindings(backendFindings) || obsModule.hasBlockingObservabilityFindings(obsFindings)) {
|
|
3311
|
-
reviewExtras.delivery_blocked = true;
|
|
3312
|
-
reviewExtras.diagnostic_code = "SF-IMPLEMENTATION-CONTRACT-REVIEW-BLOCKED";
|
|
3313
|
-
}
|
|
3314
|
-
return { result: Object.keys(reviewExtras).length > 0 ? { ...result, ...reviewExtras } : result };
|
|
3315
|
-
});
|
|
3316
|
-
// ── sf_scaffold: 生成标准化代码骨架 ──
|
|
3317
|
-
registerSafeTool("sf_scaffold", "根据项目模板生成标准化代码骨架(Controller/Service/DTO/测试等)。仅在 task_type=scaffold 时使用", ScaffoldSchema, async (args) => {
|
|
3318
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3319
|
-
if (!ctx?.classification) {
|
|
3320
|
-
return {
|
|
3321
|
-
result: { error: "任务不存在或尚未分类" },
|
|
3322
|
-
};
|
|
3323
|
-
}
|
|
3324
|
-
if (ctx.classification.task_type !== "scaffold") {
|
|
3325
|
-
return {
|
|
3326
|
-
result: {
|
|
3327
|
-
error: "sf_scaffold 仅适用于 scaffold 类型任务",
|
|
3328
|
-
current_type: ctx.classification.task_type,
|
|
3329
|
-
},
|
|
3330
|
-
};
|
|
3331
|
-
}
|
|
3332
|
-
const result = await (await lazyScaffolder()).generateScaffold({
|
|
3333
|
-
intent: ctx.intent,
|
|
3334
|
-
classification: ctx.classification,
|
|
3335
|
-
config,
|
|
3336
|
-
projectPath,
|
|
3337
|
-
});
|
|
3338
|
-
result.task_id = args.task_id;
|
|
3339
|
-
return {
|
|
3340
|
-
result: result,
|
|
3341
|
-
};
|
|
3342
|
-
});
|
|
3343
|
-
// ── sf_deliver: 自动提交、推送、创建 PR ──
|
|
3344
|
-
// ── sf_accept: 记录任务验收证据(本地验收 + 产物确认) ──
|
|
3345
|
-
registerSafeTool("sf_accept", "记录任务验收证据,解除 sf_deliver 的本地验收门和产物确认门", AcceptSchema, async (args) => {
|
|
3346
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3347
|
-
if (!ctx) {
|
|
3348
|
-
return { result: { error: "任务不存在" } };
|
|
3349
|
-
}
|
|
3350
|
-
const runMode = args.run_mode;
|
|
3351
|
-
const notes = String(args.acceptance_notes ?? "").trim();
|
|
3352
|
-
const confirmedBy = String(args.confirmed_by ?? "").trim();
|
|
3353
|
-
const confirmationRef = String(args.confirmation_ref ?? "").trim();
|
|
3354
|
-
if (args.confirm !== true || !confirmedBy || !confirmationRef || !notes) {
|
|
3355
|
-
return {
|
|
3356
|
-
result: {
|
|
3357
|
-
error: "验收必须包含显式确认、确认者、可审计确认引用和验收说明",
|
|
3358
|
-
diagnostic_code: "SF-ACCEPT-CONFIRMATION-REQUIRED",
|
|
3359
|
-
recovery_next_tools: ["sf_accept", "sf_status"],
|
|
3360
|
-
recovery_forbidden_tools: ["sf_verify", "sf_scaffold", "sf_classify", "sf_expand"],
|
|
3361
|
-
},
|
|
3362
|
-
};
|
|
3363
|
-
}
|
|
3364
|
-
const currentVerification = ctx.verification_result;
|
|
3365
|
-
if (currentVerification?.status !== "passed") {
|
|
3366
|
-
return {
|
|
3367
|
-
result: {
|
|
3368
|
-
error: "验收前必须已有真实执行并通过的 verification_result",
|
|
3369
|
-
diagnostic_code: "SF-ACCEPT-VERIFICATION-REQUIRED",
|
|
3370
|
-
recovery_next_tools: ["sf_verify", "sf_record_verification_execution", "sf_status"],
|
|
3371
|
-
recovery_forbidden_tools: ["sf_verify", "sf_scaffold", "sf_classify", "sf_expand"],
|
|
3372
|
-
},
|
|
3373
|
-
};
|
|
3374
|
-
}
|
|
3375
|
-
const evidenceRef = `acceptance:user_confirmation:${confirmationRef}`;
|
|
3376
|
-
if (runMode === "manual_review") {
|
|
3377
|
-
const acceptanceModule = await lazyLocalAcceptance();
|
|
3378
|
-
if (!args.final_access) {
|
|
3379
|
-
return {
|
|
3380
|
-
result: {
|
|
3381
|
-
error: "manual_review 验收缺少 final_access 真实访问证据",
|
|
3382
|
-
diagnostic_code: "SF-ACCEPT-FINAL-ACCESS-REQUIRED",
|
|
3383
|
-
recovery_next_tools: ["sf_accept", "sf_status"],
|
|
3384
|
-
recovery_forbidden_tools: ["sf_verify", "sf_scaffold", "sf_classify", "sf_expand"],
|
|
3385
|
-
},
|
|
3386
|
-
};
|
|
3387
|
-
}
|
|
3388
|
-
const finalAccessResult = acceptanceModule.validateFinalAccess(args.final_access, "local_dev_server");
|
|
3389
|
-
if (!finalAccessResult.passed) {
|
|
3390
|
-
return {
|
|
3391
|
-
result: {
|
|
3392
|
-
error: `manual_review 验收证据不完整: ${finalAccessResult.blocking_reasons.join("; ")}`,
|
|
3393
|
-
diagnostic_code: "SF-ACCEPT-FINAL-ACCESS-INVALID",
|
|
3394
|
-
recovery_next_tools: ["sf_accept", "sf_status"],
|
|
3395
|
-
recovery_forbidden_tools: ["sf_verify", "sf_scaffold", "sf_classify", "sf_expand"],
|
|
3396
|
-
},
|
|
3397
|
-
};
|
|
3398
|
-
}
|
|
3399
|
-
}
|
|
3400
|
-
// 设置本地验收证据
|
|
3401
|
-
ctx.local_acceptance_evidence = {
|
|
3402
|
-
status: runMode === "manual_review" ? "passed" : "not_applicable",
|
|
3403
|
-
run_mode: runMode,
|
|
3404
|
-
confirmed_by: confirmedBy,
|
|
3405
|
-
confirmation_ref: confirmationRef,
|
|
3406
|
-
final_access: args.final_access ?? {
|
|
3407
|
-
frontend_urls: [],
|
|
3408
|
-
backend_urls: [],
|
|
3409
|
-
docs_or_swagger_urls: [],
|
|
3410
|
-
start_commands: [],
|
|
3411
|
-
stop_commands: [],
|
|
3412
|
-
running_status: "not_started",
|
|
3413
|
-
manual_review_steps_zh: [notes],
|
|
3414
|
-
known_limits_zh: [],
|
|
3415
|
-
},
|
|
3416
|
-
evidence_refs: [evidenceRef],
|
|
3417
|
-
};
|
|
3418
|
-
await taskContext.save(ctx);
|
|
3419
|
-
let updatedCtx = ctx;
|
|
3420
|
-
// 产物确认必须经过统一生命周期校验,不直接改写 status。
|
|
3421
|
-
if (ctx.artifact_output && ctx.artifact_output.status === "verified") {
|
|
3422
|
-
updatedCtx = await taskContext.updateArtifactStatus(args.task_id, {
|
|
3423
|
-
status: "accepted",
|
|
3424
|
-
evidenceRef,
|
|
3425
|
-
hasAcceptance: true,
|
|
3426
|
-
}) ?? ctx;
|
|
3427
|
-
}
|
|
3428
|
-
return {
|
|
3429
|
-
result: {
|
|
3430
|
-
task_id: args.task_id,
|
|
3431
|
-
acceptance_status: "passed",
|
|
3432
|
-
run_mode: runMode,
|
|
3433
|
-
evidence_ref: evidenceRef,
|
|
3434
|
-
artifact_transition: updatedCtx.artifact_output
|
|
3435
|
-
? `${updatedCtx.artifact_output.status}`
|
|
3436
|
-
: "no_artifact",
|
|
3437
|
-
},
|
|
3438
|
-
};
|
|
3439
|
-
});
|
|
3440
|
-
// ── sf_deliver: 自动提交、推送、创建 PR ──
|
|
3441
|
-
registerSafeTool("sf_deliver", "验收后自动提交代码、推送、创建 PR 和生成变更日志", DeliverSchema, async (args) => {
|
|
3442
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3443
|
-
if (!ctx) {
|
|
3444
|
-
return {
|
|
3445
|
-
result: { error: "任务不存在" },
|
|
3446
|
-
};
|
|
3447
|
-
}
|
|
3448
|
-
// H4: 交付前工作区完整性检查 — advisory 模式,仅警告不阻断
|
|
3449
|
-
const deliverIntegrity = await ioController.verify();
|
|
3450
|
-
const h4DeliverWarning = !deliverIntegrity.clean
|
|
3451
|
-
? { warning: `H4 advisory: ${deliverIntegrity.message}`, dirty_files: deliverIntegrity.dirty_files }
|
|
3452
|
-
: undefined;
|
|
3453
|
-
// 模板契约修复指令优先于通用产物状态提示,确保客户端获得可执行的修复重验路径。
|
|
3454
|
-
if (ctx.repair_reverify_directive) {
|
|
3455
|
-
return {
|
|
3456
|
-
result: {
|
|
3457
|
-
error: "存在未清零的模板契约修复指令,需完成修复重验后才能交付",
|
|
3458
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.contractDraft,
|
|
3459
|
-
repair_directive: ctx.repair_reverify_directive,
|
|
3460
|
-
recovery: "修复文档缺口后重新执行 sf_verify,验证通过后 repair_reverify_directive 自动清零",
|
|
3461
|
-
recovery_next_tools: ["sf_learn", "sf_deliver", "sf_status"],
|
|
3462
|
-
recovery_forbidden_tools: ["sf_verify", "sf_scaffold", "sf_classify", "sf_expand"],
|
|
3463
|
-
},
|
|
3464
|
-
};
|
|
3465
|
-
}
|
|
3466
|
-
// 问题六十六/六十七: 审查或验证阶段产生的工程硬失败不得进入交付。
|
|
3467
|
-
const oodModule = await lazyOodSolid();
|
|
3468
|
-
if (oodModule.hasBlockingSolidFindings(ctx.ood_solid_findings ?? [])) {
|
|
3469
|
-
return {
|
|
3470
|
-
result: {
|
|
3471
|
-
error: "OOD/SOLID 契约仍存在硬失败,不得交付",
|
|
3472
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock,
|
|
3473
|
-
findings: ctx.ood_solid_findings,
|
|
3474
|
-
recovery: "按 finding 修复职责或依赖边界,并重新执行 sf_review 与 sf_verify",
|
|
3475
|
-
},
|
|
3476
|
-
};
|
|
3477
|
-
}
|
|
3478
|
-
const backendModule = await lazyBackendImplementation();
|
|
3479
|
-
if (backendModule.hasBlockingBackendFindings(ctx.backend_implementation_findings ?? [])) {
|
|
3480
|
-
return {
|
|
3481
|
-
result: {
|
|
3482
|
-
error: "后端实现工程契约仍存在硬失败,不得交付",
|
|
3483
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock,
|
|
3484
|
-
findings: ctx.backend_implementation_findings,
|
|
3485
|
-
recovery: "按 finding 修复后端边界、安全或一致性问题,并重新执行 sf_review 与 sf_verify",
|
|
3486
|
-
},
|
|
3487
|
-
};
|
|
3488
|
-
}
|
|
3489
|
-
// 问题六十八: 代码可维护性与可观测性 P0 阻断交付。
|
|
3490
|
-
const obsModule = await lazyCodeObservability();
|
|
3491
|
-
const obsDeliveryBlock = obsModule.evaluateDeliveryBlock(ctx.code_observability_findings ?? []);
|
|
3492
|
-
if (obsDeliveryBlock.blocked) {
|
|
3493
|
-
return {
|
|
3494
|
-
result: {
|
|
3495
|
-
error: `代码可维护性/可观测性存在阻断: ${obsDeliveryBlock.reason_zh}`,
|
|
3496
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding,
|
|
3497
|
-
findings: obsDeliveryBlock.blocking_findings,
|
|
3498
|
-
recovery: "按 finding 修复敏感信息泄漏、缺失日志或吞异常问题,并重新执行 sf_review 与 sf_verify",
|
|
3499
|
-
},
|
|
3500
|
-
};
|
|
3501
|
-
}
|
|
3502
|
-
// 产物状态门控: deliver 需要产物状态为 accepted 且有证据
|
|
3503
|
-
if (ctx.artifact_output) {
|
|
3504
|
-
const status = ctx.artifact_output.status;
|
|
3505
|
-
if (status === "draft") {
|
|
3506
|
-
return {
|
|
3507
|
-
result: {
|
|
3508
|
-
error: `产物状态为 ${status},需先通过验证 (verified) 并确认 (accepted) 才能交付`,
|
|
3509
|
-
artifact_id: ctx.artifact_output.artifact_id,
|
|
3510
|
-
current_status: status,
|
|
3511
|
-
},
|
|
3512
|
-
};
|
|
3513
|
-
}
|
|
3514
|
-
if (status === "verified") {
|
|
3515
|
-
return {
|
|
3516
|
-
result: {
|
|
3517
|
-
error: `产物状态为 ${status},需人工确认或后续 workflow 采用后变为 accepted 才能交付`,
|
|
3518
|
-
artifact_id: ctx.artifact_output.artifact_id,
|
|
3519
|
-
current_status: status,
|
|
3520
|
-
},
|
|
3521
|
-
};
|
|
3522
|
-
}
|
|
3523
|
-
// accepted 必须有确认证据
|
|
3524
|
-
if (status === "accepted") {
|
|
3525
|
-
const hasAcceptanceEvidence = ctx.artifact_output.evidence_refs.some((r) => r.includes("acceptance") || r.includes("workflow_adoption"));
|
|
3526
|
-
if (!hasAcceptanceEvidence) {
|
|
3527
|
-
return {
|
|
3528
|
-
result: {
|
|
3529
|
-
error: `产物状态为 accepted 但缺少确认证据 (acceptance/workflow_adoption evidence_ref)`,
|
|
3530
|
-
artifact_id: ctx.artifact_output.artifact_id,
|
|
3531
|
-
current_status: status,
|
|
3532
|
-
},
|
|
3533
|
-
};
|
|
3534
|
-
}
|
|
3535
|
-
}
|
|
3536
|
-
}
|
|
3537
|
-
// 问题六十二: 依赖设计产物的任务只有 implementation_ready 后才可交付。
|
|
3538
|
-
if (ctx.design_artifact_pack && ctx.design_artifact_pack.status !== "implementation_ready") {
|
|
3539
|
-
return {
|
|
3540
|
-
result: {
|
|
3541
|
-
error: `设计产物包状态为 ${ctx.design_artifact_pack.status},未达到 implementation_ready,不得交付`,
|
|
3542
|
-
diagnostic_code: "SF-DESIGN-PACK-NOT-READY",
|
|
3543
|
-
findings: ctx.design_artifact_pack.findings,
|
|
3544
|
-
recovery: "请完成设计产物真实复验并修复所有阻断项后重新交付",
|
|
3545
|
-
},
|
|
3546
|
-
};
|
|
3547
|
-
}
|
|
3548
|
-
if (ctx.traceability_binding && ctx.traceability_binding.status !== "bound") {
|
|
3549
|
-
return {
|
|
3550
|
-
result: {
|
|
3551
|
-
error: "追踪绑定未闭合,不得交付编码结果",
|
|
3552
|
-
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityDeliveryBlocked,
|
|
3553
|
-
traceability_binding: ctx.traceability_binding,
|
|
3554
|
-
recovery: "补齐需求/原型/设计/切片/验收追踪矩阵并重新 sf_expand → sf_verify,通过后再 sf_deliver",
|
|
3555
|
-
},
|
|
3556
|
-
};
|
|
3557
|
-
}
|
|
3558
|
-
// 交付 lease 互斥检查
|
|
3559
|
-
const leaseModule = await lazyWorkspaceLease();
|
|
3560
|
-
const deliverLease = leaseModule.acquireLease(args.task_id, "delivery", [projectPath]);
|
|
3561
|
-
if (deliverLease.lease?.status === "conflicted" || deliverLease.conflicts.length > 0) {
|
|
3562
|
-
return {
|
|
3563
|
-
result: {
|
|
3564
|
-
error: `交付 lease 冲突: ${deliverLease.conflicts.map((c) => `${c.conflict_type}: ${c.conflict_path}`).join(", ")}`,
|
|
3565
|
-
conflicts: deliverLease.conflicts,
|
|
3566
|
-
},
|
|
3567
|
-
};
|
|
3568
|
-
}
|
|
3569
|
-
// 交付就绪评估 — delivery_allowed=false 必须阻断交付
|
|
3570
|
-
const drModule = await lazyDeliveryReadiness();
|
|
3571
|
-
const guardModule = await lazyEnforcementGuard();
|
|
3572
|
-
const currentVResult = ctx.verification_result;
|
|
3573
|
-
const currentVPlan = ctx.verification_plan;
|
|
3574
|
-
const guardFindings = guardModule.evaluateDeliveryReadinessGuard(currentVResult, currentVPlan);
|
|
3575
|
-
// 问题五十一: 编码就绪门 — 交付前检查 coding readiness
|
|
3576
|
-
const codingGate = await checkCodingReadinessGate({ ctx });
|
|
3577
|
-
if (!codingGate.allowed) {
|
|
3578
|
-
if (deliverLease.lease) {
|
|
3579
|
-
leaseModule.releaseLease(deliverLease.lease.lease_id);
|
|
3580
|
-
}
|
|
3581
|
-
return {
|
|
3582
|
-
result: {
|
|
3583
|
-
error: `编码就绪检查未通过: ${codingGate.reason_zh}`,
|
|
3584
|
-
missing_preconditions: codingGate.missing_preconditions,
|
|
3585
|
-
status: "blocked",
|
|
3586
|
-
recovery: "请先满足编码就绪条件(测试计划、验收标准、主链路入口)",
|
|
3587
|
-
},
|
|
3588
|
-
};
|
|
3589
|
-
}
|
|
3590
|
-
const metricsData = await (await lazyObservability()).collectDeliveryMetricSamples(taskContext.getStateDir());
|
|
3591
|
-
// acceptanceConfig: 从项目配置推断 project_run_mode
|
|
3592
|
-
const projectHasFrontend = config.tech_stack.frontend.lang && config.tech_stack.frontend.lang !== "none";
|
|
3593
|
-
const projectHasBackend = config.tech_stack.backend.lang && config.tech_stack.backend.lang !== "none";
|
|
3594
|
-
const readinessReport = drModule.evaluateDeliveryReadiness(args.task_id, currentVResult, guardFindings, true, // scope_check — 已在 sf_verify 写入护栏中检查
|
|
3595
|
-
deliverLease.conflicts.length === 0, // lease_check — 无冲突即通过
|
|
3596
|
-
true, // privacy_check — 已在任务创建时脱敏
|
|
3597
|
-
true, // artifact_acceptance — 上面已检查产物状态
|
|
3598
|
-
metricsData, projectHasFrontend ? { final_access: { frontend_urls: [], backend_urls: [], docs_or_swagger_urls: [], start_commands: [], stop_commands: [], running_status: "not_started", manual_review_steps_zh: [], known_limits_zh: [] }, project_run_mode: "local_dev_server" } : undefined);
|
|
3599
|
-
// 保存就绪报告到任务上下文
|
|
3600
|
-
const ctxForReadiness = await taskContext.load(args.task_id);
|
|
3601
|
-
if (ctxForReadiness) {
|
|
3602
|
-
ctxForReadiness.delivery_readiness = readinessReport;
|
|
3603
|
-
await taskContext.save(ctxForReadiness);
|
|
3604
|
-
}
|
|
3605
|
-
if (!readinessReport.delivery_allowed) {
|
|
3606
|
-
// 释放 lease 并阻断交付
|
|
3607
|
-
if (deliverLease.lease) {
|
|
3608
|
-
leaseModule.releaseLease(deliverLease.lease.lease_id);
|
|
3609
|
-
}
|
|
3610
|
-
return {
|
|
3611
|
-
result: {
|
|
3612
|
-
error: `交付就绪检查未通过: ${readinessReport.blocking_findings.map((f) => f.message_zh).join("; ")}`,
|
|
3613
|
-
delivery_readiness: readinessReport,
|
|
3614
|
-
},
|
|
3615
|
-
};
|
|
3616
|
-
}
|
|
3617
|
-
// 问题五十二: 本地验收门 — 前端/全栈交付前必须有本地访问证据(仅在有施工指令契约时强制)
|
|
3618
|
-
const hasInstructionContract = !!ctx?.instruction_contract;
|
|
3619
|
-
if (hasInstructionContract) {
|
|
3620
|
-
const localAcceptanceGate = await checkLocalAcceptanceGate({
|
|
3621
|
-
ctx,
|
|
3622
|
-
hasFrontend: !!projectHasFrontend,
|
|
3623
|
-
hasBackend: !!projectHasBackend,
|
|
3624
|
-
hasDockerCompose: false,
|
|
3625
|
-
hasDockerfile: false,
|
|
3626
|
-
});
|
|
3627
|
-
if (!localAcceptanceGate.allowed) {
|
|
3628
|
-
if (deliverLease.lease) {
|
|
3629
|
-
leaseModule.releaseLease(deliverLease.lease.lease_id);
|
|
3630
|
-
}
|
|
3631
|
-
return {
|
|
3632
|
-
result: {
|
|
3633
|
-
error: `本地验收检查未通过: ${localAcceptanceGate.reason_zh}`,
|
|
3634
|
-
required_but_missing: localAcceptanceGate.required_but_missing,
|
|
3635
|
-
status: "blocked",
|
|
3636
|
-
recovery: "请提供本地运行证据或说明 not_applicable 原因(如纯后端 API 项目)",
|
|
3637
|
-
},
|
|
3638
|
-
};
|
|
3639
|
-
}
|
|
3640
|
-
}
|
|
3641
|
-
// 问题六十:交付结论必须经过 UnsupportedClaimGate
|
|
3642
|
-
{
|
|
3643
|
-
const { createEvidenceGroundingSystem, assessTaskRisk } = await import("../../engine/evidence_grounding_contract.js");
|
|
3644
|
-
const _dRoute = ctx.route_decision?.route ?? ctx.classification?.route_decision?.route;
|
|
3645
|
-
const _dRisk = assessTaskRisk(ctx.classification?.task_type, _dRoute, ctx.intent);
|
|
3646
|
-
if (_dRisk !== "low") {
|
|
3647
|
-
const _deg = createEvidenceGroundingSystem();
|
|
3648
|
-
// 注册验证结果和交付上下文
|
|
3649
|
-
if (currentVResult) {
|
|
3650
|
-
_deg.registry.register({
|
|
3651
|
-
source_type: "validation_result",
|
|
3652
|
-
authority: "authoritative",
|
|
3653
|
-
freshness: "current",
|
|
3654
|
-
permission: "allowed",
|
|
3655
|
-
scope: "verification",
|
|
3656
|
-
description: `验证状态: ${currentVResult.status}`,
|
|
3657
|
-
source_ref: `verification:${args.task_id}`,
|
|
3658
|
-
});
|
|
3659
|
-
}
|
|
3660
|
-
_deg.registry.register({
|
|
3661
|
-
source_type: "task_context",
|
|
3662
|
-
authority: "authoritative",
|
|
3663
|
-
freshness: "current",
|
|
3664
|
-
permission: "allowed",
|
|
3665
|
-
scope: "delivery",
|
|
3666
|
-
description: "交付上下文",
|
|
3667
|
-
source_ref: `task:${args.task_id}`,
|
|
3668
|
-
});
|
|
3669
|
-
const _dClaims = [
|
|
3670
|
-
{
|
|
3671
|
-
id: "claim-deliver-1",
|
|
3672
|
-
category: "release_status",
|
|
3673
|
-
claim_text: "交付基于真实验证结果",
|
|
3674
|
-
evidence_ids: _deg.registry.query({ source_type: "validation_result" }).map((e) => e.id),
|
|
3675
|
-
is_uncertain: false,
|
|
3676
|
-
risk_level: _dRisk,
|
|
3677
|
-
},
|
|
3678
|
-
];
|
|
3679
|
-
const _dMatrix = _deg.builder.buildContext(_dClaims, { target_claims: ["交付验证"], source_types: ["validation_result", "task_context"], keywords: ["验证", "交付"], max_results: 10 });
|
|
3680
|
-
_dMatrix.task_id = args.task_id;
|
|
3681
|
-
const _dGateResult = _deg.gate.evaluate(_dMatrix, _dRisk);
|
|
3682
|
-
// 写回 TaskContext(blocked 也保存)
|
|
3683
|
-
await taskContext.setEvidenceGroundingResult(args.task_id, {
|
|
3684
|
-
evidence_matrix: _dMatrix,
|
|
3685
|
-
evidence_gate_result: _dGateResult,
|
|
3686
|
-
unsupported_claims: _dGateResult.unsupported_claims,
|
|
3687
|
-
conflict_resolutions: _dMatrix.conflicts,
|
|
3688
|
-
});
|
|
3689
|
-
if (!_dGateResult.allowed) {
|
|
3690
|
-
if (deliverLease.lease) {
|
|
3691
|
-
leaseModule.releaseLease(deliverLease.lease.lease_id);
|
|
3692
|
-
}
|
|
3693
|
-
return {
|
|
3694
|
-
result: {
|
|
3695
|
-
error: `证据驱动门禁未通过: ${_dGateResult.reason_zh}`,
|
|
3696
|
-
diagnostic_code: _dGateResult.diagnostic_code,
|
|
3697
|
-
unsupported_claims: _dGateResult.unsupported_claims,
|
|
3698
|
-
},
|
|
3699
|
-
};
|
|
3700
|
-
}
|
|
3701
|
-
}
|
|
3702
|
-
}
|
|
3703
|
-
// 交付前检查 false completion(通过提取的主链路函数)
|
|
3704
|
-
const cepNfcResult = await assessCepBeforeDelivery({
|
|
3705
|
-
task_id: args.task_id,
|
|
3706
|
-
verification_passed: currentVResult?.status === "passed",
|
|
3707
|
-
build_passed: (currentVResult?.passed_commands ?? 0) > 0,
|
|
3708
|
-
browser_acceptance_passed: ctx.artifact_output?.status === "accepted" || ctx.artifact_output === undefined,
|
|
3709
|
-
guard_passed: guardFindings.length === 0 || guardFindings.every((f) => f.severity !== "hard_fail"),
|
|
3710
|
-
evidence_sufficient: (currentVResult?.evidence_ids?.length ?? 0) > 0,
|
|
3711
|
-
current_status: ctx.status === "done" ? "完成" : ctx.status,
|
|
3712
|
-
});
|
|
3713
|
-
if (cepNfcResult.decision === "blocked" || cepNfcResult.decision === "回退") {
|
|
3714
|
-
if (deliverLease.lease) {
|
|
3715
|
-
leaseModule.releaseLease(deliverLease.lease.lease_id);
|
|
3716
|
-
}
|
|
3717
|
-
const ctxForCep = await taskContext.load(args.task_id);
|
|
3718
|
-
if (ctxForCep) {
|
|
3719
|
-
ctxForCep.core_experience_evaluation = {
|
|
3720
|
-
task_id: args.task_id,
|
|
3721
|
-
workflow_id: "sf_deliver",
|
|
3722
|
-
evaluated_principles: ["auto_repair_no_fake_completion"],
|
|
3723
|
-
violations: [{
|
|
3724
|
-
principle: "auto_repair_no_fake_completion",
|
|
3725
|
-
severity: "blocking",
|
|
3726
|
-
reason_zh: cepNfcResult.reason_zh,
|
|
3727
|
-
evidence_refs: [],
|
|
3728
|
-
required_action: cepNfcResult.decision === "blocked" ? "block_delivery" : "回退",
|
|
3729
|
-
}],
|
|
3730
|
-
user_facing_summary_zh: `CEP 检查未通过: ${cepNfcResult.reason_zh}`,
|
|
3731
|
-
internal_trace_refs: [],
|
|
3732
|
-
passed: false,
|
|
3733
|
-
};
|
|
3734
|
-
await taskContext.save(ctxForCep);
|
|
3735
|
-
}
|
|
3736
|
-
return {
|
|
3737
|
-
result: {
|
|
3738
|
-
error: `CEP false completion 检查未通过: ${cepNfcResult.reason_zh}`,
|
|
3739
|
-
cep_decision: cepNfcResult.decision,
|
|
3740
|
-
},
|
|
3741
|
-
};
|
|
3742
|
-
}
|
|
3743
|
-
const result = await (await lazyDelivery()).deliver({
|
|
3744
|
-
taskContext: ctx,
|
|
3745
|
-
config,
|
|
3746
|
-
knowledgeIndex,
|
|
3747
|
-
projectPath,
|
|
3748
|
-
gitOps: (await lazyGitDeps()).realGitOps,
|
|
3749
|
-
skipPush: args.skip_push,
|
|
3750
|
-
skipPr: args.skip_pr,
|
|
3751
|
-
});
|
|
3752
|
-
await taskContext.setDelivery(args.task_id, result);
|
|
3753
|
-
// 交付完成后释放 lease
|
|
3754
|
-
if (deliverLease.lease) {
|
|
3755
|
-
leaseModule.releaseLease(deliverLease.lease.lease_id);
|
|
3756
|
-
}
|
|
3757
|
-
return {
|
|
3758
|
-
result: h4DeliverWarning ? { ...result, h4_advisory: h4DeliverWarning } : result,
|
|
3759
|
-
};
|
|
3760
|
-
});
|
|
3761
|
-
// ── sf_coord_check: 预测性冲突检测和跨仓库协调 ──
|
|
3762
|
-
registerSafeTool("sf_coord_check", "预测性冲突检测和跨仓库协调提示,检查分支状态、本地变更和潜在冲突", CoordCheckSchema, async (args) => {
|
|
3763
|
-
const result = await (await lazyChangeCoord()).checkConflicts({
|
|
3764
|
-
projectPath,
|
|
3765
|
-
config,
|
|
3766
|
-
branch: args.branch,
|
|
3767
|
-
gitOps: (await lazyGitDeps()).realGitOps,
|
|
3768
|
-
});
|
|
3769
|
-
return {
|
|
3770
|
-
result: result,
|
|
3771
|
-
};
|
|
3772
|
-
});
|
|
3773
|
-
// ── sf_team_status: 团队活动流和工作负载查询 ──
|
|
3774
|
-
registerSafeTool("sf_team_status", "查询团队活动流、成员工作负载、过期分支和知识库更新状态", TeamStatusSchema, async (args) => {
|
|
3775
|
-
const result = await (await lazyTeam()).getTeamStatus({
|
|
3776
|
-
projectPath,
|
|
3777
|
-
config,
|
|
3778
|
-
since: args.since,
|
|
3779
|
-
gitOps: (await lazyGitDeps()).realGitOps,
|
|
3780
|
-
knowledgeIndex: args.include_knowledge ? knowledgeIndex : undefined,
|
|
3781
|
-
});
|
|
3782
|
-
return {
|
|
3783
|
-
result: result,
|
|
3784
|
-
};
|
|
3785
|
-
});
|
|
3786
|
-
// ── sf_contract_check: API 契约变更检测 ──
|
|
3787
|
-
registerSafeTool("sf_contract_check", "检测 API 契约变更(路由、DTO 字段等),评估破坏性影响和跨服务依赖", ContractCheckSchema, async (args) => {
|
|
3788
|
-
let changedFiles = args.changed_files;
|
|
3789
|
-
if (!changedFiles) {
|
|
3790
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3791
|
-
changedFiles = ctx?.execution?.changed_files ?? [];
|
|
3792
|
-
}
|
|
3793
|
-
const result = await (await lazyContractGuard()).checkContractChanges({
|
|
3794
|
-
changedFiles,
|
|
3795
|
-
projectPath,
|
|
3796
|
-
config,
|
|
3797
|
-
gitOps: (await lazyGitDeps()).realGitOps,
|
|
3798
|
-
});
|
|
3799
|
-
return {
|
|
3800
|
-
result: result,
|
|
3801
|
-
};
|
|
3802
|
-
});
|
|
3803
|
-
// ── sf_onboard: 新人分步引导 ──
|
|
3804
|
-
registerSafeTool("sf_onboard", "新人分步引导:项目概览 → 代码导览 → 知识回顾 → 首个任务建议", OnboardSchema, async (args) => {
|
|
3805
|
-
const result = await (await lazyOnboarding()).onboard({
|
|
3806
|
-
config,
|
|
3807
|
-
projectPath,
|
|
3808
|
-
knowledgeIndex,
|
|
3809
|
-
gitOps: (await lazyGitDeps()).realGitOps,
|
|
3810
|
-
currentStep: args.step,
|
|
3811
|
-
reset: args.reset,
|
|
3812
|
-
});
|
|
3813
|
-
return {
|
|
3814
|
-
result: result,
|
|
3815
|
-
};
|
|
3816
|
-
});
|
|
3817
|
-
// ── sf_feasibility_check: 任务可行性评估 ──
|
|
3818
|
-
registerSafeTool("sf_feasibility_check", "分析任务可行性:可行/风险/不可行三档评估,纯建议不阻断流程", FeasibilityCheckSchema, async (args) => {
|
|
3819
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3820
|
-
if (!ctx?.classification) {
|
|
3821
|
-
return {
|
|
3822
|
-
result: { error: "任务不存在或未完成分类,请先调用 sf_classify" },
|
|
3823
|
-
};
|
|
3824
|
-
}
|
|
3825
|
-
const result = (await lazyFeasibility()).checkFeasibility(ctx.classification, config);
|
|
3826
|
-
return {
|
|
3827
|
-
result: result,
|
|
3828
|
-
};
|
|
3829
|
-
});
|
|
3830
|
-
// ── sf_debug: 智能排障(解析错误 → 根因分析 → 修复方案) ──
|
|
3831
|
-
registerSafeTool("sf_debug", "智能排障:解析错误 → 追踪调用链 → 根因分析 → 修复方案 → 测试建议", DebugSchema, async (args) => {
|
|
3832
|
-
const projectScope = [
|
|
3833
|
-
...config.scope.backend,
|
|
3834
|
-
...config.scope.frontend,
|
|
3835
|
-
];
|
|
3836
|
-
const result = (await lazyDebugger()).debugError(args.error_output, args.task_id || `debug-${Date.now()}`, projectScope);
|
|
3837
|
-
return {
|
|
3838
|
-
result: result,
|
|
3839
|
-
};
|
|
3840
|
-
});
|
|
3841
|
-
// ── sf_observability: 系统可观测和运行报告 ──
|
|
3842
|
-
registerSafeTool("sf_observability", "系统可观测:运行指标、成本估算、告警检测、能力状态、周期报告", ObservabilitySchema, async (args) => {
|
|
3843
|
-
const stateDir = taskContext.getStateDir();
|
|
3844
|
-
const result = await (await lazyObservability()).generateReport(stateDir, args.period_days);
|
|
3845
|
-
const capability = (await lazyCapability()).getSummary();
|
|
3846
|
-
const output = { ...result, capability };
|
|
3847
|
-
return {
|
|
3848
|
-
result: output,
|
|
3849
|
-
};
|
|
3850
|
-
});
|
|
3851
|
-
// ── sf_migration_check: 数据库迁移安全性分析 ──
|
|
3852
|
-
registerSafeTool("sf_migration_check", "分析数据库迁移文件安全性:检测破坏性操作(DROP/DELETE/TRUNCATE)并生成回滚建议", MigrationCheckSchema, async (args) => {
|
|
3853
|
-
const result = (await lazyMigration()).analyzeMigration(args.content, args.filename);
|
|
3854
|
-
return {
|
|
3855
|
-
result: result,
|
|
3856
|
-
};
|
|
3857
|
-
});
|
|
3858
|
-
// ── sf_test_guide: 基于变更文件生成测试指引 ──
|
|
3859
|
-
registerSafeTool("sf_test_guide", "根据变更文件类型生成测试指引:推荐测试类型、场景、Mock 点和断言模板", TestGuideSchema, async (args) => {
|
|
3860
|
-
const result = (await lazyTestGen()).generateTestGuide(args.changed_files, [], config);
|
|
3861
|
-
return {
|
|
3862
|
-
result: result,
|
|
3863
|
-
};
|
|
3864
|
-
});
|
|
3865
|
-
// ── sf_test_quality: 测试文件质量五维评分 ──
|
|
3866
|
-
registerSafeTool("sf_test_quality", "评估测试文件质量:断言密度、边界覆盖、命名、重复率、场景覆盖五维评分", TestQualitySchema, async (args) => {
|
|
3867
|
-
const result = (await lazyTestQuality()).analyzeTestQuality(args.content, args.filename);
|
|
3868
|
-
return {
|
|
3869
|
-
result: result,
|
|
3870
|
-
};
|
|
3871
|
-
});
|
|
3872
|
-
// ── sf_dependency_scan: 依赖漏洞扫描 ──
|
|
3873
|
-
registerSafeTool("sf_dependency_scan", "扫描依赖声明文件漏洞:已知 CVE 规则匹配、未锁定版本检测、支持 npm/maven/gradle", DependencyScanSchema, async (args) => {
|
|
3874
|
-
const result = (await lazyDepScan()).scanDependencies(args.content, args.filename);
|
|
3875
|
-
return {
|
|
3876
|
-
result: result,
|
|
3877
|
-
};
|
|
3878
|
-
});
|
|
3879
|
-
// ── sf_debt_report: 技术债务报告生成 ──
|
|
3880
|
-
registerSafeTool("sf_debt_report", "生成技术债务报告:按分类/严重度聚合、30 天趋势、优先级排序 Top 5", {}, async () => {
|
|
3881
|
-
const tracker = new (await lazyDebt()).DebtTracker(projectPath);
|
|
3882
|
-
const result = await (await lazyDebtReport()).generateDebtReport(tracker);
|
|
3883
|
-
return {
|
|
3884
|
-
result: result,
|
|
3885
|
-
};
|
|
3886
|
-
});
|
|
3887
|
-
// ── sf_explore: 自主技术选型与方案证伪 ──
|
|
3888
|
-
registerSafeTool("sf_explore", "自主技术选型引擎:行业基准对比 + 四维权重矩阵 + 最优解宣誓 + 方案证伪 + A/B 决策诱导。禁止凭空捏造,必须基于行业标准", ExploreSchema, async (args) => {
|
|
3889
|
-
let classification;
|
|
3890
|
-
if (args.task_id) {
|
|
3891
|
-
const ctx = await taskContext.load(args.task_id);
|
|
3892
|
-
classification = ctx?.classification;
|
|
3893
|
-
}
|
|
3894
|
-
const result = (await lazyExploration()).exploreSolutions({
|
|
3895
|
-
domain_query: args.domain_query,
|
|
3896
|
-
projectConfig: config,
|
|
3897
|
-
classification,
|
|
3898
|
-
knowledgeIndex,
|
|
3899
|
-
});
|
|
3900
|
-
// 决策契约 advisory: sf_explore 应始终通过(10 字段已内置)
|
|
3901
|
-
const decisionContract = (await lazyDecision()).validateDecisionOutput(result);
|
|
3902
|
-
const exploreExtras = {};
|
|
3903
|
-
if (!decisionContract.passed) {
|
|
3904
|
-
exploreExtras.decision_contract_advisory = decisionContract.advisory;
|
|
3905
|
-
}
|
|
3906
|
-
return { result: Object.keys(exploreExtras).length > 0 ? { ...result, ...exploreExtras } : result };
|
|
3907
|
-
});
|
|
3908
|
-
// ── sf_knowledge_audit: 知识库健康审计 ──
|
|
3909
|
-
registerSafeTool("sf_knowledge_audit", "审计知识库:识别过时条目、重复触发词、格式缺失、覆盖缺口。定期执行或手动触发", {}, async () => {
|
|
3910
|
-
const result = await (await lazyKnowledge()).auditKnowledge(knowledgeIndex, config);
|
|
3911
|
-
return {
|
|
3912
|
-
result: result,
|
|
3913
|
-
};
|
|
3914
|
-
});
|
|
3915
|
-
// ── sf_knowledge_add: 新增知识条目(默认保存为草稿) ──
|
|
3916
|
-
const KnowledgeAddSchema = {
|
|
3917
|
-
title: z.string().describe("知识条目标题(英文 kebab-case,如 payment-rules)"),
|
|
3918
|
-
type: z.enum(["pattern", "procedure", "pipeline_procedure", "domain", "acceptance_template", "review_rule"]).describe("知识类型"),
|
|
3919
|
-
scope: z.array(z.string()).describe("适用范围(如 [backend]、[frontend]、[backend, frontend])"),
|
|
3920
|
-
when_triggers: z.string().describe("触发关键词(逗号分隔)"),
|
|
3921
|
-
decision_rules: z.string().optional().describe("决策规则(每行一条)"),
|
|
3922
|
-
save_to_drafts: z.boolean().optional().describe("是否保存为草稿(默认 true,需人工 review 后移入正式目录)"),
|
|
3923
|
-
auto_enrich: z.boolean().optional().describe("是否返回行业最佳实践探索指引(默认 true,宿主 AI 将自动执行探索并填充内容)"),
|
|
3924
|
-
confirm: z.boolean().optional().describe("显式确认写入知识库,必须为 true"),
|
|
3925
|
-
authorized: z.boolean().optional().describe("confirm 的兼容别名"),
|
|
3926
|
-
};
|
|
3927
|
-
registerSafeTool("sf_knowledge_add", "新增知识条目。默认保存为草稿到 .soloforge/knowledge/drafts/,人工确认后移入正式目录", KnowledgeAddSchema, async (args) => {
|
|
3928
|
-
const result = await (await lazyKnowledge()).addKnowledge({
|
|
3929
|
-
title: args.title,
|
|
3930
|
-
type: args.type,
|
|
3931
|
-
scope: args.scope,
|
|
3932
|
-
when_triggers: args.when_triggers,
|
|
3933
|
-
decision_rules: args.decision_rules,
|
|
3934
|
-
save_to_drafts: args.save_to_drafts,
|
|
3935
|
-
auto_enrich: args.auto_enrich,
|
|
3936
|
-
}, config);
|
|
3937
|
-
return {
|
|
3938
|
-
result: result,
|
|
3939
|
-
};
|
|
3940
|
-
});
|
|
3941
|
-
// ── sf_knowledge_update: 更新已有知识条目(自动创建备份) ──
|
|
3942
|
-
const KnowledgeUpdateSchema = {
|
|
3943
|
-
entry_name: z.string().describe("要更新的知识条目名称(如 payment-rules)"),
|
|
3944
|
-
when_triggers: z.string().optional().describe("新的触发关键词(替换现有)"),
|
|
3945
|
-
add_decision_rules: z.array(z.string()).optional().describe("追加的决策规则"),
|
|
3946
|
-
add_acceptance_criteria: z.array(z.string()).optional().describe("追加的验收项"),
|
|
3947
|
-
status: z.enum(["active", "deprecated"]).optional().describe("更新条目状态"),
|
|
3948
|
-
confirm: z.boolean().optional().describe("显式确认写入知识库,必须为 true"),
|
|
3949
|
-
authorized: z.boolean().optional().describe("confirm 的兼容别名"),
|
|
3950
|
-
};
|
|
3951
|
-
registerSafeTool("sf_knowledge_update", "更新已有知识条目:追加规则、更新触发词、标记废弃。自动创建备份", KnowledgeUpdateSchema, async (args) => {
|
|
3952
|
-
const result = await (await lazyKnowledge()).updateKnowledge({
|
|
3953
|
-
entry_name: args.entry_name,
|
|
3954
|
-
updates: {
|
|
3955
|
-
when_triggers: args.when_triggers,
|
|
3956
|
-
add_decision_rules: args.add_decision_rules,
|
|
3957
|
-
add_acceptance_criteria: args.add_acceptance_criteria,
|
|
3958
|
-
status: args.status,
|
|
3959
|
-
},
|
|
3960
|
-
}, knowledgeIndex, config);
|
|
3961
|
-
// 重载知识索引
|
|
3962
|
-
if (result.success) {
|
|
3963
|
-
await knowledgeIndex.reload();
|
|
3964
|
-
}
|
|
3965
|
-
return {
|
|
3966
|
-
result: result,
|
|
3967
|
-
};
|
|
3968
|
-
});
|
|
3969
|
-
// ── sf_resume_workspace: 工作区状态唤醒(解决前端刷新导致UUID丢失) ──
|
|
3970
|
-
registerSafeTool("sf_resume_workspace", "扫描 .soloforge/state/ 目录,恢复中断工单并播报当前进度。新会话启动时必须优先调用", {}, async () => {
|
|
3971
|
-
const result = await (await lazyWorkspaceResumer()).scanAndResume(taskContext);
|
|
3972
|
-
// 认知锚点:按恢复任务的 changed_files 相关性加载,禁止全量
|
|
3973
|
-
if (result.task) {
|
|
3974
|
-
const ctx = await taskContext.load(result.task.task_id);
|
|
3975
|
-
const changedFiles = ctx?.execution?.changed_files;
|
|
3976
|
-
if (changedFiles && changedFiles.length > 0) {
|
|
3977
|
-
const anchors = await loadRelevantAnchors({ file_paths: changedFiles });
|
|
3978
|
-
if (anchors && anchors.length > 0) {
|
|
3979
|
-
result.cognitive_anchors = anchors;
|
|
3980
|
-
}
|
|
3981
|
-
}
|
|
3982
|
-
}
|
|
3983
|
-
// JobManager advisory: 查询活跃 jobs
|
|
3984
|
-
try {
|
|
3985
|
-
const jm = new (await lazyJob()).JobManager(taskContext.getStateDir());
|
|
3986
|
-
const activeJobs = await jm.listActiveJobs();
|
|
3987
|
-
if (activeJobs.length > 0) {
|
|
3988
|
-
result.active_jobs = activeJobs.map((j) => ({
|
|
3989
|
-
job_id: j.job_id,
|
|
3990
|
-
task_id: j.task_id,
|
|
3991
|
-
phase: j.current_phase,
|
|
3992
|
-
is_alive: j.is_alive,
|
|
3993
|
-
latest_anchor_summary: j.latest_anchor?.summary,
|
|
3994
|
-
checkpoint_count: j.checkpoint_count,
|
|
3995
|
-
}));
|
|
3996
|
-
}
|
|
3997
|
-
}
|
|
3998
|
-
catch {
|
|
3999
|
-
// JobManager advisory — 忽略错误
|
|
4000
|
-
}
|
|
4001
|
-
return {
|
|
4002
|
-
result: result,
|
|
4003
|
-
};
|
|
4004
|
-
});
|
|
4005
|
-
// ── sf_audit_sample: 从审计池按风险加权抽样生成抽检清单 ──
|
|
4006
|
-
const AuditSampleSchema = {
|
|
4007
|
-
seed: z.number().optional().describe("抽样种子(默认 0,同种子可复现)"),
|
|
4008
|
-
};
|
|
4009
|
-
registerSafeTool("sf_audit_sample", "从审计池按风险加权抽样,生成抽检清单(SamplingDecision 列表)。只读,不落盘,不生成逃逸报告,不改能力状态", AuditSampleSchema, async (args) => {
|
|
4010
|
-
const stateDir = taskContext.getStateDir();
|
|
4011
|
-
const pool = new (await lazyAuditPool()).AuditPool(stateDir);
|
|
4012
|
-
const items = pool.list();
|
|
4013
|
-
const seed = args.seed ?? 0;
|
|
4014
|
-
const result = (await lazyAuditSampler()).sampleAuditItems(items, seed);
|
|
4015
|
-
return {
|
|
4016
|
-
result: result,
|
|
4017
|
-
};
|
|
4018
|
-
});
|
|
4019
|
-
// ── sf_escape_report: 记录逃逸/误伤/工具故障报告 ──
|
|
4020
|
-
const EscapeReportSchema = {
|
|
4021
|
-
escape_id: z.string().describe("逃逸报告唯一 ID"),
|
|
4022
|
-
task_id: z.string().describe("关联任务 ID"),
|
|
4023
|
-
policy_id: z.string().describe("关联能力 policy ID"),
|
|
4024
|
-
failure_type: z.enum(["rule_gap", "weak_test", "bad_evidence", "ai_escape", "human_miss", "tool_bug", "false_positive"]).describe("失败类型"),
|
|
4025
|
-
expected_guard: z.string().describe("期望的守卫行为"),
|
|
4026
|
-
actual_escape: z.string().describe("实际的逃逸行为"),
|
|
4027
|
-
evidence: z.string().describe("证据"),
|
|
4028
|
-
root_cause: z.string().describe("根因分析"),
|
|
4029
|
-
fix_required: z.string().describe("修复要求"),
|
|
4030
|
-
owner: z.string().describe("负责人"),
|
|
4031
|
-
due_date: z.string().describe("修复截止日期"),
|
|
4032
|
-
capability_action: z.enum(["keep", "downgrade", "disable", "promote_blocked"]).describe("建议的能力动作"),
|
|
4033
|
-
created_at: z.string().optional().describe("报告时间(ISO,默认当前时间)"),
|
|
4034
|
-
};
|
|
4035
|
-
registerSafeTool("sf_escape_report", "记录逃逸、误伤或工具故障报告。只落盘记录,不自动降级,不改能力状态", EscapeReportSchema, async (args) => {
|
|
4036
|
-
const stateDir = taskContext.getStateDir();
|
|
4037
|
-
const store = new (await lazyEscape()).EscapeReportStore(stateDir);
|
|
4038
|
-
const report = {
|
|
4039
|
-
escape_id: args.escape_id,
|
|
4040
|
-
task_id: args.task_id,
|
|
4041
|
-
policy_id: args.policy_id,
|
|
4042
|
-
failure_type: args.failure_type,
|
|
4043
|
-
expected_guard: args.expected_guard,
|
|
4044
|
-
actual_escape: args.actual_escape,
|
|
4045
|
-
evidence: args.evidence,
|
|
4046
|
-
root_cause: args.root_cause,
|
|
4047
|
-
fix_required: args.fix_required,
|
|
4048
|
-
owner: args.owner,
|
|
4049
|
-
due_date: args.due_date,
|
|
4050
|
-
capability_action: args.capability_action,
|
|
4051
|
-
created_at: args.created_at ?? new Date().toISOString(),
|
|
4052
|
-
};
|
|
4053
|
-
store.append(report);
|
|
4054
|
-
return {
|
|
4055
|
-
result: { recorded: true, escape_id: report.escape_id },
|
|
4056
|
-
};
|
|
4057
|
-
});
|
|
4058
|
-
// ── sf_capability_update: 根据复盘结果更新 Capability Registry ──
|
|
4059
|
-
const CapabilityUpdateSchema = {
|
|
4060
|
-
policy_id: z.string().describe("要更新的 policy ID(如 CAP-003)"),
|
|
4061
|
-
target_state: z.enum(["enforced", "advisory", "experimental", "removed"]).describe("目标状态"),
|
|
4062
|
-
reason: z.string().describe("变更原因"),
|
|
4063
|
-
evidence_ids: z.array(z.string()).describe("支撑此变更的 escape report ID 列表"),
|
|
4064
|
-
confirmed_by: z.string().describe("人工确认者标识(如操作者名字)"),
|
|
4065
|
-
dry_run: z.boolean().optional().describe("dry_run 模式:只校验不持久化(默认 false)"),
|
|
4066
|
-
confirm: z.boolean().describe("人工确认标志,必须为 true 才能执行变更"),
|
|
4067
|
-
};
|
|
4068
|
-
registerSafeTool("sf_capability_update", "根据复盘结果更新 Capability Registry 状态。支持 dry_run 校验、证据校验、人工确认。不会自动触发,必须显式调用", CapabilityUpdateSchema, async (args) => {
|
|
4069
|
-
const stateDir = taskContext.getStateDir();
|
|
4070
|
-
const escapeStore = new (await lazyEscape()).EscapeReportStore(stateDir);
|
|
4071
|
-
const stateStore = new (await lazyCapState()).CapabilityStateStore(stateDir);
|
|
4072
|
-
const escapeReports = escapeStore.list();
|
|
4073
|
-
const capabilities = (await lazyCapability()).getAllCapabilities();
|
|
4074
|
-
const cap = capabilities.find((c) => c.policy_id === args.policy_id);
|
|
4075
|
-
const currentState = stateStore.getEffectiveState(args.policy_id, cap?.state ?? "experimental");
|
|
4076
|
-
const result = stateStore.apply({
|
|
4077
|
-
policy_id: args.policy_id,
|
|
4078
|
-
target_state: args.target_state,
|
|
4079
|
-
reason: args.reason,
|
|
4080
|
-
evidence_ids: args.evidence_ids,
|
|
4081
|
-
confirmed_by: args.confirmed_by,
|
|
4082
|
-
dry_run: args.dry_run ?? false,
|
|
4083
|
-
confirm: args.confirm,
|
|
4084
|
-
}, currentState, cap?.id ?? null, escapeReports);
|
|
4085
|
-
return {
|
|
4086
|
-
result: result,
|
|
4087
|
-
};
|
|
4088
|
-
});
|
|
4089
|
-
// ── sf_governance_report: 治理健康报告 ──
|
|
4090
|
-
const GovernanceReportSchema = {
|
|
4091
|
-
seed: z.number().optional().describe("抽样种子(用于计算 sampled_count,默认 0)"),
|
|
4092
|
-
};
|
|
4093
|
-
registerSafeTool("sf_governance_report", "生成治理健康报告:汇总审计池、逃逸报告、能力动作决策。只读,不改状态", GovernanceReportSchema, async (args) => {
|
|
4094
|
-
const stateDir = taskContext.getStateDir();
|
|
4095
|
-
const seed = args.seed ?? 0;
|
|
4096
|
-
const pool = new (await lazyAuditPool()).AuditPool(stateDir);
|
|
4097
|
-
const escapeStore = new (await lazyEscape()).EscapeReportStore(stateDir);
|
|
4098
|
-
const auditItems = pool.list();
|
|
4099
|
-
const auditStats = pool.stats();
|
|
4100
|
-
const escapeReports = escapeStore.list();
|
|
4101
|
-
const escapeStats = escapeStore.stats();
|
|
4102
|
-
// 为所有能力生成动作决策(使用有效状态)
|
|
4103
|
-
const capabilities = (await lazyCapability()).getAllCapabilities();
|
|
4104
|
-
const stateStore = new (await lazyCapState()).CapabilityStateStore(stateDir);
|
|
4105
|
-
const decisions = await Promise.all(capabilities.map(async (cap) => {
|
|
4106
|
-
const effectiveState = stateStore.getEffectiveState(cap.policy_id, cap.state);
|
|
4107
|
-
return (await lazyCapAdvisor()).decideAction(escapeReports, effectiveState, cap.policy_id);
|
|
4108
|
-
}));
|
|
4109
|
-
// 为 sampled_count 生成抽样决策
|
|
4110
|
-
const sampleResult = (await lazyAuditSampler()).sampleAuditItems(auditItems, seed);
|
|
4111
|
-
// 双层机制发现
|
|
4112
|
-
const dlFindings = (await lazyDualLayer()).validateMechanismLayerMaps();
|
|
4113
|
-
const dlMechanismCount = (await lazyDualLayer()).listMechanismLayerMaps().length;
|
|
4114
|
-
// 收集近期任务的产物记录
|
|
4115
|
-
const recentTasks = await taskContext.listRecent(20);
|
|
4116
|
-
const artifacts = [];
|
|
4117
|
-
for (const t of recentTasks) {
|
|
4118
|
-
const tCtx = await taskContext.load(t.task_id);
|
|
4119
|
-
if (tCtx?.artifact_output)
|
|
4120
|
-
artifacts.push(tCtx.artifact_output);
|
|
4121
|
-
}
|
|
4122
|
-
// 收集配置解析报告 — 使用共享函数获取真实数据
|
|
4123
|
-
let configReports = [];
|
|
4124
|
-
let configEntries = [];
|
|
4125
|
-
try {
|
|
4126
|
-
const resolved = await (await lazyConfigPrecedence()).resolveCurrentProjectConfigReports(projectPath);
|
|
4127
|
-
configReports = resolved.reports;
|
|
4128
|
-
configEntries = resolved.entries;
|
|
4129
|
-
}
|
|
4130
|
-
catch (e) {
|
|
4131
|
-
internalWarn("配置报告", "解析失败:", e instanceof Error ? e.message : String(e));
|
|
4132
|
-
}
|
|
4133
|
-
// 同时包含近期任务上下文中的报告
|
|
4134
|
-
for (const t of recentTasks) {
|
|
4135
|
-
const tCtx = await taskContext.load(t.task_id);
|
|
4136
|
-
if (tCtx?.expansion?.config_resolution_reports) {
|
|
4137
|
-
configReports.push(...tCtx.expansion.config_resolution_reports);
|
|
4138
|
-
}
|
|
4139
|
-
}
|
|
4140
|
-
const report = (await lazyGovernance()).generateReport(auditStats, auditItems, escapeReports, escapeStats, decisions, new Date(), sampleResult.decisions, dlFindings, dlMechanismCount, artifacts.length > 0 ? artifacts : undefined, configReports.length > 0 ? configReports : undefined, configEntries.length > 0 ? configEntries : undefined);
|
|
4141
|
-
return {
|
|
4142
|
-
result: report,
|
|
4143
|
-
};
|
|
4144
|
-
});
|
|
4145
|
-
// ── sf_audit_integration: 主链路集成审计 ──
|
|
4146
|
-
const AuditIntegrationSchema = {
|
|
4147
|
-
changed_files: z.array(z.string()).optional().describe("只审计指定的变更文件列表"),
|
|
4148
|
-
json_output: z.boolean().optional().describe("以 JSON 格式输出(默认为人类可读文本)"),
|
|
4149
|
-
};
|
|
4150
|
-
registerSafeTool("sf_audit_integration", "审计生产代码的主链路集成状态,检测孤岛模块(只被测试导入、无生产代码调用的模块)", AuditIntegrationSchema, async (args) => {
|
|
4151
|
-
const projectPath = config._projectPath || process.cwd();
|
|
4152
|
-
// 使用作用域感知的生产文件收集(支持多仓库、多语言)
|
|
4153
|
-
const { collectAllProductionFiles } = await import("../../engine/main_path_integration_contract.js");
|
|
4154
|
-
const allProdFiles = collectAllProductionFiles(projectPath, config);
|
|
4155
|
-
if (allProdFiles.length === 0) {
|
|
4156
|
-
return {
|
|
4157
|
-
result: { error: "未找到生产源文件" },
|
|
4158
|
-
};
|
|
4159
|
-
}
|
|
4160
|
-
const targetFiles = args.changed_files
|
|
4161
|
-
? allProdFiles.filter((rel) => args.changed_files.some((cf) => rel === cf || rel.startsWith(cf.replace(/\.(ts|tsx|js|jsx|java|kt|go|py)$/, ""))))
|
|
4162
|
-
: allProdFiles;
|
|
4163
|
-
const contracts = (await lazyMainPath()).buildMainPathIntegrationContracts(projectPath, targetFiles, config);
|
|
4164
|
-
const report = (await lazyMainPath()).auditIntegration(contracts);
|
|
4165
|
-
if (args.json_output) {
|
|
4166
|
-
return {
|
|
4167
|
-
result: report,
|
|
4168
|
-
};
|
|
4169
|
-
}
|
|
4170
|
-
const lines = [];
|
|
4171
|
-
lines.push("主链路集成审计报告");
|
|
4172
|
-
lines.push(`受检模块: ${targetFiles.length} | 孤岛: ${report.orphan_modules.length} | 仅测试: ${report.test_only_modules.length} | 仅注册: ${report.registry_only_modules.length}`);
|
|
4173
|
-
lines.push("");
|
|
4174
|
-
for (const finding of report.findings) {
|
|
4175
|
-
const icon = finding.severity === "hard_fail" ? "X" : finding.severity === "warning" ? "~" : "i";
|
|
4176
|
-
lines.push(`${icon} ${finding.module_path}: ${finding.reason}`);
|
|
4177
|
-
if (finding.recommended_action) {
|
|
4178
|
-
lines.push(` -> ${finding.recommended_action}`);
|
|
4179
|
-
}
|
|
4180
|
-
}
|
|
4181
|
-
if (report.findings.length === 0) {
|
|
4182
|
-
lines.push("所有受检模块已通过集成检查。");
|
|
4183
|
-
}
|
|
4184
|
-
return {
|
|
4185
|
-
result: { text: lines.join("\n") },
|
|
4186
|
-
};
|
|
4187
|
-
});
|
|
4188
|
-
// ── sf_navigation: 工作流导航 — 问题六十五 ──
|
|
4189
|
-
const NavigationSchema = {
|
|
4190
|
-
project_path: z.string().optional().describe("项目路径(可选,默认当前目录)"),
|
|
4191
|
-
};
|
|
4192
|
-
registerSafeTool("sf_navigation", "查询工作流导航: 当前项目阶段、任务阶段、下一步操作和禁止操作。用于\"下一步\"\"继续\"\"现在能写代码吗\"等模糊推进意图。不得靠模型经验回答,必须调用此工具获取真实导航状态", NavigationSchema, async (args) => {
|
|
4193
|
-
const projectPath = args.project_path || config._projectPath || process.cwd();
|
|
4194
|
-
const { planNextAction } = await import("../../engine/next_action_planner.js");
|
|
4195
|
-
const plan = await planNextAction(projectPath);
|
|
4196
|
-
return {
|
|
4197
|
-
result: {
|
|
4198
|
-
project_stage: plan.project_stage,
|
|
4199
|
-
task_stage: plan.task_stage,
|
|
4200
|
-
current_task_id: plan.current_task_id,
|
|
4201
|
-
confidence: plan.confidence,
|
|
4202
|
-
stage_evidence: plan.stage_evidence,
|
|
4203
|
-
blocking_reasons: plan.blocking_reasons,
|
|
4204
|
-
stale_task: plan.stale_task,
|
|
4205
|
-
confirmation_decisions: plan.confirmation_decisions,
|
|
4206
|
-
work_package: plan.work_package ? {
|
|
4207
|
-
id: plan.work_package.id,
|
|
4208
|
-
goal_zh: plan.work_package.goal_zh,
|
|
4209
|
-
description_zh: plan.work_package.description_zh,
|
|
4210
|
-
action: plan.work_package.action,
|
|
4211
|
-
tool_name: plan.work_package.tool_name,
|
|
4212
|
-
must_read: plan.work_package.must_read,
|
|
4213
|
-
forbidden_changes: plan.work_package.forbidden_changes,
|
|
4214
|
-
expected_outputs: plan.work_package.expected_outputs,
|
|
4215
|
-
acceptance_commands: plan.work_package.acceptance_commands,
|
|
4216
|
-
} : null,
|
|
4217
|
-
disallowed_actions: plan.disallowed_actions,
|
|
4218
|
-
recommended_commands: plan.recommended_commands,
|
|
4219
|
-
recommended_prompt_zh: plan.recommended_prompt_zh,
|
|
4220
|
-
},
|
|
4221
|
-
};
|
|
4222
|
-
});
|
|
4223
|
-
}
|
|
8
|
+
export { registerTools } from "../../server/tools/index.js";
|
|
9
|
+
export { createToolRegistrar } from "../../server/tools/middleware.js";
|
|
4224
10
|
//# sourceMappingURL=tools.js.map
|