soloforge 1.1.44 → 1.1.46
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 +3 -3
- package/dist/context/contracts/lifecycle_knowledge_contract.d.ts.map +1 -1
- package/dist/context/contracts/lifecycle_knowledge_contract.js +2 -2
- package/dist/context/contracts/lifecycle_knowledge_contract.js.map +1 -1
- package/dist/core/task_context/manager.d.ts +0 -8
- package/dist/core/task_context/manager.d.ts.map +1 -1
- package/dist/core/task_context/manager.js +1 -19
- package/dist/core/task_context/manager.js.map +1 -1
- package/dist/core/task_context/state_fact_classifier.d.ts +0 -8
- package/dist/core/task_context/state_fact_classifier.d.ts.map +1 -1
- package/dist/core/task_context/state_fact_classifier.js +0 -36
- package/dist/core/task_context/state_fact_classifier.js.map +1 -1
- package/dist/domain/contracts/design_artifact_pack.d.ts +0 -1
- package/dist/domain/contracts/design_artifact_pack.d.ts.map +1 -1
- package/dist/domain/contracts/design_artifact_pack.js +1 -4
- package/dist/domain/contracts/design_artifact_pack.js.map +1 -1
- package/dist/domain/index.d.ts +1 -1
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/registry.d.ts +2 -2
- package/dist/domain/registry.d.ts.map +1 -1
- package/dist/domain/types.d.ts +1 -12
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/domain/types.js +3 -0
- package/dist/domain/types.js.map +1 -1
- package/dist/gate/contracts/capability_registry.d.ts.map +1 -1
- package/dist/gate/contracts/capability_registry.js +0 -26
- package/dist/gate/contracts/capability_registry.js.map +1 -1
- package/dist/gate/contracts/control_plane_contract.d.ts +1 -1
- package/dist/gate/contracts/control_plane_contract.d.ts.map +1 -1
- package/dist/gate/contracts/control_plane_contract.js +1 -10
- package/dist/gate/contracts/control_plane_contract.js.map +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.d.ts +1 -0
- package/dist/gate/contracts/tool_invocation_contract_registry.d.ts.map +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
- package/dist/gate/executors/executors_annotation.d.ts.map +1 -1
- package/dist/gate/executors/executors_annotation.js +8 -1
- package/dist/gate/executors/executors_annotation.js.map +1 -1
- package/dist/gate/executors/executors_artifact.d.ts +1 -1
- package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
- package/dist/gate/executors/executors_artifact.js +18 -7
- package/dist/gate/executors/executors_artifact.js.map +1 -1
- package/dist/gate/executors/executors_deploy.d.ts.map +1 -1
- package/dist/gate/executors/executors_deploy.js +3 -2
- package/dist/gate/executors/executors_deploy.js.map +1 -1
- package/dist/gate/executors/executors_openapi_sync.d.ts.map +1 -1
- package/dist/gate/executors/executors_openapi_sync.js +15 -2
- package/dist/gate/executors/executors_openapi_sync.js.map +1 -1
- package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
- package/dist/gate/executors/executors_regex_scan.js +9 -0
- package/dist/gate/executors/executors_regex_scan.js.map +1 -1
- package/dist/gate/executors/executors_trace.d.ts.map +1 -1
- package/dist/gate/executors/executors_trace.js +12 -2
- package/dist/gate/executors/executors_trace.js.map +1 -1
- package/dist/gate/index.d.ts +0 -2
- package/dist/gate/index.d.ts.map +1 -1
- package/dist/gate/index.js +0 -1
- package/dist/gate/index.js.map +1 -1
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +1 -3
- package/dist/server/tools/index.js.map +1 -1
- package/dist/server/tools/lazy_loaders.d.ts +0 -23
- package/dist/server/tools/lazy_loaders.d.ts.map +1 -1
- package/dist/server/tools/lazy_loaders.js +2 -33
- package/dist/server/tools/lazy_loaders.js.map +1 -1
- package/dist/server/tools/middleware.d.ts +2 -5
- package/dist/server/tools/middleware.d.ts.map +1 -1
- package/dist/server/tools/middleware.js +3 -33
- package/dist/server/tools/middleware.js.map +1 -1
- package/dist/server/tools/sf_task.d.ts.map +1 -1
- package/dist/server/tools/sf_task.js +9 -8
- package/dist/server/tools/sf_task.js.map +1 -1
- package/dist/server/tools/types.d.ts +0 -2
- package/dist/server/tools/types.d.ts.map +1 -1
- package/dist/types/pipeline_types.d.ts +1 -9
- package/dist/types/pipeline_types.d.ts.map +1 -1
- package/dist/verify/audit/verifier.d.ts.map +1 -1
- package/dist/verify/audit/verifier.js +0 -33
- package/dist/verify/audit/verifier.js.map +1 -1
- package/dist/verify/index.d.ts +1 -4
- package/dist/verify/index.d.ts.map +1 -1
- package/dist/verify/index.js +0 -3
- package/dist/verify/index.js.map +1 -1
- package/dist/verify/types.d.ts +0 -21
- package/dist/verify/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/shared//345/206/263/347/255/226/347/275/221/345/205/263.md +7 -21
- package/dist/context/engine/dependency_scanner.d.ts +0 -23
- package/dist/context/engine/dependency_scanner.d.ts.map +0 -1
- package/dist/context/engine/dependency_scanner.js +0 -309
- package/dist/context/engine/dependency_scanner.js.map +0 -1
- package/dist/context/engine/exploration.d.ts +0 -194
- package/dist/context/engine/exploration.d.ts.map +0 -1
- package/dist/context/engine/exploration.js +0 -712
- package/dist/context/engine/exploration.js.map +0 -1
- package/dist/context/knowledge/knowledge_acceptance_registry.d.ts +0 -42
- package/dist/context/knowledge/knowledge_acceptance_registry.d.ts.map +0 -1
- package/dist/context/knowledge/knowledge_acceptance_registry.js +0 -249
- package/dist/context/knowledge/knowledge_acceptance_registry.js.map +0 -1
- package/dist/context/knowledge/knowledge_scenario_registry.d.ts +0 -26
- package/dist/context/knowledge/knowledge_scenario_registry.d.ts.map +0 -1
- package/dist/context/knowledge/knowledge_scenario_registry.js +0 -267
- package/dist/context/knowledge/knowledge_scenario_registry.js.map +0 -1
- package/dist/context/knowledge/knowledge_sovereignty.d.ts +0 -65
- package/dist/context/knowledge/knowledge_sovereignty.d.ts.map +0 -1
- package/dist/context/knowledge/knowledge_sovereignty.js +0 -199
- package/dist/context/knowledge/knowledge_sovereignty.js.map +0 -1
- package/dist/context/team_awareness.d.ts +0 -42
- package/dist/context/team_awareness.d.ts.map +0 -1
- package/dist/context/team_awareness.js +0 -154
- package/dist/context/team_awareness.js.map +0 -1
- package/dist/context/templates/template_asset_visibility.d.ts +0 -116
- package/dist/context/templates/template_asset_visibility.d.ts.map +0 -1
- package/dist/context/templates/template_asset_visibility.js +0 -310
- package/dist/context/templates/template_asset_visibility.js.map +0 -1
- package/dist/gate/conflict_gate.d.ts +0 -53
- package/dist/gate/conflict_gate.d.ts.map +0 -1
- package/dist/gate/conflict_gate.js +0 -96
- package/dist/gate/conflict_gate.js.map +0 -1
- package/dist/gate/contracts/capability_action_advisor.d.ts +0 -34
- package/dist/gate/contracts/capability_action_advisor.d.ts.map +0 -1
- package/dist/gate/contracts/capability_action_advisor.js +0 -165
- package/dist/gate/contracts/capability_action_advisor.js.map +0 -1
- package/dist/gate/contracts/capability_state_store.d.ts +0 -121
- package/dist/gate/contracts/capability_state_store.d.ts.map +0 -1
- package/dist/gate/contracts/capability_state_store.js +0 -188
- package/dist/gate/contracts/capability_state_store.js.map +0 -1
- package/dist/gate/contracts/contract_guard.d.ts +0 -50
- package/dist/gate/contracts/contract_guard.d.ts.map +0 -1
- package/dist/gate/contracts/contract_guard.js +0 -611
- package/dist/gate/contracts/contract_guard.js.map +0 -1
- package/dist/gate/contracts/escape_report.d.ts +0 -103
- package/dist/gate/contracts/escape_report.d.ts.map +0 -1
- package/dist/gate/contracts/escape_report.js +0 -145
- package/dist/gate/contracts/escape_report.js.map +0 -1
- package/dist/gate/feasibility_checker.d.ts +0 -27
- package/dist/gate/feasibility_checker.d.ts.map +0 -1
- package/dist/gate/feasibility_checker.js +0 -114
- package/dist/gate/feasibility_checker.js.map +0 -1
- package/dist/gate/migration_guard.d.ts +0 -22
- package/dist/gate/migration_guard.d.ts.map +0 -1
- package/dist/gate/migration_guard.js +0 -277
- package/dist/gate/migration_guard.js.map +0 -1
- package/dist/gate/scope_lease.d.ts +0 -94
- package/dist/gate/scope_lease.d.ts.map +0 -1
- package/dist/gate/scope_lease.js +0 -180
- package/dist/gate/scope_lease.js.map +0 -1
- package/dist/git/git_deps.d.ts +0 -85
- package/dist/git/git_deps.d.ts.map +0 -1
- package/dist/git/git_deps.js +0 -22
- package/dist/git/git_deps.js.map +0 -1
- package/dist/git/operations.d.ts +0 -173
- package/dist/git/operations.d.ts.map +0 -1
- package/dist/git/operations.js +0 -350
- package/dist/git/operations.js.map +0 -1
- package/dist/server/tools/gate_engine.d.ts +0 -17
- package/dist/server/tools/gate_engine.d.ts.map +0 -1
- package/dist/server/tools/gate_engine.js +0 -17
- package/dist/server/tools/gate_engine.js.map +0 -1
- package/dist/server/tools/middleware/budget_check.d.ts +0 -35
- package/dist/server/tools/middleware/budget_check.d.ts.map +0 -1
- package/dist/server/tools/middleware/budget_check.js +0 -69
- package/dist/server/tools/middleware/budget_check.js.map +0 -1
- package/dist/shared/contracts/contract_registry/builtin_contracts_core.d.ts +0 -16
- package/dist/shared/contracts/contract_registry/builtin_contracts_core.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/builtin_contracts_core.js +0 -306
- package/dist/shared/contracts/contract_registry/builtin_contracts_core.js.map +0 -1
- package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.d.ts +0 -16
- package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.js +0 -304
- package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.js.map +0 -1
- package/dist/shared/contracts/contract_registry/builtin_contracts_extended.d.ts +0 -16
- package/dist/shared/contracts/contract_registry/builtin_contracts_extended.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/builtin_contracts_extended.js +0 -434
- package/dist/shared/contracts/contract_registry/builtin_contracts_extended.js.map +0 -1
- package/dist/shared/contracts/contract_registry/index.d.ts +0 -8
- package/dist/shared/contracts/contract_registry/index.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/index.js +0 -7
- package/dist/shared/contracts/contract_registry/index.js.map +0 -1
- package/dist/shared/contracts/contract_registry/registry.d.ts +0 -62
- package/dist/shared/contracts/contract_registry/registry.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/registry.js +0 -191
- package/dist/shared/contracts/contract_registry/registry.js.map +0 -1
- package/dist/shared/contracts/contract_registry/registry_internal.d.ts +0 -19
- package/dist/shared/contracts/contract_registry/registry_internal.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/registry_internal.js +0 -54
- package/dist/shared/contracts/contract_registry/registry_internal.js.map +0 -1
- package/dist/shared/contracts/contract_registry/types.d.ts +0 -47
- package/dist/shared/contracts/contract_registry/types.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/types.js +0 -5
- package/dist/shared/contracts/contract_registry/types.js.map +0 -1
- package/dist/shared/contracts/contract_registry/validation.d.ts +0 -25
- package/dist/shared/contracts/contract_registry/validation.d.ts.map +0 -1
- package/dist/shared/contracts/contract_registry/validation.js +0 -363
- package/dist/shared/contracts/contract_registry/validation.js.map +0 -1
- package/dist/shared/llm_gateway.d.ts +0 -186
- package/dist/shared/llm_gateway.d.ts.map +0 -1
- package/dist/shared/llm_gateway.js +0 -393
- package/dist/shared/llm_gateway.js.map +0 -1
- package/dist/verify/audit/audit_sampler.d.ts +0 -29
- package/dist/verify/audit/audit_sampler.d.ts.map +0 -1
- package/dist/verify/audit/audit_sampler.js +0 -42
- package/dist/verify/audit/audit_sampler.js.map +0 -1
- package/dist/verify/audit/debt_reporter.d.ts +0 -22
- package/dist/verify/audit/debt_reporter.d.ts.map +0 -1
- package/dist/verify/audit/debt_reporter.js +0 -107
- package/dist/verify/audit/debt_reporter.js.map +0 -1
- package/dist/verify/audit/debugger.d.ts +0 -25
- package/dist/verify/audit/debugger.d.ts.map +0 -1
- package/dist/verify/audit/debugger.js +0 -429
- package/dist/verify/audit/debugger.js.map +0 -1
- package/dist/verify/audit/degradation.d.ts +0 -62
- package/dist/verify/audit/degradation.d.ts.map +0 -1
- package/dist/verify/audit/degradation.js +0 -78
- package/dist/verify/audit/degradation.js.map +0 -1
- package/dist/verify/audit/developer_sovereignty.d.ts +0 -29
- package/dist/verify/audit/developer_sovereignty.d.ts.map +0 -1
- package/dist/verify/audit/developer_sovereignty.js +0 -137
- package/dist/verify/audit/developer_sovereignty.js.map +0 -1
- package/dist/verify/audit/failure_report.d.ts +0 -76
- package/dist/verify/audit/failure_report.d.ts.map +0 -1
- package/dist/verify/audit/failure_report.js +0 -145
- package/dist/verify/audit/failure_report.js.map +0 -1
- package/dist/verify/audit/governance_report.d.ts +0 -110
- package/dist/verify/audit/governance_report.d.ts.map +0 -1
- package/dist/verify/audit/governance_report.js +0 -194
- package/dist/verify/audit/governance_report.js.map +0 -1
- package/dist/verify/audit/mutation_audit.d.ts +0 -40
- package/dist/verify/audit/mutation_audit.d.ts.map +0 -1
- package/dist/verify/audit/mutation_audit.js +0 -154
- package/dist/verify/audit/mutation_audit.js.map +0 -1
- package/dist/verify/audit/risk_sampler.d.ts +0 -44
- package/dist/verify/audit/risk_sampler.d.ts.map +0 -1
- package/dist/verify/audit/risk_sampler.js +0 -80
- package/dist/verify/audit/risk_sampler.js.map +0 -1
- package/dist/verify/audit/runtime_safety.d.ts +0 -89
- package/dist/verify/audit/runtime_safety.d.ts.map +0 -1
- package/dist/verify/audit/runtime_safety.js +0 -209
- package/dist/verify/audit/runtime_safety.js.map +0 -1
- package/dist/verify/audit/semantic_evidence.d.ts +0 -36
- package/dist/verify/audit/semantic_evidence.d.ts.map +0 -1
- package/dist/verify/audit/semantic_evidence.js +0 -90
- package/dist/verify/audit/semantic_evidence.js.map +0 -1
- package/dist/verify/audit/test_generator.d.ts +0 -23
- package/dist/verify/audit/test_generator.d.ts.map +0 -1
- package/dist/verify/audit/test_generator.js +0 -278
- package/dist/verify/audit/test_generator.js.map +0 -1
- package/dist/verify/audit/test_quality.d.ts +0 -49
- package/dist/verify/audit/test_quality.d.ts.map +0 -1
- package/dist/verify/audit/test_quality.js +0 -684
- package/dist/verify/audit/test_quality.js.map +0 -1
- package/dist/verify/change_coordinator.d.ts +0 -45
- package/dist/verify/change_coordinator.d.ts.map +0 -1
- package/dist/verify/change_coordinator.js +0 -168
- package/dist/verify/change_coordinator.js.map +0 -1
- package/dist/verify/contracts/decision_contract.d.ts +0 -51
- package/dist/verify/contracts/decision_contract.d.ts.map +0 -1
- package/dist/verify/contracts/decision_contract.js +0 -70
- package/dist/verify/contracts/decision_contract.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.d.ts +0 -17
- package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js +0 -428
- package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.d.ts +0 -17
- package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js +0 -429
- package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.d.ts +0 -17
- package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.js +0 -194
- package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.d.ts +0 -17
- package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.js +0 -365
- package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/index.d.ts +0 -19
- package/dist/verify/contracts/mechanism_contract_registry/index.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/index.js +0 -21
- package/dist/verify/contracts/mechanism_contract_registry/index.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/types.d.ts +0 -33
- package/dist/verify/contracts/mechanism_contract_registry/types.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/types.js +0 -5
- package/dist/verify/contracts/mechanism_contract_registry/types.js.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/validation.d.ts +0 -38
- package/dist/verify/contracts/mechanism_contract_registry/validation.d.ts.map +0 -1
- package/dist/verify/contracts/mechanism_contract_registry/validation.js +0 -136
- package/dist/verify/contracts/mechanism_contract_registry/validation.js.map +0 -1
- package/templates/shared/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +0 -54
- package/templates/shared//346/265/201/345/274/217/345/277/203/350/267/263.md +0 -64
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration Guard — 模块模块。
|
|
3
|
-
*
|
|
4
|
-
* 职责边界:
|
|
5
|
-
* - 负责:analyzeMigration 等 模块职责
|
|
6
|
-
* - 不负责:不属于本模块的职责由对应模块承担
|
|
7
|
-
*
|
|
8
|
-
* 被谁调用:上层模块按需调用
|
|
9
|
-
* 调用谁:index、logger
|
|
10
|
-
*
|
|
11
|
-
* 数据流:输入 → analyzeMigration 处理 → 输出
|
|
12
|
-
* 持久化:无持久化(纯计算/内存态)
|
|
13
|
-
*/
|
|
14
|
-
import { debug } from "../shared/logger.js";
|
|
15
|
-
/**
|
|
16
|
-
* 数据库迁移守卫 — 逐行分析 SQL 迁移脚本,检测高风险操作(DROP TABLE、DELETE 无 WHERE 等),
|
|
17
|
-
* 并生成中文风险摘要和回滚建议。纯规则匹配,零 AI 依赖。
|
|
18
|
-
*/
|
|
19
|
-
/** 回滚建议模板 — 按 SQL 语句类型映射到对应的回滚操作建议 */
|
|
20
|
-
// ── 回滚建议模板(按语句类型索引) ──
|
|
21
|
-
const ROLLBACK_SUGGESTIONS = {
|
|
22
|
-
DROP_TABLE: "恢复数据需要从备份还原,建议先创建备份",
|
|
23
|
-
DROP_COLUMN: "此操作不可逆,建议先迁移数据到新列",
|
|
24
|
-
DELETE_NO_WHERE: "建议添加 WHERE 条件或使用事务包装",
|
|
25
|
-
ALTER_COLUMN: "修改列类型前建议备份数据,并验证兼容性",
|
|
26
|
-
TRUNCATE: "清空操作不可逆,建议先创建数据备份",
|
|
27
|
-
ADD_NOT_NULL: "建议添加 DEFAULT 值或分步执行(先加可为空列→回填→改非空)",
|
|
28
|
-
RENAME: "重命名操作需确认无其他代码引用该名称",
|
|
29
|
-
ADD_INDEX: "大表添加索引可能造成长时间锁表,建议在低峰期执行",
|
|
30
|
-
ADD_FK: "添加外键前建议确认引用完整性,并在低峰期执行",
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* 从 SQL 行中提取表名 — 支持 TABLE/FROM/INTO 三种常见语法位置。
|
|
34
|
-
* @param line - 已转大写的 SQL 行
|
|
35
|
-
* @returns 提取到的表名,未匹配时返回 undefined
|
|
36
|
-
*/
|
|
37
|
-
function extractTableFrom(line) {
|
|
38
|
-
// TABLE <name>(覆盖 DROP TABLE、ALTER TABLE、CREATE TABLE、RENAME TABLE)
|
|
39
|
-
const tableMatch = line.match(/TABLE\s+(\w+)/);
|
|
40
|
-
if (tableMatch)
|
|
41
|
-
return tableMatch[1];
|
|
42
|
-
// FROM <name>(覆盖 DELETE FROM、INSERT INTO)
|
|
43
|
-
const fromMatch = line.match(/FROM\s+(\w+)/);
|
|
44
|
-
if (fromMatch)
|
|
45
|
-
return fromMatch[1];
|
|
46
|
-
// INTO <name>(覆盖 INSERT INTO)
|
|
47
|
-
const intoMatch = line.match(/INTO\s+(\w+)/);
|
|
48
|
-
if (intoMatch)
|
|
49
|
-
return intoMatch[1];
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
/** 高风险规则集 — 检测 DROP TABLE、DROP COLUMN、修改列类型、DELETE 无 WHERE、TRUNCATE 等危险操作 */
|
|
53
|
-
const CRITICAL_RULES = [
|
|
54
|
-
{
|
|
55
|
-
test: (upper) => /DROP\s+TABLE/.test(upper),
|
|
56
|
-
type: "DROP_TABLE",
|
|
57
|
-
risk: "critical",
|
|
58
|
-
description: "删除表操作,数据不可恢复",
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
test: (upper) => /DROP\s+COLUMN/.test(upper),
|
|
62
|
-
type: "DROP_COLUMN",
|
|
63
|
-
risk: "critical",
|
|
64
|
-
description: "删除列操作,数据不可恢复",
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
test: (upper, _raw) => {
|
|
68
|
-
if (!/ALTER\s+COLUMN/.test(upper) && !/ALTER\s+TABLE\b/.test(upper))
|
|
69
|
-
return false;
|
|
70
|
-
// 检测列类型变更模式: TYPE、USING、SET DATA TYPE 关键字
|
|
71
|
-
return /TYPE\s|SET\s+DATA\s+TYPE\s|USING\s/.test(upper);
|
|
72
|
-
},
|
|
73
|
-
type: "ALTER_COLUMN",
|
|
74
|
-
risk: "critical",
|
|
75
|
-
description: "修改列类型可能导致数据丢失",
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
test: (upper) => /MODIFY\s+COLUMN/.test(upper),
|
|
79
|
-
type: "ALTER_COLUMN",
|
|
80
|
-
risk: "critical",
|
|
81
|
-
description: "MySQL MODIFY COLUMN 修改列类型可能导致数据丢失",
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
test: (upper) => /CHANGE\s+COLUMN/.test(upper),
|
|
85
|
-
type: "ALTER_COLUMN",
|
|
86
|
-
risk: "critical",
|
|
87
|
-
description: "MySQL CHANGE COLUMN 修改列定义可能导致数据丢失",
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
test: (upper, _raw, _lines, _lineIndex) => {
|
|
91
|
-
if (!/DELETE\s+FROM/.test(upper))
|
|
92
|
-
return false;
|
|
93
|
-
// 当前行无 WHERE — 向后预查最多 10 行,寻找 WHERE 子句或语句结束符(;)
|
|
94
|
-
if (/WHERE\b/.test(upper))
|
|
95
|
-
return false;
|
|
96
|
-
// 向后预查最多 10 行,若遇到分号则语句结束
|
|
97
|
-
const lines = _lines;
|
|
98
|
-
const startIdx = _lineIndex;
|
|
99
|
-
const lookAheadLimit = Math.min(lines.length, startIdx + 10);
|
|
100
|
-
for (let j = startIdx + 1; j < lookAheadLimit; j++) {
|
|
101
|
-
const futureLine = lines[j].trim().toUpperCase();
|
|
102
|
-
if (futureLine.startsWith("--"))
|
|
103
|
-
continue; // 跳过注释行
|
|
104
|
-
if (/WHERE\b/.test(futureLine))
|
|
105
|
-
return false;
|
|
106
|
-
if (/;\s*$/.test(futureLine) || futureLine.endsWith(";"))
|
|
107
|
-
break; // 语句结束
|
|
108
|
-
}
|
|
109
|
-
return true;
|
|
110
|
-
},
|
|
111
|
-
type: "DELETE_NO_WHERE",
|
|
112
|
-
risk: "critical",
|
|
113
|
-
description: "无条件删除,将清空表数据",
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
test: (upper) => /TRUNCATE\s+TABLE/.test(upper) || /TRUNCATE\b/.test(upper),
|
|
117
|
-
type: "TRUNCATE",
|
|
118
|
-
risk: "critical",
|
|
119
|
-
description: "清空表操作",
|
|
120
|
-
},
|
|
121
|
-
];
|
|
122
|
-
/** 警告规则集 — 检测 ADD COLUMN 无 DEFAULT 的 NOT NULL、RENAME、添加索引、添加外键等需谨慎操作 */
|
|
123
|
-
const WARNING_RULES = [
|
|
124
|
-
{
|
|
125
|
-
test: (upper, _raw) => {
|
|
126
|
-
if (!/ADD\s+COLUMN/.test(upper))
|
|
127
|
-
return false;
|
|
128
|
-
// 存在 NOT NULL 但无 DEFAULT
|
|
129
|
-
return /NOT\s+NULL/.test(upper) && !/DEFAULT\s/.test(upper);
|
|
130
|
-
},
|
|
131
|
-
type: "ADD_NOT_NULL",
|
|
132
|
-
risk: "warning",
|
|
133
|
-
description: "添加非空列无默认值,需回填数据",
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
test: (upper) => /RENAME\s+(TABLE|COLUMN)/.test(upper),
|
|
137
|
-
type: "RENAME",
|
|
138
|
-
risk: "warning",
|
|
139
|
-
description: "重命名操作,需确认无其他引用",
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
test: (upper) => /ADD\s+(UNIQUE\s+)?INDEX|CREATE\s+(UNIQUE\s+)?INDEX/.test(upper),
|
|
143
|
-
type: "ADD_INDEX",
|
|
144
|
-
risk: "warning",
|
|
145
|
-
description: "添加索引可能导致锁表",
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
test: (upper) => /ADD\s+CONSTRAINT\b/.test(upper) && /FOREIGN\s+KEY/.test(upper),
|
|
149
|
-
type: "ADD_FK",
|
|
150
|
-
risk: "warning",
|
|
151
|
-
description: "添加外键约束,需确认引用完整性",
|
|
152
|
-
},
|
|
153
|
-
];
|
|
154
|
-
/** 安全规则集 — 检测 CREATE TABLE、ADD COLUMN(可空/有默认值)、INSERT、COMMENT 等低风险操作 */
|
|
155
|
-
const SAFE_RULES = [
|
|
156
|
-
{
|
|
157
|
-
test: (upper) => /CREATE\s+TABLE/.test(upper),
|
|
158
|
-
type: "CREATE_TABLE",
|
|
159
|
-
risk: "safe",
|
|
160
|
-
description: "创建表操作",
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
test: (upper, _raw) => {
|
|
164
|
-
if (!/ADD\s+COLUMN/.test(upper))
|
|
165
|
-
return false;
|
|
166
|
-
// 明确指定为可空,或有默认值
|
|
167
|
-
const hasNull = /\bNULL\b/.test(upper) && !/NOT\s+NULL/.test(upper);
|
|
168
|
-
const hasDefault = /DEFAULT\s/.test(upper);
|
|
169
|
-
return hasNull || hasDefault;
|
|
170
|
-
},
|
|
171
|
-
type: "ADD_COLUMN",
|
|
172
|
-
risk: "safe",
|
|
173
|
-
description: "添加列操作",
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
test: (upper) => /INSERT\s+INTO/.test(upper),
|
|
177
|
-
type: "INSERT",
|
|
178
|
-
risk: "safe",
|
|
179
|
-
description: "插入数据操作",
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
test: (upper) => /COMMENT\s+ON/.test(upper),
|
|
183
|
-
type: "COMMENT",
|
|
184
|
-
risk: "safe",
|
|
185
|
-
description: "添加注释操作",
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
test: (upper) => {
|
|
189
|
-
// ALTER TABLE ... ADD COLUMN ... DEFAULT(安全变体)
|
|
190
|
-
return /ALTER\s+TABLE/.test(upper) && /ADD\s+COLUMN/.test(upper) && /DEFAULT\s/.test(upper);
|
|
191
|
-
},
|
|
192
|
-
type: "ADD_COLUMN_DEFAULT",
|
|
193
|
-
risk: "safe",
|
|
194
|
-
description: "添加带默认值的列",
|
|
195
|
-
},
|
|
196
|
-
];
|
|
197
|
-
// 合并所有规则,按优先级排列(critical → warning → safe),每行匹配到第一条规则即停止
|
|
198
|
-
const ALL_RULES = [...CRITICAL_RULES, ...WARNING_RULES, ...SAFE_RULES];
|
|
199
|
-
// ── 公共 API ──
|
|
200
|
-
/**
|
|
201
|
-
* 分析 SQL 迁移脚本 — 逐行匹配规则,生成风险评级、语句列表和回滚建议。
|
|
202
|
-
* @param content - SQL 迁移文件内容
|
|
203
|
-
* @param filename - 文件名(用于结果标识)
|
|
204
|
-
* @returns 迁移分析结果,包含风险等级(critical/warning/safe)、语句列表、回滚建议和中文摘要
|
|
205
|
-
*/
|
|
206
|
-
export function analyzeMigration(content, filename) {
|
|
207
|
-
debug("迁移守卫", `开始分析 ${filename}`);
|
|
208
|
-
const lines = content.split("\n");
|
|
209
|
-
const statements = [];
|
|
210
|
-
const seenRollbackSuggestions = new Set();
|
|
211
|
-
if (lines.length === 0) {
|
|
212
|
-
debug("迁移守卫", "文件内容为空", filename);
|
|
213
|
-
}
|
|
214
|
-
for (let i = 0; i < lines.length; i++) {
|
|
215
|
-
const raw = lines[i].trim();
|
|
216
|
-
// 跳过空行和纯注释行
|
|
217
|
-
if (raw === "" || raw.startsWith("--"))
|
|
218
|
-
continue;
|
|
219
|
-
const upper = raw.toUpperCase();
|
|
220
|
-
// 按优先级顺序尝试匹配规则(critical → warning → safe),首条命中即终止
|
|
221
|
-
for (const rule of ALL_RULES) {
|
|
222
|
-
if (rule.test(upper, raw, lines, i)) {
|
|
223
|
-
const table = extractTableFrom(upper);
|
|
224
|
-
statements.push({
|
|
225
|
-
line: i + 1,
|
|
226
|
-
type: rule.type,
|
|
227
|
-
table,
|
|
228
|
-
risk: rule.risk,
|
|
229
|
-
description: rule.description,
|
|
230
|
-
});
|
|
231
|
-
// 收集唯一的回滚建议
|
|
232
|
-
const suggestion = ROLLBACK_SUGGESTIONS[rule.type];
|
|
233
|
-
if (suggestion) {
|
|
234
|
-
seenRollbackSuggestions.add(suggestion);
|
|
235
|
-
}
|
|
236
|
-
// 每行仅匹配第一条规则
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
// 确定整体风险等级: 有 critical 则为 critical,有 warning 则为 warning,否则 safe
|
|
242
|
-
const hasCritical = statements.some((s) => s.risk === "critical");
|
|
243
|
-
const hasWarning = statements.some((s) => s.risk === "warning");
|
|
244
|
-
if (hasCritical)
|
|
245
|
-
debug("迁移守卫", `检测到高风险语句,请人工审核 ${filename}`);
|
|
246
|
-
else if (hasWarning)
|
|
247
|
-
debug("迁移守卫", `检测到警告级语句 ${filename}`);
|
|
248
|
-
const risk_level = hasCritical
|
|
249
|
-
? "critical"
|
|
250
|
-
: hasWarning
|
|
251
|
-
? "warning"
|
|
252
|
-
: "safe";
|
|
253
|
-
// 按风险等级统计数量
|
|
254
|
-
const criticalCount = statements.filter((s) => s.risk === "critical").length;
|
|
255
|
-
const warningCount = statements.filter((s) => s.risk === "warning").length;
|
|
256
|
-
const safeCount = statements.filter((s) => s.risk === "safe").length;
|
|
257
|
-
// 生成中文摘要
|
|
258
|
-
const summary = `检测到 ${statements.length} 条语句:${criticalCount} 条高风险,${warningCount} 条警告,${safeCount} 条安全`;
|
|
259
|
-
// 回滚建议按原始出现顺序排列,仅保留非安全操作的唯一建议
|
|
260
|
-
const rollbackSuggestions = statements
|
|
261
|
-
.filter((s) => s.risk !== "safe" && ROLLBACK_SUGGESTIONS[s.type])
|
|
262
|
-
.reduce((acc, s) => {
|
|
263
|
-
const text = ROLLBACK_SUGGESTIONS[s.type];
|
|
264
|
-
if (text && !acc.includes(text))
|
|
265
|
-
acc.push(text);
|
|
266
|
-
return acc;
|
|
267
|
-
}, []);
|
|
268
|
-
debug("迁移守卫", `分析完成 ${filename} — ${summary}`);
|
|
269
|
-
return {
|
|
270
|
-
file: filename,
|
|
271
|
-
risk_level,
|
|
272
|
-
statements,
|
|
273
|
-
rollback_suggestions: rollbackSuggestions,
|
|
274
|
-
summary,
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
//# sourceMappingURL=migration_guard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migration_guard.js","sourceRoot":"","sources":["../../src/gate/migration_guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C;;;GAGG;AAEH,sCAAsC;AACtC,wBAAwB;AAExB,MAAM,oBAAoB,GAA2B;IACnD,UAAU,EAAE,qBAAqB;IACjC,WAAW,EAAE,mBAAmB;IAChC,eAAe,EAAE,sBAAsB;IACvC,YAAY,EAAE,qBAAqB;IACnC,QAAQ,EAAE,mBAAmB;IAC7B,YAAY,EAAE,oCAAoC;IAClD,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,0BAA0B;IACrC,MAAM,EAAE,wBAAwB;CACjC,CAAC;AAEF;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAErC,0CAA0C;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IAEnC,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IAEnC,OAAO,SAAS,CAAC;AACnB,CAAC;AAUD,6EAA6E;AAC7E,MAAM,cAAc,GAAkB;IACpC;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,cAAc;KAC5B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,cAAc;KAC5B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAClF,0CAA0C;YAC1C,OAAO,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,eAAe;KAC7B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9C,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,mCAAmC;KACjD;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9C,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,mCAAmC;KACjD;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/C,gDAAgD;YAChD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACxC,yBAAyB;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC;YACrB,MAAM,QAAQ,GAAG,UAAU,CAAC;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;YAC7D,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACjD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,QAAQ;gBACnD,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,OAAO;YAC1E,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,cAAc;KAC5B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3E,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,OAAO;KACrB;CACF,CAAC;AAEF,wEAAwE;AACxE,MAAM,aAAa,GAAkB;IACnC;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9C,yBAAyB;YACzB,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC;QACtD,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC;QACjF,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;KAC1B;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAChF,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,GAAkB;IAChC;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,OAAO;KACrB;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9C,gBAAgB;YAChB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,OAAO,IAAI,UAAU,CAAC;QAC/B,CAAC;QACD,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,OAAO;KACrB;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,QAAQ;KACtB;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,QAAQ;KACtB;IACD;QACE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACd,+CAA+C;YAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,UAAU;KACxB;CACF,CAAC;AAEF,yDAAyD;AACzD,MAAM,SAAS,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,aAAa,EAAE,GAAG,UAAU,CAAC,CAAC;AAEvE,eAAe;AAEf;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IAChE,KAAK,CAAC,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;IAElD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5B,YAAY;QACZ,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAEjD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAEhC,kDAAkD;QAClD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACtC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK;oBACL,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAC;gBAEH,YAAY;gBACZ,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,UAAU,EAAE,CAAC;oBACf,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,CAAC;gBAED,aAAa;gBACb,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAChE,IAAI,WAAW;QAAE,KAAK,CAAC,MAAM,EAAE,kBAAkB,QAAQ,EAAE,CAAC,CAAC;SACxD,IAAI,UAAU;QAAE,KAAK,CAAC,MAAM,EAAE,YAAY,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAoC,WAAW;QAC7D,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU;YACV,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC;IAEb,YAAY;IACZ,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAErE,SAAS;IACT,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,MAAM,QAAQ,aAAa,SAAS,YAAY,QAAQ,SAAS,MAAM,CAAC;IAE1G,8BAA8B;IAC9B,MAAM,mBAAmB,GAAG,UAAU;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChE,MAAM,CAAW,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAET,KAAK,CAAC,MAAM,EAAE,QAAQ,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;IAE/C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,UAAU;QACV,oBAAoB,EAAE,mBAAmB;QACzC,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scope Lease — 管线层模块。
|
|
3
|
-
*
|
|
4
|
-
* 职责边界:
|
|
5
|
-
* - 负责:LeaseEntry 等 管线层职责
|
|
6
|
-
* - 不负责:不属于本模块的职责由对应模块承担
|
|
7
|
-
*
|
|
8
|
-
* 被谁调用:状态机、工具层
|
|
9
|
-
* 调用谁:node:fs、node:path、logger、helpers、path_scope_utils
|
|
10
|
-
*
|
|
11
|
-
* 数据流:用户意图 → 解析/扩展 → 执行 → 输出
|
|
12
|
-
* 持久化:读写本地文件(详见代码内路径)
|
|
13
|
-
*/
|
|
14
|
-
/** 租约条目 */
|
|
15
|
-
export interface LeaseEntry {
|
|
16
|
-
task_id: string;
|
|
17
|
-
file_paths: string[];
|
|
18
|
-
acquired_at: string;
|
|
19
|
-
released_at: string | null;
|
|
20
|
-
}
|
|
21
|
-
/** 租约冲突信息 */
|
|
22
|
-
export interface LeaseConflict {
|
|
23
|
-
file_path: string;
|
|
24
|
-
leased_by: string;
|
|
25
|
-
lease_acquired_at: string;
|
|
26
|
-
severity: "advisory";
|
|
27
|
-
message: string;
|
|
28
|
-
}
|
|
29
|
-
/** 租约摘要 */
|
|
30
|
-
export interface LeaseSummary {
|
|
31
|
-
active_leases: number;
|
|
32
|
-
total_files_leased: number;
|
|
33
|
-
leased_by_task: Record<string, string[]>;
|
|
34
|
-
}
|
|
35
|
-
/** 范围租约存储 */
|
|
36
|
-
export declare class ScopeLeaseStore {
|
|
37
|
-
private filePath;
|
|
38
|
-
private leases;
|
|
39
|
-
private loaded;
|
|
40
|
-
/**
|
|
41
|
-
* 创建范围租约存储实例。
|
|
42
|
-
* @param stateDir - 状态存储目录路径
|
|
43
|
-
*/
|
|
44
|
-
constructor(stateDir: string);
|
|
45
|
-
/** 从磁盘加载租约数据(首次访问时自动调用) */
|
|
46
|
-
private ensureLoaded;
|
|
47
|
-
/** 将租约数据持久化到磁盘 */
|
|
48
|
-
private persist;
|
|
49
|
-
/**
|
|
50
|
-
* 为任务获取文件范围租约。
|
|
51
|
-
* @param taskId - 任务 ID
|
|
52
|
-
* @param filePaths - 任务操作的文件路径列表
|
|
53
|
-
* @returns 创建的租约条目
|
|
54
|
-
*/
|
|
55
|
-
acquire(taskId: string, filePaths: string[]): LeaseEntry;
|
|
56
|
-
/**
|
|
57
|
-
* 释放任务的文件范围租约。
|
|
58
|
-
* 释放前检查是否有其他活跃任务持有重叠路径。
|
|
59
|
-
* @param taskId - 任务 ID
|
|
60
|
-
* @returns 释放结果,包含是否成功和冲突警告
|
|
61
|
-
*/
|
|
62
|
-
release(taskId: string): {
|
|
63
|
-
released: boolean;
|
|
64
|
-
warnings: string[];
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* 查询指定文件是否存在与其他任务的租约冲突。
|
|
68
|
-
* @param taskId - 当前任务 ID(排除自身)
|
|
69
|
-
* @param filePath - 要查询的文件路径
|
|
70
|
-
* @returns 租约冲突信息,无冲突时返回 null
|
|
71
|
-
*/
|
|
72
|
-
queryLease(taskId: string, filePath: string): LeaseConflict | null;
|
|
73
|
-
/**
|
|
74
|
-
* 获取所有活跃的租约列表。
|
|
75
|
-
* @returns 活跃租约条目数组
|
|
76
|
-
*/
|
|
77
|
-
getActiveLeases(): LeaseEntry[];
|
|
78
|
-
/**
|
|
79
|
-
* 获取指定任务的租约信息。
|
|
80
|
-
* @param taskId - 任务 ID
|
|
81
|
-
* @returns 对应的租约条目,未找到时返回 null
|
|
82
|
-
*/
|
|
83
|
-
getLeaseForTask(taskId: string): LeaseEntry | null;
|
|
84
|
-
/**
|
|
85
|
-
* 获取租约摘要统计。
|
|
86
|
-
* @returns 租约摘要信息
|
|
87
|
-
*/
|
|
88
|
-
getSummary(): LeaseSummary;
|
|
89
|
-
/**
|
|
90
|
-
* 清除所有租约数据。
|
|
91
|
-
*/
|
|
92
|
-
clear(): void;
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=scope_lease.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope_lease.d.ts","sourceRoot":"","sources":["../../src/gate/scope_lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,aAAa;AACb,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;gBACS,QAAQ,EAAE,MAAM;IAK5B,2BAA2B;IAC3B,OAAO,CAAC,YAAY;IAgBpB,kBAAkB;IAClB,OAAO,CAAC,OAAO;IAOf;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,UAAU;IAexD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IA0BlE;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAoBlE;;;OAGG;IACH,eAAe,IAAI,UAAU,EAAE;IAK/B;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAKlD;;;OAGG;IACH,UAAU,IAAI,YAAY;IAe1B;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
|
package/dist/gate/scope_lease.js
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scope Lease — 管线层模块。
|
|
3
|
-
*
|
|
4
|
-
* 职责边界:
|
|
5
|
-
* - 负责:LeaseEntry 等 管线层职责
|
|
6
|
-
* - 不负责:不属于本模块的职责由对应模块承担
|
|
7
|
-
*
|
|
8
|
-
* 被谁调用:状态机、工具层
|
|
9
|
-
* 调用谁:node:fs、node:path、logger、helpers、path_scope_utils
|
|
10
|
-
*
|
|
11
|
-
* 数据流:用户意图 → 解析/扩展 → 执行 → 输出
|
|
12
|
-
* 持久化:读写本地文件(详见代码内路径)
|
|
13
|
-
*/
|
|
14
|
-
import fs from "node:fs";
|
|
15
|
-
import path from "node:path";
|
|
16
|
-
import { debug } from "../shared/logger.js";
|
|
17
|
-
import { safeJsonParse } from "../shared/helpers.js";
|
|
18
|
-
import { isPathInScope } from "../shared/path_scope_utils.js";
|
|
19
|
-
/** 范围租约存储 */
|
|
20
|
-
export class ScopeLeaseStore {
|
|
21
|
-
filePath;
|
|
22
|
-
leases = new Map();
|
|
23
|
-
loaded = false;
|
|
24
|
-
/**
|
|
25
|
-
* 创建范围租约存储实例。
|
|
26
|
-
* @param stateDir - 状态存储目录路径
|
|
27
|
-
*/
|
|
28
|
-
constructor(stateDir) {
|
|
29
|
-
fs.mkdirSync(stateDir, { recursive: true });
|
|
30
|
-
this.filePath = path.join(stateDir, "scope-leases.json");
|
|
31
|
-
}
|
|
32
|
-
/** 从磁盘加载租约数据(首次访问时自动调用) */
|
|
33
|
-
ensureLoaded() {
|
|
34
|
-
if (this.loaded)
|
|
35
|
-
return;
|
|
36
|
-
this.loaded = true;
|
|
37
|
-
try {
|
|
38
|
-
const data = fs.readFileSync(this.filePath, "utf-8");
|
|
39
|
-
const entries = safeJsonParse(data) ?? [];
|
|
40
|
-
for (const e of entries) {
|
|
41
|
-
if (e.released_at === null) {
|
|
42
|
-
this.leases.set(e.task_id, e);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
this.leases = new Map();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/** 将租约数据持久化到磁盘 */
|
|
51
|
-
persist() {
|
|
52
|
-
const entries = [...this.leases.values()];
|
|
53
|
-
const tmpPath = `${this.filePath}.tmp`;
|
|
54
|
-
fs.writeFileSync(tmpPath, JSON.stringify(entries, null, 2));
|
|
55
|
-
fs.renameSync(tmpPath, this.filePath);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* 为任务获取文件范围租约。
|
|
59
|
-
* @param taskId - 任务 ID
|
|
60
|
-
* @param filePaths - 任务操作的文件路径列表
|
|
61
|
-
* @returns 创建的租约条目
|
|
62
|
-
*/
|
|
63
|
-
acquire(taskId, filePaths) {
|
|
64
|
-
debug("ScopeLease", "获取租约", taskId, "文件数:", filePaths.length);
|
|
65
|
-
this.ensureLoaded();
|
|
66
|
-
const resolved = filePaths.map(f => path.resolve(f));
|
|
67
|
-
const entry = {
|
|
68
|
-
task_id: taskId,
|
|
69
|
-
file_paths: resolved,
|
|
70
|
-
acquired_at: new Date().toISOString(),
|
|
71
|
-
released_at: null,
|
|
72
|
-
};
|
|
73
|
-
this.leases.set(taskId, entry);
|
|
74
|
-
this.persist();
|
|
75
|
-
return entry;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* 释放任务的文件范围租约。
|
|
79
|
-
* 释放前检查是否有其他活跃任务持有重叠路径。
|
|
80
|
-
* @param taskId - 任务 ID
|
|
81
|
-
* @returns 释放结果,包含是否成功和冲突警告
|
|
82
|
-
*/
|
|
83
|
-
release(taskId) {
|
|
84
|
-
debug("ScopeLease", "释放租约", taskId);
|
|
85
|
-
this.ensureLoaded();
|
|
86
|
-
const entry = this.leases.get(taskId);
|
|
87
|
-
if (!entry || entry.released_at) {
|
|
88
|
-
return { released: false, warnings: [] };
|
|
89
|
-
}
|
|
90
|
-
// 检查是否有其他活跃任务依赖相同文件路径
|
|
91
|
-
const warnings = [];
|
|
92
|
-
for (const [otherId, other] of this.leases) {
|
|
93
|
-
if (otherId === taskId || other.released_at)
|
|
94
|
-
continue;
|
|
95
|
-
const overlap = entry.file_paths.some(p => other.file_paths.some(op => op === p || op.startsWith(p + "/") || p.startsWith(op + "/")));
|
|
96
|
-
if (overlap) {
|
|
97
|
-
warnings.push(`任务 ${otherId} 的 scope 与本任务有重叠,释放后可能出现写入冲突`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
entry.released_at = new Date().toISOString();
|
|
101
|
-
this.leases.delete(taskId);
|
|
102
|
-
this.persist();
|
|
103
|
-
return { released: true, warnings };
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* 查询指定文件是否存在与其他任务的租约冲突。
|
|
107
|
-
* @param taskId - 当前任务 ID(排除自身)
|
|
108
|
-
* @param filePath - 要查询的文件路径
|
|
109
|
-
* @returns 租约冲突信息,无冲突时返回 null
|
|
110
|
-
*/
|
|
111
|
-
queryLease(taskId, filePath) {
|
|
112
|
-
this.ensureLoaded();
|
|
113
|
-
const resolved = path.resolve(filePath);
|
|
114
|
-
for (const [ownerId, entry] of this.leases) {
|
|
115
|
-
if (ownerId === taskId)
|
|
116
|
-
continue;
|
|
117
|
-
for (const leased of entry.file_paths) {
|
|
118
|
-
if (leased === resolved || isParentPath(leased, resolved)) {
|
|
119
|
-
return {
|
|
120
|
-
file_path: resolved,
|
|
121
|
-
leased_by: ownerId,
|
|
122
|
-
lease_acquired_at: entry.acquired_at,
|
|
123
|
-
severity: "advisory",
|
|
124
|
-
message: `advisory: file is in scope of task ${ownerId} (leased since ${entry.acquired_at})`,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* 获取所有活跃的租约列表。
|
|
133
|
-
* @returns 活跃租约条目数组
|
|
134
|
-
*/
|
|
135
|
-
getActiveLeases() {
|
|
136
|
-
this.ensureLoaded();
|
|
137
|
-
return [...this.leases.values()];
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* 获取指定任务的租约信息。
|
|
141
|
-
* @param taskId - 任务 ID
|
|
142
|
-
* @returns 对应的租约条目,未找到时返回 null
|
|
143
|
-
*/
|
|
144
|
-
getLeaseForTask(taskId) {
|
|
145
|
-
this.ensureLoaded();
|
|
146
|
-
return this.leases.get(taskId) ?? null;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* 获取租约摘要统计。
|
|
150
|
-
* @returns 租约摘要信息
|
|
151
|
-
*/
|
|
152
|
-
getSummary() {
|
|
153
|
-
this.ensureLoaded();
|
|
154
|
-
const leasedByTask = {};
|
|
155
|
-
let totalFiles = 0;
|
|
156
|
-
for (const [taskId, entry] of this.leases) {
|
|
157
|
-
leasedByTask[taskId] = [...entry.file_paths];
|
|
158
|
-
totalFiles += entry.file_paths.length;
|
|
159
|
-
}
|
|
160
|
-
return {
|
|
161
|
-
active_leases: this.leases.size,
|
|
162
|
-
total_files_leased: totalFiles,
|
|
163
|
-
leased_by_task: leasedByTask,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* 清除所有租约数据。
|
|
168
|
-
*/
|
|
169
|
-
clear() {
|
|
170
|
-
debug("ScopeLease", "清除所有租约");
|
|
171
|
-
this.leases.clear();
|
|
172
|
-
this.loaded = true;
|
|
173
|
-
this.persist();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
/** 判断 child 路径是否在 parent 路径下 */
|
|
177
|
-
function isParentPath(parent, child) {
|
|
178
|
-
return isPathInScope(child, parent, { caseSensitive: true });
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=scope_lease.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope_lease.js","sourceRoot":"","sources":["../../src/gate/scope_lease.ts"],"names":[],"mappings":"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"}
|
package/dist/git/git_deps.d.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git Deps — Git 集成层模块。
|
|
3
|
-
*
|
|
4
|
-
* 职责边界:
|
|
5
|
-
* - 负责:GitOperations 等 Git 集成层职责
|
|
6
|
-
* - 不负责:不属于本模块的职责由对应模块承担
|
|
7
|
-
*
|
|
8
|
-
* 被谁调用:上层模块按需调用
|
|
9
|
-
* 调用谁:operations、logger
|
|
10
|
-
*
|
|
11
|
-
* 数据流:输入 → GitOperations 处理 → 输出
|
|
12
|
-
* 持久化:无持久化(纯计算/内存态)
|
|
13
|
-
*/
|
|
14
|
-
import type { GitFileStatus, GitLogEntry, GitDiffHunk, GitBlameLine } from "./operations.js";
|
|
15
|
-
/**
|
|
16
|
-
* Git 操作依赖注入模块。
|
|
17
|
-
* @description 定义 GitOperations 接口作为抽象层,并导出基于真实 Git 命令的实现(realGitOps)。
|
|
18
|
-
* 使用依赖注入模式,便于测试时替换为 mock 实现。
|
|
19
|
-
*
|
|
20
|
-
* 位置: src/git/git_deps.ts(从 engine/core/ 移出,恢复 core/ 零反向依赖)
|
|
21
|
-
*/
|
|
22
|
-
/**
|
|
23
|
-
* Git 操作抽象接口。
|
|
24
|
-
* @description 封装所有项目需要的 Git 操作,包括仓库查询、状态检查、日志查看、
|
|
25
|
-
* 差异比较、分支管理和远程操作等。
|
|
26
|
-
*/
|
|
27
|
-
export interface GitOperations {
|
|
28
|
-
/** 检查指定目录是否为 Git 仓库 */
|
|
29
|
-
isGitRepo(cwd: string): Promise<boolean>;
|
|
30
|
-
/** 获取 Git 仓库根目录路径 */
|
|
31
|
-
getRootDir(cwd: string): Promise<string>;
|
|
32
|
-
/** 获取当前分支名称 */
|
|
33
|
-
getCurrentBranch(cwd: string): Promise<string>;
|
|
34
|
-
/** 检查工作区是否干净(无未提交变更) */
|
|
35
|
-
isClean(cwd: string): Promise<boolean>;
|
|
36
|
-
/** 获取工作区文件状态列表 */
|
|
37
|
-
getStatus(cwd: string): Promise<GitFileStatus[]>;
|
|
38
|
-
/** 获取提交日志,支持按数量、时间、作者和路径过滤 */
|
|
39
|
-
getLog(cwd: string, options?: {
|
|
40
|
-
maxCount?: number;
|
|
41
|
-
since?: string;
|
|
42
|
-
author?: string;
|
|
43
|
-
path?: string;
|
|
44
|
-
ref?: string;
|
|
45
|
-
}): Promise<GitLogEntry[]>;
|
|
46
|
-
/** 获取简短日志摘要(按作者分组统计提交数) */
|
|
47
|
-
getShortlog(cwd: string, since?: string): Promise<Array<{
|
|
48
|
-
author: string;
|
|
49
|
-
count: number;
|
|
50
|
-
}>>;
|
|
51
|
-
/** 获取差异信息(结构化 Hunk 列表) */
|
|
52
|
-
getDiff(cwd: string, options?: {
|
|
53
|
-
cached?: boolean;
|
|
54
|
-
path?: string;
|
|
55
|
-
}): Promise<GitDiffHunk[]>;
|
|
56
|
-
/** 获取指定文件的差异补丁文本 */
|
|
57
|
-
getDiffPatch(cwd: string, filePath: string, options?: {
|
|
58
|
-
cached?: boolean;
|
|
59
|
-
}): Promise<string>;
|
|
60
|
-
/** 获取指定文件的逐行 Blame 信息 */
|
|
61
|
-
getBlame(cwd: string, filePath: string): Promise<GitBlameLine[]>;
|
|
62
|
-
/** 列出所有本地分支及其当前标记 */
|
|
63
|
-
listBranches(cwd: string): Promise<Array<{
|
|
64
|
-
name: string;
|
|
65
|
-
isCurrent: boolean;
|
|
66
|
-
}>>;
|
|
67
|
-
/** 将文件添加到暂存区 */
|
|
68
|
-
add(cwd: string, paths: string[]): Promise<void>;
|
|
69
|
-
/** 创建提交,返回提交 SHA */
|
|
70
|
-
commit(cwd: string, message: string): Promise<string>;
|
|
71
|
-
/** 推送到远程仓库,返回推送结果 */
|
|
72
|
-
push(cwd: string, remote?: string, branch?: string): Promise<string>;
|
|
73
|
-
/** 获取两个分支的最新公共祖先提交 SHA */
|
|
74
|
-
getMergeBase(cwd: string, branchA: string, branchB: string): Promise<string>;
|
|
75
|
-
/** 获取远程仓库 URL,不存在则返回 null */
|
|
76
|
-
getRemoteUrl(cwd: string, remote?: string): Promise<string | null>;
|
|
77
|
-
/** 获取 HEAD 的短 commit hash */
|
|
78
|
-
getHeadCommitHash(cwd: string): Promise<string>;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* 基于真实 Git 命令的 GitOperations 实现。
|
|
82
|
-
* @description 导出 realGitOps 实例,将所有 Git 操作委托给真实的 git 命令行工具。
|
|
83
|
-
*/
|
|
84
|
-
export declare const realGitOps: GitOperations;
|
|
85
|
-
//# sourceMappingURL=git_deps.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git_deps.d.ts","sourceRoot":"","sources":["../../src/git/git_deps.ts"],"names":[],"mappings":"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"}
|