@specpow/framework 0.2.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.
Files changed (362) hide show
  1. package/CHANGELOG.md +307 -0
  2. package/LICENSE +21 -0
  3. package/README.md +557 -0
  4. package/agents/controller/sdd-controller.md +55 -0
  5. package/agents/execution/java-codegen-agent.md +39 -0
  6. package/agents/execution/ui-codegen-agent.md +32 -0
  7. package/agents/ops/deploy-agent.md +181 -0
  8. package/agents/planning/db-designer-agent.md +30 -0
  9. package/agents/planning/prd-agent.md +31 -0
  10. package/agents/quality/review-agent.md +36 -0
  11. package/agents/quality/test-agent.md +33 -0
  12. package/bin/specpow.js +10 -0
  13. package/dist/cli/index.d.ts +7 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +444 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/commands/apply.d.ts +14 -0
  18. package/dist/commands/apply.d.ts.map +1 -0
  19. package/dist/commands/apply.js +195 -0
  20. package/dist/commands/apply.js.map +1 -0
  21. package/dist/commands/archive.d.ts +30 -0
  22. package/dist/commands/archive.d.ts.map +1 -0
  23. package/dist/commands/archive.js +141 -0
  24. package/dist/commands/archive.js.map +1 -0
  25. package/dist/commands/channel.d.ts +61 -0
  26. package/dist/commands/channel.d.ts.map +1 -0
  27. package/dist/commands/channel.js +613 -0
  28. package/dist/commands/channel.js.map +1 -0
  29. package/dist/commands/config.d.ts +40 -0
  30. package/dist/commands/config.d.ts.map +1 -0
  31. package/dist/commands/config.js +130 -0
  32. package/dist/commands/config.js.map +1 -0
  33. package/dist/commands/debug.d.ts +45 -0
  34. package/dist/commands/debug.d.ts.map +1 -0
  35. package/dist/commands/debug.js +167 -0
  36. package/dist/commands/debug.js.map +1 -0
  37. package/dist/commands/doctor.d.ts +20 -0
  38. package/dist/commands/doctor.d.ts.map +1 -0
  39. package/dist/commands/doctor.js +121 -0
  40. package/dist/commands/doctor.js.map +1 -0
  41. package/dist/commands/execute.d.ts +25 -0
  42. package/dist/commands/execute.d.ts.map +1 -0
  43. package/dist/commands/execute.js +120 -0
  44. package/dist/commands/execute.js.map +1 -0
  45. package/dist/commands/explore.d.ts +71 -0
  46. package/dist/commands/explore.d.ts.map +1 -0
  47. package/dist/commands/explore.js +481 -0
  48. package/dist/commands/explore.js.map +1 -0
  49. package/dist/commands/init.d.ts +20 -0
  50. package/dist/commands/init.d.ts.map +1 -0
  51. package/dist/commands/init.js +146 -0
  52. package/dist/commands/init.js.map +1 -0
  53. package/dist/commands/memory.d.ts +32 -0
  54. package/dist/commands/memory.d.ts.map +1 -0
  55. package/dist/commands/memory.js +455 -0
  56. package/dist/commands/memory.js.map +1 -0
  57. package/dist/commands/propose.d.ts +13 -0
  58. package/dist/commands/propose.d.ts.map +1 -0
  59. package/dist/commands/propose.js +193 -0
  60. package/dist/commands/propose.js.map +1 -0
  61. package/dist/commands/review.d.ts +50 -0
  62. package/dist/commands/review.d.ts.map +1 -0
  63. package/dist/commands/review.js +198 -0
  64. package/dist/commands/review.js.map +1 -0
  65. package/dist/commands/schema.d.ts +22 -0
  66. package/dist/commands/schema.d.ts.map +1 -0
  67. package/dist/commands/schema.js +79 -0
  68. package/dist/commands/schema.js.map +1 -0
  69. package/dist/commands/status.d.ts +11 -0
  70. package/dist/commands/status.d.ts.map +1 -0
  71. package/dist/commands/status.js +130 -0
  72. package/dist/commands/status.js.map +1 -0
  73. package/dist/commands/store.d.ts +31 -0
  74. package/dist/commands/store.d.ts.map +1 -0
  75. package/dist/commands/store.js +109 -0
  76. package/dist/commands/store.js.map +1 -0
  77. package/dist/commands/update.d.ts +42 -0
  78. package/dist/commands/update.d.ts.map +1 -0
  79. package/dist/commands/update.js +239 -0
  80. package/dist/commands/update.js.map +1 -0
  81. package/dist/commands/verify.d.ts +39 -0
  82. package/dist/commands/verify.d.ts.map +1 -0
  83. package/dist/commands/verify.js +386 -0
  84. package/dist/commands/verify.js.map +1 -0
  85. package/dist/commands/workflow/index.d.ts +12 -0
  86. package/dist/commands/workflow/index.d.ts.map +1 -0
  87. package/dist/commands/workflow/index.js +435 -0
  88. package/dist/commands/workflow/index.js.map +1 -0
  89. package/dist/core/agent-contract.d.ts +133 -0
  90. package/dist/core/agent-contract.d.ts.map +1 -0
  91. package/dist/core/agent-contract.js +71 -0
  92. package/dist/core/agent-contract.js.map +1 -0
  93. package/dist/core/archive/delta-merger.d.ts +101 -0
  94. package/dist/core/archive/delta-merger.d.ts.map +1 -0
  95. package/dist/core/archive/delta-merger.js +398 -0
  96. package/dist/core/archive/delta-merger.js.map +1 -0
  97. package/dist/core/archive/delta-parser.d.ts +48 -0
  98. package/dist/core/archive/delta-parser.d.ts.map +1 -0
  99. package/dist/core/archive/delta-parser.js +193 -0
  100. package/dist/core/archive/delta-parser.js.map +1 -0
  101. package/dist/core/archive/engine.d.ts +136 -0
  102. package/dist/core/archive/engine.d.ts.map +1 -0
  103. package/dist/core/archive/engine.js +506 -0
  104. package/dist/core/archive/engine.js.map +1 -0
  105. package/dist/core/archive/index.d.ts +11 -0
  106. package/dist/core/archive/index.d.ts.map +1 -0
  107. package/dist/core/archive/index.js +9 -0
  108. package/dist/core/archive/index.js.map +1 -0
  109. package/dist/core/artifact-graph/graph.d.ts +48 -0
  110. package/dist/core/artifact-graph/graph.d.ts.map +1 -0
  111. package/dist/core/artifact-graph/graph.js +170 -0
  112. package/dist/core/artifact-graph/graph.js.map +1 -0
  113. package/dist/core/artifact-graph/index.d.ts +13 -0
  114. package/dist/core/artifact-graph/index.d.ts.map +1 -0
  115. package/dist/core/artifact-graph/index.js +12 -0
  116. package/dist/core/artifact-graph/index.js.map +1 -0
  117. package/dist/core/artifact-graph/instruction-loader.d.ts +60 -0
  118. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -0
  119. package/dist/core/artifact-graph/instruction-loader.js +166 -0
  120. package/dist/core/artifact-graph/instruction-loader.js.map +1 -0
  121. package/dist/core/artifact-graph/outputs.d.ts +17 -0
  122. package/dist/core/artifact-graph/outputs.d.ts.map +1 -0
  123. package/dist/core/artifact-graph/outputs.js +27 -0
  124. package/dist/core/artifact-graph/outputs.js.map +1 -0
  125. package/dist/core/artifact-graph/resolver.d.ts +34 -0
  126. package/dist/core/artifact-graph/resolver.d.ts.map +1 -0
  127. package/dist/core/artifact-graph/resolver.js +99 -0
  128. package/dist/core/artifact-graph/resolver.js.map +1 -0
  129. package/dist/core/artifact-graph/state.d.ts +54 -0
  130. package/dist/core/artifact-graph/state.d.ts.map +1 -0
  131. package/dist/core/artifact-graph/state.js +149 -0
  132. package/dist/core/artifact-graph/state.js.map +1 -0
  133. package/dist/core/artifact-graph/types.d.ts +151 -0
  134. package/dist/core/artifact-graph/types.d.ts.map +1 -0
  135. package/dist/core/artifact-graph/types.js +44 -0
  136. package/dist/core/artifact-graph/types.js.map +1 -0
  137. package/dist/core/channel/channel-event-log.d.ts +81 -0
  138. package/dist/core/channel/channel-event-log.d.ts.map +1 -0
  139. package/dist/core/channel/channel-event-log.js +177 -0
  140. package/dist/core/channel/channel-event-log.js.map +1 -0
  141. package/dist/core/channel/channel-inbox.d.ts +70 -0
  142. package/dist/core/channel/channel-inbox.d.ts.map +1 -0
  143. package/dist/core/channel/channel-inbox.js +122 -0
  144. package/dist/core/channel/channel-inbox.js.map +1 -0
  145. package/dist/core/channel/channel-runtime.d.ts +81 -0
  146. package/dist/core/channel/channel-runtime.d.ts.map +1 -0
  147. package/dist/core/channel/channel-runtime.js +291 -0
  148. package/dist/core/channel/channel-runtime.js.map +1 -0
  149. package/dist/core/channel/channel-supervisor.d.ts +72 -0
  150. package/dist/core/channel/channel-supervisor.d.ts.map +1 -0
  151. package/dist/core/channel/channel-supervisor.js +189 -0
  152. package/dist/core/channel/channel-supervisor.js.map +1 -0
  153. package/dist/core/channel/channel-types.d.ts +169 -0
  154. package/dist/core/channel/channel-types.d.ts.map +1 -0
  155. package/dist/core/channel/channel-types.js +26 -0
  156. package/dist/core/channel/channel-types.js.map +1 -0
  157. package/dist/core/channel/index.d.ts +21 -0
  158. package/dist/core/channel/index.d.ts.map +1 -0
  159. package/dist/core/channel/index.js +23 -0
  160. package/dist/core/channel/index.js.map +1 -0
  161. package/dist/core/command-generation/index.d.ts +225 -0
  162. package/dist/core/command-generation/index.d.ts.map +1 -0
  163. package/dist/core/command-generation/index.js +462 -0
  164. package/dist/core/command-generation/index.js.map +1 -0
  165. package/dist/core/config/config-schema.d.ts +745 -0
  166. package/dist/core/config/config-schema.d.ts.map +1 -0
  167. package/dist/core/config/config-schema.js +108 -0
  168. package/dist/core/config/config-schema.js.map +1 -0
  169. package/dist/core/config/global-config.d.ts +73 -0
  170. package/dist/core/config/global-config.d.ts.map +1 -0
  171. package/dist/core/config/global-config.js +225 -0
  172. package/dist/core/config/global-config.js.map +1 -0
  173. package/dist/core/config/index.d.ts +8 -0
  174. package/dist/core/config/index.d.ts.map +1 -0
  175. package/dist/core/config/index.js +8 -0
  176. package/dist/core/config/index.js.map +1 -0
  177. package/dist/core/hooks/hook-registry.d.ts +55 -0
  178. package/dist/core/hooks/hook-registry.d.ts.map +1 -0
  179. package/dist/core/hooks/hook-registry.js +172 -0
  180. package/dist/core/hooks/hook-registry.js.map +1 -0
  181. package/dist/core/hooks/hook-types.d.ts +87 -0
  182. package/dist/core/hooks/hook-types.d.ts.map +1 -0
  183. package/dist/core/hooks/hook-types.js +11 -0
  184. package/dist/core/hooks/hook-types.js.map +1 -0
  185. package/dist/core/hooks/index.d.ts +28 -0
  186. package/dist/core/hooks/index.d.ts.map +1 -0
  187. package/dist/core/hooks/index.js +28 -0
  188. package/dist/core/hooks/index.js.map +1 -0
  189. package/dist/core/hooks/post-tool-call-hook.d.ts +21 -0
  190. package/dist/core/hooks/post-tool-call-hook.d.ts.map +1 -0
  191. package/dist/core/hooks/post-tool-call-hook.js +191 -0
  192. package/dist/core/hooks/post-tool-call-hook.js.map +1 -0
  193. package/dist/core/hooks/pre-tool-call-hook.d.ts +31 -0
  194. package/dist/core/hooks/pre-tool-call-hook.d.ts.map +1 -0
  195. package/dist/core/hooks/pre-tool-call-hook.js +122 -0
  196. package/dist/core/hooks/pre-tool-call-hook.js.map +1 -0
  197. package/dist/core/hooks/session-start-hook.d.ts +25 -0
  198. package/dist/core/hooks/session-start-hook.d.ts.map +1 -0
  199. package/dist/core/hooks/session-start-hook.js +226 -0
  200. package/dist/core/hooks/session-start-hook.js.map +1 -0
  201. package/dist/core/hooks/workflow-state-hook.d.ts +18 -0
  202. package/dist/core/hooks/workflow-state-hook.d.ts.map +1 -0
  203. package/dist/core/hooks/workflow-state-hook.js +181 -0
  204. package/dist/core/hooks/workflow-state-hook.js.map +1 -0
  205. package/dist/core/init/engine.d.ts +69 -0
  206. package/dist/core/init/engine.d.ts.map +1 -0
  207. package/dist/core/init/engine.js +211 -0
  208. package/dist/core/init/engine.js.map +1 -0
  209. package/dist/core/init/template-hash.d.ts +86 -0
  210. package/dist/core/init/template-hash.d.ts.map +1 -0
  211. package/dist/core/init/template-hash.js +228 -0
  212. package/dist/core/init/template-hash.js.map +1 -0
  213. package/dist/core/memory/adapters/json-adapter.d.ts +50 -0
  214. package/dist/core/memory/adapters/json-adapter.d.ts.map +1 -0
  215. package/dist/core/memory/adapters/json-adapter.js +273 -0
  216. package/dist/core/memory/adapters/json-adapter.js.map +1 -0
  217. package/dist/core/memory/adapters/sqlite-adapter.d.ts +26 -0
  218. package/dist/core/memory/adapters/sqlite-adapter.d.ts.map +1 -0
  219. package/dist/core/memory/adapters/sqlite-adapter.js +230 -0
  220. package/dist/core/memory/adapters/sqlite-adapter.js.map +1 -0
  221. package/dist/core/memory/index.d.ts +38 -0
  222. package/dist/core/memory/index.d.ts.map +1 -0
  223. package/dist/core/memory/index.js +40 -0
  224. package/dist/core/memory/index.js.map +1 -0
  225. package/dist/core/memory/memory-indexer.d.ts +39 -0
  226. package/dist/core/memory/memory-indexer.d.ts.map +1 -0
  227. package/dist/core/memory/memory-indexer.js +213 -0
  228. package/dist/core/memory/memory-indexer.js.map +1 -0
  229. package/dist/core/memory/memory-manager.d.ts +59 -0
  230. package/dist/core/memory/memory-manager.d.ts.map +1 -0
  231. package/dist/core/memory/memory-manager.js +194 -0
  232. package/dist/core/memory/memory-manager.js.map +1 -0
  233. package/dist/core/memory/memory-store.d.ts +31 -0
  234. package/dist/core/memory/memory-store.d.ts.map +1 -0
  235. package/dist/core/memory/memory-store.js +148 -0
  236. package/dist/core/memory/memory-store.js.map +1 -0
  237. package/dist/core/memory/memory-types.d.ts +154 -0
  238. package/dist/core/memory/memory-types.d.ts.map +1 -0
  239. package/dist/core/memory/memory-types.js +13 -0
  240. package/dist/core/memory/memory-types.js.map +1 -0
  241. package/dist/core/migration/index.d.ts +80 -0
  242. package/dist/core/migration/index.d.ts.map +1 -0
  243. package/dist/core/migration/index.js +361 -0
  244. package/dist/core/migration/index.js.map +1 -0
  245. package/dist/core/parsers/index.d.ts +95 -0
  246. package/dist/core/parsers/index.d.ts.map +1 -0
  247. package/dist/core/parsers/index.js +367 -0
  248. package/dist/core/parsers/index.js.map +1 -0
  249. package/dist/core/sdd-engine/ai-caller.d.ts +118 -0
  250. package/dist/core/sdd-engine/ai-caller.d.ts.map +1 -0
  251. package/dist/core/sdd-engine/ai-caller.js +624 -0
  252. package/dist/core/sdd-engine/ai-caller.js.map +1 -0
  253. package/dist/core/sdd-engine/controller.d.ts +107 -0
  254. package/dist/core/sdd-engine/controller.d.ts.map +1 -0
  255. package/dist/core/sdd-engine/controller.js +357 -0
  256. package/dist/core/sdd-engine/controller.js.map +1 -0
  257. package/dist/core/sdd-engine/dispatcher.d.ts +69 -0
  258. package/dist/core/sdd-engine/dispatcher.d.ts.map +1 -0
  259. package/dist/core/sdd-engine/dispatcher.js +146 -0
  260. package/dist/core/sdd-engine/dispatcher.js.map +1 -0
  261. package/dist/core/sdd-engine/git-ops.d.ts +73 -0
  262. package/dist/core/sdd-engine/git-ops.d.ts.map +1 -0
  263. package/dist/core/sdd-engine/git-ops.js +326 -0
  264. package/dist/core/sdd-engine/git-ops.js.map +1 -0
  265. package/dist/core/sdd-engine/index.d.ts +17 -0
  266. package/dist/core/sdd-engine/index.d.ts.map +1 -0
  267. package/dist/core/sdd-engine/index.js +15 -0
  268. package/dist/core/sdd-engine/index.js.map +1 -0
  269. package/dist/core/sdd-engine/ledger.d.ts +92 -0
  270. package/dist/core/sdd-engine/ledger.d.ts.map +1 -0
  271. package/dist/core/sdd-engine/ledger.js +273 -0
  272. package/dist/core/sdd-engine/ledger.js.map +1 -0
  273. package/dist/core/sdd-engine/model-selector.d.ts +49 -0
  274. package/dist/core/sdd-engine/model-selector.d.ts.map +1 -0
  275. package/dist/core/sdd-engine/model-selector.js +76 -0
  276. package/dist/core/sdd-engine/model-selector.js.map +1 -0
  277. package/dist/core/sdd-engine/parallel-dispatcher.d.ts +99 -0
  278. package/dist/core/sdd-engine/parallel-dispatcher.d.ts.map +1 -0
  279. package/dist/core/sdd-engine/parallel-dispatcher.js +350 -0
  280. package/dist/core/sdd-engine/parallel-dispatcher.js.map +1 -0
  281. package/dist/core/sdd-engine/review-loop.d.ts +61 -0
  282. package/dist/core/sdd-engine/review-loop.d.ts.map +1 -0
  283. package/dist/core/sdd-engine/review-loop.js +139 -0
  284. package/dist/core/sdd-engine/review-loop.js.map +1 -0
  285. package/dist/core/sdd-engine/types.d.ts +104 -0
  286. package/dist/core/sdd-engine/types.d.ts.map +1 -0
  287. package/dist/core/sdd-engine/types.js +7 -0
  288. package/dist/core/sdd-engine/types.js.map +1 -0
  289. package/dist/core/store/index.d.ts +78 -0
  290. package/dist/core/store/index.d.ts.map +1 -0
  291. package/dist/core/store/index.js +182 -0
  292. package/dist/core/store/index.js.map +1 -0
  293. package/dist/core/templates/index.d.ts +58 -0
  294. package/dist/core/templates/index.d.ts.map +1 -0
  295. package/dist/core/templates/index.js +158 -0
  296. package/dist/core/templates/index.js.map +1 -0
  297. package/dist/core/validation/index.d.ts +34 -0
  298. package/dist/core/validation/index.d.ts.map +1 -0
  299. package/dist/core/validation/index.js +153 -0
  300. package/dist/core/validation/index.js.map +1 -0
  301. package/dist/core/workflow-state.d.ts +96 -0
  302. package/dist/core/workflow-state.d.ts.map +1 -0
  303. package/dist/core/workflow-state.js +284 -0
  304. package/dist/core/workflow-state.js.map +1 -0
  305. package/dist/index.d.ts +18 -0
  306. package/dist/index.d.ts.map +1 -0
  307. package/dist/index.js +21 -0
  308. package/dist/index.js.map +1 -0
  309. package/dist/utils/index.d.ts +48 -0
  310. package/dist/utils/index.d.ts.map +1 -0
  311. package/dist/utils/index.js +119 -0
  312. package/dist/utils/index.js.map +1 -0
  313. package/hooks/hooks.json +30 -0
  314. package/hooks/run-hook.cmd +19 -0
  315. package/hooks/session-start +62 -0
  316. package/hooks/workflow-state +150 -0
  317. package/package.json +122 -0
  318. package/schemas/bug-fix/schema.yaml +64 -0
  319. package/schemas/bug-fix/templates/analysis.md +43 -0
  320. package/schemas/bug-fix/templates/fix-plan.md +19 -0
  321. package/schemas/bug-fix/templates/proposal.md +30 -0
  322. package/schemas/crud-module/schema.yaml +65 -0
  323. package/schemas/crud-module/templates/design.md +36 -0
  324. package/schemas/crud-module/templates/proposal.md +30 -0
  325. package/schemas/crud-module/templates/spec.md +33 -0
  326. package/schemas/crud-module/templates/tasks.md +57 -0
  327. package/schemas/spec-driven/schema.yaml +87 -0
  328. package/schemas/spec-driven/templates/design.md +54 -0
  329. package/schemas/spec-driven/templates/proposal.md +31 -0
  330. package/schemas/spec-driven/templates/spec.md +44 -0
  331. package/schemas/spec-driven/templates/tasks.md +98 -0
  332. package/skills/business-code-review/SKILL.md +78 -0
  333. package/skills/business-db-design/SKILL.md +74 -0
  334. package/skills/business-deploy-check/SKILL.md +72 -0
  335. package/skills/business-doc-sync/SKILL.md +72 -0
  336. package/skills/business-java-codegen/SKILL.md +97 -0
  337. package/skills/business-menu-register/SKILL.md +63 -0
  338. package/skills/business-prd-writer/SKILL.md +80 -0
  339. package/skills/business-test-gen/SKILL.md +82 -0
  340. package/skills/business-ui-codegen/SKILL.md +104 -0
  341. package/skills/execution-finish-branch/SKILL.md +58 -0
  342. package/skills/execution-git-worktrees/SKILL.md +48 -0
  343. package/skills/execution-parallel-agents/SKILL.md +51 -0
  344. package/skills/execution-receiving-review/SKILL.md +47 -0
  345. package/skills/execution-requesting-review/SKILL.md +51 -0
  346. package/skills/execution-subagent-driven-dev/SKILL.md +148 -0
  347. package/skills/execution-systematic-debugging/SKILL.md +95 -0
  348. package/skills/execution-tdd/SKILL.md +74 -0
  349. package/skills/execution-verification-before-completion/SKILL.md +75 -0
  350. package/skills/meta-create-skill/SKILL.md +374 -0
  351. package/skills/meta-using-skills/SKILL.md +97 -0
  352. package/skills/meta-writing-skills/SKILL.md +66 -0
  353. package/skills/planning-apply-change/SKILL.md +199 -0
  354. package/skills/planning-archive-change/SKILL.md +43 -0
  355. package/skills/planning-explore/SKILL.md +108 -0
  356. package/skills/planning-onboard/SKILL.md +60 -0
  357. package/skills/planning-propose/SKILL.md +145 -0
  358. package/skills/planning-update-change/SKILL.md +45 -0
  359. package/skills/planning-verify-change/SKILL.md +58 -0
  360. package/skills/planning-write-design/SKILL.md +59 -0
  361. package/skills/planning-write-plans/SKILL.md +55 -0
  362. package/skills/planning-write-specs/SKILL.md +73 -0
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Delta Spec 解析器 — 移植自 OpenSpec specs-apply.ts
3
+ *
4
+ * 结构化解析 Delta Spec 文件,支持:
5
+ * - ADDED / MODIFIED / REMOVED / RENAMED 四种操作
6
+ * - 需求块提取与规范化
7
+ * - 冲突检测(跨段冲突、重复名称、RENAMED+REMOVED 矛盾)
8
+ * - 幂等性比较(normalizeBlockRaw)
9
+ */
10
+ // ============================================================
11
+ // 解析正则
12
+ // ============================================================
13
+ const SECTION_HEADER = /^##\s+(ADDED|MODIFIED|REMOVED|RENAMED)[:\s]*(.*)/i;
14
+ const REQUIREMENT_HEADER = /^###\s+(?!Scenario:\s*)(?:Requirement:\s*)?(.+)/i;
15
+ const RENAME_ARROW = /^(.+?)\s*→\s*(.+)$/;
16
+ /**
17
+ * 从 section header 或 requirement header 中提取干净的需求名称
18
+ * 去除 "Requirement:" 前缀,trim 空白
19
+ */
20
+ function parseName(raw) {
21
+ return raw.replace(/^Requirement:\s*/i, '').trim();
22
+ }
23
+ // ============================================================
24
+ // 解析函数
25
+ // ============================================================
26
+ /**
27
+ * 解析 Delta Spec 文件内容
28
+ */
29
+ export function parseDelta(content) {
30
+ const result = {
31
+ added: [],
32
+ modified: [],
33
+ removed: [],
34
+ renamed: [],
35
+ conflicts: [],
36
+ };
37
+ const lines = content.split('\n');
38
+ let currentAction = null;
39
+ let currentBlock = null;
40
+ let blockLines = [];
41
+ const flushBlock = () => {
42
+ if (currentBlock && currentAction) {
43
+ currentBlock.content = blockLines.join('\n').trim();
44
+ currentBlock.rawLines = [...blockLines];
45
+ switch (currentAction) {
46
+ case 'ADDED':
47
+ result.added.push(currentBlock);
48
+ break;
49
+ case 'MODIFIED':
50
+ result.modified.push(currentBlock);
51
+ break;
52
+ case 'REMOVED':
53
+ result.removed.push(currentBlock);
54
+ break;
55
+ }
56
+ }
57
+ currentBlock = null;
58
+ blockLines = [];
59
+ };
60
+ for (let i = 0; i < lines.length; i++) {
61
+ const line = lines[i];
62
+ // 检测 section header (## ADDED/MODIFIED/REMOVED/RENAMED)
63
+ const sectionMatch = line.match(SECTION_HEADER);
64
+ if (sectionMatch) {
65
+ flushBlock();
66
+ currentAction = sectionMatch[1].toUpperCase();
67
+ // 如果 section header 包含名称(如 "## MODIFIED: Endpoints"),
68
+ // 立即创建 block 以便后续内容行被累积
69
+ const sectionName = parseName(sectionMatch[2] || '');
70
+ if (sectionName && currentAction !== 'RENAMED') {
71
+ currentBlock = { action: currentAction, name: sectionName, content: '', rawLines: [] };
72
+ }
73
+ continue;
74
+ }
75
+ // 检测 requirement header (### Requirement: Name)
76
+ const reqMatch = line.match(REQUIREMENT_HEADER);
77
+ if (reqMatch && currentAction) {
78
+ if (currentBlock) {
79
+ flushBlock();
80
+ }
81
+ const rawName = reqMatch[1].trim();
82
+ // RENAMED 特殊处理:Old Name → New Name
83
+ if (currentAction === 'RENAMED') {
84
+ const renameMatch = rawName.match(RENAME_ARROW);
85
+ if (renameMatch) {
86
+ result.renamed.push({
87
+ oldName: renameMatch[1].trim(),
88
+ newName: renameMatch[2].trim(),
89
+ });
90
+ }
91
+ else {
92
+ result.conflicts.push(`Invalid RENAMED format: "${rawName}" (expected "Old → New")`);
93
+ }
94
+ continue;
95
+ }
96
+ currentBlock = {
97
+ action: currentAction,
98
+ name: rawName,
99
+ content: '',
100
+ rawLines: [],
101
+ };
102
+ continue;
103
+ }
104
+ // 累积 block 内容
105
+ if (currentBlock) {
106
+ blockLines.push(line);
107
+ }
108
+ }
109
+ // 刷新最后一个 block
110
+ flushBlock();
111
+ // 冲突检测
112
+ detectConflicts(result);
113
+ return result;
114
+ }
115
+ /**
116
+ * 冲突检测
117
+ *
118
+ * 检测以下冲突类型:
119
+ * 1. 同一需求在多个 section 中出现
120
+ * 2. RENAMED 的 oldName 与 REMOVED 冲突
121
+ * 3. 重复的需求名称
122
+ */
123
+ function detectConflicts(delta) {
124
+ const seenNames = new Map();
125
+ // 检查 ADDED/MODIFIED/REMOVED 中的重复
126
+ for (const block of [...delta.added, ...delta.modified, ...delta.removed]) {
127
+ const existing = seenNames.get(block.name);
128
+ if (existing) {
129
+ delta.conflicts.push(`Duplicate requirement "${block.name}" in ${existing} and ${block.action}`);
130
+ }
131
+ else {
132
+ seenNames.set(block.name, block.action);
133
+ }
134
+ }
135
+ // 检查 RENAMED 与 REMOVED 冲突
136
+ for (const rename of delta.renamed) {
137
+ if (seenNames.get(rename.oldName) === 'REMOVED') {
138
+ delta.conflicts.push(`Conflict: "${rename.oldName}" is both RENAMED and REMOVED`);
139
+ }
140
+ }
141
+ }
142
+ /**
143
+ * 规范化 block 内容(用于幂等性比较)
144
+ *
145
+ * - 去除首尾空白
146
+ * - 规范化换行符
147
+ * - 移除多余空行
148
+ */
149
+ export function normalizeBlockContent(content) {
150
+ return content
151
+ .trim()
152
+ .replace(/\r\n/g, '\n')
153
+ .replace(/\n{3,}/g, '\n\n');
154
+ }
155
+ /**
156
+ * 从现有 spec 文件中提取指定需求块
157
+ */
158
+ export function extractRequirementBlock(content, requirementName) {
159
+ const lines = content.split('\n');
160
+ let inBlock = false;
161
+ let blockLines = [];
162
+ let blockLevel = 0;
163
+ for (const line of lines) {
164
+ const headerMatch = line.match(/^(#{2,3})\s+(?:Requirement:\s*)?(.+)/i);
165
+ if (headerMatch) {
166
+ const level = headerMatch[1].length;
167
+ const name = headerMatch[2].trim();
168
+ if (name === requirementName) {
169
+ inBlock = true;
170
+ blockLevel = level;
171
+ blockLines = [line];
172
+ continue;
173
+ }
174
+ if (inBlock) {
175
+ // 遇到同级或更高级的 header,结束当前 block
176
+ if (level <= blockLevel) {
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ if (inBlock) {
182
+ blockLines.push(line);
183
+ }
184
+ }
185
+ return inBlock ? blockLines.join('\n').trim() : null;
186
+ }
187
+ /**
188
+ * 检查两个 block 是否内容相同(幂等性)
189
+ */
190
+ export function isBlockIdentical(a, b) {
191
+ return normalizeBlockContent(a) === normalizeBlockContent(b);
192
+ }
193
+ //# sourceMappingURL=delta-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta-parser.js","sourceRoot":"","sources":["../../../src/core/archive/delta-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Archive Engine — 移植自 OpenSpec archive.ts (82KB)
3
+ *
4
+ * 事务性归档引擎,核心特性:
5
+ * - 三态决策:write / retire / skip
6
+ * - 并发安全的指纹验证机制
7
+ * - 预览-验证-写入-移动-回滚多阶段流程
8
+ * - 支持批量归档和并行处理
9
+ *
10
+ * **I/O 策略**: 当前全部使用 fs *Sync 变体。
11
+ * 对于 CLI 工具这是可接受的(单用户、阻塞主线程无副作用)。
12
+ * 如需迁移为 API/Server 模式,需将以下方法改为 async 并使用 fs.promises:
13
+ * archive(), archiveBatch(), rollback(), captureSnapshot(), restoreSnapshot()
14
+ */
15
+ export interface ArchiveOptions {
16
+ /** 跳过交互式确认 */
17
+ yes?: boolean;
18
+ /** 跳过 spec 合并 */
19
+ skipSpecs?: boolean;
20
+ /** 跳过验证 */
21
+ noValidate?: boolean;
22
+ /** 强制覆盖已存在的归档 */
23
+ force?: boolean;
24
+ /** 存储注册路径 */
25
+ storePath?: string;
26
+ }
27
+ export type SpecOutcome = 'write' | 'retire' | 'skip';
28
+ export interface ArchiveResult {
29
+ change: string;
30
+ archivedAs: string;
31
+ path: string;
32
+ specsUpdated: number;
33
+ totals: {
34
+ added: number;
35
+ modified: number;
36
+ removed: number;
37
+ total: number;
38
+ };
39
+ warnings: string[];
40
+ }
41
+ export interface SpecMutation {
42
+ source: string;
43
+ target: string;
44
+ outcome: SpecOutcome;
45
+ content: string;
46
+ }
47
+ export interface ArchiveSnapshot {
48
+ files: Map<string, string>;
49
+ path: string;
50
+ }
51
+ export interface ArchiveClaim {
52
+ handle: string;
53
+ contents: string;
54
+ }
55
+ export declare class ArchiveEngine {
56
+ private projectRoot;
57
+ private warnings;
58
+ constructor(projectRoot: string);
59
+ /**
60
+ * 执行归档
61
+ *
62
+ * 六阶段事务流程:
63
+ * 1. PREVIEW — 发现变更,预览操作
64
+ * 2. VALIDATE — 验证完整性
65
+ * 3. CONFIRM — 用户确认
66
+ * 4. WRITE — 写入合并结果
67
+ * 5. MOVE — 移动变更到归档
68
+ * 6. VERIFY — 最终验证
69
+ *
70
+ * 注:当前实现为纯同步操作,保留 async 签名以确保 Promise 接口一致性
71
+ * (测试使用 .rejects.toThrow,调用方使用 await)
72
+ */
73
+ archive(changeName: string, options?: ArchiveOptions): Promise<ArchiveResult>;
74
+ /**
75
+ * 批量归档
76
+ *
77
+ * 支持并行处理多个独立的变更
78
+ */
79
+ archiveBatch(changeNames: string[], options?: ArchiveOptions): Promise<ArchiveResult[]>;
80
+ /**
81
+ * 回滚归档
82
+ *
83
+ * 从归档目录恢复变更
84
+ */
85
+ rollback(archiveName: string): Promise<void>;
86
+ /**
87
+ * 列出所有归档
88
+ */
89
+ listArchives(): {
90
+ name: string;
91
+ path: string;
92
+ archivedAt: string;
93
+ }[];
94
+ /**
95
+ * 发现 spec 变更
96
+ *
97
+ * 扫描 change/specs/ 目录,与主 specs/ 目录比较,
98
+ * 使用 ADDED/MODIFIED/REMOVED 标记决定处理方式
99
+ */
100
+ private findSpecMutations;
101
+ /**
102
+ * 合并 delta 到已有内容
103
+ *
104
+ * 使用结构化合并算法(移植自 OpenSpec),支持:
105
+ * - 四阶段合并顺序:RENAMED → REMOVED → MODIFIED → ADDED
106
+ * - 冲突检测与报告
107
+ * - 幂等性检查(已同步则跳过)
108
+ * - 场景丢失守卫(默认启用)
109
+ * - 能力退休(REMOVED 默认标记为 [RETIRED])
110
+ * - 未计入内容检测(默认启用)
111
+ * - 代码围栏掩码(防止代码块内容被误匹配)
112
+ */
113
+ private mergeDelta;
114
+ /**
115
+ * 将 spec 快照持久化到归档目录,供 rollback 使用
116
+ */
117
+ private saveSnapshotToArchive;
118
+ /**
119
+ * 从归档目录加载 spec 快照
120
+ */
121
+ private loadSnapshotFromArchive;
122
+ /**
123
+ * 捕获 spec 目录快照
124
+ *
125
+ * 记录所有已有文件的内容,以及文件列表(用于回滚时删除新建文件)
126
+ */
127
+ private captureSnapshot;
128
+ /**
129
+ * 恢复 spec 快照(回滚)
130
+ *
131
+ * 1. 恢复快照中已有文件的内容
132
+ * 2. 删除快照之后新建的文件(不在快照中的文件)
133
+ */
134
+ private restoreSnapshot;
135
+ }
136
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/archive/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iBAAiB;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuED,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,WAAW,EAAE,MAAM;IAI/B;;;;;;;;;;;;;OAaG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IA8JvF;;;;OAIG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAsBjG;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClD;;OAEG;IACH,YAAY,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE;IA4BpE;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2DzB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAYvB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CA0BxB"}