@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,148 @@
1
+ /**
2
+ * 记忆存储实现
3
+ *
4
+ * P2-12: 基于文件系统的记忆存储
5
+ *
6
+ * 存储结构:
7
+ * .specpow/memory/
8
+ * ├── index.json # 主索引文件
9
+ * ├── sessions/ # 会话日志
10
+ * │ ├── {sessionId}.json
11
+ * │ └── ...
12
+ * └── archives/ # 归档记忆(压缩后的旧记忆)
13
+ * └── {year}-{month}.json
14
+ */
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync } from 'fs';
16
+ import { join } from 'path';
17
+ // ─── 文件存储实现 ───────────────────────────────────────────
18
+ export class FileMemoryStore {
19
+ memoryDir;
20
+ indexPath;
21
+ constructor(projectRoot) {
22
+ this.memoryDir = join(projectRoot, '.specpow', 'memory');
23
+ this.indexPath = join(this.memoryDir, 'index.json');
24
+ this.ensureDir();
25
+ }
26
+ ensureDir() {
27
+ if (!existsSync(this.memoryDir)) {
28
+ mkdirSync(this.memoryDir, { recursive: true });
29
+ }
30
+ const sessionsDir = join(this.memoryDir, 'sessions');
31
+ if (!existsSync(sessionsDir)) {
32
+ mkdirSync(sessionsDir, { recursive: true });
33
+ }
34
+ const archivesDir = join(this.memoryDir, 'archives');
35
+ if (!existsSync(archivesDir)) {
36
+ mkdirSync(archivesDir, { recursive: true });
37
+ }
38
+ }
39
+ async load() {
40
+ if (!existsSync(this.indexPath)) {
41
+ return this.createEmptyIndex();
42
+ }
43
+ try {
44
+ const data = JSON.parse(readFileSync(this.indexPath, 'utf-8'));
45
+ return this.deserializeIndex(data);
46
+ }
47
+ catch (err) {
48
+ console.warn('Failed to load memory index, creating new one:', err);
49
+ return this.createEmptyIndex();
50
+ }
51
+ }
52
+ async save(index) {
53
+ const data = this.serializeIndex(index);
54
+ writeFileSync(this.indexPath, JSON.stringify(data, null, 2), 'utf-8');
55
+ }
56
+ async clear() {
57
+ const emptyIndex = this.createEmptyIndex();
58
+ await this.save(emptyIndex);
59
+ // 清空会话日志
60
+ const sessionsDir = join(this.memoryDir, 'sessions');
61
+ if (existsSync(sessionsDir)) {
62
+ const files = readdirSync(sessionsDir);
63
+ for (const file of files) {
64
+ const filePath = join(sessionsDir, file);
65
+ const stat = statSync(filePath);
66
+ if (stat.isFile()) {
67
+ // 保留目录结构,只删除文件
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // ─── 序列化/反序列化 ───────────────────────────────────────
73
+ createEmptyIndex() {
74
+ return {
75
+ entries: new Map(),
76
+ keywords: new Map(),
77
+ phases: new Map(),
78
+ sessions: new Map(),
79
+ timeline: [],
80
+ };
81
+ }
82
+ serializeIndex(index) {
83
+ return {
84
+ version: 1,
85
+ entries: Array.from(index.entries.entries()),
86
+ keywords: Array.from(index.keywords.entries()).map(([k, v]) => [k, Array.from(v)]),
87
+ phases: Array.from(index.phases.entries()).map(([k, v]) => [k, Array.from(v)]),
88
+ sessions: Array.from(index.sessions.entries()).map(([k, v]) => [k, Array.from(v)]),
89
+ timeline: index.timeline,
90
+ };
91
+ }
92
+ deserializeIndex(data) {
93
+ const index = {
94
+ entries: new Map(data.entries || []),
95
+ keywords: new Map(),
96
+ phases: new Map(),
97
+ sessions: new Map(),
98
+ timeline: data.timeline || [],
99
+ };
100
+ // 反序列化 keywords
101
+ if (data.keywords) {
102
+ for (const [k, v] of data.keywords) {
103
+ index.keywords.set(k, new Set(v));
104
+ }
105
+ }
106
+ // 反序列化 phases
107
+ if (data.phases) {
108
+ for (const [k, v] of data.phases) {
109
+ index.phases.set(k, new Set(v));
110
+ }
111
+ }
112
+ // 反序列化 sessions
113
+ if (data.sessions) {
114
+ for (const [k, v] of data.sessions) {
115
+ index.sessions.set(k, new Set(v));
116
+ }
117
+ }
118
+ return index;
119
+ }
120
+ // ─── 会话日志管理 ─────────────────────────────────────────
121
+ saveSessionLog(sessionId, log) {
122
+ const sessionsDir = join(this.memoryDir, 'sessions');
123
+ const logPath = join(sessionsDir, `${sessionId}.json`);
124
+ writeFileSync(logPath, JSON.stringify(log, null, 2), 'utf-8');
125
+ }
126
+ loadSessionLog(sessionId) {
127
+ const logPath = join(this.memoryDir, 'sessions', `${sessionId}.json`);
128
+ if (!existsSync(logPath)) {
129
+ return null;
130
+ }
131
+ try {
132
+ return JSON.parse(readFileSync(logPath, 'utf-8'));
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ }
138
+ listSessionIds() {
139
+ const sessionsDir = join(this.memoryDir, 'sessions');
140
+ if (!existsSync(sessionsDir)) {
141
+ return [];
142
+ }
143
+ return readdirSync(sessionsDir)
144
+ .filter(f => f.endsWith('.json'))
145
+ .map(f => f.replace('.json', ''));
146
+ }
147
+ }
148
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../../src/core/memory/memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * 跨会话记忆系统类型定义
3
+ *
4
+ * P2-12: 借鉴 Trellis 的 mem 子系统
5
+ *
6
+ * 功能:
7
+ * - 索引 AI 会话日志
8
+ * - 关键词搜索
9
+ * - 阶段切片
10
+ * - 相关性评分
11
+ */
12
+ export interface MemoryEntry {
13
+ /** 唯一标识 */
14
+ id: string;
15
+ /** 时间戳 */
16
+ timestamp: number;
17
+ /** 会话 ID */
18
+ sessionId: string;
19
+ /** 工作流阶段 */
20
+ phase: WorkflowStage;
21
+ /** 内容摘要 */
22
+ content: string;
23
+ /** 关键词 */
24
+ keywords: string[];
25
+ /** 相关性评分 (0-1) */
26
+ relevance: number;
27
+ /** 元数据 */
28
+ metadata: MemoryMetadata;
29
+ }
30
+ export interface MemoryMetadata {
31
+ /** 原始消息类型 */
32
+ messageType: 'user' | 'assistant' | 'system';
33
+ /** 工具调用(如果有) */
34
+ toolCalls?: string[];
35
+ /** 文件引用 */
36
+ files?: string[];
37
+ /** 变更名称 */
38
+ changeName?: string;
39
+ /** 技能名称 */
40
+ skillName?: string;
41
+ }
42
+ export type WorkflowStage = 'explore' | 'propose' | 'apply' | 'verify' | 'archive' | 'general';
43
+ export interface MemoryIndex {
44
+ /** 所有记忆条目 */
45
+ entries: Map<string, MemoryEntry>;
46
+ /** 关键词索引:keyword -> entry IDs */
47
+ keywords: Map<string, Set<string>>;
48
+ /** 阶段索引:phase -> entry IDs */
49
+ phases: Map<WorkflowStage, Set<string>>;
50
+ /** 会话索引:sessionId -> entry IDs */
51
+ sessions: Map<string, Set<string>>;
52
+ /** 时间线索引:timestamp -> entry ID */
53
+ timeline: MemoryEntry[];
54
+ }
55
+ export interface SessionLog {
56
+ /** 会话 ID */
57
+ sessionId: string;
58
+ /** 开始时间 */
59
+ startTime: number;
60
+ /** 结束时间 */
61
+ endTime?: number;
62
+ /** 消息列表 */
63
+ messages: SessionMessage[];
64
+ }
65
+ export interface SessionMessage {
66
+ /** 时间戳 */
67
+ timestamp: number;
68
+ /** 消息类型 */
69
+ type: 'user' | 'assistant' | 'system';
70
+ /** 消息内容 */
71
+ content: string;
72
+ /** 工具调用 */
73
+ toolCalls?: ToolCall[];
74
+ /** 元数据 */
75
+ metadata?: Record<string, any>;
76
+ }
77
+ export interface ToolCall {
78
+ /** 工具名称 */
79
+ name: string;
80
+ /** 输入参数 */
81
+ input: Record<string, any>;
82
+ /** 输出结果 */
83
+ output?: string;
84
+ /** 时间戳 */
85
+ timestamp: number;
86
+ }
87
+ export interface MemorySearchQuery {
88
+ /** 关键词 */
89
+ keywords?: string[];
90
+ /** 工作流阶段过滤 */
91
+ phases?: WorkflowStage[];
92
+ /** 时间范围 */
93
+ timeRange?: {
94
+ start: number;
95
+ end: number;
96
+ };
97
+ /** 会话 ID 过滤 */
98
+ sessionId?: string;
99
+ /** 最大结果数 */
100
+ limit?: number;
101
+ /** 最小相关性阈值 */
102
+ minRelevance?: number;
103
+ }
104
+ export interface MemorySearchResult {
105
+ /** 匹配的记忆条目 */
106
+ entries: MemoryEntry[];
107
+ /** 总匹配数 */
108
+ total: number;
109
+ /** 搜索耗时(毫秒) */
110
+ duration: number;
111
+ }
112
+ export interface MemoryStore {
113
+ /** 加载索引 */
114
+ load(): Promise<MemoryIndex>;
115
+ /** 保存索引 */
116
+ save(index: MemoryIndex): Promise<void>;
117
+ /** 清空索引 */
118
+ clear(): Promise<void>;
119
+ /** 保存会话日志 */
120
+ saveSessionLog(sessionId: string, log: SessionLog): void;
121
+ /** 加载会话日志 */
122
+ loadSessionLog(sessionId: string): SessionLog | null;
123
+ /** 列出所有会话 ID */
124
+ listSessionIds(): string[];
125
+ }
126
+ export interface MemoryManager {
127
+ /** 索引会话日志 */
128
+ indexSession(log: SessionLog): Promise<number>;
129
+ /** 搜索记忆 */
130
+ search(query: MemorySearchQuery): Promise<MemorySearchResult>;
131
+ /** 获取指定阶段的记忆 */
132
+ getByPhase(phase: WorkflowStage, limit?: number): Promise<MemoryEntry[]>;
133
+ /** 获取最近的记忆 */
134
+ getRecent(limit?: number): Promise<MemoryEntry[]>;
135
+ /** 清空所有记忆 */
136
+ clear(): Promise<void>;
137
+ /** 获取统计信息 */
138
+ getStats(): Promise<MemoryStats>;
139
+ }
140
+ export interface MemoryStats {
141
+ /** 总记忆数 */
142
+ totalEntries: number;
143
+ /** 总会话数 */
144
+ totalSessions: number;
145
+ /** 各阶段记忆数 */
146
+ phaseCounts: Record<WorkflowStage, number>;
147
+ /** 最早记忆时间 */
148
+ oldestEntry?: number;
149
+ /** 最新记忆时间 */
150
+ newestEntry?: number;
151
+ /** 索引大小(字节) */
152
+ indexSize: number;
153
+ }
154
+ //# sourceMappingURL=memory-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-types.d.ts","sourceRoot":"","sources":["../../../src/core/memory/memory-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 跨会话记忆系统类型定义
3
+ *
4
+ * P2-12: 借鉴 Trellis 的 mem 子系统
5
+ *
6
+ * 功能:
7
+ * - 索引 AI 会话日志
8
+ * - 关键词搜索
9
+ * - 阶段切片
10
+ * - 相关性评分
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=memory-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-types.js","sourceRoot":"","sources":["../../../src/core/memory/memory-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Migration Tool — 移植自 OpenSpec migration.ts (20KB)
3
+ *
4
+ * 版本迁移工具:
5
+ * - 从旧版本升级到新版本
6
+ * - 目录结构迁移
7
+ * - 配置文件迁移
8
+ * - 支持 --dry-run 预览
9
+ * - 自动备份
10
+ */
11
+ export interface MigrationStep {
12
+ name: string;
13
+ description: string;
14
+ fromVersion: string;
15
+ toVersion: string;
16
+ execute(projectRoot: string, dryRun?: boolean): Promise<void>;
17
+ }
18
+ export interface MigrationResult {
19
+ success: boolean;
20
+ steps: {
21
+ name: string;
22
+ status: 'executed' | 'skipped' | 'failed' | 'previewed';
23
+ message: string;
24
+ }[];
25
+ currentVersion: string;
26
+ targetVersion: string;
27
+ backupPath?: string;
28
+ }
29
+ export interface DryRunResult {
30
+ pendingSteps: {
31
+ name: string;
32
+ description: string;
33
+ fromVersion: string;
34
+ toVersion: string;
35
+ }[];
36
+ currentVersion: string;
37
+ targetVersion: string;
38
+ }
39
+ export declare class MigrationRunner {
40
+ private projectRoot;
41
+ constructor(projectRoot: string);
42
+ /**
43
+ * 获取当前版本
44
+ */
45
+ getCurrentVersion(): string;
46
+ /**
47
+ * 检查需要执行的迁移
48
+ *
49
+ * @param targetVersion - 目标版本(与 run() 保持一致),默认为最高迁移的目标版本
50
+ */
51
+ getPendingMigrations(targetVersion?: string): MigrationStep[];
52
+ /**
53
+ * 预览迁移(dry-run)
54
+ *
55
+ * 显示将要执行的迁移步骤,但不实际执行
56
+ */
57
+ dryRun(targetVersion?: string): DryRunResult;
58
+ /**
59
+ * 创建备份
60
+ *
61
+ * 在执行迁移前备份关键配置文件
62
+ */
63
+ createBackup(): string | null;
64
+ /**
65
+ * 运行所有待执行的迁移
66
+ */
67
+ run(targetVersion?: string, options?: {
68
+ dryRun?: boolean;
69
+ backup?: boolean;
70
+ }): Promise<MigrationResult>;
71
+ /**
72
+ * 运行指定迁移步骤
73
+ */
74
+ runStep(stepName: string): Promise<void>;
75
+ /**
76
+ * 列出所有可用的迁移
77
+ */
78
+ listMigrations(): MigrationStep[];
79
+ }
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/migration/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpG,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9F,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAoMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAM3B;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAY7D;;;;OAIG;IACH,MAAM,CAAC,aAAa,GAAE,MAAgB,GAAG,YAAY;IAqBrD;;;;OAIG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAyB7B;;OAEG;IACG,GAAG,CAAC,aAAa,GAAE,MAAgB,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IA2F1H;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C;;OAEG;IACH,cAAc,IAAI,aAAa,EAAE;CAGlC"}