specweave 0.10.1 → 0.12.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 (656) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CLAUDE.md +184 -288
  3. package/README.md +48 -21
  4. package/dist/cli/commands/init.d.ts.map +1 -1
  5. package/dist/cli/commands/init.js +75 -113
  6. package/dist/cli/commands/init.js.map +1 -1
  7. package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  8. package/dist/cli/helpers/issue-tracker/index.js +39 -0
  9. package/dist/cli/helpers/issue-tracker/index.js.map +1 -1
  10. package/dist/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  11. package/dist/cli/helpers/issue-tracker/jira.js +2 -9
  12. package/dist/cli/helpers/issue-tracker/jira.js.map +1 -1
  13. package/dist/hooks/lib/git-diff-analyzer.d.ts +89 -0
  14. package/dist/hooks/lib/git-diff-analyzer.d.ts.map +1 -0
  15. package/dist/hooks/lib/git-diff-analyzer.js +226 -0
  16. package/dist/hooks/lib/git-diff-analyzer.js.map +1 -0
  17. package/dist/hooks/lib/prepare-reflection-context.d.ts +42 -0
  18. package/dist/hooks/lib/prepare-reflection-context.d.ts.map +1 -0
  19. package/dist/hooks/lib/prepare-reflection-context.js +123 -0
  20. package/dist/hooks/lib/prepare-reflection-context.js.map +1 -0
  21. package/dist/hooks/lib/reflection-config-loader.d.ts +45 -0
  22. package/dist/hooks/lib/reflection-config-loader.d.ts.map +1 -0
  23. package/dist/hooks/lib/reflection-config-loader.js +132 -0
  24. package/dist/hooks/lib/reflection-config-loader.js.map +1 -0
  25. package/dist/hooks/lib/reflection-parser.d.ts +33 -0
  26. package/dist/hooks/lib/reflection-parser.d.ts.map +1 -0
  27. package/dist/hooks/lib/reflection-parser.js +419 -0
  28. package/dist/hooks/lib/reflection-parser.js.map +1 -0
  29. package/dist/hooks/lib/reflection-prompt-builder.d.ts +56 -0
  30. package/dist/hooks/lib/reflection-prompt-builder.d.ts.map +1 -0
  31. package/dist/hooks/lib/reflection-prompt-builder.js +239 -0
  32. package/dist/hooks/lib/reflection-prompt-builder.js.map +1 -0
  33. package/dist/hooks/lib/reflection-storage.d.ts +64 -0
  34. package/dist/hooks/lib/reflection-storage.d.ts.map +1 -0
  35. package/dist/hooks/lib/reflection-storage.js +305 -0
  36. package/dist/hooks/lib/reflection-storage.js.map +1 -0
  37. package/dist/hooks/lib/run-self-reflection.d.ts +43 -0
  38. package/dist/hooks/lib/run-self-reflection.d.ts.map +1 -0
  39. package/dist/hooks/lib/run-self-reflection.js +203 -0
  40. package/dist/hooks/lib/run-self-reflection.js.map +1 -0
  41. package/dist/hooks/lib/types/reflection-types.d.ts +164 -0
  42. package/dist/hooks/lib/types/reflection-types.d.ts.map +1 -0
  43. package/dist/hooks/lib/types/reflection-types.js +73 -0
  44. package/dist/hooks/lib/types/reflection-types.js.map +1 -0
  45. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +89 -0
  46. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +1 -0
  47. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +226 -0
  48. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +1 -0
  49. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +60 -0
  50. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +1 -0
  51. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +201 -0
  52. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +1 -0
  53. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +42 -0
  54. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +1 -0
  55. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +123 -0
  56. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +1 -0
  57. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +45 -0
  58. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +1 -0
  59. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +132 -0
  60. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +1 -0
  61. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +33 -0
  62. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +1 -0
  63. package/dist/plugins/specweave/lib/hooks/reflection-parser.js +419 -0
  64. package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +1 -0
  65. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +56 -0
  66. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +1 -0
  67. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +239 -0
  68. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +1 -0
  69. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +64 -0
  70. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +1 -0
  71. package/dist/plugins/specweave/lib/hooks/reflection-storage.js +305 -0
  72. package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +1 -0
  73. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +43 -0
  74. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +1 -0
  75. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +203 -0
  76. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +1 -0
  77. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +27 -0
  78. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -0
  79. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +116 -0
  80. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -0
  81. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +59 -0
  82. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +1 -0
  83. package/dist/plugins/specweave/lib/hooks/translate-file.js +350 -0
  84. package/dist/plugins/specweave/lib/hooks/translate-file.js.map +1 -0
  85. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +13 -0
  86. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +1 -0
  87. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +175 -0
  88. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +1 -0
  89. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +164 -0
  90. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +1 -0
  91. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +73 -0
  92. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +1 -0
  93. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +29 -0
  94. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +1 -0
  95. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +203 -0
  96. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +1 -0
  97. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts +94 -0
  98. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +1 -0
  99. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js +219 -0
  100. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +1 -0
  101. package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts +124 -0
  102. package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts.map +1 -0
  103. package/dist/plugins/specweave-ado/lib/ado-client-v2.js +382 -0
  104. package/dist/plugins/specweave-ado/lib/ado-client-v2.js.map +1 -0
  105. package/dist/plugins/specweave-ado/lib/ado-client.d.ts +112 -0
  106. package/dist/plugins/specweave-ado/lib/ado-client.d.ts.map +1 -0
  107. package/dist/plugins/specweave-ado/lib/ado-client.js +257 -0
  108. package/dist/plugins/specweave-ado/lib/ado-client.js.map +1 -0
  109. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.d.ts +40 -0
  110. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.d.ts.map +1 -0
  111. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.js +370 -0
  112. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.js.map +1 -0
  113. package/dist/plugins/specweave-ado/lib/project-selector.d.ts +42 -0
  114. package/dist/plugins/specweave-ado/lib/project-selector.d.ts.map +1 -0
  115. package/dist/plugins/specweave-ado/lib/project-selector.js +211 -0
  116. package/dist/plugins/specweave-ado/lib/project-selector.js.map +1 -0
  117. package/dist/plugins/specweave-github/lib/github-board-resolver.d.ts +54 -0
  118. package/dist/plugins/specweave-github/lib/github-board-resolver.d.ts.map +1 -0
  119. package/dist/plugins/specweave-github/lib/github-board-resolver.js +122 -0
  120. package/dist/plugins/specweave-github/lib/github-board-resolver.js.map +1 -0
  121. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +104 -0
  122. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -0
  123. package/dist/plugins/specweave-github/lib/github-client-v2.js +408 -0
  124. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -0
  125. package/dist/plugins/specweave-github/lib/github-client.d.ts +10 -0
  126. package/dist/plugins/specweave-github/lib/github-client.d.ts.map +1 -1
  127. package/dist/plugins/specweave-github/lib/github-client.js +24 -0
  128. package/dist/plugins/specweave-github/lib/github-client.js.map +1 -1
  129. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.d.ts +29 -0
  130. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.d.ts.map +1 -0
  131. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.js +268 -0
  132. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.js.map +1 -0
  133. package/dist/plugins/specweave-github/lib/index.d.ts.map +1 -1
  134. package/dist/plugins/specweave-github/lib/index.js.map +1 -1
  135. package/dist/plugins/specweave-github/lib/repo-selector.d.ts +49 -0
  136. package/dist/plugins/specweave-github/lib/repo-selector.d.ts.map +1 -0
  137. package/dist/plugins/specweave-github/lib/repo-selector.js +216 -0
  138. package/dist/plugins/specweave-github/lib/repo-selector.js.map +1 -0
  139. package/dist/plugins/specweave-github/lib/subtask-sync.d.ts.map +1 -1
  140. package/dist/plugins/specweave-github/lib/subtask-sync.js.map +1 -1
  141. package/dist/plugins/specweave-github/lib/task-parser.d.ts.map +1 -1
  142. package/dist/plugins/specweave-github/lib/task-parser.js.map +1 -1
  143. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
  144. package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
  145. package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
  146. package/dist/plugins/specweave-github/lib/types.js.map +1 -1
  147. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +50 -0
  148. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +1 -0
  149. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js +84 -0
  150. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +1 -0
  151. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.d.ts +33 -0
  152. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.d.ts.map +1 -0
  153. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.js +206 -0
  154. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.js.map +1 -0
  155. package/dist/plugins/specweave-jira/lib/project-selector.d.ts +42 -0
  156. package/dist/plugins/specweave-jira/lib/project-selector.d.ts.map +1 -0
  157. package/dist/plugins/specweave-jira/lib/project-selector.js +216 -0
  158. package/dist/plugins/specweave-jira/lib/project-selector.js.map +1 -0
  159. package/dist/plugins/specweave-jira/lib/reorganization-detector.d.ts +67 -0
  160. package/dist/plugins/specweave-jira/lib/reorganization-detector.d.ts.map +1 -0
  161. package/dist/plugins/specweave-jira/lib/reorganization-detector.js +252 -0
  162. package/dist/plugins/specweave-jira/lib/reorganization-detector.js.map +1 -0
  163. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts +29 -0
  164. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +1 -0
  165. package/dist/plugins/specweave-jira/lib/setup-wizard.js +219 -0
  166. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -0
  167. package/dist/src/adapters/adapter-base.d.ts +71 -0
  168. package/dist/src/adapters/adapter-base.d.ts.map +1 -0
  169. package/dist/src/adapters/adapter-base.js +139 -0
  170. package/dist/src/adapters/adapter-base.js.map +1 -0
  171. package/dist/src/adapters/adapter-interface.d.ts +149 -0
  172. package/dist/src/adapters/adapter-interface.d.ts.map +1 -0
  173. package/dist/src/adapters/adapter-interface.js +8 -0
  174. package/dist/src/adapters/adapter-interface.js.map +1 -0
  175. package/dist/src/adapters/adapter-loader.d.ts +91 -0
  176. package/dist/src/adapters/adapter-loader.d.ts.map +1 -0
  177. package/dist/src/adapters/adapter-loader.js +238 -0
  178. package/dist/src/adapters/adapter-loader.js.map +1 -0
  179. package/dist/src/adapters/agents-md-generator.d.ts +48 -0
  180. package/dist/src/adapters/agents-md-generator.d.ts.map +1 -0
  181. package/dist/src/adapters/agents-md-generator.js +193 -0
  182. package/dist/src/adapters/agents-md-generator.js.map +1 -0
  183. package/dist/src/adapters/claude/adapter.d.ts +128 -0
  184. package/dist/src/adapters/claude/adapter.d.ts.map +1 -0
  185. package/dist/src/adapters/claude/adapter.js +415 -0
  186. package/dist/src/adapters/claude/adapter.js.map +1 -0
  187. package/dist/src/adapters/claude-md-generator.d.ts +78 -0
  188. package/dist/src/adapters/claude-md-generator.d.ts.map +1 -0
  189. package/dist/src/adapters/claude-md-generator.js +307 -0
  190. package/dist/src/adapters/claude-md-generator.js.map +1 -0
  191. package/dist/src/adapters/codex/adapter.d.ts +50 -0
  192. package/dist/src/adapters/codex/adapter.d.ts.map +1 -0
  193. package/dist/src/adapters/codex/adapter.js +316 -0
  194. package/dist/src/adapters/codex/adapter.js.map +1 -0
  195. package/dist/src/adapters/cursor/adapter.d.ts +98 -0
  196. package/dist/src/adapters/cursor/adapter.d.ts.map +1 -0
  197. package/dist/src/adapters/cursor/adapter.js +406 -0
  198. package/dist/src/adapters/cursor/adapter.js.map +1 -0
  199. package/dist/src/adapters/doc-generator.d.ts +69 -0
  200. package/dist/src/adapters/doc-generator.d.ts.map +1 -0
  201. package/dist/src/adapters/doc-generator.js +247 -0
  202. package/dist/src/adapters/doc-generator.js.map +1 -0
  203. package/dist/src/adapters/gemini/adapter.d.ts +50 -0
  204. package/dist/src/adapters/gemini/adapter.d.ts.map +1 -0
  205. package/dist/src/adapters/gemini/adapter.js +281 -0
  206. package/dist/src/adapters/gemini/adapter.js.map +1 -0
  207. package/dist/src/adapters/generic/adapter.d.ts +86 -0
  208. package/dist/src/adapters/generic/adapter.d.ts.map +1 -0
  209. package/dist/src/adapters/generic/adapter.js +338 -0
  210. package/dist/src/adapters/generic/adapter.js.map +1 -0
  211. package/dist/src/cli/commands/abandon.d.ts +13 -0
  212. package/dist/src/cli/commands/abandon.d.ts.map +1 -0
  213. package/dist/src/cli/commands/abandon.js +15 -0
  214. package/dist/src/cli/commands/abandon.js.map +1 -0
  215. package/dist/src/cli/commands/import-docs.d.ts +21 -0
  216. package/dist/src/cli/commands/import-docs.d.ts.map +1 -0
  217. package/dist/src/cli/commands/import-docs.js +146 -0
  218. package/dist/src/cli/commands/import-docs.js.map +1 -0
  219. package/dist/src/cli/commands/init-multiproject.d.ts +11 -0
  220. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -0
  221. package/dist/src/cli/commands/init-multiproject.js +202 -0
  222. package/dist/src/cli/commands/init-multiproject.js.map +1 -0
  223. package/dist/src/cli/commands/init.d.ts +9 -0
  224. package/dist/src/cli/commands/init.d.ts.map +1 -0
  225. package/dist/src/cli/commands/init.js +1205 -0
  226. package/dist/src/cli/commands/init.js.map +1 -0
  227. package/dist/src/cli/commands/install.d.ts +9 -0
  228. package/dist/src/cli/commands/install.d.ts.map +1 -0
  229. package/dist/src/cli/commands/install.js +127 -0
  230. package/dist/src/cli/commands/install.js.map +1 -0
  231. package/dist/src/cli/commands/list.d.ts +8 -0
  232. package/dist/src/cli/commands/list.d.ts.map +1 -0
  233. package/dist/src/cli/commands/list.js +119 -0
  234. package/dist/src/cli/commands/list.js.map +1 -0
  235. package/dist/src/cli/commands/migrate-to-multiproject.d.ts +37 -0
  236. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -0
  237. package/dist/src/cli/commands/migrate-to-multiproject.js +189 -0
  238. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -0
  239. package/dist/src/cli/commands/migrate-to-profiles.d.ts +25 -0
  240. package/dist/src/cli/commands/migrate-to-profiles.d.ts.map +1 -0
  241. package/dist/src/cli/commands/migrate-to-profiles.js +350 -0
  242. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -0
  243. package/dist/src/cli/commands/pause.d.ts +13 -0
  244. package/dist/src/cli/commands/pause.d.ts.map +1 -0
  245. package/dist/src/cli/commands/pause.js +15 -0
  246. package/dist/src/cli/commands/pause.js.map +1 -0
  247. package/dist/src/cli/commands/qa.d.ts +54 -0
  248. package/dist/src/cli/commands/qa.d.ts.map +1 -0
  249. package/dist/src/cli/commands/qa.js +98 -0
  250. package/dist/src/cli/commands/qa.js.map +1 -0
  251. package/dist/src/cli/commands/resume.d.ts +12 -0
  252. package/dist/src/cli/commands/resume.d.ts.map +1 -0
  253. package/dist/src/cli/commands/resume.js +14 -0
  254. package/dist/src/cli/commands/resume.js.map +1 -0
  255. package/dist/src/cli/commands/status.d.ts +12 -0
  256. package/dist/src/cli/commands/status.d.ts.map +1 -0
  257. package/dist/src/cli/commands/status.js +23 -0
  258. package/dist/src/cli/commands/status.js.map +1 -0
  259. package/dist/src/cli/commands/switch-project.d.ts +13 -0
  260. package/dist/src/cli/commands/switch-project.d.ts.map +1 -0
  261. package/dist/src/cli/commands/switch-project.js +91 -0
  262. package/dist/src/cli/commands/switch-project.js.map +1 -0
  263. package/dist/src/cli/commands/validate-jira.d.ts +35 -0
  264. package/dist/src/cli/commands/validate-jira.d.ts.map +1 -0
  265. package/dist/src/cli/commands/validate-jira.js +112 -0
  266. package/dist/src/cli/commands/validate-jira.js.map +1 -0
  267. package/dist/src/cli/commands/validate-plugins.d.ts +41 -0
  268. package/dist/src/cli/commands/validate-plugins.d.ts.map +1 -0
  269. package/dist/src/cli/commands/validate-plugins.js +171 -0
  270. package/dist/src/cli/commands/validate-plugins.js.map +1 -0
  271. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +57 -0
  272. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
  273. package/dist/src/cli/helpers/issue-tracker/ado.js +243 -0
  274. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -0
  275. package/dist/src/cli/helpers/issue-tracker/github.d.ts +65 -0
  276. package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -0
  277. package/dist/src/cli/helpers/issue-tracker/github.js +426 -0
  278. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -0
  279. package/dist/src/cli/helpers/issue-tracker/index.d.ts +22 -0
  280. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -0
  281. package/dist/src/cli/helpers/issue-tracker/index.js +314 -0
  282. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -0
  283. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +61 -0
  284. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
  285. package/dist/src/cli/helpers/issue-tracker/jira.js +404 -0
  286. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -0
  287. package/dist/src/cli/helpers/issue-tracker/types.d.ts +107 -0
  288. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -0
  289. package/dist/src/cli/helpers/issue-tracker/types.js +16 -0
  290. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -0
  291. package/dist/src/cli/helpers/issue-tracker/utils.d.ts +112 -0
  292. package/dist/src/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
  293. package/dist/src/cli/helpers/issue-tracker/utils.js +247 -0
  294. package/dist/src/cli/helpers/issue-tracker/utils.js.map +1 -0
  295. package/dist/src/core/agent-model-manager.d.ts +52 -0
  296. package/dist/src/core/agent-model-manager.d.ts.map +1 -0
  297. package/dist/src/core/agent-model-manager.js +120 -0
  298. package/dist/src/core/agent-model-manager.js.map +1 -0
  299. package/dist/src/core/brownfield/analyzer.d.ts +86 -0
  300. package/dist/src/core/brownfield/analyzer.d.ts.map +1 -0
  301. package/dist/src/core/brownfield/analyzer.js +365 -0
  302. package/dist/src/core/brownfield/analyzer.js.map +1 -0
  303. package/dist/src/core/brownfield/importer.d.ts +76 -0
  304. package/dist/src/core/brownfield/importer.d.ts.map +1 -0
  305. package/dist/src/core/brownfield/importer.js +287 -0
  306. package/dist/src/core/brownfield/importer.js.map +1 -0
  307. package/dist/src/core/config-manager.d.ts +47 -0
  308. package/dist/src/core/config-manager.d.ts.map +1 -0
  309. package/dist/src/core/config-manager.js +136 -0
  310. package/dist/src/core/config-manager.js.map +1 -0
  311. package/dist/src/core/cost-tracker.d.ts +108 -0
  312. package/dist/src/core/cost-tracker.d.ts.map +1 -0
  313. package/dist/src/core/cost-tracker.js +281 -0
  314. package/dist/src/core/cost-tracker.js.map +1 -0
  315. package/dist/src/core/credentials-manager.d.ts +107 -0
  316. package/dist/src/core/credentials-manager.d.ts.map +1 -0
  317. package/dist/src/core/credentials-manager.js +457 -0
  318. package/dist/src/core/credentials-manager.js.map +1 -0
  319. package/dist/src/core/i18n/language-detector.d.ts +29 -0
  320. package/dist/src/core/i18n/language-detector.d.ts.map +1 -0
  321. package/dist/src/core/i18n/language-detector.js +143 -0
  322. package/dist/src/core/i18n/language-detector.js.map +1 -0
  323. package/dist/src/core/i18n/language-manager.d.ts +101 -0
  324. package/dist/src/core/i18n/language-manager.d.ts.map +1 -0
  325. package/dist/src/core/i18n/language-manager.js +232 -0
  326. package/dist/src/core/i18n/language-manager.js.map +1 -0
  327. package/dist/src/core/i18n/language-registry.d.ts +44 -0
  328. package/dist/src/core/i18n/language-registry.d.ts.map +1 -0
  329. package/dist/src/core/i18n/language-registry.js +234 -0
  330. package/dist/src/core/i18n/language-registry.js.map +1 -0
  331. package/dist/src/core/i18n/locale-manager.d.ts +62 -0
  332. package/dist/src/core/i18n/locale-manager.d.ts.map +1 -0
  333. package/dist/src/core/i18n/locale-manager.js +137 -0
  334. package/dist/src/core/i18n/locale-manager.js.map +1 -0
  335. package/dist/src/core/i18n/system-prompt-injector.d.ts +33 -0
  336. package/dist/src/core/i18n/system-prompt-injector.d.ts.map +1 -0
  337. package/dist/src/core/i18n/system-prompt-injector.js +131 -0
  338. package/dist/src/core/i18n/system-prompt-injector.js.map +1 -0
  339. package/dist/src/core/i18n/types.d.ts +151 -0
  340. package/dist/src/core/i18n/types.d.ts.map +1 -0
  341. package/dist/src/core/i18n/types.js +11 -0
  342. package/dist/src/core/i18n/types.js.map +1 -0
  343. package/dist/src/core/increment/limits.d.ts +68 -0
  344. package/dist/src/core/increment/limits.d.ts.map +1 -0
  345. package/dist/src/core/increment/limits.js +224 -0
  346. package/dist/src/core/increment/limits.js.map +1 -0
  347. package/dist/src/core/increment/metadata-manager.d.ts +114 -0
  348. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -0
  349. package/dist/src/core/increment/metadata-manager.js +320 -0
  350. package/dist/src/core/increment/metadata-manager.js.map +1 -0
  351. package/dist/src/core/increment/status-commands.d.ts +43 -0
  352. package/dist/src/core/increment/status-commands.d.ts.map +1 -0
  353. package/dist/src/core/increment/status-commands.js +277 -0
  354. package/dist/src/core/increment/status-commands.js.map +1 -0
  355. package/dist/src/core/increment-status.d.ts +72 -0
  356. package/dist/src/core/increment-status.d.ts.map +1 -0
  357. package/dist/src/core/increment-status.js +227 -0
  358. package/dist/src/core/increment-status.js.map +1 -0
  359. package/dist/src/core/model-selector.d.ts +57 -0
  360. package/dist/src/core/model-selector.d.ts.map +1 -0
  361. package/dist/src/core/model-selector.js +115 -0
  362. package/dist/src/core/model-selector.js.map +1 -0
  363. package/dist/src/core/phase-detector.d.ts +62 -0
  364. package/dist/src/core/phase-detector.d.ts.map +1 -0
  365. package/dist/src/core/phase-detector.js +229 -0
  366. package/dist/src/core/phase-detector.js.map +1 -0
  367. package/dist/src/core/plugin-loader.d.ts +131 -0
  368. package/dist/src/core/plugin-loader.d.ts.map +1 -0
  369. package/dist/src/core/plugin-loader.js +421 -0
  370. package/dist/src/core/plugin-loader.js.map +1 -0
  371. package/dist/src/core/project-manager.d.ts +127 -0
  372. package/dist/src/core/project-manager.d.ts.map +1 -0
  373. package/dist/src/core/project-manager.js +524 -0
  374. package/dist/src/core/project-manager.js.map +1 -0
  375. package/dist/src/core/project-structure-detector.d.ts +92 -0
  376. package/dist/src/core/project-structure-detector.d.ts.map +1 -0
  377. package/dist/src/core/project-structure-detector.js +289 -0
  378. package/dist/src/core/project-structure-detector.js.map +1 -0
  379. package/dist/src/core/qa/qa-runner.d.ts +16 -0
  380. package/dist/src/core/qa/qa-runner.d.ts.map +1 -0
  381. package/dist/src/core/qa/qa-runner.js +404 -0
  382. package/dist/src/core/qa/qa-runner.js.map +1 -0
  383. package/dist/src/core/qa/quality-gate-decider.d.ts +53 -0
  384. package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -0
  385. package/dist/src/core/qa/quality-gate-decider.js +268 -0
  386. package/dist/src/core/qa/quality-gate-decider.js.map +1 -0
  387. package/dist/src/core/qa/risk-calculator.d.ts +126 -0
  388. package/dist/src/core/qa/risk-calculator.d.ts.map +1 -0
  389. package/dist/src/core/qa/risk-calculator.js +247 -0
  390. package/dist/src/core/qa/risk-calculator.js.map +1 -0
  391. package/dist/src/core/qa/types.d.ts +315 -0
  392. package/dist/src/core/qa/types.d.ts.map +1 -0
  393. package/dist/src/core/qa/types.js +8 -0
  394. package/dist/src/core/qa/types.js.map +1 -0
  395. package/dist/src/core/rfc-generator-v2.d.ts +149 -0
  396. package/dist/src/core/rfc-generator-v2.d.ts.map +1 -0
  397. package/dist/src/core/rfc-generator-v2.js +399 -0
  398. package/dist/src/core/rfc-generator-v2.js.map +1 -0
  399. package/dist/src/core/sync/bidirectional-engine.d.ts +110 -0
  400. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -0
  401. package/dist/src/core/sync/bidirectional-engine.js +356 -0
  402. package/dist/src/core/sync/bidirectional-engine.js.map +1 -0
  403. package/dist/src/core/sync/folder-mapper.d.ts +71 -0
  404. package/dist/src/core/sync/folder-mapper.d.ts.map +1 -0
  405. package/dist/src/core/sync/folder-mapper.js +168 -0
  406. package/dist/src/core/sync/folder-mapper.js.map +1 -0
  407. package/dist/src/core/sync/profile-manager.d.ts +72 -0
  408. package/dist/src/core/sync/profile-manager.d.ts.map +1 -0
  409. package/dist/src/core/sync/profile-manager.js +338 -0
  410. package/dist/src/core/sync/profile-manager.js.map +1 -0
  411. package/dist/src/core/sync/profile-selector.d.ts +52 -0
  412. package/dist/src/core/sync/profile-selector.d.ts.map +1 -0
  413. package/dist/src/core/sync/profile-selector.js +179 -0
  414. package/dist/src/core/sync/profile-selector.js.map +1 -0
  415. package/dist/src/core/sync/profile-validator.d.ts +52 -0
  416. package/dist/src/core/sync/profile-validator.d.ts.map +1 -0
  417. package/dist/src/core/sync/profile-validator.js +225 -0
  418. package/dist/src/core/sync/profile-validator.js.map +1 -0
  419. package/dist/src/core/sync/project-context.d.ts +81 -0
  420. package/dist/src/core/sync/project-context.d.ts.map +1 -0
  421. package/dist/src/core/sync/project-context.js +354 -0
  422. package/dist/src/core/sync/project-context.js.map +1 -0
  423. package/dist/src/core/sync/rate-limiter.d.ts +116 -0
  424. package/dist/src/core/sync/rate-limiter.d.ts.map +1 -0
  425. package/dist/src/core/sync/rate-limiter.js +308 -0
  426. package/dist/src/core/sync/rate-limiter.js.map +1 -0
  427. package/dist/src/core/sync/time-range-selector.d.ts +48 -0
  428. package/dist/src/core/sync/time-range-selector.d.ts.map +1 -0
  429. package/dist/src/core/sync/time-range-selector.js +224 -0
  430. package/dist/src/core/sync/time-range-selector.js.map +1 -0
  431. package/dist/src/core/types/config.d.ts +90 -0
  432. package/dist/src/core/types/config.d.ts.map +1 -0
  433. package/dist/src/core/types/config.js +37 -0
  434. package/dist/src/core/types/config.js.map +1 -0
  435. package/dist/src/core/types/increment-metadata.d.ts +120 -0
  436. package/dist/src/core/types/increment-metadata.d.ts.map +1 -0
  437. package/dist/src/core/types/increment-metadata.js +138 -0
  438. package/dist/src/core/types/increment-metadata.js.map +1 -0
  439. package/dist/src/core/types/plugin.d.ts +283 -0
  440. package/dist/src/core/types/plugin.d.ts.map +1 -0
  441. package/dist/src/core/types/plugin.js +49 -0
  442. package/dist/src/core/types/plugin.js.map +1 -0
  443. package/dist/src/core/types/sync-profile.d.ts +403 -0
  444. package/dist/src/core/types/sync-profile.d.ts.map +1 -0
  445. package/dist/src/core/types/sync-profile.js +55 -0
  446. package/dist/src/core/types/sync-profile.js.map +1 -0
  447. package/dist/src/hooks/lib/types/reflection-types.d.ts +125 -0
  448. package/dist/src/hooks/lib/types/reflection-types.d.ts.map +1 -0
  449. package/dist/src/hooks/lib/types/reflection-types.js +54 -0
  450. package/dist/src/hooks/lib/types/reflection-types.js.map +1 -0
  451. package/dist/src/integrations/ado/ado-client.d.ts +127 -0
  452. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -0
  453. package/dist/src/integrations/ado/ado-client.js +416 -0
  454. package/dist/src/integrations/ado/ado-client.js.map +1 -0
  455. package/dist/src/integrations/jira/jira-client.d.ts +139 -0
  456. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -0
  457. package/dist/src/integrations/jira/jira-client.js +386 -0
  458. package/dist/src/integrations/jira/jira-client.js.map +1 -0
  459. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +75 -0
  460. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -0
  461. package/dist/src/integrations/jira/jira-incremental-mapper.js +474 -0
  462. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -0
  463. package/dist/src/integrations/jira/jira-mapper.d.ts +105 -0
  464. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -0
  465. package/dist/src/integrations/jira/jira-mapper.js +494 -0
  466. package/dist/src/integrations/jira/jira-mapper.js.map +1 -0
  467. package/dist/src/metrics/calculators/change-failure-rate.d.ts +22 -0
  468. package/dist/src/metrics/calculators/change-failure-rate.d.ts.map +1 -0
  469. package/dist/src/metrics/calculators/change-failure-rate.js +70 -0
  470. package/dist/src/metrics/calculators/change-failure-rate.js.map +1 -0
  471. package/dist/src/metrics/calculators/deployment-frequency.d.ts +20 -0
  472. package/dist/src/metrics/calculators/deployment-frequency.d.ts.map +1 -0
  473. package/dist/src/metrics/calculators/deployment-frequency.js +61 -0
  474. package/dist/src/metrics/calculators/deployment-frequency.js.map +1 -0
  475. package/dist/src/metrics/calculators/lead-time.d.ts +22 -0
  476. package/dist/src/metrics/calculators/lead-time.d.ts.map +1 -0
  477. package/dist/src/metrics/calculators/lead-time.js +82 -0
  478. package/dist/src/metrics/calculators/lead-time.js.map +1 -0
  479. package/dist/src/metrics/calculators/mttr.d.ts +21 -0
  480. package/dist/src/metrics/calculators/mttr.d.ts.map +1 -0
  481. package/dist/src/metrics/calculators/mttr.js +60 -0
  482. package/dist/src/metrics/calculators/mttr.js.map +1 -0
  483. package/dist/src/metrics/dora-calculator.d.ts +28 -0
  484. package/dist/src/metrics/dora-calculator.d.ts.map +1 -0
  485. package/dist/src/metrics/dora-calculator.js +117 -0
  486. package/dist/src/metrics/dora-calculator.js.map +1 -0
  487. package/dist/src/metrics/github-client.d.ts +51 -0
  488. package/dist/src/metrics/github-client.d.ts.map +1 -0
  489. package/dist/src/metrics/github-client.js +133 -0
  490. package/dist/src/metrics/github-client.js.map +1 -0
  491. package/dist/src/metrics/report-generator.d.ts +17 -0
  492. package/dist/src/metrics/report-generator.d.ts.map +1 -0
  493. package/dist/src/metrics/report-generator.js +403 -0
  494. package/dist/src/metrics/report-generator.js.map +1 -0
  495. package/dist/src/metrics/types.d.ts +112 -0
  496. package/dist/src/metrics/types.d.ts.map +1 -0
  497. package/dist/src/metrics/types.js +10 -0
  498. package/dist/src/metrics/types.js.map +1 -0
  499. package/dist/src/metrics/utils/percentile.d.ts +25 -0
  500. package/dist/src/metrics/utils/percentile.d.ts.map +1 -0
  501. package/dist/src/metrics/utils/percentile.js +46 -0
  502. package/dist/src/metrics/utils/percentile.js.map +1 -0
  503. package/dist/src/metrics/utils/tier-classifier.d.ts +61 -0
  504. package/dist/src/metrics/utils/tier-classifier.d.ts.map +1 -0
  505. package/dist/src/metrics/utils/tier-classifier.js +100 -0
  506. package/dist/src/metrics/utils/tier-classifier.js.map +1 -0
  507. package/dist/src/testing/test-generator.d.ts +117 -0
  508. package/dist/src/testing/test-generator.d.ts.map +1 -0
  509. package/dist/src/testing/test-generator.js +370 -0
  510. package/dist/src/testing/test-generator.js.map +1 -0
  511. package/dist/src/types/cost-tracking.d.ts +43 -0
  512. package/dist/src/types/cost-tracking.d.ts.map +1 -0
  513. package/dist/src/types/cost-tracking.js +8 -0
  514. package/dist/src/types/cost-tracking.js.map +1 -0
  515. package/dist/src/types/model-selection.d.ts +53 -0
  516. package/dist/src/types/model-selection.d.ts.map +1 -0
  517. package/dist/src/types/model-selection.js +12 -0
  518. package/dist/src/types/model-selection.js.map +1 -0
  519. package/dist/src/utils/agents-md-compiler.d.ts +68 -0
  520. package/dist/src/utils/agents-md-compiler.d.ts.map +1 -0
  521. package/dist/src/utils/agents-md-compiler.js +420 -0
  522. package/dist/src/utils/agents-md-compiler.js.map +1 -0
  523. package/dist/src/utils/auth-helpers.d.ts +58 -0
  524. package/dist/src/utils/auth-helpers.d.ts.map +1 -0
  525. package/dist/src/utils/auth-helpers.js +108 -0
  526. package/dist/src/utils/auth-helpers.js.map +1 -0
  527. package/dist/src/utils/auto-install.d.ts +47 -0
  528. package/dist/src/utils/auto-install.d.ts.map +1 -0
  529. package/dist/src/utils/auto-install.js +211 -0
  530. package/dist/src/utils/auto-install.js.map +1 -0
  531. package/dist/src/utils/claude-cli-detector.d.ts +75 -0
  532. package/dist/src/utils/claude-cli-detector.d.ts.map +1 -0
  533. package/dist/src/utils/claude-cli-detector.js +285 -0
  534. package/dist/src/utils/claude-cli-detector.js.map +1 -0
  535. package/dist/src/utils/cost-reporter.d.ts +58 -0
  536. package/dist/src/utils/cost-reporter.d.ts.map +1 -0
  537. package/dist/src/utils/cost-reporter.js +224 -0
  538. package/dist/src/utils/cost-reporter.js.map +1 -0
  539. package/dist/src/utils/docs-preview/config-generator.d.ts +46 -0
  540. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -0
  541. package/dist/src/utils/docs-preview/config-generator.js +377 -0
  542. package/dist/src/utils/docs-preview/config-generator.js.map +1 -0
  543. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +38 -0
  544. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -0
  545. package/dist/src/utils/docs-preview/docusaurus-setup.js +177 -0
  546. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -0
  547. package/dist/src/utils/docs-preview/index.d.ts +7 -0
  548. package/dist/src/utils/docs-preview/index.d.ts.map +1 -0
  549. package/dist/src/utils/docs-preview/index.js +7 -0
  550. package/dist/src/utils/docs-preview/index.js.map +1 -0
  551. package/dist/src/utils/docs-preview/package-installer.d.ts +42 -0
  552. package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -0
  553. package/dist/src/utils/docs-preview/package-installer.js +182 -0
  554. package/dist/src/utils/docs-preview/package-installer.js.map +1 -0
  555. package/dist/src/utils/docs-preview/server-manager.d.ts +30 -0
  556. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -0
  557. package/dist/src/utils/docs-preview/server-manager.js +212 -0
  558. package/dist/src/utils/docs-preview/server-manager.js.map +1 -0
  559. package/dist/src/utils/docs-preview/sidebar-builder.d.ts +32 -0
  560. package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -0
  561. package/dist/src/utils/docs-preview/sidebar-builder.js +202 -0
  562. package/dist/src/utils/docs-preview/sidebar-builder.js.map +1 -0
  563. package/dist/src/utils/docs-preview/types.d.ts +57 -0
  564. package/dist/src/utils/docs-preview/types.d.ts.map +1 -0
  565. package/dist/src/utils/docs-preview/types.js +2 -0
  566. package/dist/src/utils/docs-preview/types.js.map +1 -0
  567. package/dist/src/utils/env-file.d.ts +88 -0
  568. package/dist/src/utils/env-file.d.ts.map +1 -0
  569. package/dist/src/utils/env-file.js +180 -0
  570. package/dist/src/utils/env-file.js.map +1 -0
  571. package/dist/src/utils/env-multi-project-parser.d.ts +220 -0
  572. package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -0
  573. package/dist/src/utils/env-multi-project-parser.js +403 -0
  574. package/dist/src/utils/env-multi-project-parser.js.map +1 -0
  575. package/dist/src/utils/esm-helpers.d.ts +50 -0
  576. package/dist/src/utils/esm-helpers.d.ts.map +1 -0
  577. package/dist/src/utils/esm-helpers.js +57 -0
  578. package/dist/src/utils/esm-helpers.js.map +1 -0
  579. package/dist/src/utils/execFileNoThrow.d.ts +99 -0
  580. package/dist/src/utils/execFileNoThrow.d.ts.map +1 -0
  581. package/dist/src/utils/execFileNoThrow.js +137 -0
  582. package/dist/src/utils/execFileNoThrow.js.map +1 -0
  583. package/dist/src/utils/external-resource-validator.d.ts +102 -0
  584. package/dist/src/utils/external-resource-validator.d.ts.map +1 -0
  585. package/dist/src/utils/external-resource-validator.js +400 -0
  586. package/dist/src/utils/external-resource-validator.js.map +1 -0
  587. package/dist/src/utils/generate-skills-index.d.ts +24 -0
  588. package/dist/src/utils/generate-skills-index.d.ts.map +1 -0
  589. package/dist/src/utils/generate-skills-index.js +410 -0
  590. package/dist/src/utils/generate-skills-index.js.map +1 -0
  591. package/dist/src/utils/model-selection.d.ts +75 -0
  592. package/dist/src/utils/model-selection.d.ts.map +1 -0
  593. package/dist/src/utils/model-selection.js +204 -0
  594. package/dist/src/utils/model-selection.js.map +1 -0
  595. package/dist/src/utils/plugin-validator.d.ts +161 -0
  596. package/dist/src/utils/plugin-validator.d.ts.map +1 -0
  597. package/dist/src/utils/plugin-validator.js +558 -0
  598. package/dist/src/utils/plugin-validator.js.map +1 -0
  599. package/dist/src/utils/pricing-constants.d.ts +70 -0
  600. package/dist/src/utils/pricing-constants.d.ts.map +1 -0
  601. package/dist/src/utils/pricing-constants.js +71 -0
  602. package/dist/src/utils/pricing-constants.js.map +1 -0
  603. package/dist/src/utils/project-detection.d.ts +141 -0
  604. package/dist/src/utils/project-detection.d.ts.map +1 -0
  605. package/dist/src/utils/project-detection.js +321 -0
  606. package/dist/src/utils/project-detection.js.map +1 -0
  607. package/dist/src/utils/string-utils.d.ts +40 -0
  608. package/dist/src/utils/string-utils.d.ts.map +1 -0
  609. package/dist/src/utils/string-utils.js +58 -0
  610. package/dist/src/utils/string-utils.js.map +1 -0
  611. package/dist/src/utils/translation.d.ts +187 -0
  612. package/dist/src/utils/translation.d.ts.map +1 -0
  613. package/dist/src/utils/translation.js +414 -0
  614. package/dist/src/utils/translation.js.map +1 -0
  615. package/dist/utils/plugin-validator.d.ts.map +1 -1
  616. package/dist/utils/plugin-validator.js +0 -7
  617. package/dist/utils/plugin-validator.js.map +1 -1
  618. package/package.json +3 -2
  619. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +535 -0
  620. package/plugins/specweave/hooks/post-first-increment.sh +10 -28
  621. package/plugins/specweave/hooks/post-increment-planning.sh +261 -1
  622. package/plugins/specweave/hooks/post-task-completion.sh +26 -0
  623. package/plugins/specweave/lib/hooks/git-diff-analyzer.ts +269 -0
  624. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +264 -0
  625. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +178 -0
  626. package/plugins/specweave/lib/hooks/reflection-config-loader.ts +156 -0
  627. package/plugins/specweave/lib/hooks/reflection-parser.ts +484 -0
  628. package/plugins/specweave/lib/hooks/reflection-prompt-builder.ts +306 -0
  629. package/plugins/specweave/lib/hooks/reflection-storage.ts +369 -0
  630. package/plugins/specweave/lib/hooks/run-self-reflection.ts +258 -0
  631. package/plugins/specweave/lib/hooks/sync-living-docs.ts +147 -0
  632. package/plugins/specweave/lib/hooks/translate-file.ts +428 -0
  633. package/plugins/specweave/lib/hooks/translate-living-docs.ts +224 -0
  634. package/plugins/specweave/lib/hooks/types/reflection-types.ts +193 -0
  635. package/plugins/specweave/lib/hooks/update-tasks-md.ts +256 -0
  636. package/plugins/specweave/skills/SKILLS-INDEX.md +2 -2
  637. package/plugins/specweave/skills/increment-planner/SKILL.md +21 -92
  638. package/plugins/specweave/skills/plugin-expert/SKILL.md +0 -4
  639. package/plugins/specweave/skills/plugin-installer/SKILL.md +41 -28
  640. package/plugins/specweave/skills/plugin-validator/SKILL.md +0 -1
  641. package/plugins/specweave/skills/project-kickstarter/SKILL.md +3 -3
  642. package/plugins/specweave/skills/spec-generator/SKILL.md +3 -3
  643. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +2 -0
  644. package/plugins/specweave-ado/commands/specweave-ado-sync.md +102 -9
  645. package/plugins/specweave-ado/skills/ado-sync/SKILL.md +7 -3
  646. package/plugins/specweave-docs-preview/.claude-plugin/plugin.json +21 -0
  647. package/plugins/specweave-docs-preview/commands/build.md +489 -0
  648. package/plugins/specweave-docs-preview/commands/preview.md +330 -0
  649. package/plugins/specweave-docs-preview/skills/docs-preview/SKILL.md +386 -0
  650. package/plugins/specweave-github/agents/github-manager/AGENT.md +14 -4
  651. package/plugins/specweave-github/commands/specweave-github-sync.md +60 -11
  652. package/plugins/specweave-github/skills/github-sync/SKILL.md +3 -1
  653. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +18 -8
  654. package/plugins/specweave-jira/commands/specweave-jira-sync.md +62 -19
  655. package/plugins/specweave-jira/skills/jira-sync/SKILL.md +5 -3
  656. package/plugins/specweave/skills/translator/SKILL.md.bak +0 -172
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Reflection Prompt Builder
3
+ *
4
+ * Builds comprehensive prompts for the reflective-reviewer agent
5
+ * Includes modified files context, configuration, task information
6
+ *
7
+ * @module reflection-prompt-builder
8
+ */
9
+
10
+ import { ReflectionConfig, ReflectionDepth, GitDiffInfo } from './types/reflection-types';
11
+
12
+ /**
13
+ * Build analysis instructions based on configuration
14
+ * @param config Reflection configuration
15
+ * @returns Markdown-formatted analysis instructions
16
+ */
17
+ function buildAnalysisInstructions(config: ReflectionConfig): string {
18
+ const { depth, categories } = config;
19
+
20
+ const instructions: string[] = [];
21
+
22
+ // Depth-specific instructions
23
+ switch (depth) {
24
+ case ReflectionDepth.QUICK:
25
+ instructions.push('**Analysis Mode**: QUICK (<15s)');
26
+ instructions.push('- Focus on CRITICAL and HIGH severity issues only');
27
+ instructions.push('- Skip lessons learned section');
28
+ instructions.push('- Provide concise feedback (1-2 sentences per issue)');
29
+ break;
30
+
31
+ case ReflectionDepth.STANDARD:
32
+ instructions.push('**Analysis Mode**: STANDARD (<30s)');
33
+ instructions.push('- Full analysis across all enabled categories');
34
+ instructions.push('- Include lessons learned');
35
+ instructions.push('- Provide actionable feedback with code examples');
36
+ break;
37
+
38
+ case ReflectionDepth.DEEP:
39
+ instructions.push('**Analysis Mode**: DEEP (<60s)');
40
+ instructions.push('- Comprehensive analysis with detailed explanations');
41
+ instructions.push('- Include architectural recommendations');
42
+ instructions.push('- Suggest refactoring opportunities');
43
+ instructions.push('- Analyze code metrics (complexity, coupling, cohesion)');
44
+ break;
45
+ }
46
+
47
+ instructions.push('');
48
+ instructions.push('**Enabled Analysis Categories**:');
49
+
50
+ // Category-specific instructions
51
+ if (categories.security) {
52
+ instructions.push('- ✅ **Security**: OWASP Top 10 vulnerabilities (SQL injection, XSS, secrets, etc.)');
53
+ }
54
+ if (categories.quality) {
55
+ instructions.push('- ✅ **Quality**: Code duplication, complexity, error handling, naming conventions');
56
+ }
57
+ if (categories.testing) {
58
+ instructions.push('- ✅ **Testing**: Edge cases, error paths, integration/E2E coverage');
59
+ }
60
+ if (categories.performance) {
61
+ instructions.push('- ✅ **Performance**: N+1 queries, algorithmic complexity, caching opportunities');
62
+ }
63
+ if (categories.technicalDebt) {
64
+ instructions.push('- ✅ **Technical Debt**: TODOs, deprecated APIs, temporary hacks');
65
+ }
66
+
67
+ return instructions.join('\n');
68
+ }
69
+
70
+ /**
71
+ * Build file context section with modified files
72
+ * @param modifiedFiles Array of modified files
73
+ * @param includeFullDiff Whether to include full diff content (default: false for large changes)
74
+ * @returns Markdown-formatted file context
75
+ */
76
+ function buildFileContext(
77
+ modifiedFiles: GitDiffInfo[],
78
+ includeFullDiff: boolean = false
79
+ ): string {
80
+ const context: string[] = [];
81
+
82
+ context.push('## Modified Files Context');
83
+ context.push('');
84
+ context.push(`**Files Changed**: ${modifiedFiles.length}`);
85
+
86
+ const totalAdded = modifiedFiles.reduce((sum, f) => sum + f.linesAdded, 0);
87
+ const totalRemoved = modifiedFiles.reduce((sum, f) => sum + f.linesRemoved, 0);
88
+
89
+ context.push(`**Lines Added**: +${totalAdded}`);
90
+ context.push(`**Lines Removed**: -${totalRemoved}`);
91
+ context.push('');
92
+
93
+ // List all modified files with stats
94
+ context.push('### File Summary');
95
+ context.push('');
96
+ for (const file of modifiedFiles) {
97
+ context.push(`- \`${file.file}\`: +${file.linesAdded} -${file.linesRemoved}`);
98
+ }
99
+ context.push('');
100
+
101
+ // Include diff content if requested and not too large
102
+ if (includeFullDiff) {
103
+ context.push('### Detailed Changes');
104
+ context.push('');
105
+
106
+ for (const file of modifiedFiles) {
107
+ context.push(`#### ${file.file}`);
108
+ context.push('');
109
+ context.push('```diff');
110
+ // Truncate very large diffs (max 100 lines per file)
111
+ const diffLines = file.content.split('\n').slice(0, 100);
112
+ context.push(diffLines.join('\n'));
113
+ if (file.content.split('\n').length > 100) {
114
+ context.push('... (diff truncated)');
115
+ }
116
+ context.push('```');
117
+ context.push('');
118
+ }
119
+ }
120
+
121
+ return context.join('\n');
122
+ }
123
+
124
+ /**
125
+ * Build task information section
126
+ * @param taskId Task identifier (e.g., "T-005")
127
+ * @param taskName Human-readable task name
128
+ * @returns Markdown-formatted task context
129
+ */
130
+ function buildTaskContext(taskId: string, taskName?: string): string {
131
+ const context: string[] = [];
132
+
133
+ context.push('## Task Information');
134
+ context.push('');
135
+ context.push(`**Task ID**: ${taskId}`);
136
+
137
+ if (taskName) {
138
+ context.push(`**Task Name**: ${taskName}`);
139
+ }
140
+
141
+ context.push('');
142
+
143
+ return context.join('\n');
144
+ }
145
+
146
+ /**
147
+ * Build the complete reflection prompt
148
+ * Main function for creating agent prompts
149
+ *
150
+ * @param options Prompt options
151
+ * @returns Complete markdown-formatted prompt for reflective-reviewer agent
152
+ */
153
+ export function buildReflectionPrompt(options: {
154
+ taskId: string;
155
+ taskName?: string;
156
+ modifiedFiles: GitDiffInfo[];
157
+ config: ReflectionConfig;
158
+ incrementId?: string;
159
+ includeFullDiff?: boolean;
160
+ }): string {
161
+ const {
162
+ taskId,
163
+ taskName,
164
+ modifiedFiles,
165
+ config,
166
+ incrementId,
167
+ includeFullDiff = false
168
+ } = options;
169
+
170
+ const sections: string[] = [];
171
+
172
+ // Header
173
+ sections.push('# Self-Reflection Request');
174
+ sections.push('');
175
+ sections.push('You are a senior software engineer performing self-reflection on recently completed work.');
176
+ sections.push('Analyze the following code changes and provide comprehensive, actionable feedback.');
177
+ sections.push('');
178
+
179
+ // Task context
180
+ sections.push(buildTaskContext(taskId, taskName));
181
+
182
+ // Increment context (if provided)
183
+ if (incrementId) {
184
+ sections.push(`**Increment**: ${incrementId}`);
185
+ sections.push('');
186
+ }
187
+
188
+ // Analysis instructions
189
+ sections.push('---');
190
+ sections.push('');
191
+ sections.push(buildAnalysisInstructions(config));
192
+ sections.push('');
193
+
194
+ // File context
195
+ sections.push('---');
196
+ sections.push('');
197
+ sections.push(buildFileContext(modifiedFiles, includeFullDiff));
198
+
199
+ // Analysis request
200
+ sections.push('---');
201
+ sections.push('');
202
+ sections.push('## Analysis Request');
203
+ sections.push('');
204
+ sections.push('Please analyze the modified files and provide a comprehensive self-reflection following the exact format specified in the reflective-reviewer agent documentation.');
205
+ sections.push('');
206
+ sections.push('**Required Sections**:');
207
+ sections.push('1. ✅ What Was Accomplished');
208
+ sections.push('2. 🎯 Quality Assessment (Strengths + Issues)');
209
+ sections.push('3. 🔧 Recommended Follow-Up Actions (Priority 1/2/3)');
210
+
211
+ if (config.depth !== ReflectionDepth.QUICK) {
212
+ sections.push('4. 📚 Lessons Learned');
213
+ sections.push('5. 📊 Metrics (Code Quality, Security, Test Coverage, Technical Debt, Performance)');
214
+ }
215
+
216
+ sections.push('');
217
+ sections.push('**Critical Requirements**:');
218
+ sections.push('- ✅ Be SPECIFIC: Always include file paths and line numbers');
219
+ sections.push('- ✅ Be CONSTRUCTIVE: Provide code examples for fixes, not just criticism');
220
+ sections.push('- ✅ Be ACTIONABLE: Every issue should have a clear next step');
221
+ sections.push('- ✅ Be BALANCED: Mention both strengths and issues');
222
+ sections.push('- ✅ Be HONEST: Don\'t sugarcoat issues, but acknowledge strengths');
223
+
224
+ sections.push('');
225
+ sections.push(`**Severity Threshold**: Flag issues with severity >= ${config.criticalThreshold}`);
226
+
227
+ sections.push('');
228
+ sections.push('---');
229
+ sections.push('');
230
+ sections.push('**Please provide your self-reflection analysis now.**');
231
+
232
+ return sections.join('\n');
233
+ }
234
+
235
+ /**
236
+ * Estimate token count for prompt (rough approximation)
237
+ * Used for cost estimation
238
+ *
239
+ * @param prompt Reflection prompt
240
+ * @returns Estimated token count (1 token ≈ 4 characters)
241
+ */
242
+ export function estimatePromptTokens(prompt: string): number {
243
+ // Rough approximation: 1 token ≈ 4 characters
244
+ return Math.ceil(prompt.length / 4);
245
+ }
246
+
247
+ /**
248
+ * Truncate large diffs to fit within token budget
249
+ * Preserves most recent changes (bottom of diff)
250
+ *
251
+ * @param modifiedFiles Array of modified files
252
+ * @param maxTokens Maximum tokens to use (default: 8000)
253
+ * @returns Truncated array of modified files
254
+ */
255
+ export function truncateModifiedFiles(
256
+ modifiedFiles: GitDiffInfo[],
257
+ maxTokens: number = 8000
258
+ ): GitDiffInfo[] {
259
+ const maxChars = maxTokens * 4; // Approximate token-to-char ratio
260
+ let currentChars = 0;
261
+ const truncated: GitDiffInfo[] = [];
262
+
263
+ for (const file of modifiedFiles) {
264
+ const fileChars = file.content.length + file.file.length + 50; // File metadata
265
+
266
+ if (currentChars + fileChars > maxChars) {
267
+ // Truncate this file's diff
268
+ const remainingChars = maxChars - currentChars;
269
+ if (remainingChars > 200) {
270
+ // Only include if we can show at least 200 chars
271
+ const truncatedContent = file.content.slice(0, remainingChars - 50) + '\n... (diff truncated)';
272
+ truncated.push({
273
+ ...file,
274
+ content: truncatedContent
275
+ });
276
+ }
277
+ break;
278
+ }
279
+
280
+ truncated.push(file);
281
+ currentChars += fileChars;
282
+ }
283
+
284
+ return truncated;
285
+ }
286
+
287
+ /**
288
+ * Build a simplified prompt for very large changes
289
+ * Used when full diff exceeds reasonable token budget
290
+ *
291
+ * @param options Prompt options (same as buildReflectionPrompt)
292
+ * @returns Simplified prompt with file list only (no diffs)
293
+ */
294
+ export function buildSimplifiedPrompt(options: {
295
+ taskId: string;
296
+ taskName?: string;
297
+ modifiedFiles: GitDiffInfo[];
298
+ config: ReflectionConfig;
299
+ incrementId?: string;
300
+ }): string {
301
+ // Build prompt without full diff content
302
+ return buildReflectionPrompt({
303
+ ...options,
304
+ includeFullDiff: false
305
+ });
306
+ }
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Reflection Storage Manager
3
+ *
4
+ * Writes reflection results to markdown files in increment logs
5
+ * Stores reflections in .specweave/increments/{id}/logs/reflections/
6
+ *
7
+ * @module reflection-storage
8
+ */
9
+
10
+ import fs from 'fs-extra';
11
+ import path from 'path';
12
+ import { ReflectionResult, IssueSeverity } from './types/reflection-types';
13
+
14
+ /**
15
+ * Generate markdown content from reflection result
16
+ * Follows the exact format specified in reflective-reviewer agent
17
+ *
18
+ * @param result Reflection result object
19
+ * @returns Markdown-formatted reflection content
20
+ */
21
+ export function generateReflectionMarkdown(result: ReflectionResult): string {
22
+ const sections: string[] = [];
23
+
24
+ // Header
25
+ sections.push(`# Self-Reflection: ${result.taskName}`);
26
+ sections.push('');
27
+ sections.push(`**Completed**: ${result.completed}`);
28
+
29
+ if (result.duration) {
30
+ sections.push(`**Duration**: ${result.duration}`);
31
+ }
32
+
33
+ sections.push(`**Files Modified**: ${result.filesModified.count} files, +${result.filesModified.linesAdded} -${result.filesModified.linesRemoved}`);
34
+ sections.push('');
35
+ sections.push('---');
36
+ sections.push('');
37
+
38
+ // What Was Accomplished
39
+ sections.push('## ✅ What Was Accomplished');
40
+ sections.push('');
41
+
42
+ if (result.accomplishments.length > 0) {
43
+ for (const accomplishment of result.accomplishments) {
44
+ sections.push(`- ${accomplishment}`);
45
+ }
46
+ } else {
47
+ sections.push('(No accomplishments recorded)');
48
+ }
49
+
50
+ sections.push('');
51
+ sections.push('---');
52
+ sections.push('');
53
+
54
+ // Quality Assessment
55
+ sections.push('## 🎯 Quality Assessment');
56
+ sections.push('');
57
+
58
+ // Strengths
59
+ sections.push('### ✅ Strengths');
60
+ sections.push('');
61
+
62
+ if (result.strengths.length > 0) {
63
+ for (const strength of result.strengths) {
64
+ sections.push(`- ✅ ${strength}`);
65
+ }
66
+ } else {
67
+ sections.push('(No strengths recorded)');
68
+ }
69
+
70
+ sections.push('');
71
+
72
+ // Issues Identified
73
+ sections.push('### ⚠️ Issues Identified');
74
+ sections.push('');
75
+
76
+ if (result.issues.length === 0) {
77
+ sections.push('✅ No critical issues detected. Code follows best practices.');
78
+ } else {
79
+ // Group issues by severity
80
+ const criticalIssues = result.issues.filter(i => i.severity === IssueSeverity.CRITICAL);
81
+ const highIssues = result.issues.filter(i => i.severity === IssueSeverity.HIGH);
82
+ const mediumIssues = result.issues.filter(i => i.severity === IssueSeverity.MEDIUM);
83
+ const lowIssues = result.issues.filter(i => i.severity === IssueSeverity.LOW);
84
+
85
+ const issueGroups = [
86
+ { issues: criticalIssues, severity: IssueSeverity.CRITICAL },
87
+ { issues: highIssues, severity: IssueSeverity.HIGH },
88
+ { issues: mediumIssues, severity: IssueSeverity.MEDIUM },
89
+ { issues: lowIssues, severity: IssueSeverity.LOW }
90
+ ];
91
+
92
+ for (const group of issueGroups) {
93
+ if (group.issues.length === 0) continue;
94
+
95
+ for (const issue of group.issues) {
96
+ sections.push(`**${issue.severity} (${issue.category})**`);
97
+ sections.push(`- ❌ ${issue.description}`);
98
+ sections.push(` - **Impact**: ${issue.impact}`);
99
+ sections.push(` - **Recommendation**: ${issue.recommendation}`);
100
+
101
+ if (issue.location) {
102
+ const locationStr = issue.location.line
103
+ ? `${issue.location.file}:${issue.location.line}`
104
+ : issue.location.file;
105
+ sections.push(` - **Location**: \`${locationStr}\``);
106
+
107
+ if (issue.location.snippet) {
108
+ sections.push(' - **Code Snippet**:');
109
+ sections.push(' ```');
110
+ sections.push(` ${issue.location.snippet}`);
111
+ sections.push(' ```');
112
+ }
113
+ }
114
+
115
+ sections.push('');
116
+ }
117
+ }
118
+ }
119
+
120
+ sections.push('---');
121
+ sections.push('');
122
+
123
+ // Recommended Follow-Up Actions
124
+ sections.push('## 🔧 Recommended Follow-Up Actions');
125
+ sections.push('');
126
+
127
+ const hasActions =
128
+ result.recommendedActions.priority1.length > 0 ||
129
+ result.recommendedActions.priority2.length > 0 ||
130
+ result.recommendedActions.priority3.length > 0;
131
+
132
+ if (!hasActions) {
133
+ sections.push('✅ No follow-up actions required. Ready to proceed.');
134
+ } else {
135
+ if (result.recommendedActions.priority1.length > 0) {
136
+ sections.push('**Priority 1 (MUST FIX - before closing increment)**:');
137
+ for (let i = 0; i < result.recommendedActions.priority1.length; i++) {
138
+ sections.push(`${i + 1}. ${result.recommendedActions.priority1[i]}`);
139
+ }
140
+ sections.push('');
141
+ }
142
+
143
+ if (result.recommendedActions.priority2.length > 0) {
144
+ sections.push('**Priority 2 (SHOULD FIX - this increment)**:');
145
+ for (let i = 0; i < result.recommendedActions.priority2.length; i++) {
146
+ sections.push(`${i + 1}. ${result.recommendedActions.priority2[i]}`);
147
+ }
148
+ sections.push('');
149
+ }
150
+
151
+ if (result.recommendedActions.priority3.length > 0) {
152
+ sections.push('**Priority 3 (NICE TO HAVE - future increment)**:');
153
+ for (let i = 0; i < result.recommendedActions.priority3.length; i++) {
154
+ sections.push(`${i + 1}. ${result.recommendedActions.priority3[i]}`);
155
+ }
156
+ sections.push('');
157
+ }
158
+ }
159
+
160
+ sections.push('---');
161
+ sections.push('');
162
+
163
+ // Lessons Learned (optional - may be empty for QUICK depth)
164
+ const hasLessons =
165
+ result.lessonsLearned.whatWentWell.length > 0 ||
166
+ result.lessonsLearned.whatCouldImprove.length > 0 ||
167
+ result.lessonsLearned.forNextTime.length > 0;
168
+
169
+ if (hasLessons) {
170
+ sections.push('## 📚 Lessons Learned');
171
+ sections.push('');
172
+
173
+ if (result.lessonsLearned.whatWentWell.length > 0) {
174
+ sections.push('**What went well**:');
175
+ for (const lesson of result.lessonsLearned.whatWentWell) {
176
+ sections.push(`- ${lesson}`);
177
+ }
178
+ sections.push('');
179
+ }
180
+
181
+ if (result.lessonsLearned.whatCouldImprove.length > 0) {
182
+ sections.push('**What could improve**:');
183
+ for (const lesson of result.lessonsLearned.whatCouldImprove) {
184
+ sections.push(`- ${lesson}`);
185
+ }
186
+ sections.push('');
187
+ }
188
+
189
+ if (result.lessonsLearned.forNextTime.length > 0) {
190
+ sections.push('**For next time**:');
191
+ for (const lesson of result.lessonsLearned.forNextTime) {
192
+ sections.push(`- ${lesson}`);
193
+ }
194
+ sections.push('');
195
+ }
196
+
197
+ sections.push('---');
198
+ sections.push('');
199
+ }
200
+
201
+ // Metrics
202
+ sections.push('## 📊 Metrics');
203
+ sections.push('');
204
+ sections.push(`- **Code Quality**: ${result.metrics.codeQuality}/10`);
205
+ sections.push(`- **Security**: ${result.metrics.security}/10`);
206
+
207
+ if (result.metrics.testCoverage !== undefined) {
208
+ sections.push(`- **Test Coverage**: ${result.metrics.testCoverage}%`);
209
+ } else {
210
+ sections.push(`- **Test Coverage**: N/A`);
211
+ }
212
+
213
+ sections.push(`- **Technical Debt**: ${result.metrics.technicalDebt}`);
214
+ sections.push(`- **Performance**: ${result.metrics.performance.replace(/_/g, ' ')}`);
215
+ sections.push('');
216
+
217
+ // Related Tasks (optional)
218
+ if (result.relatedTasks && result.relatedTasks.length > 0) {
219
+ sections.push('---');
220
+ sections.push('');
221
+ sections.push('## 🔗 Related Tasks');
222
+ sections.push('');
223
+ for (const task of result.relatedTasks) {
224
+ sections.push(`- ${task}`);
225
+ }
226
+ sections.push('');
227
+ }
228
+
229
+ // Footer
230
+ sections.push('---');
231
+ sections.push('');
232
+ sections.push('**Auto-generated by**: SpecWeave Self-Reflection System');
233
+ sections.push(`**Model**: Claude 3.5 ${result.metadata.model.charAt(0).toUpperCase() + result.metadata.model.slice(1)}`);
234
+ sections.push(`**Reflection Time**: ${result.metadata.reflectionTime} seconds`);
235
+ sections.push(`**Estimated Cost**: ~$${result.metadata.estimatedCost.toFixed(3)}`);
236
+ sections.push('');
237
+
238
+ return sections.join('\n');
239
+ }
240
+
241
+ /**
242
+ * Get reflection log directory for an increment
243
+ * @param incrementId Increment identifier (e.g., "0016-self-reflection-system")
244
+ * @param projectRoot Project root directory (optional, auto-detected if not provided)
245
+ * @returns Path to reflection logs directory
246
+ */
247
+ export function getReflectionLogDir(
248
+ incrementId: string,
249
+ projectRoot?: string
250
+ ): string {
251
+ const rootDir = projectRoot || process.cwd();
252
+ return path.join(
253
+ rootDir,
254
+ '.specweave',
255
+ 'increments',
256
+ incrementId,
257
+ 'logs',
258
+ 'reflections'
259
+ );
260
+ }
261
+
262
+ /**
263
+ * Generate filename for reflection log
264
+ * @param taskId Task identifier (e.g., "T-005")
265
+ * @param timestamp Optional timestamp (defaults to current date)
266
+ * @returns Filename (e.g., "task-T-005-reflection-2025-11-10.md")
267
+ */
268
+ export function getReflectionFilename(
269
+ taskId: string,
270
+ timestamp?: Date
271
+ ): string {
272
+ const date = timestamp || new Date();
273
+ const dateStr = date.toISOString().split('T')[0]; // YYYY-MM-DD
274
+ const sanitizedTaskId = taskId.replace(/[^a-zA-Z0-9-]/g, '-');
275
+ return `task-${sanitizedTaskId}-reflection-${dateStr}.md`;
276
+ }
277
+
278
+ /**
279
+ * Save reflection result to markdown file
280
+ * Creates directory structure if it doesn't exist
281
+ *
282
+ * @param result Reflection result to save
283
+ * @param incrementId Increment identifier
284
+ * @param taskId Task identifier
285
+ * @param projectRoot Project root directory (optional)
286
+ * @returns Path to saved reflection file
287
+ * @throws Error if file cannot be written
288
+ */
289
+ export function saveReflection(
290
+ result: ReflectionResult,
291
+ incrementId: string,
292
+ taskId: string,
293
+ projectRoot?: string
294
+ ): string {
295
+ // Ensure reflection logs directory exists
296
+ const logDir = getReflectionLogDir(incrementId, projectRoot);
297
+ fs.mkdirpSync(logDir);
298
+
299
+ // Generate filename
300
+ const filename = getReflectionFilename(taskId);
301
+ const filepath = path.join(logDir, filename);
302
+
303
+ // Generate markdown content
304
+ const markdown = generateReflectionMarkdown(result);
305
+
306
+ // Write to file
307
+ try {
308
+ fs.writeFileSync(filepath, markdown, 'utf-8');
309
+ return filepath;
310
+ } catch (error: any) {
311
+ throw new Error(`Failed to save reflection: ${error.message}`);
312
+ }
313
+ }
314
+
315
+ /**
316
+ * List all reflection files for an increment
317
+ * @param incrementId Increment identifier
318
+ * @param projectRoot Project root directory (optional)
319
+ * @returns Array of reflection file paths (sorted by date, newest first)
320
+ */
321
+ export function listReflections(
322
+ incrementId: string,
323
+ projectRoot?: string
324
+ ): string[] {
325
+ const logDir = getReflectionLogDir(incrementId, projectRoot);
326
+
327
+ if (!fs.existsSync(logDir)) {
328
+ return [];
329
+ }
330
+
331
+ const files = fs.readdirSync(logDir)
332
+ .filter(file => file.endsWith('.md'))
333
+ .map(file => path.join(logDir, file))
334
+ .sort((a, b) => {
335
+ // Sort by modification time (newest first)
336
+ const statA = fs.statSync(a);
337
+ const statB = fs.statSync(b);
338
+ return statB.mtime.getTime() - statA.mtime.getTime();
339
+ });
340
+
341
+ return files;
342
+ }
343
+
344
+ /**
345
+ * Read reflection from file
346
+ * @param filepath Path to reflection markdown file
347
+ * @returns Markdown content as string
348
+ * @throws Error if file cannot be read
349
+ */
350
+ export function readReflection(filepath: string): string {
351
+ try {
352
+ return fs.readFileSync(filepath, 'utf-8');
353
+ } catch (error: any) {
354
+ throw new Error(`Failed to read reflection: ${error.message}`);
355
+ }
356
+ }
357
+
358
+ /**
359
+ * Delete reflection file
360
+ * @param filepath Path to reflection markdown file
361
+ * @throws Error if file cannot be deleted
362
+ */
363
+ export function deleteReflection(filepath: string): void {
364
+ try {
365
+ fs.removeSync(filepath);
366
+ } catch (error: any) {
367
+ throw new Error(`Failed to delete reflection: ${error.message}`);
368
+ }
369
+ }