specweave 0.18.0 → 0.20.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 (428) hide show
  1. package/CLAUDE.md +229 -1817
  2. package/README.md +68 -0
  3. package/bin/specweave.js +62 -6
  4. package/dist/locales/de/.gitkeep +0 -0
  5. package/dist/locales/de/cli.json +108 -0
  6. package/dist/locales/en/cli.json +287 -0
  7. package/dist/locales/en/errors.json +7 -0
  8. package/dist/locales/en/templates.json +6 -0
  9. package/dist/locales/es/.gitkeep +0 -0
  10. package/dist/locales/es/cli.json +41 -0
  11. package/dist/locales/fr/.gitkeep +0 -0
  12. package/dist/locales/fr/cli.json +108 -0
  13. package/dist/locales/ja/.gitkeep +0 -0
  14. package/dist/locales/ja/cli.json +108 -0
  15. package/dist/locales/ko/.gitkeep +0 -0
  16. package/dist/locales/ko/cli.json +108 -0
  17. package/dist/locales/pt/.gitkeep +0 -0
  18. package/dist/locales/pt/cli.json +108 -0
  19. package/dist/locales/ru/.gitkeep +0 -0
  20. package/dist/locales/ru/cli.json +269 -0
  21. package/dist/locales/zh/.gitkeep +0 -0
  22. package/dist/locales/zh/cli.json +108 -0
  23. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  24. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
  25. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  26. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
  27. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
  28. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
  29. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
  30. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
  31. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
  32. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
  33. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +25 -0
  34. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +1 -0
  35. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +191 -0
  36. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +1 -0
  37. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
  38. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
  39. package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
  40. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
  41. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
  42. package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  43. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +70 -0
  44. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -0
  45. package/dist/plugins/specweave-github/lib/epic-content-builder.js +258 -0
  46. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -0
  47. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -0
  48. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  49. package/dist/plugins/specweave-github/lib/github-client-v2.js +51 -0
  50. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  51. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +2 -2
  52. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +1 -1
  53. package/dist/plugins/specweave-github/lib/github-epic-sync.js +20 -5
  54. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
  55. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
  56. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
  57. package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
  58. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
  59. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  60. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
  61. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  62. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
  63. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
  64. package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
  65. package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
  66. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
  67. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
  68. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
  69. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
  70. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
  71. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
  72. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
  73. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
  74. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +28 -0
  75. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -0
  76. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +156 -0
  77. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -0
  78. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts +57 -0
  79. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts.map +1 -0
  80. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +248 -0
  81. package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js.map +1 -0
  82. package/dist/plugins/specweave-kafka/lib/cli/types.d.ts +82 -0
  83. package/dist/plugins/specweave-kafka/lib/cli/types.d.ts.map +1 -0
  84. package/dist/plugins/specweave-kafka/lib/cli/types.js +13 -0
  85. package/dist/plugins/specweave-kafka/lib/cli/types.js.map +1 -0
  86. package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts +49 -0
  87. package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts.map +1 -0
  88. package/dist/plugins/specweave-kafka/lib/mcp/detector.js +316 -0
  89. package/dist/plugins/specweave-kafka/lib/mcp/detector.js.map +1 -0
  90. package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts +70 -0
  91. package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts.map +1 -0
  92. package/dist/plugins/specweave-kafka/lib/mcp/types.js +23 -0
  93. package/dist/plugins/specweave-kafka/lib/mcp/types.js.map +1 -0
  94. package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts +85 -0
  95. package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts.map +1 -0
  96. package/dist/plugins/specweave-kafka/lib/utils/partitioning.js +281 -0
  97. package/dist/plugins/specweave-kafka/lib/utils/partitioning.js.map +1 -0
  98. package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts +75 -0
  99. package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts.map +1 -0
  100. package/dist/plugins/specweave-kafka/lib/utils/sizing.js +238 -0
  101. package/dist/plugins/specweave-kafka/lib/utils/sizing.js.map +1 -0
  102. package/dist/spec-parser.js +629 -0
  103. package/dist/src/cli/commands/import-docs.js +4 -4
  104. package/dist/src/cli/commands/import-docs.js.map +1 -1
  105. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  106. package/dist/src/cli/commands/init-multiproject.js +17 -18
  107. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  108. package/dist/src/cli/commands/init.d.ts.map +1 -1
  109. package/dist/src/cli/commands/init.js +107 -3
  110. package/dist/src/cli/commands/init.js.map +1 -1
  111. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
  112. package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
  113. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  114. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  115. package/dist/src/cli/commands/switch-project.js +9 -26
  116. package/dist/src/cli/commands/switch-project.js.map +1 -1
  117. package/dist/src/cli/commands/sync-spec-content.js +3 -0
  118. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  119. package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
  120. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
  121. package/dist/src/core/deduplication/command-deduplicator.js +254 -0
  122. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
  123. package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
  124. package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
  125. package/dist/src/core/increment/active-increment-manager.js +113 -46
  126. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  127. package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
  128. package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
  129. package/dist/src/core/increment/conflict-resolver.js +219 -0
  130. package/dist/src/core/increment/conflict-resolver.js.map +1 -0
  131. package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
  132. package/dist/src/core/increment/discipline-checker.js +7 -1
  133. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  134. package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
  135. package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
  136. package/dist/src/core/increment/duplicate-detector.js +276 -0
  137. package/dist/src/core/increment/duplicate-detector.js.map +1 -0
  138. package/dist/src/core/increment/increment-archiver.d.ts +90 -0
  139. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
  140. package/dist/src/core/increment/increment-archiver.js +368 -0
  141. package/dist/src/core/increment/increment-archiver.js.map +1 -0
  142. package/dist/src/core/increment/increment-reopener.d.ts +165 -0
  143. package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
  144. package/dist/src/core/increment/increment-reopener.js +390 -0
  145. package/dist/src/core/increment/increment-reopener.js.map +1 -0
  146. package/dist/src/core/increment/metadata-manager.d.ts +26 -1
  147. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  148. package/dist/src/core/increment/metadata-manager.js +143 -5
  149. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  150. package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
  151. package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
  152. package/dist/src/core/increment/recent-work-scanner.js +303 -0
  153. package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
  154. package/dist/src/core/increment/types.d.ts +1 -0
  155. package/dist/src/core/increment/types.d.ts.map +1 -1
  156. package/dist/src/core/increment-utils.d.ts +112 -0
  157. package/dist/src/core/increment-utils.d.ts.map +1 -0
  158. package/dist/src/core/increment-utils.js +210 -0
  159. package/dist/src/core/increment-utils.js.map +1 -0
  160. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
  161. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
  162. package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
  163. package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
  164. package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
  165. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
  166. package/dist/src/core/living-docs/feature-archiver.js +549 -0
  167. package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
  168. package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
  169. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
  170. package/dist/src/core/living-docs/feature-id-manager.js +339 -0
  171. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
  172. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
  173. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  174. package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
  175. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  176. package/dist/src/core/living-docs/index.d.ts +6 -0
  177. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  178. package/dist/src/core/living-docs/index.js +6 -0
  179. package/dist/src/core/living-docs/index.js.map +1 -1
  180. package/dist/src/core/living-docs/project-detector.d.ts +6 -0
  181. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  182. package/dist/src/core/living-docs/project-detector.js +35 -1
  183. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  184. package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
  185. package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
  186. package/dist/src/core/living-docs/spec-distributor.js +1275 -258
  187. package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
  188. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
  189. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
  190. package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
  191. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
  192. package/dist/src/core/living-docs/types.d.ts +143 -0
  193. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  194. package/dist/src/core/project-manager.d.ts +2 -17
  195. package/dist/src/core/project-manager.d.ts.map +1 -1
  196. package/dist/src/core/project-manager.js +68 -48
  197. package/dist/src/core/project-manager.js.map +1 -1
  198. package/dist/src/core/spec-content-sync.d.ts +1 -1
  199. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  200. package/dist/src/core/sync/enhanced-content-builder.d.ts +32 -54
  201. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  202. package/dist/src/core/sync/enhanced-content-builder.js +142 -138
  203. package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
  204. package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
  205. package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
  206. package/dist/src/core/sync/performance-optimizer.js +220 -0
  207. package/dist/src/core/sync/performance-optimizer.js.map +1 -0
  208. package/dist/src/core/sync/retry-handler.d.ts +98 -0
  209. package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
  210. package/dist/src/core/sync/retry-handler.js +196 -0
  211. package/dist/src/core/sync/retry-handler.js.map +1 -0
  212. package/dist/src/core/sync/spec-content-sync.d.ts +88 -0
  213. package/dist/src/core/sync/spec-content-sync.d.ts.map +1 -0
  214. package/dist/src/core/sync/spec-content-sync.js +5 -0
  215. package/dist/src/core/sync/spec-content-sync.js.map +1 -0
  216. package/dist/src/core/sync/types.d.ts +52 -0
  217. package/dist/src/core/sync/types.d.ts.map +1 -0
  218. package/dist/src/core/sync/types.js +5 -0
  219. package/dist/src/core/sync/types.js.map +1 -0
  220. package/dist/src/core/types/config.d.ts +125 -0
  221. package/dist/src/core/types/config.d.ts.map +1 -1
  222. package/dist/src/core/types/config.js +25 -0
  223. package/dist/src/core/types/config.js.map +1 -1
  224. package/dist/src/core/types/increment-metadata.d.ts +10 -0
  225. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  226. package/dist/src/core/types/increment-metadata.js +10 -1
  227. package/dist/src/core/types/increment-metadata.js.map +1 -1
  228. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  229. package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
  230. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  231. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  232. package/dist/src/integrations/jira/jira-mapper.js +4 -8
  233. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  234. package/dist/tsconfig.tsbuildinfo +1 -0
  235. package/package.json +1 -1
  236. package/plugins/specweave/COMMANDS.md +13 -4
  237. package/plugins/specweave/agents/pm/AGENT.md +159 -12
  238. package/plugins/specweave/commands/specweave-abandon.md +22 -20
  239. package/plugins/specweave/commands/specweave-archive-features.md +121 -0
  240. package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
  241. package/plugins/specweave/commands/specweave-archive.md +363 -0
  242. package/plugins/specweave/commands/specweave-backlog.md +211 -0
  243. package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
  244. package/plugins/specweave/commands/specweave-increment.md +4 -3
  245. package/plugins/specweave/commands/specweave-progress.md +176 -27
  246. package/plugins/specweave/commands/specweave-reopen.md +391 -0
  247. package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
  248. package/plugins/specweave/commands/specweave-restore.md +309 -0
  249. package/plugins/specweave/commands/specweave-resume.md +51 -23
  250. package/plugins/specweave/commands/specweave-status.md +41 -7
  251. package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
  252. package/plugins/specweave/commands/specweave.md +70 -405
  253. package/plugins/specweave/hooks/hooks.json +4 -0
  254. package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
  255. package/plugins/specweave/hooks/post-increment-planning.sh +26 -2
  256. package/plugins/specweave/hooks/post-task-completion.sh +39 -0
  257. package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
  258. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  259. package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
  260. package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
  261. package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
  262. package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
  263. package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
  264. package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
  265. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
  266. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
  267. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
  268. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  269. package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
  270. package/plugins/specweave-confluent/README.md +375 -0
  271. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
  272. package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
  273. package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
  274. package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
  275. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
  276. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
  277. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
  278. package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
  279. package/plugins/specweave-github/hooks/post-task-completion.sh +42 -9
  280. package/plugins/specweave-github/lib/completion-calculator.js +262 -0
  281. package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
  282. package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  283. package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
  284. package/plugins/specweave-github/lib/epic-content-builder.js +265 -0
  285. package/plugins/specweave-github/lib/epic-content-builder.ts +376 -0
  286. package/plugins/specweave-github/lib/github-client-v2.js +49 -0
  287. package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
  288. package/plugins/specweave-github/lib/github-epic-sync.js +23 -24
  289. package/plugins/specweave-github/lib/github-epic-sync.ts +30 -5
  290. package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
  291. package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
  292. package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
  293. package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
  294. package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
  295. package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
  296. package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
  297. package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
  298. package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
  299. package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
  300. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
  301. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
  302. package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
  303. package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
  304. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
  305. package/plugins/specweave-kafka/README.md +242 -0
  306. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
  307. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
  308. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
  309. package/plugins/specweave-kafka/commands/deploy.md +99 -0
  310. package/plugins/specweave-kafka/commands/dev-env.md +176 -0
  311. package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
  312. package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
  313. package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
  314. package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
  315. package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
  316. package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
  317. package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
  318. package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
  319. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
  320. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
  321. package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
  322. package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
  323. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
  324. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
  325. package/plugins/specweave-kafka/lib/cli/types.js +10 -0
  326. package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
  327. package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
  328. package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
  329. package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
  330. package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
  331. package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
  332. package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
  333. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
  334. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
  335. package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
  336. package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
  337. package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
  338. package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
  339. package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
  340. package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
  341. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
  342. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
  343. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
  344. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
  345. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
  346. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
  347. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
  348. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
  349. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
  350. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
  351. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
  352. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
  353. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
  354. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
  355. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
  356. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
  357. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
  358. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
  359. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
  360. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
  361. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
  362. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
  363. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
  364. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
  365. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
  366. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
  367. package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
  368. package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
  369. package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
  370. package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
  371. package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
  372. package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
  373. package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
  374. package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
  375. package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
  376. package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
  377. package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
  378. package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
  379. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
  380. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
  381. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
  382. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
  383. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
  384. package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
  385. package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
  386. package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
  387. package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
  388. package/plugins/specweave-kafka/package.json +41 -0
  389. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
  390. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
  391. package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
  392. package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
  393. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
  394. package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
  395. package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
  396. package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
  397. package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
  398. package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
  399. package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
  400. package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
  401. package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
  402. package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
  403. package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
  404. package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
  405. package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
  406. package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
  407. package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
  408. package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
  409. package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
  410. package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
  411. package/plugins/specweave-kafka/tsconfig.json +21 -0
  412. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
  413. package/plugins/specweave-kafka-streams/README.md +310 -0
  414. package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
  415. package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
  416. package/plugins/specweave-n8n/README.md +354 -0
  417. package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
  418. package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
  419. package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
  420. package/src/templates/AGENTS.md.template +601 -7
  421. package/src/templates/CLAUDE.md.template +188 -88
  422. package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
  423. package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
  424. package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
  425. package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
  426. package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
  427. package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
  428. package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
@@ -0,0 +1,301 @@
1
+ /**
2
+ * User Story Content Builder - GitHub issue content for individual user stories
3
+ *
4
+ * Architecture:
5
+ * - Reads individual us-*.md files from living docs
6
+ * - Extracts ACs and converts to GitHub task checkboxes
7
+ * - Finds and links related tasks from increment tasks.md
8
+ * - Generates rich GitHub issue body with proper formatting
9
+ *
10
+ * Key Features:
11
+ * - Checkable ACs (GitHub task checkboxes)
12
+ * - Task connections (links to increment tasks)
13
+ * - User story description (As a... I want... So that...)
14
+ * - Implementation details
15
+ */
16
+ import { readFile } from 'fs/promises';
17
+ import { existsSync } from 'fs';
18
+ import * as path from 'path';
19
+ import * as yaml from 'yaml';
20
+ export class UserStoryContentBuilder {
21
+ constructor(userStoryPath, projectRoot) {
22
+ this.userStoryPath = userStoryPath;
23
+ this.projectRoot = projectRoot;
24
+ }
25
+ /**
26
+ * Parse user story file and extract all content
27
+ */
28
+ async parse() {
29
+ const content = await readFile(this.userStoryPath, 'utf-8');
30
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
31
+ if (!match) {
32
+ throw new Error('User story file missing YAML frontmatter');
33
+ }
34
+ const frontmatter = yaml.parse(match[1]);
35
+ const bodyContent = content.slice(match[0].length).trim();
36
+ // Extract feature ID from epic or path
37
+ const featureId = this.extractFeatureId(frontmatter.epic, this.userStoryPath);
38
+ // Extract user story description
39
+ const userStoryDescription = this.extractUserStoryDescription(bodyContent);
40
+ // Extract acceptance criteria
41
+ const acceptanceCriteria = this.extractAcceptanceCriteria(bodyContent);
42
+ // Extract increment ID and tasks
43
+ const incrementId = this.extractIncrementId(bodyContent);
44
+ const tasks = incrementId
45
+ ? await this.extractTasks(bodyContent, incrementId, frontmatter.id)
46
+ : [];
47
+ return {
48
+ frontmatter,
49
+ userStoryDescription,
50
+ acceptanceCriteria,
51
+ tasks,
52
+ incrementId,
53
+ featureId,
54
+ };
55
+ }
56
+ /**
57
+ * Build GitHub issue body from user story content
58
+ *
59
+ * @param githubRepo Optional GitHub repo in format "owner/repo" for generating URLs
60
+ */
61
+ async buildIssueBody(githubRepo) {
62
+ const content = await this.parse();
63
+ let body = '';
64
+ // Extract priority from ACs (highest priority wins)
65
+ const priority = this.extractPriorityFromACs(content.acceptanceCriteria);
66
+ // Detect GitHub repo from git remote if not provided
67
+ const repo = githubRepo || await this.detectGitHubRepo();
68
+ // Header with metadata
69
+ if (repo) {
70
+ body += `**Feature**: [${content.featureId}](https://github.com/${repo}/tree/develop/.specweave/docs/internal/specs/_features/${content.featureId})\n`;
71
+ }
72
+ else {
73
+ body += `**Feature**: ${content.featureId}\n`;
74
+ }
75
+ body += `**Status**: ${content.frontmatter.status}\n`;
76
+ if (priority) {
77
+ body += `**Priority**: ${priority}\n`;
78
+ }
79
+ body += `\n---\n\n`;
80
+ // User Story description
81
+ body += `## User Story\n\n`;
82
+ if (content.userStoryDescription) {
83
+ body += `**As a** ${content.userStoryDescription.asA}\n`;
84
+ body += `**I want** ${content.userStoryDescription.iWant}\n`;
85
+ body += `**So that** ${content.userStoryDescription.soThat}\n\n`;
86
+ }
87
+ else {
88
+ body += `*User story description not found*\n\n`;
89
+ }
90
+ // Link to full user story file (GitHub URL)
91
+ const usFilename = path.basename(this.userStoryPath);
92
+ if (repo) {
93
+ const relativePath = this.userStoryPath
94
+ .replace(this.projectRoot, '')
95
+ .replace(/^\//, '');
96
+ body += `📄 View full story: [\`${usFilename}\`](https://github.com/${repo}/tree/develop/${relativePath})\n\n`;
97
+ }
98
+ body += `---\n\n`;
99
+ // Acceptance Criteria (checkable!)
100
+ body += `## Acceptance Criteria\n\n`;
101
+ if (content.acceptanceCriteria.length > 0) {
102
+ const completed = content.acceptanceCriteria.filter((ac) => ac.completed).length;
103
+ const total = content.acceptanceCriteria.length;
104
+ const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
105
+ body += `Progress: ${completed}/${total} criteria met (${percentage}%)\n\n`;
106
+ for (const ac of content.acceptanceCriteria) {
107
+ const checkbox = ac.completed ? '[x]' : '[ ]';
108
+ const priority = ac.priority ? ` (${ac.priority})` : '';
109
+ const testable = ac.testable ? ' [testable]' : '';
110
+ body += `- ${checkbox} **${ac.id}**: ${ac.description}${priority}${testable}\n`;
111
+ }
112
+ body += '\n';
113
+ }
114
+ else {
115
+ body += `*No acceptance criteria defined*\n\n`;
116
+ }
117
+ body += `---\n\n`;
118
+ // Tasks (linked to increment!)
119
+ body += `## Implementation Tasks\n\n`;
120
+ if (content.tasks.length > 0) {
121
+ const completed = content.tasks.filter((t) => t.status).length;
122
+ const total = content.tasks.length;
123
+ const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
124
+ body += `Progress: ${completed}/${total} tasks complete (${percentage}%)\n\n`;
125
+ if (content.incrementId) {
126
+ if (repo) {
127
+ body += `**Increment**: [${content.incrementId}](https://github.com/${repo}/tree/develop/.specweave/increments/${content.incrementId})\n\n`;
128
+ }
129
+ else {
130
+ body += `**Increment**: ${content.incrementId}\n\n`;
131
+ }
132
+ }
133
+ for (const task of content.tasks) {
134
+ const checkbox = task.status ? '[x]' : '[ ]';
135
+ // Convert relative link to GitHub URL if repo is known
136
+ let taskLink = task.link;
137
+ if (repo && taskLink.startsWith('../../')) {
138
+ const relativePath = taskLink.replace(/^\.\.\/\.\.\//, '.specweave/');
139
+ taskLink = `https://github.com/${repo}/tree/develop/${relativePath}`;
140
+ }
141
+ body += `- ${checkbox} [${task.id}: ${task.title}](${taskLink})\n`;
142
+ }
143
+ body += '\n';
144
+ }
145
+ else {
146
+ body += `*No tasks defined yet*\n\n`;
147
+ }
148
+ body += `---\n\n`;
149
+ body += `🤖 Auto-synced by SpecWeave User Story Sync`;
150
+ return body;
151
+ }
152
+ /**
153
+ * Extract feature ID from epic or path
154
+ */
155
+ extractFeatureId(epic, filePath) {
156
+ // Try epic first (e.g., "FS-031")
157
+ if (epic && epic.startsWith('FS-')) {
158
+ return epic;
159
+ }
160
+ // Extract from path: .../specs/default/FS-031/us-001-...md
161
+ const match = filePath.match(/FS-\d+/);
162
+ return match ? match[0] : 'FS-UNKNOWN';
163
+ }
164
+ /**
165
+ * Extract user story description (As a... I want... So that...)
166
+ */
167
+ extractUserStoryDescription(content) {
168
+ const asAMatch = content.match(/\*\*As a\*\*\s+([^\n]+)/);
169
+ const iWantMatch = content.match(/\*\*I want\*\*\s+([^\n]+)/);
170
+ const soThatMatch = content.match(/\*\*So that\*\*\s+([^\n]+)/);
171
+ if (asAMatch && iWantMatch && soThatMatch) {
172
+ return {
173
+ asA: asAMatch[1].trim(),
174
+ iWant: iWantMatch[1].trim(),
175
+ soThat: soThatMatch[1].trim(),
176
+ };
177
+ }
178
+ return null;
179
+ }
180
+ /**
181
+ * Extract acceptance criteria from content
182
+ */
183
+ extractAcceptanceCriteria(content) {
184
+ const criteria = [];
185
+ // Pattern: - [x] **AC-US4-01**: Description (P1, testable)
186
+ const acPattern = /- \[([ x])\] \*\*AC-US(\d+)-(\d+)\*\*:\s*([^(]+)(?:\(([^)]+)\))?/g;
187
+ let match;
188
+ while ((match = acPattern.exec(content)) !== null) {
189
+ const completed = match[1] === 'x';
190
+ const usNumber = match[2];
191
+ const acNumber = match[3];
192
+ const description = match[4].trim();
193
+ const metadata = match[5] || '';
194
+ criteria.push({
195
+ id: `AC-US${usNumber}-${acNumber}`,
196
+ description,
197
+ completed,
198
+ priority: metadata.includes('P1') ? 'P1' : metadata.includes('P2') ? 'P2' : '',
199
+ testable: metadata.includes('testable'),
200
+ });
201
+ }
202
+ return criteria;
203
+ }
204
+ /**
205
+ * Extract increment ID from Implementation section
206
+ */
207
+ extractIncrementId(content) {
208
+ // Pattern: **Increment**: [0031-external-tool-status-sync](...)
209
+ const match = content.match(/\*\*Increment\*\*:\s*\[([^\]]+)\]/);
210
+ return match ? match[1] : null;
211
+ }
212
+ /**
213
+ * Extract tasks for this user story from increment tasks.md
214
+ */
215
+ async extractTasks(content, incrementId, userStoryId) {
216
+ const tasks = [];
217
+ // Find increment folder
218
+ const incrementFolder = path.join(this.projectRoot, '.specweave', 'increments', incrementId);
219
+ if (!existsSync(incrementFolder)) {
220
+ console.warn(` ⚠️ Increment folder not found: ${incrementId}`);
221
+ return [];
222
+ }
223
+ const tasksPath = path.join(incrementFolder, 'tasks.md');
224
+ if (!existsSync(tasksPath)) {
225
+ console.warn(` ⚠️ tasks.md not found in ${incrementId}`);
226
+ return [];
227
+ }
228
+ // Read tasks.md
229
+ const tasksContent = await readFile(tasksPath, 'utf-8');
230
+ // Extract task links from user story's Implementation section
231
+ // Format: - [T-008: Create Status Sync Engine](link#t-008-create-status-sync-engine)
232
+ const taskLinkPattern = /- \[([T-\d]+):\s*([^\]]+)\]/g;
233
+ let match;
234
+ while ((match = taskLinkPattern.exec(content)) !== null) {
235
+ const taskId = match[1]; // e.g., "T-008"
236
+ const taskTitle = match[2].trim();
237
+ // Find task in tasks.md to get completion status
238
+ // Pattern: ### T-008: Create Status Sync Engine ... **Status**: [x]
239
+ const taskPattern = new RegExp(`###\\s+${taskId}:\\s*([^\\n]+)[\\s\\S]*?\\*\\*Status\\*\\*:\\s*\\[([x\\s])\\]`, 'i');
240
+ const taskMatch = tasksContent.match(taskPattern);
241
+ const isCompleted = taskMatch ? taskMatch[2] === 'x' : false;
242
+ // Build link to task in tasks.md
243
+ const taskAnchor = taskId.toLowerCase() + '-' + taskTitle.toLowerCase().replace(/[^\w\s-]/g, '').replace(/\s+/g, '-');
244
+ const link = `../../increments/${incrementId}/tasks.md#${taskAnchor}`;
245
+ tasks.push({
246
+ id: taskId,
247
+ title: taskTitle,
248
+ status: isCompleted,
249
+ link,
250
+ });
251
+ }
252
+ return tasks;
253
+ }
254
+ /**
255
+ * Extract highest priority from acceptance criteria
256
+ * Priority order: P1 > P2 > P3
257
+ */
258
+ extractPriorityFromACs(acceptanceCriteria) {
259
+ if (acceptanceCriteria.length === 0) {
260
+ return null;
261
+ }
262
+ // Check for P1 first (highest priority)
263
+ if (acceptanceCriteria.some(ac => ac.priority === 'P1')) {
264
+ return 'P1';
265
+ }
266
+ // Then P2
267
+ if (acceptanceCriteria.some(ac => ac.priority === 'P2')) {
268
+ return 'P2';
269
+ }
270
+ // Then P3
271
+ if (acceptanceCriteria.some(ac => ac.priority === 'P3')) {
272
+ return 'P3';
273
+ }
274
+ return null; // No priority found
275
+ }
276
+ /**
277
+ * Detect GitHub repository from git remote
278
+ * Returns "owner/repo" format
279
+ */
280
+ async detectGitHubRepo() {
281
+ try {
282
+ const { execFileNoThrow } = await import('../../../src/utils/execFileNoThrow.js');
283
+ const result = await execFileNoThrow('git', ['remote', 'get-url', 'origin']);
284
+ if (result.exitCode !== 0 || !result.stdout) {
285
+ return null;
286
+ }
287
+ const remoteUrl = result.stdout.trim();
288
+ // Parse GitHub URL
289
+ // Formats: git@github.com:owner/repo.git or https://github.com/owner/repo.git
290
+ const githubMatch = remoteUrl.match(/github\.com[:/](.+\/.+?)(?:\.git)?$/);
291
+ if (githubMatch) {
292
+ return githubMatch[1]; // "owner/repo"
293
+ }
294
+ return null;
295
+ }
296
+ catch {
297
+ return null;
298
+ }
299
+ }
300
+ }
301
+ //# sourceMappingURL=user-story-content-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-story-content-builder.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/user-story-content-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * User Story Issue Builder - Creates GitHub issue content for individual User Stories
3
+ *
4
+ * Architecture (Universal Hierarchy):
5
+ * - Feature (FS-033) → GitHub Milestone
6
+ * - User Story (US-001) → GitHub Issue (this builder creates the body)
7
+ * - Tasks (T-001, T-002) → Checkboxes in issue body
8
+ *
9
+ * Key Features:
10
+ * - Reads single us-*.md file
11
+ * - Extracts acceptance criteria as checkboxes
12
+ * - Maps tasks from increment's tasks.md
13
+ * - Generates GitHub issue body with proper formatting
14
+ */
15
+ export declare class UserStoryIssueBuilder {
16
+ private userStoryPath;
17
+ private projectRoot;
18
+ private featureId;
19
+ private repoOwner?;
20
+ private repoName?;
21
+ private branch?;
22
+ constructor(userStoryPath: string, projectRoot: string, featureId: string, repoInfo?: {
23
+ owner: string;
24
+ repo: string;
25
+ branch?: string;
26
+ });
27
+ /**
28
+ * Build GitHub issue body for a single User Story
29
+ *
30
+ * Format:
31
+ * - User Story statement
32
+ * - Acceptance Criteria (checkboxes)
33
+ * - Tasks (checkboxes)
34
+ * - Links (Feature, Increment, Spec file)
35
+ */
36
+ buildIssueBody(): Promise<{
37
+ title: string;
38
+ body: string;
39
+ labels: string[];
40
+ userStoryId: string;
41
+ status?: string;
42
+ }>;
43
+ /**
44
+ * Read User Story frontmatter
45
+ */
46
+ private readUserStoryFrontmatter;
47
+ /**
48
+ * Extract "As a... I want... So that..." statement
49
+ */
50
+ private extractUserStoryStatement;
51
+ /**
52
+ * Extract Acceptance Criteria with AC-IDs and checkbox state
53
+ */
54
+ private extractAcceptanceCriteria;
55
+ /**
56
+ * Extract tasks from user story's ## Tasks section (NEW architecture)
57
+ *
58
+ * Previously: Read from increment tasks.md (LEGACY)
59
+ * Now: Read from user story's ## Tasks section directly
60
+ *
61
+ * This enables project-specific tasks with completion tracking per user story.
62
+ */
63
+ private extractTasks;
64
+ /**
65
+ * LEGACY: Extract tasks from increment's tasks.md (backward compatibility)
66
+ *
67
+ * Used as fallback when user story file doesn't have ## Tasks section.
68
+ */
69
+ private extractTasksLegacy;
70
+ /**
71
+ * Build complete issue body
72
+ */
73
+ private buildBody;
74
+ /**
75
+ * Build labels for the issue
76
+ */
77
+ private buildLabels;
78
+ /**
79
+ * Capitalize first letter
80
+ */
81
+ private capitalize;
82
+ }
83
+ //# sourceMappingURL=user-story-issue-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-story-issue-builder.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/user-story-issue-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA8BH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAGtB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAU7D;;;;;;;;OAQG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAkCF;;OAEG;YACW,wBAAwB;IAWtC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmBjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqDjC;;;;;;;OAOG;YACW,YAAY;IAsC1B;;;;OAIG;YACW,kBAAkB;IAyFhC;;OAEG;IACH,OAAO,CAAC,SAAS;IAmKjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}