@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 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * propose 命令 - 创建变更提案
3
+ *
4
+ * 生成 proposal + specs + design + tasks 全套工件
5
+ */
6
+ interface ProposeOptions {
7
+ schema?: string;
8
+ store?: string;
9
+ json?: boolean;
10
+ }
11
+ export declare function proposeChange(name: string, options: ProposeOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=propose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA2BD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuLxF"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * propose 命令 - 创建变更提案
3
+ *
4
+ * 生成 proposal + specs + design + tasks 全套工件
5
+ */
6
+ import chalk from 'chalk';
7
+ import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
8
+ import { join, relative, dirname } from 'path';
9
+ import { parse as parseYaml } from 'yaml';
10
+ import { createTemplateEngine } from '../core/templates/index.js';
11
+ import { GlobalConfigManager } from '../core/config/global-config.js';
12
+ import { successResponse, errorResponse, outputJson } from '../core/agent-contract.js';
13
+ /**
14
+ * 将 slug 格式的名称转换为可读标题
15
+ * 例如: 'add-user-auth' → 'Add User Auth'
16
+ */
17
+ function slugToTitle(slug) {
18
+ return slug
19
+ .replace(/[-_]/g, ' ')
20
+ .replace(/\b\w/g, c => c.toUpperCase());
21
+ }
22
+ /**
23
+ * 单次扫描替换所有占位符,避免嵌套替换问题
24
+ * 按占位符长度降序排列,确保长占位符优先匹配(如 ${changeName} 优先于 ${changeId})
25
+ */
26
+ function replacePlaceholders(input, replacements) {
27
+ // 构建正则,匹配所有占位符键(转义特殊字符)
28
+ const keys = Object.keys(replacements).sort((a, b) => b.length - a.length);
29
+ if (keys.length === 0)
30
+ return input;
31
+ const escapedKeys = keys.map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
32
+ const pattern = new RegExp(escapedKeys.join('|'), 'g');
33
+ return input.replace(pattern, (match) => replacements[match] ?? match);
34
+ }
35
+ export async function proposeChange(name, options) {
36
+ const projectRoot = process.cwd();
37
+ const schema = options.schema || 'spec-driven';
38
+ const changeDir = join(projectRoot, 'openspec', 'changes', name);
39
+ console.log(chalk.cyan(`\n📋 创建变更提案: ${chalk.bold(name)}\n`));
40
+ console.log(` Schema: ${chalk.bold(schema)}`);
41
+ console.log(` 目录: ${chalk.dim(changeDir)}\n`);
42
+ try {
43
+ // 检查是否已存在
44
+ if (existsSync(changeDir)) {
45
+ console.log(chalk.yellow(` ⚠ 变更 "${name}" 已存在。`));
46
+ console.log(chalk.yellow(` 使用 "specpow apply --change ${name}" 继续实现。`));
47
+ return;
48
+ }
49
+ // 创建变更目录
50
+ mkdirSync(changeDir, { recursive: true });
51
+ mkdirSync(join(changeDir, 'specs'), { recursive: true });
52
+ // 读取 Schema 定义
53
+ const schemaPath = join(projectRoot, 'schemas', schema, 'schema.yaml');
54
+ if (!existsSync(schemaPath)) {
55
+ console.log(chalk.red(` ✗ Schema "${schema}" 未找到: ${schemaPath}`));
56
+ return;
57
+ }
58
+ const schemaContent = parseYaml(readFileSync(schemaPath, 'utf-8'));
59
+ // 按依赖顺序创建工件
60
+ const artifacts = schemaContent.artifacts || [];
61
+ const created = [];
62
+ const timestamp = new Date().toISOString();
63
+ // 初始化模板引擎
64
+ const templateEngine = createTemplateEngine(projectRoot, schema);
65
+ for (const artifact of artifacts) {
66
+ // 检查依赖是否满足
67
+ const depsMet = (artifact.requires || []).every((dep) => created.includes(dep));
68
+ if (!depsMet && artifact.id !== 'proposal') {
69
+ console.log(chalk.dim(` ○ ${artifact.id} — 等待依赖: ${artifact.requires.join(', ')}`));
70
+ continue;
71
+ }
72
+ // 使用模板引擎加载并渲染模板
73
+ let resolvedTemplate = '';
74
+ const templateName = artifact.template || '';
75
+ if (templateName) {
76
+ const templateResult = templateEngine.loadAndRender(templateName, {
77
+ changeId: name,
78
+ changeTitle: slugToTitle(name),
79
+ projectRoot,
80
+ schemaId: schema,
81
+ timestamp,
82
+ artifact_id: artifact.id,
83
+ });
84
+ if (templateResult) {
85
+ resolvedTemplate = templateResult.content;
86
+ // 警告缺失变量
87
+ if (templateResult.missingVariables.length > 0) {
88
+ console.log(chalk.yellow(` ⚠ ${artifact.id}: 缺失变量 ${templateResult.missingVariables.join(', ')},使用占位符`));
89
+ }
90
+ }
91
+ }
92
+ // 回退:模板引擎未找到时的兼容处理
93
+ if (!resolvedTemplate) {
94
+ const templatePath = join(projectRoot, 'schemas', schema, 'templates', templateName);
95
+ if (existsSync(templatePath)) {
96
+ resolvedTemplate = readFileSync(templatePath, 'utf-8');
97
+ }
98
+ }
99
+ // 补充变量替换(兼容 <> 和 ${} 两种占位符风格)
100
+ const varReplacements = {
101
+ '<capability>': name,
102
+ '<change-name>': name,
103
+ '<change-id>': name,
104
+ '<artifact-id>': artifact.id,
105
+ '<date>': new Date().toISOString().split('T')[0],
106
+ '<timestamp>': timestamp,
107
+ '${capability}': name,
108
+ '${changeName}': name,
109
+ '${changeId}': name,
110
+ '${artifactId}': artifact.id,
111
+ };
112
+ let resolvedOutput = artifact.output || `${artifact.id}.md`;
113
+ // 使用单次扫描替换,避免嵌套替换(变量值包含其他占位符时被二次替换)
114
+ resolvedOutput = replacePlaceholders(resolvedOutput, varReplacements);
115
+ resolvedTemplate = replacePlaceholders(resolvedTemplate, varReplacements);
116
+ const outputPath = join(changeDir, resolvedOutput);
117
+ // 确保目录存在
118
+ const outputDir = dirname(outputPath);
119
+ if (!existsSync(outputDir)) {
120
+ mkdirSync(outputDir, { recursive: true });
121
+ }
122
+ writeFileSync(outputPath, resolvedTemplate, 'utf-8');
123
+ created.push(artifact.id);
124
+ console.log(chalk.green(` ✓ 创建工件: ${artifact.id} → ${relative(changeDir, outputPath)}`));
125
+ // 使用模板引擎为工件生成 AI 增强指令(可选,用于后续 apply 阶段)
126
+ if (artifact.instruction) {
127
+ // P1-7: 从 config.json 读取项目级 context 和 per-artifact rules
128
+ const configManager = new GlobalConfigManager(projectRoot);
129
+ const projectContext = configManager.get('context');
130
+ const artifactRules = configManager.get('rules');
131
+ const aiInstruction = templateEngine.generateInstruction(templateName, {
132
+ changeId: name,
133
+ changeTitle: slugToTitle(name),
134
+ projectRoot,
135
+ schemaId: schema,
136
+ timestamp,
137
+ }, artifact.instruction, {
138
+ projectContext: projectContext || undefined,
139
+ rules: artifactRules?.[artifact.id] || undefined,
140
+ });
141
+ // 将增强指令写入 .ai-instructions/ 目录供后续 apply 使用
142
+ if (aiInstruction) {
143
+ const aiDir = join(changeDir, '.ai-instructions');
144
+ if (!existsSync(aiDir)) {
145
+ mkdirSync(aiDir, { recursive: true });
146
+ }
147
+ writeFileSync(join(aiDir, `${artifact.id}.md`), aiInstruction, 'utf-8');
148
+ }
149
+ }
150
+ }
151
+ // 创建 .openspec.yaml 变更配置
152
+ writeFileSync(join(changeDir, '.openspec.yaml'), `schema: ${schema}\n`, 'utf-8');
153
+ // JSON 输出
154
+ if (options.json) {
155
+ const data = {
156
+ change: name,
157
+ artifacts: created.map(id => {
158
+ const artifact = artifacts.find((a) => a.id === id);
159
+ const output = artifact?.output || `${id}.md`;
160
+ return {
161
+ name: id,
162
+ path: join(changeDir, output),
163
+ created: true,
164
+ };
165
+ }),
166
+ schema,
167
+ };
168
+ outputJson(successResponse(data));
169
+ return;
170
+ }
171
+ console.log(chalk.cyan(`\n✅ 变更提案 "${name}" 创建完成!\n`));
172
+ console.log('已创建的工件:');
173
+ for (const id of created) {
174
+ console.log(` ✓ ${id}`);
175
+ }
176
+ console.log('');
177
+ console.log('下一步:');
178
+ console.log(` 1. 编辑工件文件,填充具体内容`);
179
+ console.log(` 2. ${chalk.bold(`specpow status --change ${name}`)} — 查看状态`);
180
+ console.log(` 3. ${chalk.bold(`specpow apply --change ${name}`)} — 开始实现`);
181
+ console.log('');
182
+ }
183
+ catch (err) {
184
+ if (options.json) {
185
+ outputJson(errorResponse(err.message, 'PROPOSE_FAILED', '检查 schema 配置或目录权限'));
186
+ }
187
+ else {
188
+ console.error(chalk.red(`\n❌ 创建变更提案失败: ${err.message}\n`));
189
+ }
190
+ process.exit(1);
191
+ }
192
+ }
193
+ //# sourceMappingURL=propose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * review 命令 — 代码审查
3
+ *
4
+ * 对指定变更或 commit range 执行结构化审查
5
+ */
6
+ export interface ReviewOptions {
7
+ changeId?: string;
8
+ commitRange?: string;
9
+ files?: string[];
10
+ outputFormat: 'markdown' | 'json';
11
+ }
12
+ /**
13
+ * 代码审查发现项(CLI review 命令专用)
14
+ *
15
+ * 注意:此类型与 sdd-engine/types.ts 中的 Finding 类型用途不同:
16
+ * - ReviewFinding: CLI review 命令的静态分析结果(含 major/suggestion 级别)
17
+ * - Finding: SDD 引擎子代理审查的 AI 裁决结果(含 isLoadBearing/addressed)
18
+ */
19
+ export interface ReviewFinding {
20
+ severity: 'critical' | 'major' | 'minor' | 'suggestion';
21
+ category: string;
22
+ file: string;
23
+ line?: number;
24
+ message: string;
25
+ suggestion?: string;
26
+ }
27
+ export interface ReviewReport {
28
+ timestamp: string;
29
+ scope: string;
30
+ findings: ReviewFinding[];
31
+ summary: {
32
+ critical: number;
33
+ major: number;
34
+ minor: number;
35
+ suggestion: number;
36
+ };
37
+ }
38
+ /**
39
+ * 执行代码审查
40
+ */
41
+ export declare function runReview(projectRoot: string, options: ReviewOptions): Promise<ReviewReport>;
42
+ /**
43
+ * CLI 入口:代码审查
44
+ */
45
+ export declare function codeReview(options: {
46
+ range?: string;
47
+ diffFile?: string;
48
+ model?: string;
49
+ }): Promise<void>;
50
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,UAAU,GAAG,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAqID;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC9G"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * review 命令 — 代码审查
3
+ *
4
+ * 对指定变更或 commit range 执行结构化审查
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { execFileSync } from 'child_process';
9
+ /**
10
+ * 执行代码审查
11
+ */
12
+ export async function runReview(projectRoot, options) {
13
+ const report = {
14
+ timestamp: new Date().toISOString(),
15
+ scope: options.commitRange || options.changeId || 'working directory',
16
+ findings: [],
17
+ summary: { critical: 0, major: 0, minor: 0, suggestion: 0 },
18
+ };
19
+ // 获取变更文件列表
20
+ const changedFiles = getChangedFiles(projectRoot, options);
21
+ for (const file of changedFiles) {
22
+ const filePath = path.join(projectRoot, file);
23
+ if (!fs.existsSync(filePath))
24
+ continue;
25
+ const content = fs.readFileSync(filePath, 'utf-8');
26
+ const lines = content.split('\n');
27
+ // 检查项
28
+ checkNaming(file, content, report);
29
+ checkSecurity(file, content, report);
30
+ checkPerformance(file, content, report);
31
+ checkComplexity(file, lines, report);
32
+ }
33
+ // 汇总
34
+ for (const f of report.findings) {
35
+ report.summary[f.severity]++;
36
+ }
37
+ return report;
38
+ }
39
+ function getChangedFiles(projectRoot, options) {
40
+ if (options.files)
41
+ return options.files;
42
+ try {
43
+ if (options.commitRange) {
44
+ // 校验 commitRange 仅包含合法字符(SHA、分支名、~^ 等 git 语法)
45
+ if (!/^[a-zA-Z0-9._\/\-~^]+$/.test(options.commitRange)) {
46
+ throw new Error(`Invalid commit range (rejected for safety): ${JSON.stringify(options.commitRange)}`);
47
+ }
48
+ const result = execFileSync('git', ['diff', '--name-only', options.commitRange], { cwd: projectRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
49
+ return result.trim().split('\n').filter(Boolean);
50
+ }
51
+ // 默认:未暂存的变更
52
+ const result = execFileSync('git', ['diff', '--name-only'], {
53
+ cwd: projectRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
54
+ });
55
+ return result.trim().split('\n').filter(Boolean);
56
+ }
57
+ catch (err) {
58
+ // 仅当 git 不可用(非 git 仓库或 git 未安装)时静默返回空
59
+ // 其他 git 错误(如无效 ref)应抛出,避免误报"无问题"
60
+ if (err.code === 'ENOENT' || err.message?.includes('not a git repository') || err.message?.includes('not a git repo')) {
61
+ return [];
62
+ }
63
+ throw new Error(`git diff failed: ${err.message}`);
64
+ }
65
+ }
66
+ function checkNaming(file, content, report) {
67
+ // 检查类名是否大驼峰
68
+ const classMatches = content.matchAll(/class\s+([a-z]\w*)/g);
69
+ for (const match of classMatches) {
70
+ report.findings.push({
71
+ severity: 'minor',
72
+ category: '命名规范',
73
+ file,
74
+ message: `类名应使用大驼峰: ${match[1]}`,
75
+ suggestion: `改为 ${match[1].charAt(0).toUpperCase() + match[1].slice(1)}`,
76
+ });
77
+ }
78
+ // 检查常量是否全大写
79
+ const constMatches = content.matchAll(/(?:const|final|static final)\s+([A-Z]\w*[a-z]\w*)\s*=/g);
80
+ for (const match of constMatches) {
81
+ report.findings.push({
82
+ severity: 'suggestion',
83
+ category: '命名规范',
84
+ file,
85
+ message: `常量建议全大写: ${match[1]}`,
86
+ });
87
+ }
88
+ }
89
+ function checkSecurity(file, content, report) {
90
+ // 检查硬编码密码
91
+ if (/password\s*=\s*["'][^"']+["']/i.test(content)) {
92
+ report.findings.push({
93
+ severity: 'critical',
94
+ category: '安全性',
95
+ file,
96
+ message: '发现硬编码密码',
97
+ suggestion: '使用环境变量或配置中心管理敏感信息',
98
+ });
99
+ }
100
+ // 检查 SQL 拼接
101
+ if (/["']\s*\+\s*(?:select|insert|update|delete|where)/i.test(content)) {
102
+ report.findings.push({
103
+ severity: 'critical',
104
+ category: '安全性',
105
+ file,
106
+ message: '可能存在 SQL 注入风险(字符串拼接 SQL)',
107
+ suggestion: '使用参数化查询',
108
+ });
109
+ }
110
+ }
111
+ function checkPerformance(file, content, report) {
112
+ // 检查循环内数据库调用
113
+ if (/for\s*\(.*\)\s*\{[\s\S]*?(?:mapper|repository|dao)\.\w+/i.test(content)) {
114
+ report.findings.push({
115
+ severity: 'major',
116
+ category: '性能',
117
+ file,
118
+ message: '循环内可能存在数据库调用(N+1 问题)',
119
+ suggestion: '使用批量查询替代循环单条查询',
120
+ });
121
+ }
122
+ }
123
+ function checkComplexity(file, lines, report) {
124
+ // 检查过长方法 — 先清理字符串字面量和注释中的括号
125
+ let methodStart = -1;
126
+ let braceCount = 0;
127
+ for (let i = 0; i < lines.length; i++) {
128
+ const rawLine = lines[i];
129
+ // 移除字符串字面量和注释,避免误计其中的大括号
130
+ const line = rawLine
131
+ .replace(/\/\/.*$/, '') // 单行注释
132
+ .replace(/"(?:[^"\\]|\\.)*"/g, '""') // 双引号字符串
133
+ .replace(/'(?:[^'\\]|\\.)*'/g, "''") // 单引号字符串
134
+ .replace(/`(?:[^`\\]|\\.)*`/g, '``') // 模板字符串(简化,不处理嵌套 ${})
135
+ .replace(/\/\*[\s\S]*?\*\//g, ''); // 块注释
136
+ if (/(?:public|private|protected)\s+\w+.*\(/.test(line) && methodStart === -1) {
137
+ methodStart = i;
138
+ }
139
+ braceCount += (line.match(/\{/g) || []).length;
140
+ braceCount -= (line.match(/\}/g) || []).length;
141
+ if (methodStart !== -1 && braceCount === 0) {
142
+ const methodLength = i - methodStart;
143
+ if (methodLength > 50) {
144
+ report.findings.push({
145
+ severity: 'minor',
146
+ category: '代码质量',
147
+ file,
148
+ line: methodStart + 1,
149
+ message: `方法过长 (${methodLength} 行)`,
150
+ suggestion: '考虑拆分为更小的方法',
151
+ });
152
+ }
153
+ methodStart = -1;
154
+ }
155
+ }
156
+ }
157
+ /**
158
+ * CLI 入口:代码审查
159
+ */
160
+ export async function codeReview(options) {
161
+ const projectRoot = process.cwd();
162
+ console.log(`\n🔍 代码审查\n`);
163
+ try {
164
+ const report = await runReview(projectRoot, {
165
+ commitRange: options.range,
166
+ outputFormat: 'markdown',
167
+ });
168
+ console.log(`📊 审查结果:\n`);
169
+ console.log(` 范围: ${report.scope}`);
170
+ console.log(` 时间: ${report.timestamp}`);
171
+ console.log();
172
+ if (report.findings.length === 0) {
173
+ console.log(`✅ 未发现问题`);
174
+ }
175
+ else {
176
+ console.log(`发现 ${report.findings.length} 个问题:\n`);
177
+ report.findings.forEach((f) => {
178
+ const icon = f.severity === 'critical' ? '🔴' : f.severity === 'major' ? '🟠' : f.severity === 'minor' ? '🟡' : '💡';
179
+ console.log(` ${icon} [${f.severity}] ${f.category}: ${f.message}`);
180
+ console.log(` 文件: ${f.file}${f.line ? `:${f.line}` : ''}`);
181
+ if (f.suggestion) {
182
+ console.log(` 建议: ${f.suggestion}`);
183
+ }
184
+ console.log();
185
+ });
186
+ }
187
+ console.log(`📈 汇总:`);
188
+ console.log(` 严重: ${report.summary.critical}`);
189
+ console.log(` 重要: ${report.summary.major}`);
190
+ console.log(` 次要: ${report.summary.minor}`);
191
+ console.log(` 建议: ${report.summary.suggestion}`);
192
+ }
193
+ catch (err) {
194
+ console.error(`\n❌ 代码审查失败: ${err.message}\n`);
195
+ process.exit(1);
196
+ }
197
+ }
198
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * schemas 命令 — Schema 管理
3
+ *
4
+ * 列出、安装、验证 Schema
5
+ */
6
+ export interface SchemaInfo {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ path: string;
11
+ artifactCount: number;
12
+ valid: boolean;
13
+ }
14
+ /**
15
+ * 列出所有可用 Schema
16
+ */
17
+ export declare function listSchemas(projectRoot: string): SchemaInfo[];
18
+ /**
19
+ * 验证指定 Schema
20
+ */
21
+ export declare function validateSchemaById(projectRoot: string, schemaId: string): string;
22
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CAwC7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8BhF"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * schemas 命令 — Schema 管理
3
+ *
4
+ * 列出、安装、验证 Schema
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { parse as parseYaml } from 'yaml';
9
+ import { validateSchema } from '../core/validation/index.js';
10
+ /**
11
+ * 列出所有可用 Schema
12
+ */
13
+ export function listSchemas(projectRoot) {
14
+ const schemas = [];
15
+ const schemasDir = path.join(projectRoot, 'schemas');
16
+ if (!fs.existsSync(schemasDir))
17
+ return schemas;
18
+ const entries = fs.readdirSync(schemasDir, { withFileTypes: true });
19
+ for (const entry of entries) {
20
+ if (!entry.isDirectory())
21
+ continue;
22
+ const schemaFile = path.join(schemasDir, entry.name, 'schema.yaml');
23
+ if (!fs.existsSync(schemaFile))
24
+ continue;
25
+ try {
26
+ const content = fs.readFileSync(schemaFile, 'utf-8');
27
+ const parsed = parseYaml(content);
28
+ const validationResult = validateSchema(schemaFile);
29
+ schemas.push({
30
+ id: parsed.schema_id || entry.name,
31
+ name: parsed.name || entry.name,
32
+ description: parsed.description || '',
33
+ path: schemaFile,
34
+ artifactCount: parsed.artifacts?.length || 0,
35
+ valid: validationResult.valid,
36
+ });
37
+ }
38
+ catch {
39
+ schemas.push({
40
+ id: entry.name,
41
+ name: `${entry.name} (解析失败)`,
42
+ description: '(解析失败)',
43
+ path: schemaFile,
44
+ artifactCount: 0,
45
+ valid: false,
46
+ });
47
+ }
48
+ }
49
+ return schemas;
50
+ }
51
+ /**
52
+ * 验证指定 Schema
53
+ */
54
+ export function validateSchemaById(projectRoot, schemaId) {
55
+ const schemaFile = path.join(projectRoot, 'schemas', schemaId, 'schema.yaml');
56
+ if (!fs.existsSync(schemaFile)) {
57
+ return `Schema 不存在: ${schemaId}`;
58
+ }
59
+ const result = validateSchema(schemaFile);
60
+ const lines = [];
61
+ lines.push(`Schema: ${schemaId}`);
62
+ lines.push(`状态: ${result.valid ? '✅ 有效' : '❌ 无效'}`);
63
+ if (result.errors.length > 0) {
64
+ lines.push('');
65
+ lines.push('错误:');
66
+ for (const err of result.errors) {
67
+ lines.push(` ✗ [${err.code}] ${err.message}`);
68
+ }
69
+ }
70
+ if (result.warnings.length > 0) {
71
+ lines.push('');
72
+ lines.push('警告:');
73
+ for (const warn of result.warnings) {
74
+ lines.push(` ! [${warn.code}] ${warn.message}`);
75
+ }
76
+ }
77
+ return lines.join('\n');
78
+ }
79
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}