specweave 0.32.0 → 0.32.3

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 (347) hide show
  1. package/CLAUDE.md +215 -2
  2. package/README.md +22 -0
  3. package/bin/specweave.js +52 -1
  4. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts +100 -0
  5. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts.map +1 -0
  6. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js +291 -0
  7. package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js.map +1 -0
  8. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts +103 -0
  9. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts.map +1 -0
  10. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js +310 -0
  11. package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js.map +1 -0
  12. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts +126 -0
  13. package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts.map +1 -0
  14. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js +207 -0
  15. package/dist/plugins/specweave-jira/lib/jira-permission-gate.js.map +1 -0
  16. package/dist/src/adapters/codex/README.md +1 -1
  17. package/dist/src/adapters/codex/adapter.js +1 -1
  18. package/dist/src/cli/commands/archive.d.ts +2 -0
  19. package/dist/src/cli/commands/archive.d.ts.map +1 -1
  20. package/dist/src/cli/commands/archive.js +33 -0
  21. package/dist/src/cli/commands/archive.js.map +1 -1
  22. package/dist/src/cli/commands/cache.d.ts +17 -0
  23. package/dist/src/cli/commands/cache.d.ts.map +1 -0
  24. package/dist/src/cli/commands/cache.js +126 -0
  25. package/dist/src/cli/commands/cache.js.map +1 -0
  26. package/dist/src/cli/commands/context.d.ts +92 -0
  27. package/dist/src/cli/commands/context.d.ts.map +1 -0
  28. package/dist/src/cli/commands/context.js +205 -0
  29. package/dist/src/cli/commands/context.js.map +1 -0
  30. package/dist/src/cli/commands/init.d.ts.map +1 -1
  31. package/dist/src/cli/commands/init.js +112 -70
  32. package/dist/src/cli/commands/init.js.map +1 -1
  33. package/dist/src/cli/commands/plan/increment-detector.js +2 -2
  34. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
  35. package/dist/src/cli/commands/sync-spec-commits.js +1 -1
  36. package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
  37. package/dist/src/cli/commands/sync-specs.js +2 -2
  38. package/dist/src/cli/commands/sync-specs.js.map +1 -1
  39. package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
  40. package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
  41. package/dist/src/cli/helpers/init/external-import.d.ts +3 -0
  42. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  43. package/dist/src/cli/helpers/init/external-import.js +17 -4
  44. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  45. package/dist/src/cli/helpers/init/index.d.ts +1 -0
  46. package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
  47. package/dist/src/cli/helpers/init/index.js +2 -0
  48. package/dist/src/cli/helpers/init/index.js.map +1 -1
  49. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +70 -0
  50. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -1
  51. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +214 -4
  52. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -1
  53. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +4 -0
  54. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
  55. package/dist/src/cli/helpers/init/living-docs-preflight.js +34 -3
  56. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  57. package/dist/src/cli/helpers/init/testing-config.d.ts +3 -0
  58. package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -1
  59. package/dist/src/cli/helpers/init/testing-config.js +9 -2
  60. package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
  61. package/dist/src/cli/helpers/init/translation-config.d.ts +3 -0
  62. package/dist/src/cli/helpers/init/translation-config.d.ts.map +1 -1
  63. package/dist/src/cli/helpers/init/translation-config.js +21 -4
  64. package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
  65. package/dist/src/cli/helpers/init/wizard-navigation.d.ts +45 -0
  66. package/dist/src/cli/helpers/init/wizard-navigation.d.ts.map +1 -0
  67. package/dist/src/cli/helpers/init/wizard-navigation.js +97 -0
  68. package/dist/src/cli/helpers/init/wizard-navigation.js.map +1 -0
  69. package/dist/src/cli/workers/living-docs-worker.js +66 -1
  70. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  71. package/dist/src/config/types.d.ts +203 -1208
  72. package/dist/src/config/types.d.ts.map +1 -1
  73. package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -1
  74. package/dist/src/core/discrepancy/increment-generator.js +5 -2
  75. package/dist/src/core/discrepancy/increment-generator.js.map +1 -1
  76. package/dist/src/core/increment/duplicate-detector.js +2 -2
  77. package/dist/src/core/increment/duplicate-detector.js.map +1 -1
  78. package/dist/src/core/increment/increment-archiver.d.ts +49 -4
  79. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  80. package/dist/src/core/increment/increment-archiver.js +123 -22
  81. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  82. package/dist/src/core/increment/increment-status.js +2 -2
  83. package/dist/src/core/increment/increment-status.js.map +1 -1
  84. package/dist/src/core/increment/increment-utils.d.ts +150 -0
  85. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  86. package/dist/src/core/increment/increment-utils.js +216 -4
  87. package/dist/src/core/increment/increment-utils.js.map +1 -1
  88. package/dist/src/core/increment/metadata-validator.js +1 -1
  89. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  90. package/dist/src/core/living-docs/feature-archiver.d.ts +4 -0
  91. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  92. package/dist/src/core/living-docs/feature-archiver.js +32 -10
  93. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  94. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  95. package/dist/src/core/living-docs/feature-id-manager.js +8 -4
  96. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  97. package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts +38 -0
  98. package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts.map +1 -0
  99. package/dist/src/core/living-docs/governance/ecosystem-detector.js +325 -0
  100. package/dist/src/core/living-docs/governance/ecosystem-detector.js.map +1 -0
  101. package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts +74 -0
  102. package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts.map +1 -0
  103. package/dist/src/core/living-docs/governance/frontend-standards-parser.js +366 -0
  104. package/dist/src/core/living-docs/governance/frontend-standards-parser.js.map +1 -0
  105. package/dist/src/core/living-docs/governance/go-standards-parser.d.ts +64 -0
  106. package/dist/src/core/living-docs/governance/go-standards-parser.d.ts.map +1 -0
  107. package/dist/src/core/living-docs/governance/go-standards-parser.js +229 -0
  108. package/dist/src/core/living-docs/governance/go-standards-parser.js.map +1 -0
  109. package/dist/src/core/living-docs/governance/index.d.ts +50 -0
  110. package/dist/src/core/living-docs/governance/index.d.ts.map +1 -0
  111. package/dist/src/core/living-docs/governance/index.js +56 -0
  112. package/dist/src/core/living-docs/governance/index.js.map +1 -0
  113. package/dist/src/core/living-docs/governance/java-standards-parser.d.ts +89 -0
  114. package/dist/src/core/living-docs/governance/java-standards-parser.d.ts.map +1 -0
  115. package/dist/src/core/living-docs/governance/java-standards-parser.js +356 -0
  116. package/dist/src/core/living-docs/governance/java-standards-parser.js.map +1 -0
  117. package/dist/src/core/living-docs/governance/python-standards-parser.d.ts +83 -0
  118. package/dist/src/core/living-docs/governance/python-standards-parser.d.ts.map +1 -0
  119. package/dist/src/core/living-docs/governance/python-standards-parser.js +347 -0
  120. package/dist/src/core/living-docs/governance/python-standards-parser.js.map +1 -0
  121. package/dist/src/core/living-docs/governance/standards-generator.d.ts +38 -0
  122. package/dist/src/core/living-docs/governance/standards-generator.d.ts.map +1 -0
  123. package/dist/src/core/living-docs/governance/standards-generator.js +476 -0
  124. package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -0
  125. package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
  126. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  127. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts +18 -0
  128. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -0
  129. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +299 -0
  130. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -0
  131. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts +15 -0
  132. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -0
  133. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +138 -0
  134. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -0
  135. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts +24 -0
  136. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts.map +1 -0
  137. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js +198 -0
  138. package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js.map +1 -0
  139. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +17 -0
  140. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -0
  141. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +241 -0
  142. package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -0
  143. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +28 -0
  144. package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -0
  145. package/dist/src/core/living-docs/intelligent-analyzer/index.js +197 -0
  146. package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -0
  147. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts +22 -0
  148. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -0
  149. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +482 -0
  150. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -0
  151. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts +42 -0
  152. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts.map +1 -0
  153. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js +343 -0
  154. package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js.map +1 -0
  155. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +190 -0
  156. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -0
  157. package/dist/src/core/living-docs/intelligent-analyzer/types.js +7 -0
  158. package/dist/src/core/living-docs/intelligent-analyzer/types.js.map +1 -0
  159. package/dist/src/core/living-docs/living-docs-sync.d.ts +11 -3
  160. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  161. package/dist/src/core/living-docs/living-docs-sync.js +53 -10
  162. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  163. package/dist/src/core/living-docs/module-analyzer.d.ts +22 -0
  164. package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
  165. package/dist/src/core/living-docs/module-analyzer.js +123 -19
  166. package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
  167. package/dist/src/core/llm/provider-factory.js +2 -2
  168. package/dist/src/core/llm/provider-factory.js.map +1 -1
  169. package/dist/src/core/llm/providers/anthropic-provider.js +1 -1
  170. package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
  171. package/dist/src/core/llm/providers/bedrock-provider.js +8 -4
  172. package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
  173. package/dist/src/core/sync/spec-increment-mapper.js +3 -3
  174. package/dist/src/core/sync/spec-increment-mapper.js.map +1 -1
  175. package/dist/src/importers/item-converter.d.ts +25 -0
  176. package/dist/src/importers/item-converter.d.ts.map +1 -1
  177. package/dist/src/importers/item-converter.js +135 -5
  178. package/dist/src/importers/item-converter.js.map +1 -1
  179. package/dist/src/importers/jira-importer.d.ts +14 -0
  180. package/dist/src/importers/jira-importer.d.ts.map +1 -1
  181. package/dist/src/importers/jira-importer.js +75 -0
  182. package/dist/src/importers/jira-importer.js.map +1 -1
  183. package/dist/src/init/architecture/types.d.ts +33 -140
  184. package/dist/src/init/architecture/types.d.ts.map +1 -1
  185. package/dist/src/init/compliance/types.d.ts +30 -27
  186. package/dist/src/init/compliance/types.d.ts.map +1 -1
  187. package/dist/src/init/repo/types.d.ts +11 -34
  188. package/dist/src/init/repo/types.d.ts.map +1 -1
  189. package/dist/src/init/research/src/config/types.d.ts +15 -82
  190. package/dist/src/init/research/src/config/types.d.ts.map +1 -1
  191. package/dist/src/init/research/types.d.ts +38 -93
  192. package/dist/src/init/research/types.d.ts.map +1 -1
  193. package/dist/src/init/team/types.d.ts +4 -42
  194. package/dist/src/init/team/types.d.ts.map +1 -1
  195. package/dist/src/integrations/jira/jira-token-provider.d.ts +93 -0
  196. package/dist/src/integrations/jira/jira-token-provider.d.ts.map +1 -0
  197. package/dist/src/integrations/jira/jira-token-provider.js +160 -0
  198. package/dist/src/integrations/jira/jira-token-provider.js.map +1 -0
  199. package/dist/src/sync/ado-reconciler.d.ts +92 -0
  200. package/dist/src/sync/ado-reconciler.d.ts.map +1 -0
  201. package/dist/src/sync/ado-reconciler.js +335 -0
  202. package/dist/src/sync/ado-reconciler.js.map +1 -0
  203. package/dist/src/sync/jira-reconciler.d.ts +106 -0
  204. package/dist/src/sync/jira-reconciler.d.ts.map +1 -0
  205. package/dist/src/sync/jira-reconciler.js +405 -0
  206. package/dist/src/sync/jira-reconciler.js.map +1 -0
  207. package/dist/src/types/dashboard-cache.d.ts +181 -0
  208. package/dist/src/types/dashboard-cache.d.ts.map +1 -0
  209. package/dist/src/types/dashboard-cache.js +65 -0
  210. package/dist/src/types/dashboard-cache.js.map +1 -0
  211. package/dist/src/types/model-selection.d.ts +6 -4
  212. package/dist/src/types/model-selection.d.ts.map +1 -1
  213. package/dist/src/types/model-selection.js +3 -1
  214. package/dist/src/types/model-selection.js.map +1 -1
  215. package/dist/src/utils/docs-validator.d.ts +131 -0
  216. package/dist/src/utils/docs-validator.d.ts.map +1 -0
  217. package/dist/src/utils/docs-validator.js +529 -0
  218. package/dist/src/utils/docs-validator.js.map +1 -0
  219. package/dist/src/utils/external-tool-drift-detector.d.ts +1 -1
  220. package/dist/src/utils/external-tool-drift-detector.d.ts.map +1 -1
  221. package/dist/src/utils/external-tool-drift-detector.js +5 -4
  222. package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
  223. package/dist/src/utils/feature-id-collision.js +1 -1
  224. package/dist/src/utils/feature-id-collision.js.map +1 -1
  225. package/dist/src/utils/feature-id-derivation.d.ts +8 -3
  226. package/dist/src/utils/feature-id-derivation.d.ts.map +1 -1
  227. package/dist/src/utils/feature-id-derivation.js +14 -6
  228. package/dist/src/utils/feature-id-derivation.js.map +1 -1
  229. package/dist/src/utils/html-to-mdx.d.ts +1 -0
  230. package/dist/src/utils/html-to-mdx.d.ts.map +1 -1
  231. package/dist/src/utils/html-to-mdx.js +43 -5
  232. package/dist/src/utils/html-to-mdx.js.map +1 -1
  233. package/dist/src/utils/model-selection.d.ts +3 -4
  234. package/dist/src/utils/model-selection.d.ts.map +1 -1
  235. package/dist/src/utils/model-selection.js +3 -4
  236. package/dist/src/utils/model-selection.js.map +1 -1
  237. package/package.json +1 -1
  238. package/plugins/specweave/agents/code-standards-detective/AGENT.md +48 -0
  239. package/plugins/specweave/agents/pm/AGENT.md +10 -7
  240. package/plugins/specweave/commands/specweave-archive-features.md +5 -7
  241. package/plugins/specweave/commands/specweave-archive.md +2 -1
  242. package/plugins/specweave/commands/specweave-costs.md +4 -4
  243. package/plugins/specweave/commands/specweave-do.md +44 -10
  244. package/plugins/specweave/commands/specweave-done.md +109 -0
  245. package/plugins/specweave/commands/specweave-import-external.md +45 -18
  246. package/plugins/specweave/commands/specweave-increment.md +331 -33
  247. package/plugins/specweave/commands/specweave-jobs.md +2 -2
  248. package/plugins/specweave/commands/specweave-progress.md +4 -4
  249. package/plugins/specweave/commands/specweave-restore-feature.md +5 -4
  250. package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
  251. package/plugins/specweave/commands/specweave-sync-specs.md +216 -322
  252. package/plugins/specweave/commands/specweave-validate-features.md +13 -8
  253. package/plugins/specweave/commands/specweave-validate.md +27 -1
  254. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  255. package/plugins/specweave/hooks/hooks.json +43 -4
  256. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  257. package/plugins/specweave/hooks/lib/common-setup.sh +375 -0
  258. package/plugins/specweave/hooks/lib/crash-prevention.sh +336 -0
  259. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  260. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  261. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  262. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  263. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  264. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  265. package/plugins/specweave/hooks/post-task-completion.sh +4 -23
  266. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  267. package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -6
  268. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  269. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  270. package/plugins/specweave/hooks/pre-task-completion.sh +8 -37
  271. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  272. package/plugins/specweave/hooks/pre-tool-use.sh +2 -11
  273. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  274. package/plugins/specweave/hooks/spec-project-validator.sh +80 -25
  275. package/plugins/specweave/hooks/universal/dispatcher.mjs +135 -42
  276. package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
  277. package/plugins/specweave/hooks/user-prompt-submit.sh +140 -38
  278. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  279. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +12 -0
  280. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +89 -0
  281. package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +211 -0
  282. package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +163 -0
  283. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +26 -28
  284. package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +50 -0
  285. package/plugins/specweave/hooks/v2/guards/increment-duplicate-guard.sh +135 -0
  286. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +2 -2
  287. package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
  288. package/plugins/specweave/scripts/README.md +166 -0
  289. package/plugins/specweave/scripts/cleanup-state.sh +142 -0
  290. package/plugins/specweave/scripts/force-kill.sh +142 -0
  291. package/plugins/specweave/scripts/jobs.js +171 -0
  292. package/plugins/specweave/scripts/progress.js +170 -0
  293. package/plugins/specweave/scripts/read-costs.sh +132 -0
  294. package/plugins/specweave/scripts/read-jobs.sh +324 -0
  295. package/plugins/specweave/scripts/read-progress.sh +185 -0
  296. package/plugins/specweave/scripts/read-status.sh +146 -0
  297. package/plugins/specweave/scripts/read-workflow.sh +173 -0
  298. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +327 -0
  299. package/plugins/specweave/scripts/session-watchdog.sh +192 -0
  300. package/plugins/specweave/scripts/status.js +154 -0
  301. package/plugins/specweave/scripts/update-dashboard-cache.sh +281 -0
  302. package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +58 -6
  303. package/plugins/specweave/skills/increment-planner/SKILL.md +388 -48
  304. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -7
  305. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -1
  306. package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +1 -1
  307. package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +1 -1
  308. package/plugins/specweave/skills/instant-status/SKILL.md +70 -0
  309. package/plugins/specweave-ado/commands/cleanup-duplicates.md +212 -0
  310. package/plugins/specweave-ado/commands/reconcile.md +120 -0
  311. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  312. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  313. package/plugins/specweave-ado/lib/ado-duplicate-detector.js +279 -0
  314. package/plugins/specweave-ado/lib/ado-duplicate-detector.ts +407 -0
  315. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  316. package/plugins/specweave-docs/commands/build.md +32 -4
  317. package/plugins/specweave-docs/commands/preview.md +43 -1
  318. package/plugins/specweave-docs/commands/validate.md +250 -0
  319. package/plugins/specweave-github/agents/github-manager/AGENT.md +2 -2
  320. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1262 -0
  321. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  322. package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
  323. package/plugins/specweave-infrastructure/skills/hetzner-provisioner/README.md +1 -1
  324. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +1 -1
  325. package/plugins/specweave-jira/agents/jira-multi-project-mapper/AGENT.md +530 -0
  326. package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +438 -0
  327. package/plugins/specweave-jira/commands/cleanup-duplicates.md +219 -0
  328. package/plugins/specweave-jira/commands/close.md +297 -0
  329. package/plugins/specweave-jira/commands/create.md +198 -0
  330. package/plugins/specweave-jira/commands/reconcile.md +123 -0
  331. package/plugins/specweave-jira/commands/status.md +215 -0
  332. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  333. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
  334. package/plugins/specweave-jira/lib/jira-duplicate-detector.js +296 -0
  335. package/plugins/specweave-jira/lib/jira-duplicate-detector.ts +434 -0
  336. package/plugins/specweave-jira/lib/jira-permission-gate.js +160 -0
  337. package/plugins/specweave-jira/lib/jira-permission-gate.ts +276 -0
  338. package/plugins/specweave-jira/lib/jira-profile-resolver.js +222 -0
  339. package/plugins/specweave-jira/lib/jira-profile-resolver.ts +427 -0
  340. package/plugins/specweave-jira/reference/jira-specweave-mapping.md +16 -11
  341. package/plugins/specweave-release/commands/specweave-release-npm.md +140 -14
  342. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -0
  343. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
  344. package/plugins/specweave/hooks/post-edit-spec.sh +0 -265
  345. package/plugins/specweave/hooks/post-write-spec.sh +0 -267
  346. package/plugins/specweave/hooks/pre-edit-spec.sh +0 -151
  347. package/plugins/specweave/hooks/pre-write-spec.sh +0 -151
@@ -0,0 +1,482 @@
1
+ /**
2
+ * Organization Synthesizer
3
+ *
4
+ * Clusters repos into teams, microservices, and domains
5
+ * using LLM analysis and external specs from Jira/ADO.
6
+ *
7
+ * Supports 1-level (project/) and 2-level (project/board/) folder structures
8
+ * matching the specs structure detected by structure-level-detector.
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { glob } from 'glob';
13
+ import { extractJson, buildJsonPrompt } from '../../../utils/llm-json-extractor.js';
14
+ import { detectStructureLevel } from '../../../utils/structure-level-detector.js';
15
+ export async function synthesizeOrganization(repoAnalyses, projectPath, llmProvider, onProgress, log) {
16
+ log('PHASE C: Organization Synthesis');
17
+ onProgress('org-synthesis', 0, 100, 'Loading external specs');
18
+ // Load external specs from Jira/ADO imports
19
+ const externalSpecs = await loadExternalSpecs(projectPath);
20
+ log(` Loaded ${externalSpecs.length} external spec files`);
21
+ // Detect structure level for team organization
22
+ const structureConfig = detectStructureLevel(projectPath);
23
+ log(` Structure level: ${structureConfig.level}-level (${structureConfig.detectionReason})`);
24
+ // Fetch teams from external tools (ADO/JIRA)
25
+ onProgress('org-synthesis', 10, 100, 'Fetching external teams');
26
+ const externalTeams = await fetchExternalTeams(projectPath, log);
27
+ const externalEnhancedTeams = convertExternalTeamsToEnhanced(externalTeams, structureConfig);
28
+ if (externalTeams.length > 0) {
29
+ log(` Imported ${externalTeams.length} teams from external tools`);
30
+ }
31
+ onProgress('org-synthesis', 20, 100, 'Building repo summaries');
32
+ // Build summaries for LLM
33
+ const repoSummaries = buildRepoSummaries(repoAnalyses);
34
+ log(` Built summaries for ${repoAnalyses.size} repos`);
35
+ // If we have external teams and no LLM, use external teams directly
36
+ if (!llmProvider && externalTeams.length > 0) {
37
+ log(' No LLM provider, using external teams');
38
+ return createExternalTeamsOnlyResult(externalEnhancedTeams);
39
+ }
40
+ if (!llmProvider) {
41
+ log(' No LLM provider, using basic clustering');
42
+ return createBasicClustering(repoAnalyses, projectPath);
43
+ }
44
+ onProgress('org-synthesis', 40, 100, 'LLM clustering analysis');
45
+ // Build LLM prompt (include external teams context)
46
+ const externalTeamsContext = externalTeams.length > 0
47
+ ? `\n\nExternal teams from ADO/JIRA:\n${externalTeams.map(t => `- ${t.name}: ${t.description || 'No description'}`).join('\n')}`
48
+ : '';
49
+ const prompt = buildClusteringPrompt(repoSummaries, externalSpecs, externalTeamsContext);
50
+ log(' Sending to LLM for organization analysis...');
51
+ try {
52
+ const result = await llmProvider.analyze(prompt);
53
+ if (!result || !result.content) {
54
+ log(' LLM returned empty, using external teams or basic clustering');
55
+ return externalTeams.length > 0
56
+ ? createExternalTeamsOnlyResult(externalEnhancedTeams)
57
+ : createBasicClustering(repoAnalyses, projectPath);
58
+ }
59
+ const extraction = extractJson(result.content, { requiredFields: ['teams'] });
60
+ if (extraction.success && extraction.data) {
61
+ log(' LLM clustering successful');
62
+ onProgress('org-synthesis', 80, 100, 'Processing results');
63
+ // Merge LLM teams with external teams
64
+ const llmResult = convertLLMResponse(extraction.data, projectPath);
65
+ // Add external teams that aren't already covered by LLM
66
+ const llmTeamNames = new Set(llmResult.enhancedTeams.map(t => t.name.toLowerCase()));
67
+ const uniqueExternalTeams = externalEnhancedTeams.filter(et => !llmTeamNames.has(et.name.toLowerCase()));
68
+ if (uniqueExternalTeams.length > 0) {
69
+ llmResult.enhancedTeams.push(...uniqueExternalTeams);
70
+ log(` Merged ${uniqueExternalTeams.length} external teams`);
71
+ }
72
+ return llmResult;
73
+ }
74
+ log(` JSON extraction failed: ${extraction.error}`);
75
+ return externalTeams.length > 0
76
+ ? createExternalTeamsOnlyResult(externalEnhancedTeams)
77
+ : createBasicClustering(repoAnalyses, projectPath);
78
+ }
79
+ catch (err) {
80
+ log(` LLM error: ${err.message}`);
81
+ return externalTeams.length > 0
82
+ ? createExternalTeamsOnlyResult(externalEnhancedTeams)
83
+ : createBasicClustering(repoAnalyses, projectPath);
84
+ }
85
+ }
86
+ /**
87
+ * Create result with only external teams (no LLM clustering)
88
+ */
89
+ function createExternalTeamsOnlyResult(enhancedTeams) {
90
+ const teams = enhancedTeams.map(t => ({
91
+ name: t.name,
92
+ type: 'team',
93
+ description: t.description,
94
+ repos: t.repos,
95
+ confidence: 'high',
96
+ reasoning: t.reasoning
97
+ }));
98
+ return {
99
+ teams,
100
+ enhancedTeams,
101
+ microservices: [],
102
+ domains: [],
103
+ crossCutting: [],
104
+ hypotheses: ['Teams imported from external tool - repo associations not automatic'],
105
+ confidence: 'medium'
106
+ };
107
+ }
108
+ async function loadExternalSpecs(projectPath) {
109
+ const specsPath = path.join(projectPath, '.specweave/docs/internal/specs');
110
+ if (!fs.existsSync(specsPath))
111
+ return [];
112
+ try {
113
+ const files = await glob('**/*.md', { cwd: specsPath, nodir: true });
114
+ const summaries = [];
115
+ for (const file of files.slice(0, 20)) {
116
+ try {
117
+ const content = fs.readFileSync(path.join(specsPath, file), 'utf-8');
118
+ const titleMatch = content.match(/^#\s+(.+)/m);
119
+ if (titleMatch)
120
+ summaries.push(`${file}: ${titleMatch[1]}`);
121
+ }
122
+ catch { /* skip */ }
123
+ }
124
+ return summaries;
125
+ }
126
+ catch {
127
+ return [];
128
+ }
129
+ }
130
+ /**
131
+ * Fetch teams from external tools (ADO/JIRA) when sync is configured
132
+ *
133
+ * Uses dynamic imports to avoid initialization errors when external tools aren't configured.
134
+ */
135
+ async function fetchExternalTeams(projectPath, log) {
136
+ const externalTeams = [];
137
+ const configPath = path.join(projectPath, '.specweave/config.json');
138
+ if (!fs.existsSync(configPath)) {
139
+ return externalTeams;
140
+ }
141
+ let config;
142
+ try {
143
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
144
+ }
145
+ catch {
146
+ log(' Could not parse config.json for external teams');
147
+ return externalTeams;
148
+ }
149
+ // Check for ADO sync profiles
150
+ const profiles = config.sync?.profiles || {};
151
+ for (const [profileName, profile] of Object.entries(profiles)) {
152
+ const p = profile;
153
+ if (p.provider !== 'ado')
154
+ continue;
155
+ const adoProject = p.config?.project;
156
+ const organization = p.config?.organization;
157
+ if (!adoProject || !organization) {
158
+ log(` ADO profile ${profileName} missing project/organization`);
159
+ continue;
160
+ }
161
+ try {
162
+ // Dynamic import to avoid initialization errors
163
+ const { AdoClient } = await import('../../../integrations/ado/ado-client.js');
164
+ const { getAdoPat } = await import('../../../integrations/ado/ado-pat-provider.js');
165
+ const pat = getAdoPat(organization);
166
+ if (!pat) {
167
+ log(` No ADO PAT available for organization: ${organization}`);
168
+ continue;
169
+ }
170
+ const adoClient = new AdoClient({ pat, organization, project: adoProject });
171
+ const teams = await adoClient.getTeams(adoProject);
172
+ log(` Fetched ${teams.length} teams from ADO project: ${adoProject}`);
173
+ for (const team of teams) {
174
+ externalTeams.push({
175
+ id: team.id || team.name,
176
+ name: team.name,
177
+ description: team.description,
178
+ url: team.url || `https://dev.azure.com/${organization}/${adoProject}/_settings/teams/${team.name}`,
179
+ projectId: adoProject,
180
+ provider: 'ado'
181
+ });
182
+ }
183
+ }
184
+ catch (err) {
185
+ log(` Failed to fetch ADO teams from ${profileName}: ${err.message}`);
186
+ }
187
+ }
188
+ // JIRA Teams API requires organization ID which isn't typically configured
189
+ // Implementation note: JIRA Teams are org-level, not project-level
190
+ // Future enhancement: Add JIRA teams via https://api.atlassian.com/public/teams/v1/org/{orgId}/teams
191
+ return externalTeams;
192
+ }
193
+ /**
194
+ * Convert external teams to EnhancedTeam format
195
+ */
196
+ function convertExternalTeamsToEnhanced(externalTeams, structureConfig) {
197
+ return externalTeams.map(et => ({
198
+ name: et.name,
199
+ description: et.description || `Team from ${et.provider === 'ado' ? 'Azure DevOps' : 'Jira'}`,
200
+ responsibilities: ['Manage associated repositories and work items'],
201
+ domainExpertise: [],
202
+ techStack: [],
203
+ repos: [], // External teams don't have direct repo mapping
204
+ reasoning: `Team imported from ${et.provider === 'ado' ? 'Azure DevOps' : 'Jira'}`,
205
+ project: et.projectId ? normalizeId(et.projectId) : structureConfig.projects[0]?.id,
206
+ externalId: et.id,
207
+ externalUrl: et.url,
208
+ externalProvider: et.provider
209
+ }));
210
+ }
211
+ /**
212
+ * Normalize ID to kebab-case for folder names
213
+ */
214
+ function normalizeId(name) {
215
+ return name
216
+ .toLowerCase()
217
+ .replace(/\s+/g, '-')
218
+ .replace(/[^a-z0-9-]/g, '')
219
+ .replace(/-+/g, '-')
220
+ .replace(/^-|-$/g, '');
221
+ }
222
+ function buildRepoSummaries(analyses) {
223
+ const lines = [];
224
+ for (const [name, analysis] of analyses) {
225
+ lines.push(`## ${name}`);
226
+ lines.push(`Purpose: ${analysis.purpose}`);
227
+ if (analysis.keyConcepts.length > 0)
228
+ lines.push(`Concepts: ${analysis.keyConcepts.join(', ')}`);
229
+ if (analysis.patternsUsed.length > 0)
230
+ lines.push(`Patterns: ${analysis.patternsUsed.map(p => p.pattern).join(', ')}`);
231
+ lines.push('');
232
+ }
233
+ return lines.join('\n');
234
+ }
235
+ function buildClusteringPrompt(repoSummaries, externalSpecs, externalTeamsContext = '') {
236
+ const schema = {
237
+ teams: '[{name, description, responsibilities:[], domainExpertise:[], techStack:[], repos:[], reasoning, integrationBoundaries?}, ...]',
238
+ microservices: '[{name, description, repos:[], reasoning}, ...]',
239
+ domains: '[{name, description, repos:[], reasoning}, ...]',
240
+ crossCutting: '[{name, description, repos:[], reasoning}, ...]',
241
+ hypotheses: '["uncertainty1", ...]',
242
+ };
243
+ const specsContext = externalSpecs.length > 0 ? `\n\nExternal project info (from Jira/ADO):\n${externalSpecs.join('\n')}` : '';
244
+ const context = `Analyze these repositories to understand organization structure.
245
+
246
+ For each TEAM, provide comprehensive documentation:
247
+ - name: Team name (e.g., "AssetCare Team", "CDP Platform Team")
248
+ - description: 2-3 sentence summary of what this team does
249
+ - responsibilities: Array of 3-5 bullet points defining what the team owns and maintains
250
+ - domainExpertise: Array of technical competencies (e.g., "FHIR integration", "Angular development", "Azure Functions")
251
+ - techStack: Array of primary technologies used across team repos
252
+ - repos: List of repository names belonging to this team
253
+ - reasoning: Brief explanation of why these repos were grouped together
254
+ - integrationBoundaries: (optional) Description of upstream/downstream dependencies
255
+
256
+ Repositories to analyze:
257
+ ${repoSummaries}${specsContext}${externalTeamsContext}
258
+
259
+ Group by:
260
+ 1. Teams (likely ownership with rich metadata)
261
+ 2. Microservices (service boundaries)
262
+ 3. Domains (business areas)
263
+ 4. Cross-cutting (shared infra)
264
+
265
+ Note any uncertainties in hypotheses.`;
266
+ return buildJsonPrompt(context, schema, 'Cluster these repositories with detailed team information.');
267
+ }
268
+ function convertLLMResponse(response, projectPath) {
269
+ const structureConfig = detectStructureLevel(projectPath);
270
+ const convert = (items, type) => (items || []).map(item => ({
271
+ name: item.name, type, description: item.description || '',
272
+ repos: item.repos || [], confidence: 'medium', reasoning: item.reasoning || '',
273
+ }));
274
+ // Convert enhanced teams with all fields and project context
275
+ const defaultProject = structureConfig.projects[0]?.id || 'default';
276
+ const enhancedTeams = (response.teams || []).map(team => ({
277
+ name: team.name || 'Unknown Team',
278
+ description: team.description || '',
279
+ responsibilities: team.responsibilities || [],
280
+ domainExpertise: team.domainExpertise || [],
281
+ techStack: team.techStack || [],
282
+ repos: team.repos || [],
283
+ reasoning: team.reasoning || '',
284
+ integrationBoundaries: team.integrationBoundaries,
285
+ project: defaultProject, // Set default project for LLM-derived teams
286
+ }));
287
+ return {
288
+ teams: convert(response.teams, 'team'),
289
+ enhancedTeams,
290
+ microservices: convert(response.microservices, 'microservice'),
291
+ domains: convert(response.domains, 'domain'),
292
+ crossCutting: convert(response.crossCutting, 'domain'),
293
+ hypotheses: response.hypotheses || [],
294
+ confidence: 'medium',
295
+ };
296
+ }
297
+ function createBasicClustering(analyses, projectPath) {
298
+ const structureConfig = detectStructureLevel(projectPath);
299
+ const defaultProject = structureConfig.projects[0]?.id || 'default';
300
+ // Basic clustering by naming conventions
301
+ const teamMap = new Map();
302
+ for (const [name] of analyses) {
303
+ const prefixMatch = name.match(/^([a-z]+)-/i);
304
+ const team = prefixMatch ? prefixMatch[1] : 'other';
305
+ if (!teamMap.has(team))
306
+ teamMap.set(team, []);
307
+ teamMap.get(team).push(name);
308
+ }
309
+ const teams = [];
310
+ const enhancedTeams = [];
311
+ for (const [team, repos] of teamMap) {
312
+ const teamName = `${team}-team`;
313
+ teams.push({
314
+ name: teamName,
315
+ type: 'team',
316
+ description: `Repos with ${team}- prefix`,
317
+ repos,
318
+ confidence: 'low',
319
+ reasoning: 'Grouped by naming convention'
320
+ });
321
+ // Create basic enhanced team (without LLM-derived fields)
322
+ enhancedTeams.push({
323
+ name: teamName,
324
+ description: `Repositories grouped by ${team}- naming prefix.`,
325
+ responsibilities: ['Maintain repositories with this prefix'],
326
+ domainExpertise: ['General development'],
327
+ techStack: ['TypeScript'], // Default
328
+ repos,
329
+ reasoning: 'Grouped by naming convention - LLM analysis recommended for accurate details',
330
+ project: defaultProject, // Set default project for basic clustering
331
+ });
332
+ }
333
+ return {
334
+ teams,
335
+ enhancedTeams,
336
+ microservices: [],
337
+ domains: [],
338
+ crossCutting: [],
339
+ hypotheses: ['Basic clustering by naming only - LLM analysis recommended'],
340
+ confidence: 'low'
341
+ };
342
+ }
343
+ /**
344
+ * Get the team folder path based on structure level configuration
345
+ *
346
+ * 1-level: organization/teams/{project}/
347
+ * 2-level: organization/teams/{project}/{board}/
348
+ */
349
+ function getTeamFolderPath(basePath, team, structureConfig) {
350
+ const teamsBasePath = path.join(basePath, 'teams');
351
+ // Determine project ID
352
+ const projectId = team.project
353
+ || structureConfig.projects[0]?.id
354
+ || 'default';
355
+ if (structureConfig.level === 2) {
356
+ // 2-level: teams/{project}/{board}/
357
+ const boardId = team.board
358
+ || (structureConfig.boardsByProject?.[projectId]?.[0]?.id)
359
+ || 'general';
360
+ return path.join(teamsBasePath, projectId, boardId);
361
+ }
362
+ // 1-level: teams/{project}/
363
+ return path.join(teamsBasePath, projectId);
364
+ }
365
+ /**
366
+ * Generate team markdown content with external links support
367
+ */
368
+ function generateTeamMarkdown(team) {
369
+ const sections = [
370
+ `# ${team.name}`,
371
+ '',
372
+ team.description,
373
+ ''
374
+ ];
375
+ // External links section (if available)
376
+ if (team.externalUrl) {
377
+ sections.push('## External Links', '', `- [View in ${team.externalProvider === 'ado' ? 'Azure DevOps' : team.externalProvider === 'jira' ? 'Jira' : team.externalProvider}](${team.externalUrl})`, '');
378
+ }
379
+ // Responsibilities
380
+ sections.push('## Responsibilities', '', ...(team.responsibilities.length > 0
381
+ ? team.responsibilities.map(r => `- ${r}`)
382
+ : ['- TBD']), '');
383
+ // Domain Expertise
384
+ sections.push('## Domain Expertise', '', ...(team.domainExpertise.length > 0
385
+ ? team.domainExpertise.map(e => `- ${e}`)
386
+ : ['- General development']), '');
387
+ // Technology Stack
388
+ sections.push('## Technology Stack', '', ...(team.techStack.length > 0
389
+ ? team.techStack.map(t => `- ${t}`)
390
+ : ['- TypeScript']), '');
391
+ // Repositories (adjust relative path based on depth)
392
+ const modulesRelPath = team.board ? '../../../../modules' : '../../../modules';
393
+ sections.push('## Repositories', '', ...team.repos.map(r => `- [${r}](${modulesRelPath}/${r}.md)`), '');
394
+ // Integration Boundaries
395
+ sections.push('## Integration Boundaries', '', team.integrationBoundaries || 'Integration boundaries to be documented.', '');
396
+ // Footer
397
+ sections.push('---', `*Clustering reasoning: ${team.reasoning}*`, `*Generated on ${new Date().toISOString().split('T')[0]}*`);
398
+ return sections.join('\n');
399
+ }
400
+ /**
401
+ * Generate index.md for a team folder (project or board level)
402
+ */
403
+ function generateTeamIndexMarkdown(folderName, teams, level) {
404
+ const title = level === 'project'
405
+ ? `# ${folderName} Teams`
406
+ : `# ${folderName} Board Teams`;
407
+ const sections = [
408
+ title,
409
+ '',
410
+ `*${teams.length} teams in this ${level}*`,
411
+ '',
412
+ '## Teams',
413
+ '',
414
+ ...teams.map(t => `- [${t.name}](./${t.name.toLowerCase().replace(/\s+/g, '-')}.md)`),
415
+ '',
416
+ '---',
417
+ `*Generated on ${new Date().toISOString().split('T')[0]}*`
418
+ ];
419
+ return sections.join('\n');
420
+ }
421
+ export async function saveOrganizationStructure(projectPath, result, repoAnalyses) {
422
+ const savedFiles = [];
423
+ const orgPath = path.join(projectPath, '.specweave/docs/internal/organization');
424
+ fs.mkdirSync(orgPath, { recursive: true });
425
+ // Detect structure level for team organization
426
+ const structureConfig = detectStructureLevel(projectPath);
427
+ // Overview
428
+ const overviewLines = [
429
+ '# Organization Overview',
430
+ '',
431
+ `*Generated ${new Date().toISOString().split('T')[0]} | Confidence: ${result.confidence}*`,
432
+ '',
433
+ `## Summary`,
434
+ '',
435
+ `- **Teams**: ${result.teams.length}`,
436
+ `- **Microservices**: ${result.microservices.length}`,
437
+ `- **Domains**: ${result.domains.length}`,
438
+ `- **Repositories**: ${repoAnalyses.size}`,
439
+ `- **Structure Level**: ${structureConfig.level}-level (${structureConfig.detectionReason})`,
440
+ ''
441
+ ];
442
+ if (result.hypotheses.length > 0) {
443
+ overviewLines.push('## Uncertainties', '', ...result.hypotheses.map(h => `- ${h}`), '');
444
+ }
445
+ fs.writeFileSync(path.join(orgPath, 'overview.md'), overviewLines.join('\n'));
446
+ savedFiles.push(path.join(orgPath, 'overview.md'));
447
+ // Teams - use enhancedTeams for rich documentation with structure-level-aware folders
448
+ if (result.enhancedTeams.length > 0) {
449
+ // Group teams by their target folder
450
+ const teamsByFolder = new Map();
451
+ for (const team of result.enhancedTeams) {
452
+ const folderPath = getTeamFolderPath(orgPath, team, structureConfig);
453
+ if (!teamsByFolder.has(folderPath)) {
454
+ teamsByFolder.set(folderPath, []);
455
+ }
456
+ teamsByFolder.get(folderPath).push(team);
457
+ }
458
+ // Create folders and write team files
459
+ for (const [folderPath, teams] of teamsByFolder) {
460
+ fs.mkdirSync(folderPath, { recursive: true });
461
+ // Create index.md for this folder
462
+ const relativePath = path.relative(path.join(orgPath, 'teams'), folderPath);
463
+ const parts = relativePath.split(path.sep).filter(p => p);
464
+ const folderName = parts[parts.length - 1] || 'Teams';
465
+ const indexLevel = structureConfig.level === 2 && parts.length > 1 ? 'board' : 'project';
466
+ const indexContent = generateTeamIndexMarkdown(folderName, teams, indexLevel);
467
+ const indexPath = path.join(folderPath, 'index.md');
468
+ fs.writeFileSync(indexPath, indexContent);
469
+ savedFiles.push(indexPath);
470
+ // Write individual team files
471
+ for (const team of teams) {
472
+ const content = generateTeamMarkdown(team);
473
+ const fileName = `${team.name.toLowerCase().replace(/\s+/g, '-')}.md`;
474
+ const filePath = path.join(folderPath, fileName);
475
+ fs.writeFileSync(filePath, content);
476
+ savedFiles.push(filePath);
477
+ }
478
+ }
479
+ }
480
+ return savedFiles;
481
+ }
482
+ //# sourceMappingURL=organization-synthesizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization-synthesizer.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/organization-synthesizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Strategy Generator
3
+ *
4
+ * Extracts strategic insights from codebase analysis:
5
+ * - Tech debt catalog
6
+ * - Business domain mapping
7
+ * - Modernization candidates
8
+ */
9
+ import type { RepoAnalysis, TechDebtItem, LLMProvider, ProgressCallback } from './types.js';
10
+ import type { OrganizationSynthesisResult } from './organization-synthesizer.js';
11
+ import type { InconsistencyResult } from './inconsistency-detector.js';
12
+ export interface StrategyResult {
13
+ techDebtCatalog: TechDebtItem[];
14
+ domainMap: DomainMapping[];
15
+ modernizationCandidates: ModernizationCandidate[];
16
+ recommendations: StrategicRecommendation[];
17
+ }
18
+ export interface DomainMapping {
19
+ domain: string;
20
+ description: string;
21
+ repos: string[];
22
+ healthScore: number;
23
+ concerns: string[];
24
+ }
25
+ export interface ModernizationCandidate {
26
+ repo: string;
27
+ reason: string;
28
+ priority: 'high' | 'medium' | 'low';
29
+ suggestedApproach: string;
30
+ estimatedEffort: 'small' | 'medium' | 'large';
31
+ }
32
+ export interface StrategicRecommendation {
33
+ id: string;
34
+ title: string;
35
+ description: string;
36
+ impact: 'high' | 'medium' | 'low';
37
+ effort: 'small' | 'medium' | 'large';
38
+ category: 'architecture' | 'process' | 'tooling' | 'team';
39
+ }
40
+ export declare function generateStrategy(repoAnalyses: Map<string, RepoAnalysis>, orgResult: OrganizationSynthesisResult, inconsistencyResult: InconsistencyResult, llmProvider: LLMProvider | null, onProgress: ProgressCallback, log: (msg: string) => void): Promise<StrategyResult>;
41
+ export declare function saveStrategy(projectPath: string, result: StrategyResult): Promise<string[]>;
42
+ //# sourceMappingURL=strategy-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-generator.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/strategy-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;IAClD,eAAe,EAAE,uBAAuB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CAC3D;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,SAAS,EAAE,2BAA2B,EACtC,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAoQD,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAuInB"}