soloforge 1.2.19 → 1.3.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/README.md +140 -3
- package/dist/adapters/claude_code/claude_md.d.ts +1 -2
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js +47 -4
- 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 -1
- package/dist/adapters/claude_code/hooks.js.map +1 -1
- package/dist/adapters/claude_code/server.js +4 -3
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +255 -1
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +981 -7
- 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 +3 -2
- package/dist/adapters/codex/codex_config.js.map +1 -1
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
- package/dist/adapters/codex/codex_rules.js +2 -1
- package/dist/adapters/codex/codex_rules.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +2 -1
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/adapters/trae/trae_config.d.ts +1 -6
- package/dist/adapters/trae/trae_config.d.ts.map +1 -1
- package/dist/adapters/trae/trae_config.js +3 -2
- package/dist/adapters/trae/trae_config.js.map +1 -1
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
- package/dist/adapters/trae/trae_rules.js +2 -1
- package/dist/adapters/trae/trae_rules.js.map +1 -1
- package/dist/bin/config_commands.d.ts.map +1 -1
- package/dist/bin/config_commands.js +34 -33
- package/dist/bin/config_commands.js.map +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +1110 -157
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/adapter_prompt_contract.d.ts +60 -0
- package/dist/engine/adapter_prompt_contract.d.ts.map +1 -0
- package/dist/engine/adapter_prompt_contract.js +163 -0
- package/dist/engine/adapter_prompt_contract.js.map +1 -0
- package/dist/engine/architecture_design_contract.d.ts +49 -0
- package/dist/engine/architecture_design_contract.d.ts.map +1 -0
- package/dist/engine/architecture_design_contract.js +169 -0
- package/dist/engine/architecture_design_contract.js.map +1 -0
- package/dist/engine/artifact_contract_registry.d.ts.map +1 -1
- package/dist/engine/artifact_contract_registry.js +7 -14
- package/dist/engine/artifact_contract_registry.js.map +1 -1
- package/dist/engine/{batch1_manifest.d.ts → asset_manifest.d.ts} +8 -8
- package/dist/engine/asset_manifest.d.ts.map +1 -0
- package/dist/engine/{batch1_manifest.js → asset_manifest.js} +52 -9
- package/dist/engine/asset_manifest.js.map +1 -0
- package/dist/engine/audit_pool.d.ts.map +1 -1
- package/dist/engine/audit_pool.js +6 -4
- package/dist/engine/audit_pool.js.map +1 -1
- package/dist/engine/audit_sampler.d.ts.map +1 -1
- package/dist/engine/audit_sampler.js +2 -1
- package/dist/engine/audit_sampler.js.map +1 -1
- package/dist/engine/audit_verifier.d.ts.map +1 -1
- package/dist/engine/audit_verifier.js +5 -4
- package/dist/engine/audit_verifier.js.map +1 -1
- package/dist/engine/brainstorm_contract.d.ts +46 -0
- package/dist/engine/brainstorm_contract.d.ts.map +1 -0
- package/dist/engine/brainstorm_contract.js +136 -0
- package/dist/engine/brainstorm_contract.js.map +1 -0
- package/dist/engine/capability_action_advisor.d.ts.map +1 -1
- package/dist/engine/capability_action_advisor.js +8 -7
- package/dist/engine/capability_action_advisor.js.map +1 -1
- package/dist/engine/capability_registry.d.ts.map +1 -1
- package/dist/engine/capability_registry.js +0 -7
- package/dist/engine/capability_registry.js.map +1 -1
- package/dist/engine/capability_state_store.d.ts.map +1 -1
- package/dist/engine/capability_state_store.js +7 -6
- package/dist/engine/capability_state_store.js.map +1 -1
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js +4 -3
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/chinese_semantic_priority.d.ts +62 -0
- package/dist/engine/chinese_semantic_priority.d.ts.map +1 -0
- package/dist/engine/chinese_semantic_priority.js +153 -0
- package/dist/engine/chinese_semantic_priority.js.map +1 -0
- package/dist/engine/coding_readiness_gate.d.ts +46 -0
- package/dist/engine/coding_readiness_gate.d.ts.map +1 -0
- package/dist/engine/coding_readiness_gate.js +175 -0
- package/dist/engine/coding_readiness_gate.js.map +1 -0
- package/dist/engine/cognitive_anchor.d.ts.map +1 -1
- package/dist/engine/cognitive_anchor.js +7 -6
- package/dist/engine/cognitive_anchor.js.map +1 -1
- package/dist/engine/command_execution_contract.d.ts.map +1 -1
- package/dist/engine/command_execution_contract.js +13 -12
- package/dist/engine/command_execution_contract.js.map +1 -1
- package/dist/engine/confidence_scorer.d.ts.map +1 -1
- package/dist/engine/confidence_scorer.js +2 -1
- package/dist/engine/confidence_scorer.js.map +1 -1
- package/dist/engine/config_precedence_contract.d.ts.map +1 -1
- package/dist/engine/config_precedence_contract.js +9 -8
- package/dist/engine/config_precedence_contract.js.map +1 -1
- package/dist/engine/conflict_gate.d.ts.map +1 -1
- package/dist/engine/conflict_gate.js +4 -3
- package/dist/engine/conflict_gate.js.map +1 -1
- package/dist/engine/consumable_asset_registry.d.ts +4 -0
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
- package/dist/engine/consumable_asset_registry.js +307 -0
- package/dist/engine/consumable_asset_registry.js.map +1 -1
- package/dist/engine/consumption_trace_store.d.ts +50 -0
- package/dist/engine/consumption_trace_store.d.ts.map +1 -0
- package/dist/engine/consumption_trace_store.js +84 -0
- package/dist/engine/consumption_trace_store.js.map +1 -0
- package/dist/engine/contract_guard.d.ts.map +1 -1
- package/dist/engine/contract_guard.js +7 -6
- package/dist/engine/contract_guard.js.map +1 -1
- package/dist/engine/contract_registry.d.ts +113 -0
- package/dist/engine/contract_registry.d.ts.map +1 -0
- package/dist/engine/contract_registry.js +1632 -0
- package/dist/engine/contract_registry.js.map +1 -0
- package/dist/engine/contract_state_store.d.ts +67 -0
- package/dist/engine/contract_state_store.d.ts.map +1 -0
- package/dist/engine/contract_state_store.js +167 -0
- package/dist/engine/contract_state_store.js.map +1 -0
- package/dist/engine/convention_detector.d.ts.map +1 -1
- package/dist/engine/convention_detector.js +4 -3
- package/dist/engine/convention_detector.js.map +1 -1
- package/dist/engine/core_engineering_principles.d.ts.map +1 -1
- package/dist/engine/core_engineering_principles.js +4 -14
- package/dist/engine/core_engineering_principles.js.map +1 -1
- package/dist/engine/core_experience_principle.d.ts +194 -0
- package/dist/engine/core_experience_principle.d.ts.map +1 -0
- package/dist/engine/core_experience_principle.js +349 -0
- package/dist/engine/core_experience_principle.js.map +1 -0
- package/dist/engine/debt_reporter.d.ts.map +1 -1
- package/dist/engine/debt_reporter.js +3 -2
- package/dist/engine/debt_reporter.js.map +1 -1
- package/dist/engine/debt_tracker.d.ts.map +1 -1
- package/dist/engine/debt_tracker.js +8 -7
- package/dist/engine/debt_tracker.js.map +1 -1
- package/dist/engine/debug_log.d.ts +4 -1
- package/dist/engine/debug_log.d.ts.map +1 -1
- package/dist/engine/debug_log.js +4 -6
- package/dist/engine/debug_log.js.map +1 -1
- package/dist/engine/debugger.d.ts.map +1 -1
- package/dist/engine/debugger.js +33 -3
- package/dist/engine/debugger.js.map +1 -1
- package/dist/engine/decision_contract.d.ts.map +1 -1
- package/dist/engine/decision_contract.js +4 -3
- package/dist/engine/decision_contract.js.map +1 -1
- package/dist/engine/degradation.d.ts +58 -0
- package/dist/engine/degradation.d.ts.map +1 -0
- package/dist/engine/degradation.js +74 -0
- package/dist/engine/degradation.js.map +1 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +16 -15
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/delivery_readiness.d.ts +70 -0
- package/dist/engine/delivery_readiness.d.ts.map +1 -0
- package/dist/engine/delivery_readiness.js +198 -0
- package/dist/engine/delivery_readiness.js.map +1 -0
- package/dist/engine/dependency_scanner.d.ts.map +1 -1
- package/dist/engine/dependency_scanner.js +6 -5
- package/dist/engine/dependency_scanner.js.map +1 -1
- package/dist/engine/deprecated_contract.d.ts +21 -0
- package/dist/engine/deprecated_contract.d.ts.map +1 -0
- package/dist/engine/deprecated_contract.js +14 -0
- package/dist/engine/deprecated_contract.js.map +1 -0
- package/dist/engine/detail_discipline.d.ts +40 -0
- package/dist/engine/detail_discipline.d.ts.map +1 -0
- package/dist/engine/detail_discipline.js +107 -0
- package/dist/engine/detail_discipline.js.map +1 -0
- package/dist/engine/developer_sovereignty.d.ts.map +1 -1
- package/dist/engine/developer_sovereignty.js +6 -5
- package/dist/engine/developer_sovereignty.js.map +1 -1
- package/dist/engine/diagnostic_registry.d.ts +64 -0
- package/dist/engine/diagnostic_registry.d.ts.map +1 -0
- package/dist/engine/diagnostic_registry.js +176 -0
- package/dist/engine/diagnostic_registry.js.map +1 -0
- package/dist/engine/diff_ownership.d.ts.map +1 -1
- package/dist/engine/diff_ownership.js +9 -8
- package/dist/engine/diff_ownership.js.map +1 -1
- package/dist/engine/diff_ownership_store.d.ts.map +1 -1
- package/dist/engine/diff_ownership_store.js +8 -7
- package/dist/engine/diff_ownership_store.js.map +1 -1
- package/dist/engine/documentation_governance.d.ts +55 -0
- package/dist/engine/documentation_governance.d.ts.map +1 -0
- package/dist/engine/documentation_governance.js +249 -0
- package/dist/engine/documentation_governance.js.map +1 -0
- package/dist/engine/dual_layer_mechanism_registry.d.ts +6 -4
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.js +731 -11
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
- package/dist/engine/enforcement_guard.d.ts +84 -0
- package/dist/engine/enforcement_guard.d.ts.map +1 -0
- package/dist/engine/enforcement_guard.js +319 -0
- package/dist/engine/enforcement_guard.js.map +1 -0
- package/dist/engine/escape_report.d.ts.map +1 -1
- package/dist/engine/escape_report.js +4 -3
- package/dist/engine/escape_report.js.map +1 -1
- package/dist/engine/evolution_regression_gate.d.ts +42 -0
- package/dist/engine/evolution_regression_gate.d.ts.map +1 -0
- package/dist/engine/evolution_regression_gate.js +159 -0
- package/dist/engine/evolution_regression_gate.js.map +1 -0
- package/dist/engine/existing_system_analysis.d.ts +37 -0
- package/dist/engine/existing_system_analysis.d.ts.map +1 -0
- package/dist/engine/existing_system_analysis.js +151 -0
- package/dist/engine/existing_system_analysis.js.map +1 -0
- package/dist/engine/exploration.d.ts.map +1 -1
- package/dist/engine/exploration.js +7 -6
- package/dist/engine/exploration.js.map +1 -1
- package/dist/engine/extension_contract.d.ts +50 -0
- package/dist/engine/extension_contract.d.ts.map +1 -0
- package/dist/engine/extension_contract.js +158 -0
- package/dist/engine/extension_contract.js.map +1 -0
- package/dist/engine/extension_platform_contracts.d.ts +712 -0
- package/dist/engine/extension_platform_contracts.d.ts.map +1 -0
- package/dist/engine/extension_platform_contracts.js +42 -0
- package/dist/engine/extension_platform_contracts.js.map +1 -0
- package/dist/engine/extension_scenario_registry.d.ts +30 -0
- package/dist/engine/extension_scenario_registry.d.ts.map +1 -0
- package/dist/engine/extension_scenario_registry.js +976 -0
- package/dist/engine/extension_scenario_registry.js.map +1 -0
- package/dist/engine/failure_classifier.d.ts.map +1 -1
- package/dist/engine/failure_classifier.js +9 -8
- package/dist/engine/failure_classifier.js.map +1 -1
- package/dist/engine/failure_report.d.ts +74 -0
- package/dist/engine/failure_report.d.ts.map +1 -0
- package/dist/engine/failure_report.js +143 -0
- package/dist/engine/failure_report.js.map +1 -0
- package/dist/engine/feasibility_checker.d.ts.map +1 -1
- package/dist/engine/feasibility_checker.js +5 -4
- package/dist/engine/feasibility_checker.js.map +1 -1
- package/dist/engine/first_principles.d.ts +35 -0
- package/dist/engine/first_principles.d.ts.map +1 -0
- package/dist/engine/first_principles.js +128 -0
- package/dist/engine/first_principles.js.map +1 -0
- package/dist/engine/{batch1_scenario_registry.d.ts → foundation_scenario_registry.d.ts} +15 -15
- package/dist/engine/foundation_scenario_registry.d.ts.map +1 -0
- package/dist/engine/{batch1_scenario_registry.js → foundation_scenario_registry.js} +22 -25
- package/dist/engine/foundation_scenario_registry.js.map +1 -0
- package/dist/engine/{batch1_scenario_runners.d.ts → foundation_scenario_runners.d.ts} +1 -1
- package/dist/engine/foundation_scenario_runners.d.ts.map +1 -0
- package/dist/engine/{batch1_scenario_runners.js → foundation_scenario_runners.js} +8 -7
- package/dist/engine/foundation_scenario_runners.js.map +1 -0
- package/dist/engine/git_deps.d.ts.map +1 -1
- package/dist/engine/git_deps.js +2 -1
- package/dist/engine/git_deps.js.map +1 -1
- package/dist/engine/governance_report.d.ts +9 -1
- package/dist/engine/governance_report.d.ts.map +1 -1
- package/dist/engine/governance_report.js +25 -10
- package/dist/engine/governance_report.js.map +1 -1
- package/dist/engine/impact_analyzer.d.ts.map +1 -1
- package/dist/engine/impact_analyzer.js +5 -4
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
- package/dist/engine/implementation_roadmap_registry.js +237 -92
- package/dist/engine/implementation_roadmap_registry.js.map +1 -1
- package/dist/engine/input_material_contract_registry.d.ts.map +1 -1
- package/dist/engine/input_material_contract_registry.js +4 -3
- package/dist/engine/input_material_contract_registry.js.map +1 -1
- package/dist/engine/instruction_contract.d.ts +68 -0
- package/dist/engine/instruction_contract.d.ts.map +1 -0
- package/dist/engine/instruction_contract.js +123 -0
- package/dist/engine/instruction_contract.js.map +1 -0
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +339 -1
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/intent_router.d.ts +11 -2
- package/dist/engine/intent_router.d.ts.map +1 -1
- package/dist/engine/intent_router.js +121 -1
- package/dist/engine/intent_router.js.map +1 -1
- package/dist/engine/intent_signal_extractor.d.ts +3 -0
- package/dist/engine/intent_signal_extractor.d.ts.map +1 -1
- package/dist/engine/intent_signal_extractor.js +49 -0
- package/dist/engine/intent_signal_extractor.js.map +1 -1
- package/dist/engine/io_controller.d.ts.map +1 -1
- package/dist/engine/io_controller.js +8 -7
- package/dist/engine/io_controller.js.map +1 -1
- package/dist/engine/java_quality_guard.d.ts.map +1 -1
- package/dist/engine/java_quality_guard.js +5 -18
- package/dist/engine/java_quality_guard.js.map +1 -1
- package/dist/engine/job_manager.d.ts.map +1 -1
- package/dist/engine/job_manager.js +8 -7
- package/dist/engine/job_manager.js.map +1 -1
- package/dist/engine/knowledge_acceptance_registry.d.ts +35 -0
- package/dist/engine/knowledge_acceptance_registry.d.ts.map +1 -0
- package/dist/engine/knowledge_acceptance_registry.js +271 -0
- package/dist/engine/knowledge_acceptance_registry.js.map +1 -0
- package/dist/engine/knowledge_asset_audit.d.ts +65 -0
- package/dist/engine/knowledge_asset_audit.d.ts.map +1 -0
- package/dist/engine/knowledge_asset_audit.js +230 -0
- package/dist/engine/knowledge_asset_audit.js.map +1 -0
- package/dist/engine/knowledge_asset_consumer.d.ts +150 -0
- package/dist/engine/knowledge_asset_consumer.d.ts.map +1 -0
- package/dist/engine/knowledge_asset_consumer.js +279 -0
- package/dist/engine/knowledge_asset_consumer.js.map +1 -0
- package/dist/engine/knowledge_asset_generation_gate.d.ts +38 -0
- package/dist/engine/knowledge_asset_generation_gate.d.ts.map +1 -0
- package/dist/engine/knowledge_asset_generation_gate.js +131 -0
- package/dist/engine/knowledge_asset_generation_gate.js.map +1 -0
- package/dist/engine/knowledge_asset_migration.d.ts +117 -0
- package/dist/engine/knowledge_asset_migration.d.ts.map +1 -0
- package/dist/engine/knowledge_asset_migration.js +204 -0
- package/dist/engine/knowledge_asset_migration.js.map +1 -0
- package/dist/engine/knowledge_asset_schema.d.ts +97 -0
- package/dist/engine/knowledge_asset_schema.d.ts.map +1 -0
- package/dist/engine/knowledge_asset_schema.js +413 -0
- package/dist/engine/knowledge_asset_schema.js.map +1 -0
- package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
- package/dist/engine/knowledge_config_loader.js +5 -4
- package/dist/engine/knowledge_config_loader.js.map +1 -1
- package/dist/engine/knowledge_consumption_snapshot.d.ts +91 -0
- package/dist/engine/knowledge_consumption_snapshot.d.ts.map +1 -0
- package/dist/engine/knowledge_consumption_snapshot.js +113 -0
- package/dist/engine/knowledge_consumption_snapshot.js.map +1 -0
- package/dist/engine/knowledge_evolution.d.ts +82 -0
- package/dist/engine/knowledge_evolution.d.ts.map +1 -0
- package/dist/engine/knowledge_evolution.js +272 -0
- package/dist/engine/knowledge_evolution.js.map +1 -0
- package/dist/engine/knowledge_lifecycle.d.ts +83 -0
- package/dist/engine/knowledge_lifecycle.d.ts.map +1 -0
- package/dist/engine/knowledge_lifecycle.js +247 -0
- package/dist/engine/knowledge_lifecycle.js.map +1 -0
- package/dist/engine/knowledge_manager.d.ts.map +1 -1
- package/dist/engine/knowledge_manager.js +9 -8
- package/dist/engine/knowledge_manager.js.map +1 -1
- package/dist/engine/knowledge_scenario_registry.d.ts +21 -0
- package/dist/engine/knowledge_scenario_registry.d.ts.map +1 -0
- package/dist/engine/knowledge_scenario_registry.js +337 -0
- package/dist/engine/knowledge_scenario_registry.js.map +1 -0
- package/dist/engine/knowledge_sovereignty.d.ts.map +1 -1
- package/dist/engine/knowledge_sovereignty.js +5 -4
- package/dist/engine/knowledge_sovereignty.js.map +1 -1
- package/dist/engine/knowledge_template_contracts.d.ts +244 -0
- package/dist/engine/knowledge_template_contracts.d.ts.map +1 -0
- package/dist/engine/knowledge_template_contracts.js +26 -0
- package/dist/engine/knowledge_template_contracts.js.map +1 -0
- package/dist/engine/language_policy.d.ts +78 -0
- package/dist/engine/language_policy.d.ts.map +1 -0
- package/dist/engine/language_policy.js +139 -0
- package/dist/engine/language_policy.js.map +1 -0
- package/dist/engine/language_policy_contract.d.ts +52 -0
- package/dist/engine/language_policy_contract.d.ts.map +1 -0
- package/dist/engine/language_policy_contract.js +78 -0
- package/dist/engine/language_policy_contract.js.map +1 -0
- package/dist/engine/llm_gateway.d.ts.map +1 -1
- package/dist/engine/llm_gateway.js +10 -9
- package/dist/engine/llm_gateway.js.map +1 -1
- package/dist/engine/local_docker_acceptance.d.ts +94 -0
- package/dist/engine/local_docker_acceptance.d.ts.map +1 -0
- package/dist/engine/local_docker_acceptance.js +312 -0
- package/dist/engine/local_docker_acceptance.js.map +1 -0
- package/dist/engine/logger.d.ts +64 -0
- package/dist/engine/logger.d.ts.map +1 -0
- package/dist/engine/logger.js +115 -0
- package/dist/engine/logger.js.map +1 -0
- package/dist/engine/main_path_integration_contract.d.ts.map +1 -1
- package/dist/engine/main_path_integration_contract.js +43 -42
- package/dist/engine/main_path_integration_contract.js.map +1 -1
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
- package/dist/engine/mechanism_contract_registry.js +448 -17
- package/dist/engine/mechanism_contract_registry.js.map +1 -1
- package/dist/engine/mechanism_family_registry.d.ts +48 -0
- package/dist/engine/mechanism_family_registry.d.ts.map +1 -0
- package/dist/engine/mechanism_family_registry.js +197 -0
- package/dist/engine/mechanism_family_registry.js.map +1 -0
- package/dist/engine/metric_governance.d.ts +51 -0
- package/dist/engine/metric_governance.d.ts.map +1 -0
- package/dist/engine/metric_governance.js +138 -0
- package/dist/engine/metric_governance.js.map +1 -0
- package/dist/engine/migration_guard.d.ts.map +1 -1
- package/dist/engine/migration_guard.js +6 -5
- package/dist/engine/migration_guard.js.map +1 -1
- package/dist/engine/mutation_audit.d.ts.map +1 -1
- package/dist/engine/mutation_audit.js +6 -5
- package/dist/engine/mutation_audit.js.map +1 -1
- package/dist/engine/observability.d.ts +11 -0
- package/dist/engine/observability.d.ts.map +1 -1
- package/dist/engine/observability.js +60 -8
- package/dist/engine/observability.js.map +1 -1
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/onboarding.js +17 -16
- package/dist/engine/onboarding.js.map +1 -1
- package/dist/engine/plan_proposal_gate.d.ts +131 -0
- package/dist/engine/plan_proposal_gate.d.ts.map +1 -0
- package/dist/engine/plan_proposal_gate.js +340 -0
- package/dist/engine/plan_proposal_gate.js.map +1 -0
- package/dist/engine/platform_context.d.ts +44 -0
- package/dist/engine/platform_context.d.ts.map +1 -0
- package/dist/engine/platform_context.js +165 -0
- package/dist/engine/platform_context.js.map +1 -0
- package/dist/engine/policy_drift_detector.d.ts +20 -0
- package/dist/engine/policy_drift_detector.d.ts.map +1 -1
- package/dist/engine/policy_drift_detector.js +85 -5
- package/dist/engine/policy_drift_detector.js.map +1 -1
- package/dist/engine/regression_matrix.d.ts.map +1 -1
- package/dist/engine/regression_matrix.js +15 -14
- package/dist/engine/regression_matrix.js.map +1 -1
- package/dist/engine/release_compatibility.d.ts +62 -0
- package/dist/engine/release_compatibility.d.ts.map +1 -0
- package/dist/engine/release_compatibility.js +145 -0
- package/dist/engine/release_compatibility.js.map +1 -0
- package/dist/engine/release_gate.d.ts +29 -0
- package/dist/engine/release_gate.d.ts.map +1 -0
- package/dist/engine/release_gate.js +675 -0
- package/dist/engine/release_gate.js.map +1 -0
- package/dist/engine/release_gate_scenario_registry.d.ts +50 -0
- package/dist/engine/release_gate_scenario_registry.d.ts.map +1 -0
- package/dist/engine/release_gate_scenario_registry.js +514 -0
- package/dist/engine/release_gate_scenario_registry.js.map +1 -0
- package/dist/engine/release_readiness_gate.d.ts +36 -0
- package/dist/engine/release_readiness_gate.d.ts.map +1 -0
- package/dist/engine/release_readiness_gate.js +1050 -0
- package/dist/engine/release_readiness_gate.js.map +1 -0
- package/dist/engine/retention_policy.d.ts +46 -0
- package/dist/engine/retention_policy.d.ts.map +1 -0
- package/dist/engine/retention_policy.js +124 -0
- package/dist/engine/retention_policy.js.map +1 -0
- package/dist/engine/risk_sampler.d.ts.map +1 -1
- package/dist/engine/risk_sampler.js +4 -3
- package/dist/engine/risk_sampler.js.map +1 -1
- package/dist/engine/runtime_safety.d.ts.map +1 -1
- package/dist/engine/runtime_safety.js +18 -17
- package/dist/engine/runtime_safety.js.map +1 -1
- package/dist/engine/scaffolder.d.ts.map +1 -1
- package/dist/engine/scaffolder.js +4 -3
- package/dist/engine/scaffolder.js.map +1 -1
- package/dist/engine/scope_lease.d.ts.map +1 -1
- package/dist/engine/scope_lease.js +4 -3
- package/dist/engine/scope_lease.js.map +1 -1
- package/dist/engine/semantic_evidence.d.ts.map +1 -1
- package/dist/engine/semantic_evidence.js +4 -3
- package/dist/engine/semantic_evidence.js.map +1 -1
- package/dist/engine/state_fact_classifier.d.ts +47 -0
- package/dist/engine/state_fact_classifier.d.ts.map +1 -0
- package/dist/engine/state_fact_classifier.js +158 -0
- package/dist/engine/state_fact_classifier.js.map +1 -0
- package/dist/engine/state_update_bypass.d.ts +19 -0
- package/dist/engine/state_update_bypass.d.ts.map +1 -0
- package/dist/engine/state_update_bypass.js +17 -0
- package/dist/engine/state_update_bypass.js.map +1 -0
- package/dist/engine/task_context.d.ts +25 -3
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +132 -35
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/task_planner.d.ts.map +1 -1
- package/dist/engine/task_planner.js +6 -5
- package/dist/engine/task_planner.js.map +1 -1
- package/dist/engine/team_awareness.d.ts.map +1 -1
- package/dist/engine/team_awareness.js +2 -1
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/engine/technology_decision.d.ts +38 -0
- package/dist/engine/technology_decision.d.ts.map +1 -0
- package/dist/engine/technology_decision.js +120 -0
- package/dist/engine/technology_decision.js.map +1 -0
- package/dist/engine/template_manifest_io.d.ts +47 -0
- package/dist/engine/template_manifest_io.d.ts.map +1 -0
- package/dist/engine/template_manifest_io.js +151 -0
- package/dist/engine/template_manifest_io.js.map +1 -0
- package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
- package/dist/engine/template_mechanism_auditor.js +5 -4
- package/dist/engine/template_mechanism_auditor.js.map +1 -1
- package/dist/engine/template_sync.d.ts +98 -0
- package/dist/engine/template_sync.d.ts.map +1 -0
- package/dist/engine/template_sync.js +355 -0
- package/dist/engine/template_sync.js.map +1 -0
- package/dist/engine/test_generator.d.ts.map +1 -1
- package/dist/engine/test_generator.js +5 -4
- package/dist/engine/test_generator.js.map +1 -1
- package/dist/engine/test_quality.d.ts.map +1 -1
- package/dist/engine/test_quality.js +5 -4
- package/dist/engine/test_quality.js.map +1 -1
- package/dist/engine/test_strategy.d.ts +58 -0
- package/dist/engine/test_strategy.d.ts.map +1 -0
- package/dist/engine/test_strategy.js +93 -0
- package/dist/engine/test_strategy.js.map +1 -0
- package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.js +43 -32
- package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +6 -5
- package/dist/engine/traceability.js.map +1 -1
- package/dist/engine/user_feedback_contract.d.ts.map +1 -1
- package/dist/engine/user_feedback_contract.js +81 -19
- package/dist/engine/user_feedback_contract.js.map +1 -1
- package/dist/engine/user_promise.d.ts +67 -0
- package/dist/engine/user_promise.d.ts.map +1 -0
- package/dist/engine/user_promise.js +436 -0
- package/dist/engine/user_promise.js.map +1 -0
- package/dist/engine/verification_contract.d.ts +132 -0
- package/dist/engine/verification_contract.d.ts.map +1 -0
- package/dist/engine/verification_contract.js +296 -0
- package/dist/engine/verification_contract.js.map +1 -0
- package/dist/engine/verifier.d.ts +6 -10
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +149 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workflow_contract_registry.d.ts.map +1 -1
- package/dist/engine/workflow_contract_registry.js +127 -10
- package/dist/engine/workflow_contract_registry.js.map +1 -1
- package/dist/engine/workflow_template_pack.d.ts +71 -0
- package/dist/engine/workflow_template_pack.d.ts.map +1 -0
- package/dist/engine/workflow_template_pack.js +246 -0
- package/dist/engine/workflow_template_pack.js.map +1 -0
- package/dist/engine/workspace_lease.d.ts +69 -0
- package/dist/engine/workspace_lease.d.ts.map +1 -0
- package/dist/engine/workspace_lease.js +153 -0
- package/dist/engine/workspace_lease.js.map +1 -0
- package/dist/engine/workspace_resumer.d.ts.map +1 -1
- package/dist/engine/workspace_resumer.js +9 -8
- package/dist/engine/workspace_resumer.js.map +1 -1
- package/dist/engine/zero_config_init.d.ts.map +1 -1
- package/dist/engine/zero_config_init.js +16 -15
- package/dist/engine/zero_config_init.js.map +1 -1
- package/dist/git/operations.d.ts.map +1 -1
- package/dist/git/operations.js +18 -17
- package/dist/git/operations.js.map +1 -1
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +2 -1
- 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 +5 -4
- package/dist/knowledge/health_checker.js.map +1 -1
- package/dist/knowledge/index_manager.js +4 -4
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +20 -14
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/knowledge/writer.d.ts.map +1 -1
- package/dist/knowledge/writer.js +7 -6
- package/dist/knowledge/writer.js.map +1 -1
- package/dist/types.d.ts +34 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +13 -4
- package/templates/knowledge/acceptance_templates/Bug/345/210/206/346/236/220/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates/POC/347/273/223/350/256/272/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//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 +30 -3
- package/templates/knowledge/acceptance_templates//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +31 -3
- package/templates/knowledge/acceptance_templates//345/220/216/347/253/257API/351/252/214/346/224/266/346/270/205/345/215/225.md +29 -3
- package/templates/knowledge/acceptance_templates//345/256/211/345/205/250/345/256/241/350/256/241/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//346/200/247/350/203/275/345/210/206/346/236/220/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//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 +30 -3
- package/templates/knowledge/acceptance_templates//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 +26 -3
- package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/350/256/276/350/256/241/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//346/225/205/351/232/234/345/244/215/347/233/230/346/250/241/347/211/210.md +28 -3
- package/templates/knowledge/acceptance_templates//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 +26 -3
- package/templates/knowledge/acceptance_templates//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 +31 -3
- package/templates/knowledge/acceptance_templates//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//346/265/213/350/257/225/350/256/241/345/210/222/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md +26 -3
- package/templates/knowledge/acceptance_templates//350/277/201/347/247/273/350/257/204/344/274/260/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//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 +30 -3
- package/templates/knowledge/acceptance_templates//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/acceptance_templates//351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/347/211/210.md +27 -3
- package/templates/knowledge/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 +29 -0
- package/templates/knowledge/checklists//344/274/232/350/257/235/346/201/242/345/244/215.md +30 -8
- package/templates/knowledge/checklists//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md +30 -0
- package/templates/knowledge/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 +29 -0
- package/templates/knowledge/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 +30 -0
- package/templates/knowledge/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +29 -0
- package/templates/knowledge/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +29 -0
- package/templates/knowledge/domain//345/244/232/347/247/237/346/210/267.md +28 -3
- package/templates/knowledge/domain//345/256/241/350/256/241/346/227/245/345/277/227.md +27 -3
- package/templates/knowledge/domain//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md +30 -3
- package/templates/knowledge/domain//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +32 -3
- package/templates/knowledge/domain//346/212/245/350/241/250/347/273/237/350/256/241.md +31 -3
- package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +31 -3
- package/templates/knowledge/domain//346/225/260/346/215/256/346/235/203/351/231/220.md +28 -3
- package/templates/knowledge/domain//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +30 -3
- package/templates/knowledge/domain//351/200/232/347/237/245/350/247/204/345/210/231.md +31 -3
- package/templates/knowledge/patterns/core/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +24 -7
- package/templates/knowledge/patterns/core/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +25 -7
- package/templates/knowledge/patterns/core/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +24 -7
- package/templates/knowledge/patterns/core//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 +24 -7
- package/templates/knowledge/patterns/core//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +25 -7
- package/templates/knowledge/patterns/core//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 +24 -7
- package/templates/knowledge/patterns/core//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +25 -7
- package/templates/knowledge/patterns/core//345/206/262/347/252/201/351/227/250/347/246/201.md +24 -7
- package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +26 -7
- package/templates/knowledge/patterns/core//345/217/230/345/274/202/345/256/241/350/256/241.md +25 -7
- package/templates/knowledge/patterns/core//345/233/236/345/275/222/347/237/251/351/230/265.md +24 -7
- package/templates/knowledge/patterns/core//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +24 -7
- package/templates/knowledge/patterns/core//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +24 -7
- package/templates/knowledge/patterns/core//345/271/266/345/217/221/351/224/201.md +26 -7
- package/templates/knowledge/patterns/core//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +26 -7
- package/templates/knowledge/patterns/core//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +24 -7
- package/templates/knowledge/patterns/core//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +25 -7
- package/templates/knowledge/patterns/core//346/265/201/345/274/217/345/277/203/350/267/263.md +25 -7
- package/templates/knowledge/patterns/core//347/237/245/350/257/206/344/270/273/346/235/203.md +25 -7
- package/templates/knowledge/patterns/core//350/257/255/344/271/211/350/257/201/346/215/256.md +24 -7
- package/templates/knowledge/patterns/core//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +25 -7
- package/templates/knowledge/patterns/core//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +24 -7
- package/templates/knowledge/patterns/core//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +24 -7
- package/templates/knowledge/procedures/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +29 -3
- package/templates/knowledge/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 +33 -0
- package/templates/knowledge/procedures//344/273/243/347/240/201/351/227/250/347/246/201/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//344/273/273/345/212/241/346/213/206/350/247/243/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +34 -0
- package/templates/knowledge/procedures//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +34 -0
- package/templates/knowledge/procedures//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +34 -0
- package/templates/knowledge/procedures//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +29 -3
- package/templates/knowledge/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 +99 -0
- package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +95 -0
- package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/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 +91 -0
- package/templates/knowledge/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 +30 -3
- package/templates/knowledge/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 +97 -0
- package/templates/knowledge/procedures//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md +33 -0
- package/templates/knowledge/procedures//347/274/272/351/231/267/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//350/207/252/344/270/273/351/200/211/345/236/213/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//350/257/246/347/273/206/350/256/276/350/256/241/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//350/260/203/350/257/225/346/216/222/346/237/245/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +30 -3
- package/templates/knowledge/procedures//351/233/206/346/210/220/351/252/214/350/257/201/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//351/234/200/346/261/202/346/276/204/346/270/205/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/procedures//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +30 -3
- package/templates/knowledge/procedures//351/252/214/350/257/201/350/256/241/345/210/222/346/265/201/347/250/213.md +30 -3
- package/templates/knowledge/review_rules//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 +24 -3
- package/templates/knowledge/review_rules//345/256/211/345/205/250/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
- package/templates/knowledge/review_rules//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md +23 -3
- package/templates/knowledge/review_rules//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
- package/templates/knowledge/review_rules//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 +23 -3
- package/templates/knowledge/review_rules//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
- package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +24 -3
- package/templates/knowledge/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/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 +65 -0
- package/templates/knowledge/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/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 +38 -0
- package/templates/knowledge/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/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 +36 -0
- package/templates/knowledge/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 +38 -0
- package/templates/knowledge/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 +64 -0
- package/templates/knowledge/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 +36 -0
- package/templates/knowledge/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 +49 -0
- package/templates/knowledge/rules//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +50 -0
- package/templates/knowledge/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 +35 -0
- package/templates/knowledge/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 +36 -0
- package/templates/knowledge/rules//346/274/224/350/277/233/345/233/236/345/275/222/350/247/204/345/210/231.md +51 -0
- package/templates/knowledge/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 +74 -0
- package/templates/knowledge/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 +35 -0
- package/templates/knowledge/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 +36 -0
- package/templates/knowledge/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 +61 -0
- package/templates/knowledge/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 +73 -0
- package/templates/knowledge/rules//347/273/206/350/212/202/347/272/252/345/276/213/350/247/204/345/210/231.md +67 -0
- package/templates/knowledge/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 +66 -0
- package/templates/knowledge/rules//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250/350/247/204/345/210/231.md +59 -0
- package/templates/knowledge/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 +38 -0
- package/templates/knowledge/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 +36 -0
- package/templates/knowledge/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md +35 -0
- package/templates/knowledge/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/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 +36 -0
- package/templates/knowledge/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/templates//345/256/241/346/237/245/346/221/230/350/246/201.md +26 -7
- package/templates/patterns/API/350/256/276/350/256/241/350/247/204/350/214/203.md +30 -3
- package/templates/patterns/Docker/351/203/250/347/275/262/350/247/204/350/214/203.md +29 -3
- package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +33 -3
- package/templates/patterns/N/345/212/2401/346/237/245/350/257/242/350/247/204/350/214/203.md +31 -3
- package/templates/patterns/React/345/210/227/350/241/250/350/241/250/346/240/274/350/247/204/350/214/203.md +30 -3
- package/templates/patterns/React/346/216/245/345/217/243/351/233/206/346/210/220/350/247/204/350/214/203.md +31 -3
- package/templates/patterns/React/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +31 -3
- package/templates/patterns/React/347/273/204/344/273/266/350/247/204/350/214/203.md +30 -3
- package/templates/patterns/React/350/241/250/345/215/225/350/247/204/350/214/203.md +30 -3
- package/templates/patterns/React/350/267/257/347/224/261/350/247/204/350/214/203.md +31 -3
- package/templates/patterns/Schema/345/205/274/345/256/271/350/247/204/350/214/203.md +30 -3
- package/templates/patterns/Vue/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +29 -3
- package/templates/patterns/Vue/347/273/204/344/273/266/350/247/204/350/214/203.md +33 -3
- package/templates/patterns/Vue/350/267/257/347/224/261/350/247/204/350/214/203.md +28 -3
- package/templates/patterns//344/272/213/344/273/266/351/251/261/345/212/250/350/247/204/350/214/203.md +32 -3
- package/templates/patterns//344/272/213/345/212/241/346/250/241/345/274/217/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//344/274/230/351/233/205/345/201/234/346/234/272/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +30 -3
- package/templates/patterns//345/210/206/351/241/265/346/237/245/350/257/242/350/247/204/350/214/203.md +34 -3
- package/templates/patterns//345/211/215/347/253/257/346/200/247/350/203/275/350/247/204/350/214/203.md +32 -3
- package/templates/patterns//345/221/275/345/220/215/350/247/204/350/214/203.md +30 -3
- package/templates/patterns//345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//345/242/236/345/210/240/346/224/271/346/237/245/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//345/244/226/351/203/250/344/276/235/350/265/226/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//345/245/221/347/272/246/345/205/274/345/256/271/350/247/204/350/214/203.md +28 -3
- package/templates/patterns//345/256/232/346/227/266/344/273/273/345/212/241/350/247/204/350/214/203.md +32 -3
- package/templates/patterns//345/256/236/346/227/266/346/216/250/351/200/201/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//345/267/245/347/250/213/347/272/252/345/276/213.md +30 -3
- package/templates/patterns//345/271/266/345/217/221/346/216/247/345/210/266/350/247/204/350/214/203.md +34 -3
- package/templates/patterns//345/274/202/346/255/245/345/257/274/345/207/272/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//346/216/245/345/217/243/345/245/221/347/272/246/350/247/204/350/214/203.md +29 -3
- package/templates/patterns//346/220/234/347/264/242/346/250/241/345/274/217/350/247/204/350/214/203.md +33 -3
- package/templates/patterns//346/225/260/346/215/256/351/232/220/347/247/201/350/247/204/350/214/203.md +34 -3
- package/templates/patterns//346/226/207/344/273/266/344/270/212/344/274/240/350/247/204/350/214/203.md +30 -3
- package/templates/patterns//346/227/240/351/232/234/347/242/215/350/247/204/350/214/203.md +30 -3
- package/templates/patterns//346/227/245/345/277/227/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//346/235/203/351/231/220/350/256/244/350/257/201/350/247/204/350/214/203.md +34 -3
- package/templates/patterns//346/236/266/346/236/204/347/272/242/347/272/277.md +28 -3
- package/templates/patterns//346/265/213/350/257/225/350/264/250/351/207/217/350/247/204/350/214/203.md +30 -3
- package/templates/patterns//347/206/224/346/226/255/351/231/215/347/272/247/350/247/204/350/214/203.md +32 -3
- package/templates/patterns//347/212/266/346/200/201/346/265/201/350/275/254/350/247/204/350/214/203.md +29 -3
- package/templates/patterns//347/272/246/346/235/237/345/256/236/347/216/260/350/247/204/350/214/203.md +32 -3
- package/templates/patterns//347/274/223/345/255/230/347/255/226/347/225/245/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//347/274/226/347/240/201/350/264/250/351/207/217/350/247/204/350/214/203.md +30 -3
- package/templates/patterns//347/274/272/351/231/267/347/256/241/347/220/206/350/247/204/350/214/203.md +29 -3
- package/templates/patterns//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +30 -3
- package/templates/patterns//350/276/223/345/205/245/346/240/241/351/252/214/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//351/224/231/350/257/257/345/244/204/347/220/206/350/247/204/350/214/203.md +31 -3
- package/templates/patterns//351/224/231/350/257/257/350/276/271/347/225/214/350/247/204/350/214/203.md +33 -3
- 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 +30 -3
- package/dist/engine/batch1_manifest.d.ts.map +0 -1
- package/dist/engine/batch1_manifest.js.map +0 -1
- package/dist/engine/batch1_scenario_registry.d.ts.map +0 -1
- package/dist/engine/batch1_scenario_registry.js.map +0 -1
- package/dist/engine/batch1_scenario_runners.d.ts.map +0 -1
- package/dist/engine/batch1_scenario_runners.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan_proposal_gate.d.ts","sourceRoot":"","sources":["../../src/engine/plan_proposal_gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan / Proposal First Gate — 问题五十五核心机制。
|
|
3
|
+
*
|
|
4
|
+
* 任何写入、编码、构建、Docker、迁移、发布、外部副作用或交付动作前,
|
|
5
|
+
* AI 必须先给出与任务风险匹配的计划或方案。
|
|
6
|
+
*
|
|
7
|
+
* 核心原则: 先说明计划,再执行动作。
|
|
8
|
+
*/
|
|
9
|
+
// ── 任务类型到最低计划等级的映射 ──
|
|
10
|
+
const MIN_PLAN_LEVEL = {
|
|
11
|
+
simple_answer: "none_with_reason",
|
|
12
|
+
read_only_analysis: "brief_plan",
|
|
13
|
+
code_change: "execution_plan",
|
|
14
|
+
file_edit: "execution_plan",
|
|
15
|
+
test_or_review: "execution_plan",
|
|
16
|
+
architecture_design: "option_proposal",
|
|
17
|
+
existing_system_development: "execution_plan",
|
|
18
|
+
local_acceptance: "execution_plan",
|
|
19
|
+
batch_documentation_update: "execution_plan",
|
|
20
|
+
migration: "human_confirmation_required",
|
|
21
|
+
delete_or_overwrite: "human_confirmation_required",
|
|
22
|
+
high_risk_operation: "human_confirmation_required",
|
|
23
|
+
};
|
|
24
|
+
/** 需要用户确认的任务类型 */
|
|
25
|
+
const NEEDS_CONFIRMATION_TYPES = new Set([
|
|
26
|
+
"migration",
|
|
27
|
+
"delete_or_overwrite",
|
|
28
|
+
"high_risk_operation",
|
|
29
|
+
]);
|
|
30
|
+
/** plan_level 排序权重 */
|
|
31
|
+
const LEVEL_WEIGHT = {
|
|
32
|
+
none_with_reason: 0,
|
|
33
|
+
brief_plan: 1,
|
|
34
|
+
execution_plan: 2,
|
|
35
|
+
option_proposal: 3,
|
|
36
|
+
human_confirmation_required: 4,
|
|
37
|
+
};
|
|
38
|
+
/** 风险升级触发条件 — 同时命中多个 task_type 时取最高 */
|
|
39
|
+
const RISK_UPGRADE_TRIGGERS = [
|
|
40
|
+
{ types: ["code_change", "delete_or_overwrite"], upgrade_to: "human_confirmation_required" },
|
|
41
|
+
{ types: ["code_change", "migration"], upgrade_to: "human_confirmation_required" },
|
|
42
|
+
{ types: ["file_edit", "delete_or_overwrite"], upgrade_to: "human_confirmation_required" },
|
|
43
|
+
{ types: ["code_change", "high_risk_operation"], upgrade_to: "human_confirmation_required" },
|
|
44
|
+
];
|
|
45
|
+
/** 高风险关键词 — 检测用户意图中的高风险信号 */
|
|
46
|
+
const HIGH_RISK_KEYWORDS = [
|
|
47
|
+
"删除", "drop", "truncate", "rm -rf", "DELETE FROM",
|
|
48
|
+
"覆盖", "force push", "--force",
|
|
49
|
+
"数据库", "database", "schema",
|
|
50
|
+
"权限", "permission", "auth",
|
|
51
|
+
"技术栈", "framework", "migration",
|
|
52
|
+
"发布", "deploy", "publish", "release",
|
|
53
|
+
"Docker", "docker", "端口", "port",
|
|
54
|
+
"安装", "install", "依赖", "dependency",
|
|
55
|
+
"用户数据", "user data",
|
|
56
|
+
];
|
|
57
|
+
/** none_with_reason 禁止用于的任务类型 */
|
|
58
|
+
const NONE_WITH_REASON_FORBIDDEN = new Set([
|
|
59
|
+
"code_change", "file_edit", "test_or_review",
|
|
60
|
+
"local_acceptance", "batch_documentation_update",
|
|
61
|
+
"migration", "delete_or_overwrite", "high_risk_operation",
|
|
62
|
+
]);
|
|
63
|
+
// ── 核心函数 ──
|
|
64
|
+
/**
|
|
65
|
+
* 评估计划前置门 — 检查任务是否有足够等级的计划。
|
|
66
|
+
*/
|
|
67
|
+
export function evaluatePlanProposalGate(input) {
|
|
68
|
+
const violations = [];
|
|
69
|
+
const blockedActions = [];
|
|
70
|
+
// 确定最低要求等级
|
|
71
|
+
let requiredLevel = MIN_PLAN_LEVEL[input.task_type] ?? "execution_plan";
|
|
72
|
+
// 风险升级: 当意图同时命中多个高风险类型时取最高等级
|
|
73
|
+
for (const trigger of RISK_UPGRADE_TRIGGERS) {
|
|
74
|
+
const allTypesMatch = trigger.types.every((t) => {
|
|
75
|
+
if (t === input.task_type)
|
|
76
|
+
return true;
|
|
77
|
+
return inferPlanGateTaskType(input.user_intent) === t;
|
|
78
|
+
});
|
|
79
|
+
if (allTypesMatch) {
|
|
80
|
+
const currentWeight = LEVEL_WEIGHT[requiredLevel];
|
|
81
|
+
const upgradeWeight = LEVEL_WEIGHT[trigger.upgrade_to];
|
|
82
|
+
if (upgradeWeight > currentWeight) {
|
|
83
|
+
requiredLevel = trigger.upgrade_to;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// 检测意图中的高风险关键词
|
|
88
|
+
const intentHasHighRisk = HIGH_RISK_KEYWORDS.some((kw) => input.user_intent.toLowerCase().includes(kw.toLowerCase()));
|
|
89
|
+
if (intentHasHighRisk && LEVEL_WEIGHT[requiredLevel] < LEVEL_WEIGHT["execution_plan"]) {
|
|
90
|
+
requiredLevel = "execution_plan";
|
|
91
|
+
}
|
|
92
|
+
// scope 扩大或风险升高 → 升级
|
|
93
|
+
if (input.scope_expanded || input.risk_elevated) {
|
|
94
|
+
if (LEVEL_WEIGHT[requiredLevel] < LEVEL_WEIGHT["human_confirmation_required"]) {
|
|
95
|
+
requiredLevel = "human_confirmation_required";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const currentLevel = input.plan_level ?? "none_with_reason";
|
|
99
|
+
// 检查 1: none_with_reason 适用范围
|
|
100
|
+
if (currentLevel === "none_with_reason" && NONE_WITH_REASON_FORBIDDEN.has(input.task_type)) {
|
|
101
|
+
violations.push({
|
|
102
|
+
rule: "none_with_reason_forbidden_for_write",
|
|
103
|
+
severity: "hard_fail",
|
|
104
|
+
reason_zh: `任务类型 ${input.task_type} 不得使用 none_with_reason,写入/高风险任务必须有计划`,
|
|
105
|
+
diagnostic_code: "SF-PLAN-5010",
|
|
106
|
+
});
|
|
107
|
+
blockedActions.push("write_file", "code_change", "build", "docker", "migrate", "publish", "deliver");
|
|
108
|
+
}
|
|
109
|
+
// 检查 2: 计划等级不足
|
|
110
|
+
if (LEVEL_WEIGHT[currentLevel] < LEVEL_WEIGHT[requiredLevel]) {
|
|
111
|
+
violations.push({
|
|
112
|
+
rule: "plan_level_insufficient",
|
|
113
|
+
severity: "hard_fail",
|
|
114
|
+
reason_zh: `计划等级 ${currentLevel} 不足,任务类型 ${input.task_type} 至少需要 ${requiredLevel}`,
|
|
115
|
+
diagnostic_code: "SF-PLAN-5002",
|
|
116
|
+
});
|
|
117
|
+
blockedActions.push("write_file", "code_change", "build", "docker", "migrate", "publish", "deliver");
|
|
118
|
+
}
|
|
119
|
+
// 检查 3: 需要用户确认
|
|
120
|
+
if (NEEDS_CONFIRMATION_TYPES.has(input.task_type) && !input.user_confirmation_ref) {
|
|
121
|
+
violations.push({
|
|
122
|
+
rule: "confirmation_required",
|
|
123
|
+
severity: "hard_fail",
|
|
124
|
+
reason_zh: `任务类型 ${input.task_type} 需要用户确认,但缺少 user_confirmation_ref`,
|
|
125
|
+
diagnostic_code: "SF-PLAN-5003",
|
|
126
|
+
});
|
|
127
|
+
blockedActions.push("write_file", "code_change", "build", "docker", "migrate", "publish", "deliver");
|
|
128
|
+
}
|
|
129
|
+
// 检查 4: 高风险意图无确认
|
|
130
|
+
if (intentHasHighRisk && !input.user_confirmation_ref &&
|
|
131
|
+
LEVEL_WEIGHT[requiredLevel] >= LEVEL_WEIGHT["human_confirmation_required"]) {
|
|
132
|
+
violations.push({
|
|
133
|
+
rule: "high_risk_no_confirmation",
|
|
134
|
+
severity: "hard_fail",
|
|
135
|
+
reason_zh: "意图包含高风险操作但缺少用户确认",
|
|
136
|
+
diagnostic_code: "SF-PLAN-5003",
|
|
137
|
+
});
|
|
138
|
+
blockedActions.push("write_file", "code_change", "build", "docker", "migrate", "publish", "deliver");
|
|
139
|
+
}
|
|
140
|
+
// 检查 5: 缺少计划本身
|
|
141
|
+
if (!input.plan_summary_zh && currentLevel !== "none_with_reason") {
|
|
142
|
+
violations.push({
|
|
143
|
+
rule: "no_plan",
|
|
144
|
+
severity: "hard_fail",
|
|
145
|
+
reason_zh: "执行前缺少计划",
|
|
146
|
+
diagnostic_code: "SF-PLAN-5001",
|
|
147
|
+
});
|
|
148
|
+
blockedActions.push("write_file", "code_change", "build", "docker", "migrate", "publish", "deliver");
|
|
149
|
+
}
|
|
150
|
+
// 检查 6: 缺少验证计划(execution_plan 及以上)
|
|
151
|
+
if (LEVEL_WEIGHT[currentLevel] >= LEVEL_WEIGHT["execution_plan"] &&
|
|
152
|
+
(!input.verification_plan || input.verification_plan.length === 0)) {
|
|
153
|
+
violations.push({
|
|
154
|
+
rule: "verification_plan_missing",
|
|
155
|
+
severity: "hard_fail",
|
|
156
|
+
reason_zh: "计划未记录验证方式",
|
|
157
|
+
diagnostic_code: "SF-PLAN-5005",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// 检查 7: 缺少 evidence refs
|
|
161
|
+
if (!input.evidence_refs || input.evidence_refs.length === 0) {
|
|
162
|
+
violations.push({
|
|
163
|
+
rule: "evidence_refs_missing",
|
|
164
|
+
severity: "hard_fail",
|
|
165
|
+
reason_zh: "计划未进入 evidence refs",
|
|
166
|
+
diagnostic_code: "SF-PLAN-5006",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// 自动修复循环: 同 scope 内可用原计划
|
|
170
|
+
if (input.is_auto_repair_step && input.auto_repair_origin_plan_id && !input.scope_expanded) {
|
|
171
|
+
// 自动修复每轮仍需要 evidence
|
|
172
|
+
if (!input.evidence_refs || input.evidence_refs.length === 0) {
|
|
173
|
+
violations.push({
|
|
174
|
+
rule: "auto_repair_evidence_missing",
|
|
175
|
+
severity: "hard_fail",
|
|
176
|
+
reason_zh: "自动修复每轮必须有 evidence",
|
|
177
|
+
diagnostic_code: "SF-PLAN-5006",
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// 自动修复在授权 scope 内不阻断
|
|
181
|
+
}
|
|
182
|
+
const hardFails = violations.filter((v) => v.severity === "hard_fail");
|
|
183
|
+
const passed = hardFails.length === 0;
|
|
184
|
+
return {
|
|
185
|
+
passed,
|
|
186
|
+
plan_gate_status: passed ? "passed" : hardFails.some((v) => v.diagnostic_code === "SF-PLAN-5003") ? "manual_required" : "blocked",
|
|
187
|
+
required_level: requiredLevel,
|
|
188
|
+
current_level: currentLevel,
|
|
189
|
+
reason_zh: passed ? "计划前置门通过" : hardFails.map((v) => v.reason_zh).join("; "),
|
|
190
|
+
violations,
|
|
191
|
+
diagnostic_code: hardFails.length > 0 ? hardFails[0].diagnostic_code : undefined,
|
|
192
|
+
evidence_refs: input.evidence_refs ?? [],
|
|
193
|
+
blocked_actions: [...new Set(blockedActions)],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 在执行动作前检查 plan gate — 返回是否允许执行。
|
|
198
|
+
*/
|
|
199
|
+
export function requirePlanBeforeAction(gateResult, action) {
|
|
200
|
+
if (!gateResult.passed) {
|
|
201
|
+
return {
|
|
202
|
+
allowed: false,
|
|
203
|
+
reason_zh: `Plan Gate 未通过: ${gateResult.reason_zh}`,
|
|
204
|
+
diagnostic_code: gateResult.diagnostic_code ?? "SF-PLAN-5001",
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
if (gateResult.blocked_actions.includes(action)) {
|
|
208
|
+
return {
|
|
209
|
+
allowed: false,
|
|
210
|
+
reason_zh: `动作 ${action} 被 Plan Gate 阻断`,
|
|
211
|
+
diagnostic_code: "SF-PLAN-5004",
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return { allowed: true, reason_zh: "Plan Gate 通过,允许执行" };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* 验证动作是否在已确认计划范围内。
|
|
218
|
+
*/
|
|
219
|
+
export function validateActionWithinPlan(plannedScope, actionTarget, planLevel) {
|
|
220
|
+
// 简单计划和只读分析不要求 scope 精确匹配
|
|
221
|
+
if (planLevel === "none_with_reason" || planLevel === "brief_plan") {
|
|
222
|
+
return { allowed: true, reason_zh: "低风险任务,不要求 scope 精确匹配" };
|
|
223
|
+
}
|
|
224
|
+
const inScope = plannedScope.some((s) => actionTarget.startsWith(s) || actionTarget.includes(s));
|
|
225
|
+
if (!inScope) {
|
|
226
|
+
return {
|
|
227
|
+
allowed: false,
|
|
228
|
+
reason_zh: `动作目标 ${actionTarget} 不在已确认计划 scope 内: ${plannedScope.join(", ")}`,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return { allowed: true, reason_zh: "动作在计划范围内" };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* 创建计划提案证据。
|
|
235
|
+
*/
|
|
236
|
+
export function createPlanProposalEvidence(input) {
|
|
237
|
+
const evidenceId = `plan-evidence-${input.task_id}-${Date.now()}`;
|
|
238
|
+
return {
|
|
239
|
+
evidence_id: evidenceId,
|
|
240
|
+
task_id: input.task_id,
|
|
241
|
+
plan_id: `plan-${input.task_id}`,
|
|
242
|
+
plan_level: input.plan_level ?? "execution_plan",
|
|
243
|
+
task_type: input.task_type,
|
|
244
|
+
plan_summary_zh: input.plan_summary_zh ?? "",
|
|
245
|
+
proposed_steps: input.proposed_steps ?? [],
|
|
246
|
+
verification_plan: input.verification_plan ?? [],
|
|
247
|
+
risks: input.risks ?? [],
|
|
248
|
+
needs_user_confirmation: input.needs_user_confirmation ?? false,
|
|
249
|
+
user_confirmation_ref: input.user_confirmation_ref,
|
|
250
|
+
evidence_refs: input.evidence_refs ?? [],
|
|
251
|
+
created_at: new Date().toISOString(),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 推断任务类型 — 从用户意图文本映射到 PlanGateTaskType。
|
|
256
|
+
*/
|
|
257
|
+
export function inferPlanGateTaskType(intent, route) {
|
|
258
|
+
const lower = intent.toLowerCase();
|
|
259
|
+
// 高风险检测优先
|
|
260
|
+
if (/删除|drop\s+table|truncate|rm\s+-rf|覆盖/.test(intent))
|
|
261
|
+
return "delete_or_overwrite";
|
|
262
|
+
if (/迁移|migrate|数据库.*schema|database.*schema/.test(intent))
|
|
263
|
+
return "migration";
|
|
264
|
+
if (/发布|deploy|publish|release|push.*main|push.*master/.test(intent))
|
|
265
|
+
return "high_risk_operation";
|
|
266
|
+
if (/docker|容器|端口.*暴露|port.*expose/.test(intent))
|
|
267
|
+
return "high_risk_operation";
|
|
268
|
+
// 路由推断
|
|
269
|
+
if (route === "code_change")
|
|
270
|
+
return "code_change";
|
|
271
|
+
if (route === "analysis")
|
|
272
|
+
return "read_only_analysis";
|
|
273
|
+
if (route === "operation")
|
|
274
|
+
return "local_acceptance";
|
|
275
|
+
if (route === "review")
|
|
276
|
+
return "test_or_review";
|
|
277
|
+
// 内容推断
|
|
278
|
+
if (/修改.*代码|写.*代码|实现|开发|fix|feat/.test(intent))
|
|
279
|
+
return "code_change";
|
|
280
|
+
if (/修改.*文件|编辑|写.*文件|新增.*文件/.test(intent))
|
|
281
|
+
return "file_edit";
|
|
282
|
+
if (/架构|设计|方案/.test(intent))
|
|
283
|
+
return "architecture_design";
|
|
284
|
+
if (/现有.*系统|已有.*项目/.test(intent))
|
|
285
|
+
return "existing_system_development";
|
|
286
|
+
if (/审查|review|检查/.test(intent))
|
|
287
|
+
return "test_or_review";
|
|
288
|
+
if (/测试|test|验证/.test(intent))
|
|
289
|
+
return "test_or_review";
|
|
290
|
+
if (/文档|doc|batch.*文档/.test(intent))
|
|
291
|
+
return "batch_documentation_update";
|
|
292
|
+
if (/验收|browser|浏览器|docker.*accept/.test(intent))
|
|
293
|
+
return "local_acceptance";
|
|
294
|
+
// 默认
|
|
295
|
+
if (/分析|查看|阅读|read|search|find/.test(intent) || !/修改|写|改|创建|删除|构建|运行/.test(intent)) {
|
|
296
|
+
return "read_only_analysis";
|
|
297
|
+
}
|
|
298
|
+
return "code_change";
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* 检查是否为 "只要求 review" 场景 — 如是,不得擅自修复。
|
|
302
|
+
*/
|
|
303
|
+
export function isReviewOnlyIntent(intent) {
|
|
304
|
+
const lower = intent.toLowerCase();
|
|
305
|
+
const reviewWords = /审查|review|检查|代码审查|code review|只看|只读|不修复|不修改|不修改代码/;
|
|
306
|
+
const fixWords = /修复|fix|修|改|修改.*代码/;
|
|
307
|
+
return reviewWords.test(lower) && !fixWords.test(lower);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* 确认参数 — 计划确认后,旧确认只能覆盖原计划范围。
|
|
311
|
+
*/
|
|
312
|
+
export function validateConfirmationScope(originalConfirmation, newScope) {
|
|
313
|
+
const newScopeStr = JSON.stringify(newScope.sort());
|
|
314
|
+
const origScopeStr = JSON.stringify(originalConfirmation.scope.sort());
|
|
315
|
+
if (newScopeStr === origScopeStr) {
|
|
316
|
+
return { valid: true, reason_zh: "scope 未变,旧确认有效" };
|
|
317
|
+
}
|
|
318
|
+
const expanded = newScope.filter((s) => !originalConfirmation.scope.includes(s));
|
|
319
|
+
if (expanded.length > 0) {
|
|
320
|
+
return {
|
|
321
|
+
valid: false,
|
|
322
|
+
reason_zh: `scope 扩大: 新增 ${expanded.join(", ")},需要重新确认`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
return { valid: true, reason_zh: "scope 未扩大,旧确认有效" };
|
|
326
|
+
}
|
|
327
|
+
// ── 诊断码注册 ──
|
|
328
|
+
export const PLAN_GATE_DIAGNOSTIC_CODES = {
|
|
329
|
+
"SF-PLAN-5001": "执行前缺少计划",
|
|
330
|
+
"SF-PLAN-5002": "计划等级不足",
|
|
331
|
+
"SF-PLAN-5003": "高风险动作缺少用户确认",
|
|
332
|
+
"SF-PLAN-5004": "执行动作超出已确认计划",
|
|
333
|
+
"SF-PLAN-5005": "计划未记录验证方式",
|
|
334
|
+
"SF-PLAN-5006": "计划未进入 evidence refs",
|
|
335
|
+
"SF-PLAN-5007": "计划只存在于最终报告,未在执行前生效",
|
|
336
|
+
"SF-PLAN-5008": "用户项目 adapter 未注入计划前置规则",
|
|
337
|
+
"SF-PLAN-5009": "机制层未接入,只有模板或知识描述",
|
|
338
|
+
"SF-PLAN-5010": "none_with_reason 被用于写入或高风险任务",
|
|
339
|
+
};
|
|
340
|
+
//# sourceMappingURL=plan_proposal_gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan_proposal_gate.js","sourceRoot":"","sources":["../../src/engine/plan_proposal_gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 问题四十: Platform Compatibility — 跨平台路径安全、规范化与兼容性。
|
|
3
|
+
*
|
|
4
|
+
* 强制执行:
|
|
5
|
+
* - symlink / case sensitivity / path separator / shell 差异不得绕过 scope
|
|
6
|
+
* - 跨平台兼容不得以降低安全边界为代价
|
|
7
|
+
* - 路径判定必须使用 path.resolve + path.relative,禁止 startsWith 字符串边界判断
|
|
8
|
+
*/
|
|
9
|
+
import type { PlatformContext, NormalizedPathRef, PlatformCompatibilityReport, PathSafetyCheck } from "./extension_platform_contracts.js";
|
|
10
|
+
/**
|
|
11
|
+
* 路径解析器 — 可注入以支持测试环境和 CI。
|
|
12
|
+
* 默认使用 Node.js path.resolve + fs.realpathSync.native。
|
|
13
|
+
*/
|
|
14
|
+
export interface PathResolver {
|
|
15
|
+
resolve: (...pathSegments: string[]) => string;
|
|
16
|
+
realpath: (p: string) => string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 检测当前平台上下文。
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectPlatformContext(workspacePath: string): PlatformContext;
|
|
22
|
+
/**
|
|
23
|
+
* 规范化路径引用。
|
|
24
|
+
*
|
|
25
|
+
* 安全策略:
|
|
26
|
+
* - 使用 path.resolve 解析 .. / ~ / 相对路径
|
|
27
|
+
* - 使用 path.relative + startsWith('..') 判断是否逃逸 scope
|
|
28
|
+
* - 禁止 startsWith 字符串边界判断作为 scope 判定方式
|
|
29
|
+
* - realpath 解析 symlink,文件不存在时回退到 resolved 路径
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalizePathRef(rawPath: string, platform: PlatformContext, scopeBoundary: string, resolver?: PathResolver): NormalizedPathRef;
|
|
32
|
+
/**
|
|
33
|
+
* 执行路径安全检查。
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkPathSafety(pathRef: NormalizedPathRef, scopeBoundary: string): PathSafetyCheck;
|
|
36
|
+
/**
|
|
37
|
+
* 生成平台兼容性报告。
|
|
38
|
+
*/
|
|
39
|
+
export declare function generatePlatformReport(platform: PlatformContext, pathsToCheck: string[], scopeBoundary: string): PlatformCompatibilityReport;
|
|
40
|
+
/**
|
|
41
|
+
* 创建测试用的平台上下文。
|
|
42
|
+
*/
|
|
43
|
+
export declare function createTestPlatformContext(overrides?: Partial<PlatformContext>): PlatformContext;
|
|
44
|
+
//# sourceMappingURL=platform_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform_context.d.ts","sourceRoot":"","sources":["../../src/engine/platform_context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EAGhB,MAAM,mCAAmC,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAcD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,CAY5E;AAaD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,GAAE,YAA+B,GACxC,iBAAiB,CA2CnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,aAAa,EAAE,MAAM,GACpB,eAAe,CAoBjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,EAAE,MAAM,GACpB,2BAA2B,CAuB7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAY/F"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 问题四十: Platform Compatibility — 跨平台路径安全、规范化与兼容性。
|
|
3
|
+
*
|
|
4
|
+
* 强制执行:
|
|
5
|
+
* - symlink / case sensitivity / path separator / shell 差异不得绕过 scope
|
|
6
|
+
* - 跨平台兼容不得以降低安全边界为代价
|
|
7
|
+
* - 路径判定必须使用 path.resolve + path.relative,禁止 startsWith 字符串边界判断
|
|
8
|
+
*/
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import fs from "node:fs";
|
|
11
|
+
/** 默认解析器 — 使用 Node.js 原生 path + fs */
|
|
12
|
+
const DEFAULT_RESOLVER = {
|
|
13
|
+
resolve: (...segments) => path.resolve(...segments),
|
|
14
|
+
realpath: (p) => {
|
|
15
|
+
try {
|
|
16
|
+
return fs.realpathSync.native(p);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return p;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* 检测当前平台上下文。
|
|
25
|
+
*/
|
|
26
|
+
export function detectPlatformContext(workspacePath) {
|
|
27
|
+
const platform = process.platform;
|
|
28
|
+
return {
|
|
29
|
+
os: platform === "win32" ? "win32" : platform === "darwin" ? "darwin" : "linux",
|
|
30
|
+
arch: process.arch,
|
|
31
|
+
shell: detectShell(),
|
|
32
|
+
path_case_sensitive: platform !== "win32" && platform !== "darwin",
|
|
33
|
+
path_separator: platform === "win32" ? "\\" : "/",
|
|
34
|
+
line_ending: platform === "win32" ? "crlf" : "lf",
|
|
35
|
+
supports_symlink: platform !== "win32",
|
|
36
|
+
workspace_realpath: workspacePath,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function detectShell() {
|
|
40
|
+
const shell = process.env.SHELL ?? "";
|
|
41
|
+
if (shell.includes("zsh"))
|
|
42
|
+
return "zsh";
|
|
43
|
+
if (shell.includes("bash"))
|
|
44
|
+
return "bash";
|
|
45
|
+
if (shell.includes("fish"))
|
|
46
|
+
return "fish";
|
|
47
|
+
if (process.platform === "win32") {
|
|
48
|
+
return process.env.COMSPEC?.includes("cmd") ? "cmd" : "powershell";
|
|
49
|
+
}
|
|
50
|
+
return "unknown";
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 规范化路径引用。
|
|
54
|
+
*
|
|
55
|
+
* 安全策略:
|
|
56
|
+
* - 使用 path.resolve 解析 .. / ~ / 相对路径
|
|
57
|
+
* - 使用 path.relative + startsWith('..') 判断是否逃逸 scope
|
|
58
|
+
* - 禁止 startsWith 字符串边界判断作为 scope 判定方式
|
|
59
|
+
* - realpath 解析 symlink,文件不存在时回退到 resolved 路径
|
|
60
|
+
*/
|
|
61
|
+
export function normalizePathRef(rawPath, platform, scopeBoundary, resolver = DEFAULT_RESOLVER) {
|
|
62
|
+
// 跨平台分隔符归一化: Windows 反斜杠统一为正斜杠后再 resolve
|
|
63
|
+
const normalizedRaw = platform.os === "win32" ? rawPath.replace(/\\/g, "/") : rawPath;
|
|
64
|
+
const normalizedScope = platform.os === "win32" ? scopeBoundary.replace(/\\/g, "/") : scopeBoundary;
|
|
65
|
+
// path.resolve 解析所有 .. / . / 相对路径段
|
|
66
|
+
const resolved = resolver.resolve(normalizedRaw);
|
|
67
|
+
const resolvedScope = resolver.resolve(normalizedScope);
|
|
68
|
+
// realpath 解析 symlink — 文件不存在时回退到 resolved
|
|
69
|
+
const realPath = resolver.realpath(resolved);
|
|
70
|
+
const realScope = resolver.realpath(resolvedScope);
|
|
71
|
+
// 使用 path.relative 判断包含关系:
|
|
72
|
+
// relative 结果不以 .. 开头且不是绝对路径 → 在 scope 内
|
|
73
|
+
const relative = path.relative(realScope, realPath);
|
|
74
|
+
const isWithinWorkspace = relative !== "" && !relative.startsWith("..") && !path.isAbsolute(relative);
|
|
75
|
+
let pathSafetyStatus = "safe";
|
|
76
|
+
// symlink / 逃逸检测
|
|
77
|
+
const hasSymlinkIndicator = rawPath.includes("..") || rawPath.includes("~");
|
|
78
|
+
// 大小写检测 (macOS/Windows 不区分大小写但保留形式)
|
|
79
|
+
const caseNormalized = !platform.path_case_sensitive && realPath.toLowerCase() !== realPath;
|
|
80
|
+
if (!isWithinWorkspace && hasSymlinkIndicator) {
|
|
81
|
+
pathSafetyStatus = "symlink_escape";
|
|
82
|
+
}
|
|
83
|
+
else if (!isWithinWorkspace) {
|
|
84
|
+
pathSafetyStatus = "outside_scope";
|
|
85
|
+
}
|
|
86
|
+
else if (caseNormalized) {
|
|
87
|
+
pathSafetyStatus = "case_conflict";
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
original: rawPath,
|
|
91
|
+
normalized: resolved,
|
|
92
|
+
is_within_workspace: isWithinWorkspace,
|
|
93
|
+
case_normalized: caseNormalized,
|
|
94
|
+
symlink_resolved: realPath !== resolved,
|
|
95
|
+
platform: platform.os,
|
|
96
|
+
path_safety_status: pathSafetyStatus,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 执行路径安全检查。
|
|
101
|
+
*/
|
|
102
|
+
export function checkPathSafety(pathRef, scopeBoundary) {
|
|
103
|
+
const passes = pathRef.is_within_workspace && pathRef.path_safety_status === "safe";
|
|
104
|
+
let reason = "";
|
|
105
|
+
if (pathRef.path_safety_status === "symlink_escape") {
|
|
106
|
+
reason = "路径包含 .. 或 ~,可能逃逸工作区范围";
|
|
107
|
+
}
|
|
108
|
+
else if (pathRef.path_safety_status === "outside_scope") {
|
|
109
|
+
reason = "路径在工作区范围外";
|
|
110
|
+
}
|
|
111
|
+
else if (pathRef.path_safety_status === "case_conflict") {
|
|
112
|
+
reason = "不区分大小写的平台存在大小写冲突风险";
|
|
113
|
+
}
|
|
114
|
+
else if (passes) {
|
|
115
|
+
reason = "路径安全";
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
path_ref: pathRef,
|
|
119
|
+
scope_boundary: scopeBoundary,
|
|
120
|
+
passes,
|
|
121
|
+
reason,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 生成平台兼容性报告。
|
|
126
|
+
*/
|
|
127
|
+
export function generatePlatformReport(platform, pathsToCheck, scopeBoundary) {
|
|
128
|
+
const issues = [];
|
|
129
|
+
let status = "compatible";
|
|
130
|
+
for (const rawPath of pathsToCheck) {
|
|
131
|
+
const ref = normalizePathRef(rawPath, platform, scopeBoundary);
|
|
132
|
+
if (ref.path_safety_status !== "safe") {
|
|
133
|
+
issues.push(`路径不安全: ${rawPath} (${ref.path_safety_status})`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (issues.some(i => i.includes("symlink_escape"))) {
|
|
137
|
+
status = "blocked";
|
|
138
|
+
}
|
|
139
|
+
else if (issues.length > 0) {
|
|
140
|
+
status = "needs_normalization";
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
platform_context: platform,
|
|
144
|
+
path_refs_checked: pathsToCheck.length,
|
|
145
|
+
issues_found: issues,
|
|
146
|
+
platform_compatibility_status: status,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 创建测试用的平台上下文。
|
|
151
|
+
*/
|
|
152
|
+
export function createTestPlatformContext(overrides) {
|
|
153
|
+
return {
|
|
154
|
+
os: "darwin",
|
|
155
|
+
arch: "arm64",
|
|
156
|
+
shell: "zsh",
|
|
157
|
+
path_case_sensitive: false,
|
|
158
|
+
path_separator: "/",
|
|
159
|
+
line_ending: "lf",
|
|
160
|
+
supports_symlink: true,
|
|
161
|
+
workspace_realpath: "/tmp/test-workspace",
|
|
162
|
+
...overrides,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=platform_context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform_context.js","sourceRoot":"","sources":["../../src/engine/platform_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,4 +49,24 @@ export interface DriftSummaryReport {
|
|
|
49
49
|
* 生成内容
|
|
50
50
|
*/
|
|
51
51
|
export declare function generateDriftSummary(policies: PolicyRefType[], report: DriftReport): DriftSummaryReport;
|
|
52
|
+
import type { ContractRegistryEntry, ContractGovernanceFinding } from "./contract_registry.js";
|
|
53
|
+
export interface ContractDriftEntry {
|
|
54
|
+
contract_id: string;
|
|
55
|
+
type: DriftType | "contract_not_registered" | "contract_no_test" | "contract_dependency_missing" | "contract_removed_referenced";
|
|
56
|
+
detail: string;
|
|
57
|
+
}
|
|
58
|
+
export interface ContractDriftReport {
|
|
59
|
+
total_contracts: number;
|
|
60
|
+
drift_count: number;
|
|
61
|
+
drifts: ContractDriftEntry[];
|
|
62
|
+
governance_findings: ContractGovernanceFinding[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 契约漂移扫描 — 基于 Unified Contract Registry 检测契约与代码/测试/依赖的一致性。
|
|
66
|
+
* 扩展 policy drift,使 drift 能按 contract_id 归因。
|
|
67
|
+
*/
|
|
68
|
+
export declare function detectContractDrift(contracts: ContractRegistryEntry[], existingFiles: Set<string>, knownWorkflowRefs?: Array<{
|
|
69
|
+
workflow_id: string;
|
|
70
|
+
contract_refs: string[];
|
|
71
|
+
}>): ContractDriftReport;
|
|
52
72
|
//# sourceMappingURL=policy_drift_detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy_drift_detector.d.ts","sourceRoot":"","sources":["../../src/engine/policy_drift_detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,sBAAsB,GACtB,uBAAuB,GACvB,kCAAkC,GAClC,wBAAwB,CAAC;AAE7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC3E,KAAK,SAAS,GAAG,aAAa,CAAC;AAE/B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACpC;AAgBD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,WAAW,CAyIpE;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,WAAW,GAClB,kBAAkB,CAyCpB"}
|
|
1
|
+
{"version":3,"file":"policy_drift_detector.d.ts","sourceRoot":"","sources":["../../src/engine/policy_drift_detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,sBAAsB,GACtB,uBAAuB,GACvB,kCAAkC,GAClC,wBAAwB,CAAC;AAE7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC3E,KAAK,SAAS,GAAG,aAAa,CAAC;AAE/B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACpC;AAgBD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,WAAW,CAyIpE;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,WAAW,GAClB,kBAAkB,CAyCpB;AAID,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAG/F,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,GAAG,yBAAyB,GAAG,kBAAkB,GAAG,6BAA6B,GAAG,6BAA6B,CAAC;IACjI,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,mBAAmB,EAAE,yBAAyB,EAAE,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,EAAE,EAClC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAC1E,mBAAmB,CA+ErB"}
|