specweave 0.11.0 → 0.12.1

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 (652) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CLAUDE.md +131 -144
  3. package/README.md +48 -21
  4. package/dist/cli/commands/init.d.ts.map +1 -1
  5. package/dist/cli/commands/init.js +21 -70
  6. package/dist/cli/commands/init.js.map +1 -1
  7. package/dist/hooks/lib/git-diff-analyzer.d.ts +89 -0
  8. package/dist/hooks/lib/git-diff-analyzer.d.ts.map +1 -0
  9. package/dist/hooks/lib/git-diff-analyzer.js +226 -0
  10. package/dist/hooks/lib/git-diff-analyzer.js.map +1 -0
  11. package/dist/hooks/lib/prepare-reflection-context.d.ts +42 -0
  12. package/dist/hooks/lib/prepare-reflection-context.d.ts.map +1 -0
  13. package/dist/hooks/lib/prepare-reflection-context.js +123 -0
  14. package/dist/hooks/lib/prepare-reflection-context.js.map +1 -0
  15. package/dist/hooks/lib/reflection-config-loader.d.ts +45 -0
  16. package/dist/hooks/lib/reflection-config-loader.d.ts.map +1 -0
  17. package/dist/hooks/lib/reflection-config-loader.js +132 -0
  18. package/dist/hooks/lib/reflection-config-loader.js.map +1 -0
  19. package/dist/hooks/lib/reflection-parser.d.ts +33 -0
  20. package/dist/hooks/lib/reflection-parser.d.ts.map +1 -0
  21. package/dist/hooks/lib/reflection-parser.js +419 -0
  22. package/dist/hooks/lib/reflection-parser.js.map +1 -0
  23. package/dist/hooks/lib/reflection-prompt-builder.d.ts +56 -0
  24. package/dist/hooks/lib/reflection-prompt-builder.d.ts.map +1 -0
  25. package/dist/hooks/lib/reflection-prompt-builder.js +239 -0
  26. package/dist/hooks/lib/reflection-prompt-builder.js.map +1 -0
  27. package/dist/hooks/lib/reflection-storage.d.ts +64 -0
  28. package/dist/hooks/lib/reflection-storage.d.ts.map +1 -0
  29. package/dist/hooks/lib/reflection-storage.js +305 -0
  30. package/dist/hooks/lib/reflection-storage.js.map +1 -0
  31. package/dist/hooks/lib/run-self-reflection.d.ts +43 -0
  32. package/dist/hooks/lib/run-self-reflection.d.ts.map +1 -0
  33. package/dist/hooks/lib/run-self-reflection.js +203 -0
  34. package/dist/hooks/lib/run-self-reflection.js.map +1 -0
  35. package/dist/hooks/lib/types/reflection-types.d.ts +164 -0
  36. package/dist/hooks/lib/types/reflection-types.d.ts.map +1 -0
  37. package/dist/hooks/lib/types/reflection-types.js +73 -0
  38. package/dist/hooks/lib/types/reflection-types.js.map +1 -0
  39. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +89 -0
  40. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +1 -0
  41. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +226 -0
  42. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +1 -0
  43. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +60 -0
  44. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +1 -0
  45. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +201 -0
  46. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +1 -0
  47. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +42 -0
  48. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +1 -0
  49. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +123 -0
  50. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +1 -0
  51. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +45 -0
  52. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +1 -0
  53. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +132 -0
  54. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +1 -0
  55. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +33 -0
  56. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +1 -0
  57. package/dist/plugins/specweave/lib/hooks/reflection-parser.js +419 -0
  58. package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +1 -0
  59. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +56 -0
  60. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +1 -0
  61. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +239 -0
  62. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +1 -0
  63. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +64 -0
  64. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +1 -0
  65. package/dist/plugins/specweave/lib/hooks/reflection-storage.js +305 -0
  66. package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +1 -0
  67. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +43 -0
  68. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +1 -0
  69. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +203 -0
  70. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +1 -0
  71. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +27 -0
  72. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -0
  73. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +116 -0
  74. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -0
  75. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +59 -0
  76. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +1 -0
  77. package/dist/plugins/specweave/lib/hooks/translate-file.js +350 -0
  78. package/dist/plugins/specweave/lib/hooks/translate-file.js.map +1 -0
  79. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +13 -0
  80. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +1 -0
  81. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +175 -0
  82. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +1 -0
  83. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +164 -0
  84. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +1 -0
  85. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +73 -0
  86. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +1 -0
  87. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +29 -0
  88. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +1 -0
  89. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +203 -0
  90. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +1 -0
  91. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts +94 -0
  92. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +1 -0
  93. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js +219 -0
  94. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +1 -0
  95. package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts +124 -0
  96. package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts.map +1 -0
  97. package/dist/plugins/specweave-ado/lib/ado-client-v2.js +382 -0
  98. package/dist/plugins/specweave-ado/lib/ado-client-v2.js.map +1 -0
  99. package/dist/plugins/specweave-ado/lib/ado-client.d.ts +112 -0
  100. package/dist/plugins/specweave-ado/lib/ado-client.d.ts.map +1 -0
  101. package/dist/plugins/specweave-ado/lib/ado-client.js +257 -0
  102. package/dist/plugins/specweave-ado/lib/ado-client.js.map +1 -0
  103. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.d.ts +40 -0
  104. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.d.ts.map +1 -0
  105. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.js +370 -0
  106. package/dist/plugins/specweave-ado/lib/ado-hierarchical-sync.js.map +1 -0
  107. package/dist/plugins/specweave-ado/lib/project-selector.d.ts +42 -0
  108. package/dist/plugins/specweave-ado/lib/project-selector.d.ts.map +1 -0
  109. package/dist/plugins/specweave-ado/lib/project-selector.js +211 -0
  110. package/dist/plugins/specweave-ado/lib/project-selector.js.map +1 -0
  111. package/dist/plugins/specweave-github/lib/github-board-resolver.d.ts +54 -0
  112. package/dist/plugins/specweave-github/lib/github-board-resolver.d.ts.map +1 -0
  113. package/dist/plugins/specweave-github/lib/github-board-resolver.js +122 -0
  114. package/dist/plugins/specweave-github/lib/github-board-resolver.js.map +1 -0
  115. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +104 -0
  116. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -0
  117. package/dist/plugins/specweave-github/lib/github-client-v2.js +408 -0
  118. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -0
  119. package/dist/plugins/specweave-github/lib/github-client.d.ts +10 -0
  120. package/dist/plugins/specweave-github/lib/github-client.d.ts.map +1 -1
  121. package/dist/plugins/specweave-github/lib/github-client.js +24 -0
  122. package/dist/plugins/specweave-github/lib/github-client.js.map +1 -1
  123. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.d.ts +29 -0
  124. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.d.ts.map +1 -0
  125. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.js +268 -0
  126. package/dist/plugins/specweave-github/lib/github-hierarchical-sync.js.map +1 -0
  127. package/dist/plugins/specweave-github/lib/index.d.ts.map +1 -1
  128. package/dist/plugins/specweave-github/lib/index.js.map +1 -1
  129. package/dist/plugins/specweave-github/lib/repo-selector.d.ts +49 -0
  130. package/dist/plugins/specweave-github/lib/repo-selector.d.ts.map +1 -0
  131. package/dist/plugins/specweave-github/lib/repo-selector.js +216 -0
  132. package/dist/plugins/specweave-github/lib/repo-selector.js.map +1 -0
  133. package/dist/plugins/specweave-github/lib/subtask-sync.d.ts.map +1 -1
  134. package/dist/plugins/specweave-github/lib/subtask-sync.js.map +1 -1
  135. package/dist/plugins/specweave-github/lib/task-parser.d.ts.map +1 -1
  136. package/dist/plugins/specweave-github/lib/task-parser.js.map +1 -1
  137. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
  138. package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
  139. package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
  140. package/dist/plugins/specweave-github/lib/types.js.map +1 -1
  141. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +50 -0
  142. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +1 -0
  143. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js +84 -0
  144. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +1 -0
  145. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.d.ts +33 -0
  146. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.d.ts.map +1 -0
  147. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.js +206 -0
  148. package/dist/plugins/specweave-jira/lib/jira-hierarchical-sync.js.map +1 -0
  149. package/dist/plugins/specweave-jira/lib/project-selector.d.ts +42 -0
  150. package/dist/plugins/specweave-jira/lib/project-selector.d.ts.map +1 -0
  151. package/dist/plugins/specweave-jira/lib/project-selector.js +216 -0
  152. package/dist/plugins/specweave-jira/lib/project-selector.js.map +1 -0
  153. package/dist/plugins/specweave-jira/lib/reorganization-detector.d.ts +67 -0
  154. package/dist/plugins/specweave-jira/lib/reorganization-detector.d.ts.map +1 -0
  155. package/dist/plugins/specweave-jira/lib/reorganization-detector.js +252 -0
  156. package/dist/plugins/specweave-jira/lib/reorganization-detector.js.map +1 -0
  157. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts +29 -0
  158. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +1 -0
  159. package/dist/plugins/specweave-jira/lib/setup-wizard.js +219 -0
  160. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -0
  161. package/dist/src/adapters/adapter-base.d.ts +71 -0
  162. package/dist/src/adapters/adapter-base.d.ts.map +1 -0
  163. package/dist/src/adapters/adapter-base.js +139 -0
  164. package/dist/src/adapters/adapter-base.js.map +1 -0
  165. package/dist/src/adapters/adapter-interface.d.ts +149 -0
  166. package/dist/src/adapters/adapter-interface.d.ts.map +1 -0
  167. package/dist/src/adapters/adapter-interface.js +8 -0
  168. package/dist/src/adapters/adapter-interface.js.map +1 -0
  169. package/dist/src/adapters/adapter-loader.d.ts +91 -0
  170. package/dist/src/adapters/adapter-loader.d.ts.map +1 -0
  171. package/dist/src/adapters/adapter-loader.js +238 -0
  172. package/dist/src/adapters/adapter-loader.js.map +1 -0
  173. package/dist/src/adapters/agents-md-generator.d.ts +48 -0
  174. package/dist/src/adapters/agents-md-generator.d.ts.map +1 -0
  175. package/dist/src/adapters/agents-md-generator.js +193 -0
  176. package/dist/src/adapters/agents-md-generator.js.map +1 -0
  177. package/dist/src/adapters/claude/adapter.d.ts +128 -0
  178. package/dist/src/adapters/claude/adapter.d.ts.map +1 -0
  179. package/dist/src/adapters/claude/adapter.js +415 -0
  180. package/dist/src/adapters/claude/adapter.js.map +1 -0
  181. package/dist/src/adapters/claude-md-generator.d.ts +78 -0
  182. package/dist/src/adapters/claude-md-generator.d.ts.map +1 -0
  183. package/dist/src/adapters/claude-md-generator.js +307 -0
  184. package/dist/src/adapters/claude-md-generator.js.map +1 -0
  185. package/dist/src/adapters/codex/adapter.d.ts +50 -0
  186. package/dist/src/adapters/codex/adapter.d.ts.map +1 -0
  187. package/dist/src/adapters/codex/adapter.js +316 -0
  188. package/dist/src/adapters/codex/adapter.js.map +1 -0
  189. package/dist/src/adapters/cursor/adapter.d.ts +98 -0
  190. package/dist/src/adapters/cursor/adapter.d.ts.map +1 -0
  191. package/dist/src/adapters/cursor/adapter.js +406 -0
  192. package/dist/src/adapters/cursor/adapter.js.map +1 -0
  193. package/dist/src/adapters/doc-generator.d.ts +69 -0
  194. package/dist/src/adapters/doc-generator.d.ts.map +1 -0
  195. package/dist/src/adapters/doc-generator.js +247 -0
  196. package/dist/src/adapters/doc-generator.js.map +1 -0
  197. package/dist/src/adapters/gemini/adapter.d.ts +50 -0
  198. package/dist/src/adapters/gemini/adapter.d.ts.map +1 -0
  199. package/dist/src/adapters/gemini/adapter.js +281 -0
  200. package/dist/src/adapters/gemini/adapter.js.map +1 -0
  201. package/dist/src/adapters/generic/adapter.d.ts +86 -0
  202. package/dist/src/adapters/generic/adapter.d.ts.map +1 -0
  203. package/dist/src/adapters/generic/adapter.js +338 -0
  204. package/dist/src/adapters/generic/adapter.js.map +1 -0
  205. package/dist/src/cli/commands/abandon.d.ts +13 -0
  206. package/dist/src/cli/commands/abandon.d.ts.map +1 -0
  207. package/dist/src/cli/commands/abandon.js +15 -0
  208. package/dist/src/cli/commands/abandon.js.map +1 -0
  209. package/dist/src/cli/commands/import-docs.d.ts +21 -0
  210. package/dist/src/cli/commands/import-docs.d.ts.map +1 -0
  211. package/dist/src/cli/commands/import-docs.js +146 -0
  212. package/dist/src/cli/commands/import-docs.js.map +1 -0
  213. package/dist/src/cli/commands/init-multiproject.d.ts +11 -0
  214. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -0
  215. package/dist/src/cli/commands/init-multiproject.js +202 -0
  216. package/dist/src/cli/commands/init-multiproject.js.map +1 -0
  217. package/dist/src/cli/commands/init.d.ts +9 -0
  218. package/dist/src/cli/commands/init.d.ts.map +1 -0
  219. package/dist/src/cli/commands/init.js +1205 -0
  220. package/dist/src/cli/commands/init.js.map +1 -0
  221. package/dist/src/cli/commands/install.d.ts +9 -0
  222. package/dist/src/cli/commands/install.d.ts.map +1 -0
  223. package/dist/src/cli/commands/install.js +127 -0
  224. package/dist/src/cli/commands/install.js.map +1 -0
  225. package/dist/src/cli/commands/list.d.ts +8 -0
  226. package/dist/src/cli/commands/list.d.ts.map +1 -0
  227. package/dist/src/cli/commands/list.js +119 -0
  228. package/dist/src/cli/commands/list.js.map +1 -0
  229. package/dist/src/cli/commands/migrate-to-multiproject.d.ts +37 -0
  230. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -0
  231. package/dist/src/cli/commands/migrate-to-multiproject.js +189 -0
  232. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -0
  233. package/dist/src/cli/commands/migrate-to-profiles.d.ts +25 -0
  234. package/dist/src/cli/commands/migrate-to-profiles.d.ts.map +1 -0
  235. package/dist/src/cli/commands/migrate-to-profiles.js +350 -0
  236. package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -0
  237. package/dist/src/cli/commands/pause.d.ts +13 -0
  238. package/dist/src/cli/commands/pause.d.ts.map +1 -0
  239. package/dist/src/cli/commands/pause.js +15 -0
  240. package/dist/src/cli/commands/pause.js.map +1 -0
  241. package/dist/src/cli/commands/qa.d.ts +54 -0
  242. package/dist/src/cli/commands/qa.d.ts.map +1 -0
  243. package/dist/src/cli/commands/qa.js +98 -0
  244. package/dist/src/cli/commands/qa.js.map +1 -0
  245. package/dist/src/cli/commands/resume.d.ts +12 -0
  246. package/dist/src/cli/commands/resume.d.ts.map +1 -0
  247. package/dist/src/cli/commands/resume.js +14 -0
  248. package/dist/src/cli/commands/resume.js.map +1 -0
  249. package/dist/src/cli/commands/status.d.ts +12 -0
  250. package/dist/src/cli/commands/status.d.ts.map +1 -0
  251. package/dist/src/cli/commands/status.js +23 -0
  252. package/dist/src/cli/commands/status.js.map +1 -0
  253. package/dist/src/cli/commands/switch-project.d.ts +13 -0
  254. package/dist/src/cli/commands/switch-project.d.ts.map +1 -0
  255. package/dist/src/cli/commands/switch-project.js +91 -0
  256. package/dist/src/cli/commands/switch-project.js.map +1 -0
  257. package/dist/src/cli/commands/validate-jira.d.ts +35 -0
  258. package/dist/src/cli/commands/validate-jira.d.ts.map +1 -0
  259. package/dist/src/cli/commands/validate-jira.js +112 -0
  260. package/dist/src/cli/commands/validate-jira.js.map +1 -0
  261. package/dist/src/cli/commands/validate-plugins.d.ts +41 -0
  262. package/dist/src/cli/commands/validate-plugins.d.ts.map +1 -0
  263. package/dist/src/cli/commands/validate-plugins.js +171 -0
  264. package/dist/src/cli/commands/validate-plugins.js.map +1 -0
  265. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +57 -0
  266. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
  267. package/dist/src/cli/helpers/issue-tracker/ado.js +243 -0
  268. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -0
  269. package/dist/src/cli/helpers/issue-tracker/github.d.ts +65 -0
  270. package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -0
  271. package/dist/src/cli/helpers/issue-tracker/github.js +426 -0
  272. package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -0
  273. package/dist/src/cli/helpers/issue-tracker/index.d.ts +22 -0
  274. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -0
  275. package/dist/src/cli/helpers/issue-tracker/index.js +314 -0
  276. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -0
  277. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +61 -0
  278. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
  279. package/dist/src/cli/helpers/issue-tracker/jira.js +404 -0
  280. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -0
  281. package/dist/src/cli/helpers/issue-tracker/types.d.ts +107 -0
  282. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -0
  283. package/dist/src/cli/helpers/issue-tracker/types.js +16 -0
  284. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -0
  285. package/dist/src/cli/helpers/issue-tracker/utils.d.ts +112 -0
  286. package/dist/src/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
  287. package/dist/src/cli/helpers/issue-tracker/utils.js +247 -0
  288. package/dist/src/cli/helpers/issue-tracker/utils.js.map +1 -0
  289. package/dist/src/core/agent-model-manager.d.ts +52 -0
  290. package/dist/src/core/agent-model-manager.d.ts.map +1 -0
  291. package/dist/src/core/agent-model-manager.js +120 -0
  292. package/dist/src/core/agent-model-manager.js.map +1 -0
  293. package/dist/src/core/brownfield/analyzer.d.ts +86 -0
  294. package/dist/src/core/brownfield/analyzer.d.ts.map +1 -0
  295. package/dist/src/core/brownfield/analyzer.js +365 -0
  296. package/dist/src/core/brownfield/analyzer.js.map +1 -0
  297. package/dist/src/core/brownfield/importer.d.ts +76 -0
  298. package/dist/src/core/brownfield/importer.d.ts.map +1 -0
  299. package/dist/src/core/brownfield/importer.js +287 -0
  300. package/dist/src/core/brownfield/importer.js.map +1 -0
  301. package/dist/src/core/config-manager.d.ts +47 -0
  302. package/dist/src/core/config-manager.d.ts.map +1 -0
  303. package/dist/src/core/config-manager.js +136 -0
  304. package/dist/src/core/config-manager.js.map +1 -0
  305. package/dist/src/core/cost-tracker.d.ts +108 -0
  306. package/dist/src/core/cost-tracker.d.ts.map +1 -0
  307. package/dist/src/core/cost-tracker.js +281 -0
  308. package/dist/src/core/cost-tracker.js.map +1 -0
  309. package/dist/src/core/credentials-manager.d.ts +107 -0
  310. package/dist/src/core/credentials-manager.d.ts.map +1 -0
  311. package/dist/src/core/credentials-manager.js +457 -0
  312. package/dist/src/core/credentials-manager.js.map +1 -0
  313. package/dist/src/core/i18n/language-detector.d.ts +29 -0
  314. package/dist/src/core/i18n/language-detector.d.ts.map +1 -0
  315. package/dist/src/core/i18n/language-detector.js +143 -0
  316. package/dist/src/core/i18n/language-detector.js.map +1 -0
  317. package/dist/src/core/i18n/language-manager.d.ts +101 -0
  318. package/dist/src/core/i18n/language-manager.d.ts.map +1 -0
  319. package/dist/src/core/i18n/language-manager.js +232 -0
  320. package/dist/src/core/i18n/language-manager.js.map +1 -0
  321. package/dist/src/core/i18n/language-registry.d.ts +44 -0
  322. package/dist/src/core/i18n/language-registry.d.ts.map +1 -0
  323. package/dist/src/core/i18n/language-registry.js +234 -0
  324. package/dist/src/core/i18n/language-registry.js.map +1 -0
  325. package/dist/src/core/i18n/locale-manager.d.ts +62 -0
  326. package/dist/src/core/i18n/locale-manager.d.ts.map +1 -0
  327. package/dist/src/core/i18n/locale-manager.js +137 -0
  328. package/dist/src/core/i18n/locale-manager.js.map +1 -0
  329. package/dist/src/core/i18n/system-prompt-injector.d.ts +33 -0
  330. package/dist/src/core/i18n/system-prompt-injector.d.ts.map +1 -0
  331. package/dist/src/core/i18n/system-prompt-injector.js +131 -0
  332. package/dist/src/core/i18n/system-prompt-injector.js.map +1 -0
  333. package/dist/src/core/i18n/types.d.ts +151 -0
  334. package/dist/src/core/i18n/types.d.ts.map +1 -0
  335. package/dist/src/core/i18n/types.js +11 -0
  336. package/dist/src/core/i18n/types.js.map +1 -0
  337. package/dist/src/core/increment/limits.d.ts +68 -0
  338. package/dist/src/core/increment/limits.d.ts.map +1 -0
  339. package/dist/src/core/increment/limits.js +224 -0
  340. package/dist/src/core/increment/limits.js.map +1 -0
  341. package/dist/src/core/increment/metadata-manager.d.ts +114 -0
  342. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -0
  343. package/dist/src/core/increment/metadata-manager.js +320 -0
  344. package/dist/src/core/increment/metadata-manager.js.map +1 -0
  345. package/dist/src/core/increment/status-commands.d.ts +43 -0
  346. package/dist/src/core/increment/status-commands.d.ts.map +1 -0
  347. package/dist/src/core/increment/status-commands.js +277 -0
  348. package/dist/src/core/increment/status-commands.js.map +1 -0
  349. package/dist/src/core/increment-status.d.ts +72 -0
  350. package/dist/src/core/increment-status.d.ts.map +1 -0
  351. package/dist/src/core/increment-status.js +227 -0
  352. package/dist/src/core/increment-status.js.map +1 -0
  353. package/dist/src/core/model-selector.d.ts +57 -0
  354. package/dist/src/core/model-selector.d.ts.map +1 -0
  355. package/dist/src/core/model-selector.js +115 -0
  356. package/dist/src/core/model-selector.js.map +1 -0
  357. package/dist/src/core/phase-detector.d.ts +62 -0
  358. package/dist/src/core/phase-detector.d.ts.map +1 -0
  359. package/dist/src/core/phase-detector.js +229 -0
  360. package/dist/src/core/phase-detector.js.map +1 -0
  361. package/dist/src/core/plugin-loader.d.ts +131 -0
  362. package/dist/src/core/plugin-loader.d.ts.map +1 -0
  363. package/dist/src/core/plugin-loader.js +421 -0
  364. package/dist/src/core/plugin-loader.js.map +1 -0
  365. package/dist/src/core/project-manager.d.ts +127 -0
  366. package/dist/src/core/project-manager.d.ts.map +1 -0
  367. package/dist/src/core/project-manager.js +524 -0
  368. package/dist/src/core/project-manager.js.map +1 -0
  369. package/dist/src/core/project-structure-detector.d.ts +92 -0
  370. package/dist/src/core/project-structure-detector.d.ts.map +1 -0
  371. package/dist/src/core/project-structure-detector.js +289 -0
  372. package/dist/src/core/project-structure-detector.js.map +1 -0
  373. package/dist/src/core/qa/qa-runner.d.ts +16 -0
  374. package/dist/src/core/qa/qa-runner.d.ts.map +1 -0
  375. package/dist/src/core/qa/qa-runner.js +404 -0
  376. package/dist/src/core/qa/qa-runner.js.map +1 -0
  377. package/dist/src/core/qa/quality-gate-decider.d.ts +53 -0
  378. package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -0
  379. package/dist/src/core/qa/quality-gate-decider.js +268 -0
  380. package/dist/src/core/qa/quality-gate-decider.js.map +1 -0
  381. package/dist/src/core/qa/risk-calculator.d.ts +126 -0
  382. package/dist/src/core/qa/risk-calculator.d.ts.map +1 -0
  383. package/dist/src/core/qa/risk-calculator.js +247 -0
  384. package/dist/src/core/qa/risk-calculator.js.map +1 -0
  385. package/dist/src/core/qa/types.d.ts +315 -0
  386. package/dist/src/core/qa/types.d.ts.map +1 -0
  387. package/dist/src/core/qa/types.js +8 -0
  388. package/dist/src/core/qa/types.js.map +1 -0
  389. package/dist/src/core/rfc-generator-v2.d.ts +149 -0
  390. package/dist/src/core/rfc-generator-v2.d.ts.map +1 -0
  391. package/dist/src/core/rfc-generator-v2.js +399 -0
  392. package/dist/src/core/rfc-generator-v2.js.map +1 -0
  393. package/dist/src/core/sync/bidirectional-engine.d.ts +110 -0
  394. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -0
  395. package/dist/src/core/sync/bidirectional-engine.js +356 -0
  396. package/dist/src/core/sync/bidirectional-engine.js.map +1 -0
  397. package/dist/src/core/sync/folder-mapper.d.ts +71 -0
  398. package/dist/src/core/sync/folder-mapper.d.ts.map +1 -0
  399. package/dist/src/core/sync/folder-mapper.js +168 -0
  400. package/dist/src/core/sync/folder-mapper.js.map +1 -0
  401. package/dist/src/core/sync/profile-manager.d.ts +72 -0
  402. package/dist/src/core/sync/profile-manager.d.ts.map +1 -0
  403. package/dist/src/core/sync/profile-manager.js +338 -0
  404. package/dist/src/core/sync/profile-manager.js.map +1 -0
  405. package/dist/src/core/sync/profile-selector.d.ts +52 -0
  406. package/dist/src/core/sync/profile-selector.d.ts.map +1 -0
  407. package/dist/src/core/sync/profile-selector.js +179 -0
  408. package/dist/src/core/sync/profile-selector.js.map +1 -0
  409. package/dist/src/core/sync/profile-validator.d.ts +52 -0
  410. package/dist/src/core/sync/profile-validator.d.ts.map +1 -0
  411. package/dist/src/core/sync/profile-validator.js +225 -0
  412. package/dist/src/core/sync/profile-validator.js.map +1 -0
  413. package/dist/src/core/sync/project-context.d.ts +81 -0
  414. package/dist/src/core/sync/project-context.d.ts.map +1 -0
  415. package/dist/src/core/sync/project-context.js +354 -0
  416. package/dist/src/core/sync/project-context.js.map +1 -0
  417. package/dist/src/core/sync/rate-limiter.d.ts +116 -0
  418. package/dist/src/core/sync/rate-limiter.d.ts.map +1 -0
  419. package/dist/src/core/sync/rate-limiter.js +308 -0
  420. package/dist/src/core/sync/rate-limiter.js.map +1 -0
  421. package/dist/src/core/sync/time-range-selector.d.ts +48 -0
  422. package/dist/src/core/sync/time-range-selector.d.ts.map +1 -0
  423. package/dist/src/core/sync/time-range-selector.js +224 -0
  424. package/dist/src/core/sync/time-range-selector.js.map +1 -0
  425. package/dist/src/core/types/config.d.ts +90 -0
  426. package/dist/src/core/types/config.d.ts.map +1 -0
  427. package/dist/src/core/types/config.js +37 -0
  428. package/dist/src/core/types/config.js.map +1 -0
  429. package/dist/src/core/types/increment-metadata.d.ts +120 -0
  430. package/dist/src/core/types/increment-metadata.d.ts.map +1 -0
  431. package/dist/src/core/types/increment-metadata.js +138 -0
  432. package/dist/src/core/types/increment-metadata.js.map +1 -0
  433. package/dist/src/core/types/plugin.d.ts +283 -0
  434. package/dist/src/core/types/plugin.d.ts.map +1 -0
  435. package/dist/src/core/types/plugin.js +49 -0
  436. package/dist/src/core/types/plugin.js.map +1 -0
  437. package/dist/src/core/types/sync-profile.d.ts +403 -0
  438. package/dist/src/core/types/sync-profile.d.ts.map +1 -0
  439. package/dist/src/core/types/sync-profile.js +55 -0
  440. package/dist/src/core/types/sync-profile.js.map +1 -0
  441. package/dist/src/hooks/lib/types/reflection-types.d.ts +125 -0
  442. package/dist/src/hooks/lib/types/reflection-types.d.ts.map +1 -0
  443. package/dist/src/hooks/lib/types/reflection-types.js +54 -0
  444. package/dist/src/hooks/lib/types/reflection-types.js.map +1 -0
  445. package/dist/src/integrations/ado/ado-client.d.ts +127 -0
  446. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -0
  447. package/dist/src/integrations/ado/ado-client.js +416 -0
  448. package/dist/src/integrations/ado/ado-client.js.map +1 -0
  449. package/dist/src/integrations/jira/jira-client.d.ts +139 -0
  450. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -0
  451. package/dist/src/integrations/jira/jira-client.js +386 -0
  452. package/dist/src/integrations/jira/jira-client.js.map +1 -0
  453. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +75 -0
  454. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -0
  455. package/dist/src/integrations/jira/jira-incremental-mapper.js +474 -0
  456. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -0
  457. package/dist/src/integrations/jira/jira-mapper.d.ts +105 -0
  458. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -0
  459. package/dist/src/integrations/jira/jira-mapper.js +494 -0
  460. package/dist/src/integrations/jira/jira-mapper.js.map +1 -0
  461. package/dist/src/metrics/calculators/change-failure-rate.d.ts +22 -0
  462. package/dist/src/metrics/calculators/change-failure-rate.d.ts.map +1 -0
  463. package/dist/src/metrics/calculators/change-failure-rate.js +70 -0
  464. package/dist/src/metrics/calculators/change-failure-rate.js.map +1 -0
  465. package/dist/src/metrics/calculators/deployment-frequency.d.ts +20 -0
  466. package/dist/src/metrics/calculators/deployment-frequency.d.ts.map +1 -0
  467. package/dist/src/metrics/calculators/deployment-frequency.js +61 -0
  468. package/dist/src/metrics/calculators/deployment-frequency.js.map +1 -0
  469. package/dist/src/metrics/calculators/lead-time.d.ts +22 -0
  470. package/dist/src/metrics/calculators/lead-time.d.ts.map +1 -0
  471. package/dist/src/metrics/calculators/lead-time.js +82 -0
  472. package/dist/src/metrics/calculators/lead-time.js.map +1 -0
  473. package/dist/src/metrics/calculators/mttr.d.ts +21 -0
  474. package/dist/src/metrics/calculators/mttr.d.ts.map +1 -0
  475. package/dist/src/metrics/calculators/mttr.js +60 -0
  476. package/dist/src/metrics/calculators/mttr.js.map +1 -0
  477. package/dist/src/metrics/dora-calculator.d.ts +28 -0
  478. package/dist/src/metrics/dora-calculator.d.ts.map +1 -0
  479. package/dist/src/metrics/dora-calculator.js +117 -0
  480. package/dist/src/metrics/dora-calculator.js.map +1 -0
  481. package/dist/src/metrics/github-client.d.ts +51 -0
  482. package/dist/src/metrics/github-client.d.ts.map +1 -0
  483. package/dist/src/metrics/github-client.js +133 -0
  484. package/dist/src/metrics/github-client.js.map +1 -0
  485. package/dist/src/metrics/report-generator.d.ts +17 -0
  486. package/dist/src/metrics/report-generator.d.ts.map +1 -0
  487. package/dist/src/metrics/report-generator.js +403 -0
  488. package/dist/src/metrics/report-generator.js.map +1 -0
  489. package/dist/src/metrics/types.d.ts +112 -0
  490. package/dist/src/metrics/types.d.ts.map +1 -0
  491. package/dist/src/metrics/types.js +10 -0
  492. package/dist/src/metrics/types.js.map +1 -0
  493. package/dist/src/metrics/utils/percentile.d.ts +25 -0
  494. package/dist/src/metrics/utils/percentile.d.ts.map +1 -0
  495. package/dist/src/metrics/utils/percentile.js +46 -0
  496. package/dist/src/metrics/utils/percentile.js.map +1 -0
  497. package/dist/src/metrics/utils/tier-classifier.d.ts +61 -0
  498. package/dist/src/metrics/utils/tier-classifier.d.ts.map +1 -0
  499. package/dist/src/metrics/utils/tier-classifier.js +100 -0
  500. package/dist/src/metrics/utils/tier-classifier.js.map +1 -0
  501. package/dist/src/testing/test-generator.d.ts +117 -0
  502. package/dist/src/testing/test-generator.d.ts.map +1 -0
  503. package/dist/src/testing/test-generator.js +370 -0
  504. package/dist/src/testing/test-generator.js.map +1 -0
  505. package/dist/src/types/cost-tracking.d.ts +43 -0
  506. package/dist/src/types/cost-tracking.d.ts.map +1 -0
  507. package/dist/src/types/cost-tracking.js +8 -0
  508. package/dist/src/types/cost-tracking.js.map +1 -0
  509. package/dist/src/types/model-selection.d.ts +53 -0
  510. package/dist/src/types/model-selection.d.ts.map +1 -0
  511. package/dist/src/types/model-selection.js +12 -0
  512. package/dist/src/types/model-selection.js.map +1 -0
  513. package/dist/src/utils/agents-md-compiler.d.ts +68 -0
  514. package/dist/src/utils/agents-md-compiler.d.ts.map +1 -0
  515. package/dist/src/utils/agents-md-compiler.js +420 -0
  516. package/dist/src/utils/agents-md-compiler.js.map +1 -0
  517. package/dist/src/utils/auth-helpers.d.ts +58 -0
  518. package/dist/src/utils/auth-helpers.d.ts.map +1 -0
  519. package/dist/src/utils/auth-helpers.js +108 -0
  520. package/dist/src/utils/auth-helpers.js.map +1 -0
  521. package/dist/src/utils/auto-install.d.ts +47 -0
  522. package/dist/src/utils/auto-install.d.ts.map +1 -0
  523. package/dist/src/utils/auto-install.js +211 -0
  524. package/dist/src/utils/auto-install.js.map +1 -0
  525. package/dist/src/utils/claude-cli-detector.d.ts +75 -0
  526. package/dist/src/utils/claude-cli-detector.d.ts.map +1 -0
  527. package/dist/src/utils/claude-cli-detector.js +285 -0
  528. package/dist/src/utils/claude-cli-detector.js.map +1 -0
  529. package/dist/src/utils/cost-reporter.d.ts +58 -0
  530. package/dist/src/utils/cost-reporter.d.ts.map +1 -0
  531. package/dist/src/utils/cost-reporter.js +224 -0
  532. package/dist/src/utils/cost-reporter.js.map +1 -0
  533. package/dist/src/utils/docs-preview/config-generator.d.ts +46 -0
  534. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -0
  535. package/dist/src/utils/docs-preview/config-generator.js +377 -0
  536. package/dist/src/utils/docs-preview/config-generator.js.map +1 -0
  537. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +38 -0
  538. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -0
  539. package/dist/src/utils/docs-preview/docusaurus-setup.js +177 -0
  540. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -0
  541. package/dist/src/utils/docs-preview/index.d.ts +7 -0
  542. package/dist/src/utils/docs-preview/index.d.ts.map +1 -0
  543. package/dist/src/utils/docs-preview/index.js +7 -0
  544. package/dist/src/utils/docs-preview/index.js.map +1 -0
  545. package/dist/src/utils/docs-preview/package-installer.d.ts +42 -0
  546. package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -0
  547. package/dist/src/utils/docs-preview/package-installer.js +182 -0
  548. package/dist/src/utils/docs-preview/package-installer.js.map +1 -0
  549. package/dist/src/utils/docs-preview/server-manager.d.ts +30 -0
  550. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -0
  551. package/dist/src/utils/docs-preview/server-manager.js +212 -0
  552. package/dist/src/utils/docs-preview/server-manager.js.map +1 -0
  553. package/dist/src/utils/docs-preview/sidebar-builder.d.ts +32 -0
  554. package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -0
  555. package/dist/src/utils/docs-preview/sidebar-builder.js +202 -0
  556. package/dist/src/utils/docs-preview/sidebar-builder.js.map +1 -0
  557. package/dist/src/utils/docs-preview/types.d.ts +57 -0
  558. package/dist/src/utils/docs-preview/types.d.ts.map +1 -0
  559. package/dist/src/utils/docs-preview/types.js +2 -0
  560. package/dist/src/utils/docs-preview/types.js.map +1 -0
  561. package/dist/src/utils/env-file.d.ts +88 -0
  562. package/dist/src/utils/env-file.d.ts.map +1 -0
  563. package/dist/src/utils/env-file.js +180 -0
  564. package/dist/src/utils/env-file.js.map +1 -0
  565. package/dist/src/utils/env-multi-project-parser.d.ts +220 -0
  566. package/dist/src/utils/env-multi-project-parser.d.ts.map +1 -0
  567. package/dist/src/utils/env-multi-project-parser.js +403 -0
  568. package/dist/src/utils/env-multi-project-parser.js.map +1 -0
  569. package/dist/src/utils/esm-helpers.d.ts +50 -0
  570. package/dist/src/utils/esm-helpers.d.ts.map +1 -0
  571. package/dist/src/utils/esm-helpers.js +57 -0
  572. package/dist/src/utils/esm-helpers.js.map +1 -0
  573. package/dist/src/utils/execFileNoThrow.d.ts +99 -0
  574. package/dist/src/utils/execFileNoThrow.d.ts.map +1 -0
  575. package/dist/src/utils/execFileNoThrow.js +137 -0
  576. package/dist/src/utils/execFileNoThrow.js.map +1 -0
  577. package/dist/src/utils/external-resource-validator.d.ts +102 -0
  578. package/dist/src/utils/external-resource-validator.d.ts.map +1 -0
  579. package/dist/src/utils/external-resource-validator.js +400 -0
  580. package/dist/src/utils/external-resource-validator.js.map +1 -0
  581. package/dist/src/utils/generate-skills-index.d.ts +24 -0
  582. package/dist/src/utils/generate-skills-index.d.ts.map +1 -0
  583. package/dist/src/utils/generate-skills-index.js +410 -0
  584. package/dist/src/utils/generate-skills-index.js.map +1 -0
  585. package/dist/src/utils/model-selection.d.ts +75 -0
  586. package/dist/src/utils/model-selection.d.ts.map +1 -0
  587. package/dist/src/utils/model-selection.js +204 -0
  588. package/dist/src/utils/model-selection.js.map +1 -0
  589. package/dist/src/utils/plugin-validator.d.ts +161 -0
  590. package/dist/src/utils/plugin-validator.d.ts.map +1 -0
  591. package/dist/src/utils/plugin-validator.js +558 -0
  592. package/dist/src/utils/plugin-validator.js.map +1 -0
  593. package/dist/src/utils/pricing-constants.d.ts +70 -0
  594. package/dist/src/utils/pricing-constants.d.ts.map +1 -0
  595. package/dist/src/utils/pricing-constants.js +71 -0
  596. package/dist/src/utils/pricing-constants.js.map +1 -0
  597. package/dist/src/utils/project-detection.d.ts +141 -0
  598. package/dist/src/utils/project-detection.d.ts.map +1 -0
  599. package/dist/src/utils/project-detection.js +321 -0
  600. package/dist/src/utils/project-detection.js.map +1 -0
  601. package/dist/src/utils/string-utils.d.ts +40 -0
  602. package/dist/src/utils/string-utils.d.ts.map +1 -0
  603. package/dist/src/utils/string-utils.js +58 -0
  604. package/dist/src/utils/string-utils.js.map +1 -0
  605. package/dist/src/utils/translation.d.ts +187 -0
  606. package/dist/src/utils/translation.d.ts.map +1 -0
  607. package/dist/src/utils/translation.js +414 -0
  608. package/dist/src/utils/translation.js.map +1 -0
  609. package/dist/utils/external-resource-validator.d.ts.map +1 -1
  610. package/dist/utils/external-resource-validator.js +101 -59
  611. package/dist/utils/external-resource-validator.js.map +1 -1
  612. package/dist/utils/plugin-validator.d.ts.map +1 -1
  613. package/dist/utils/plugin-validator.js +0 -7
  614. package/dist/utils/plugin-validator.js.map +1 -1
  615. package/package.json +3 -2
  616. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +535 -0
  617. package/plugins/specweave/hooks/post-first-increment.sh +10 -28
  618. package/plugins/specweave/hooks/post-increment-change.sh +94 -0
  619. package/plugins/specweave/hooks/post-increment-planning.sh +261 -1
  620. package/plugins/specweave/hooks/post-increment-status-change.sh +143 -0
  621. package/plugins/specweave/hooks/post-task-completion.sh +26 -0
  622. package/plugins/specweave/lib/hooks/git-diff-analyzer.ts +269 -0
  623. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +264 -0
  624. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +178 -0
  625. package/plugins/specweave/lib/hooks/reflection-config-loader.ts +156 -0
  626. package/plugins/specweave/lib/hooks/reflection-parser.ts +484 -0
  627. package/plugins/specweave/lib/hooks/reflection-prompt-builder.ts +306 -0
  628. package/plugins/specweave/lib/hooks/reflection-storage.ts +369 -0
  629. package/plugins/specweave/lib/hooks/run-self-reflection.ts +258 -0
  630. package/plugins/specweave/lib/hooks/sync-living-docs.ts +188 -0
  631. package/plugins/specweave/lib/hooks/translate-file.ts +428 -0
  632. package/plugins/specweave/lib/hooks/translate-living-docs.ts +224 -0
  633. package/plugins/specweave/lib/hooks/types/reflection-types.ts +193 -0
  634. package/plugins/specweave/lib/hooks/update-tasks-md.ts +256 -0
  635. package/plugins/specweave/skills/SKILLS-INDEX.md +2 -2
  636. package/plugins/specweave/skills/increment-planner/SKILL.md +8 -0
  637. package/plugins/specweave/skills/plugin-expert/SKILL.md +0 -4
  638. package/plugins/specweave/skills/plugin-installer/SKILL.md +19 -21
  639. package/plugins/specweave/skills/plugin-validator/SKILL.md +0 -1
  640. package/plugins/specweave/skills/project-kickstarter/SKILL.md +3 -3
  641. package/plugins/specweave/skills/spec-generator/SKILL.md +3 -3
  642. package/plugins/specweave-docs-preview/.claude-plugin/plugin.json +21 -0
  643. package/plugins/specweave-docs-preview/commands/build.md +489 -0
  644. package/plugins/specweave-docs-preview/commands/preview.md +330 -0
  645. package/plugins/specweave-docs-preview/skills/docs-preview/SKILL.md +386 -0
  646. package/plugins/specweave-github/commands/specweave-github-sync-from.md +147 -0
  647. package/plugins/specweave-github/lib/cli-sync-increment-changes.ts +33 -0
  648. package/plugins/specweave-github/lib/github-issue-updater.ts +449 -0
  649. package/plugins/specweave-github/lib/github-sync-bidirectional.ts +342 -0
  650. package/plugins/specweave-github/lib/github-sync-increment-changes.ts +380 -0
  651. package/src/templates/AGENTS.md.template +55 -9
  652. package/plugins/specweave/skills/translator/SKILL.md.bak +0 -172
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Git Diff Analyzer
3
+ *
4
+ * Extracts modified files from git diff for reflection analysis
5
+ * Parses git diff output to get file changes, line counts, and content
6
+ *
7
+ * @module git-diff-analyzer
8
+ */
9
+
10
+ import { execSync } from 'child_process';
11
+ import fs from 'fs-extra';
12
+ import path from 'path';
13
+ import { GitDiffInfo } from './types/reflection-types';
14
+
15
+ /**
16
+ * Execute git command safely
17
+ * @param command Git command to execute
18
+ * @param cwd Working directory (optional)
19
+ * @returns Command output as string
20
+ * @throws Error if command fails
21
+ */
22
+ function executeGitCommand(command: string, cwd?: string): string {
23
+ try {
24
+ return execSync(command, {
25
+ cwd: cwd || process.cwd(),
26
+ encoding: 'utf-8',
27
+ stdio: ['pipe', 'pipe', 'pipe']
28
+ });
29
+ } catch (error: any) {
30
+ throw new Error(`Git command failed: ${command}. ${error.message}`);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Check if directory is a git repository
36
+ * @param dir Directory to check (defaults to cwd)
37
+ * @returns True if directory is in a git repository
38
+ */
39
+ export function isGitRepository(dir: string = process.cwd()): boolean {
40
+ try {
41
+ executeGitCommand('git rev-parse --git-dir', dir);
42
+ return true;
43
+ } catch {
44
+ return false;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Get list of modified files in the working directory
50
+ * Includes both staged and unstaged changes
51
+ *
52
+ * @param cwd Working directory (optional, defaults to process.cwd())
53
+ * @returns Array of file paths relative to git root
54
+ */
55
+ export function getModifiedFilesList(cwd?: string): string[] {
56
+ if (!isGitRepository(cwd)) {
57
+ return [];
58
+ }
59
+
60
+ try {
61
+ // Get both staged and unstaged changes
62
+ const output = executeGitCommand('git diff --name-only HEAD', cwd);
63
+
64
+ if (!output.trim()) {
65
+ return [];
66
+ }
67
+
68
+ return output
69
+ .trim()
70
+ .split('\n')
71
+ .filter(file => file.length > 0)
72
+ .filter(file => !file.startsWith('.git/')); // Exclude .git directory
73
+ } catch {
74
+ return [];
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Parse git diff numstat output to get line counts
80
+ * Format: <added>\t<removed>\t<filename>
81
+ *
82
+ * @param numstatOutput Output from git diff --numstat
83
+ * @returns Map of filename to {added, removed} counts
84
+ */
85
+ export function parseNumstat(numstatOutput: string): Map<string, { added: number; removed: number }> {
86
+ const stats = new Map<string, { added: number; removed: number }>();
87
+
88
+ if (!numstatOutput.trim()) {
89
+ return stats;
90
+ }
91
+
92
+ const lines = numstatOutput.trim().split('\n');
93
+
94
+ for (const line of lines) {
95
+ const parts = line.split('\t');
96
+ if (parts.length < 3) continue;
97
+
98
+ const added = parts[0] === '-' ? 0 : parseInt(parts[0], 10);
99
+ const removed = parts[1] === '-' ? 0 : parseInt(parts[1], 10);
100
+ const filename = parts[2];
101
+
102
+ stats.set(filename, { added, removed });
103
+ }
104
+
105
+ return stats;
106
+ }
107
+
108
+ /**
109
+ * Get diff content for a specific file
110
+ * @param file File path relative to git root
111
+ * @param cwd Working directory (optional)
112
+ * @returns Diff content as string
113
+ */
114
+ export function getFileDiff(file: string, cwd?: string): string {
115
+ if (!isGitRepository(cwd)) {
116
+ return '';
117
+ }
118
+
119
+ try {
120
+ // Get unified diff for the file
121
+ const output = executeGitCommand(`git diff HEAD -- "${file}"`, cwd);
122
+ return output;
123
+ } catch {
124
+ return '';
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Get current file content
130
+ * @param file File path (can be absolute or relative to cwd)
131
+ * @param cwd Working directory (optional)
132
+ * @returns File content as string, or empty string if file doesn't exist
133
+ */
134
+ export function getFileContent(file: string, cwd?: string): string {
135
+ try {
136
+ const workingDir = cwd || process.cwd();
137
+ const absolutePath = path.isAbsolute(file) ? file : path.join(workingDir, file);
138
+
139
+ if (!fs.existsSync(absolutePath)) {
140
+ return '';
141
+ }
142
+
143
+ return fs.readFileSync(absolutePath, 'utf-8');
144
+ } catch {
145
+ return '';
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Get modified files with diff information
151
+ * Main function for reflection analysis
152
+ *
153
+ * @param cwd Working directory (optional, defaults to process.cwd())
154
+ * @param maxFiles Maximum number of files to return (optional, defaults to 100)
155
+ * @returns Array of GitDiffInfo objects with file changes
156
+ */
157
+ export function getModifiedFiles(
158
+ cwd?: string,
159
+ maxFiles: number = 100
160
+ ): GitDiffInfo[] {
161
+ if (!isGitRepository(cwd)) {
162
+ return [];
163
+ }
164
+
165
+ const workingDir = cwd || process.cwd();
166
+
167
+ // Get list of modified files
168
+ const modifiedFiles = getModifiedFilesList(workingDir);
169
+
170
+ if (modifiedFiles.length === 0) {
171
+ return [];
172
+ }
173
+
174
+ // Limit number of files to prevent overwhelming the analysis
175
+ const filesToAnalyze = modifiedFiles.slice(0, maxFiles);
176
+
177
+ // Get line count statistics
178
+ let numstatOutput = '';
179
+ try {
180
+ numstatOutput = executeGitCommand('git diff --numstat HEAD', workingDir);
181
+ } catch {
182
+ // If numstat fails, continue with empty stats
183
+ }
184
+
185
+ const stats = parseNumstat(numstatOutput);
186
+
187
+ // Build GitDiffInfo array
188
+ const result: GitDiffInfo[] = [];
189
+
190
+ for (const file of filesToAnalyze) {
191
+ const fileStat = stats.get(file) || { added: 0, removed: 0 };
192
+ const diffContent = getFileDiff(file, workingDir);
193
+
194
+ // Only include files with actual changes
195
+ if (fileStat.added > 0 || fileStat.removed > 0 || diffContent.length > 0) {
196
+ result.push({
197
+ file,
198
+ linesAdded: fileStat.added,
199
+ linesRemoved: fileStat.removed,
200
+ content: diffContent
201
+ });
202
+ }
203
+ }
204
+
205
+ return result;
206
+ }
207
+
208
+ /**
209
+ * Get summary statistics for modified files
210
+ * Useful for reflection metadata
211
+ *
212
+ * @param modifiedFiles Array of GitDiffInfo objects
213
+ * @returns Summary with file count, total lines added/removed
214
+ */
215
+ export function getModifiedFilesSummary(modifiedFiles: GitDiffInfo[]): {
216
+ count: number;
217
+ linesAdded: number;
218
+ linesRemoved: number;
219
+ totalChanges: number;
220
+ } {
221
+ return {
222
+ count: modifiedFiles.length,
223
+ linesAdded: modifiedFiles.reduce((sum, file) => sum + file.linesAdded, 0),
224
+ linesRemoved: modifiedFiles.reduce((sum, file) => sum + file.linesRemoved, 0),
225
+ totalChanges: modifiedFiles.reduce(
226
+ (sum, file) => sum + file.linesAdded + file.linesRemoved,
227
+ 0
228
+ )
229
+ };
230
+ }
231
+
232
+ /**
233
+ * Filter files by extension
234
+ * Useful for focusing reflection on specific file types
235
+ *
236
+ * @param modifiedFiles Array of GitDiffInfo objects
237
+ * @param extensions Array of file extensions (e.g., ['.ts', '.js'])
238
+ * @returns Filtered array of GitDiffInfo objects
239
+ */
240
+ export function filterFilesByExtension(
241
+ modifiedFiles: GitDiffInfo[],
242
+ extensions: string[]
243
+ ): GitDiffInfo[] {
244
+ return modifiedFiles.filter(file => {
245
+ const ext = path.extname(file.file).toLowerCase();
246
+ return extensions.some(allowedExt => ext === allowedExt.toLowerCase());
247
+ });
248
+ }
249
+
250
+ /**
251
+ * Exclude files matching patterns
252
+ * Useful for excluding generated files, test files, etc.
253
+ *
254
+ * @param modifiedFiles Array of GitDiffInfo objects
255
+ * @param patterns Array of glob patterns to exclude
256
+ * @returns Filtered array of GitDiffInfo objects
257
+ */
258
+ export function excludeFilesByPattern(
259
+ modifiedFiles: GitDiffInfo[],
260
+ patterns: string[]
261
+ ): GitDiffInfo[] {
262
+ return modifiedFiles.filter(file => {
263
+ return !patterns.some(pattern => {
264
+ // Simple pattern matching (supports * wildcard)
265
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
266
+ return regex.test(file.file);
267
+ });
268
+ });
269
+ }
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Translator Skill Invocation Utility
3
+ *
4
+ * Provides programmatic invocation of the translator skill for automated translation.
5
+ * Used by hooks and CLI scripts to translate content without manual intervention.
6
+ *
7
+ * @see plugins/specweave/skills/translator/SKILL.md
8
+ * @see plugins/specweave/commands/translate.md
9
+ */
10
+
11
+ import fs from 'fs-extra';
12
+ import path from 'path';
13
+ import {
14
+ detectLanguage,
15
+ prepareTranslation,
16
+ postProcessTranslation,
17
+ getLanguageName,
18
+ type SupportedLanguage,
19
+ } from '../../../../src/utils/translation.js';
20
+
21
+ /**
22
+ * Translation result
23
+ */
24
+ export interface TranslationResult {
25
+ success: boolean;
26
+ sourceLanguage: SupportedLanguage;
27
+ targetLanguage: SupportedLanguage;
28
+ originalContent: string;
29
+ translatedContent?: string;
30
+ error?: string;
31
+ }
32
+
33
+ /**
34
+ * Invokes translator skill to translate content
35
+ *
36
+ * This function integrates with the translator skill by:
37
+ * 1. Preparing translation prompt
38
+ * 2. Writing prompt to a temp file
39
+ * 3. Outputting instructions for Claude to process
40
+ * 4. Returning the translated content
41
+ *
42
+ * In an automated context (hooks), this provides clear instructions.
43
+ * In an interactive context, the translator skill can auto-activate.
44
+ *
45
+ * @param content - Content to translate
46
+ * @param sourceLang - Source language
47
+ * @param targetLang - Target language
48
+ * @returns Translation result
49
+ */
50
+ export async function invokeTranslatorSkill(
51
+ content: string,
52
+ sourceLang: SupportedLanguage,
53
+ targetLang: SupportedLanguage = 'en'
54
+ ): Promise<TranslationResult> {
55
+ try {
56
+ // Prepare translation
57
+ const prepared = prepareTranslation(content, sourceLang, targetLang);
58
+
59
+ // For now, we use a practical approach:
60
+ // Output the translation request clearly so it can be processed
61
+
62
+ const result: TranslationResult = {
63
+ success: true,
64
+ sourceLanguage: sourceLang,
65
+ targetLanguage: targetLang,
66
+ originalContent: content,
67
+ translatedContent: await performTranslation(prepared.prompt, prepared.preserved),
68
+ };
69
+
70
+ return result;
71
+ } catch (error) {
72
+ const errorMessage = error instanceof Error ? error.message : String(error);
73
+ return {
74
+ success: false,
75
+ sourceLanguage: sourceLang,
76
+ targetLanguage: targetLang,
77
+ originalContent: content,
78
+ error: errorMessage,
79
+ };
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Performs the actual translation using Anthropic API
85
+ *
86
+ * PRODUCTION IMPLEMENTATION:
87
+ * 1. Checks for ANTHROPIC_API_KEY in environment
88
+ * 2. If available: Uses Anthropic API directly (fully automatic)
89
+ * 3. If not available: Provides clear instructions for manual translation
90
+ *
91
+ * @param prompt - Translation prompt
92
+ * @param preserved - Preserved content structure
93
+ * @returns Translated content
94
+ */
95
+ async function performTranslation(
96
+ prompt: string,
97
+ preserved: any
98
+ ): Promise<string> {
99
+ // Extract content for processing
100
+ const contentMatch = prompt.match(/SOURCE DOCUMENT[^\n]*:\n---\n([\s\S]*?)\n---/);
101
+ const contentToTranslate = contentMatch ? contentMatch[1] : '';
102
+
103
+ // Check if ANTHROPIC_API_KEY is available
104
+ const apiKey = process.env.ANTHROPIC_API_KEY;
105
+
106
+ if (apiKey) {
107
+ // Fully automatic translation using Anthropic API
108
+ console.log(`\n🤖 Translating via Anthropic API (Haiku model)...`);
109
+
110
+ try {
111
+ // Dynamic import of Anthropic SDK (allows graceful fallback if not installed)
112
+ const Anthropic = await import('@anthropic-ai/sdk').then(m => m.default);
113
+
114
+ const anthropic = new Anthropic({
115
+ apiKey,
116
+ });
117
+
118
+ const message = await anthropic.messages.create({
119
+ model: 'claude-3-haiku-20240307',
120
+ max_tokens: 8000,
121
+ messages: [
122
+ {
123
+ role: 'user',
124
+ content: prompt,
125
+ },
126
+ ],
127
+ });
128
+
129
+ // Extract translated content from response
130
+ const translatedContent = message.content[0].type === 'text'
131
+ ? message.content[0].text
132
+ : contentToTranslate;
133
+
134
+ console.log(`✅ Translation complete via API`);
135
+ console.log(` Input tokens: ${message.usage.input_tokens}`);
136
+ console.log(` Output tokens: ${message.usage.output_tokens}`);
137
+ console.log(` Cost: ~$${((message.usage.input_tokens * 0.25 + message.usage.output_tokens * 1.25) / 1000000).toFixed(4)}\n`);
138
+
139
+ return postProcessTranslation(translatedContent, preserved);
140
+ } catch (error: any) {
141
+ console.error(`\n❌ API translation failed: ${error.message}`);
142
+ console.error(` Falling back to manual translation instructions\n`);
143
+ // Fall through to manual instructions
144
+ }
145
+ }
146
+
147
+ // Fallback: Manual translation instructions
148
+ const isInteractive = process.env.CLAUDE_CODE_SESSION === 'true';
149
+
150
+ if (isInteractive) {
151
+ // In Claude Code environment, output translation request
152
+ console.log('\n' + '='.repeat(80));
153
+ console.log('🌐 TRANSLATION REQUEST (translator skill will auto-activate)');
154
+ console.log('='.repeat(80));
155
+ console.log(prompt);
156
+ console.log('='.repeat(80));
157
+ console.log('💡 Tip: Set ANTHROPIC_API_KEY for fully automatic translation\n');
158
+
159
+ return postProcessTranslation(
160
+ `<!-- ⚠️ TRANSLATION REQUESTED - Awaiting translator skill activation -->\n\n${contentToTranslate}`,
161
+ preserved
162
+ );
163
+ } else {
164
+ // Non-interactive environment - provide clear instructions
165
+ console.error('\n⚠️ AUTO-TRANSLATION REQUIRES ONE OF:');
166
+ console.error(' Option A (Recommended): Set ANTHROPIC_API_KEY environment variable');
167
+ console.error(' Option B: Run /specweave:translate <file-path>');
168
+ console.error(' Option C: Manually translate the content\n');
169
+
170
+ return postProcessTranslation(
171
+ `<!-- ⚠️ AUTO-TRANSLATION PENDING -->\n<!-- Set ANTHROPIC_API_KEY for automatic translation -->\n<!-- Or run: /specweave:translate to complete -->\n<!-- Original content below -->\n\n${contentToTranslate}`,
172
+ preserved
173
+ );
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Translate a file using translator skill
179
+ *
180
+ * @param filePath - Path to file to translate
181
+ * @param targetLang - Target language
182
+ * @returns Translation result
183
+ */
184
+ export async function translateFile(
185
+ filePath: string,
186
+ targetLang: SupportedLanguage = 'en'
187
+ ): Promise<TranslationResult & { filePath: string }> {
188
+ // Read file
189
+ if (!await fs.pathExists(filePath)) {
190
+ throw new Error(`File not found: ${filePath}`);
191
+ }
192
+
193
+ const content = await fs.readFile(filePath, 'utf-8');
194
+
195
+ // Detect source language
196
+ const detection = detectLanguage(content);
197
+ const sourceLang = detection.language;
198
+
199
+ // Check if already in target language
200
+ if (sourceLang === targetLang) {
201
+ return {
202
+ success: true,
203
+ filePath,
204
+ sourceLanguage: sourceLang,
205
+ targetLanguage: targetLang,
206
+ originalContent: content,
207
+ translatedContent: content,
208
+ };
209
+ }
210
+
211
+ // Translate
212
+ const result = await invokeTranslatorSkill(content, sourceLang, targetLang);
213
+
214
+ // Write back if successful
215
+ if (result.success && result.translatedContent) {
216
+ await fs.writeFile(filePath, result.translatedContent, 'utf-8');
217
+ console.log(`✅ Translated: ${filePath} (${getLanguageName(sourceLang)} → ${getLanguageName(targetLang)})`);
218
+ }
219
+
220
+ return {
221
+ ...result,
222
+ filePath,
223
+ };
224
+ }
225
+
226
+ /**
227
+ * Batch translate multiple files
228
+ *
229
+ * @param filePaths - Array of file paths
230
+ * @param targetLang - Target language
231
+ * @returns Array of translation results
232
+ */
233
+ export async function batchTranslateFiles(
234
+ filePaths: string[],
235
+ targetLang: SupportedLanguage = 'en'
236
+ ): Promise<Array<TranslationResult & { filePath: string }>> {
237
+ const results: Array<TranslationResult & { filePath: string }> = [];
238
+
239
+ console.log(`\n🌐 Batch translating ${filePaths.length} file(s) to ${getLanguageName(targetLang)}...\n`);
240
+
241
+ for (const filePath of filePaths) {
242
+ try {
243
+ const result = await translateFile(filePath, targetLang);
244
+ results.push(result);
245
+ } catch (error) {
246
+ const errorMessage = error instanceof Error ? error.message : String(error);
247
+ console.error(`❌ Failed to translate ${filePath}: ${errorMessage}`);
248
+ results.push({
249
+ success: false,
250
+ filePath,
251
+ sourceLanguage: 'unknown',
252
+ targetLanguage: targetLang,
253
+ originalContent: '',
254
+ error: errorMessage,
255
+ });
256
+ }
257
+ }
258
+
259
+ // Summary
260
+ const successful = results.filter(r => r.success).length;
261
+ console.log(`\n📊 Batch translation complete: ${successful}/${filePaths.length} files translated\n`);
262
+
263
+ return results;
264
+ }
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Prepare Reflection Context
3
+ *
4
+ * Prepares context for reflection and saves to temp file
5
+ * Used by post-task-completion hook to prepare for reflection invocation
6
+ *
7
+ * @module prepare-reflection-context
8
+ */
9
+
10
+ import fs from 'fs-extra';
11
+ import path from 'path';
12
+ import { createReflectionContext } from './run-self-reflection';
13
+ import { getModifiedFilesSummary } from './git-diff-analyzer';
14
+
15
+ /**
16
+ * Prepare reflection context and save to temp file
17
+ * This allows the hook to prepare data without actually invoking the agent
18
+ *
19
+ * @param incrementId Increment identifier
20
+ * @param taskId Task identifier
21
+ * @param projectRoot Project root directory (optional)
22
+ * @returns Path to saved context file or null if reflection should be skipped
23
+ */
24
+ export function prepareReflectionContext(
25
+ incrementId: string,
26
+ taskId: string,
27
+ projectRoot?: string
28
+ ): string | null {
29
+ try {
30
+ const context = createReflectionContext(incrementId, taskId, projectRoot);
31
+
32
+ // Check if reflection should run
33
+ if (!context.config.enabled || context.modifiedFiles.length === 0) {
34
+ return null;
35
+ }
36
+
37
+ // Create temp directory for reflection context
38
+ const rootDir = projectRoot || process.cwd();
39
+ const tempDir = path.join(rootDir, '.specweave', 'increments', incrementId, 'logs', 'reflections', '.temp');
40
+ fs.mkdirpSync(tempDir);
41
+
42
+ // Save context to temp file
43
+ const contextFile = path.join(tempDir, 'reflection-context.json');
44
+
45
+ const fileStats = getModifiedFilesSummary(context.modifiedFiles);
46
+
47
+ const contextData = {
48
+ incrementId: context.incrementId,
49
+ taskId: context.taskId,
50
+ modifiedFiles: context.modifiedFiles.map(f => ({
51
+ file: f.file,
52
+ linesAdded: f.linesAdded,
53
+ linesRemoved: f.linesRemoved
54
+ // Exclude diff content to save space
55
+ })),
56
+ fileSummary: {
57
+ count: fileStats.count,
58
+ linesAdded: fileStats.linesAdded,
59
+ linesRemoved: fileStats.linesRemoved
60
+ },
61
+ config: context.config,
62
+ timestamp: new Date().toISOString()
63
+ };
64
+
65
+ fs.writeJsonSync(contextFile, contextData, { spaces: 2 });
66
+
67
+ return contextFile;
68
+ } catch (error: any) {
69
+ console.error(`Failed to prepare reflection context: ${error.message}`);
70
+ return null;
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Check if reflection context exists for an increment
76
+ *
77
+ * @param incrementId Increment identifier
78
+ * @param projectRoot Project root directory (optional)
79
+ * @returns True if context file exists
80
+ */
81
+ export function hasReflectionContext(
82
+ incrementId: string,
83
+ projectRoot?: string
84
+ ): boolean {
85
+ const rootDir = projectRoot || process.cwd();
86
+ const contextFile = path.join(
87
+ rootDir,
88
+ '.specweave',
89
+ 'increments',
90
+ incrementId,
91
+ 'logs',
92
+ 'reflections',
93
+ '.temp',
94
+ 'reflection-context.json'
95
+ );
96
+
97
+ return fs.existsSync(contextFile);
98
+ }
99
+
100
+ /**
101
+ * Read reflection context from file
102
+ *
103
+ * @param incrementId Increment identifier
104
+ * @param projectRoot Project root directory (optional)
105
+ * @returns Context data or null if not found
106
+ */
107
+ export function readReflectionContext(
108
+ incrementId: string,
109
+ projectRoot?: string
110
+ ): any | null {
111
+ const rootDir = projectRoot || process.cwd();
112
+ const contextFile = path.join(
113
+ rootDir,
114
+ '.specweave',
115
+ 'increments',
116
+ incrementId,
117
+ 'logs',
118
+ 'reflections',
119
+ '.temp',
120
+ 'reflection-context.json'
121
+ );
122
+
123
+ if (!fs.existsSync(contextFile)) {
124
+ return null;
125
+ }
126
+
127
+ try {
128
+ return fs.readJsonSync(contextFile);
129
+ } catch {
130
+ return null;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Clear reflection context after reflection completes
136
+ *
137
+ * @param incrementId Increment identifier
138
+ * @param projectRoot Project root directory (optional)
139
+ */
140
+ export function clearReflectionContext(
141
+ incrementId: string,
142
+ projectRoot?: string
143
+ ): void {
144
+ const rootDir = projectRoot || process.cwd();
145
+ const tempDir = path.join(
146
+ rootDir,
147
+ '.specweave',
148
+ 'increments',
149
+ incrementId,
150
+ 'logs',
151
+ 'reflections',
152
+ '.temp'
153
+ );
154
+
155
+ if (fs.existsSync(tempDir)) {
156
+ fs.removeSync(tempDir);
157
+ }
158
+ }
159
+
160
+ // CLI entry point for hook integration
161
+ if (require.main === module) {
162
+ const incrementId = process.argv[2];
163
+ const taskId = process.argv[3];
164
+
165
+ if (!incrementId || !taskId) {
166
+ console.error('Usage: node prepare-reflection-context.js <increment-id> <task-id>');
167
+ process.exit(1);
168
+ }
169
+
170
+ const contextFile = prepareReflectionContext(incrementId, taskId);
171
+
172
+ if (contextFile) {
173
+ console.log(`Reflection context prepared: ${contextFile}`);
174
+ console.log('✨ Reflection ready. Run /specweave:reflect to analyze your work.');
175
+ } else {
176
+ console.log('Reflection skipped (disabled or no changes).');
177
+ }
178
+ }