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
@@ -46,21 +46,18 @@ export interface RepositoryMetadata {
46
46
  * Zod schemas
47
47
  */
48
48
  export declare const RepositorySelectionRuleSchema: z.ZodObject<{
49
- type: z.ZodEnum<["all", "prefix", "owner", "keyword", "combined", "manual"]>;
49
+ type: z.ZodEnum<{
50
+ manual: "manual";
51
+ all: "all";
52
+ keyword: "keyword";
53
+ owner: "owner";
54
+ prefix: "prefix";
55
+ combined: "combined";
56
+ }>;
50
57
  pattern: z.ZodOptional<z.ZodString>;
51
58
  owner: z.ZodOptional<z.ZodString>;
52
- excludePatterns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
53
- }, "strip", z.ZodTypeAny, {
54
- type?: "manual" | "all" | "keyword" | "owner" | "prefix" | "combined";
55
- pattern?: string;
56
- owner?: string;
57
- excludePatterns?: string[];
58
- }, {
59
- type?: "manual" | "all" | "keyword" | "owner" | "prefix" | "combined";
60
- pattern?: string;
61
- owner?: string;
62
- excludePatterns?: string[];
63
- }>;
59
+ excludePatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
60
+ }, z.core.$strip>;
64
61
  export declare const RepositoryMetadataSchema: z.ZodObject<{
65
62
  name: z.ZodString;
66
63
  url: z.ZodString;
@@ -71,25 +68,5 @@ export declare const RepositoryMetadataSchema: z.ZodObject<{
71
68
  lastUpdated: z.ZodDate;
72
69
  private: z.ZodOptional<z.ZodBoolean>;
73
70
  defaultBranch: z.ZodOptional<z.ZodString>;
74
- }, "strip", z.ZodTypeAny, {
75
- name?: string;
76
- description?: string;
77
- language?: string;
78
- owner?: string;
79
- url?: string;
80
- lastUpdated?: Date;
81
- private?: boolean;
82
- stars?: number;
83
- defaultBranch?: string;
84
- }, {
85
- name?: string;
86
- description?: string;
87
- language?: string;
88
- owner?: string;
89
- url?: string;
90
- lastUpdated?: Date;
91
- private?: boolean;
92
- stars?: number;
93
- defaultBranch?: string;
94
- }>;
71
+ }, z.core.$strip>;
95
72
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/repo/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,QAAQ,GACR,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,qBAAqB;IACrB,IAAI,EAAE,aAAa,CAAC;IAEpB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yBAAyB;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IAEb,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IAEZ,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,WAAW,EAAE,IAAI,CAAC;IAElB,iBAAiB;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;EAKxC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUnC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/repo/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,QAAQ,GACR,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,qBAAqB;IACrB,IAAI,EAAE,aAAa,CAAC;IAEpB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yBAAyB;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IAEb,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IAEZ,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,WAAW,EAAE,IAAI,CAAC;IAElB,iBAAiB;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;iBAKxC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;iBAUnC,CAAC"}
@@ -4,99 +4,32 @@
4
4
  import { z } from 'zod';
5
5
  export declare const ResearchConfigSchema: z.ZodOptional<z.ZodObject<{
6
6
  vision: z.ZodOptional<z.ZodAny>;
7
- compliance: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
8
- teams: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
9
- repositories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
7
+ compliance: z.ZodOptional<z.ZodArray<z.ZodAny>>;
8
+ teams: z.ZodOptional<z.ZodArray<z.ZodAny>>;
9
+ repositories: z.ZodOptional<z.ZodArray<z.ZodString>>;
10
10
  architecture: z.ZodOptional<z.ZodAny>;
11
- }, "strip", z.ZodTypeAny, {
12
- architecture?: any;
13
- teams?: any[];
14
- repositories?: string[];
15
- vision?: any;
16
- compliance?: any[];
17
- }, {
18
- architecture?: any;
19
- teams?: any[];
20
- repositories?: string[];
21
- vision?: any;
22
- compliance?: any[];
23
- }>>;
11
+ }, z.core.$strip>>;
24
12
  export declare const SpecWeaveConfigSchema: z.ZodObject<{
25
13
  version: z.ZodString;
26
14
  project: z.ZodObject<{
27
15
  name: z.ZodString;
28
- type: z.ZodEnum<["single", "multi"]>;
29
- }, "strip", z.ZodTypeAny, {
30
- name?: string;
31
- type?: "single" | "multi";
32
- }, {
33
- name?: string;
34
- type?: "single" | "multi";
35
- }>;
16
+ type: z.ZodEnum<{
17
+ single: "single";
18
+ multi: "multi";
19
+ }>;
20
+ }, z.core.$strip>;
36
21
  research: z.ZodOptional<z.ZodObject<{
37
22
  vision: z.ZodOptional<z.ZodAny>;
38
- compliance: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
39
- teams: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
40
- repositories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
23
+ compliance: z.ZodOptional<z.ZodArray<z.ZodAny>>;
24
+ teams: z.ZodOptional<z.ZodArray<z.ZodAny>>;
25
+ repositories: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
26
  architecture: z.ZodOptional<z.ZodAny>;
42
- }, "strip", z.ZodTypeAny, {
43
- architecture?: any;
44
- teams?: any[];
45
- repositories?: string[];
46
- vision?: any;
47
- compliance?: any[];
48
- }, {
49
- architecture?: any;
50
- teams?: any[];
51
- repositories?: string[];
52
- vision?: any;
53
- compliance?: any[];
54
- }>>;
27
+ }, z.core.$strip>>;
55
28
  livingDocs: z.ZodOptional<z.ZodObject<{
56
29
  enabled: z.ZodBoolean;
57
30
  baseDir: z.ZodString;
58
- }, "strip", z.ZodTypeAny, {
59
- enabled?: boolean;
60
- baseDir?: string;
61
- }, {
62
- enabled?: boolean;
63
- baseDir?: string;
64
- }>>;
65
- }, "strip", z.ZodTypeAny, {
66
- version?: string;
67
- project?: {
68
- name?: string;
69
- type?: "single" | "multi";
70
- };
71
- livingDocs?: {
72
- enabled?: boolean;
73
- baseDir?: string;
74
- };
75
- research?: {
76
- architecture?: any;
77
- teams?: any[];
78
- repositories?: string[];
79
- vision?: any;
80
- compliance?: any[];
81
- };
82
- }, {
83
- version?: string;
84
- project?: {
85
- name?: string;
86
- type?: "single" | "multi";
87
- };
88
- livingDocs?: {
89
- enabled?: boolean;
90
- baseDir?: string;
91
- };
92
- research?: {
93
- architecture?: any;
94
- teams?: any[];
95
- repositories?: string[];
96
- vision?: any;
97
- compliance?: any[];
98
- };
99
- }>;
31
+ }, z.core.$strip>>;
32
+ }, z.core.$strip>;
100
33
  export type ResearchConfig = z.infer<typeof ResearchConfigSchema>;
101
34
  export type SpecWeaveConfig = z.infer<typeof SpecWeaveConfigSchema>;
102
35
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;GAMpB,CAAC;AAEd,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWhC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;kBAMpB,CAAC;AAEd,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;iBAWhC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -65,119 +65,64 @@ export interface VisionInsights {
65
65
  * Zod schema for VisionInsights validation
66
66
  */
67
67
  export declare const VisionInsightsSchema: z.ZodObject<{
68
- keywords: z.ZodArray<z.ZodString, "many">;
69
- market: z.ZodEnum<["productivity-saas", "healthcare", "fintech", "e-commerce", "education", "gaming", "social-network", "enterprise-b2b", "consumer-b2c", "marketplace", "iot", "blockchain", "ai-ml", "unknown"]>;
68
+ keywords: z.ZodArray<z.ZodString>;
69
+ market: z.ZodEnum<{
70
+ unknown: "unknown";
71
+ healthcare: "healthcare";
72
+ fintech: "fintech";
73
+ education: "education";
74
+ iot: "iot";
75
+ gaming: "gaming";
76
+ marketplace: "marketplace";
77
+ "productivity-saas": "productivity-saas";
78
+ "e-commerce": "e-commerce";
79
+ "social-network": "social-network";
80
+ "enterprise-b2b": "enterprise-b2b";
81
+ "consumer-b2c": "consumer-b2c";
82
+ blockchain: "blockchain";
83
+ "ai-ml": "ai-ml";
84
+ }>;
70
85
  competitors: z.ZodArray<z.ZodObject<{
71
86
  name: z.ZodString;
72
87
  url: z.ZodOptional<z.ZodString>;
73
- strengths: z.ZodArray<z.ZodString, "many">;
74
- weaknesses: z.ZodArray<z.ZodString, "many">;
75
- }, "strip", z.ZodTypeAny, {
76
- name?: string;
77
- url?: string;
78
- strengths?: string[];
79
- weaknesses?: string[];
80
- }, {
81
- name?: string;
82
- url?: string;
83
- strengths?: string[];
84
- weaknesses?: string[];
85
- }>, "many">;
88
+ strengths: z.ZodArray<z.ZodString>;
89
+ weaknesses: z.ZodArray<z.ZodString>;
90
+ }, z.core.$strip>>;
86
91
  opportunityScore: z.ZodNumber;
87
92
  viralPotential: z.ZodBoolean;
88
93
  followUpQuestions: z.ZodArray<z.ZodObject<{
89
94
  question: z.ZodString;
90
- type: z.ZodEnum<["open", "multiple-choice", "scale"]>;
91
- options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
95
+ type: z.ZodEnum<{
96
+ open: "open";
97
+ "multiple-choice": "multiple-choice";
98
+ scale: "scale";
99
+ }>;
100
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
92
101
  rationale: z.ZodString;
93
- }, "strip", z.ZodTypeAny, {
94
- type?: "open" | "multiple-choice" | "scale";
95
- options?: string[];
96
- question?: string;
97
- rationale?: string;
98
- }, {
99
- type?: "open" | "multiple-choice" | "scale";
100
- options?: string[];
101
- question?: string;
102
- rationale?: string;
103
- }>, "many">;
102
+ }, z.core.$strip>>;
104
103
  confidence: z.ZodOptional<z.ZodNumber>;
105
104
  rawVision: z.ZodString;
106
- }, "strip", z.ZodTypeAny, {
107
- keywords?: string[];
108
- confidence?: number;
109
- market?: "unknown" | "healthcare" | "fintech" | "education" | "iot" | "gaming" | "marketplace" | "productivity-saas" | "e-commerce" | "social-network" | "enterprise-b2b" | "consumer-b2c" | "blockchain" | "ai-ml";
110
- competitors?: {
111
- name?: string;
112
- url?: string;
113
- strengths?: string[];
114
- weaknesses?: string[];
115
- }[];
116
- opportunityScore?: number;
117
- viralPotential?: boolean;
118
- followUpQuestions?: {
119
- type?: "open" | "multiple-choice" | "scale";
120
- options?: string[];
121
- question?: string;
122
- rationale?: string;
123
- }[];
124
- rawVision?: string;
125
- }, {
126
- keywords?: string[];
127
- confidence?: number;
128
- market?: "unknown" | "healthcare" | "fintech" | "education" | "iot" | "gaming" | "marketplace" | "productivity-saas" | "e-commerce" | "social-network" | "enterprise-b2b" | "consumer-b2c" | "blockchain" | "ai-ml";
129
- competitors?: {
130
- name?: string;
131
- url?: string;
132
- strengths?: string[];
133
- weaknesses?: string[];
134
- }[];
135
- opportunityScore?: number;
136
- viralPotential?: boolean;
137
- followUpQuestions?: {
138
- type?: "open" | "multiple-choice" | "scale";
139
- options?: string[];
140
- question?: string;
141
- rationale?: string;
142
- }[];
143
- rawVision?: string;
144
- }>;
105
+ }, z.core.$strip>;
145
106
  /**
146
107
  * Zod schema for Competitor validation
147
108
  */
148
109
  export declare const CompetitorSchema: z.ZodObject<{
149
110
  name: z.ZodString;
150
111
  url: z.ZodOptional<z.ZodString>;
151
- strengths: z.ZodArray<z.ZodString, "many">;
152
- weaknesses: z.ZodArray<z.ZodString, "many">;
153
- }, "strip", z.ZodTypeAny, {
154
- name?: string;
155
- url?: string;
156
- strengths?: string[];
157
- weaknesses?: string[];
158
- }, {
159
- name?: string;
160
- url?: string;
161
- strengths?: string[];
162
- weaknesses?: string[];
163
- }>;
112
+ strengths: z.ZodArray<z.ZodString>;
113
+ weaknesses: z.ZodArray<z.ZodString>;
114
+ }, z.core.$strip>;
164
115
  /**
165
116
  * Zod schema for Question validation
166
117
  */
167
118
  export declare const QuestionSchema: z.ZodObject<{
168
119
  question: z.ZodString;
169
- type: z.ZodEnum<["open", "multiple-choice", "scale"]>;
170
- options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
120
+ type: z.ZodEnum<{
121
+ open: "open";
122
+ "multiple-choice": "multiple-choice";
123
+ scale: "scale";
124
+ }>;
125
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
171
126
  rationale: z.ZodString;
172
- }, "strip", z.ZodTypeAny, {
173
- type?: "open" | "multiple-choice" | "scale";
174
- options?: string[];
175
- question?: string;
176
- rationale?: string;
177
- }, {
178
- type?: "open" | "multiple-choice" | "scale";
179
- options?: string[];
180
- question?: string;
181
- rationale?: string;
182
- }>;
127
+ }, z.core.$strip>;
183
128
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/research/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,KAAK,GACL,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,OAAO,CAAC;IAE3C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,+BAA+B;IAC/B,MAAM,EAAE,cAAc,CAAC;IAEvB,4CAA4C;IAC5C,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,iDAAiD;IACjD,cAAc,EAAE,OAAO,CAAC;IAExB,mDAAmD;IACnD,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAE9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsC/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAK3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/research/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,KAAK,GACL,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,OAAO,CAAC;IAE3C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,+BAA+B;IAC/B,MAAM,EAAE,cAAc,CAAC;IAEvB,4CAA4C;IAC5C,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,iDAAiD;IACjD,cAAc,EAAE,OAAO,CAAC;IAExB,mDAAmD;IACnD,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAE9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsC/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;iBAKzB,CAAC"}
@@ -45,51 +45,13 @@ export declare const TeamRecommendationSchema: z.ZodObject<{
45
45
  required: z.ZodBoolean;
46
46
  reason: z.ZodString;
47
47
  size: z.ZodString;
48
- skills: z.ZodArray<z.ZodString, "many">;
48
+ skills: z.ZodArray<z.ZodString>;
49
49
  serverlessAlternative: z.ZodOptional<z.ZodObject<{
50
50
  service: z.ZodString;
51
51
  costSavings: z.ZodNumber;
52
- tradeoffs: z.ZodArray<z.ZodString, "many">;
52
+ tradeoffs: z.ZodArray<z.ZodString>;
53
53
  pricingModel: z.ZodOptional<z.ZodString>;
54
- }, "strip", z.ZodTypeAny, {
55
- service?: string;
56
- costSavings?: number;
57
- tradeoffs?: string[];
58
- pricingModel?: string;
59
- }, {
60
- service?: string;
61
- costSavings?: number;
62
- tradeoffs?: string[];
63
- pricingModel?: string;
64
- }>>;
54
+ }, z.core.$strip>>;
65
55
  priority: z.ZodOptional<z.ZodNumber>;
66
- }, "strip", z.ZodTypeAny, {
67
- skills?: string[];
68
- reason?: string;
69
- priority?: number;
70
- size?: string;
71
- teamName?: string;
72
- role?: string;
73
- required?: boolean;
74
- serverlessAlternative?: {
75
- service?: string;
76
- costSavings?: number;
77
- tradeoffs?: string[];
78
- pricingModel?: string;
79
- };
80
- }, {
81
- skills?: string[];
82
- reason?: string;
83
- priority?: number;
84
- size?: string;
85
- teamName?: string;
86
- role?: string;
87
- required?: boolean;
88
- serverlessAlternative?: {
89
- service?: string;
90
- costSavings?: number;
91
- tradeoffs?: string[];
92
- pricingModel?: string;
93
- };
94
- }>;
56
+ }, z.core.$strip>;
95
57
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/team/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAEhB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,CAAC;IAElB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IAEf,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcnC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/team/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAEhB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,CAAC;IAElB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IAEf,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAcnC,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * JIRA Token Provider
3
+ *
4
+ * Centralized API token retrieval logic for JIRA.
5
+ * Supports domain-specific tokens via environment variables.
6
+ *
7
+ * Token Resolution Priority:
8
+ * 1. Domain-specific: JIRA_API_TOKEN_{DOMAIN} (e.g., JIRA_API_TOKEN_ACME)
9
+ * 2. Default: JIRA_API_TOKEN
10
+ *
11
+ * Email Resolution Priority:
12
+ * 1. Domain-specific: JIRA_EMAIL_{DOMAIN} (e.g., JIRA_EMAIL_ACME)
13
+ * 2. Default: JIRA_EMAIL
14
+ *
15
+ * This mirrors the ADO PAT provider pattern for consistency.
16
+ *
17
+ * @module integrations/jira/jira-token-provider
18
+ */
19
+ /**
20
+ * JIRA credentials for a specific domain
21
+ */
22
+ export interface JiraCredentialsResolved {
23
+ apiToken: string;
24
+ email: string;
25
+ domain: string;
26
+ }
27
+ /**
28
+ * Get API token for a specific JIRA domain
29
+ *
30
+ * Supports domain-specific tokens via JIRA_API_TOKEN_{DOMAIN} env vars.
31
+ * This allows different JIRA instances to use different credentials.
32
+ *
33
+ * @param domain - The JIRA domain (e.g., company.atlassian.net)
34
+ * @returns The API token string
35
+ * @throws Error if no token is configured
36
+ *
37
+ * @example
38
+ * // Uses JIRA_API_TOKEN_ACME if set, otherwise JIRA_API_TOKEN
39
+ * const token = getJiraToken('acme.atlassian.net');
40
+ */
41
+ export declare function getJiraToken(domain: string): string;
42
+ /**
43
+ * Get email for a specific JIRA domain
44
+ *
45
+ * @param domain - The JIRA domain
46
+ * @returns The email string
47
+ * @throws Error if no email is configured
48
+ */
49
+ export declare function getJiraEmail(domain: string): string;
50
+ /**
51
+ * Get full credentials for a JIRA domain
52
+ *
53
+ * @param domain - The JIRA domain
54
+ * @returns Complete credentials object
55
+ */
56
+ export declare function getJiraCredentialsForDomain(domain: string): JiraCredentialsResolved;
57
+ /**
58
+ * Check if credentials are available for a domain
59
+ *
60
+ * @param domain - The JIRA domain (optional, checks default if not provided)
61
+ * @returns true if credentials are available (domain-specific or default)
62
+ */
63
+ export declare function hasJiraCredentials(domain?: string): boolean;
64
+ /**
65
+ * Get the environment variable key for a domain's token
66
+ *
67
+ * @param domain - The JIRA domain
68
+ * @returns The environment variable key
69
+ *
70
+ * @example
71
+ * getTokenEnvKey('acme.atlassian.net') // returns 'JIRA_API_TOKEN_ACME'
72
+ */
73
+ export declare function getTokenEnvKey(domain: string): string;
74
+ /**
75
+ * Get the environment variable key for a domain's email
76
+ *
77
+ * @param domain - The JIRA domain
78
+ * @returns The environment variable key
79
+ *
80
+ * @example
81
+ * getEmailEnvKey('acme.atlassian.net') // returns 'JIRA_EMAIL_ACME'
82
+ */
83
+ export declare function getEmailEnvKey(domain: string): string;
84
+ /**
85
+ * List all configured JIRA domains from environment
86
+ *
87
+ * Scans environment variables for JIRA_API_TOKEN_* patterns
88
+ * and returns the list of configured domains.
89
+ *
90
+ * @returns Array of domain suffixes (e.g., ['ACME', 'CORP'])
91
+ */
92
+ export declare function listConfiguredDomains(): string[];
93
+ //# sourceMappingURL=jira-token-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-token-provider.d.ts","sourceRoot":"","sources":["../../../../src/integrations/jira/jira-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAqBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBnD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAMnF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAS3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAchD"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * JIRA Token Provider
3
+ *
4
+ * Centralized API token retrieval logic for JIRA.
5
+ * Supports domain-specific tokens via environment variables.
6
+ *
7
+ * Token Resolution Priority:
8
+ * 1. Domain-specific: JIRA_API_TOKEN_{DOMAIN} (e.g., JIRA_API_TOKEN_ACME)
9
+ * 2. Default: JIRA_API_TOKEN
10
+ *
11
+ * Email Resolution Priority:
12
+ * 1. Domain-specific: JIRA_EMAIL_{DOMAIN} (e.g., JIRA_EMAIL_ACME)
13
+ * 2. Default: JIRA_EMAIL
14
+ *
15
+ * This mirrors the ADO PAT provider pattern for consistency.
16
+ *
17
+ * @module integrations/jira/jira-token-provider
18
+ */
19
+ /**
20
+ * Normalize domain to environment variable suffix
21
+ *
22
+ * @example
23
+ * normalizeDomainToEnvKey('company.atlassian.net') // 'COMPANY'
24
+ * normalizeDomainToEnvKey('acme-corp.atlassian.net') // 'ACME_CORP'
25
+ * normalizeDomainToEnvKey('https://jira.example.com') // 'JIRA_EXAMPLE_COM'
26
+ */
27
+ function normalizeDomainToEnvKey(domain) {
28
+ // Remove protocol if present
29
+ let normalized = domain.replace(/^https?:\/\//, '');
30
+ // Remove .atlassian.net suffix for cleaner keys
31
+ normalized = normalized.replace(/\.atlassian\.net$/, '');
32
+ // Convert to uppercase and replace non-alphanumeric with underscore
33
+ return normalized.toUpperCase().replace(/[^A-Z0-9]/g, '_');
34
+ }
35
+ /**
36
+ * Get API token for a specific JIRA domain
37
+ *
38
+ * Supports domain-specific tokens via JIRA_API_TOKEN_{DOMAIN} env vars.
39
+ * This allows different JIRA instances to use different credentials.
40
+ *
41
+ * @param domain - The JIRA domain (e.g., company.atlassian.net)
42
+ * @returns The API token string
43
+ * @throws Error if no token is configured
44
+ *
45
+ * @example
46
+ * // Uses JIRA_API_TOKEN_ACME if set, otherwise JIRA_API_TOKEN
47
+ * const token = getJiraToken('acme.atlassian.net');
48
+ */
49
+ export function getJiraToken(domain) {
50
+ // SECURITY: Never log the token value itself
51
+ // Try domain-specific token first (e.g., JIRA_API_TOKEN_ACME)
52
+ const domainEnvKey = `JIRA_API_TOKEN_${normalizeDomainToEnvKey(domain)}`;
53
+ const domainToken = process.env[domainEnvKey];
54
+ if (domainToken) {
55
+ return domainToken;
56
+ }
57
+ // Fall back to default token
58
+ const defaultToken = process.env.JIRA_API_TOKEN;
59
+ if (!defaultToken) {
60
+ throw new Error(`JIRA API token not found. Set JIRA_API_TOKEN in .env file ` +
61
+ `or ${domainEnvKey} for domain-specific token.`);
62
+ }
63
+ return defaultToken;
64
+ }
65
+ /**
66
+ * Get email for a specific JIRA domain
67
+ *
68
+ * @param domain - The JIRA domain
69
+ * @returns The email string
70
+ * @throws Error if no email is configured
71
+ */
72
+ export function getJiraEmail(domain) {
73
+ // Try domain-specific email first
74
+ const domainEnvKey = `JIRA_EMAIL_${normalizeDomainToEnvKey(domain)}`;
75
+ const domainEmail = process.env[domainEnvKey];
76
+ if (domainEmail) {
77
+ return domainEmail;
78
+ }
79
+ // Fall back to default email
80
+ const defaultEmail = process.env.JIRA_EMAIL;
81
+ if (!defaultEmail) {
82
+ throw new Error(`JIRA email not found. Set JIRA_EMAIL in .env file ` +
83
+ `or ${domainEnvKey} for domain-specific email.`);
84
+ }
85
+ return defaultEmail;
86
+ }
87
+ /**
88
+ * Get full credentials for a JIRA domain
89
+ *
90
+ * @param domain - The JIRA domain
91
+ * @returns Complete credentials object
92
+ */
93
+ export function getJiraCredentialsForDomain(domain) {
94
+ return {
95
+ apiToken: getJiraToken(domain),
96
+ email: getJiraEmail(domain),
97
+ domain,
98
+ };
99
+ }
100
+ /**
101
+ * Check if credentials are available for a domain
102
+ *
103
+ * @param domain - The JIRA domain (optional, checks default if not provided)
104
+ * @returns true if credentials are available (domain-specific or default)
105
+ */
106
+ export function hasJiraCredentials(domain) {
107
+ if (domain) {
108
+ const domainEnvKey = `JIRA_API_TOKEN_${normalizeDomainToEnvKey(domain)}`;
109
+ if (process.env[domainEnvKey]) {
110
+ return true;
111
+ }
112
+ }
113
+ return !!process.env.JIRA_API_TOKEN;
114
+ }
115
+ /**
116
+ * Get the environment variable key for a domain's token
117
+ *
118
+ * @param domain - The JIRA domain
119
+ * @returns The environment variable key
120
+ *
121
+ * @example
122
+ * getTokenEnvKey('acme.atlassian.net') // returns 'JIRA_API_TOKEN_ACME'
123
+ */
124
+ export function getTokenEnvKey(domain) {
125
+ return `JIRA_API_TOKEN_${normalizeDomainToEnvKey(domain)}`;
126
+ }
127
+ /**
128
+ * Get the environment variable key for a domain's email
129
+ *
130
+ * @param domain - The JIRA domain
131
+ * @returns The environment variable key
132
+ *
133
+ * @example
134
+ * getEmailEnvKey('acme.atlassian.net') // returns 'JIRA_EMAIL_ACME'
135
+ */
136
+ export function getEmailEnvKey(domain) {
137
+ return `JIRA_EMAIL_${normalizeDomainToEnvKey(domain)}`;
138
+ }
139
+ /**
140
+ * List all configured JIRA domains from environment
141
+ *
142
+ * Scans environment variables for JIRA_API_TOKEN_* patterns
143
+ * and returns the list of configured domains.
144
+ *
145
+ * @returns Array of domain suffixes (e.g., ['ACME', 'CORP'])
146
+ */
147
+ export function listConfiguredDomains() {
148
+ const domains = [];
149
+ const prefix = 'JIRA_API_TOKEN_';
150
+ for (const key of Object.keys(process.env)) {
151
+ if (key.startsWith(prefix) && key !== 'JIRA_API_TOKEN') {
152
+ const domainSuffix = key.substring(prefix.length);
153
+ if (domainSuffix) {
154
+ domains.push(domainSuffix);
155
+ }
156
+ }
157
+ }
158
+ return domains;
159
+ }
160
+ //# sourceMappingURL=jira-token-provider.js.map