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.
Files changed (289) hide show
  1. package/README.md +3 -3
  2. package/dist/context/contracts/lifecycle_knowledge_contract.d.ts.map +1 -1
  3. package/dist/context/contracts/lifecycle_knowledge_contract.js +2 -2
  4. package/dist/context/contracts/lifecycle_knowledge_contract.js.map +1 -1
  5. package/dist/core/task_context/manager.d.ts +0 -8
  6. package/dist/core/task_context/manager.d.ts.map +1 -1
  7. package/dist/core/task_context/manager.js +1 -19
  8. package/dist/core/task_context/manager.js.map +1 -1
  9. package/dist/core/task_context/state_fact_classifier.d.ts +0 -8
  10. package/dist/core/task_context/state_fact_classifier.d.ts.map +1 -1
  11. package/dist/core/task_context/state_fact_classifier.js +0 -36
  12. package/dist/core/task_context/state_fact_classifier.js.map +1 -1
  13. package/dist/domain/contracts/design_artifact_pack.d.ts +0 -1
  14. package/dist/domain/contracts/design_artifact_pack.d.ts.map +1 -1
  15. package/dist/domain/contracts/design_artifact_pack.js +1 -4
  16. package/dist/domain/contracts/design_artifact_pack.js.map +1 -1
  17. package/dist/domain/index.d.ts +1 -1
  18. package/dist/domain/index.d.ts.map +1 -1
  19. package/dist/domain/registry.d.ts +2 -2
  20. package/dist/domain/registry.d.ts.map +1 -1
  21. package/dist/domain/types.d.ts +1 -12
  22. package/dist/domain/types.d.ts.map +1 -1
  23. package/dist/domain/types.js +3 -0
  24. package/dist/domain/types.js.map +1 -1
  25. package/dist/gate/contracts/capability_registry.d.ts.map +1 -1
  26. package/dist/gate/contracts/capability_registry.js +0 -26
  27. package/dist/gate/contracts/capability_registry.js.map +1 -1
  28. package/dist/gate/contracts/control_plane_contract.d.ts +1 -1
  29. package/dist/gate/contracts/control_plane_contract.d.ts.map +1 -1
  30. package/dist/gate/contracts/control_plane_contract.js +1 -10
  31. package/dist/gate/contracts/control_plane_contract.js.map +1 -1
  32. package/dist/gate/contracts/tool_invocation_contract_registry.d.ts +1 -0
  33. package/dist/gate/contracts/tool_invocation_contract_registry.d.ts.map +1 -1
  34. package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
  35. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  36. package/dist/gate/executors/executors_annotation.d.ts.map +1 -1
  37. package/dist/gate/executors/executors_annotation.js +8 -1
  38. package/dist/gate/executors/executors_annotation.js.map +1 -1
  39. package/dist/gate/executors/executors_artifact.d.ts +1 -1
  40. package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
  41. package/dist/gate/executors/executors_artifact.js +18 -7
  42. package/dist/gate/executors/executors_artifact.js.map +1 -1
  43. package/dist/gate/executors/executors_deploy.d.ts.map +1 -1
  44. package/dist/gate/executors/executors_deploy.js +3 -2
  45. package/dist/gate/executors/executors_deploy.js.map +1 -1
  46. package/dist/gate/executors/executors_openapi_sync.d.ts.map +1 -1
  47. package/dist/gate/executors/executors_openapi_sync.js +15 -2
  48. package/dist/gate/executors/executors_openapi_sync.js.map +1 -1
  49. package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
  50. package/dist/gate/executors/executors_regex_scan.js +9 -0
  51. package/dist/gate/executors/executors_regex_scan.js.map +1 -1
  52. package/dist/gate/executors/executors_trace.d.ts.map +1 -1
  53. package/dist/gate/executors/executors_trace.js +12 -2
  54. package/dist/gate/executors/executors_trace.js.map +1 -1
  55. package/dist/gate/index.d.ts +0 -2
  56. package/dist/gate/index.d.ts.map +1 -1
  57. package/dist/gate/index.js +0 -1
  58. package/dist/gate/index.js.map +1 -1
  59. package/dist/server/tools/index.d.ts.map +1 -1
  60. package/dist/server/tools/index.js +1 -3
  61. package/dist/server/tools/index.js.map +1 -1
  62. package/dist/server/tools/lazy_loaders.d.ts +0 -23
  63. package/dist/server/tools/lazy_loaders.d.ts.map +1 -1
  64. package/dist/server/tools/lazy_loaders.js +2 -33
  65. package/dist/server/tools/lazy_loaders.js.map +1 -1
  66. package/dist/server/tools/middleware.d.ts +2 -5
  67. package/dist/server/tools/middleware.d.ts.map +1 -1
  68. package/dist/server/tools/middleware.js +3 -33
  69. package/dist/server/tools/middleware.js.map +1 -1
  70. package/dist/server/tools/sf_task.d.ts.map +1 -1
  71. package/dist/server/tools/sf_task.js +9 -8
  72. package/dist/server/tools/sf_task.js.map +1 -1
  73. package/dist/server/tools/types.d.ts +0 -2
  74. package/dist/server/tools/types.d.ts.map +1 -1
  75. package/dist/types/pipeline_types.d.ts +1 -9
  76. package/dist/types/pipeline_types.d.ts.map +1 -1
  77. package/dist/verify/audit/verifier.d.ts.map +1 -1
  78. package/dist/verify/audit/verifier.js +0 -33
  79. package/dist/verify/audit/verifier.js.map +1 -1
  80. package/dist/verify/index.d.ts +1 -4
  81. package/dist/verify/index.d.ts.map +1 -1
  82. package/dist/verify/index.js +0 -3
  83. package/dist/verify/index.js.map +1 -1
  84. package/dist/verify/types.d.ts +0 -21
  85. package/dist/verify/types.d.ts.map +1 -1
  86. package/package.json +1 -1
  87. package/templates/shared//345/206/263/347/255/226/347/275/221/345/205/263.md +7 -21
  88. package/dist/context/engine/dependency_scanner.d.ts +0 -23
  89. package/dist/context/engine/dependency_scanner.d.ts.map +0 -1
  90. package/dist/context/engine/dependency_scanner.js +0 -309
  91. package/dist/context/engine/dependency_scanner.js.map +0 -1
  92. package/dist/context/engine/exploration.d.ts +0 -194
  93. package/dist/context/engine/exploration.d.ts.map +0 -1
  94. package/dist/context/engine/exploration.js +0 -712
  95. package/dist/context/engine/exploration.js.map +0 -1
  96. package/dist/context/knowledge/knowledge_acceptance_registry.d.ts +0 -42
  97. package/dist/context/knowledge/knowledge_acceptance_registry.d.ts.map +0 -1
  98. package/dist/context/knowledge/knowledge_acceptance_registry.js +0 -249
  99. package/dist/context/knowledge/knowledge_acceptance_registry.js.map +0 -1
  100. package/dist/context/knowledge/knowledge_scenario_registry.d.ts +0 -26
  101. package/dist/context/knowledge/knowledge_scenario_registry.d.ts.map +0 -1
  102. package/dist/context/knowledge/knowledge_scenario_registry.js +0 -267
  103. package/dist/context/knowledge/knowledge_scenario_registry.js.map +0 -1
  104. package/dist/context/knowledge/knowledge_sovereignty.d.ts +0 -65
  105. package/dist/context/knowledge/knowledge_sovereignty.d.ts.map +0 -1
  106. package/dist/context/knowledge/knowledge_sovereignty.js +0 -199
  107. package/dist/context/knowledge/knowledge_sovereignty.js.map +0 -1
  108. package/dist/context/team_awareness.d.ts +0 -42
  109. package/dist/context/team_awareness.d.ts.map +0 -1
  110. package/dist/context/team_awareness.js +0 -154
  111. package/dist/context/team_awareness.js.map +0 -1
  112. package/dist/context/templates/template_asset_visibility.d.ts +0 -116
  113. package/dist/context/templates/template_asset_visibility.d.ts.map +0 -1
  114. package/dist/context/templates/template_asset_visibility.js +0 -310
  115. package/dist/context/templates/template_asset_visibility.js.map +0 -1
  116. package/dist/gate/conflict_gate.d.ts +0 -53
  117. package/dist/gate/conflict_gate.d.ts.map +0 -1
  118. package/dist/gate/conflict_gate.js +0 -96
  119. package/dist/gate/conflict_gate.js.map +0 -1
  120. package/dist/gate/contracts/capability_action_advisor.d.ts +0 -34
  121. package/dist/gate/contracts/capability_action_advisor.d.ts.map +0 -1
  122. package/dist/gate/contracts/capability_action_advisor.js +0 -165
  123. package/dist/gate/contracts/capability_action_advisor.js.map +0 -1
  124. package/dist/gate/contracts/capability_state_store.d.ts +0 -121
  125. package/dist/gate/contracts/capability_state_store.d.ts.map +0 -1
  126. package/dist/gate/contracts/capability_state_store.js +0 -188
  127. package/dist/gate/contracts/capability_state_store.js.map +0 -1
  128. package/dist/gate/contracts/contract_guard.d.ts +0 -50
  129. package/dist/gate/contracts/contract_guard.d.ts.map +0 -1
  130. package/dist/gate/contracts/contract_guard.js +0 -611
  131. package/dist/gate/contracts/contract_guard.js.map +0 -1
  132. package/dist/gate/contracts/escape_report.d.ts +0 -103
  133. package/dist/gate/contracts/escape_report.d.ts.map +0 -1
  134. package/dist/gate/contracts/escape_report.js +0 -145
  135. package/dist/gate/contracts/escape_report.js.map +0 -1
  136. package/dist/gate/feasibility_checker.d.ts +0 -27
  137. package/dist/gate/feasibility_checker.d.ts.map +0 -1
  138. package/dist/gate/feasibility_checker.js +0 -114
  139. package/dist/gate/feasibility_checker.js.map +0 -1
  140. package/dist/gate/migration_guard.d.ts +0 -22
  141. package/dist/gate/migration_guard.d.ts.map +0 -1
  142. package/dist/gate/migration_guard.js +0 -277
  143. package/dist/gate/migration_guard.js.map +0 -1
  144. package/dist/gate/scope_lease.d.ts +0 -94
  145. package/dist/gate/scope_lease.d.ts.map +0 -1
  146. package/dist/gate/scope_lease.js +0 -180
  147. package/dist/gate/scope_lease.js.map +0 -1
  148. package/dist/git/git_deps.d.ts +0 -85
  149. package/dist/git/git_deps.d.ts.map +0 -1
  150. package/dist/git/git_deps.js +0 -22
  151. package/dist/git/git_deps.js.map +0 -1
  152. package/dist/git/operations.d.ts +0 -173
  153. package/dist/git/operations.d.ts.map +0 -1
  154. package/dist/git/operations.js +0 -350
  155. package/dist/git/operations.js.map +0 -1
  156. package/dist/server/tools/gate_engine.d.ts +0 -17
  157. package/dist/server/tools/gate_engine.d.ts.map +0 -1
  158. package/dist/server/tools/gate_engine.js +0 -17
  159. package/dist/server/tools/gate_engine.js.map +0 -1
  160. package/dist/server/tools/middleware/budget_check.d.ts +0 -35
  161. package/dist/server/tools/middleware/budget_check.d.ts.map +0 -1
  162. package/dist/server/tools/middleware/budget_check.js +0 -69
  163. package/dist/server/tools/middleware/budget_check.js.map +0 -1
  164. package/dist/shared/contracts/contract_registry/builtin_contracts_core.d.ts +0 -16
  165. package/dist/shared/contracts/contract_registry/builtin_contracts_core.d.ts.map +0 -1
  166. package/dist/shared/contracts/contract_registry/builtin_contracts_core.js +0 -306
  167. package/dist/shared/contracts/contract_registry/builtin_contracts_core.js.map +0 -1
  168. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.d.ts +0 -16
  169. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.d.ts.map +0 -1
  170. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.js +0 -304
  171. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.js.map +0 -1
  172. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.d.ts +0 -16
  173. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.d.ts.map +0 -1
  174. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.js +0 -434
  175. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.js.map +0 -1
  176. package/dist/shared/contracts/contract_registry/index.d.ts +0 -8
  177. package/dist/shared/contracts/contract_registry/index.d.ts.map +0 -1
  178. package/dist/shared/contracts/contract_registry/index.js +0 -7
  179. package/dist/shared/contracts/contract_registry/index.js.map +0 -1
  180. package/dist/shared/contracts/contract_registry/registry.d.ts +0 -62
  181. package/dist/shared/contracts/contract_registry/registry.d.ts.map +0 -1
  182. package/dist/shared/contracts/contract_registry/registry.js +0 -191
  183. package/dist/shared/contracts/contract_registry/registry.js.map +0 -1
  184. package/dist/shared/contracts/contract_registry/registry_internal.d.ts +0 -19
  185. package/dist/shared/contracts/contract_registry/registry_internal.d.ts.map +0 -1
  186. package/dist/shared/contracts/contract_registry/registry_internal.js +0 -54
  187. package/dist/shared/contracts/contract_registry/registry_internal.js.map +0 -1
  188. package/dist/shared/contracts/contract_registry/types.d.ts +0 -47
  189. package/dist/shared/contracts/contract_registry/types.d.ts.map +0 -1
  190. package/dist/shared/contracts/contract_registry/types.js +0 -5
  191. package/dist/shared/contracts/contract_registry/types.js.map +0 -1
  192. package/dist/shared/contracts/contract_registry/validation.d.ts +0 -25
  193. package/dist/shared/contracts/contract_registry/validation.d.ts.map +0 -1
  194. package/dist/shared/contracts/contract_registry/validation.js +0 -363
  195. package/dist/shared/contracts/contract_registry/validation.js.map +0 -1
  196. package/dist/shared/llm_gateway.d.ts +0 -186
  197. package/dist/shared/llm_gateway.d.ts.map +0 -1
  198. package/dist/shared/llm_gateway.js +0 -393
  199. package/dist/shared/llm_gateway.js.map +0 -1
  200. package/dist/verify/audit/audit_sampler.d.ts +0 -29
  201. package/dist/verify/audit/audit_sampler.d.ts.map +0 -1
  202. package/dist/verify/audit/audit_sampler.js +0 -42
  203. package/dist/verify/audit/audit_sampler.js.map +0 -1
  204. package/dist/verify/audit/debt_reporter.d.ts +0 -22
  205. package/dist/verify/audit/debt_reporter.d.ts.map +0 -1
  206. package/dist/verify/audit/debt_reporter.js +0 -107
  207. package/dist/verify/audit/debt_reporter.js.map +0 -1
  208. package/dist/verify/audit/debugger.d.ts +0 -25
  209. package/dist/verify/audit/debugger.d.ts.map +0 -1
  210. package/dist/verify/audit/debugger.js +0 -429
  211. package/dist/verify/audit/debugger.js.map +0 -1
  212. package/dist/verify/audit/degradation.d.ts +0 -62
  213. package/dist/verify/audit/degradation.d.ts.map +0 -1
  214. package/dist/verify/audit/degradation.js +0 -78
  215. package/dist/verify/audit/degradation.js.map +0 -1
  216. package/dist/verify/audit/developer_sovereignty.d.ts +0 -29
  217. package/dist/verify/audit/developer_sovereignty.d.ts.map +0 -1
  218. package/dist/verify/audit/developer_sovereignty.js +0 -137
  219. package/dist/verify/audit/developer_sovereignty.js.map +0 -1
  220. package/dist/verify/audit/failure_report.d.ts +0 -76
  221. package/dist/verify/audit/failure_report.d.ts.map +0 -1
  222. package/dist/verify/audit/failure_report.js +0 -145
  223. package/dist/verify/audit/failure_report.js.map +0 -1
  224. package/dist/verify/audit/governance_report.d.ts +0 -110
  225. package/dist/verify/audit/governance_report.d.ts.map +0 -1
  226. package/dist/verify/audit/governance_report.js +0 -194
  227. package/dist/verify/audit/governance_report.js.map +0 -1
  228. package/dist/verify/audit/mutation_audit.d.ts +0 -40
  229. package/dist/verify/audit/mutation_audit.d.ts.map +0 -1
  230. package/dist/verify/audit/mutation_audit.js +0 -154
  231. package/dist/verify/audit/mutation_audit.js.map +0 -1
  232. package/dist/verify/audit/risk_sampler.d.ts +0 -44
  233. package/dist/verify/audit/risk_sampler.d.ts.map +0 -1
  234. package/dist/verify/audit/risk_sampler.js +0 -80
  235. package/dist/verify/audit/risk_sampler.js.map +0 -1
  236. package/dist/verify/audit/runtime_safety.d.ts +0 -89
  237. package/dist/verify/audit/runtime_safety.d.ts.map +0 -1
  238. package/dist/verify/audit/runtime_safety.js +0 -209
  239. package/dist/verify/audit/runtime_safety.js.map +0 -1
  240. package/dist/verify/audit/semantic_evidence.d.ts +0 -36
  241. package/dist/verify/audit/semantic_evidence.d.ts.map +0 -1
  242. package/dist/verify/audit/semantic_evidence.js +0 -90
  243. package/dist/verify/audit/semantic_evidence.js.map +0 -1
  244. package/dist/verify/audit/test_generator.d.ts +0 -23
  245. package/dist/verify/audit/test_generator.d.ts.map +0 -1
  246. package/dist/verify/audit/test_generator.js +0 -278
  247. package/dist/verify/audit/test_generator.js.map +0 -1
  248. package/dist/verify/audit/test_quality.d.ts +0 -49
  249. package/dist/verify/audit/test_quality.d.ts.map +0 -1
  250. package/dist/verify/audit/test_quality.js +0 -684
  251. package/dist/verify/audit/test_quality.js.map +0 -1
  252. package/dist/verify/change_coordinator.d.ts +0 -45
  253. package/dist/verify/change_coordinator.d.ts.map +0 -1
  254. package/dist/verify/change_coordinator.js +0 -168
  255. package/dist/verify/change_coordinator.js.map +0 -1
  256. package/dist/verify/contracts/decision_contract.d.ts +0 -51
  257. package/dist/verify/contracts/decision_contract.d.ts.map +0 -1
  258. package/dist/verify/contracts/decision_contract.js +0 -70
  259. package/dist/verify/contracts/decision_contract.js.map +0 -1
  260. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.d.ts +0 -17
  261. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.d.ts.map +0 -1
  262. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js +0 -428
  263. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js.map +0 -1
  264. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.d.ts +0 -17
  265. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.d.ts.map +0 -1
  266. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js +0 -429
  267. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js.map +0 -1
  268. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.d.ts +0 -17
  269. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.d.ts.map +0 -1
  270. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.js +0 -194
  271. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.js.map +0 -1
  272. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.d.ts +0 -17
  273. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.d.ts.map +0 -1
  274. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.js +0 -365
  275. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.js.map +0 -1
  276. package/dist/verify/contracts/mechanism_contract_registry/index.d.ts +0 -19
  277. package/dist/verify/contracts/mechanism_contract_registry/index.d.ts.map +0 -1
  278. package/dist/verify/contracts/mechanism_contract_registry/index.js +0 -21
  279. package/dist/verify/contracts/mechanism_contract_registry/index.js.map +0 -1
  280. package/dist/verify/contracts/mechanism_contract_registry/types.d.ts +0 -33
  281. package/dist/verify/contracts/mechanism_contract_registry/types.d.ts.map +0 -1
  282. package/dist/verify/contracts/mechanism_contract_registry/types.js +0 -5
  283. package/dist/verify/contracts/mechanism_contract_registry/types.js.map +0 -1
  284. package/dist/verify/contracts/mechanism_contract_registry/validation.d.ts +0 -38
  285. package/dist/verify/contracts/mechanism_contract_registry/validation.d.ts.map +0 -1
  286. package/dist/verify/contracts/mechanism_contract_registry/validation.js +0 -136
  287. package/dist/verify/contracts/mechanism_contract_registry/validation.js.map +0 -1
  288. package/templates/shared/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +0 -54
  289. 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":"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"}
@@ -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"}
@@ -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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"}
@@ -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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"}