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
package/dist/bin/soloforge.js
CHANGED
|
@@ -1,29 +1,42 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { routeIntent } from "../engine/intent_router.js";
|
|
19
|
-
import { debugLog, debug, userInfo, userWarn, userError, internalWarn, jsonSafeError, initLoggerFromEnv } from "../engine/logger.js";
|
|
20
|
-
import { auditControlPlaneProject, isSoloforgeStateBypassCommand } from "../engine/control_plane_contract.js";
|
|
21
|
-
import { getDesignLifecycleArtifactPaths } from "../engine/design_lifecycle_contract.js";
|
|
22
|
-
import { isSameOrDescendantPath } from "../engine/path_scope_utils.js";
|
|
23
|
-
const command = process.argv[2];
|
|
24
|
-
const args = process.argv.slice(3);
|
|
2
|
+
import { initLoggerFromEnv, userInfo } from "../engine/core/logger.js";
|
|
3
|
+
import { cmdConfigSet, cmdConfigShow, cmdConfigCheck, cmdConfigExport, cmdConfigExplain, cmdConfigUnset, } from "./config_commands.js";
|
|
4
|
+
import { command, args } from "./args.js";
|
|
5
|
+
import { EXIT } from "../engine/core/exit_codes.js";
|
|
6
|
+
import { cmdInitAuto, cmdInitBlueprint, cmdInit } from "./commands/init.js";
|
|
7
|
+
import { cmdGenerateHooks, cmdGenerateClaudeMd, cmdGenerateTrae, cmdGenerateCodex } from "./commands/hooks.js";
|
|
8
|
+
import { cmdCheckWrite } from "./commands/check_write.js";
|
|
9
|
+
import { cmdCheckBash, cmdPostBash } from "./commands/check_bash.js";
|
|
10
|
+
import { cmdDoctor, cmdPrePrompt, cmdValidate, cmdValidateMechanisms } from "./commands/validate.js";
|
|
11
|
+
import { cmdAuditTemplateMechanisms, cmdAuditDesignArtifacts, cmdUpgradeDesignArtifacts, cmdAuditTemplateVisibility, cmdAuditProjectKnowledge, cmdValidateKnowledge, } from "./commands/audit.js";
|
|
12
|
+
import { cmdSyncTemplates, cmdSyncAdapters, cmdMigrate, cmdValidateReleaseGate, cmdValidateNewIssue, cmdValidateFoundation, } from "./commands/sync.js";
|
|
13
|
+
import { cmdStatus, cmdNext, cmdStage, cmdCleanup, cmdVersion } from "./commands/status.js";
|
|
14
|
+
import { cmdAnalyze } from "./commands/analyze.js";
|
|
15
|
+
import { cmdModify } from "./commands/modify.js";
|
|
16
|
+
import { cmdReview } from "./commands/review.js";
|
|
17
|
+
import { cmdBrainstorm, cmdFirstPrinciples, cmdReasoningLog } from "./commands/reasoning.js";
|
|
25
18
|
async function main() {
|
|
26
19
|
initLoggerFromEnv();
|
|
20
|
+
// ── --help / -h 支持 ──
|
|
21
|
+
if (command === "--help" || command === "-h" || command === "help") {
|
|
22
|
+
userInfo(`SoloForge CLI
|
|
23
|
+
|
|
24
|
+
用法: soloforge <命令>
|
|
25
|
+
|
|
26
|
+
常用命令:
|
|
27
|
+
init 在当前项目初始化 .soloforge/
|
|
28
|
+
status 显示当前项目的 SoloForge 状态
|
|
29
|
+
validate 验证项目配置和知识文件
|
|
30
|
+
audit 审计模板与机制注册表
|
|
31
|
+
mcp 启动 MCP Server(供 IDE 适配器调用)
|
|
32
|
+
config 配置管理(set / show / check / export / explain / unset)
|
|
33
|
+
sync 同步模板和适配器(templates / adapters)
|
|
34
|
+
|
|
35
|
+
完整命令列表: soloforge --list
|
|
36
|
+
版本信息: soloforge version
|
|
37
|
+
`);
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
27
40
|
switch (command) {
|
|
28
41
|
case "init":
|
|
29
42
|
if (args.includes("--auto")) {
|
|
@@ -96,6 +109,12 @@ async function main() {
|
|
|
96
109
|
case "validate-new-issue":
|
|
97
110
|
await cmdValidateNewIssue();
|
|
98
111
|
break;
|
|
112
|
+
case "validate-knowledge":
|
|
113
|
+
await cmdValidateKnowledge();
|
|
114
|
+
break;
|
|
115
|
+
case "validate-foundation":
|
|
116
|
+
await cmdValidateFoundation();
|
|
117
|
+
break;
|
|
99
118
|
case "generate-trae":
|
|
100
119
|
await cmdGenerateTrae();
|
|
101
120
|
break;
|
|
@@ -110,29 +129,33 @@ async function main() {
|
|
|
110
129
|
case "config": {
|
|
111
130
|
const subCommand = args[0];
|
|
112
131
|
switch (subCommand) {
|
|
113
|
-
case "
|
|
114
|
-
await
|
|
132
|
+
case "set":
|
|
133
|
+
await cmdConfigSet();
|
|
134
|
+
break;
|
|
135
|
+
case "show":
|
|
136
|
+
await cmdConfigShow();
|
|
137
|
+
break;
|
|
138
|
+
case "check":
|
|
139
|
+
await cmdConfigCheck();
|
|
140
|
+
break;
|
|
141
|
+
case "export":
|
|
142
|
+
await cmdConfigExport();
|
|
115
143
|
break;
|
|
116
144
|
case "explain":
|
|
117
145
|
await cmdConfigExplain();
|
|
118
146
|
break;
|
|
119
|
-
case "confirm":
|
|
120
|
-
await cmdConfigConfirm();
|
|
121
|
-
break;
|
|
122
147
|
case "unset":
|
|
123
148
|
await cmdConfigUnset();
|
|
124
149
|
break;
|
|
125
|
-
case "repair":
|
|
126
|
-
await cmdConfigRepair();
|
|
127
|
-
break;
|
|
128
150
|
default:
|
|
129
|
-
userInfo("用法: soloforge config <
|
|
151
|
+
userInfo("用法: soloforge config <set|show|check|export|explain|unset> [options]");
|
|
130
152
|
userInfo("");
|
|
131
|
-
userInfo("
|
|
132
|
-
userInfo("
|
|
133
|
-
userInfo("
|
|
134
|
-
userInfo("
|
|
135
|
-
userInfo("
|
|
153
|
+
userInfo(" set 写入 intent.yaml 字段(如 set product_profile saas)");
|
|
154
|
+
userInfo(" show 显示合并后的完整配置(探测+intent+默认)");
|
|
155
|
+
userInfo(" check 运行探测+验证+冲突检测");
|
|
156
|
+
userInfo(" export 导出 intent.yaml 原始内容");
|
|
157
|
+
userInfo(" explain 解释字段来源和优先级");
|
|
158
|
+
userInfo(" unset 移除 intent.yaml 字段");
|
|
136
159
|
}
|
|
137
160
|
break;
|
|
138
161
|
}
|
|
@@ -148,6 +171,29 @@ async function main() {
|
|
|
148
171
|
case "cleanup":
|
|
149
172
|
await cmdCleanup();
|
|
150
173
|
break;
|
|
174
|
+
case "analyze":
|
|
175
|
+
await cmdAnalyze();
|
|
176
|
+
break;
|
|
177
|
+
case "modify":
|
|
178
|
+
await cmdModify();
|
|
179
|
+
break;
|
|
180
|
+
case "review":
|
|
181
|
+
await cmdReview();
|
|
182
|
+
break;
|
|
183
|
+
case "头脑风暴":
|
|
184
|
+
case "brainstorm":
|
|
185
|
+
await cmdBrainstorm();
|
|
186
|
+
break;
|
|
187
|
+
case "第一性原理":
|
|
188
|
+
case "first-principles":
|
|
189
|
+
case "first_principles":
|
|
190
|
+
await cmdFirstPrinciples();
|
|
191
|
+
break;
|
|
192
|
+
case "推理记录":
|
|
193
|
+
case "reasoning-log":
|
|
194
|
+
case "reasoning_log":
|
|
195
|
+
await cmdReasoningLog();
|
|
196
|
+
break;
|
|
151
197
|
default:
|
|
152
198
|
userInfo(`SoloForge CLI
|
|
153
199
|
|
|
@@ -167,7 +213,7 @@ async function main() {
|
|
|
167
213
|
check-bash PreToolUse hook,阻止 Bash 直接篡改 .soloforge/state 或绕过受控任务写业务实现
|
|
168
214
|
doctor 审计 MCP 控制面、适配器 hook、状态可信和恢复路径
|
|
169
215
|
post-bash PostToolUse hook,用于跟踪 Bash 执行结果
|
|
170
|
-
validate 验证项目配置和知识文件(
|
|
216
|
+
validate 验证项目配置和知识文件(intent.yaml 优先,缺失时自动推断)
|
|
171
217
|
validate-mechanisms 验证双层机制承载模型完整性(模板层 + 机制层)
|
|
172
218
|
audit-template-mechanisms 扫描模板与机制注册表交叉校验(--json 输出完整报告,--changed-only 仅检查变更文件)
|
|
173
219
|
audit-design-artifacts 审计架构/数据库/API 设计产物包(只读,--json 输出报告)
|
|
@@ -178,11 +224,12 @@ async function main() {
|
|
|
178
224
|
sync-adapters 同步适配器 Prompt(默认 dry-run,--apply 需 --confirm)
|
|
179
225
|
migrate 迁移项目 .soloforge/(默认 dry-run,--apply 需确认)
|
|
180
226
|
version 显示 SoloForge 版本信息
|
|
181
|
-
config
|
|
182
|
-
config
|
|
183
|
-
config
|
|
184
|
-
config
|
|
185
|
-
config
|
|
227
|
+
config set <field> <value> 写入 intent.yaml 字段
|
|
228
|
+
config show 显示合并后的完整配置(探测+intent+默认)
|
|
229
|
+
config check 运行探测+验证+冲突检测
|
|
230
|
+
config export 导出 intent.yaml 原始内容
|
|
231
|
+
config explain <field> 解释字段来源和优先级
|
|
232
|
+
config unset <field> 移除 intent.yaml 字段
|
|
186
233
|
status 显示当前项目的 SoloForge 状态
|
|
187
234
|
next 查询下一步操作和可执行工作包(默认只读)
|
|
188
235
|
next --json 纯 JSON 输出(无日志污染)
|
|
@@ -191,2750 +238,17 @@ async function main() {
|
|
|
191
238
|
stage --explain 详细解释当前阶段(判断依据、必要条件、下一阶段)
|
|
192
239
|
cleanup 清理过期任务和 evidence(默认 dry-run,--apply 执行实际清理)
|
|
193
240
|
cleanup --stale 检测陈旧 current-task 指针(--apply 时受控归档)
|
|
241
|
+
analyze 按需调用上下文引擎视图(--view <名称> --targets [...])
|
|
242
|
+
modify 脱离管线修改产物(读取 stdin 作为新内容)
|
|
243
|
+
review 脱离管线审查产物(自动应用 review 规则)
|
|
244
|
+
头脑风暴 / brainstorm 不确定时决策辅助(列举候选方案 + AI 偏好标注 + 用户选择)
|
|
245
|
+
第一性原理 / first-principles FP-01~04 规则检查(fundamental_need + 推理链 + 表面修复 + 术语替换)
|
|
246
|
+
推理记录 / reasoning-log 查看 FP 规则命中和头脑风暴历史记录
|
|
194
247
|
`);
|
|
195
248
|
}
|
|
196
249
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const projectPath = projectPathArg ? path.resolve(projectPathArg) : process.cwd();
|
|
202
|
-
// 层 1: 确定性指纹探测
|
|
203
|
-
const fp = await detectFingerprint(projectPath);
|
|
204
|
-
// 层 2: 规则推导 → config 草案
|
|
205
|
-
const draft = generateConfigDraft(fp);
|
|
206
|
-
// 层 3: 字段级 evidence
|
|
207
|
-
const evidence = generateConfigEvidence(fp, draft, "auto");
|
|
208
|
-
// 展示探测结果 + evidence
|
|
209
|
-
userInfo("\nSoloForge 自动配置探测结果:");
|
|
210
|
-
userInfo("=".repeat(50));
|
|
211
|
-
for (const [key, field] of Object.entries(evidence.fields)) {
|
|
212
|
-
const icon = field.confidence === "high" ? "✅" : field.confidence === "medium" ? "⚠️" : "❓";
|
|
213
|
-
const valStr = typeof field.value === "object" ? JSON.stringify(field.value) : String(field.value);
|
|
214
|
-
userInfo(` ${icon} ${key}: ${valStr} (${field.confidence}, ${field.confidence_source})`);
|
|
215
|
-
userInfo(` 证据: ${field.evidence.join(", ")}`);
|
|
216
|
-
}
|
|
217
|
-
userInfo("=".repeat(50));
|
|
218
|
-
userInfo(`综合置信度: ${draft.confidence}`);
|
|
219
|
-
if (draft.advisory_notes.length > 0) {
|
|
220
|
-
userInfo("建议:");
|
|
221
|
-
for (const note of draft.advisory_notes) {
|
|
222
|
-
userInfo(` - ${note}`);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// Schema 校验 (advisory)
|
|
226
|
-
const validation = validateConfigDraft(draft);
|
|
227
|
-
if (validation.warnings.length > 0) {
|
|
228
|
-
userInfo("\nschema 建议:");
|
|
229
|
-
for (const w of validation.warnings) {
|
|
230
|
-
userInfo(` ⚠️ ${w}`);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
if (!validation.valid) {
|
|
234
|
-
userInfo("\nschema 错误:");
|
|
235
|
-
for (const e of validation.errors) {
|
|
236
|
-
userInfo(` ❌ ${e}`);
|
|
237
|
-
}
|
|
238
|
-
userInfo("\n配置校验失败,请手动运行 `soloforge init --interactive`。");
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
if (dryRun) {
|
|
242
|
-
userInfo("\n[dry-run] 不写入文件。使用不带 --dry-run 的命令执行写入。");
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
// 写入门禁: 所有必要字段必须 high confidence + detected/user_declared/confirmed
|
|
246
|
-
const gate = canAutoWrite(evidence);
|
|
247
|
-
if (!gate.allowed) {
|
|
248
|
-
userInfo(`\n⚠️ 存在低/中置信度配置项,拒绝写入:`);
|
|
249
|
-
for (const f of gate.blockedFields) {
|
|
250
|
-
userInfo(` - ${f}`);
|
|
251
|
-
}
|
|
252
|
-
userInfo("请使用 `soloforge init --interactive` 或 `soloforge init --blueprint \"...\"` 生成配置。");
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
// 写入配置 + evidence
|
|
256
|
-
await finishInitAutoConfig(projectPath, draft, evidence);
|
|
257
|
-
}
|
|
258
|
-
async function finishInitAutoConfig(projectPath, draft, evidence) {
|
|
259
|
-
const dirs = [
|
|
260
|
-
".soloforge/state", ".soloforge/state/debt",
|
|
261
|
-
".soloforge/knowledge/patterns", ".soloforge/knowledge/patterns/core",
|
|
262
|
-
".soloforge/knowledge/patterns/temp",
|
|
263
|
-
".soloforge/knowledge/procedures", ".soloforge/knowledge/domain/backend",
|
|
264
|
-
".soloforge/knowledge/domain/frontend", ".soloforge/knowledge/acceptance_templates",
|
|
265
|
-
".soloforge/knowledge/review_rules", ".soloforge/knowledge/product_profiles",
|
|
266
|
-
".soloforge/knowledge/checklists", ".soloforge/knowledge/templates",
|
|
267
|
-
".soloforge/staged",
|
|
268
|
-
];
|
|
269
|
-
for (const dir of dirs) {
|
|
270
|
-
fss.mkdirSync(path.join(projectPath, dir), { recursive: true });
|
|
271
|
-
}
|
|
272
|
-
writeConfigWithEvidence(projectPath, draft, evidence);
|
|
273
|
-
ensureGitignore(projectPath);
|
|
274
|
-
// 继续执行普通 init 的模板复制和适配器生成
|
|
275
|
-
await copyGlobalPatterns(projectPath);
|
|
276
|
-
await copyKnowledgeTemplates(projectPath);
|
|
277
|
-
await generateAdapterConfigs(projectPath, "claude-code");
|
|
278
|
-
}
|
|
279
|
-
function writeConfigWithEvidence(projectPath, draft, evidence) {
|
|
280
|
-
const configPath = path.join(projectPath, ".soloforge", "config.yaml");
|
|
281
|
-
const evidencePath = path.join(projectPath, ".soloforge", "config.evidence.json");
|
|
282
|
-
const yamlConfig = {
|
|
283
|
-
schema_version: 1,
|
|
284
|
-
name: draft.name,
|
|
285
|
-
tech_stack: draft.tech_stack,
|
|
286
|
-
product_profile: draft.product_profile,
|
|
287
|
-
repos: [],
|
|
288
|
-
build_commands: draft.build_commands,
|
|
289
|
-
scope: draft.scope,
|
|
290
|
-
};
|
|
291
|
-
fss.writeFileSync(configPath, YAML.stringify(yamlConfig), "utf-8");
|
|
292
|
-
// 写入旧版 evidence 格式(向后兼容)+ schema v2 条目
|
|
293
|
-
fss.writeFileSync(evidencePath, JSON.stringify(evidence, null, 2), "utf-8");
|
|
294
|
-
// 同时写入 schema v2 条目
|
|
295
|
-
const v2Entries = Object.entries(evidence.fields).map(([key, field]) => ({
|
|
296
|
-
field_path: key,
|
|
297
|
-
value_hash: hashConfigValue(JSON.stringify(field.value)),
|
|
298
|
-
source: mapLegacySource(field.confidence_source),
|
|
299
|
-
confidence: field.confidence === "high" ? 1.0 : field.confidence === "medium" ? 0.6 : 0.3,
|
|
300
|
-
evidence_refs: field.evidence || [],
|
|
301
|
-
lifetime: "project_persistent",
|
|
302
|
-
collected_at: evidence.generated_at || new Date().toISOString(),
|
|
303
|
-
}));
|
|
304
|
-
// 合并 v2 条目到 evidence 文件
|
|
305
|
-
try {
|
|
306
|
-
const existing = JSON.parse(fss.readFileSync(evidencePath, "utf-8"));
|
|
307
|
-
existing.entries = v2Entries;
|
|
308
|
-
existing.updated_at = new Date().toISOString();
|
|
309
|
-
fss.writeFileSync(evidencePath, JSON.stringify(existing, null, 2), "utf-8");
|
|
310
|
-
}
|
|
311
|
-
catch (e) {
|
|
312
|
-
internalWarn("CLI", `更新 evidence 文件失败: ${e instanceof Error ? e.message : String(e)}`);
|
|
313
|
-
}
|
|
314
|
-
userInfo(`\n✅ .soloforge/config.yaml + config.evidence.json created`);
|
|
315
|
-
}
|
|
316
|
-
function hashConfigValue(str) {
|
|
317
|
-
return crypto.createHash("sha256").update(str).digest("hex").slice(0, 16);
|
|
318
|
-
}
|
|
319
|
-
function mapLegacySource(source) {
|
|
320
|
-
switch (source) {
|
|
321
|
-
case "detected": return "detected";
|
|
322
|
-
case "user_declared": return "user_declared";
|
|
323
|
-
case "confirmed": return "confirmed";
|
|
324
|
-
default: return "knowledge_default";
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
async function cmdInitBlueprint() {
|
|
328
|
-
debug("CLI", "执行 cmdInitBlueprint");
|
|
329
|
-
const blueprintText = getArgValue("--blueprint");
|
|
330
|
-
if (!blueprintText) {
|
|
331
|
-
userError("❌ --blueprint 需要提供描述文本,例如: soloforge init --blueprint \"Spring Boot + React 的 B2B 内部管理系统\"");
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const projectPathArg = getArgValue("--project-path");
|
|
335
|
-
const projectPath = projectPathArg ? path.resolve(projectPathArg) : process.cwd();
|
|
336
|
-
const parsed = parseBlueprint(blueprintText);
|
|
337
|
-
if (!parsed.parsed) {
|
|
338
|
-
userInfo("⚠️ 无法从蓝图文本解析技术栈,请使用 --interactive。");
|
|
339
|
-
userInfo("支持的框架关键词: Spring Boot, Go, Rust, Gradle, React, Vue, Angular, Next.js, Nuxt");
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
// 从解析的蓝图构建草稿
|
|
343
|
-
const draft = {
|
|
344
|
-
name: path.basename(projectPath),
|
|
345
|
-
tech_stack: {
|
|
346
|
-
backend: parsed.tech_stack.backend ?? { lang: "", framework: "", version: "" },
|
|
347
|
-
frontend: parsed.tech_stack.frontend ?? { lang: "", framework: "", version: "" },
|
|
348
|
-
},
|
|
349
|
-
product_profile: parsed.product_profile ?? "default",
|
|
350
|
-
build_commands: {
|
|
351
|
-
backend: blueprintBackendCommands(parsed.tech_stack.backend?.framework),
|
|
352
|
-
frontend: blueprintFrontendCommands(parsed.tech_stack.frontend?.framework),
|
|
353
|
-
},
|
|
354
|
-
scope: {
|
|
355
|
-
backend: parsed.tech_stack.backend ? ["src/"] : [],
|
|
356
|
-
frontend: parsed.tech_stack.frontend ? ["src/"] : [],
|
|
357
|
-
},
|
|
358
|
-
advisory_notes: [],
|
|
359
|
-
confidence: "high",
|
|
360
|
-
};
|
|
361
|
-
const evidence = generateBlueprintEvidence(blueprintText, draft, projectPath);
|
|
362
|
-
// 创建目录 + 写入配置 + evidence
|
|
363
|
-
const dirs = [
|
|
364
|
-
".soloforge/state", ".soloforge/state/debt",
|
|
365
|
-
".soloforge/knowledge/patterns", ".soloforge/knowledge/patterns/core",
|
|
366
|
-
".soloforge/knowledge/patterns/temp",
|
|
367
|
-
".soloforge/knowledge/procedures", ".soloforge/knowledge/domain/backend",
|
|
368
|
-
".soloforge/knowledge/domain/frontend", ".soloforge/knowledge/acceptance_templates",
|
|
369
|
-
".soloforge/knowledge/review_rules", ".soloforge/knowledge/product_profiles",
|
|
370
|
-
".soloforge/knowledge/checklists", ".soloforge/knowledge/templates",
|
|
371
|
-
".soloforge/staged",
|
|
372
|
-
];
|
|
373
|
-
for (const dir of dirs) {
|
|
374
|
-
fss.mkdirSync(path.join(projectPath, dir), { recursive: true });
|
|
375
|
-
}
|
|
376
|
-
writeConfigWithEvidence(projectPath, draft, evidence);
|
|
377
|
-
ensureGitignore(projectPath);
|
|
378
|
-
await copyGlobalPatterns(projectPath);
|
|
379
|
-
await copyKnowledgeTemplates(projectPath);
|
|
380
|
-
await generateAdapterConfigs(projectPath, "claude-code");
|
|
381
|
-
}
|
|
382
|
-
function blueprintBackendCommands(framework) {
|
|
383
|
-
switch (framework) {
|
|
384
|
-
case "spring-boot": return { build: "./mvnw compile -q", test: "./mvnw test -q", full: "./mvnw verify -q" };
|
|
385
|
-
case "gradle": return { build: "./gradlew compileJava", test: "./gradlew test", full: "./gradlew check" };
|
|
386
|
-
case "stdlib": return { build: "go build ./...", test: "go test ./...", full: "go test -race ./..." };
|
|
387
|
-
case "cargo": return { build: "cargo build", test: "cargo test", full: "cargo test --all" };
|
|
388
|
-
default: return { build: "echo 'no backend build'", test: "echo 'no backend tests'", full: "echo 'no backend'" };
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
function blueprintFrontendCommands(framework) {
|
|
392
|
-
switch (framework) {
|
|
393
|
-
case "react":
|
|
394
|
-
case "vue":
|
|
395
|
-
return { build: "npm run build", test: "npm test", full: "npm run build && npm test" };
|
|
396
|
-
case "angular":
|
|
397
|
-
return { build: "npx ng build", test: "npx ng test", full: "npx ng build && npx ng test" };
|
|
398
|
-
default: return { build: "echo 'no frontend build'", test: "echo 'no frontend tests'", full: "echo 'no frontend'" };
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
async function cmdInit() {
|
|
402
|
-
debug("CLI", "执行 cmdInit");
|
|
403
|
-
const interactive = args.includes("--interactive");
|
|
404
|
-
const adapter = getArgValue("--adapter") || "claude-code";
|
|
405
|
-
const projectPathArg = getArgValue("--project-path");
|
|
406
|
-
const projectPath = projectPathArg ? path.resolve(projectPathArg) : process.cwd();
|
|
407
|
-
const systemType = getArgValue("--system-type");
|
|
408
|
-
// 校验 --system-type
|
|
409
|
-
if (systemType && systemType !== "新系统" && systemType !== "老系统") {
|
|
410
|
-
userInfo("⚠️ --system-type 仅支持 '新系统' 或 '老系统'");
|
|
411
|
-
process.exit(1);
|
|
412
|
-
}
|
|
413
|
-
// 创建目录
|
|
414
|
-
const dirs = [
|
|
415
|
-
".soloforge/state",
|
|
416
|
-
".soloforge/state/debt",
|
|
417
|
-
".soloforge/knowledge/patterns",
|
|
418
|
-
".soloforge/knowledge/patterns/core",
|
|
419
|
-
".soloforge/knowledge/patterns/temp",
|
|
420
|
-
".soloforge/knowledge/procedures",
|
|
421
|
-
".soloforge/knowledge/domain/backend",
|
|
422
|
-
".soloforge/knowledge/domain/frontend",
|
|
423
|
-
".soloforge/knowledge/internal/rules",
|
|
424
|
-
".soloforge/knowledge/internal/patterns",
|
|
425
|
-
".soloforge/knowledge/rules/shared",
|
|
426
|
-
".soloforge/knowledge/rules/new-system",
|
|
427
|
-
".soloforge/knowledge/rules/existing-system",
|
|
428
|
-
".soloforge/knowledge/checklists",
|
|
429
|
-
".soloforge/knowledge/artifacts/shared",
|
|
430
|
-
".soloforge/knowledge/artifacts/new-system",
|
|
431
|
-
".soloforge/knowledge/artifacts/existing-system",
|
|
432
|
-
".soloforge/knowledge/profiles",
|
|
433
|
-
".soloforge/templates/artifacts/shared",
|
|
434
|
-
".soloforge/templates/artifacts/new-system",
|
|
435
|
-
".soloforge/templates/artifacts/existing-system",
|
|
436
|
-
".soloforge/templates/rules/shared",
|
|
437
|
-
".soloforge/templates/rules/new-system",
|
|
438
|
-
".soloforge/templates/rules/existing-system",
|
|
439
|
-
".soloforge/templates/gates/shared",
|
|
440
|
-
".soloforge/templates/gates/existing-system",
|
|
441
|
-
".soloforge/staged",
|
|
442
|
-
];
|
|
443
|
-
for (const dir of dirs) {
|
|
444
|
-
fss.mkdirSync(path.join(projectPath, dir), { recursive: true });
|
|
445
|
-
}
|
|
446
|
-
// 仅 --interactive 模式生成 config.yaml + evidence;普通 init 不再生成
|
|
447
|
-
if (interactive) {
|
|
448
|
-
const config = await interactiveConfig(projectPath);
|
|
449
|
-
if (config) {
|
|
450
|
-
// config 结构为 { draft, evidence }
|
|
451
|
-
writeConfigWithEvidence(projectPath, config.draft, config.evidence);
|
|
452
|
-
}
|
|
453
|
-
else if (!process.stdin.isTTY) {
|
|
454
|
-
userInfo("⚠️ interactive requires TTY. 请使用 --auto 或 --blueprint。");
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
// 生成 .mcp.json(SoloForge + Playwright)
|
|
458
|
-
if (adapter === "claude-code" || adapter === "all") {
|
|
459
|
-
const mcpPath = path.join(projectPath, ".mcp.json");
|
|
460
|
-
if (!fss.existsSync(mcpPath)) {
|
|
461
|
-
const mcpConfig = {
|
|
462
|
-
mcpServers: {
|
|
463
|
-
soloforge: {
|
|
464
|
-
command: "soloforge",
|
|
465
|
-
args: ["mcp"],
|
|
466
|
-
env: { SOLOFORGE_PROJECT: projectPath },
|
|
467
|
-
},
|
|
468
|
-
playwright: {
|
|
469
|
-
command: "npx",
|
|
470
|
-
args: ["@playwright/mcp@latest", "--headless"],
|
|
471
|
-
},
|
|
472
|
-
},
|
|
473
|
-
};
|
|
474
|
-
fss.writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2), "utf-8");
|
|
475
|
-
userInfo("✅ .mcp.json 已创建(soloforge + playwright)");
|
|
476
|
-
}
|
|
477
|
-
// 生成 hooks
|
|
478
|
-
await cmdGenerateHooks(projectPath);
|
|
479
|
-
// 生成 CLAUDE.md
|
|
480
|
-
await cmdGenerateClaudeMdInner(projectPath);
|
|
481
|
-
}
|
|
482
|
-
// 生成 Trae IDE 配置
|
|
483
|
-
if (adapter === "trae" || adapter === "all") {
|
|
484
|
-
await cmdGenerateTraeInner(projectPath);
|
|
485
|
-
userInfo("💡 提示: 使用项目级 .trae/ 配置需在 Trae 中开启 beta flag");
|
|
486
|
-
}
|
|
487
|
-
// 生成 Codex App 配置
|
|
488
|
-
if (adapter === "codex" || adapter === "all") {
|
|
489
|
-
await cmdGenerateCodexInner(projectPath);
|
|
490
|
-
}
|
|
491
|
-
// 复制模板 + 适配器配置(共享逻辑)
|
|
492
|
-
await copyGlobalPatterns(projectPath);
|
|
493
|
-
await copyKnowledgeTemplates(projectPath);
|
|
494
|
-
// 复制管线模板(shared + 系统专属)
|
|
495
|
-
await copyPipelineTemplates(projectPath, systemType);
|
|
496
|
-
// 确保 .gitignore 包含必要条目
|
|
497
|
-
ensureGitignore(projectPath);
|
|
498
|
-
userInfo(`\n✅ SoloForge 初始化完成 (适配器: ${adapter})。${adapter === "trae" ? "请打开 Trae IDE 开始使用。" :
|
|
499
|
-
adapter === "codex" ? "请打开 Codex App 开始使用。" :
|
|
500
|
-
adapter === "all" ? "可在 Claude Code、Trae IDE 或 Codex App 中使用。" :
|
|
501
|
-
"请打开 Claude Code 开始使用。"}`);
|
|
502
|
-
}
|
|
503
|
-
async function copyGlobalPatterns(projectPath) {
|
|
504
|
-
const { copyPatternsToGlobal } = await import("../engine/template_init_sync.js");
|
|
505
|
-
const globalDir = getGlobalPatternsDir();
|
|
506
|
-
const templatesRoot = path.resolve(import.meta.dirname, "..", "..");
|
|
507
|
-
const result = await copyPatternsToGlobal(templatesRoot, globalDir);
|
|
508
|
-
const parts = [];
|
|
509
|
-
if (result.copied > 0)
|
|
510
|
-
parts.push(`新增 ${result.copied} 个`);
|
|
511
|
-
if (result.skipped > 0)
|
|
512
|
-
parts.push(`跳过 ${result.skipped} 个(已存在)`);
|
|
513
|
-
if (parts.length > 0) {
|
|
514
|
-
userInfo(`✅ 全局模板 ~/.soloforge/patterns/: ${parts.join(",")}`);
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
async function copyKnowledgeTemplates(projectPath) {
|
|
518
|
-
const { copyKnowledgeToProject } = await import("../engine/template_init_sync.js");
|
|
519
|
-
const templatesRoot = path.resolve(import.meta.dirname, "..", "..");
|
|
520
|
-
const result = await copyKnowledgeToProject(templatesRoot, projectPath);
|
|
521
|
-
const parts = [];
|
|
522
|
-
if (result.copied > 0)
|
|
523
|
-
parts.push(`${result.copied} 个已复制`);
|
|
524
|
-
if (result.skipped_internal > 0)
|
|
525
|
-
parts.push(`${result.skipped_internal} 个内部资产已跳过`);
|
|
526
|
-
if (result.skipped_no_contract > 0)
|
|
527
|
-
parts.push(`${result.skipped_no_contract} 个无合同已跳过`);
|
|
528
|
-
if (parts.length > 0) {
|
|
529
|
-
userInfo(`✅ 知识模板: ${parts.join(",")}`);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
async function copyPipelineTemplates(projectPath, systemType) {
|
|
533
|
-
const { copyPipelineTemplatesToProject } = await import("../engine/template_init_sync.js");
|
|
534
|
-
const templatesRoot = path.resolve(import.meta.dirname, "..", "..");
|
|
535
|
-
const result = await copyPipelineTemplatesToProject(templatesRoot, projectPath, systemType);
|
|
536
|
-
const parts = [];
|
|
537
|
-
if (result.copied > 0)
|
|
538
|
-
parts.push(`${result.copied} 个新增`);
|
|
539
|
-
if (result.updated > 0)
|
|
540
|
-
parts.push(`${result.updated} 个已更新`);
|
|
541
|
-
if (result.skipped_modified > 0)
|
|
542
|
-
parts.push(`${result.skipped_modified} 个已修改跳过`);
|
|
543
|
-
if (result.skipped_exists > 0)
|
|
544
|
-
parts.push(`${result.skipped_exists} 个已存在`);
|
|
545
|
-
const typeLabel = systemType ?? "全部";
|
|
546
|
-
if (parts.length > 0) {
|
|
547
|
-
userInfo(`✅ 管线模板 (${typeLabel}): ${parts.join(",")}`);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
async function generateAdapterConfigs(projectPath, adapter) {
|
|
551
|
-
if (adapter === "claude-code" || adapter === "all") {
|
|
552
|
-
const mcpPath = path.join(projectPath, ".mcp.json");
|
|
553
|
-
if (!fss.existsSync(mcpPath)) {
|
|
554
|
-
const mcpConfig = {
|
|
555
|
-
mcpServers: {
|
|
556
|
-
soloforge: { command: "soloforge", args: ["mcp"], env: { SOLOFORGE_PROJECT: projectPath } },
|
|
557
|
-
playwright: { command: "npx", args: ["@playwright/mcp@latest", "--headless"] },
|
|
558
|
-
},
|
|
559
|
-
};
|
|
560
|
-
fss.writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2), "utf-8");
|
|
561
|
-
userInfo("✅ .mcp.json 已创建(soloforge + playwright)");
|
|
562
|
-
}
|
|
563
|
-
await cmdGenerateHooks(projectPath);
|
|
564
|
-
await cmdGenerateClaudeMdInner(projectPath);
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
function ensureGitignore(projectPath) {
|
|
568
|
-
const gitignorePath = path.join(projectPath, ".gitignore");
|
|
569
|
-
const requiredEntries = [".mcp.json", ".soloforge/"];
|
|
570
|
-
let content = "";
|
|
571
|
-
if (fss.existsSync(gitignorePath)) {
|
|
572
|
-
content = fss.readFileSync(gitignorePath, "utf-8");
|
|
573
|
-
}
|
|
574
|
-
const lines = content.split("\n");
|
|
575
|
-
const missing = requiredEntries.filter((entry) => !lines.some((l) => l.trim() === entry));
|
|
576
|
-
if (missing.length > 0) {
|
|
577
|
-
const addition = (content.endsWith("\n") ? "" : "\n") + missing.join("\n") + "\n";
|
|
578
|
-
fss.appendFileSync(gitignorePath, addition, "utf-8");
|
|
579
|
-
userInfo(`✅ .gitignore 已更新: ${missing.join(", ")}`);
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
async function cmdGenerateHooks(projectPath) {
|
|
583
|
-
const targetPath = projectPath ?? process.cwd();
|
|
584
|
-
const hooksConfig = generateHooksConfig();
|
|
585
|
-
const claudeDir = path.join(targetPath, ".claude");
|
|
586
|
-
fss.mkdirSync(claudeDir, { recursive: true });
|
|
587
|
-
const settingsPath = path.join(claudeDir, "settings.json");
|
|
588
|
-
let existing = {};
|
|
589
|
-
if (fss.existsSync(settingsPath)) {
|
|
590
|
-
try {
|
|
591
|
-
existing = JSON.parse(fss.readFileSync(settingsPath, "utf-8"));
|
|
592
|
-
}
|
|
593
|
-
catch {
|
|
594
|
-
existing = {};
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
// 仅 merge hooks 字段,保留用户的 permissions/env 等设置
|
|
598
|
-
existing.hooks = hooksConfig.hooks;
|
|
599
|
-
fss.writeFileSync(settingsPath, JSON.stringify(existing, null, 2), "utf-8");
|
|
600
|
-
userInfo("✅ .claude/settings.json 已更新 hooks 配置");
|
|
601
|
-
}
|
|
602
|
-
async function cmdGenerateClaudeMd() {
|
|
603
|
-
await cmdGenerateClaudeMdInner(process.cwd());
|
|
604
|
-
}
|
|
605
|
-
async function cmdGenerateTrae() {
|
|
606
|
-
await cmdGenerateTraeInner(process.cwd());
|
|
607
|
-
}
|
|
608
|
-
async function cmdGenerateCodex() {
|
|
609
|
-
await cmdGenerateCodexInner(process.cwd());
|
|
610
|
-
}
|
|
611
|
-
async function cmdGenerateCodexInner(projectPath) {
|
|
612
|
-
// 生成 .codex/config.toml
|
|
613
|
-
const codexDir = path.join(projectPath, ".codex");
|
|
614
|
-
fss.mkdirSync(codexDir, { recursive: true });
|
|
615
|
-
const tomlContent = generateCodexMcpConfig(projectPath);
|
|
616
|
-
fss.writeFileSync(path.join(codexDir, "config.toml"), tomlContent, "utf-8");
|
|
617
|
-
userInfo("✅ .codex/config.toml 已创建");
|
|
618
|
-
// 生成 .codex/hooks.json
|
|
619
|
-
const hooksContent = generateCodexHooksConfig();
|
|
620
|
-
fss.writeFileSync(path.join(codexDir, "hooks.json"), hooksContent, "utf-8");
|
|
621
|
-
userInfo("✅ .codex/hooks.json 已创建");
|
|
622
|
-
// 生成 AGENTS.md
|
|
623
|
-
const { config } = await resolveProjectConfig(projectPath);
|
|
624
|
-
const agentsContent = generateCodexAgentsMd(config);
|
|
625
|
-
fss.writeFileSync(path.join(projectPath, "AGENTS.md"), agentsContent, "utf-8");
|
|
626
|
-
userInfo("✅ AGENTS.md 已创建");
|
|
627
|
-
}
|
|
628
|
-
async function cmdGenerateTraeInner(projectPath) {
|
|
629
|
-
// 生成 .trae/mcp.json
|
|
630
|
-
const traeDir = path.join(projectPath, ".trae");
|
|
631
|
-
fss.mkdirSync(traeDir, { recursive: true });
|
|
632
|
-
const traeMcpPath = path.join(traeDir, "mcp.json");
|
|
633
|
-
const traeMcpConfig = generateTraeMcpConfig(projectPath);
|
|
634
|
-
fss.writeFileSync(traeMcpPath, JSON.stringify(traeMcpConfig, null, 2), "utf-8");
|
|
635
|
-
userInfo("✅ .trae/mcp.json created");
|
|
636
|
-
// 生成 .trae/rules/project_rules.md
|
|
637
|
-
const rulesDir = path.join(traeDir, "rules");
|
|
638
|
-
fss.mkdirSync(rulesDir, { recursive: true });
|
|
639
|
-
const { config } = await resolveProjectConfig(projectPath);
|
|
640
|
-
const rulesContent = generateTraeRules(config);
|
|
641
|
-
fss.writeFileSync(path.join(rulesDir, "project_rules.md"), rulesContent, "utf-8");
|
|
642
|
-
userInfo("✅ .trae/rules/project_rules.md created");
|
|
643
|
-
}
|
|
644
|
-
async function cmdGenerateClaudeMdInner(projectPath) {
|
|
645
|
-
const { config } = await resolveProjectConfig(projectPath);
|
|
646
|
-
const content = generateClaudeMd(config);
|
|
647
|
-
fss.writeFileSync(path.join(projectPath, "CLAUDE.md"), content, "utf-8");
|
|
648
|
-
userInfo("✅ CLAUDE.md created");
|
|
649
|
-
}
|
|
650
|
-
async function cmdCheckWrite() {
|
|
651
|
-
debugLog("CLI: 执行 cmdCheckWrite");
|
|
652
|
-
try {
|
|
653
|
-
// 所有适配器均通过 stdin 读取 JSON(Claude Code / Codex 统一)
|
|
654
|
-
let toolInput;
|
|
655
|
-
{
|
|
656
|
-
const chunks = [];
|
|
657
|
-
for await (const chunk of process.stdin) {
|
|
658
|
-
chunks.push(chunk);
|
|
659
|
-
}
|
|
660
|
-
const stdin = Buffer.concat(chunks).toString().trim();
|
|
661
|
-
if (stdin)
|
|
662
|
-
toolInput = stdin;
|
|
663
|
-
}
|
|
664
|
-
// 回退: 从命令行参数读取
|
|
665
|
-
if (!toolInput) {
|
|
666
|
-
toolInput = args[0];
|
|
667
|
-
}
|
|
668
|
-
if (!toolInput) {
|
|
669
|
-
process.exit(0); // 无输入,放行
|
|
670
|
-
}
|
|
671
|
-
const parsed = JSON.parse(toolInput);
|
|
672
|
-
let filePath;
|
|
673
|
-
let content;
|
|
674
|
-
{
|
|
675
|
-
// Claude Code: { tool_input: { file_path, content/new_string } } 格式
|
|
676
|
-
// Codex: { input: { file_path, content/new_string } } 格式
|
|
677
|
-
// 回退: 顶层 { file_path, content/new_string }
|
|
678
|
-
const input = parsed.tool_input || parsed.input || parsed;
|
|
679
|
-
filePath = input.file_path || input.path || "";
|
|
680
|
-
content = input.content || input.new_string || "";
|
|
681
|
-
}
|
|
682
|
-
// 加载配置
|
|
683
|
-
const projectPath = resolveProjectPath();
|
|
684
|
-
const { config, source } = await resolveProjectConfig(projectPath);
|
|
685
|
-
// 从配置中收集所有允许路径
|
|
686
|
-
let allowedPaths = [
|
|
687
|
-
...(config.scope.backend || []),
|
|
688
|
-
...(config.scope.frontend || []),
|
|
689
|
-
...config.repos.flatMap((r) => r.scope || []),
|
|
690
|
-
].map((p) => path.resolve(projectPath, p));
|
|
691
|
-
if (source === "inferred" || allowedPaths.length === 0) {
|
|
692
|
-
allowedPaths = [...new Set([...allowedPaths, projectPath])];
|
|
693
|
-
}
|
|
694
|
-
// 使用 scope_controller 统一检查
|
|
695
|
-
const { checkScope } = await import("../engine/scope_controller.js");
|
|
696
|
-
const rawTargetFilePath = path.isAbsolute(filePath) ? filePath : path.resolve(projectPath, filePath);
|
|
697
|
-
const projectRealPath = fss.realpathSync(projectPath);
|
|
698
|
-
const targetFilePath = isSameOrDescendantPath(rawTargetFilePath, projectPath, { caseSensitive: false })
|
|
699
|
-
? path.join(projectRealPath, path.relative(projectPath, rawTargetFilePath))
|
|
700
|
-
: rawTargetFilePath;
|
|
701
|
-
const result = checkScope(targetFilePath, allowedPaths, content || undefined);
|
|
702
|
-
// 隐私/秘密契约:禁止读取的模式
|
|
703
|
-
if (isReadForbidden(filePath)) {
|
|
704
|
-
process.stdout.write(JSON.stringify({
|
|
705
|
-
hookSpecificOutput: {
|
|
706
|
-
hookEventName: "PreToolUse",
|
|
707
|
-
permissionDecision: "deny",
|
|
708
|
-
permissionDecisionReason: `隐私策略: ${filePath} 匹配禁止读取模式`,
|
|
709
|
-
},
|
|
710
|
-
}));
|
|
711
|
-
process.exit(0);
|
|
712
|
-
}
|
|
713
|
-
if (result.severity === "blocked") {
|
|
714
|
-
const denyOutput = {
|
|
715
|
-
hookSpecificOutput: {
|
|
716
|
-
hookEventName: "PreToolUse",
|
|
717
|
-
permissionDecision: "deny",
|
|
718
|
-
permissionDecisionReason: result.reason || "范围检查阻止了写入",
|
|
719
|
-
},
|
|
720
|
-
};
|
|
721
|
-
process.stdout.write(JSON.stringify(denyOutput));
|
|
722
|
-
process.exit(0);
|
|
723
|
-
}
|
|
724
|
-
if (result.severity === "warning") {
|
|
725
|
-
jsonSafeError(JSON.stringify(result));
|
|
726
|
-
}
|
|
727
|
-
const relativeFilePath = path.relative(projectRealPath, targetFilePath).replaceAll(path.sep, "/");
|
|
728
|
-
const implementationGateReason = await evaluateImplementationWriteGate(projectPath, relativeFilePath);
|
|
729
|
-
if (implementationGateReason) {
|
|
730
|
-
denyPreToolUse(implementationGateReason);
|
|
731
|
-
process.exit(0);
|
|
732
|
-
}
|
|
733
|
-
process.exit(0); // 允许
|
|
734
|
-
}
|
|
735
|
-
catch (e) {
|
|
736
|
-
userError(`SoloForge 写入检查错误: ${e instanceof Error ? e.message : String(e)}`);
|
|
737
|
-
process.exit(1);
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
function resolveProjectPath() {
|
|
741
|
-
const envPath = process.env.SOLOFORGE_PROJECT;
|
|
742
|
-
if (envPath) {
|
|
743
|
-
try {
|
|
744
|
-
const stat = fss.statSync(envPath);
|
|
745
|
-
if (!stat.isDirectory()) {
|
|
746
|
-
userWarn(`⚠️ SOLOFORGE_PROJECT (${envPath}) 不是目录,回退到 cwd`);
|
|
747
|
-
return process.cwd();
|
|
748
|
-
}
|
|
749
|
-
return envPath;
|
|
750
|
-
}
|
|
751
|
-
catch {
|
|
752
|
-
userWarn(`⚠️ SOLOFORGE_PROJECT (${envPath}) 路径不存在,回退到 cwd`);
|
|
753
|
-
return process.cwd();
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
const projectPathArg = getArgValue("--project-path");
|
|
757
|
-
if (projectPathArg) {
|
|
758
|
-
return path.resolve(projectPathArg);
|
|
759
|
-
}
|
|
760
|
-
return process.cwd();
|
|
761
|
-
}
|
|
762
|
-
function isImplementationSourcePath(relativeFilePath) {
|
|
763
|
-
if (/^(?:docs|templates|\.soloforge|\.claude|\.codex|\.trae)\//.test(relativeFilePath))
|
|
764
|
-
return false;
|
|
765
|
-
if (/(^|\/)(?:package-lock|pnpm-lock|yarn.lock)$/.test(relativeFilePath))
|
|
766
|
-
return false;
|
|
767
|
-
return /\.(?:java|kt|kts|scala|ts|tsx|js|jsx|mjs|cjs|py|go|rs|php|rb|cs|swift|vue|svelte|sql|xml|yml|yaml|properties)$/.test(relativeFilePath);
|
|
768
|
-
}
|
|
769
|
-
function isDesignArtifactPath(relativeFilePath) {
|
|
770
|
-
const lifecyclePaths = getDesignLifecycleArtifactPaths();
|
|
771
|
-
if ([
|
|
772
|
-
lifecyclePaths.decision_record,
|
|
773
|
-
lifecyclePaths.architecture_document,
|
|
774
|
-
lifecyclePaths.database_document,
|
|
775
|
-
lifecyclePaths.api_document,
|
|
776
|
-
lifecyclePaths.optional_detail_design_document,
|
|
777
|
-
lifecyclePaths.slice_plan,
|
|
778
|
-
lifecyclePaths.consistency_report,
|
|
779
|
-
lifecyclePaths.traceability_matrix,
|
|
780
|
-
lifecyclePaths.openapi,
|
|
781
|
-
].includes(relativeFilePath))
|
|
782
|
-
return true;
|
|
783
|
-
return /^docs\/architecture\//.test(relativeFilePath) ||
|
|
784
|
-
/^docs\/traceability\//.test(relativeFilePath) ||
|
|
785
|
-
/^docs\/api\/openapi\.(?:ya?ml|json)$/.test(relativeFilePath) ||
|
|
786
|
-
/^db\/(?:migrations?|schema|changelog)\//.test(relativeFilePath) ||
|
|
787
|
-
/(?:^|\/)(?:src\/main\/resources\/)?db\/(?:migrations?|schema|changelog)\//.test(relativeFilePath);
|
|
788
|
-
}
|
|
789
|
-
function denyPreToolUse(reason) {
|
|
790
|
-
process.stdout.write(JSON.stringify({
|
|
791
|
-
hookSpecificOutput: {
|
|
792
|
-
hookEventName: "PreToolUse",
|
|
793
|
-
permissionDecision: "deny",
|
|
794
|
-
permissionDecisionReason: reason,
|
|
795
|
-
},
|
|
796
|
-
}));
|
|
797
|
-
}
|
|
798
|
-
async function evaluateImplementationWriteGate(projectPath, relativeFilePath) {
|
|
799
|
-
// 问题六十二/七十三: Edit/Write/Bash 都必须遵守同一编码前门禁。
|
|
800
|
-
// 设计资产本身允许继续修订;非设计业务实现文件在产物包复验通过前禁止写入。
|
|
801
|
-
if (isDesignArtifactPath(relativeFilePath) || !isImplementationSourcePath(relativeFilePath))
|
|
802
|
-
return undefined;
|
|
803
|
-
const stateDir = path.join(projectPath, ".soloforge", "state");
|
|
804
|
-
if (!fss.existsSync(stateDir))
|
|
805
|
-
return undefined;
|
|
806
|
-
const { TaskContextManager } = await import("../engine/task_context.js");
|
|
807
|
-
const manager = new TaskContextManager(stateDir);
|
|
808
|
-
const currentTask = await manager.getCurrentTask();
|
|
809
|
-
const designPack = currentTask?.design_artifact_pack;
|
|
810
|
-
if (currentTask && ["classifying", "clarifying", "expanding"].includes(currentTask.status)) {
|
|
811
|
-
return `当前 SoloForge 任务仍处于 ${currentTask.status},说明分类、澄清或意图膨胀未闭合。不得绕过 架构设计,不得取消/归档当前任务后改用 Bash/Edit/Write 直接写业务实现,也不得把 Bash 作为恢复路径。请先运行 soloforge next 查看阻断项;按返回的 auto_resolvable 或 recovery_command 补齐后重新 架构设计。只有 soloforge next 明确判定 current-task 陈旧且用户确认时,才可运行 sf_status action=archive_stale confirm=true;归档后仍必须重新 需求分析 → 架构设计 建立受控编码任务。`;
|
|
812
|
-
}
|
|
813
|
-
if (!currentTask && hasDesignArtifacts(projectPath)) {
|
|
814
|
-
return "检测到项目已有架构/详细/API/数据库设计产物,但当前没有受控 SoloForge 任务。不得绕过 需求分析/架构设计 直接写业务实现,不得改用 Bash/Edit/Write 先写代码再补验证;请先运行 soloforge next 或通过 MCP 建立编码任务。";
|
|
815
|
-
}
|
|
816
|
-
if (currentTask && !designPack && hasDesignArtifacts(projectPath)) {
|
|
817
|
-
return "检测到项目已有设计产物,但当前任务缺少 design_artifact_pack 复验状态。不得取消任务后直接写业务实现,不得改用 Bash 绕过;请先运行 soloforge audit-design-artifacts,并通过 架构设计/联调验证 绑定设计产物包。";
|
|
818
|
-
}
|
|
819
|
-
if (designPack && designPack.status !== "implementation_ready") {
|
|
820
|
-
return `设计产物包状态为 ${designPack.status},不得改用 Bash/Edit/Write 绕过设计复验;请先完善 docs/architecture、docs/traceability、docs/api/openapi 或 db/migration|migrations|schema|changelog 并通过复验,再写入业务实现`;
|
|
821
|
-
}
|
|
822
|
-
return undefined;
|
|
823
|
-
}
|
|
824
|
-
function hasDesignArtifacts(projectPath) {
|
|
825
|
-
const lifecyclePaths = getDesignLifecycleArtifactPaths();
|
|
826
|
-
const candidates = [
|
|
827
|
-
lifecyclePaths.decision_record,
|
|
828
|
-
lifecyclePaths.architecture_document,
|
|
829
|
-
lifecyclePaths.database_document,
|
|
830
|
-
lifecyclePaths.api_document,
|
|
831
|
-
lifecyclePaths.optional_detail_design_document,
|
|
832
|
-
lifecyclePaths.slice_plan,
|
|
833
|
-
lifecyclePaths.consistency_report,
|
|
834
|
-
lifecyclePaths.traceability_matrix,
|
|
835
|
-
lifecyclePaths.openapi,
|
|
836
|
-
path.join(projectPath, "docs", "api", "openapi.yml"),
|
|
837
|
-
...lifecyclePaths.sql_roots,
|
|
838
|
-
].map((candidate) => path.join(projectPath, candidate));
|
|
839
|
-
return candidates.some((candidate) => fss.existsSync(candidate));
|
|
840
|
-
}
|
|
841
|
-
async function cmdPostBash() {
|
|
842
|
-
debugLog("CLI: 执行 cmdPostBash");
|
|
843
|
-
// Bash 的 PostToolUse hook — 目前为空操作占位符
|
|
844
|
-
// 未来: 跟踪命令结果,检测构建/测试失败
|
|
845
|
-
process.exit(0);
|
|
846
|
-
}
|
|
847
|
-
function extractBashCommand(rawInput) {
|
|
848
|
-
const trimmed = rawInput.trim();
|
|
849
|
-
if (!trimmed)
|
|
850
|
-
return "";
|
|
851
|
-
try {
|
|
852
|
-
const parsed = JSON.parse(trimmed);
|
|
853
|
-
const input = parsed.tool_input || parsed.toolInput || parsed.input || parsed;
|
|
854
|
-
return String(input.command || input.cmd || parsed.command || "");
|
|
855
|
-
}
|
|
856
|
-
catch {
|
|
857
|
-
return trimmed;
|
|
858
|
-
}
|
|
859
|
-
}
|
|
860
|
-
function unquoteShellToken(token) {
|
|
861
|
-
if (!token)
|
|
862
|
-
return undefined;
|
|
863
|
-
const trimmed = token.trim();
|
|
864
|
-
if ((trimmed.startsWith("\"") && trimmed.endsWith("\"")) || (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
865
|
-
return trimmed.slice(1, -1);
|
|
866
|
-
}
|
|
867
|
-
return trimmed;
|
|
868
|
-
}
|
|
869
|
-
function addShellPathToken(targets, token) {
|
|
870
|
-
const value = unquoteShellToken(token);
|
|
871
|
-
if (!value || value === "-" || value.startsWith("$"))
|
|
872
|
-
return;
|
|
873
|
-
targets.add(value.replace(/[),;]+$/, ""));
|
|
874
|
-
}
|
|
875
|
-
function addSourcePathTokens(targets, commandText) {
|
|
876
|
-
const pathTokenPattern = /"([^"]+\.(?:java|kt|kts|scala|ts|tsx|js|jsx|mjs|cjs|py|go|rs|php|rb|cs|swift|vue|svelte|sql|xml|ya?ml|properties))"|'([^']+\.(?:java|kt|kts|scala|ts|tsx|js|jsx|mjs|cjs|py|go|rs|php|rb|cs|swift|vue|svelte|sql|xml|ya?ml|properties))'|([^\s'";&|()<>]+\.(?:java|kt|kts|scala|ts|tsx|js|jsx|mjs|cjs|py|go|rs|php|rb|cs|swift|vue|svelte|sql|xml|ya?ml|properties))/gi;
|
|
877
|
-
for (const match of commandText.matchAll(pathTokenPattern)) {
|
|
878
|
-
addShellPathToken(targets, match[1] || match[2] || match[3]);
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
function extractBashWriteTargets(commandText) {
|
|
882
|
-
const command = commandText.replace(/\s+/g, " ").trim();
|
|
883
|
-
const targets = new Set();
|
|
884
|
-
const redirectionPattern = /(?:^|[^<])>>?\s*(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))/g;
|
|
885
|
-
for (const match of command.matchAll(redirectionPattern)) {
|
|
886
|
-
addShellPathToken(targets, match[1] || match[2] || match[3]);
|
|
887
|
-
}
|
|
888
|
-
const teePattern = /(?:^|[\s;&|()])tee\s+(?:-[A-Za-z]+\s+)*(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))/g;
|
|
889
|
-
for (const match of command.matchAll(teePattern)) {
|
|
890
|
-
addShellPathToken(targets, match[1] || match[2] || match[3]);
|
|
891
|
-
}
|
|
892
|
-
const writeApiPattern = /(?:writeFileSync|writeFile|write_text)\s*\(\s*["']([^"']+)["']/g;
|
|
893
|
-
for (const match of command.matchAll(writeApiPattern)) {
|
|
894
|
-
addShellPathToken(targets, match[1]);
|
|
895
|
-
}
|
|
896
|
-
const pythonOpenWritePattern = /open\s*\(\s*["']([^"']+)["']\s*,\s*["'][^"']*[wa+][^"']*["']/g;
|
|
897
|
-
for (const match of command.matchAll(pythonOpenWritePattern)) {
|
|
898
|
-
addShellPathToken(targets, match[1]);
|
|
899
|
-
}
|
|
900
|
-
const pathlibWritePattern = /(?:Path|pathlib\.Path)\s*\(\s*["']([^"']+)["']\s*\)\.write_text/g;
|
|
901
|
-
for (const match of command.matchAll(pathlibWritePattern)) {
|
|
902
|
-
addShellPathToken(targets, match[1]);
|
|
903
|
-
}
|
|
904
|
-
const mutatingCommandPattern = /(?:^|[\s;&|()])(?:rm|mv|cp|touch|chmod|chown)\b/i;
|
|
905
|
-
const inPlaceEditPattern = /(?:^|[\s;&|()])(?:(?:g?sed)\s+[^;&|]*\s-i\b|perl\s+[^;&|]*\s-pi\b)/i;
|
|
906
|
-
if (mutatingCommandPattern.test(command) || inPlaceEditPattern.test(command)) {
|
|
907
|
-
addSourcePathTokens(targets, command);
|
|
908
|
-
}
|
|
909
|
-
return [...targets];
|
|
910
|
-
}
|
|
911
|
-
function resolveProjectRelativeTarget(projectPath, targetPath) {
|
|
912
|
-
const rawTargetFilePath = path.isAbsolute(targetPath) ? path.normalize(targetPath) : path.resolve(projectPath, targetPath);
|
|
913
|
-
const projectRealPath = fss.realpathSync(projectPath);
|
|
914
|
-
const targetFilePath = isSameOrDescendantPath(rawTargetFilePath, projectPath, { caseSensitive: false })
|
|
915
|
-
? path.join(projectRealPath, path.relative(projectPath, rawTargetFilePath))
|
|
916
|
-
: rawTargetFilePath;
|
|
917
|
-
const relativeFilePath = path.relative(projectRealPath, targetFilePath).replaceAll(path.sep, "/");
|
|
918
|
-
if (relativeFilePath === "" || relativeFilePath.startsWith("../") || path.isAbsolute(relativeFilePath))
|
|
919
|
-
return undefined;
|
|
920
|
-
return relativeFilePath;
|
|
921
|
-
}
|
|
922
|
-
async function cmdCheckBash() {
|
|
923
|
-
debugLog("CLI: 执行 cmdCheckBash");
|
|
924
|
-
try {
|
|
925
|
-
const chunks = [];
|
|
926
|
-
for await (const chunk of process.stdin) {
|
|
927
|
-
chunks.push(chunk);
|
|
928
|
-
}
|
|
929
|
-
const stdin = Buffer.concat(chunks).toString();
|
|
930
|
-
const commandText = extractBashCommand(stdin || args.join(" "));
|
|
931
|
-
if (isSoloforgeStateBypassCommand(commandText)) {
|
|
932
|
-
denyPreToolUse("禁止通过 Bash 直接修改 .soloforge/state;请使用 SoloForge MCP 工具,例如 sf_status action=archive_stale confirm=true。");
|
|
933
|
-
process.exit(0);
|
|
934
|
-
}
|
|
935
|
-
const projectPath = resolveProjectPath();
|
|
936
|
-
for (const target of extractBashWriteTargets(commandText)) {
|
|
937
|
-
const relativeTarget = resolveProjectRelativeTarget(projectPath, target);
|
|
938
|
-
if (!relativeTarget)
|
|
939
|
-
continue;
|
|
940
|
-
const implementationGateReason = await evaluateImplementationWriteGate(projectPath, relativeTarget);
|
|
941
|
-
if (implementationGateReason) {
|
|
942
|
-
denyPreToolUse(`禁止通过 Bash 直接写业务实现文件 ${relativeTarget};${implementationGateReason}`);
|
|
943
|
-
process.exit(0);
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
process.exit(0);
|
|
947
|
-
}
|
|
948
|
-
catch (e) {
|
|
949
|
-
userError(`SoloForge Bash 检查错误: ${e instanceof Error ? e.message : String(e)}`);
|
|
950
|
-
process.exit(1);
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
async function cmdDoctor() {
|
|
954
|
-
debugLog("CLI: 执行 cmdDoctor");
|
|
955
|
-
const isJson = args.includes("--json");
|
|
956
|
-
const projectPath = process.cwd();
|
|
957
|
-
const report = auditControlPlaneProject(projectPath);
|
|
958
|
-
if (isJson) {
|
|
959
|
-
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
960
|
-
return;
|
|
961
|
-
}
|
|
962
|
-
userInfo(`SoloForge 控制面诊断: ${projectPath}`);
|
|
963
|
-
userInfo(` 状态: ${report.passed ? "通过" : "需修复"}`);
|
|
964
|
-
userInfo(` 控制面矩阵: ${report.matrix_count} 类`);
|
|
965
|
-
userInfo(` 枝叶细节: ${report.branch_detail_count} 条`);
|
|
966
|
-
if (report.findings.length === 0) {
|
|
967
|
-
userInfo(" finding: 0");
|
|
968
|
-
return;
|
|
969
|
-
}
|
|
970
|
-
for (const finding of report.findings) {
|
|
971
|
-
const marker = finding.severity === "hard_fail" ? "❌" : finding.severity === "warning" ? "⚠️" : "ℹ️";
|
|
972
|
-
userInfo(` ${marker} [${finding.code}] ${finding.message}`);
|
|
973
|
-
userInfo(` 恢复: ${finding.recovery}`);
|
|
974
|
-
}
|
|
975
|
-
}
|
|
976
|
-
export { buildHookAdditionalContext } from "../adapters/claude_code/pre_prompt_contract.js";
|
|
977
|
-
async function cmdPrePrompt() {
|
|
978
|
-
debugLog("CLI: 执行 cmdPrePrompt");
|
|
979
|
-
try {
|
|
980
|
-
// UserPromptSubmit hook 从 stdin 接收 JSON { prompt: "..." }
|
|
981
|
-
const chunks = [];
|
|
982
|
-
for await (const chunk of process.stdin) {
|
|
983
|
-
chunks.push(chunk);
|
|
984
|
-
}
|
|
985
|
-
const stdin = Buffer.concat(chunks).toString().trim();
|
|
986
|
-
if (!stdin) {
|
|
987
|
-
process.exit(0);
|
|
988
|
-
return;
|
|
989
|
-
}
|
|
990
|
-
let userMessage = "";
|
|
991
|
-
try {
|
|
992
|
-
const parsed = JSON.parse(stdin);
|
|
993
|
-
userMessage = parsed.prompt || parsed.message || "";
|
|
994
|
-
}
|
|
995
|
-
catch {
|
|
996
|
-
userMessage = stdin;
|
|
997
|
-
}
|
|
998
|
-
if (!userMessage || userMessage.length < 2) {
|
|
999
|
-
process.exit(0);
|
|
1000
|
-
return;
|
|
1001
|
-
}
|
|
1002
|
-
// 使用意图路由器分类 — 如果路由属于 SoloForge 范畴,注入结构化上下文
|
|
1003
|
-
const decision = routeIntent({ intent: userMessage });
|
|
1004
|
-
const additionalContext = buildHookAdditionalContext(decision);
|
|
1005
|
-
if (additionalContext) {
|
|
1006
|
-
const output = {
|
|
1007
|
-
hookSpecificOutput: {
|
|
1008
|
-
hookEventName: "UserPromptSubmit",
|
|
1009
|
-
additionalContext: typeof additionalContext === "string"
|
|
1010
|
-
? additionalContext
|
|
1011
|
-
: JSON.stringify(additionalContext),
|
|
1012
|
-
},
|
|
1013
|
-
};
|
|
1014
|
-
process.stdout.write(JSON.stringify(output));
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
catch (e) {
|
|
1018
|
-
internalWarn("CLI", "pre-prompt hook 错误:", e);
|
|
1019
|
-
}
|
|
1020
|
-
process.exit(0);
|
|
1021
|
-
}
|
|
1022
|
-
async function checkEvidenceWarnings(projectPath) {
|
|
1023
|
-
debug("CLI", "执行 checkEvidenceWarnings —", projectPath);
|
|
1024
|
-
const warnings = [];
|
|
1025
|
-
const configPath = path.join(projectPath, ".soloforge", "config.yaml");
|
|
1026
|
-
const evidencePath = path.join(projectPath, ".soloforge", "config.evidence.json");
|
|
1027
|
-
if (!fss.existsSync(configPath))
|
|
1028
|
-
return warnings;
|
|
1029
|
-
if (!fss.existsSync(evidencePath)) {
|
|
1030
|
-
warnings.push("config.yaml 存在但 config.evidence.json 缺失 — 来源追溯性丢失");
|
|
1031
|
-
return warnings;
|
|
1032
|
-
}
|
|
1033
|
-
// 检查 mtime 过期
|
|
1034
|
-
try {
|
|
1035
|
-
const configStat = fss.statSync(configPath);
|
|
1036
|
-
const evidenceStat = fss.statSync(evidencePath);
|
|
1037
|
-
if (configStat.mtimeMs > evidenceStat.mtimeMs) {
|
|
1038
|
-
warnings.push("config.evidence.json 已过期(config.yaml 在 evidence 生成后被修改)");
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
catch { }
|
|
1042
|
-
// 旧版字段一致性检查(schema v1 evidence)
|
|
1043
|
-
try {
|
|
1044
|
-
const evidenceRaw = JSON.parse(fss.readFileSync(evidencePath, "utf-8"));
|
|
1045
|
-
const configContent = fss.readFileSync(configPath, "utf-8");
|
|
1046
|
-
const config = YAML.parse(configContent);
|
|
1047
|
-
for (const [key, field] of Object.entries(evidenceRaw.fields)) {
|
|
1048
|
-
const actualValue = getConfigFieldValue(config, key);
|
|
1049
|
-
if (actualValue !== undefined && JSON.stringify(field.value) !== JSON.stringify(actualValue)) {
|
|
1050
|
-
warnings.push(`evidence 字段 '${key}' 的值与 config.yaml 不匹配`);
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
}
|
|
1054
|
-
catch { }
|
|
1055
|
-
// 使用 schema v2 条目验证配置优先级
|
|
1056
|
-
try {
|
|
1057
|
-
const entries = loadConfigEvidenceEntries(projectPath);
|
|
1058
|
-
// 检查 C 类字段自动写入违规
|
|
1059
|
-
for (const e of entries) {
|
|
1060
|
-
if (e.source === "cli_flag" || e.source === "mcp_param") {
|
|
1061
|
-
if (e.lifetime === "project_persistent") {
|
|
1062
|
-
warnings.push(`CLI/MCP 参数(${e.source})已持久化到 config — 字段: ${e.field_path}`);
|
|
1063
|
-
}
|
|
1064
|
-
}
|
|
1065
|
-
}
|
|
1066
|
-
// 运行实时解析的配置优先级验证
|
|
1067
|
-
try {
|
|
1068
|
-
const { reports } = await resolveCurrentProjectConfigReports(projectPath);
|
|
1069
|
-
const findings = validateConfigPrecedence(reports, entries);
|
|
1070
|
-
for (const f of findings) {
|
|
1071
|
-
if (f.severity === "hard_fail") {
|
|
1072
|
-
warnings.push(`[${f.rule}] ${f.message}`);
|
|
1073
|
-
}
|
|
1074
|
-
}
|
|
1075
|
-
}
|
|
1076
|
-
catch { }
|
|
1077
|
-
}
|
|
1078
|
-
catch { }
|
|
1079
|
-
return warnings;
|
|
1080
|
-
}
|
|
1081
|
-
function getConfigFieldValue(config, key) {
|
|
1082
|
-
const parts = key.split(".");
|
|
1083
|
-
let obj = config;
|
|
1084
|
-
for (const part of parts) {
|
|
1085
|
-
if (obj == null || typeof obj !== "object")
|
|
1086
|
-
return undefined;
|
|
1087
|
-
obj = obj[part];
|
|
1088
|
-
}
|
|
1089
|
-
return obj;
|
|
1090
|
-
}
|
|
1091
|
-
async function cmdValidate() {
|
|
1092
|
-
debug("CLI", "执行 cmdValidate");
|
|
1093
|
-
const projectPath = resolveProjectPath();
|
|
1094
|
-
try {
|
|
1095
|
-
const { config, source } = await resolveProjectConfig(projectPath);
|
|
1096
|
-
if (source === "inferred") {
|
|
1097
|
-
userInfo("ℹ️ 配置来源: 自动推断");
|
|
1098
|
-
}
|
|
1099
|
-
else {
|
|
1100
|
-
userInfo("✅ config.yaml 有效");
|
|
1101
|
-
}
|
|
1102
|
-
// 使用共享函数验证配置优先级
|
|
1103
|
-
let hasHardFail = false;
|
|
1104
|
-
const hardFailSources = new Set();
|
|
1105
|
-
try {
|
|
1106
|
-
const { reports, entries } = await resolveCurrentProjectConfigReports(projectPath);
|
|
1107
|
-
const findings = validateConfigPrecedence(reports, entries);
|
|
1108
|
-
const hardFails = findings.filter(f => f.severity === "hard_fail");
|
|
1109
|
-
const advisory = findings.filter(f => f.severity === "advisory");
|
|
1110
|
-
if (hardFails.length > 0) {
|
|
1111
|
-
hasHardFail = true;
|
|
1112
|
-
hardFailSources.add("配置优先级");
|
|
1113
|
-
userInfo(`❌ 配置优先级: ${hardFails.length} hard_fail`);
|
|
1114
|
-
for (const f of hardFails) {
|
|
1115
|
-
userInfo(` - [${f.rule}] ${f.field_path ?? "N/A"}: ${f.message}`);
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
if (advisory.length > 0) {
|
|
1119
|
-
userInfo(`⚠️ 配置优先级: ${advisory.length} advisory`);
|
|
1120
|
-
for (const f of advisory) {
|
|
1121
|
-
userInfo(` - [${f.rule}] ${f.field_path ?? "N/A"}: ${f.message}`);
|
|
1122
|
-
}
|
|
1123
|
-
}
|
|
1124
|
-
if (hardFails.length === 0 && advisory.length === 0) {
|
|
1125
|
-
userInfo("✅ 配置优先级验证通过");
|
|
1126
|
-
}
|
|
1127
|
-
}
|
|
1128
|
-
catch { }
|
|
1129
|
-
// Evidence 检查
|
|
1130
|
-
const evidenceWarnings = await checkEvidenceWarnings(projectPath);
|
|
1131
|
-
for (const w of evidenceWarnings) {
|
|
1132
|
-
userInfo(`⚠️ evidence: ${w}`);
|
|
1133
|
-
}
|
|
1134
|
-
// 知识治理统一入口:生命周期、语义、文档与语言策略的轻量主链路消费
|
|
1135
|
-
try {
|
|
1136
|
-
const { runKnowledgeGovernanceCheck } = await import("../engine/knowledge_governance_gate.js");
|
|
1137
|
-
const kgReport = runKnowledgeGovernanceCheck({
|
|
1138
|
-
project_language: "zh",
|
|
1139
|
-
contents: [{ id: "cli-validate", domain: "user_feedback", content: "SoloForge 校验输出保持中文语义优先" }],
|
|
1140
|
-
});
|
|
1141
|
-
if (kgReport.hard_fail_count > 0) {
|
|
1142
|
-
userInfo(`❌ 知识治理: ${kgReport.hard_fail_count} hard_fail`);
|
|
1143
|
-
for (const f of kgReport.findings.filter((f) => f.severity === "hard_fail")) {
|
|
1144
|
-
userInfo(` - [${f.kind}] ${f.message_zh}`);
|
|
1145
|
-
}
|
|
1146
|
-
hasHardFail = true;
|
|
1147
|
-
hardFailSources.add("知识治理");
|
|
1148
|
-
}
|
|
1149
|
-
else {
|
|
1150
|
-
userInfo(`✅ 知识治理检查: ${kgReport.warning_count} warning, 0 hard_fail`);
|
|
1151
|
-
}
|
|
1152
|
-
}
|
|
1153
|
-
catch (e) {
|
|
1154
|
-
userInfo(` ⚠ 知识治理检查异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1155
|
-
}
|
|
1156
|
-
// 检查知识文件
|
|
1157
|
-
const knowledgeDir = getProjectKnowledgeDir(config);
|
|
1158
|
-
if (fss.existsSync(knowledgeDir)) {
|
|
1159
|
-
const { KnowledgeIndexManager } = await import("../knowledge/index_manager.js");
|
|
1160
|
-
const index = new KnowledgeIndexManager(config, { watch: false });
|
|
1161
|
-
try {
|
|
1162
|
-
await index.build();
|
|
1163
|
-
const entries = index.getAllEntries();
|
|
1164
|
-
userInfo(`✅ ${entries.project.length} 条项目知识已索引`);
|
|
1165
|
-
const issues = await index.checkHealth();
|
|
1166
|
-
if (issues.length > 0) {
|
|
1167
|
-
userInfo(`⚠️ ${issues.length} 个健康问题:`);
|
|
1168
|
-
for (const { entry, issue } of issues) {
|
|
1169
|
-
userInfo(` - ${entry.name}: ${issue}`);
|
|
1170
|
-
}
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
finally {
|
|
1174
|
-
await index.close();
|
|
1175
|
-
}
|
|
1176
|
-
const { auditProjectKnowledge } = await import("../engine/project_knowledge_contract.js");
|
|
1177
|
-
const pkReport = auditProjectKnowledge(projectPath, config);
|
|
1178
|
-
if (pkReport.hard_fail_count > 0) {
|
|
1179
|
-
userInfo(`❌ 项目知识承载: ${pkReport.hard_fail_count} hard_fail`);
|
|
1180
|
-
for (const asset of pkReport.assets) {
|
|
1181
|
-
for (const finding of asset.findings.filter((f) => f.severity === "hard_fail")) {
|
|
1182
|
-
userInfo(` - ${asset.rel_path}: [${finding.code}] ${finding.message_zh}`);
|
|
1183
|
-
}
|
|
1184
|
-
}
|
|
1185
|
-
hasHardFail = true;
|
|
1186
|
-
hardFailSources.add("项目知识承载");
|
|
1187
|
-
}
|
|
1188
|
-
else {
|
|
1189
|
-
userInfo(`✅ 项目知识承载: ${pkReport.total} 条,${pkReport.injectable} 条可注入,${pkReport.index_only} 条仅索引,0 hard_fail`);
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
// 扩展清单校验 (problem-39: validateExtensionManifest)
|
|
1193
|
-
try {
|
|
1194
|
-
const { validateExtensionManifest } = await import("../engine/extension_contract.js");
|
|
1195
|
-
const extResult = validateExtensionManifest({ extension_id: "soloforge-cli-validate", name: "SoloForge CLI 验证", version: "1.0.0", provider: "soloforge", extension_type: "workflow", contract_ids: [], capability_ids: [], permissions: ["read_project"], entrypoints: [], outputs: [], default_state: "disabled", compatibility: { min_soloforge_version: "1.0.0" } }, { extension_id: "soloforge-cli-validate", claimed_capabilities: [], claimed_enforcement: "advisory", third_party: false });
|
|
1196
|
-
if (extResult.violations.length > 0) {
|
|
1197
|
-
userInfo(" ✗ 扩展清单校验失败:");
|
|
1198
|
-
for (const v of extResult.violations)
|
|
1199
|
-
userInfo(` - ${v}`);
|
|
1200
|
-
hasHardFail = true;
|
|
1201
|
-
hardFailSources.add("扩展清单");
|
|
1202
|
-
}
|
|
1203
|
-
else {
|
|
1204
|
-
userInfo(" ✓ 扩展清单校验通过");
|
|
1205
|
-
}
|
|
1206
|
-
}
|
|
1207
|
-
catch (e) {
|
|
1208
|
-
userInfo(` ⚠ 扩展清单校验异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1209
|
-
}
|
|
1210
|
-
// 平台兼容性检查 (problem-40: normalizePathRef via generatePlatformReport)
|
|
1211
|
-
try {
|
|
1212
|
-
const { generatePlatformReport } = await import("../engine/platform_context.js");
|
|
1213
|
-
const platform = {
|
|
1214
|
-
os: process.platform,
|
|
1215
|
-
arch: process.arch,
|
|
1216
|
-
shell: (process.env.SHELL?.includes("zsh") ? "zsh" : process.env.SHELL?.includes("fish") ? "fish" : "bash"),
|
|
1217
|
-
path_case_sensitive: process.platform !== "darwin" && process.platform !== "win32",
|
|
1218
|
-
path_separator: process.platform === "win32" ? "\\" : "/",
|
|
1219
|
-
line_ending: process.platform === "win32" ? "crlf" : "lf",
|
|
1220
|
-
supports_symlink: process.platform !== "win32",
|
|
1221
|
-
workspace_realpath: projectPath,
|
|
1222
|
-
};
|
|
1223
|
-
const platformReport = generatePlatformReport(platform, ["package.json", "tsconfig.json"], process.cwd());
|
|
1224
|
-
if (platformReport.platform_compatibility_status === "blocked") {
|
|
1225
|
-
userInfo(` ✗ 平台兼容性阻断: ${platformReport.issues_found.join(", ")}`);
|
|
1226
|
-
hasHardFail = true;
|
|
1227
|
-
hardFailSources.add("平台兼容性");
|
|
1228
|
-
}
|
|
1229
|
-
else {
|
|
1230
|
-
userInfo(` ✓ 平台兼容性检查: ${platformReport.platform_compatibility_status}`);
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1233
|
-
catch (e) {
|
|
1234
|
-
userInfo(` ⚠ 平台兼容性检查异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1235
|
-
}
|
|
1236
|
-
// README 命令漂移检测 (problem-30: detectReadmeDrift via validateUserPromise)
|
|
1237
|
-
try {
|
|
1238
|
-
const { validateUserPromise, getCliCommandContracts } = await import("../engine/user_promise.js");
|
|
1239
|
-
const { extractReadmeCommands } = await import("../engine/knowledge_scenario_registry.js");
|
|
1240
|
-
const fs = await import("node:fs");
|
|
1241
|
-
const pathMod = await import("node:path");
|
|
1242
|
-
const readmePath = pathMod.join(projectPath, "README.md");
|
|
1243
|
-
if (fs.existsSync(readmePath)) {
|
|
1244
|
-
const readmeContent = fs.readFileSync(readmePath, "utf-8");
|
|
1245
|
-
const readmeCommands = extractReadmeCommands(readmeContent);
|
|
1246
|
-
const promiseResult = validateUserPromise(readmeCommands, getCliCommandContracts());
|
|
1247
|
-
const hardFails = promiseResult.findings.filter(f => f.severity === "hard_fail");
|
|
1248
|
-
const warnings = promiseResult.findings.filter(f => f.severity === "warning");
|
|
1249
|
-
if (hardFails.length > 0) {
|
|
1250
|
-
userInfo(" ✗ README 命令漂移:");
|
|
1251
|
-
for (const hf of hardFails)
|
|
1252
|
-
userInfo(` - ${hf.message_zh}`);
|
|
1253
|
-
hasHardFail = true;
|
|
1254
|
-
hardFailSources.add("README 命令漂移");
|
|
1255
|
-
}
|
|
1256
|
-
else if (warnings.length > 0) {
|
|
1257
|
-
userInfo(" ⚠ README 命令漂移警告:");
|
|
1258
|
-
for (const w of warnings)
|
|
1259
|
-
userInfo(` - ${w.message_zh}`);
|
|
1260
|
-
}
|
|
1261
|
-
else {
|
|
1262
|
-
userInfo(" ✓ README 命令一致性检查通过");
|
|
1263
|
-
}
|
|
1264
|
-
}
|
|
1265
|
-
}
|
|
1266
|
-
catch (e) {
|
|
1267
|
-
userInfo(` ⚠ README 命令漂移检测异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1268
|
-
}
|
|
1269
|
-
// 双层机制验证 (仅限 SoloForge 自身源码目录)
|
|
1270
|
-
if (fss.existsSync(path.join(projectPath, "src", "engine", "dual_layer_mechanism_registry.ts"))) {
|
|
1271
|
-
const { validateMechanismLayerMaps } = await import("../engine/dual_layer_mechanism_registry.js");
|
|
1272
|
-
const dlFindings = validateMechanismLayerMaps();
|
|
1273
|
-
const dlHard = dlFindings.filter((f) => f.severity === "hard_fail");
|
|
1274
|
-
const dlAdvisory = dlFindings.filter((f) => f.severity === "advisory");
|
|
1275
|
-
if (dlHard.length > 0) {
|
|
1276
|
-
userInfo(`❌ 双层机制验证: ${dlHard.length} hard_fail`);
|
|
1277
|
-
for (const f of dlHard) {
|
|
1278
|
-
userInfo(` - [${f.finding_type}] ${f.mechanism_id}: ${f.message}`);
|
|
1279
|
-
}
|
|
1280
|
-
userError(`❌ validate 失败: 双层机制存在 ${dlHard.length} hard_fail`);
|
|
1281
|
-
process.exit(1);
|
|
1282
|
-
}
|
|
1283
|
-
else {
|
|
1284
|
-
userInfo(`✅ 双层机制验证: ${dlAdvisory.length} advisory, 0 hard_fail`);
|
|
1285
|
-
}
|
|
1286
|
-
// problem-34: 测试策略覆盖验证 — 从 contract_registry 真实元数据构建
|
|
1287
|
-
try {
|
|
1288
|
-
const { validateTestStrategy } = await import("../engine/test_strategy.js");
|
|
1289
|
-
const { getAllContracts } = await import("../engine/contract_registry.js");
|
|
1290
|
-
const enforcedContracts = getAllContracts().filter((c) => c.state === "enforced");
|
|
1291
|
-
let tsHardFail = false;
|
|
1292
|
-
let tsChecked = 0;
|
|
1293
|
-
let tsPending = 0;
|
|
1294
|
-
for (const c of enforcedContracts) {
|
|
1295
|
-
const hasTests = c.test_files && c.test_files.length > 0;
|
|
1296
|
-
const hasLifecycle = c.lifecycle_test_files && c.lifecycle_test_files.length > 0;
|
|
1297
|
-
if (!hasTests) {
|
|
1298
|
-
// enforced 契约无测试文件元数据 → hard_fail,不得用 required_test_types:[] 掩盖
|
|
1299
|
-
userInfo(`❌ 测试策略: ${c.contract_id} — enforced 契约缺少 test_files 元数据,无法验证覆盖`);
|
|
1300
|
-
tsHardFail = true;
|
|
1301
|
-
tsPending++;
|
|
1302
|
-
continue;
|
|
1303
|
-
}
|
|
1304
|
-
const coverage = {
|
|
1305
|
-
contract_id: c.contract_id,
|
|
1306
|
-
required_test_types: ["unit"],
|
|
1307
|
-
coverage_status: hasLifecycle ? "satisfied" : "partial",
|
|
1308
|
-
satisfied_types: ["unit"],
|
|
1309
|
-
missing_types: hasLifecycle ? [] : ["lifecycle"],
|
|
1310
|
-
test_files: c.test_files || [],
|
|
1311
|
-
has_lifecycle_test: hasLifecycle,
|
|
1312
|
-
has_must_fail_case: false,
|
|
1313
|
-
};
|
|
1314
|
-
const tsErrors = validateTestStrategy(c.contract_id, true, coverage);
|
|
1315
|
-
tsChecked++;
|
|
1316
|
-
for (const e of tsErrors) {
|
|
1317
|
-
if (e.severity === "hard_fail") {
|
|
1318
|
-
tsHardFail = true;
|
|
1319
|
-
userInfo(`❌ 测试策略: ${c.contract_id} — ${e.error}`);
|
|
1320
|
-
}
|
|
1321
|
-
}
|
|
1322
|
-
}
|
|
1323
|
-
if (tsHardFail) {
|
|
1324
|
-
userError(`❌ 测试策略覆盖验证失败: ${tsChecked} 个已检查, ${tsPending} 个元数据缺失`);
|
|
1325
|
-
hasHardFail = true;
|
|
1326
|
-
hardFailSources.add("测试策略覆盖");
|
|
1327
|
-
}
|
|
1328
|
-
else {
|
|
1329
|
-
userInfo(`✅ 测试策略覆盖: 已检查 ${tsChecked} 个 enforced 契约`);
|
|
1330
|
-
}
|
|
1331
|
-
}
|
|
1332
|
-
catch (e) {
|
|
1333
|
-
userError(`❌ 测试策略验证异常: ${e.message}`);
|
|
1334
|
-
hasHardFail = true;
|
|
1335
|
-
hardFailSources.add("测试策略覆盖");
|
|
1336
|
-
}
|
|
1337
|
-
} // 双层机制检查结束
|
|
1338
|
-
try {
|
|
1339
|
-
const { planNextAction } = await import("../engine/next_action_planner.js");
|
|
1340
|
-
const navigation = await planNextAction(projectPath);
|
|
1341
|
-
userInfo(` 阶段: ${navigation.project_stage}${navigation.task_stage ? ` / ${navigation.task_stage}` : ""}`);
|
|
1342
|
-
if (navigation.blocking_reasons.length > 0) {
|
|
1343
|
-
userInfo(` 导航阻断: ${navigation.blocking_reasons.join("; ")}`);
|
|
1344
|
-
}
|
|
1345
|
-
userInfo(` 下一步: ${navigation.work_package?.goal_zh ?? navigation.recommended_prompt_zh}`);
|
|
1346
|
-
}
|
|
1347
|
-
catch (e) {
|
|
1348
|
-
userInfo(` ⚠ 导航摘要异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1349
|
-
}
|
|
1350
|
-
if (hasHardFail) {
|
|
1351
|
-
const sources = hardFailSources.size > 0 ? Array.from(hardFailSources).join("、") : "校验项";
|
|
1352
|
-
userError(`❌ validate 失败: ${sources} 存在 hard_fail`);
|
|
1353
|
-
process.exit(1);
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
catch (e) {
|
|
1357
|
-
userError(`❌ 验证失败: ${e.message}`);
|
|
1358
|
-
process.exit(1);
|
|
1359
|
-
}
|
|
1360
|
-
}
|
|
1361
|
-
async function cmdValidateMechanisms() {
|
|
1362
|
-
debug("CLI", "执行 cmdValidateMechanisms");
|
|
1363
|
-
// 从编译后的二进制位置推导根目录: dist/bin/soloforge.js -> 项目根
|
|
1364
|
-
const soloforgeRoot = path.resolve(import.meta.dirname, "..", "..");
|
|
1365
|
-
const projectPath = fss.existsSync(path.join(soloforgeRoot, "src", "engine"))
|
|
1366
|
-
? soloforgeRoot
|
|
1367
|
-
: process.cwd();
|
|
1368
|
-
try {
|
|
1369
|
-
const { validateMechanismLayerMaps } = await import("../engine/dual_layer_mechanism_registry.js");
|
|
1370
|
-
const findings = validateMechanismLayerMaps(undefined, projectPath);
|
|
1371
|
-
const hardFails = findings.filter((f) => f.severity === "hard_fail");
|
|
1372
|
-
const advisory = findings.filter((f) => f.severity === "advisory");
|
|
1373
|
-
if (findings.length === 0) {
|
|
1374
|
-
userInfo("✅ 所有双层机制映射验证通过,无发现。");
|
|
1375
|
-
process.exit(0);
|
|
1376
|
-
return;
|
|
1377
|
-
}
|
|
1378
|
-
if (advisory.length > 0) {
|
|
1379
|
-
userInfo(`⚠️ advisory findings (${advisory.length}):`);
|
|
1380
|
-
for (const f of advisory) {
|
|
1381
|
-
userInfo(` - [${f.finding_type}] ${f.mechanism_id}: ${f.message}`);
|
|
1382
|
-
}
|
|
1383
|
-
}
|
|
1384
|
-
if (hardFails.length > 0) {
|
|
1385
|
-
userInfo(`❌ hard_fail findings (${hardFails.length}):`);
|
|
1386
|
-
for (const f of hardFails) {
|
|
1387
|
-
userInfo(` - [${f.finding_type}] ${f.mechanism_id}: ${f.message}`);
|
|
1388
|
-
}
|
|
1389
|
-
userInfo(`\n❌ 双层机制验证失败: ${hardFails.length} hard_fail`);
|
|
1390
|
-
process.exit(1);
|
|
1391
|
-
}
|
|
1392
|
-
userInfo(`\n✅ 双层机制验证通过,${advisory.length} advisory findings`);
|
|
1393
|
-
// 审计摘要
|
|
1394
|
-
try {
|
|
1395
|
-
const { auditTemplateMechanisms } = await import("../engine/template_mechanism_auditor.js");
|
|
1396
|
-
const audit = auditTemplateMechanisms(projectPath);
|
|
1397
|
-
if (audit.hard_fail_count > 0) {
|
|
1398
|
-
userInfo(`\n❌ 模板审计摘要: ${audit.hard_fail_count} hard_fail, ${audit.unmapped_template_assets.length} unmapped`);
|
|
1399
|
-
process.exit(1);
|
|
1400
|
-
}
|
|
1401
|
-
else {
|
|
1402
|
-
userInfo(`\n📊 模板审计: ${audit.total_template_files} 文件, ${audit.unmapped_template_assets.length} unmapped, ${audit.advisory_count} advisory`);
|
|
1403
|
-
}
|
|
1404
|
-
}
|
|
1405
|
-
catch (e) {
|
|
1406
|
-
userError(`❌ 模板审计异常: ${e.message}`);
|
|
1407
|
-
process.exit(1);
|
|
1408
|
-
}
|
|
1409
|
-
try {
|
|
1410
|
-
const { runFullHealthCheck } = await import("../engine/mechanism_health_check.js");
|
|
1411
|
-
const health = runFullHealthCheck(projectPath);
|
|
1412
|
-
if (health.hard_fail_count > 0) {
|
|
1413
|
-
userInfo(`\n❌ 机制运行时健康度: ${health.hard_fail_count} hard_fail`);
|
|
1414
|
-
for (const f of health.findings.filter((f) => f.severity === "hard_fail")) {
|
|
1415
|
-
userInfo(` - [${f.kind}] ${f.target}: ${f.message_zh}`);
|
|
1416
|
-
}
|
|
1417
|
-
process.exit(1);
|
|
1418
|
-
}
|
|
1419
|
-
userInfo(`\n📊 机制运行时健康度: ${health.warning_count} warning, 0 hard_fail`);
|
|
1420
|
-
}
|
|
1421
|
-
catch (e) {
|
|
1422
|
-
userError(`❌ 机制运行时健康度检查异常: ${e.message}`);
|
|
1423
|
-
process.exit(1);
|
|
1424
|
-
}
|
|
1425
|
-
}
|
|
1426
|
-
catch (e) {
|
|
1427
|
-
userError(`❌ validate-mechanisms 失败: ${e.message}`);
|
|
1428
|
-
process.exit(1);
|
|
1429
|
-
}
|
|
1430
|
-
}
|
|
1431
|
-
async function cmdAuditTemplateMechanisms() {
|
|
1432
|
-
debug("CLI", "执行 cmdAuditTemplateMechanisms");
|
|
1433
|
-
const asJson = args.includes("--json");
|
|
1434
|
-
const changedOnly = args.includes("--changed-only");
|
|
1435
|
-
// 从编译后的二进制位置推导根目录
|
|
1436
|
-
const soloforgeRoot = path.resolve(import.meta.dirname, "..", "..");
|
|
1437
|
-
const projectPath = fss.existsSync(path.join(soloforgeRoot, "src", "engine"))
|
|
1438
|
-
? soloforgeRoot
|
|
1439
|
-
: process.cwd();
|
|
1440
|
-
try {
|
|
1441
|
-
const { auditTemplateMechanisms } = await import("../engine/template_mechanism_auditor.js");
|
|
1442
|
-
const report = auditTemplateMechanisms(projectPath);
|
|
1443
|
-
if (asJson) {
|
|
1444
|
-
userInfo(JSON.stringify(report, null, 2));
|
|
1445
|
-
if (report.hard_fail_count > 0) {
|
|
1446
|
-
process.exit(1);
|
|
1447
|
-
}
|
|
1448
|
-
return;
|
|
1449
|
-
}
|
|
1450
|
-
// 人类可读输出
|
|
1451
|
-
userInfo(`模板-机制审计报告 (${report.generated_at})`);
|
|
1452
|
-
userInfo(` 模板文件: ${report.total_template_files}`);
|
|
1453
|
-
userInfo(` 注册资产: ${report.total_registered_assets}`);
|
|
1454
|
-
userInfo(` 机制总数: ${report.total_mechanisms}`);
|
|
1455
|
-
userInfo("");
|
|
1456
|
-
if (report.unmapped_template_assets.length > 0) {
|
|
1457
|
-
userInfo(`⚠️ 未注册模板 (${report.unmapped_template_assets.length}):`);
|
|
1458
|
-
for (const u of report.unmapped_template_assets) {
|
|
1459
|
-
userInfo(` - ${u.path}`);
|
|
1460
|
-
}
|
|
1461
|
-
}
|
|
1462
|
-
if (report.unconsumed_template_assets.length > 0) {
|
|
1463
|
-
userInfo(`⚠️ 未消费资产 (${report.unconsumed_template_assets.length}):`);
|
|
1464
|
-
for (const u of report.unconsumed_template_assets) {
|
|
1465
|
-
userInfo(` - ${u.path} (mode=${u.consumption_mode})`);
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
if (report.code_only_mechanisms.length > 0) {
|
|
1469
|
-
userInfo(`⚠️ 仅代码机制 (无模板层):`);
|
|
1470
|
-
for (const m of report.code_only_mechanisms) {
|
|
1471
|
-
userInfo(` - ${m.mechanism_id} (${m.priority}, ${m.status})`);
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
|
-
if (report.template_only_mechanisms.length > 0) {
|
|
1475
|
-
userInfo(`⚠️ 仅模板机制 (无代码层):`);
|
|
1476
|
-
for (const m of report.template_only_mechanisms) {
|
|
1477
|
-
userInfo(` - ${m.mechanism_id} (${m.priority}, ${m.status})`);
|
|
1478
|
-
}
|
|
1479
|
-
}
|
|
1480
|
-
if (report.required_assets_without_enforcer.length > 0) {
|
|
1481
|
-
userInfo(`❌ Required 资产无 enforcer (${report.required_assets_without_enforcer.length}):`);
|
|
1482
|
-
for (const r of report.required_assets_without_enforcer) {
|
|
1483
|
-
userInfo(` - ${r.path} (mechanism=${r.owner_mechanism_id})`);
|
|
1484
|
-
}
|
|
1485
|
-
}
|
|
1486
|
-
if (report.overpromised_adapter_rules.length > 0) {
|
|
1487
|
-
userInfo(`❌ 适配器过度承诺 (${report.overpromised_adapter_rules.length}):`);
|
|
1488
|
-
for (const o of report.overpromised_adapter_rules) {
|
|
1489
|
-
userInfo(` - ${o.source_file}: ${o.promised_mechanism_id} (${o.promise_keywords.join(",")})`);
|
|
1490
|
-
}
|
|
1491
|
-
}
|
|
1492
|
-
if (report.deprecated_assets_injected.length > 0) {
|
|
1493
|
-
userInfo(`⚠️ Deprecated 资产仍被注入:`);
|
|
1494
|
-
for (const d of report.deprecated_assets_injected) {
|
|
1495
|
-
userInfo(` - ${d.path}`);
|
|
1496
|
-
}
|
|
1497
|
-
}
|
|
1498
|
-
if (report.template_mechanism_drift.length > 0) {
|
|
1499
|
-
const driftHard = report.template_mechanism_drift.filter((f) => f.severity === "hard_fail");
|
|
1500
|
-
const driftAdvisory = report.template_mechanism_drift.filter((f) => f.severity === "advisory");
|
|
1501
|
-
if (driftAdvisory.length > 0) {
|
|
1502
|
-
userInfo(`⚠️ 漂移 advisory (${driftAdvisory.length}):`);
|
|
1503
|
-
for (const f of driftAdvisory) {
|
|
1504
|
-
userInfo(` - [${f.finding_type}] ${f.mechanism_id}: ${f.message}`);
|
|
1505
|
-
}
|
|
1506
|
-
}
|
|
1507
|
-
if (driftHard.length > 0) {
|
|
1508
|
-
userInfo(`❌ 漂移 hard_fail (${driftHard.length}):`);
|
|
1509
|
-
for (const f of driftHard) {
|
|
1510
|
-
userInfo(` - [${f.finding_type}] ${f.mechanism_id}: ${f.message}`);
|
|
1511
|
-
}
|
|
1512
|
-
}
|
|
1513
|
-
}
|
|
1514
|
-
userInfo("");
|
|
1515
|
-
if (report.hard_fail_count > 0) {
|
|
1516
|
-
userInfo(`❌ 审计失败: ${report.hard_fail_count} hard_fail, ${report.advisory_count} advisory`);
|
|
1517
|
-
}
|
|
1518
|
-
else {
|
|
1519
|
-
userInfo(`✅ 审计通过: 0 hard_fail, ${report.advisory_count} advisory`);
|
|
1520
|
-
}
|
|
1521
|
-
// problem-57: 知识资产 schema 审计
|
|
1522
|
-
try {
|
|
1523
|
-
const { auditKnowledgeAssets, parseAssetFile } = await import("../engine/knowledge_asset_audit.js");
|
|
1524
|
-
const knowledgeDirs = [
|
|
1525
|
-
path.join(projectPath, "templates", "knowledge", "procedures"),
|
|
1526
|
-
path.join(projectPath, "templates", "knowledge", "rules"),
|
|
1527
|
-
path.join(projectPath, "templates", "knowledge", "checklists"),
|
|
1528
|
-
path.join(projectPath, "templates", "knowledge", "acceptance_templates"),
|
|
1529
|
-
path.join(projectPath, "templates", "knowledge", "review_rules"),
|
|
1530
|
-
path.join(projectPath, "templates", "knowledge", "workflow_templates"),
|
|
1531
|
-
];
|
|
1532
|
-
const assets = [];
|
|
1533
|
-
for (const dir of knowledgeDirs) {
|
|
1534
|
-
if (!fss.existsSync(dir))
|
|
1535
|
-
continue;
|
|
1536
|
-
for (const entry of fss.readdirSync(dir).filter((f) => f.endsWith(".md"))) {
|
|
1537
|
-
const fp = path.join(dir, entry);
|
|
1538
|
-
const content = fss.readFileSync(fp, "utf-8");
|
|
1539
|
-
assets.push(parseAssetFile(fp, content));
|
|
1540
|
-
}
|
|
1541
|
-
}
|
|
1542
|
-
if (assets.length > 0) {
|
|
1543
|
-
const kaReport = auditKnowledgeAssets(assets);
|
|
1544
|
-
userInfo("");
|
|
1545
|
-
userInfo("知识资产审计:");
|
|
1546
|
-
userInfo(` 资产数: ${kaReport.total_assets}`);
|
|
1547
|
-
userInfo(` 通过: ${kaReport.passed ? "✓" : "✗"}`);
|
|
1548
|
-
userInfo(` hard_fail: ${kaReport.hard_fail_count}, warning: ${kaReport.warning_count}`);
|
|
1549
|
-
for (const f of kaReport.findings) {
|
|
1550
|
-
const icon = f.severity === "hard_fail" ? "❌" : "⚠️";
|
|
1551
|
-
userInfo(` ${icon} ${f.asset_id ?? f.file_path}: ${f.detail} (${f.kind})`);
|
|
1552
|
-
}
|
|
1553
|
-
if (kaReport.hard_fail_count > 0) {
|
|
1554
|
-
userInfo(`❌ 知识资产审计有 ${kaReport.hard_fail_count} hard_fail`);
|
|
1555
|
-
process.exit(1);
|
|
1556
|
-
}
|
|
1557
|
-
}
|
|
1558
|
-
}
|
|
1559
|
-
catch (e) {
|
|
1560
|
-
userError(`❌ 知识资产审计异常: ${e.message}`);
|
|
1561
|
-
process.exit(1);
|
|
1562
|
-
}
|
|
1563
|
-
if (report.hard_fail_count > 0) {
|
|
1564
|
-
process.exit(1);
|
|
1565
|
-
}
|
|
1566
|
-
}
|
|
1567
|
-
catch (e) {
|
|
1568
|
-
userError(`❌ audit-template-mechanisms 失败: ${e.message}`);
|
|
1569
|
-
process.exit(1);
|
|
1570
|
-
}
|
|
1571
|
-
}
|
|
1572
|
-
async function cmdAuditDesignArtifacts() {
|
|
1573
|
-
debug("CLI", "执行 cmdAuditDesignArtifacts");
|
|
1574
|
-
const isJson = args.includes("--json");
|
|
1575
|
-
const projectPath = resolveProjectPath();
|
|
1576
|
-
const { createDesignArtifactPack, verifyDesignArtifactPack } = await import("../engine/design_artifact_pack.js");
|
|
1577
|
-
const contract = createDesignArtifactPack("design-artifact-audit-cli");
|
|
1578
|
-
const result = verifyDesignArtifactPack(projectPath, contract);
|
|
1579
|
-
if (isJson) {
|
|
1580
|
-
userInfo(JSON.stringify({ command: "audit-design-artifacts", project_path: projectPath, ...result }, null, 2));
|
|
1581
|
-
}
|
|
1582
|
-
else {
|
|
1583
|
-
userInfo(`设计产物包审计: ${projectPath}`);
|
|
1584
|
-
userInfo(` 状态: ${result.status}`);
|
|
1585
|
-
userInfo(` 已检查文件: ${result.checked_files.length}`);
|
|
1586
|
-
userInfo(` hard_fail: ${result.findings.filter((finding) => finding.severity === "hard_fail").length}`);
|
|
1587
|
-
for (const finding of result.findings) {
|
|
1588
|
-
userInfo(` ${finding.severity === "hard_fail" ? "❌" : "⚠️"} [${finding.code}] ${finding.message_zh}`);
|
|
1589
|
-
if (finding.template_path)
|
|
1590
|
-
userInfo(` 模板: ${finding.template_path}`);
|
|
1591
|
-
if (finding.recovery_command)
|
|
1592
|
-
userInfo(` 命令: ${finding.recovery_command}`);
|
|
1593
|
-
if (finding.recovery_zh)
|
|
1594
|
-
userInfo(` 恢复: ${finding.recovery_zh}`);
|
|
1595
|
-
}
|
|
1596
|
-
if (result.passed)
|
|
1597
|
-
userInfo("✅ 设计产物包复验通过,可作为后续实现输入");
|
|
1598
|
-
}
|
|
1599
|
-
if (!result.passed)
|
|
1600
|
-
process.exit(1);
|
|
1601
|
-
}
|
|
1602
|
-
/**
|
|
1603
|
-
* 存量设计资产升级只负责安全建立复验基线与归档原文。
|
|
1604
|
-
* 修正文档内容仍须经 AI 草案和用户确认后写入,再由 audit 命令真实复验。
|
|
1605
|
-
*/
|
|
1606
|
-
async function cmdUpgradeDesignArtifacts() {
|
|
1607
|
-
debug("CLI", "执行 cmdUpgradeDesignArtifacts");
|
|
1608
|
-
const apply = args.includes("--apply");
|
|
1609
|
-
const confirm = args.includes("--confirm");
|
|
1610
|
-
const isJson = args.includes("--json");
|
|
1611
|
-
const projectPath = resolveProjectPath();
|
|
1612
|
-
const { createDesignArtifactPack, verifyDesignArtifactPack } = await import("../engine/design_artifact_pack.js");
|
|
1613
|
-
const contract = createDesignArtifactPack("design-artifact-upgrade-cli");
|
|
1614
|
-
const audit = verifyDesignArtifactPack(projectPath, contract);
|
|
1615
|
-
const presentFiles = audit.checked_files.filter((relativePath) => fss.existsSync(path.join(projectPath, relativePath)));
|
|
1616
|
-
const output = {
|
|
1617
|
-
command: "upgrade-design-artifacts",
|
|
1618
|
-
mode: apply ? "apply" : "dry_run",
|
|
1619
|
-
status: audit.passed ? "implementation_ready" : "needs_revalidation",
|
|
1620
|
-
present_files: presentFiles,
|
|
1621
|
-
findings: audit.findings,
|
|
1622
|
-
next_steps: audit.passed
|
|
1623
|
-
? ["设计产物已符合当前标准,无需覆盖现有文件"]
|
|
1624
|
-
: ["保留原文归档", "基于 findings 生成修订草案", "用户确认后写入修订文档/OpenAPI/SQL", "重新执行 audit-design-artifacts"],
|
|
1625
|
-
};
|
|
1626
|
-
if (!apply) {
|
|
1627
|
-
if (isJson)
|
|
1628
|
-
userInfo(JSON.stringify(output, null, 2));
|
|
1629
|
-
else {
|
|
1630
|
-
userInfo("设计产物升级计划: dry-run(不会修改现有文档)");
|
|
1631
|
-
userInfo(` 当前状态: ${output.status}`);
|
|
1632
|
-
userInfo(` 已发现现有资产: ${presentFiles.length}`);
|
|
1633
|
-
userInfo(` 待修复项: ${audit.findings.length}`);
|
|
1634
|
-
userInfo(" 使用 --apply --confirm 仅归档现有基线并登记 needs_revalidation;修订内容仍须用户确认。");
|
|
1635
|
-
}
|
|
1636
|
-
return;
|
|
1637
|
-
}
|
|
1638
|
-
if (!confirm) {
|
|
1639
|
-
userError("❌ upgrade-design-artifacts --apply 必须同时提供 --confirm,禁止静默改写或归档现有设计文档");
|
|
1640
|
-
process.exit(1);
|
|
1641
|
-
}
|
|
1642
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
1643
|
-
const archiveDir = path.join(projectPath, ".soloforge", "design-artifacts", "archive", timestamp);
|
|
1644
|
-
fss.mkdirSync(archiveDir, { recursive: true });
|
|
1645
|
-
for (const relativePath of presentFiles) {
|
|
1646
|
-
const target = path.join(archiveDir, relativePath);
|
|
1647
|
-
fss.mkdirSync(path.dirname(target), { recursive: true });
|
|
1648
|
-
fss.copyFileSync(path.join(projectPath, relativePath), target);
|
|
1649
|
-
}
|
|
1650
|
-
const contractDir = path.join(projectPath, ".soloforge", "design-artifacts");
|
|
1651
|
-
fss.mkdirSync(contractDir, { recursive: true });
|
|
1652
|
-
fss.writeFileSync(path.join(contractDir, "upgrade-contract.json"), JSON.stringify({
|
|
1653
|
-
...contract,
|
|
1654
|
-
status: audit.passed ? "implementation_ready" : "needs_revalidation",
|
|
1655
|
-
baseline_hashes: audit.hashes,
|
|
1656
|
-
findings: audit.findings,
|
|
1657
|
-
verified_at: new Date().toISOString(),
|
|
1658
|
-
archive_dir: path.relative(projectPath, archiveDir),
|
|
1659
|
-
write_policy: "原文仅归档;修订文档须由用户确认后另行写入并重新复验",
|
|
1660
|
-
}, null, 2), "utf-8");
|
|
1661
|
-
const appliedOutput = { ...output, archive_dir: path.relative(projectPath, archiveDir), original_documents_overwritten: false };
|
|
1662
|
-
if (isJson)
|
|
1663
|
-
userInfo(JSON.stringify(appliedOutput, null, 2));
|
|
1664
|
-
else {
|
|
1665
|
-
userInfo(`✅ 已归档现有设计基线: ${appliedOutput.archive_dir}`);
|
|
1666
|
-
userInfo(" 未覆盖现有设计文档;请确认修订草案后重新执行复验。");
|
|
1667
|
-
}
|
|
1668
|
-
}
|
|
1669
|
-
async function cmdValidateKnowledge() {
|
|
1670
|
-
debug("CLI", "执行 cmdValidateKnowledge");
|
|
1671
|
-
const { validateContractRegistry } = await import("../engine/contract_registry.js");
|
|
1672
|
-
const { runAllKnowledgeScenarios, extractReadmeCommands } = await import("../engine/knowledge_scenario_registry.js");
|
|
1673
|
-
const { listKnowledgeIssueDetailAcceptances, validateKnowledgeIssueDetailAcceptance, } = await import("../engine/knowledge_acceptance_registry.js");
|
|
1674
|
-
const isJson = args.includes("--json");
|
|
1675
|
-
const cwd = process.cwd();
|
|
1676
|
-
const fs = await import("node:fs");
|
|
1677
|
-
const pathModule = await import("node:path");
|
|
1678
|
-
// 收集项目文件集合
|
|
1679
|
-
const existingFiles = new Set();
|
|
1680
|
-
function walkDir(dir, prefix) {
|
|
1681
|
-
try {
|
|
1682
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
1683
|
-
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
1684
|
-
if (entry.isDirectory()) {
|
|
1685
|
-
walkDir(pathModule.join(dir, entry.name), rel);
|
|
1686
|
-
}
|
|
1687
|
-
else {
|
|
1688
|
-
existingFiles.add(rel);
|
|
1689
|
-
}
|
|
1690
|
-
}
|
|
1691
|
-
}
|
|
1692
|
-
catch { /* 忽略不存在目录 */ }
|
|
1693
|
-
}
|
|
1694
|
-
walkDir(pathModule.join(cwd, "src"), "src");
|
|
1695
|
-
walkDir(pathModule.join(cwd, "tests"), "tests");
|
|
1696
|
-
// 验证契约注册表
|
|
1697
|
-
const contractFindings = validateContractRegistry(existingFiles);
|
|
1698
|
-
const hardFails = contractFindings.filter((f) => f.severity === "hard_fail");
|
|
1699
|
-
// 读取真实 README 并提取命令
|
|
1700
|
-
let readmeCommands;
|
|
1701
|
-
try {
|
|
1702
|
-
const readmeContent = fs.readFileSync(pathModule.join(cwd, "README.md"), "utf-8");
|
|
1703
|
-
readmeCommands = extractReadmeCommands(readmeContent);
|
|
1704
|
-
}
|
|
1705
|
-
catch { /* README 不存在时跳过 */ }
|
|
1706
|
-
// 运行真实场景矩阵
|
|
1707
|
-
const scenarioResults = runAllKnowledgeScenarios(readmeCommands);
|
|
1708
|
-
const scenariosPass = scenarioResults.every((s) => s.status === "PASS");
|
|
1709
|
-
// 验证 IssueDetailAcceptance 注册表
|
|
1710
|
-
const acceptances = listKnowledgeIssueDetailAcceptances();
|
|
1711
|
-
const acceptanceFindings = acceptances.flatMap((a) => validateKnowledgeIssueDetailAcceptance(a));
|
|
1712
|
-
const acceptanceHardFails = acceptanceFindings.filter((f) => f.severity === "hard_fail");
|
|
1713
|
-
const result = {
|
|
1714
|
-
contract_hard_fails: hardFails.length,
|
|
1715
|
-
issue_acceptances: acceptances.length,
|
|
1716
|
-
acceptance_hard_fails: acceptanceHardFails.length,
|
|
1717
|
-
scenarios_pass: scenariosPass,
|
|
1718
|
-
scenario_results: scenarioResults.map((s) => ({
|
|
1719
|
-
scenario_id: s.scenario_id,
|
|
1720
|
-
scenario_name: s.scenario_name,
|
|
1721
|
-
status: s.status,
|
|
1722
|
-
evidence: s.evidence,
|
|
1723
|
-
failures: s.failures.length,
|
|
1724
|
-
})),
|
|
1725
|
-
};
|
|
1726
|
-
if (isJson) {
|
|
1727
|
-
userInfo(JSON.stringify(result, null, 2));
|
|
1728
|
-
}
|
|
1729
|
-
else {
|
|
1730
|
-
userInfo("═══ 知识模板验证 ═══");
|
|
1731
|
-
userInfo(` 契约 hard_fail: ${hardFails.length}`);
|
|
1732
|
-
for (const f of hardFails) {
|
|
1733
|
-
userInfo(` ✗ ${f.contract_id}: ${f.message_zh}`);
|
|
1734
|
-
}
|
|
1735
|
-
userInfo(` IssueDetailAcceptance: ${acceptances.length} 条, hard_fail: ${acceptanceHardFails.length}`);
|
|
1736
|
-
for (const f of acceptanceHardFails) {
|
|
1737
|
-
userInfo(` ✗ ${f.issue_id}: ${f.message_zh}`);
|
|
1738
|
-
}
|
|
1739
|
-
userInfo(` 场景矩阵:`);
|
|
1740
|
-
for (const s of scenarioResults) {
|
|
1741
|
-
const icon = s.status === "PASS" ? "✓" : "✗";
|
|
1742
|
-
userInfo(` ${icon} ${s.scenario_id}: ${s.scenario_name} — ${s.status}`);
|
|
1743
|
-
for (const ev of s.evidence) {
|
|
1744
|
-
userInfo(` ✓ ${ev}`);
|
|
1745
|
-
}
|
|
1746
|
-
for (const fl of s.failures) {
|
|
1747
|
-
userInfo(` ✗ ${fl}`);
|
|
1748
|
-
}
|
|
1749
|
-
}
|
|
1750
|
-
const overallPass = hardFails.length === 0 && scenariosPass && acceptanceHardFails.length === 0;
|
|
1751
|
-
userInfo(overallPass ? "\n✅ 知识模板验证通过" : "\n❌ 知识模板验证失败");
|
|
1752
|
-
}
|
|
1753
|
-
const overallPass = hardFails.length === 0 && scenariosPass && acceptanceHardFails.length === 0;
|
|
1754
|
-
process.exit(overallPass ? 0 : 1);
|
|
1755
|
-
}
|
|
1756
|
-
async function cmdSyncTemplates() {
|
|
1757
|
-
debug("CLI", "执行 cmdSyncTemplates");
|
|
1758
|
-
const apply = args.includes("--apply");
|
|
1759
|
-
const confirm = args.includes("--confirm");
|
|
1760
|
-
const isJson = args.includes("--json");
|
|
1761
|
-
const { executeSync, validateSyncSafety, computeTemplateAssetVersions } = await import("../engine/template_sync.js");
|
|
1762
|
-
const { validateWorkflowTemplatePack, createWorkflowTemplatePackContract, createWorkflowTemplateEntry, createTemplateConsumptionEvidence, } = await import("../engine/workflow_template_pack.js");
|
|
1763
|
-
const { buildTemplateManifestFromSource, computeFileHashes, loadProjectManifest, saveProjectManifest, writeFileSyncRecursive, sha256Hex, hashFile, } = await import("../engine/template_manifest_io.js");
|
|
1764
|
-
const projectPath = process.cwd();
|
|
1765
|
-
const packageRoot = path.resolve(import.meta.dirname, "..", "..");
|
|
1766
|
-
const sourceDir = args.find((a) => a.startsWith("--source="))?.slice("--source=".length) ?? path.join(packageRoot, "templates");
|
|
1767
|
-
if (apply) {
|
|
1768
|
-
const { classifyConfigContext, validateWriteBoundary } = await import("../engine/config_write_boundary.js");
|
|
1769
|
-
const writeContext = classifyConfigContext(projectPath, { confirmed: confirm });
|
|
1770
|
-
const violations = validateWriteBoundary(writeContext, [
|
|
1771
|
-
path.join(projectPath, ".soloforge", "template-manifest.json"),
|
|
1772
|
-
path.join(projectPath, ".soloforge", "knowledge"),
|
|
1773
|
-
]);
|
|
1774
|
-
if (violations.length > 0) {
|
|
1775
|
-
for (const v of violations)
|
|
1776
|
-
userError(`❌ 模板同步写入边界阻断: ${v.target_path} — ${v.reason_zh}`);
|
|
1777
|
-
process.exit(1);
|
|
1778
|
-
}
|
|
1779
|
-
}
|
|
1780
|
-
// 读取当前包版本
|
|
1781
|
-
let packageVersion = "0.0.0";
|
|
1782
|
-
try {
|
|
1783
|
-
const pkgJson = JSON.parse(fss.readFileSync(path.join(packageRoot, "package.json"), "utf-8"));
|
|
1784
|
-
packageVersion = pkgJson.version;
|
|
1785
|
-
}
|
|
1786
|
-
catch { /* 回退 */ }
|
|
1787
|
-
// 构建源清单(真实模板文件)
|
|
1788
|
-
const sourceManifest = buildTemplateManifestFromSource(sourceDir, packageVersion);
|
|
1789
|
-
// 加载已安装清单
|
|
1790
|
-
const installedManifest = loadProjectManifest(projectPath) ?? [];
|
|
1791
|
-
// 计算哈希(Map key 用相对路径,与 computeTemplateAssetVersions 查找键一致)
|
|
1792
|
-
const sourceHashes = new Map();
|
|
1793
|
-
for (const e of sourceManifest) {
|
|
1794
|
-
const h = hashFile(path.join(packageRoot, e.source_path));
|
|
1795
|
-
if (h !== null)
|
|
1796
|
-
sourceHashes.set(e.source_path, h);
|
|
1797
|
-
}
|
|
1798
|
-
const baseManifest = installedManifest.length > 0 ? installedManifest : sourceManifest;
|
|
1799
|
-
const currentHashes = new Map();
|
|
1800
|
-
for (const e of baseManifest) {
|
|
1801
|
-
const h = hashFile(path.join(projectPath, e.target_path));
|
|
1802
|
-
if (h !== null)
|
|
1803
|
-
currentHashes.set(e.target_path, h);
|
|
1804
|
-
}
|
|
1805
|
-
// 计算差异(首次安装用 sourceManifest 作为基准,全部为 missing)
|
|
1806
|
-
const assets = computeTemplateAssetVersions(baseManifest, currentHashes, sourceHashes);
|
|
1807
|
-
// problem-53: 工作流模板包完整性校验 — 用真实 manifest 数据构建 pack
|
|
1808
|
-
const wfPackEntries = sourceManifest
|
|
1809
|
-
.filter(e => e.asset_kind === "workflow_template")
|
|
1810
|
-
.map(e => createWorkflowTemplateEntry("architecture_design", e.target_path));
|
|
1811
|
-
const wfConsumptionEvidences = assets
|
|
1812
|
-
.filter(a => wfPackEntries.some(w => w.template_path === a.target_path))
|
|
1813
|
-
.map(a => createTemplateConsumptionEvidence(a.target_path));
|
|
1814
|
-
if (wfPackEntries.length > 0) {
|
|
1815
|
-
const wfPack = createWorkflowTemplatePackContract({
|
|
1816
|
-
workflows: wfPackEntries,
|
|
1817
|
-
mechanism_consumption_map: sourceManifest
|
|
1818
|
-
.filter(e => e.asset_kind === "workflow_template")
|
|
1819
|
-
.map(e => ({ template_path: e.target_path, consumed_mechanism_id: `mc-${e.asset_id}`, consumption_type: "route_trigger", evidence_required: true })),
|
|
1820
|
-
});
|
|
1821
|
-
const wfResult = validateWorkflowTemplatePack(wfPack, wfConsumptionEvidences);
|
|
1822
|
-
if (!wfResult.valid && !isJson) {
|
|
1823
|
-
userInfo(` ⚠ 工作流模板包校验: ${wfResult.violations.length} 个违规`);
|
|
1824
|
-
for (const v of wfResult.violations)
|
|
1825
|
-
userInfo(` - ${v}`);
|
|
1826
|
-
}
|
|
1827
|
-
if (!wfResult.valid && apply) {
|
|
1828
|
-
// 校验失败阻断 apply
|
|
1829
|
-
internalWarn("CLI", `工作流模板包校验失败,apply 已阻断。违规: ${wfResult.violations.join("; ")}`);
|
|
1830
|
-
process.exit(1);
|
|
1831
|
-
}
|
|
1832
|
-
}
|
|
1833
|
-
const safeCheck = validateSyncSafety(assets);
|
|
1834
|
-
try {
|
|
1835
|
-
const { runKnowledgeGovernanceCheck } = await import("../engine/knowledge_governance_gate.js");
|
|
1836
|
-
const kgReport = runKnowledgeGovernanceCheck({
|
|
1837
|
-
project_language: "zh",
|
|
1838
|
-
contents: sourceManifest.slice(0, 12).map((e) => ({ id: e.asset_id, domain: "governance_contracts", content: e.target_path })),
|
|
1839
|
-
});
|
|
1840
|
-
if (kgReport.hard_fail_count > 0 && apply) {
|
|
1841
|
-
userError(`❌ 知识治理阻断模板同步: ${kgReport.hard_fail_count} hard_fail`);
|
|
1842
|
-
process.exit(1);
|
|
1843
|
-
}
|
|
1844
|
-
}
|
|
1845
|
-
catch (e) {
|
|
1846
|
-
if (!isJson)
|
|
1847
|
-
userInfo(` ⚠ 知识治理同步检查异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1848
|
-
}
|
|
1849
|
-
const syncResult = executeSync({ dry_run: !apply, apply, confirm, project_path: projectPath, source_path: sourceDir }, assets, sourceManifest);
|
|
1850
|
-
// apply 模式:真实文件复制
|
|
1851
|
-
if (apply && confirm && syncResult.success && syncResult.backup_path) {
|
|
1852
|
-
const backupDir = syncResult.backup_path;
|
|
1853
|
-
fss.mkdirSync(backupDir, { recursive: true });
|
|
1854
|
-
const assetMap = new Map(assets.map((a) => [a.asset_id, a]));
|
|
1855
|
-
const updatedManifest = [...sourceManifest];
|
|
1856
|
-
for (const assetId of [...syncResult.report.added, ...syncResult.report.updated]) {
|
|
1857
|
-
const asset = assetMap.get(assetId);
|
|
1858
|
-
if (!asset)
|
|
1859
|
-
continue;
|
|
1860
|
-
const srcAbs = path.join(packageRoot, asset.source_path);
|
|
1861
|
-
const tgtAbs = path.join(projectPath, asset.target_path);
|
|
1862
|
-
// 备份已有文件
|
|
1863
|
-
if (fss.existsSync(tgtAbs)) {
|
|
1864
|
-
const backupFile = path.join(backupDir, path.basename(tgtAbs));
|
|
1865
|
-
fss.copyFileSync(tgtAbs, backupFile);
|
|
1866
|
-
}
|
|
1867
|
-
// 复制源文件到目标
|
|
1868
|
-
writeFileSyncRecursive(tgtAbs, fss.readFileSync(srcAbs));
|
|
1869
|
-
// 更新清单中的 installed_hash
|
|
1870
|
-
const idx = updatedManifest.findIndex((e) => e.asset_id === assetId);
|
|
1871
|
-
if (idx >= 0) {
|
|
1872
|
-
updatedManifest[idx] = {
|
|
1873
|
-
...updatedManifest[idx],
|
|
1874
|
-
installed_hash: asset.source_hash,
|
|
1875
|
-
installed_at: new Date().toISOString(),
|
|
1876
|
-
};
|
|
1877
|
-
}
|
|
1878
|
-
}
|
|
1879
|
-
// 持久化清单
|
|
1880
|
-
saveProjectManifest(projectPath, updatedManifest);
|
|
1881
|
-
}
|
|
1882
|
-
if (isJson) {
|
|
1883
|
-
userInfo(JSON.stringify({
|
|
1884
|
-
command: "sync-templates",
|
|
1885
|
-
mode: apply ? "apply" : "dry_run",
|
|
1886
|
-
total_assets: assets.length,
|
|
1887
|
-
safe: safeCheck.safe,
|
|
1888
|
-
result: syncResult.success,
|
|
1889
|
-
dry_run: syncResult.dry_run,
|
|
1890
|
-
report: syncResult.report,
|
|
1891
|
-
}, null, 2));
|
|
1892
|
-
}
|
|
1893
|
-
else {
|
|
1894
|
-
userInfo(apply ? "模板同步: apply 模式" : "模板同步: dry-run 模式(不写入文件)");
|
|
1895
|
-
userInfo(` 资产总数: ${assets.length}`);
|
|
1896
|
-
userInfo(` 应用安全: ${safeCheck.safe ? "安全" : "需确认"}`);
|
|
1897
|
-
userInfo(` 结果: ${syncResult.success ? "成功" : "失败"}`);
|
|
1898
|
-
userInfo(` 新增: ${syncResult.report.added.length}`);
|
|
1899
|
-
userInfo(` 更新: ${syncResult.report.updated.length}`);
|
|
1900
|
-
userInfo(` 跳过(用户修改): ${syncResult.report.skipped_user_modified.length}`);
|
|
1901
|
-
userInfo(` 废弃: ${syncResult.report.deprecated.length}`);
|
|
1902
|
-
if (!apply)
|
|
1903
|
-
userInfo(" 使用 --apply --confirm 应用同步;需确认表示 dry-run 发现现有用户资产,不会自动覆盖");
|
|
1904
|
-
}
|
|
1905
|
-
if (!syncResult.success)
|
|
1906
|
-
process.exit(1);
|
|
1907
|
-
}
|
|
1908
|
-
async function cmdSyncAdapters() {
|
|
1909
|
-
debug("CLI", "执行 cmdSyncAdapters");
|
|
1910
|
-
const apply = args.includes("--apply");
|
|
1911
|
-
const confirm = args.includes("--confirm");
|
|
1912
|
-
const isJson = args.includes("--json");
|
|
1913
|
-
const { syncAdapterPrompts, validateAdapterPrompt, REQUIRED_ADAPTER_SECTIONS, } = await import("../engine/adapter_prompt_contract.js");
|
|
1914
|
-
const { writeFileSyncRecursive, sha256Hex, hashFile, } = await import("../engine/template_manifest_io.js");
|
|
1915
|
-
const projectPath = process.cwd();
|
|
1916
|
-
// 加载项目配置(回退到默认)
|
|
1917
|
-
let config;
|
|
1918
|
-
try {
|
|
1919
|
-
const resolved = await resolveProjectConfig(projectPath);
|
|
1920
|
-
config = resolved.config;
|
|
1921
|
-
}
|
|
1922
|
-
catch {
|
|
1923
|
-
config = {
|
|
1924
|
-
name: "default", tech_stack: { backend: { lang: "", framework: "", version: "" }, frontend: { lang: "", framework: "", version: "" } },
|
|
1925
|
-
product_profile: "general", repos: [], build_commands: { backend: {}, frontend: {} }, scope: { backend: [], frontend: [] },
|
|
1926
|
-
};
|
|
1927
|
-
}
|
|
1928
|
-
// 适配器生成器
|
|
1929
|
-
const { generateClaudeMd } = await import("../adapters/claude_code/claude_md.js");
|
|
1930
|
-
const { generateCodexAgentsMd } = await import("../adapters/codex/codex_rules.js");
|
|
1931
|
-
const { generateTraeRules } = await import("../adapters/trae/trae_rules.js");
|
|
1932
|
-
const sections = [...REQUIRED_ADAPTER_SECTIONS];
|
|
1933
|
-
// 适配器 installed hash 记录文件
|
|
1934
|
-
const ADAPTER_HASH_FILE = ".soloforge/adapter_hashes.json";
|
|
1935
|
-
// 加载已安装的适配器 hash 记录
|
|
1936
|
-
let installedAdapterHashes = {};
|
|
1937
|
-
try {
|
|
1938
|
-
const hashContent = fss.readFileSync(path.join(projectPath, ADAPTER_HASH_FILE), "utf-8");
|
|
1939
|
-
installedAdapterHashes = JSON.parse(hashContent);
|
|
1940
|
-
}
|
|
1941
|
-
catch { /* 首次无记录 */ }
|
|
1942
|
-
const adapterContracts = [
|
|
1943
|
-
{
|
|
1944
|
-
adapter_id: "claude-code", host_type: "claude_code",
|
|
1945
|
-
prompt_path: "CLAUDE.md",
|
|
1946
|
-
generated_from_contract_version: "1",
|
|
1947
|
-
required_sections: sections,
|
|
1948
|
-
forbidden_claims: [],
|
|
1949
|
-
sync_required: true,
|
|
1950
|
-
next_allowed_tools: ["sf_classify", "sf_expand", "sf_verify", "sf_learn", "sf_deliver", "sf_review"],
|
|
1951
|
-
},
|
|
1952
|
-
{
|
|
1953
|
-
adapter_id: "codex", host_type: "codex",
|
|
1954
|
-
prompt_path: "AGENTS.md",
|
|
1955
|
-
generated_from_contract_version: "1",
|
|
1956
|
-
required_sections: sections,
|
|
1957
|
-
forbidden_claims: [],
|
|
1958
|
-
sync_required: true,
|
|
1959
|
-
next_allowed_tools: ["sf_classify", "sf_expand", "sf_verify", "sf_learn"],
|
|
1960
|
-
},
|
|
1961
|
-
{
|
|
1962
|
-
adapter_id: "trae", host_type: "cursor",
|
|
1963
|
-
prompt_path: ".trae/rules/project_rules.md",
|
|
1964
|
-
generated_from_contract_version: "1",
|
|
1965
|
-
required_sections: sections,
|
|
1966
|
-
forbidden_claims: [],
|
|
1967
|
-
sync_required: true,
|
|
1968
|
-
next_allowed_tools: ["sf_classify", "sf_expand", "sf_verify", "sf_learn"],
|
|
1969
|
-
},
|
|
1970
|
-
];
|
|
1971
|
-
// 验证所有适配器
|
|
1972
|
-
const validations = syncAdapterPrompts(adapterContracts, { dry_run: !apply, apply, confirm });
|
|
1973
|
-
// 适配器内容生成
|
|
1974
|
-
const generators = {
|
|
1975
|
-
"claude-code": () => generateClaudeMd(config),
|
|
1976
|
-
"codex": () => generateCodexAgentsMd(config),
|
|
1977
|
-
"trae": () => generateTraeRules(config),
|
|
1978
|
-
};
|
|
1979
|
-
// apply 模式:写入合规的适配器文件
|
|
1980
|
-
const writtenFiles = [];
|
|
1981
|
-
const skippedFiles = [];
|
|
1982
|
-
if (apply && confirm) {
|
|
1983
|
-
const updatedHashes = { ...installedAdapterHashes };
|
|
1984
|
-
for (const contract of adapterContracts) {
|
|
1985
|
-
const validation = validations.find((v) => v.adapter_id === contract.adapter_id);
|
|
1986
|
-
if (!validation?.compliant) {
|
|
1987
|
-
skippedFiles.push(`${contract.adapter_id}: 不合规,跳过`);
|
|
1988
|
-
continue;
|
|
1989
|
-
}
|
|
1990
|
-
const targetPath = path.join(projectPath, contract.prompt_path);
|
|
1991
|
-
const generator = generators[contract.adapter_id];
|
|
1992
|
-
if (!generator)
|
|
1993
|
-
continue;
|
|
1994
|
-
const content = generator();
|
|
1995
|
-
const generatedHash = sha256Hex(content);
|
|
1996
|
-
// 用户修改检测:文件存在且 hash 与已安装 hash 不一致
|
|
1997
|
-
if (fss.existsSync(targetPath)) {
|
|
1998
|
-
const diskHash = hashFile(targetPath);
|
|
1999
|
-
const installedHash = installedAdapterHashes[contract.adapter_id];
|
|
2000
|
-
if (diskHash && installedHash && diskHash !== installedHash) {
|
|
2001
|
-
// 文件被用户修改,不得覆盖
|
|
2002
|
-
skippedFiles.push(`${contract.adapter_id}: 用户已修改,跳过`);
|
|
2003
|
-
continue;
|
|
2004
|
-
}
|
|
2005
|
-
}
|
|
2006
|
-
// 首次安装或内容有变化:写入
|
|
2007
|
-
writeFileSyncRecursive(targetPath, content);
|
|
2008
|
-
writtenFiles.push(contract.prompt_path);
|
|
2009
|
-
updatedHashes[contract.adapter_id] = generatedHash;
|
|
2010
|
-
}
|
|
2011
|
-
// 持久化 hash 记录
|
|
2012
|
-
writeFileSyncRecursive(path.join(projectPath, ADAPTER_HASH_FILE), JSON.stringify(updatedHashes, null, 2));
|
|
2013
|
-
}
|
|
2014
|
-
if (isJson) {
|
|
2015
|
-
userInfo(JSON.stringify({
|
|
2016
|
-
command: "sync-adapters",
|
|
2017
|
-
mode: apply ? "apply" : "dry_run",
|
|
2018
|
-
adapter_count: adapterContracts.length,
|
|
2019
|
-
validations,
|
|
2020
|
-
written: writtenFiles,
|
|
2021
|
-
skipped: skippedFiles,
|
|
2022
|
-
}, null, 2));
|
|
2023
|
-
}
|
|
2024
|
-
else {
|
|
2025
|
-
userInfo(apply ? "适配器同步: apply 模式" : "适配器同步: dry-run 模式(不写入文件)");
|
|
2026
|
-
userInfo(` 适配器数量: ${adapterContracts.length}`);
|
|
2027
|
-
for (const v of validations) {
|
|
2028
|
-
const icon = v.compliant ? "✓" : "✗";
|
|
2029
|
-
userInfo(` ${icon} ${v.adapter_id}: ${v.compliant ? "合规" : "不合规"}`);
|
|
2030
|
-
for (const f of v.findings) {
|
|
2031
|
-
if (f.severity !== "info")
|
|
2032
|
-
userInfo(` ${f.severity === "critical" ? "✗" : "⚠"} ${f.message_zh}`);
|
|
2033
|
-
}
|
|
2034
|
-
}
|
|
2035
|
-
if (writtenFiles.length > 0) {
|
|
2036
|
-
userInfo(` 已写入: ${writtenFiles.join(", ")}`);
|
|
2037
|
-
}
|
|
2038
|
-
if (skippedFiles.length > 0) {
|
|
2039
|
-
userInfo(` 已跳过: ${skippedFiles.join("; ")}`);
|
|
2040
|
-
}
|
|
2041
|
-
if (!apply)
|
|
2042
|
-
userInfo(" 使用 --apply --confirm 应用同步");
|
|
2043
|
-
}
|
|
2044
|
-
}
|
|
2045
|
-
async function cmdMigrate() {
|
|
2046
|
-
debug("CLI", "执行 cmdMigrate");
|
|
2047
|
-
const apply = args.includes("--apply");
|
|
2048
|
-
const confirm = args.includes("--confirm");
|
|
2049
|
-
const isJson = args.includes("--json");
|
|
2050
|
-
const { createMigrationPlan, getCurrentCompatibility, validateMigrationSafety, generateVersionFile } = await import("../engine/release_compatibility.js");
|
|
2051
|
-
const { loadProjectVersion, saveProjectVersion, writeFileSyncRecursive } = await import("../engine/template_manifest_io.js");
|
|
2052
|
-
const projectPath = process.cwd();
|
|
2053
|
-
const compat = getCurrentCompatibility();
|
|
2054
|
-
const toVersion = compat.package_version;
|
|
2055
|
-
// 读取项目已安装版本,不存在视为首次
|
|
2056
|
-
const installed = loadProjectVersion(projectPath);
|
|
2057
|
-
const fromVersion = installed?.soloforge_package_version ?? "0.0.0";
|
|
2058
|
-
// 版本相同,无需迁移
|
|
2059
|
-
if (fromVersion === toVersion) {
|
|
2060
|
-
if (isJson) {
|
|
2061
|
-
userInfo(JSON.stringify({
|
|
2062
|
-
command: "migrate",
|
|
2063
|
-
mode: "noop",
|
|
2064
|
-
success: true,
|
|
2065
|
-
dry_run: !apply,
|
|
2066
|
-
safe: true,
|
|
2067
|
-
message: `已是最新版本 ${toVersion}`,
|
|
2068
|
-
from_version: fromVersion,
|
|
2069
|
-
to_version: toVersion,
|
|
2070
|
-
}, null, 2));
|
|
2071
|
-
}
|
|
2072
|
-
else {
|
|
2073
|
-
userInfo(`项目迁移: 已是最新版本 ${toVersion}`);
|
|
2074
|
-
userInfo(` 当前版本: ${fromVersion}`);
|
|
2075
|
-
}
|
|
2076
|
-
return;
|
|
2077
|
-
}
|
|
2078
|
-
// 先生成真实迁移计划
|
|
2079
|
-
const plan = createMigrationPlan({ dry_run: !apply, apply, confirm, project_path: projectPath, from_version: fromVersion, to_version: toVersion }, compat);
|
|
2080
|
-
// 基于真实 plan 做安全检查
|
|
2081
|
-
const safetyCheck = validateMigrationSafety(plan.plan, apply, !!confirm);
|
|
2082
|
-
// apply --confirm 模式且安全通过时:创建备份 + 写入 version.json
|
|
2083
|
-
if (apply && confirm && plan.success && safetyCheck.safe && plan.backup_path) {
|
|
2084
|
-
const backupDir = path.join(projectPath, plan.backup_path);
|
|
2085
|
-
fss.mkdirSync(backupDir, { recursive: true });
|
|
2086
|
-
// 备份已有 version.json
|
|
2087
|
-
const versionPath = path.join(projectPath, ".soloforge/version.json");
|
|
2088
|
-
if (fss.existsSync(versionPath)) {
|
|
2089
|
-
fss.copyFileSync(versionPath, path.join(backupDir, "version.json"));
|
|
2090
|
-
}
|
|
2091
|
-
// 写入新版本文件
|
|
2092
|
-
const versionContent = generateVersionFile(toVersion, compat.contract_registry_version);
|
|
2093
|
-
// 合并 created_at(首次用新时间,升级保留原时间)
|
|
2094
|
-
if (installed?.created_at) {
|
|
2095
|
-
versionContent.created_at = installed.created_at;
|
|
2096
|
-
}
|
|
2097
|
-
saveProjectVersion(projectPath, versionContent);
|
|
2098
|
-
}
|
|
2099
|
-
const success = plan.success && safetyCheck.safe;
|
|
2100
|
-
if (isJson) {
|
|
2101
|
-
userInfo(JSON.stringify({
|
|
2102
|
-
command: "migrate",
|
|
2103
|
-
mode: apply ? "apply" : "dry_run",
|
|
2104
|
-
success,
|
|
2105
|
-
dry_run: plan.dry_run,
|
|
2106
|
-
safe: safetyCheck.safe,
|
|
2107
|
-
from_version: fromVersion,
|
|
2108
|
-
to_version: toVersion,
|
|
2109
|
-
plan: plan.plan,
|
|
2110
|
-
backup_path: plan.backup_path,
|
|
2111
|
-
}, null, 2));
|
|
2112
|
-
}
|
|
2113
|
-
else {
|
|
2114
|
-
userInfo(apply ? "项目迁移: apply 模式" : "项目迁移: dry-run 模式(不写入文件)");
|
|
2115
|
-
userInfo(` 结果: ${success ? "成功" : "失败"}`);
|
|
2116
|
-
userInfo(` 从版本: ${fromVersion}`);
|
|
2117
|
-
userInfo(` 到版本: ${toVersion}`);
|
|
2118
|
-
userInfo(` 安全检查: ${safetyCheck.safe ? "✓" : "✗"}`);
|
|
2119
|
-
userInfo(` 需迁移: ${plan.plan.required_migrations.length}`);
|
|
2120
|
-
userInfo(` 自动应用: ${plan.plan.auto_applicable.length}`);
|
|
2121
|
-
userInfo(` 需人工: ${plan.plan.requires_human.length}`);
|
|
2122
|
-
if (!apply)
|
|
2123
|
-
userInfo(" 使用 --apply --confirm 执行迁移");
|
|
2124
|
-
}
|
|
2125
|
-
if (!success)
|
|
2126
|
-
process.exit(1);
|
|
2127
|
-
}
|
|
2128
|
-
async function cmdValidateReleaseGate() {
|
|
2129
|
-
const isJson = args.includes("--json");
|
|
2130
|
-
debug("CLI", "执行 cmdValidateReleaseGate");
|
|
2131
|
-
const { runReleaseReadinessGate } = await import("../engine/release_readiness_gate.js");
|
|
2132
|
-
const result = await runReleaseReadinessGate(process.cwd());
|
|
2133
|
-
if (isJson) {
|
|
2134
|
-
userInfo(JSON.stringify({
|
|
2135
|
-
passed: result.passed,
|
|
2136
|
-
hard_fail_count: result.hard_fail_count,
|
|
2137
|
-
hard_fails: result.hard_fails,
|
|
2138
|
-
phases: result.phases,
|
|
2139
|
-
}, null, 2));
|
|
2140
|
-
}
|
|
2141
|
-
else {
|
|
2142
|
-
userInfo("══════════════════════════════════════════════════════════════");
|
|
2143
|
-
userInfo(`发布结论: ${result.passed ? "PASS" : "FAIL"}`);
|
|
2144
|
-
userInfo(`hard_fail 数量: ${result.hard_fail_count}`);
|
|
2145
|
-
userInfo("══════════════════════════════════════════════════════════════");
|
|
2146
|
-
userInfo();
|
|
2147
|
-
for (const p of result.phases) {
|
|
2148
|
-
userInfo(` ${p.hard_fail_count === 0 ? "[PASS]" : "[FAIL]"} ${p.name} — ${p.hard_fail_count} hard_fail`);
|
|
2149
|
-
}
|
|
2150
|
-
if (result.hard_fails.length > 0) {
|
|
2151
|
-
userInfo();
|
|
2152
|
-
userInfo("━━━ hard_fail 明细 ━━━");
|
|
2153
|
-
for (let i = 0; i < result.hard_fails.length; i++) {
|
|
2154
|
-
const hf = result.hard_fails[i];
|
|
2155
|
-
userInfo(`[${i + 1}] ${hf.code}: ${hf.message}`);
|
|
2156
|
-
userInfo(` 涉及: ${hf.files.join(", ")}`);
|
|
2157
|
-
userInfo(` 下一步: ${hf.nextStep}`);
|
|
2158
|
-
}
|
|
2159
|
-
}
|
|
2160
|
-
}
|
|
2161
|
-
if (!result.passed)
|
|
2162
|
-
process.exit(1);
|
|
2163
|
-
}
|
|
2164
|
-
async function cmdValidateFoundation() {
|
|
2165
|
-
debug("CLI", "执行 cmdValidateFoundation");
|
|
2166
|
-
const { validateMechanismLayerMaps, listMechanismLayerMaps } = await import("../engine/dual_layer_mechanism_registry.js");
|
|
2167
|
-
const { auditTemplateMechanisms } = await import("../engine/template_mechanism_auditor.js");
|
|
2168
|
-
const { validateFoundationScenarios } = await import("../engine/foundation_scenario_registry.js");
|
|
2169
|
-
const cwd = process.cwd();
|
|
2170
|
-
const maps = listMechanismLayerMaps();
|
|
2171
|
-
const mechFindings = validateMechanismLayerMaps(maps, cwd);
|
|
2172
|
-
const mechanismsPass = mechFindings.filter((f) => f.severity === "hard_fail").length === 0;
|
|
2173
|
-
const auditReport = auditTemplateMechanisms(cwd);
|
|
2174
|
-
const auditPass = auditReport.hard_fail_count === 0;
|
|
2175
|
-
const scenarioResults = await validateFoundationScenarios(mechanismsPass, auditPass, true);
|
|
2176
|
-
const allPass = scenarioResults.every((s) => s.status === "PASS");
|
|
2177
|
-
const isJson = process.argv.includes("--json");
|
|
2178
|
-
if (isJson) {
|
|
2179
|
-
userInfo(JSON.stringify({
|
|
2180
|
-
mechanisms_pass: mechanismsPass,
|
|
2181
|
-
audit_pass: auditPass,
|
|
2182
|
-
all_pass: allPass,
|
|
2183
|
-
scenarios: scenarioResults,
|
|
2184
|
-
}, null, 2));
|
|
2185
|
-
}
|
|
2186
|
-
else {
|
|
2187
|
-
for (const s of scenarioResults) {
|
|
2188
|
-
const icon = s.status === "PASS" ? "✓" : "✗";
|
|
2189
|
-
userInfo(`${icon} ${s.scenario_id}: ${s.scenario_name} — ${s.status}`);
|
|
2190
|
-
for (const r of s.rules) {
|
|
2191
|
-
const ri = r.status === "PASS" ? " ✓" : " ✗";
|
|
2192
|
-
userInfo(`${ri} ${r.rule}: ${r.evidence}`);
|
|
2193
|
-
}
|
|
2194
|
-
}
|
|
2195
|
-
userInfo(allPass ? "\n所有场景通过" : "\n部分场景失败");
|
|
2196
|
-
}
|
|
2197
|
-
process.exit(allPass ? 0 : 1);
|
|
2198
|
-
}
|
|
2199
|
-
/**
|
|
2200
|
-
* 新增问题/issue 演进门控 — problem-54 真实消费入口。
|
|
2201
|
-
* 用法: soloforge validate-new-issue --title="问题标题" --batch=2 [--json]
|
|
2202
|
-
*/
|
|
2203
|
-
async function cmdValidateNewIssue() {
|
|
2204
|
-
debug("CLI", "执行 cmdValidateNewIssue");
|
|
2205
|
-
const title = getArgValue("--title") ?? "";
|
|
2206
|
-
const isJson = args.includes("--json");
|
|
2207
|
-
if (!title) {
|
|
2208
|
-
userError("❌ 错误: --title 必须提供");
|
|
2209
|
-
process.exit(1);
|
|
2210
|
-
}
|
|
2211
|
-
const { performEvolutionGate, checkDuplicateIssue, createNewIssueRegressionGate, } = await import("../engine/evolution_regression_gate.js");
|
|
2212
|
-
// 稳定 slug: 基于标题哈希而非 Date.now
|
|
2213
|
-
const titleSlug = title
|
|
2214
|
-
.toLowerCase()
|
|
2215
|
-
.replace(/[^a-z0-9一-鿿]+/g, "-")
|
|
2216
|
-
.replace(/^-|-$/g, "")
|
|
2217
|
-
.slice(0, 40);
|
|
2218
|
-
const hashSuffix = crypto.createHash("sha256").update(title).digest("hex").slice(0, 8);
|
|
2219
|
-
const candidateId = `issue-${titleSlug}-${hashSuffix}`;
|
|
2220
|
-
const gate = createNewIssueRegressionGate({
|
|
2221
|
-
issue_candidate_id: candidateId,
|
|
2222
|
-
candidate_title: title,
|
|
2223
|
-
});
|
|
2224
|
-
// 演进门控
|
|
2225
|
-
const result = performEvolutionGate(gate);
|
|
2226
|
-
const output = {
|
|
2227
|
-
title,
|
|
2228
|
-
candidate_id: candidateId,
|
|
2229
|
-
duplicate_detected: gate.duplicate_check.possible_duplicates.length > 0,
|
|
2230
|
-
duplicates: [...new Set(gate.duplicate_check.possible_duplicates)],
|
|
2231
|
-
gate_status: result.gate_status,
|
|
2232
|
-
can_proceed: result.allowed,
|
|
2233
|
-
reasons: result.reasons,
|
|
2234
|
-
};
|
|
2235
|
-
if (isJson) {
|
|
2236
|
-
userInfo(JSON.stringify(output, null, 2));
|
|
2237
|
-
}
|
|
2238
|
-
else {
|
|
2239
|
-
userInfo(`需求演进检查: ${output.gate_status}`);
|
|
2240
|
-
if (output.duplicate_detected) {
|
|
2241
|
-
userInfo(` ⚠ 重复检测: 发现 ${output.duplicates.join(", ")}`);
|
|
2242
|
-
}
|
|
2243
|
-
if (result.reasons.length > 0) {
|
|
2244
|
-
userInfo(` 原因:`);
|
|
2245
|
-
for (const r of result.reasons)
|
|
2246
|
-
userInfo(` - ${r}`);
|
|
2247
|
-
}
|
|
2248
|
-
if (output.can_proceed) {
|
|
2249
|
-
userInfo(` ✓ 可继续: 需求新增已通过演进检查 (ID: ${candidateId})`);
|
|
2250
|
-
}
|
|
2251
|
-
}
|
|
2252
|
-
if (!output.can_proceed) {
|
|
2253
|
-
process.exit(1);
|
|
2254
|
-
}
|
|
2255
|
-
}
|
|
2256
|
-
async function cmdStatus() {
|
|
2257
|
-
debug("CLI", "执行 cmdStatus");
|
|
2258
|
-
const projectPath = resolveProjectPath();
|
|
2259
|
-
const { config, source } = await resolveProjectConfig(projectPath);
|
|
2260
|
-
userInfo(`SoloForge 状态: ${projectPath}`);
|
|
2261
|
-
userInfo(` 配置来源: ${source === "config_file" ? "config.yaml" : "自动推断"}`);
|
|
2262
|
-
userInfo(` 产品: ${config.product_profile}`);
|
|
2263
|
-
userInfo(` 后端: ${config.tech_stack.backend.framework || "未配置"}`);
|
|
2264
|
-
userInfo(` 前端: ${config.tech_stack.frontend.framework || "未配置"}`);
|
|
2265
|
-
// 逐字段配置优先级状态
|
|
2266
|
-
try {
|
|
2267
|
-
const { resolutions, entries } = await resolveCurrentProjectConfigReports(projectPath);
|
|
2268
|
-
if (resolutions.length > 0) {
|
|
2269
|
-
userInfo("");
|
|
2270
|
-
userInfo(" 字段解析状态:");
|
|
2271
|
-
for (const r of resolutions) {
|
|
2272
|
-
const stale = r.stale_warning ? " ⚠️ stale" : "";
|
|
2273
|
-
const conflict = r.conflict_report ? " ⚠️ conflict" : "";
|
|
2274
|
-
userInfo(` ${r.field_path}: ${JSON.stringify(r.resolved_value)} (${r.source}${stale}${conflict})`);
|
|
2275
|
-
}
|
|
2276
|
-
}
|
|
2277
|
-
const schemaPath = path.join(projectPath, ".soloforge", "config.evidence.json");
|
|
2278
|
-
if (fss.existsSync(schemaPath)) {
|
|
2279
|
-
try {
|
|
2280
|
-
const raw = JSON.parse(fss.readFileSync(schemaPath, "utf-8"));
|
|
2281
|
-
userInfo(` evidence: schema_version=${raw.schema_version ?? 1}, ${entries.length} 条`);
|
|
2282
|
-
}
|
|
2283
|
-
catch {
|
|
2284
|
-
userInfo(" evidence: 无法解析");
|
|
2285
|
-
}
|
|
2286
|
-
}
|
|
2287
|
-
else if (source === "config_file") {
|
|
2288
|
-
userInfo(" evidence: ⚠️ config.evidence.json 缺失");
|
|
2289
|
-
}
|
|
2290
|
-
}
|
|
2291
|
-
catch { }
|
|
2292
|
-
// Evidence 警告
|
|
2293
|
-
const evidenceWarnings = await checkEvidenceWarnings(projectPath);
|
|
2294
|
-
for (const w of evidenceWarnings) {
|
|
2295
|
-
userInfo(` ⚠️ evidence: ${w}`);
|
|
2296
|
-
}
|
|
2297
|
-
const knowledgeDir = getProjectKnowledgeDir(config);
|
|
2298
|
-
if (fss.existsSync(knowledgeDir)) {
|
|
2299
|
-
const { KnowledgeIndexManager } = await import("../knowledge/index_manager.js");
|
|
2300
|
-
const index = new KnowledgeIndexManager(config, { watch: false });
|
|
2301
|
-
try {
|
|
2302
|
-
await index.build();
|
|
2303
|
-
const entries = index.getAllEntries();
|
|
2304
|
-
userInfo(` 知识: ${entries.global.length} 全局 + ${entries.project.length} 项目`);
|
|
2305
|
-
}
|
|
2306
|
-
finally {
|
|
2307
|
-
await index.close();
|
|
2308
|
-
}
|
|
2309
|
-
}
|
|
2310
|
-
else {
|
|
2311
|
-
userInfo(" 知识: 未初始化");
|
|
2312
|
-
}
|
|
2313
|
-
// 导航摘要(消费同一规划模块,包含阻断项和下一步)
|
|
2314
|
-
try {
|
|
2315
|
-
const { planNextAction } = await import("../engine/next_action_planner.js");
|
|
2316
|
-
const navigation = await planNextAction(projectPath);
|
|
2317
|
-
userInfo(` 阶段: ${navigation.project_stage}${navigation.task_stage ? ` / ${navigation.task_stage}` : ""}`);
|
|
2318
|
-
if (navigation.blocking_reasons.length > 0) {
|
|
2319
|
-
userInfo(` 导航阻断: ${navigation.blocking_reasons.join("; ")}`);
|
|
2320
|
-
}
|
|
2321
|
-
if (navigation.confirmation_decisions.auto_resolvable.length > 0) {
|
|
2322
|
-
userInfo(` 可自动处理: ${navigation.confirmation_decisions.auto_resolvable.map((item) => item.command_hint ?? item.title_zh).join(" / ")}`);
|
|
2323
|
-
}
|
|
2324
|
-
if (navigation.confirmation_decisions.must_confirm.length > 0) {
|
|
2325
|
-
userInfo(` 必须确认: ${navigation.confirmation_decisions.must_confirm.map((item) => item.title_zh).join(" / ")}`);
|
|
2326
|
-
}
|
|
2327
|
-
userInfo(` 下一步: ${navigation.work_package?.goal_zh ?? navigation.recommended_prompt_zh}`);
|
|
2328
|
-
}
|
|
2329
|
-
catch (e) {
|
|
2330
|
-
userInfo(` ⚠ 导航摘要异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
2331
|
-
}
|
|
2332
|
-
}
|
|
2333
|
-
async function interactiveConfig(projectPath) {
|
|
2334
|
-
debug("CLI", "执行 interactiveConfig");
|
|
2335
|
-
if (!process.stdin.isTTY)
|
|
2336
|
-
return undefined;
|
|
2337
|
-
const readline = await import("node:readline");
|
|
2338
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
2339
|
-
const ask = (q) => new Promise((res) => rl.question(q, res));
|
|
2340
|
-
const name = await ask("项目名称: ") || "my-project";
|
|
2341
|
-
const product = await ask("产品类型 (saas/b2b-internal/b2c): ") || "default";
|
|
2342
|
-
const backendFramework = await ask("后端框架 (spring-boot): ") || "spring-boot";
|
|
2343
|
-
const frontendFramework = await ask("前端框架 (react): ") || "react";
|
|
2344
|
-
rl.close();
|
|
2345
|
-
const draft = {
|
|
2346
|
-
name,
|
|
2347
|
-
tech_stack: {
|
|
2348
|
-
backend: { lang: backendFramework === "go" ? "go" : "java", framework: backendFramework, version: "" },
|
|
2349
|
-
frontend: { lang: "typescript", framework: frontendFramework, version: "" },
|
|
2350
|
-
},
|
|
2351
|
-
product_profile: product,
|
|
2352
|
-
build_commands: {
|
|
2353
|
-
backend: blueprintBackendCommands(backendFramework),
|
|
2354
|
-
frontend: blueprintFrontendCommands(frontendFramework),
|
|
2355
|
-
},
|
|
2356
|
-
scope: { backend: ["src/"], frontend: ["src/"] },
|
|
2357
|
-
advisory_notes: [],
|
|
2358
|
-
confidence: "high",
|
|
2359
|
-
};
|
|
2360
|
-
const src = "confirmed";
|
|
2361
|
-
const evidence = {
|
|
2362
|
-
schema_version: 1,
|
|
2363
|
-
generated_at: new Date().toISOString(),
|
|
2364
|
-
mode: "interactive",
|
|
2365
|
-
project_root: projectPath,
|
|
2366
|
-
fields: {
|
|
2367
|
-
"name": { value: name, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2368
|
-
"tech_stack.backend": { value: draft.tech_stack.backend, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2369
|
-
"tech_stack.frontend": { value: draft.tech_stack.frontend, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2370
|
-
"build_commands.backend": { value: draft.build_commands.backend, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2371
|
-
"build_commands.frontend": { value: draft.build_commands.frontend, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2372
|
-
"product_profile": { value: product, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2373
|
-
"scope.backend": { value: draft.scope.backend, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2374
|
-
"scope.frontend": { value: draft.scope.frontend, confidence: "high", confidence_source: src, evidence: ["--interactive input"] },
|
|
2375
|
-
},
|
|
2376
|
-
};
|
|
2377
|
-
return { draft, evidence };
|
|
2378
|
-
}
|
|
2379
|
-
function cmdVersion() {
|
|
2380
|
-
debug("CLI", "执行 cmdVersion");
|
|
2381
|
-
// dist/bin/soloforge.js → dist/package.json (local) 或 package.json (global npm)
|
|
2382
|
-
const pkgPath = path.resolve(import.meta.dirname, "..", "package.json");
|
|
2383
|
-
try {
|
|
2384
|
-
const pkg = JSON.parse(fss.readFileSync(pkgPath, "utf-8"));
|
|
2385
|
-
userInfo("SoloForge v" + pkg.version);
|
|
2386
|
-
}
|
|
2387
|
-
catch {
|
|
2388
|
-
// 回退: 从 dist 同级目录查找
|
|
2389
|
-
const altPath = path.resolve(import.meta.dirname, "..", "..", "package.json");
|
|
2390
|
-
const pkg = JSON.parse(fss.readFileSync(altPath, "utf-8"));
|
|
2391
|
-
userInfo("SoloForge v" + pkg.version);
|
|
2392
|
-
}
|
|
2393
|
-
}
|
|
2394
|
-
async function cmdNext() {
|
|
2395
|
-
debug("CLI", "执行 cmdNext");
|
|
2396
|
-
const projectPath = resolveProjectPath();
|
|
2397
|
-
const isJson = args.includes("--json");
|
|
2398
|
-
const writeSnapshot = args.includes("--write-snapshot");
|
|
2399
|
-
const { planNextAction } = await import("../engine/next_action_planner.js");
|
|
2400
|
-
const plan = await planNextAction(projectPath);
|
|
2401
|
-
if (isJson) {
|
|
2402
|
-
// JSON 模式: 纯 JSON 到 stdout,无日志污染
|
|
2403
|
-
const wp = plan.work_package;
|
|
2404
|
-
const output = {
|
|
2405
|
-
project_stage: plan.project_stage,
|
|
2406
|
-
task_stage: plan.task_stage,
|
|
2407
|
-
confidence: plan.confidence,
|
|
2408
|
-
stage_evidence: plan.stage_evidence,
|
|
2409
|
-
blocking_reasons: plan.blocking_reasons,
|
|
2410
|
-
confirmation_decisions: plan.confirmation_decisions,
|
|
2411
|
-
warnings: plan.warnings,
|
|
2412
|
-
recommended_commands: plan.recommended_commands,
|
|
2413
|
-
recommended_prompt: plan.recommended_prompt_zh,
|
|
2414
|
-
project_knowledge_context: plan.project_knowledge_context,
|
|
2415
|
-
disallowed_next_actions: plan.disallowed_actions.map((da) => ({
|
|
2416
|
-
rule_id: da.rule_id,
|
|
2417
|
-
blocked_actions: da.blocked_actions,
|
|
2418
|
-
reason_zh: da.reason_zh,
|
|
2419
|
-
})),
|
|
2420
|
-
work_package: wp ? {
|
|
2421
|
-
id: wp.id,
|
|
2422
|
-
goal: wp.goal_zh,
|
|
2423
|
-
input_files: wp.input_files,
|
|
2424
|
-
must_read: wp.must_read,
|
|
2425
|
-
forbidden_changes: wp.forbidden_changes,
|
|
2426
|
-
expected_outputs: wp.expected_outputs,
|
|
2427
|
-
acceptance_commands: wp.acceptance_commands,
|
|
2428
|
-
user_confirmation_points: wp.user_confirmation_points,
|
|
2429
|
-
rollback_or_fallback: wp.rollback_or_fallback,
|
|
2430
|
-
} : null,
|
|
2431
|
-
};
|
|
2432
|
-
process.stdout.write(JSON.stringify(output, null, 2) + "\n");
|
|
2433
|
-
}
|
|
2434
|
-
else {
|
|
2435
|
-
// 人类可读输出
|
|
2436
|
-
userInfo(`\n项目阶段: ${plan.project_stage}`);
|
|
2437
|
-
if (plan.task_stage) {
|
|
2438
|
-
userInfo(`任务阶段: ${plan.task_stage}`);
|
|
2439
|
-
}
|
|
2440
|
-
else {
|
|
2441
|
-
userInfo("任务阶段: 无活跃任务");
|
|
2442
|
-
}
|
|
2443
|
-
userInfo(`置信度: ${plan.confidence}`);
|
|
2444
|
-
if (plan.stage_evidence.length > 0) {
|
|
2445
|
-
userInfo(`\n判断依据:`);
|
|
2446
|
-
for (const ev of plan.stage_evidence) {
|
|
2447
|
-
userInfo(` - ${ev}`);
|
|
2448
|
-
}
|
|
2449
|
-
}
|
|
2450
|
-
if (plan.warnings.length > 0) {
|
|
2451
|
-
userInfo(`\n提示:`);
|
|
2452
|
-
for (const warning of plan.warnings) {
|
|
2453
|
-
userInfo(` - [${warning.code}] ${warning.message_zh}`);
|
|
2454
|
-
}
|
|
2455
|
-
}
|
|
2456
|
-
userInfo(`\n确认分级:`);
|
|
2457
|
-
userInfo(` 必须确认: ${plan.confirmation_decisions.must_confirm.length}`);
|
|
2458
|
-
for (const item of plan.confirmation_decisions.must_confirm) {
|
|
2459
|
-
userInfo(` - ${item.title_zh}: ${item.reason_zh}`);
|
|
2460
|
-
if (item.command_hint)
|
|
2461
|
-
userInfo(` 命令: ${item.command_hint}`);
|
|
2462
|
-
userInfo(` 不确认影响: ${item.if_unconfirmed_zh}`);
|
|
2463
|
-
}
|
|
2464
|
-
userInfo(` 建议确认: ${plan.confirmation_decisions.should_confirm.length}`);
|
|
2465
|
-
for (const item of plan.confirmation_decisions.should_confirm) {
|
|
2466
|
-
userInfo(` - ${item.title_zh}: ${item.reason_zh}`);
|
|
2467
|
-
if (item.command_hint)
|
|
2468
|
-
userInfo(` 命令: ${item.command_hint}`);
|
|
2469
|
-
}
|
|
2470
|
-
userInfo(` 可自动处理: ${plan.confirmation_decisions.auto_resolvable.length}`);
|
|
2471
|
-
for (const item of plan.confirmation_decisions.auto_resolvable) {
|
|
2472
|
-
userInfo(` - ${item.title_zh}`);
|
|
2473
|
-
if (item.command_hint)
|
|
2474
|
-
userInfo(` 命令: ${item.command_hint}`);
|
|
2475
|
-
}
|
|
2476
|
-
userInfo(` 推荐处理: ${plan.confirmation_decisions.recommended_action}`);
|
|
2477
|
-
if (plan.project_knowledge_context && plan.project_knowledge_context.total > 0) {
|
|
2478
|
-
userInfo(`\n项目规则上下文:`);
|
|
2479
|
-
userInfo(` 项目知识: ${plan.project_knowledge_context.total} 条,hard_fail: ${plan.project_knowledge_context.hard_fail_count}`);
|
|
2480
|
-
if (plan.project_knowledge_context.selected.length > 0) {
|
|
2481
|
-
userInfo(" 下一步会优先参考:");
|
|
2482
|
-
for (const item of plan.project_knowledge_context.selected) {
|
|
2483
|
-
userInfo(` - ${item.name} (${item.rel_path}, ${item.enforcement ?? item.consumption})`);
|
|
2484
|
-
if (item.reason_zh)
|
|
2485
|
-
userInfo(` 原因: ${item.reason_zh}`);
|
|
2486
|
-
if (item.verification_command)
|
|
2487
|
-
userInfo(` 复验: ${item.verification_command}`);
|
|
2488
|
-
}
|
|
2489
|
-
}
|
|
2490
|
-
if (plan.project_knowledge_context.blocked && plan.project_knowledge_context.blocked.length > 0) {
|
|
2491
|
-
userInfo(" 必须先处理:");
|
|
2492
|
-
for (const item of plan.project_knowledge_context.blocked) {
|
|
2493
|
-
userInfo(` - ${item.name} (${item.rel_path})`);
|
|
2494
|
-
userInfo(` 原因: ${item.reason_zh}`);
|
|
2495
|
-
if (item.recovery)
|
|
2496
|
-
userInfo(` 恢复: ${item.recovery}`);
|
|
2497
|
-
}
|
|
2498
|
-
}
|
|
2499
|
-
}
|
|
2500
|
-
// 陈旧任务
|
|
2501
|
-
if (plan.stale_task?.is_stale) {
|
|
2502
|
-
userInfo(`\n⚠️ 检测到陈旧任务: ${plan.stale_task.reason_zh}`);
|
|
2503
|
-
userInfo(` 任务 ID: ${plan.stale_task.task_id}`);
|
|
2504
|
-
userInfo(` 建议操作: ${plan.stale_task.suggested_resolutions.join(" / ")}`);
|
|
2505
|
-
userInfo(` ⚠️ 不要绕过 SoloForge 状态直接操作`);
|
|
2506
|
-
}
|
|
2507
|
-
// 阻断项
|
|
2508
|
-
if (plan.blocking_reasons.length > 0) {
|
|
2509
|
-
userInfo(`\n阻断项:`);
|
|
2510
|
-
for (const r of plan.blocking_reasons) {
|
|
2511
|
-
userInfo(` - ${r}`);
|
|
2512
|
-
}
|
|
2513
|
-
}
|
|
2514
|
-
// 工作包
|
|
2515
|
-
if (plan.work_package) {
|
|
2516
|
-
const wp = plan.work_package;
|
|
2517
|
-
userInfo(`\n下一步: ${wp.goal_zh}`);
|
|
2518
|
-
userInfo(` 描述: ${wp.description_zh}`);
|
|
2519
|
-
if (wp.tool_name) {
|
|
2520
|
-
userInfo(` 工具: ${wp.tool_name}`);
|
|
2521
|
-
}
|
|
2522
|
-
if (wp.must_read.length > 0) {
|
|
2523
|
-
userInfo(` 必读文件:`);
|
|
2524
|
-
for (const f of wp.must_read)
|
|
2525
|
-
userInfo(` - ${f}`);
|
|
2526
|
-
}
|
|
2527
|
-
if (wp.forbidden_changes.length > 0) {
|
|
2528
|
-
userInfo(` 禁止操作:`);
|
|
2529
|
-
for (const f of wp.forbidden_changes)
|
|
2530
|
-
userInfo(` - ${f}`);
|
|
2531
|
-
}
|
|
2532
|
-
if (wp.expected_outputs.length > 0) {
|
|
2533
|
-
userInfo(` 预期产出:`);
|
|
2534
|
-
for (const e of wp.expected_outputs)
|
|
2535
|
-
userInfo(` - ${e}`);
|
|
2536
|
-
}
|
|
2537
|
-
if (wp.acceptance_commands.length > 0) {
|
|
2538
|
-
userInfo(` 验收命令:`);
|
|
2539
|
-
for (const c of wp.acceptance_commands)
|
|
2540
|
-
userInfo(` - ${c}`);
|
|
2541
|
-
}
|
|
2542
|
-
if (wp.user_confirmation_points.length > 0) {
|
|
2543
|
-
userInfo(` 工作包确认点(是否阻塞以上方确认分级为准):`);
|
|
2544
|
-
for (const u of wp.user_confirmation_points)
|
|
2545
|
-
userInfo(` - ${u}`);
|
|
2546
|
-
}
|
|
2547
|
-
if (wp.rollback_or_fallback.length > 0) {
|
|
2548
|
-
userInfo(` 失败回退:`);
|
|
2549
|
-
for (const r of wp.rollback_or_fallback)
|
|
2550
|
-
userInfo(` - ${r}`);
|
|
2551
|
-
}
|
|
2552
|
-
}
|
|
2553
|
-
// 推荐命令
|
|
2554
|
-
if (plan.recommended_commands.length > 0) {
|
|
2555
|
-
userInfo(`\n推荐命令:`);
|
|
2556
|
-
for (const c of plan.recommended_commands) {
|
|
2557
|
-
userInfo(` ${c}`);
|
|
2558
|
-
}
|
|
2559
|
-
}
|
|
2560
|
-
// 禁止动作
|
|
2561
|
-
if (plan.disallowed_actions.length > 0) {
|
|
2562
|
-
userInfo(`\n禁止动作:`);
|
|
2563
|
-
for (const da of plan.disallowed_actions) {
|
|
2564
|
-
userInfo(` [${da.rule_id}] ${da.blocked_actions.join(", ")}: ${da.reason_zh}`);
|
|
2565
|
-
}
|
|
2566
|
-
}
|
|
2567
|
-
// 推荐给 AI 的指令
|
|
2568
|
-
userInfo(`\n推荐指令: ${plan.recommended_prompt_zh}`);
|
|
2569
|
-
}
|
|
2570
|
-
// 写入快照(只在显式 --write-snapshot 时)
|
|
2571
|
-
if (writeSnapshot) {
|
|
2572
|
-
const snapshotPath = path.join(projectPath, ".soloforge", "navigation-snapshot.json");
|
|
2573
|
-
const snapshot = {
|
|
2574
|
-
plan_id: plan.plan_id,
|
|
2575
|
-
generated_at: plan.generated_at,
|
|
2576
|
-
project_stage: plan.project_stage,
|
|
2577
|
-
task_stage: plan.task_stage,
|
|
2578
|
-
current_task_id: plan.current_task_id,
|
|
2579
|
-
work_package: plan.work_package,
|
|
2580
|
-
};
|
|
2581
|
-
fss.mkdirSync(path.join(projectPath, ".soloforge"), { recursive: true });
|
|
2582
|
-
fss.writeFileSync(snapshotPath, JSON.stringify(snapshot, null, 2));
|
|
2583
|
-
if (!isJson) {
|
|
2584
|
-
userInfo(`\n导航快照已写入: ${snapshotPath}`);
|
|
2585
|
-
}
|
|
2586
|
-
}
|
|
2587
|
-
}
|
|
2588
|
-
async function cmdStage() {
|
|
2589
|
-
debug("CLI", "执行 cmdStage");
|
|
2590
|
-
const projectPath = resolveProjectPath();
|
|
2591
|
-
const explain = args.includes("--explain");
|
|
2592
|
-
const isJson = args.includes("--json");
|
|
2593
|
-
const { detectProjectStage, explainProjectStage } = await import("../engine/project_stage_detector.js");
|
|
2594
|
-
const { detectTaskStage, explainTaskStage } = await import("../engine/task_stage_detector.js");
|
|
2595
|
-
const projectStage = await detectProjectStage(projectPath);
|
|
2596
|
-
// 加载当前任务
|
|
2597
|
-
let taskStage = null;
|
|
2598
|
-
let taskId = null;
|
|
2599
|
-
try {
|
|
2600
|
-
const { TaskContextManager } = await import("../engine/task_context.js");
|
|
2601
|
-
const stateDir = path.join(projectPath, ".soloforge", "state");
|
|
2602
|
-
if (fss.existsSync(stateDir)) {
|
|
2603
|
-
const manager = new TaskContextManager(stateDir);
|
|
2604
|
-
const ctx = await manager.getCurrentTask();
|
|
2605
|
-
if (ctx) {
|
|
2606
|
-
taskStage = detectTaskStage(ctx);
|
|
2607
|
-
taskId = ctx.task_id;
|
|
2608
|
-
}
|
|
2609
|
-
}
|
|
2610
|
-
}
|
|
2611
|
-
catch { }
|
|
2612
|
-
if (isJson) {
|
|
2613
|
-
const projExplanation = explainProjectStage(projectStage);
|
|
2614
|
-
process.stdout.write(JSON.stringify({
|
|
2615
|
-
project: projExplanation,
|
|
2616
|
-
task: taskStage ? explainTaskStage(taskStage) : null,
|
|
2617
|
-
task_id: taskId,
|
|
2618
|
-
}, null, 2) + "\n");
|
|
2619
|
-
return;
|
|
2620
|
-
}
|
|
2621
|
-
userInfo(`\n项目阶段: ${projectStage}`);
|
|
2622
|
-
if (explain) {
|
|
2623
|
-
const projExplanation = explainProjectStage(projectStage);
|
|
2624
|
-
userInfo(` ${projExplanation.description_zh}`);
|
|
2625
|
-
userInfo(` 必要条件: ${projExplanation.required_evidence.join(", ") || "无"}`);
|
|
2626
|
-
userInfo(` 下一步可能: ${projExplanation.next_possible_stages.join(", ")}`);
|
|
2627
|
-
}
|
|
2628
|
-
if (taskStage) {
|
|
2629
|
-
userInfo(`\n任务阶段: ${taskStage} (${taskId ?? "unknown"})`);
|
|
2630
|
-
if (explain) {
|
|
2631
|
-
const taskExplanation = explainTaskStage(taskStage);
|
|
2632
|
-
userInfo(` ${taskExplanation.description_zh}`);
|
|
2633
|
-
userInfo(` 必要条件: ${taskExplanation.required_evidence.join(", ")}`);
|
|
2634
|
-
userInfo(` 下一步可能: ${taskExplanation.next_possible_stages.join(", ")}`);
|
|
2635
|
-
}
|
|
2636
|
-
}
|
|
2637
|
-
else {
|
|
2638
|
-
userInfo("\n当前无活跃任务");
|
|
2639
|
-
}
|
|
2640
|
-
}
|
|
2641
|
-
async function cmdCleanup() {
|
|
2642
|
-
debug("CLI", "执行 cmdCleanup");
|
|
2643
|
-
const dryRun = !args.includes("--apply");
|
|
2644
|
-
const staleOnly = args.includes("--stale");
|
|
2645
|
-
const projectPath = process.cwd();
|
|
2646
|
-
const stateDir = path.join(projectPath, ".soloforge", "state");
|
|
2647
|
-
let hasError = false;
|
|
2648
|
-
userInfo(`SoloForge 清理: ${projectPath}`);
|
|
2649
|
-
userInfo(` 模式: ${dryRun ? "dry-run(仅评估)" : "⚠️ 实际清理"}`);
|
|
2650
|
-
if (staleOnly) {
|
|
2651
|
-
try {
|
|
2652
|
-
const { detectStaleCurrentTask, archiveStaleCurrentPointer } = await import("../engine/stale_current_task_detector.js");
|
|
2653
|
-
const stale = await detectStaleCurrentTask(stateDir);
|
|
2654
|
-
userInfo("");
|
|
2655
|
-
userInfo(" 陈旧 current-task 检测:");
|
|
2656
|
-
if (!stale.is_stale || !stale.task_id) {
|
|
2657
|
-
userInfo(" 未发现陈旧指针");
|
|
2658
|
-
return;
|
|
2659
|
-
}
|
|
2660
|
-
userInfo(` 陈旧任务: ${stale.task_id}`);
|
|
2661
|
-
userInfo(` 原因: ${stale.reason_zh}`);
|
|
2662
|
-
if (dryRun) {
|
|
2663
|
-
userInfo(" 处理: dry-run,仅提示;使用 --apply 归档指针");
|
|
2664
|
-
return;
|
|
2665
|
-
}
|
|
2666
|
-
const archived = await archiveStaleCurrentPointer(stateDir, stale.task_id);
|
|
2667
|
-
if (!archived) {
|
|
2668
|
-
userError(" ❌ 陈旧指针归档失败");
|
|
2669
|
-
process.exit(1);
|
|
2670
|
-
}
|
|
2671
|
-
userInfo(" 处理: 已归档 current-task 指针,任务文件未删除");
|
|
2672
|
-
return;
|
|
2673
|
-
}
|
|
2674
|
-
catch (e) {
|
|
2675
|
-
userError(` ❌ 陈旧 current-task 检测失败: ${e.message}`);
|
|
2676
|
-
process.exit(1);
|
|
2677
|
-
}
|
|
2678
|
-
}
|
|
2679
|
-
// 收集所有 evidence 引用来源:task-*.json 中的 evidence 文件名 / evidence id
|
|
2680
|
-
const referencedEvidenceIds = new Set();
|
|
2681
|
-
// 扫描 task context 文件中的 evidence 引用
|
|
2682
|
-
if (fss.existsSync(stateDir)) {
|
|
2683
|
-
for (const f of fss.readdirSync(stateDir).filter((f) => f.startsWith("task-") && f.endsWith(".json"))) {
|
|
2684
|
-
try {
|
|
2685
|
-
const content = fss.readFileSync(path.join(stateDir, f), "utf-8");
|
|
2686
|
-
const ctx = JSON.parse(content);
|
|
2687
|
-
// 从 verification_evidence 收集引用
|
|
2688
|
-
if (ctx.verification_evidence && typeof ctx.verification_evidence === "object") {
|
|
2689
|
-
for (const [key, val] of Object.entries(ctx.verification_evidence)) {
|
|
2690
|
-
if (typeof val === "string")
|
|
2691
|
-
referencedEvidenceIds.add(val);
|
|
2692
|
-
referencedEvidenceIds.add(key);
|
|
2693
|
-
}
|
|
2694
|
-
}
|
|
2695
|
-
// 从 artifacts 的 evidence_refs 收集
|
|
2696
|
-
if (Array.isArray(ctx.output_artifacts)) {
|
|
2697
|
-
for (const art of ctx.output_artifacts) {
|
|
2698
|
-
if (art.evidence_refs && Array.isArray(art.evidence_refs)) {
|
|
2699
|
-
for (const ref of art.evidence_refs)
|
|
2700
|
-
referencedEvidenceIds.add(ref);
|
|
2701
|
-
}
|
|
2702
|
-
if (art.artifact_id)
|
|
2703
|
-
referencedEvidenceIds.add(art.artifact_id);
|
|
2704
|
-
}
|
|
2705
|
-
}
|
|
2706
|
-
// 从 delivery_report 收集
|
|
2707
|
-
if (ctx.delivery_report && typeof ctx.delivery_report === "object") {
|
|
2708
|
-
const dr = ctx.delivery_report;
|
|
2709
|
-
if (dr.evidence_refs && Array.isArray(dr.evidence_refs)) {
|
|
2710
|
-
for (const ref of dr.evidence_refs)
|
|
2711
|
-
referencedEvidenceIds.add(ref);
|
|
2712
|
-
}
|
|
2713
|
-
}
|
|
2714
|
-
// 从 governance_report 收集
|
|
2715
|
-
if (ctx.governance_report && typeof ctx.governance_report === "string") {
|
|
2716
|
-
referencedEvidenceIds.add(ctx.governance_report);
|
|
2717
|
-
}
|
|
2718
|
-
}
|
|
2719
|
-
catch {
|
|
2720
|
-
// 跳过不可解析文件
|
|
2721
|
-
}
|
|
2722
|
-
}
|
|
2723
|
-
}
|
|
2724
|
-
// 1. TaskContext 清理(使用 retention_policy)
|
|
2725
|
-
if (fss.existsSync(stateDir)) {
|
|
2726
|
-
try {
|
|
2727
|
-
const { TaskContextManager } = await import("../engine/task_context.js");
|
|
2728
|
-
const mgr = new TaskContextManager(stateDir);
|
|
2729
|
-
const result = await mgr.cleanup(dryRun);
|
|
2730
|
-
userInfo("");
|
|
2731
|
-
userInfo(" TaskContext 清理:");
|
|
2732
|
-
userInfo(` 已清理: ${result.removed} 条`);
|
|
2733
|
-
userInfo(` 受保护(被引用不可删除): ${result.protected} 条`);
|
|
2734
|
-
userInfo(` 禁止内容检出: ${result.forbidden_content_hits.length > 0 ? result.forbidden_content_hits.join("; ") : "无"}`);
|
|
2735
|
-
userInfo(` dry_run: ${result.dry_run}`);
|
|
2736
|
-
if (result.forbidden_content_hits.length > 0) {
|
|
2737
|
-
userError(` ❌ TaskContext 包含禁止内容,清理中止`);
|
|
2738
|
-
hasError = true;
|
|
2739
|
-
}
|
|
2740
|
-
}
|
|
2741
|
-
catch (e) {
|
|
2742
|
-
userError(` ❌ TaskContext 清理失败: ${e.message}`);
|
|
2743
|
-
process.exit(1);
|
|
2744
|
-
}
|
|
2745
|
-
}
|
|
2746
|
-
else {
|
|
2747
|
-
userInfo(" TaskContext: 状态目录不存在,跳过");
|
|
2748
|
-
}
|
|
2749
|
-
// 2. Evidence 文件清理(真实引用扫描)
|
|
2750
|
-
const evidenceDir = path.join(projectPath, ".soloforge");
|
|
2751
|
-
if (fss.existsSync(evidenceDir)) {
|
|
2752
|
-
try {
|
|
2753
|
-
const { evaluateCleanup, checkForbiddenContent } = await import("../engine/retention_policy.js");
|
|
2754
|
-
const evidenceFiles = fss.readdirSync(evidenceDir)
|
|
2755
|
-
.filter((f) => f.endsWith(".json") && !f.startsWith("config."))
|
|
2756
|
-
.map((f) => {
|
|
2757
|
-
const fp = path.join(evidenceDir, f);
|
|
2758
|
-
const stat = fss.statSync(fp);
|
|
2759
|
-
const ageDays = Math.max(0, (Date.now() - stat.mtimeMs) / (24 * 60 * 60 * 1000));
|
|
2760
|
-
const content = fss.readFileSync(fp, "utf-8");
|
|
2761
|
-
const forbiddenHits = checkForbiddenContent("evidence", content);
|
|
2762
|
-
// 真实引用检查: evidence 文件名或内容中的 id 出现在引用集合中
|
|
2763
|
-
const isReferenced = referencedEvidenceIds.has(f) || referencedEvidenceIds.has(f.replace(/\.json$/, ""));
|
|
2764
|
-
return { name: f, age_days: ageDays, is_referenced: isReferenced, forbidden: forbiddenHits };
|
|
2765
|
-
});
|
|
2766
|
-
const records = evidenceFiles.map(e => ({ id: e.name, age_days: e.age_days, is_referenced: e.is_referenced }));
|
|
2767
|
-
const result = evaluateCleanup("evidence", records, dryRun);
|
|
2768
|
-
userInfo("");
|
|
2769
|
-
userInfo(" Evidence 清理:");
|
|
2770
|
-
userInfo(` 总文件: ${result.total_records}`);
|
|
2771
|
-
userInfo(` 可清理: ${result.eligible_for_cleanup}`);
|
|
2772
|
-
userInfo(` 受保护: ${result.protected_records}`);
|
|
2773
|
-
userInfo(` dry_run: ${result.dry_run}`);
|
|
2774
|
-
if (result.cleanup_candidates.length > 0) {
|
|
2775
|
-
userInfo(` 清理候选: ${result.cleanup_candidates.join(", ")}`);
|
|
2776
|
-
}
|
|
2777
|
-
const forbiddenFiles = evidenceFiles.filter(e => e.forbidden.length > 0);
|
|
2778
|
-
if (forbiddenFiles.length > 0) {
|
|
2779
|
-
userInfo(" ❌ 禁止内容检出:");
|
|
2780
|
-
for (const f of forbiddenFiles) {
|
|
2781
|
-
userInfo(` ${f.name}: ${f.forbidden.join(", ")}`);
|
|
2782
|
-
}
|
|
2783
|
-
hasError = true;
|
|
2784
|
-
}
|
|
2785
|
-
}
|
|
2786
|
-
catch (e) {
|
|
2787
|
-
userError(` ❌ Evidence 清理失败: ${e.message}`);
|
|
2788
|
-
process.exit(1);
|
|
2789
|
-
}
|
|
2790
|
-
}
|
|
2791
|
-
// 3. 列出所有保留策略
|
|
2792
|
-
try {
|
|
2793
|
-
const { listRetentionPolicies } = await import("../engine/retention_policy.js");
|
|
2794
|
-
const policies = listRetentionPolicies();
|
|
2795
|
-
userInfo("");
|
|
2796
|
-
userInfo(" 保留策略:");
|
|
2797
|
-
for (const p of policies) {
|
|
2798
|
-
userInfo(` ${p.policy_id}: ${p.record_type}, 最大 ${p.max_age_days} 天 / ${p.max_count} 条, dry_run_default=${p.dry_run_default}`);
|
|
2799
|
-
}
|
|
2800
|
-
}
|
|
2801
|
-
catch (e) {
|
|
2802
|
-
userError(` ❌ 保留策略加载失败: ${e.message}`);
|
|
2803
|
-
process.exit(1);
|
|
2804
|
-
}
|
|
2805
|
-
if (hasError)
|
|
2806
|
-
process.exit(1);
|
|
2807
|
-
}
|
|
2808
|
-
main().catch((e) => { internalWarn("CLI", "启动失败:", e); process.exit(1); });
|
|
2809
|
-
function getArgValue(flag) {
|
|
2810
|
-
// 支持 --flag=value 格式
|
|
2811
|
-
const eqPrefix = flag + "=";
|
|
2812
|
-
const eqIdx = args.findIndex((a) => a.startsWith(eqPrefix));
|
|
2813
|
-
if (eqIdx !== -1) {
|
|
2814
|
-
return args[eqIdx].slice(eqPrefix.length) || undefined;
|
|
2815
|
-
}
|
|
2816
|
-
const idx = args.indexOf(flag);
|
|
2817
|
-
if (idx === -1 || idx + 1 >= args.length)
|
|
2818
|
-
return undefined;
|
|
2819
|
-
const result = args[idx + 1];
|
|
2820
|
-
if (result.startsWith("--"))
|
|
2821
|
-
return undefined;
|
|
2822
|
-
return result;
|
|
2823
|
-
}
|
|
2824
|
-
async function cmdAuditTemplateVisibility() {
|
|
2825
|
-
const projectPath = process.env.SOLOFORGE_PROJECT ?? process.cwd();
|
|
2826
|
-
const { auditStandardAssetCoverage } = await import("../engine/standard_asset_coverage.js");
|
|
2827
|
-
const { listBuiltinConsumableAssets } = await import("../engine/consumable_asset_registry.js");
|
|
2828
|
-
const { listTemplateAssetContracts, auditContractCoverage } = await import("../engine/template_asset_contract_registry.js");
|
|
2829
|
-
const { userInfo, userJson } = await import("../engine/logger.js");
|
|
2830
|
-
// 使用权威合同注册表作为单一数据源
|
|
2831
|
-
const contracts = listTemplateAssetContracts();
|
|
2832
|
-
const registeredAssets = listBuiltinConsumableAssets();
|
|
2833
|
-
const consumablePaths = new Set(registeredAssets.map((a) => a.path));
|
|
2834
|
-
const ownerMap = new Map(contracts.map((c) => [c.path, c.owner_mechanism_id]));
|
|
2835
|
-
const consumerMap = new Map(contracts.map((c) => [c.path, [c.mainline_consumer, c.validation_entrypoint].filter(Boolean)]));
|
|
2836
|
-
const visibilityMap = new Map(contracts.map((c) => [c.path, c.asset_visibility]));
|
|
2837
|
-
// 运行覆盖审计(使用真实合同数据)
|
|
2838
|
-
const report = auditStandardAssetCoverage(projectPath, consumablePaths, ownerMap, consumerMap, visibilityMap);
|
|
2839
|
-
// 合同覆盖统计
|
|
2840
|
-
const coverageReport = auditContractCoverage(projectPath);
|
|
2841
|
-
// 可见性统计(从权威合同直接计算)
|
|
2842
|
-
const internalCount = contracts.filter((c) => c.asset_visibility === "soloforge_internal" || c.asset_visibility === "scaffold_only").length;
|
|
2843
|
-
const userVisibleCount = contracts.filter((c) => c.user_visible).length;
|
|
2844
|
-
// 输出报告
|
|
2845
|
-
const isJson = args.includes("--json");
|
|
2846
|
-
const result = {
|
|
2847
|
-
total_assets: report.total_assets,
|
|
2848
|
-
registered_contracts: coverageReport.total_contracts,
|
|
2849
|
-
contract_covered: coverageReport.contract_covered,
|
|
2850
|
-
uncovered_assets: coverageReport.uncovered,
|
|
2851
|
-
user_visible_count: userVisibleCount,
|
|
2852
|
-
internal_count: internalCount,
|
|
2853
|
-
unknown_visibility: coverageReport.visibility_unknown,
|
|
2854
|
-
conflict_count: 0,
|
|
2855
|
-
missing_bearer: report.missing_standard_bearer,
|
|
2856
|
-
missing_revalidation: report.missing_revalidation,
|
|
2857
|
-
missing_consumer: report.missing_consumer,
|
|
2858
|
-
missing_owner: report.missing_owner,
|
|
2859
|
-
unregistered: report.unregistered_assets,
|
|
2860
|
-
consumption_evidence_verified: coverageReport.consumption_evidence_verified,
|
|
2861
|
-
consumption_evidence_failures: coverageReport.consumption_evidence_failures,
|
|
2862
|
-
};
|
|
2863
|
-
if (isJson) {
|
|
2864
|
-
userJson(JSON.stringify(result, null, 2));
|
|
2865
|
-
}
|
|
2866
|
-
else {
|
|
2867
|
-
userInfo("═══ 模板资产可见性审计报告 ═══");
|
|
2868
|
-
userInfo(`总资产数: ${report.total_assets}`);
|
|
2869
|
-
userInfo(`注册合同数: ${coverageReport.total_contracts}(包含非文件运行时资产)`);
|
|
2870
|
-
userInfo(`合同覆盖: ${coverageReport.contract_covered}`);
|
|
2871
|
-
userInfo(`未覆盖: ${coverageReport.uncovered}`);
|
|
2872
|
-
userInfo(`用户可见: ${userVisibleCount}`);
|
|
2873
|
-
userInfo(`内部资产: ${internalCount}`);
|
|
2874
|
-
userInfo(`未知可见性: ${coverageReport.visibility_unknown}`);
|
|
2875
|
-
userInfo(`缺标准承载: ${report.missing_standard_bearer}`);
|
|
2876
|
-
userInfo(`缺复验入口: ${report.missing_revalidation}`);
|
|
2877
|
-
userInfo(`缺消费者: ${report.missing_consumer}`);
|
|
2878
|
-
userInfo(`缺 owner: ${report.missing_owner}`);
|
|
2879
|
-
userInfo(`未注册: ${report.unregistered_assets}`);
|
|
2880
|
-
userInfo(`消费证据验证: ${coverageReport.consumption_evidence_verified ? "通过" : "失败"}`);
|
|
2881
|
-
for (const failure of coverageReport.consumption_evidence_failures) {
|
|
2882
|
-
userInfo(` - ${failure}`);
|
|
2883
|
-
}
|
|
2884
|
-
}
|
|
2885
|
-
}
|
|
2886
|
-
async function cmdAuditProjectKnowledge() {
|
|
2887
|
-
const projectPathArg = getArgValue("--project-path");
|
|
2888
|
-
const projectPath = projectPathArg ? path.resolve(projectPathArg) : (process.env.SOLOFORGE_PROJECT ?? process.cwd());
|
|
2889
|
-
const { auditProjectKnowledge } = await import("../engine/project_knowledge_contract.js");
|
|
2890
|
-
const { userInfo, userJson } = await import("../engine/logger.js");
|
|
2891
|
-
const isJson = args.includes("--json");
|
|
2892
|
-
const { config } = await resolveProjectConfig(projectPath, { quiet: isJson });
|
|
2893
|
-
const report = auditProjectKnowledge(projectPath, config);
|
|
2894
|
-
if (isJson) {
|
|
2895
|
-
userJson(JSON.stringify(report, null, 2));
|
|
2896
|
-
return;
|
|
2897
|
-
}
|
|
2898
|
-
userInfo(`用户项目知识审计: ${projectPath}`);
|
|
2899
|
-
userInfo(` 总数: ${report.total}`);
|
|
2900
|
-
userInfo(` 用户自建: ${report.user_authored}`);
|
|
2901
|
-
userInfo(` 内置同步: ${report.builtin_synced}`);
|
|
2902
|
-
userInfo(` 用户修改内置: ${report.user_modified_builtin}`);
|
|
2903
|
-
userInfo(` 冲突: ${report.conflict}`);
|
|
2904
|
-
userInfo(` hard_rule: ${report.hard_rule}`);
|
|
2905
|
-
userInfo(` injectable: ${report.injectable}`);
|
|
2906
|
-
userInfo(` index_only: ${report.index_only}`);
|
|
2907
|
-
userInfo(` hard_fail: ${report.hard_fail_count}`);
|
|
2908
|
-
userInfo(` warning: ${report.warning_count}`);
|
|
2909
|
-
for (const asset of report.assets) {
|
|
2910
|
-
userInfo(` - ${asset.rel_path} (${asset.identity}/${asset.consumption})`);
|
|
2911
|
-
userInfo(` 创建: ${asset.evidence.created_by};索引: ${asset.evidence.indexed_by}`);
|
|
2912
|
-
if (asset.lifecycle_stages.length > 0)
|
|
2913
|
-
userInfo(` 阶段: ${asset.lifecycle_stages.join(", ")}`);
|
|
2914
|
-
if (asset.path_patterns.length > 0)
|
|
2915
|
-
userInfo(` 路径: ${asset.path_patterns.join(", ")}`);
|
|
2916
|
-
if (asset.traceability_ids.length > 0)
|
|
2917
|
-
userInfo(` 追踪: ${asset.traceability_ids.join(", ")}`);
|
|
2918
|
-
if (asset.verification_commands.length > 0)
|
|
2919
|
-
userInfo(` 复验: ${asset.verification_commands.join(" / ")}`);
|
|
2920
|
-
if (asset.evidence.last_consumed_at) {
|
|
2921
|
-
userInfo(` 最近消费: ${asset.evidence.last_consumption_consumer}/${asset.evidence.last_consumption_action} ${asset.evidence.last_consumed_task} @ ${asset.evidence.last_consumed_at}`);
|
|
2922
|
-
}
|
|
2923
|
-
for (const finding of asset.findings) {
|
|
2924
|
-
const mark = finding.severity === "hard_fail" ? "❌" : finding.severity === "warning" ? "⚠️" : "ℹ️";
|
|
2925
|
-
userInfo(` ${mark} [${finding.code}] ${finding.message_zh}`);
|
|
2926
|
-
}
|
|
2927
|
-
}
|
|
2928
|
-
if (report.recent_consumption.length > 0) {
|
|
2929
|
-
userInfo(" 最近消费证据:");
|
|
2930
|
-
for (const item of report.recent_consumption.slice(0, 10)) {
|
|
2931
|
-
userInfo(` - ${item.rel_path ?? item.asset_id}: ${item.consumer}/${item.action ?? "unknown"} ${item.lifecycle_stage ?? "unknown_stage"} ${item.task_id_or_route} ${item.decision ?? ""}`);
|
|
2932
|
-
}
|
|
2933
|
-
}
|
|
2934
|
-
if (report.recommended_next_steps.length > 0) {
|
|
2935
|
-
userInfo(" 下一步:");
|
|
2936
|
-
for (const step of report.recommended_next_steps)
|
|
2937
|
-
userInfo(` - ${step}`);
|
|
2938
|
-
}
|
|
2939
|
-
}
|
|
250
|
+
main().catch((err) => {
|
|
251
|
+
console.error("Fatal:", err);
|
|
252
|
+
process.exit(EXIT.GENERAL);
|
|
253
|
+
});
|
|
2940
254
|
//# sourceMappingURL=soloforge.js.map
|