specweave 0.21.2 → 0.21.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 (553) hide show
  1. package/CLAUDE.md +232 -5
  2. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts +98 -0
  3. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts.map +1 -0
  4. package/dist/plugins/specweave-github/lib/IssueStateManager.js +146 -0
  5. package/dist/plugins/specweave-github/lib/IssueStateManager.js.map +1 -0
  6. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  7. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -0
  8. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  9. package/dist/src/cli/commands/check-hooks.d.ts +11 -0
  10. package/dist/src/cli/commands/check-hooks.d.ts.map +1 -0
  11. package/dist/src/cli/commands/check-hooks.js +144 -0
  12. package/dist/src/cli/commands/check-hooks.js.map +1 -0
  13. package/dist/src/cli/commands/cicd-monitor.js +3 -3
  14. package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
  15. package/dist/src/cli/commands/import-docs.js +2 -2
  16. package/dist/src/cli/commands/import-docs.js.map +1 -1
  17. package/dist/src/cli/commands/init-multiproject.js +4 -4
  18. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  19. package/dist/src/cli/commands/migrate-to-multiproject.js +3 -3
  20. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  21. package/dist/src/cli/commands/plan/agent-invoker.d.ts +79 -0
  22. package/dist/src/cli/commands/plan/agent-invoker.d.ts.map +1 -0
  23. package/dist/src/cli/commands/plan/agent-invoker.js +383 -0
  24. package/dist/src/cli/commands/plan/agent-invoker.js.map +1 -0
  25. package/dist/src/cli/commands/plan/increment-detector.d.ts +27 -0
  26. package/dist/src/cli/commands/plan/increment-detector.d.ts.map +1 -0
  27. package/dist/src/cli/commands/plan/increment-detector.js +159 -0
  28. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -0
  29. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +45 -0
  30. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts.map +1 -0
  31. package/dist/src/cli/commands/plan/plan-orchestrator.js +229 -0
  32. package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -0
  33. package/dist/src/cli/commands/plan/plan-validator.d.ts +36 -0
  34. package/dist/src/cli/commands/plan/plan-validator.d.ts.map +1 -0
  35. package/dist/src/cli/commands/plan/plan-validator.js +174 -0
  36. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -0
  37. package/dist/src/cli/commands/plan/types.d.ts +170 -0
  38. package/dist/src/cli/commands/plan/types.d.ts.map +1 -0
  39. package/dist/src/cli/commands/plan/types.js +42 -0
  40. package/dist/src/cli/commands/plan/types.js.map +1 -0
  41. package/dist/src/cli/commands/plan-command.d.ts +16 -0
  42. package/dist/src/cli/commands/plan-command.d.ts.map +1 -0
  43. package/dist/src/cli/commands/plan-command.js +127 -0
  44. package/dist/src/cli/commands/plan-command.js.map +1 -0
  45. package/dist/src/cli/commands/switch-project.js +3 -3
  46. package/dist/src/cli/commands/switch-project.js.map +1 -1
  47. package/dist/src/cli/commands/validate-parent-repo.js +1 -1
  48. package/dist/src/cli/commands/validate-parent-repo.js.map +1 -1
  49. package/dist/src/config/ConfigManager.d.ts +69 -0
  50. package/dist/src/config/ConfigManager.d.ts.map +1 -0
  51. package/dist/src/config/ConfigManager.js +130 -0
  52. package/dist/src/config/ConfigManager.js.map +1 -0
  53. package/dist/src/config/types.d.ts +1357 -0
  54. package/dist/src/config/types.d.ts.map +1 -0
  55. package/dist/src/config/types.js +67 -0
  56. package/dist/src/config/types.js.map +1 -0
  57. package/dist/src/core/brownfield/importer.d.ts +1 -1
  58. package/dist/src/core/brownfield/importer.d.ts.map +1 -1
  59. package/dist/src/core/brownfield/importer.js +3 -3
  60. package/dist/src/core/brownfield/importer.js.map +1 -1
  61. package/dist/src/core/cicd/config-loader.d.ts +1 -1
  62. package/dist/src/core/cicd/config-loader.d.ts.map +1 -1
  63. package/dist/src/core/cicd/index.d.ts +6 -6
  64. package/dist/src/core/cicd/index.d.ts.map +1 -1
  65. package/dist/src/core/cicd/index.js +6 -6
  66. package/dist/src/core/cicd/index.js.map +1 -1
  67. package/dist/src/core/cicd/monitor-service.d.ts +3 -3
  68. package/dist/src/core/cicd/monitor-service.d.ts.map +1 -1
  69. package/dist/src/core/cicd/monitor-service.js +3 -3
  70. package/dist/src/core/cicd/monitor-service.js.map +1 -1
  71. package/dist/src/core/cicd/notifier.d.ts +1 -1
  72. package/dist/src/core/cicd/notifier.d.ts.map +1 -1
  73. package/dist/src/core/cicd/state-manager.d.ts +1 -1
  74. package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
  75. package/dist/src/core/cicd/state-manager.js +1 -1
  76. package/dist/src/core/cicd/state-manager.js.map +1 -1
  77. package/dist/src/core/cicd/workflow-monitor.d.ts +1 -1
  78. package/dist/src/core/cicd/workflow-monitor.d.ts.map +1 -1
  79. package/dist/src/core/cicd/workflow-monitor.js +1 -1
  80. package/dist/src/core/cicd/workflow-monitor.js.map +1 -1
  81. package/dist/src/core/cost-tracker.d.ts +2 -2
  82. package/dist/src/core/cost-tracker.d.ts.map +1 -1
  83. package/dist/src/core/cost-tracker.js +1 -1
  84. package/dist/src/core/cost-tracker.js.map +1 -1
  85. package/dist/src/core/hooks/HealthReporter.d.ts +55 -0
  86. package/dist/src/core/hooks/HealthReporter.d.ts.map +1 -0
  87. package/dist/src/core/hooks/HealthReporter.js +268 -0
  88. package/dist/src/core/hooks/HealthReporter.js.map +1 -0
  89. package/dist/src/core/hooks/HookAutoFixer.d.ts +41 -0
  90. package/dist/src/core/hooks/HookAutoFixer.d.ts.map +1 -0
  91. package/dist/src/core/hooks/HookAutoFixer.js +222 -0
  92. package/dist/src/core/hooks/HookAutoFixer.js.map +1 -0
  93. package/dist/src/core/hooks/HookExecutor.d.ts +57 -0
  94. package/dist/src/core/hooks/HookExecutor.d.ts.map +1 -0
  95. package/dist/src/core/hooks/HookExecutor.js +287 -0
  96. package/dist/src/core/hooks/HookExecutor.js.map +1 -0
  97. package/dist/src/core/hooks/HookHealthChecker.d.ts +51 -0
  98. package/dist/src/core/hooks/HookHealthChecker.d.ts.map +1 -0
  99. package/dist/src/core/hooks/HookHealthChecker.js +212 -0
  100. package/dist/src/core/hooks/HookHealthChecker.js.map +1 -0
  101. package/dist/src/core/hooks/HookScanner.d.ts +65 -0
  102. package/dist/src/core/hooks/HookScanner.d.ts.map +1 -0
  103. package/dist/src/core/hooks/HookScanner.js +214 -0
  104. package/dist/src/core/hooks/HookScanner.js.map +1 -0
  105. package/dist/src/core/hooks/types.d.ts +281 -0
  106. package/dist/src/core/hooks/types.d.ts.map +1 -0
  107. package/dist/src/core/hooks/types.js +10 -0
  108. package/dist/src/core/hooks/types.js.map +1 -0
  109. package/dist/src/core/iac/index.d.ts +10 -0
  110. package/dist/src/core/iac/index.d.ts.map +1 -0
  111. package/dist/src/core/iac/index.js +11 -0
  112. package/dist/src/core/iac/index.js.map +1 -0
  113. package/dist/src/core/iac/template-engine.d.ts +77 -0
  114. package/dist/src/core/iac/template-engine.d.ts.map +1 -0
  115. package/dist/src/core/iac/template-engine.js +182 -0
  116. package/dist/src/core/iac/template-engine.js.map +1 -0
  117. package/dist/src/core/increment/ac-status-manager.d.ts +115 -0
  118. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -0
  119. package/dist/src/core/increment/ac-status-manager.js +343 -0
  120. package/dist/src/core/increment/ac-status-manager.js.map +1 -0
  121. package/dist/src/core/increment/auto-transition-manager.d.ts +60 -0
  122. package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -0
  123. package/dist/src/core/increment/auto-transition-manager.js +192 -0
  124. package/dist/src/core/increment/auto-transition-manager.js.map +1 -0
  125. package/dist/src/core/increment/limits.d.ts +1 -1
  126. package/dist/src/core/increment/limits.d.ts.map +1 -1
  127. package/dist/src/core/increment/limits.js +2 -2
  128. package/dist/src/core/increment/limits.js.map +1 -1
  129. package/dist/src/core/increment/spec-sync-manager.d.ts +177 -0
  130. package/dist/src/core/increment/spec-sync-manager.d.ts.map +1 -0
  131. package/dist/src/core/increment/spec-sync-manager.js +496 -0
  132. package/dist/src/core/increment/spec-sync-manager.js.map +1 -0
  133. package/dist/src/core/increment/status-auto-transition.d.ts +46 -0
  134. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -0
  135. package/dist/src/core/increment/status-auto-transition.js +178 -0
  136. package/dist/src/core/increment/status-auto-transition.js.map +1 -0
  137. package/dist/src/core/increment/task-state-manager.d.ts +75 -0
  138. package/dist/src/core/increment/task-state-manager.d.ts.map +1 -0
  139. package/dist/src/core/increment/task-state-manager.js +117 -0
  140. package/dist/src/core/increment/task-state-manager.js.map +1 -0
  141. package/dist/src/core/living-docs/CodeValidator.d.ts +68 -0
  142. package/dist/src/core/living-docs/CodeValidator.d.ts.map +1 -0
  143. package/dist/src/core/living-docs/CodeValidator.js +160 -0
  144. package/dist/src/core/living-docs/CodeValidator.js.map +1 -0
  145. package/dist/src/core/living-docs/CompletionPropagator.d.ts +84 -0
  146. package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -0
  147. package/dist/src/core/living-docs/CompletionPropagator.js +205 -0
  148. package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -0
  149. package/dist/src/core/living-docs/ProjectDetector.d.ts +29 -0
  150. package/dist/src/core/living-docs/ProjectDetector.d.ts.map +1 -0
  151. package/dist/src/core/living-docs/ProjectDetector.js +94 -0
  152. package/dist/src/core/living-docs/ProjectDetector.js.map +1 -0
  153. package/dist/src/core/living-docs/SpecDistributor.d.ts +55 -0
  154. package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -0
  155. package/dist/src/core/living-docs/SpecDistributor.js +216 -0
  156. package/dist/src/core/living-docs/SpecDistributor.js.map +1 -0
  157. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +116 -0
  158. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +1 -0
  159. package/dist/src/core/living-docs/ThreeLayerSyncManager.js +356 -0
  160. package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +1 -0
  161. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  162. package/dist/src/core/living-docs/hierarchy-mapper.js +2 -1
  163. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  164. package/dist/src/core/living-docs/index.d.ts +1 -1
  165. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  166. package/dist/src/core/living-docs/index.js +5 -1
  167. package/dist/src/core/living-docs/index.js.map +1 -1
  168. package/dist/src/core/living-docs/types.d.ts +70 -300
  169. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  170. package/dist/src/core/living-docs/types.js +2 -10
  171. package/dist/src/core/living-docs/types.js.map +1 -1
  172. package/dist/src/core/project-manager.d.ts +1 -1
  173. package/dist/src/core/project-manager.d.ts.map +1 -1
  174. package/dist/src/core/project-manager.js +2 -2
  175. package/dist/src/core/project-manager.js.map +1 -1
  176. package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
  177. package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -1
  178. package/dist/src/core/qa/risk-calculator.d.ts +1 -1
  179. package/dist/src/core/qa/risk-calculator.d.ts.map +1 -1
  180. package/dist/src/core/repo-structure/setup-summary.d.ts +1 -1
  181. package/dist/src/core/repo-structure/setup-summary.d.ts.map +1 -1
  182. package/dist/src/core/rfc-generator-v2.d.ts +1 -1
  183. package/dist/src/core/rfc-generator-v2.d.ts.map +1 -1
  184. package/dist/src/core/rfc-generator-v2.js +1 -1
  185. package/dist/src/core/rfc-generator-v2.js.map +1 -1
  186. package/dist/src/core/serverless/context-detector.d.ts +12 -0
  187. package/dist/src/core/serverless/context-detector.d.ts.map +1 -0
  188. package/dist/src/core/serverless/context-detector.js +213 -0
  189. package/dist/src/core/serverless/context-detector.js.map +1 -0
  190. package/dist/src/core/serverless/cost-comparison.d.ts +73 -0
  191. package/dist/src/core/serverless/cost-comparison.d.ts.map +1 -0
  192. package/dist/src/core/serverless/cost-comparison.js +198 -0
  193. package/dist/src/core/serverless/cost-comparison.js.map +1 -0
  194. package/dist/src/core/serverless/cost-estimator.d.ts +69 -0
  195. package/dist/src/core/serverless/cost-estimator.d.ts.map +1 -0
  196. package/dist/src/core/serverless/cost-estimator.js +127 -0
  197. package/dist/src/core/serverless/cost-estimator.js.map +1 -0
  198. package/dist/src/core/serverless/cost-optimizer.d.ts +57 -0
  199. package/dist/src/core/serverless/cost-optimizer.d.ts.map +1 -0
  200. package/dist/src/core/serverless/cost-optimizer.js +221 -0
  201. package/dist/src/core/serverless/cost-optimizer.js.map +1 -0
  202. package/dist/src/core/serverless/index.d.ts +20 -0
  203. package/dist/src/core/serverless/index.d.ts.map +1 -0
  204. package/dist/src/core/serverless/index.js +26 -0
  205. package/dist/src/core/serverless/index.js.map +1 -0
  206. package/dist/src/core/serverless/learning-path-recommender.d.ts +152 -0
  207. package/dist/src/core/serverless/learning-path-recommender.d.ts.map +1 -0
  208. package/dist/src/core/serverless/learning-path-recommender.js +389 -0
  209. package/dist/src/core/serverless/learning-path-recommender.js.map +1 -0
  210. package/dist/src/core/serverless/platform-data-loader.d.ts +22 -0
  211. package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -0
  212. package/dist/src/core/serverless/platform-data-loader.js +49 -0
  213. package/dist/src/core/serverless/platform-data-loader.js.map +1 -0
  214. package/dist/src/core/serverless/platform-selector.d.ts +20 -0
  215. package/dist/src/core/serverless/platform-selector.d.ts.map +1 -0
  216. package/dist/src/core/serverless/platform-selector.js +279 -0
  217. package/dist/src/core/serverless/platform-selector.js.map +1 -0
  218. package/dist/src/core/serverless/recommendation-formatter.d.ts +24 -0
  219. package/dist/src/core/serverless/recommendation-formatter.d.ts.map +1 -0
  220. package/dist/src/core/serverless/recommendation-formatter.js +70 -0
  221. package/dist/src/core/serverless/recommendation-formatter.js.map +1 -0
  222. package/dist/src/core/serverless/suitability-analyzer.d.ts +22 -0
  223. package/dist/src/core/serverless/suitability-analyzer.d.ts.map +1 -0
  224. package/dist/src/core/serverless/suitability-analyzer.js +262 -0
  225. package/dist/src/core/serverless/suitability-analyzer.js.map +1 -0
  226. package/dist/src/core/serverless/types.d.ts +96 -0
  227. package/dist/src/core/serverless/types.d.ts.map +1 -0
  228. package/dist/src/core/serverless/types.js +5 -0
  229. package/dist/src/core/serverless/types.js.map +1 -0
  230. package/dist/src/core/sync/bidirectional-engine.d.ts +1 -1
  231. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
  232. package/dist/src/core/sync/enhanced-content-builder.d.ts +1 -1
  233. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  234. package/dist/src/core/sync/profile-manager.d.ts +1 -1
  235. package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
  236. package/dist/src/core/sync/profile-selector.d.ts +1 -1
  237. package/dist/src/core/sync/profile-selector.d.ts.map +1 -1
  238. package/dist/src/core/sync/profile-selector.js +1 -1
  239. package/dist/src/core/sync/profile-selector.js.map +1 -1
  240. package/dist/src/core/sync/project-context.d.ts +1 -1
  241. package/dist/src/core/sync/project-context.d.ts.map +1 -1
  242. package/dist/src/core/sync/rate-limiter.d.ts +1 -1
  243. package/dist/src/core/sync/rate-limiter.d.ts.map +1 -1
  244. package/dist/src/core/sync/status-sync-engine.d.ts +2 -2
  245. package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -1
  246. package/dist/src/core/sync/status-sync-engine.js +2 -2
  247. package/dist/src/core/sync/status-sync-engine.js.map +1 -1
  248. package/dist/src/core/sync/time-range-selector.d.ts +1 -1
  249. package/dist/src/core/sync/time-range-selector.d.ts.map +1 -1
  250. package/dist/src/core/sync/time-range-selector.js +1 -1
  251. package/dist/src/core/sync/time-range-selector.js.map +1 -1
  252. package/dist/src/core/types/increment-metadata.d.ts +27 -0
  253. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  254. package/dist/src/core/types/increment-metadata.js +45 -1
  255. package/dist/src/core/types/increment-metadata.js.map +1 -1
  256. package/dist/src/core/types/sync-profile.d.ts +2 -0
  257. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  258. package/dist/src/core/types/sync-profile.js.map +1 -1
  259. package/dist/src/core/validation/increment-structure-validator.d.ts +47 -0
  260. package/dist/src/core/validation/increment-structure-validator.d.ts.map +1 -0
  261. package/dist/src/core/validation/increment-structure-validator.js +187 -0
  262. package/dist/src/core/validation/increment-structure-validator.js.map +1 -0
  263. package/dist/src/core/validation/three-file-validator.d.ts +82 -0
  264. package/dist/src/core/validation/three-file-validator.d.ts.map +1 -0
  265. package/dist/src/core/validation/three-file-validator.js +320 -0
  266. package/dist/src/core/validation/three-file-validator.js.map +1 -0
  267. package/dist/src/core/workflow/phase-detector.d.ts +103 -0
  268. package/dist/src/core/workflow/phase-detector.d.ts.map +1 -0
  269. package/dist/src/core/workflow/phase-detector.js +704 -0
  270. package/dist/src/core/workflow/phase-detector.js.map +1 -0
  271. package/dist/src/core/workflow/types.d.ts +153 -0
  272. package/dist/src/core/workflow/types.d.ts.map +1 -0
  273. package/dist/src/core/workflow/types.js +47 -0
  274. package/dist/src/core/workflow/types.js.map +1 -0
  275. package/dist/src/init/InitFlow.d.ts +37 -0
  276. package/dist/src/init/InitFlow.d.ts.map +1 -0
  277. package/dist/src/init/InitFlow.js +209 -0
  278. package/dist/src/init/InitFlow.js.map +1 -0
  279. package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts +107 -0
  280. package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts.map +1 -0
  281. package/dist/src/init/architecture/ArchitectureDecisionEngine.js +405 -0
  282. package/dist/src/init/architecture/ArchitectureDecisionEngine.js.map +1 -0
  283. package/dist/src/init/architecture/CloudCreditsDatabase.d.ts +11 -0
  284. package/dist/src/init/architecture/CloudCreditsDatabase.d.ts.map +1 -0
  285. package/dist/src/init/architecture/CloudCreditsDatabase.js +92 -0
  286. package/dist/src/init/architecture/CloudCreditsDatabase.js.map +1 -0
  287. package/dist/src/init/architecture/types.d.ts +251 -0
  288. package/dist/src/init/architecture/types.d.ts.map +1 -0
  289. package/dist/src/init/architecture/types.js +54 -0
  290. package/dist/src/init/architecture/types.js.map +1 -0
  291. package/dist/src/init/compliance/ComplianceDetector.d.ts +17 -0
  292. package/dist/src/init/compliance/ComplianceDetector.d.ts.map +1 -0
  293. package/dist/src/init/compliance/ComplianceDetector.js +64 -0
  294. package/dist/src/init/compliance/ComplianceDetector.js.map +1 -0
  295. package/dist/src/init/compliance/standards-database.d.ts +48 -0
  296. package/dist/src/init/compliance/standards-database.d.ts.map +1 -0
  297. package/dist/src/init/compliance/standards-database.js +506 -0
  298. package/dist/src/init/compliance/standards-database.js.map +1 -0
  299. package/dist/src/init/compliance/types.d.ts +91 -0
  300. package/dist/src/init/compliance/types.d.ts.map +1 -0
  301. package/dist/src/init/compliance/types.js +43 -0
  302. package/dist/src/init/compliance/types.js.map +1 -0
  303. package/dist/src/init/repo/GitHubAPIClient.d.ts +51 -0
  304. package/dist/src/init/repo/GitHubAPIClient.d.ts.map +1 -0
  305. package/dist/src/init/repo/GitHubAPIClient.js +144 -0
  306. package/dist/src/init/repo/GitHubAPIClient.js.map +1 -0
  307. package/dist/src/init/repo/RepositorySelector.d.ts +45 -0
  308. package/dist/src/init/repo/RepositorySelector.d.ts.map +1 -0
  309. package/dist/src/init/repo/RepositorySelector.js +106 -0
  310. package/dist/src/init/repo/RepositorySelector.js.map +1 -0
  311. package/dist/src/init/repo/types.d.ts +95 -0
  312. package/dist/src/init/repo/types.d.ts.map +1 -0
  313. package/dist/src/init/repo/types.js +25 -0
  314. package/dist/src/init/repo/types.js.map +1 -0
  315. package/dist/src/init/research/CompetitorAnalyzer.d.ts +79 -0
  316. package/dist/src/init/research/CompetitorAnalyzer.d.ts.map +1 -0
  317. package/dist/src/init/research/CompetitorAnalyzer.js +265 -0
  318. package/dist/src/init/research/CompetitorAnalyzer.js.map +1 -0
  319. package/dist/src/init/research/MarketDetector.d.ts +62 -0
  320. package/dist/src/init/research/MarketDetector.d.ts.map +1 -0
  321. package/dist/src/init/research/MarketDetector.js +247 -0
  322. package/dist/src/init/research/MarketDetector.js.map +1 -0
  323. package/dist/src/init/research/OpportunityScorer.d.ts +58 -0
  324. package/dist/src/init/research/OpportunityScorer.d.ts.map +1 -0
  325. package/dist/src/init/research/OpportunityScorer.js +194 -0
  326. package/dist/src/init/research/OpportunityScorer.js.map +1 -0
  327. package/dist/src/init/research/QuestionGenerator.d.ts +68 -0
  328. package/dist/src/init/research/QuestionGenerator.d.ts.map +1 -0
  329. package/dist/src/init/research/QuestionGenerator.js +244 -0
  330. package/dist/src/init/research/QuestionGenerator.js.map +1 -0
  331. package/dist/src/init/research/ReportGenerator.d.ts +36 -0
  332. package/dist/src/init/research/ReportGenerator.d.ts.map +1 -0
  333. package/dist/src/init/research/ReportGenerator.js +125 -0
  334. package/dist/src/init/research/ReportGenerator.js.map +1 -0
  335. package/dist/src/init/research/VisionAnalyzer.d.ts +129 -0
  336. package/dist/src/init/research/VisionAnalyzer.d.ts.map +1 -0
  337. package/dist/src/init/research/VisionAnalyzer.js +212 -0
  338. package/dist/src/init/research/VisionAnalyzer.js.map +1 -0
  339. package/dist/src/init/research/keyword-extractor.d.ts +78 -0
  340. package/dist/src/init/research/keyword-extractor.d.ts.map +1 -0
  341. package/dist/src/init/research/keyword-extractor.js +230 -0
  342. package/dist/src/init/research/keyword-extractor.js.map +1 -0
  343. package/dist/src/init/research/src/config/ConfigManager.d.ts +14 -0
  344. package/dist/src/init/research/src/config/ConfigManager.d.ts.map +1 -0
  345. package/dist/src/init/research/src/config/ConfigManager.js +45 -0
  346. package/dist/src/init/research/src/config/ConfigManager.js.map +1 -0
  347. package/dist/src/init/research/src/config/types.d.ts +102 -0
  348. package/dist/src/init/research/src/config/types.d.ts.map +1 -0
  349. package/dist/src/init/research/src/config/types.js +24 -0
  350. package/dist/src/init/research/src/config/types.js.map +1 -0
  351. package/dist/src/init/research/types.d.ts +183 -0
  352. package/dist/src/init/research/types.d.ts.map +1 -0
  353. package/dist/src/init/research/types.js +65 -0
  354. package/dist/src/init/research/types.js.map +1 -0
  355. package/dist/src/init/team/ServerlessSavingsCalculator.d.ts +136 -0
  356. package/dist/src/init/team/ServerlessSavingsCalculator.d.ts.map +1 -0
  357. package/dist/src/init/team/ServerlessSavingsCalculator.js +360 -0
  358. package/dist/src/init/team/ServerlessSavingsCalculator.js.map +1 -0
  359. package/dist/src/init/team/TeamRecommender.d.ts +122 -0
  360. package/dist/src/init/team/TeamRecommender.d.ts.map +1 -0
  361. package/dist/src/init/team/TeamRecommender.js +405 -0
  362. package/dist/src/init/team/TeamRecommender.js.map +1 -0
  363. package/dist/src/init/team/types.d.ts +95 -0
  364. package/dist/src/init/team/types.d.ts.map +1 -0
  365. package/dist/src/init/team/types.js +23 -0
  366. package/dist/src/init/team/types.js.map +1 -0
  367. package/dist/src/integrations/jira/jira-mapper.d.ts +1 -1
  368. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  369. package/dist/src/types/cost-tracking.d.ts +1 -1
  370. package/dist/src/types/cost-tracking.d.ts.map +1 -1
  371. package/dist/src/utils/cost-reporter.d.ts +2 -2
  372. package/dist/src/utils/cost-reporter.d.ts.map +1 -1
  373. package/dist/src/utils/docs-preview/config-generator.d.ts +1 -1
  374. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  375. package/dist/src/utils/docs-preview/config-generator.js +1 -1
  376. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
  377. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
  378. package/dist/src/utils/docs-preview/docusaurus-setup.js +4 -4
  379. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  380. package/dist/src/utils/docs-preview/index.d.ts +6 -6
  381. package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
  382. package/dist/src/utils/docs-preview/index.js +6 -6
  383. package/dist/src/utils/docs-preview/index.js.map +1 -1
  384. package/dist/src/utils/docs-preview/package-installer.d.ts +1 -1
  385. package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -1
  386. package/dist/src/utils/docs-preview/package-installer.js +1 -1
  387. package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
  388. package/dist/src/utils/docs-preview/server-manager.d.ts +1 -1
  389. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
  390. package/dist/src/utils/docs-preview/server-manager.js +1 -1
  391. package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
  392. package/dist/src/utils/docs-preview/sidebar-builder.d.ts +1 -1
  393. package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -1
  394. package/dist/src/utils/generate-skills-index.d.ts +1 -1
  395. package/dist/src/utils/generate-skills-index.js +1 -1
  396. package/dist/src/utils/project-detection.js +1 -1
  397. package/dist/src/utils/project-detection.js.map +1 -1
  398. package/package.json +9 -3
  399. package/plugins/specweave/agents/architect/AGENT.md +605 -0
  400. package/plugins/specweave/agents/infrastructure/AGENT.md +760 -0
  401. package/plugins/specweave/agents/pm/AGENT.md +14 -13
  402. package/plugins/specweave/commands/specweave-check-hooks.md +186 -0
  403. package/plugins/specweave/commands/specweave-plan.md +151 -0
  404. package/plugins/specweave/commands/specweave-sync-acs.md +342 -0
  405. package/plugins/specweave/commands/specweave-validate.md +60 -11
  406. package/plugins/specweave/hooks/lib/update-status-line.sh +8 -4
  407. package/plugins/specweave/hooks/post-increment-change.sh +4 -0
  408. package/plugins/specweave/hooks/post-increment-completion.sh +7 -1
  409. package/plugins/specweave/hooks/post-increment-planning.sh +4 -0
  410. package/plugins/specweave/hooks/post-increment-status-change.sh +4 -0
  411. package/plugins/specweave/hooks/user-prompt-submit.sh +78 -0
  412. package/plugins/specweave/iac-templates/aws-lambda/README.md.hbs +280 -0
  413. package/plugins/specweave/iac-templates/aws-lambda/defaults.json +118 -0
  414. package/plugins/specweave/iac-templates/aws-lambda/environments/dev.defaults.json +46 -0
  415. package/plugins/specweave/iac-templates/aws-lambda/environments/prod.defaults.json +67 -0
  416. package/plugins/specweave/iac-templates/aws-lambda/environments/staging.defaults.json +47 -0
  417. package/plugins/specweave/iac-templates/aws-lambda/main.tf.hbs +241 -0
  418. package/plugins/specweave/iac-templates/aws-lambda/outputs.tf.hbs +61 -0
  419. package/plugins/specweave/iac-templates/aws-lambda/provider.tf.hbs +15 -0
  420. package/plugins/specweave/iac-templates/aws-lambda/variables.tf.hbs +88 -0
  421. package/plugins/specweave/iac-templates/azure-functions/README.md.hbs +315 -0
  422. package/plugins/specweave/iac-templates/azure-functions/defaults.json +65 -0
  423. package/plugins/specweave/iac-templates/azure-functions/environments/dev.defaults.json +30 -0
  424. package/plugins/specweave/iac-templates/azure-functions/environments/prod.defaults.json +34 -0
  425. package/plugins/specweave/iac-templates/azure-functions/environments/staging.defaults.json +31 -0
  426. package/plugins/specweave/iac-templates/azure-functions/iam.tf.hbs +34 -0
  427. package/plugins/specweave/iac-templates/azure-functions/main.tf.hbs +247 -0
  428. package/plugins/specweave/iac-templates/azure-functions/outputs.tf.hbs +72 -0
  429. package/plugins/specweave/iac-templates/azure-functions/provider.tf.hbs +14 -0
  430. package/plugins/specweave/iac-templates/azure-functions/variables.tf.hbs +64 -0
  431. package/plugins/specweave/iac-templates/firebase/README.md.hbs +487 -0
  432. package/plugins/specweave/iac-templates/firebase/defaults.json +55 -0
  433. package/plugins/specweave/iac-templates/firebase/environments/dev.defaults.json +44 -0
  434. package/plugins/specweave/iac-templates/firebase/environments/prod.defaults.json +52 -0
  435. package/plugins/specweave/iac-templates/firebase/environments/staging.defaults.json +43 -0
  436. package/plugins/specweave/iac-templates/firebase/iam.tf.hbs +75 -0
  437. package/plugins/specweave/iac-templates/firebase/main.tf.hbs +297 -0
  438. package/plugins/specweave/iac-templates/firebase/outputs.tf.hbs +67 -0
  439. package/plugins/specweave/iac-templates/firebase/provider.tf.hbs +26 -0
  440. package/plugins/specweave/iac-templates/firebase/variables.tf.hbs +68 -0
  441. package/plugins/specweave/iac-templates/gcp-cloud-functions/README.md.hbs +330 -0
  442. package/plugins/specweave/iac-templates/gcp-cloud-functions/defaults.json +69 -0
  443. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/dev.defaults.json +33 -0
  444. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/prod.defaults.json +40 -0
  445. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/staging.defaults.json +33 -0
  446. package/plugins/specweave/iac-templates/gcp-cloud-functions/iam.tf.hbs +54 -0
  447. package/plugins/specweave/iac-templates/gcp-cloud-functions/main.tf.hbs +211 -0
  448. package/plugins/specweave/iac-templates/gcp-cloud-functions/outputs.tf.hbs +44 -0
  449. package/plugins/specweave/iac-templates/gcp-cloud-functions/provider.tf.hbs +14 -0
  450. package/plugins/specweave/iac-templates/gcp-cloud-functions/variables.tf.hbs +82 -0
  451. package/plugins/specweave/iac-templates/supabase/README.md.hbs +534 -0
  452. package/plugins/specweave/iac-templates/supabase/defaults.json +69 -0
  453. package/plugins/specweave/iac-templates/supabase/environments/dev.defaults.json +55 -0
  454. package/plugins/specweave/iac-templates/supabase/environments/prod.defaults.json +75 -0
  455. package/plugins/specweave/iac-templates/supabase/environments/staging.defaults.json +54 -0
  456. package/plugins/specweave/iac-templates/supabase/iam.tf.hbs +146 -0
  457. package/plugins/specweave/iac-templates/supabase/main.tf.hbs +310 -0
  458. package/plugins/specweave/iac-templates/supabase/outputs.tf.hbs +74 -0
  459. package/plugins/specweave/iac-templates/supabase/provider.tf.hbs +19 -0
  460. package/plugins/specweave/iac-templates/supabase/variables.tf.hbs +78 -0
  461. package/plugins/specweave/knowledge-base/serverless/FRESHNESS.md +69 -0
  462. package/plugins/specweave/knowledge-base/serverless/learning-paths.json +865 -0
  463. package/plugins/specweave/knowledge-base/serverless/platforms/aws-lambda.json +41 -0
  464. package/plugins/specweave/knowledge-base/serverless/platforms/azure-functions.json +41 -0
  465. package/plugins/specweave/knowledge-base/serverless/platforms/firebase.json +46 -0
  466. package/plugins/specweave/knowledge-base/serverless/platforms/gcp-cloud-functions.json +41 -0
  467. package/plugins/specweave/knowledge-base/serverless/platforms/supabase.json +41 -0
  468. package/plugins/specweave/knowledge-base/serverless/schema.json +155 -0
  469. package/plugins/specweave/lib/hooks/auto-transition.js +50 -0
  470. package/plugins/specweave/lib/hooks/auto-transition.ts +84 -0
  471. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +1 -1
  472. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +1 -1
  473. package/plugins/specweave/lib/hooks/sync-living-docs.js +4 -31
  474. package/plugins/specweave/lib/hooks/{sync-living-docs.ts → sync-living-docs.ts.DISABLED} +9 -48
  475. package/plugins/specweave/lib/hooks/translate-file.js +1 -1
  476. package/plugins/specweave/lib/hooks/translate-file.ts +1 -1
  477. package/plugins/specweave/lib/hooks/update-ac-status.js +24 -75
  478. package/plugins/specweave/lib/hooks/update-ac-status.ts +46 -135
  479. package/plugins/specweave/lib/hooks/update-tasks-md.js +115 -3
  480. package/plugins/specweave/lib/hooks/update-tasks-md.ts +182 -10
  481. package/plugins/specweave/lib/utils/validate-dev-setup.sh +133 -0
  482. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -15
  483. package/plugins/specweave/skills/serverless-recommender/SKILL.md +368 -0
  484. package/plugins/specweave/templates/iac/aws-lambda/templates/iam.tf.hbs +137 -0
  485. package/plugins/specweave/templates/iac/aws-lambda/templates/main.tf.hbs +216 -0
  486. package/plugins/specweave-github/lib/IssueStateManager.js +117 -0
  487. package/plugins/specweave-github/lib/IssueStateManager.ts +231 -0
  488. package/plugins/specweave-github/lib/user-story-issue-builder.js +7 -0
  489. package/plugins/specweave-github/lib/user-story-issue-builder.ts +11 -0
  490. package/plugins/specweave-ui/.mcp.json +0 -10
  491. package/plugins/specweave-ui/README.md +26 -26
  492. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +31 -18
  493. package/src/templates/tasks.md.template +51 -33
  494. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +0 -89
  495. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +0 -1
  496. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +0 -226
  497. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +0 -1
  498. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +0 -60
  499. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +0 -1
  500. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +0 -201
  501. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +0 -1
  502. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +0 -42
  503. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +0 -1
  504. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +0 -123
  505. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +0 -1
  506. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +0 -45
  507. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +0 -1
  508. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +0 -132
  509. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +0 -1
  510. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +0 -33
  511. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +0 -1
  512. package/dist/plugins/specweave/lib/hooks/reflection-parser.js +0 -419
  513. package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +0 -1
  514. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +0 -56
  515. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +0 -1
  516. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +0 -239
  517. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +0 -1
  518. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +0 -64
  519. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +0 -1
  520. package/dist/plugins/specweave/lib/hooks/reflection-storage.js +0 -305
  521. package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +0 -1
  522. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +0 -43
  523. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +0 -1
  524. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +0 -203
  525. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +0 -1
  526. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +0 -32
  527. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +0 -1
  528. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +0 -405
  529. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +0 -1
  530. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +0 -59
  531. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +0 -1
  532. package/dist/plugins/specweave/lib/hooks/translate-file.js +0 -350
  533. package/dist/plugins/specweave/lib/hooks/translate-file.js.map +0 -1
  534. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +0 -13
  535. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +0 -1
  536. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +0 -175
  537. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +0 -1
  538. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +0 -164
  539. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +0 -1
  540. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +0 -73
  541. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +0 -1
  542. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +0 -21
  543. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +0 -1
  544. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +0 -162
  545. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +0 -1
  546. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +0 -29
  547. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +0 -1
  548. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +0 -203
  549. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +0 -1
  550. package/dist/src/core/living-docs/spec-distributor.d.ts +0 -180
  551. package/dist/src/core/living-docs/spec-distributor.d.ts.map +0 -1
  552. package/dist/src/core/living-docs/spec-distributor.js +0 -1840
  553. package/dist/src/core/living-docs/spec-distributor.js.map +0 -1
@@ -0,0 +1,216 @@
1
+ # AWS Lambda + API Gateway + DynamoDB Terraform Configuration
2
+ # Generated by SpecWeave Serverless Architecture Intelligence
3
+
4
+ # Lambda Function
5
+ resource "aws_lambda_function" "{{snakeCase functionName}}" {
6
+ filename = "{{functionName}}.zip"
7
+ function_name = "{{functionName}}"
8
+ role = aws_iam_role.lambda_exec.arn
9
+ handler = "{{handler}}"
10
+ runtime = "{{runtime}}"
11
+
12
+ memory_size = {{memorySize}}
13
+ timeout = {{timeout}}
14
+
15
+ environment {
16
+ variables = {
17
+ ENVIRONMENT = "{{environment}}"
18
+ TABLE_NAME = aws_dynamodb_table.{{snakeCase databaseName}}.name
19
+ {{#if customEnvVars}}
20
+ {{#each customEnvVars}}
21
+ {{@key}} = "{{this}}"
22
+ {{/each}}
23
+ {{/if}}
24
+ }
25
+ }
26
+
27
+ {{#if enableVpc}}
28
+ vpc_config {
29
+ subnet_ids = var.subnet_ids
30
+ security_group_ids = [aws_security_group.lambda_sg.id]
31
+ }
32
+ {{/if}}
33
+
34
+ {{#if enableXray}}
35
+ tracing_config {
36
+ mode = "Active"
37
+ }
38
+ {{/if}}
39
+
40
+ tags = {
41
+ Name = "{{functionName}}"
42
+ Environment = "{{environment}}"
43
+ ManagedBy = "Terraform"
44
+ Project = "{{projectName}}"
45
+ }
46
+ }
47
+
48
+ # API Gateway HTTP API
49
+ resource "aws_apigatewayv2_api" "{{snakeCase apiName}}" {
50
+ name = "{{apiName}}"
51
+ protocol_type = "HTTP"
52
+
53
+ cors_configuration {
54
+ allow_origins = {{tfList corsOrigins}}
55
+ allow_methods = ["GET", "POST", "PUT", "DELETE", "OPTIONS"]
56
+ allow_headers = ["content-type", "authorization"]
57
+ max_age = 300
58
+ }
59
+
60
+ tags = {
61
+ Name = "{{apiName}}"
62
+ Environment = "{{environment}}"
63
+ ManagedBy = "Terraform"
64
+ }
65
+ }
66
+
67
+ # API Gateway Stage
68
+ resource "aws_apigatewayv2_stage" "{{snakeCase apiStageName}}" {
69
+ api_id = aws_apigatewayv2_api.{{snakeCase apiName}}.id
70
+ name = "{{apiStageName}}"
71
+ auto_deploy = true
72
+
73
+ access_log_settings {
74
+ destination_arn = aws_cloudwatch_log_group.api_logs.arn
75
+ format = jsonencode({
76
+ requestId = "$context.requestId"
77
+ ip = "$context.identity.sourceIp"
78
+ requestTime = "$context.requestTime"
79
+ httpMethod = "$context.httpMethod"
80
+ routeKey = "$context.routeKey"
81
+ status = "$context.status"
82
+ protocol = "$context.protocol"
83
+ responseLength = "$context.responseLength"
84
+ })
85
+ }
86
+
87
+ tags = {
88
+ Name = "{{apiStageName}}"
89
+ Environment = "{{environment}}"
90
+ ManagedBy = "Terraform"
91
+ }
92
+ }
93
+
94
+ # API Gateway Integration
95
+ resource "aws_apigatewayv2_integration" "lambda" {
96
+ api_id = aws_apigatewayv2_api.{{snakeCase apiName}}.id
97
+
98
+ integration_uri = aws_lambda_function.{{snakeCase functionName}}.invoke_arn
99
+ integration_type = "AWS_PROXY"
100
+ integration_method = "POST"
101
+ }
102
+
103
+ # API Gateway Route - Catch all
104
+ resource "aws_apigatewayv2_route" "proxy" {
105
+ api_id = aws_apigatewayv2_api.{{snakeCase apiName}}.id
106
+ route_key = "$default"
107
+
108
+ target = "integrations/${aws_apigatewayv2_integration.lambda.id}"
109
+ }
110
+
111
+ # Lambda permission for API Gateway
112
+ resource "aws_lambda_permission" "api_gw" {
113
+ statement_id = "AllowExecutionFromAPIGateway"
114
+ action = "lambda:InvokeFunction"
115
+ function_name = aws_lambda_function.{{snakeCase functionName}}.function_name
116
+ principal = "apigateway.amazonaws.com"
117
+
118
+ source_arn = "${aws_apigatewayv2_api.{{snakeCase apiName}}.execution_arn}/*/*"
119
+ }
120
+
121
+ # DynamoDB Table
122
+ resource "aws_dynamodb_table" "{{snakeCase databaseName}}" {
123
+ name = "{{databaseName}}"
124
+ billing_mode = "{{#if eq environment "prod"}}PROVISIONED{{else}}PAY_PER_REQUEST{{/if}}"
125
+ hash_key = "{{primaryKey}}"
126
+ {{#if sortKey}}
127
+ range_key = "{{sortKey}}"
128
+ {{/if}}
129
+
130
+ {{#if eq environment "prod"}}
131
+ read_capacity = 5
132
+ write_capacity = 5
133
+ {{/if}}
134
+
135
+ attribute {
136
+ name = "{{primaryKey}}"
137
+ type = "S"
138
+ }
139
+
140
+ {{#if sortKey}}
141
+ attribute {
142
+ name = "{{sortKey}}"
143
+ type = "S"
144
+ }
145
+ {{/if}}
146
+
147
+ {{#if enableEncryption}}
148
+ server_side_encryption {
149
+ enabled = true
150
+ kms_key_arn = var.kms_key_arn
151
+ }
152
+ {{/if}}
153
+
154
+ {{#if enablePointInTimeRecovery}}
155
+ point_in_time_recovery {
156
+ enabled = true
157
+ }
158
+ {{/if}}
159
+
160
+ {{#if enableStreams}}
161
+ stream_enabled = true
162
+ stream_view_type = "NEW_AND_OLD_IMAGES"
163
+ {{/if}}
164
+
165
+ tags = {
166
+ Name = "{{databaseName}}"
167
+ Environment = "{{environment}}"
168
+ ManagedBy = "Terraform"
169
+ }
170
+ }
171
+
172
+ # CloudWatch Log Group for API Gateway
173
+ resource "aws_cloudwatch_log_group" "api_logs" {
174
+ name = "/aws/apigateway/{{apiName}}-{{environment}}"
175
+ retention_in_days = {{logRetentionDays}}
176
+
177
+ tags = {
178
+ Name = "{{apiName}}-logs"
179
+ Environment = "{{environment}}"
180
+ ManagedBy = "Terraform"
181
+ }
182
+ }
183
+
184
+ # CloudWatch Log Group for Lambda
185
+ resource "aws_cloudwatch_log_group" "lambda_logs" {
186
+ name = "/aws/lambda/{{functionName}}"
187
+ retention_in_days = {{logRetentionDays}}
188
+
189
+ tags = {
190
+ Name = "{{functionName}}-logs"
191
+ Environment = "{{environment}}"
192
+ ManagedBy = "Terraform"
193
+ }
194
+ }
195
+
196
+ {{#if enableVpc}}
197
+ # Security Group for Lambda (if VPC enabled)
198
+ resource "aws_security_group" "lambda_sg" {
199
+ name = "{{functionName}}-sg"
200
+ description = "Security group for Lambda function {{functionName}}"
201
+ vpc_id = var.vpc_id
202
+
203
+ egress {
204
+ from_port = 0
205
+ to_port = 0
206
+ protocol = "-1"
207
+ cidr_blocks = ["0.0.0.0/0"]
208
+ }
209
+
210
+ tags = {
211
+ Name = "{{functionName}}-sg"
212
+ Environment = "{{environment}}"
213
+ ManagedBy = "Terraform"
214
+ }
215
+ }
216
+ {{/if}}
@@ -0,0 +1,117 @@
1
+ class IssueStateManager {
2
+ /**
3
+ * Determine issue state based on progress
4
+ *
5
+ * @param progress - Progress information
6
+ * @param currentState - Current issue state
7
+ * @returns State change result
8
+ */
9
+ static determineState(progress, currentState) {
10
+ const result = {
11
+ previousState: currentState,
12
+ newState: currentState,
13
+ changed: false,
14
+ labelsAdded: [],
15
+ labelsRemoved: []
16
+ };
17
+ if (progress.isComplete) {
18
+ result.newState = "closed";
19
+ result.labelsRemoved.push("in-progress");
20
+ } else if (progress.overallPercentage > 0) {
21
+ result.newState = "open";
22
+ result.labelsAdded.push("in-progress");
23
+ } else {
24
+ result.newState = "open";
25
+ result.labelsRemoved.push("in-progress");
26
+ }
27
+ result.changed = result.newState !== result.previousState;
28
+ return result;
29
+ }
30
+ /**
31
+ * Calculate progress from acceptance criteria and tasks
32
+ *
33
+ * @param acs - Acceptance criteria
34
+ * @param tasks - Tasks
35
+ * @returns Progress information
36
+ */
37
+ static calculateProgress(acs, tasks) {
38
+ const totalAcs = acs.length;
39
+ const completedAcs = acs.filter((ac) => ac.completed).length;
40
+ const acPercentage = totalAcs > 0 ? Math.round(completedAcs / totalAcs * 100) : 0;
41
+ const totalTasks = tasks.length;
42
+ const completedTasks = tasks.filter((t) => t.completed).length;
43
+ const taskPercentage = totalTasks > 0 ? Math.round(completedTasks / totalTasks * 100) : 0;
44
+ const overallPercentage = totalTasks > 0 ? Math.round((acPercentage + taskPercentage) / 2) : acPercentage;
45
+ const isComplete = totalAcs > 0 && completedAcs === totalAcs && (totalTasks === 0 || completedTasks === totalTasks);
46
+ return {
47
+ totalAcs,
48
+ completedAcs,
49
+ acPercentage,
50
+ totalTasks,
51
+ completedTasks,
52
+ taskPercentage,
53
+ overallPercentage,
54
+ isComplete
55
+ };
56
+ }
57
+ /**
58
+ * Format progress as markdown
59
+ *
60
+ * @param progress - Progress information
61
+ * @returns Markdown string
62
+ */
63
+ static formatProgressMarkdown(progress) {
64
+ const sections = [];
65
+ sections.push("## Progress");
66
+ sections.push("");
67
+ sections.push(`**Acceptance Criteria**: ${progress.completedAcs}/${progress.totalAcs} (${progress.acPercentage}%)`);
68
+ if (progress.totalTasks > 0) {
69
+ sections.push(`**Tasks**: ${progress.completedTasks}/${progress.totalTasks} (${progress.taskPercentage}%)`);
70
+ }
71
+ sections.push(`**Overall**: ${progress.overallPercentage}%`);
72
+ const progressBar = this.generateProgressBar(progress.overallPercentage);
73
+ sections.push("");
74
+ sections.push(progressBar);
75
+ return sections.join("\n");
76
+ }
77
+ /**
78
+ * Generate ASCII progress bar
79
+ *
80
+ * @param percentage - Completion percentage (0-100)
81
+ * @returns Progress bar string
82
+ */
83
+ static generateProgressBar(percentage) {
84
+ const total = 20;
85
+ const filled = Math.round(percentage / 100 * total);
86
+ const empty = total - filled;
87
+ const bar = "\u2588".repeat(filled) + "\u2591".repeat(empty);
88
+ return `\`${bar}\` ${percentage}%`;
89
+ }
90
+ /**
91
+ * Build GitHub CLI command to update issue state
92
+ *
93
+ * @param issueNumber - GitHub issue number
94
+ * @param state - New state
95
+ * @param labelsToAdd - Labels to add
96
+ * @param labelsToRemove - Labels to remove
97
+ * @returns gh CLI command
98
+ */
99
+ static buildGitHubCommand(issueNumber, state, labelsToAdd, labelsToRemove) {
100
+ const commands = [];
101
+ if (state === "closed") {
102
+ commands.push(`gh issue close ${issueNumber}`);
103
+ } else {
104
+ commands.push(`gh issue reopen ${issueNumber}`);
105
+ }
106
+ if (labelsToAdd.length > 0) {
107
+ commands.push(`gh issue edit ${issueNumber} --add-label "${labelsToAdd.join(",")}"`);
108
+ }
109
+ if (labelsToRemove.length > 0) {
110
+ commands.push(`gh issue edit ${issueNumber} --remove-label "${labelsToRemove.join(",")}"`);
111
+ }
112
+ return commands.join(" && ");
113
+ }
114
+ }
115
+ export {
116
+ IssueStateManager
117
+ };
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Issue State Manager - Auto-update GitHub issue state based on progress
3
+ *
4
+ * Rules:
5
+ * - 0% complete → State = open
6
+ * - 1-99% complete → State = open, label = in-progress
7
+ * - 100% complete → State = closed
8
+ */
9
+
10
+ /**
11
+ * Issue state
12
+ */
13
+ export type IssueState = 'open' | 'closed';
14
+
15
+ /**
16
+ * State change result
17
+ */
18
+ export interface StateChangeResult {
19
+ /** Previous state */
20
+ previousState: IssueState;
21
+
22
+ /** New state */
23
+ newState: IssueState;
24
+
25
+ /** State changed */
26
+ changed: boolean;
27
+
28
+ /** Labels added */
29
+ labelsAdded: string[];
30
+
31
+ /** Labels removed */
32
+ labelsRemoved: string[];
33
+ }
34
+
35
+ /**
36
+ * Progress info
37
+ */
38
+ export interface ProgressInfo {
39
+ /** Total ACs */
40
+ totalAcs: number;
41
+
42
+ /** Completed ACs */
43
+ completedAcs: number;
44
+
45
+ /** AC completion percentage */
46
+ acPercentage: number;
47
+
48
+ /** Total tasks */
49
+ totalTasks: number;
50
+
51
+ /** Completed tasks */
52
+ completedTasks: number;
53
+
54
+ /** Task completion percentage */
55
+ taskPercentage: number;
56
+
57
+ /** Overall completion percentage */
58
+ overallPercentage: number;
59
+
60
+ /** Is 100% complete */
61
+ isComplete: boolean;
62
+ }
63
+
64
+ /**
65
+ * IssueStateManager - Manages GitHub issue state
66
+ */
67
+ export class IssueStateManager {
68
+ /**
69
+ * Determine issue state based on progress
70
+ *
71
+ * @param progress - Progress information
72
+ * @param currentState - Current issue state
73
+ * @returns State change result
74
+ */
75
+ static determineState(
76
+ progress: ProgressInfo,
77
+ currentState: IssueState
78
+ ): StateChangeResult {
79
+ const result: StateChangeResult = {
80
+ previousState: currentState,
81
+ newState: currentState,
82
+ changed: false,
83
+ labelsAdded: [],
84
+ labelsRemoved: []
85
+ };
86
+
87
+ // Determine new state based on progress
88
+ if (progress.isComplete) {
89
+ // 100% complete → Close issue
90
+ result.newState = 'closed';
91
+ result.labelsRemoved.push('in-progress');
92
+ } else if (progress.overallPercentage > 0) {
93
+ // 1-99% complete → Open with in-progress label
94
+ result.newState = 'open';
95
+ result.labelsAdded.push('in-progress');
96
+ } else {
97
+ // 0% complete → Open without in-progress label
98
+ result.newState = 'open';
99
+ result.labelsRemoved.push('in-progress');
100
+ }
101
+
102
+ // Check if state changed
103
+ result.changed = result.newState !== result.previousState;
104
+
105
+ return result;
106
+ }
107
+
108
+ /**
109
+ * Calculate progress from acceptance criteria and tasks
110
+ *
111
+ * @param acs - Acceptance criteria
112
+ * @param tasks - Tasks
113
+ * @returns Progress information
114
+ */
115
+ static calculateProgress(
116
+ acs: Array<{ completed: boolean }>,
117
+ tasks: Array<{ completed: boolean }>
118
+ ): ProgressInfo {
119
+ const totalAcs = acs.length;
120
+ const completedAcs = acs.filter(ac => ac.completed).length;
121
+ const acPercentage = totalAcs > 0 ? Math.round((completedAcs / totalAcs) * 100) : 0;
122
+
123
+ const totalTasks = tasks.length;
124
+ const completedTasks = tasks.filter(t => t.completed).length;
125
+ const taskPercentage = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;
126
+
127
+ // Overall percentage: average of AC and Task percentages
128
+ // If no tasks, use AC percentage only
129
+ const overallPercentage = totalTasks > 0
130
+ ? Math.round((acPercentage + taskPercentage) / 2)
131
+ : acPercentage;
132
+
133
+ const isComplete = totalAcs > 0 && completedAcs === totalAcs &&
134
+ (totalTasks === 0 || completedTasks === totalTasks);
135
+
136
+ return {
137
+ totalAcs,
138
+ completedAcs,
139
+ acPercentage,
140
+ totalTasks,
141
+ completedTasks,
142
+ taskPercentage,
143
+ overallPercentage,
144
+ isComplete
145
+ };
146
+ }
147
+
148
+ /**
149
+ * Format progress as markdown
150
+ *
151
+ * @param progress - Progress information
152
+ * @returns Markdown string
153
+ */
154
+ static formatProgressMarkdown(progress: ProgressInfo): string {
155
+ const sections: string[] = [];
156
+
157
+ sections.push('## Progress');
158
+ sections.push('');
159
+
160
+ // AC progress
161
+ sections.push(`**Acceptance Criteria**: ${progress.completedAcs}/${progress.totalAcs} (${progress.acPercentage}%)`);
162
+
163
+ // Task progress
164
+ if (progress.totalTasks > 0) {
165
+ sections.push(`**Tasks**: ${progress.completedTasks}/${progress.totalTasks} (${progress.taskPercentage}%)`);
166
+ }
167
+
168
+ // Overall progress
169
+ sections.push(`**Overall**: ${progress.overallPercentage}%`);
170
+
171
+ // Progress bar
172
+ const progressBar = this.generateProgressBar(progress.overallPercentage);
173
+ sections.push('');
174
+ sections.push(progressBar);
175
+
176
+ return sections.join('\n');
177
+ }
178
+
179
+ /**
180
+ * Generate ASCII progress bar
181
+ *
182
+ * @param percentage - Completion percentage (0-100)
183
+ * @returns Progress bar string
184
+ */
185
+ private static generateProgressBar(percentage: number): string {
186
+ const total = 20;
187
+ const filled = Math.round((percentage / 100) * total);
188
+ const empty = total - filled;
189
+
190
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
191
+
192
+ return `\`${bar}\` ${percentage}%`;
193
+ }
194
+
195
+ /**
196
+ * Build GitHub CLI command to update issue state
197
+ *
198
+ * @param issueNumber - GitHub issue number
199
+ * @param state - New state
200
+ * @param labelsToAdd - Labels to add
201
+ * @param labelsToRemove - Labels to remove
202
+ * @returns gh CLI command
203
+ */
204
+ static buildGitHubCommand(
205
+ issueNumber: number,
206
+ state: IssueState,
207
+ labelsToAdd: string[],
208
+ labelsToRemove: string[]
209
+ ): string {
210
+ const commands: string[] = [];
211
+
212
+ // Update state
213
+ if (state === 'closed') {
214
+ commands.push(`gh issue close ${issueNumber}`);
215
+ } else {
216
+ commands.push(`gh issue reopen ${issueNumber}`);
217
+ }
218
+
219
+ // Add labels
220
+ if (labelsToAdd.length > 0) {
221
+ commands.push(`gh issue edit ${issueNumber} --add-label "${labelsToAdd.join(',')}"`);
222
+ }
223
+
224
+ // Remove labels
225
+ if (labelsToRemove.length > 0) {
226
+ commands.push(`gh issue edit ${issueNumber} --remove-label "${labelsToRemove.join(',')}"`);
227
+ }
228
+
229
+ return commands.join(' && ');
230
+ }
231
+ }
@@ -2,6 +2,7 @@ import { readFile } from "fs/promises";
2
2
  import { existsSync } from "fs";
3
3
  import * as path from "path";
4
4
  import * as yaml from "yaml";
5
+ import { IssueStateManager } from "./IssueStateManager.js";
5
6
  class UserStoryIssueBuilder {
6
7
  constructor(userStoryPath, projectRoot, featureId, repoInfo) {
7
8
  this.userStoryPath = userStoryPath;
@@ -206,6 +207,10 @@ class UserStoryIssueBuilder {
206
207
  */
207
208
  buildBody(data) {
208
209
  const sections = [];
210
+ const progress = IssueStateManager.calculateProgress(
211
+ data.acceptanceCriteria,
212
+ data.tasks
213
+ );
209
214
  sections.push(`**Feature**: ${this.featureId}`);
210
215
  sections.push(`**Status**: ${this.capitalize(data.frontmatter.status)}`);
211
216
  sections.push(`**Priority**: ${data.frontmatter.priority || "P2"}`);
@@ -213,6 +218,8 @@ class UserStoryIssueBuilder {
213
218
  sections.push(`**Project**: ${data.frontmatter.project}`);
214
219
  }
215
220
  sections.push("");
221
+ sections.push(IssueStateManager.formatProgressMarkdown(progress));
222
+ sections.push("");
216
223
  if (data.userStoryStatement) {
217
224
  sections.push("## User Story");
218
225
  sections.push("");
@@ -17,6 +17,7 @@ import { readFile } from 'fs/promises';
17
17
  import { existsSync } from 'fs';
18
18
  import * as path from 'path';
19
19
  import * as yaml from 'yaml';
20
+ import { IssueStateManager, ProgressInfo } from './IssueStateManager.js';
20
21
 
21
22
  interface UserStoryFrontmatter {
22
23
  id: string;
@@ -356,6 +357,12 @@ export class UserStoryIssueBuilder {
356
357
  }): string {
357
358
  const sections: string[] = [];
358
359
 
360
+ // Calculate progress
361
+ const progress = IssueStateManager.calculateProgress(
362
+ data.acceptanceCriteria,
363
+ data.tasks
364
+ );
365
+
359
366
  // Header with metadata
360
367
  sections.push(`**Feature**: ${this.featureId}`);
361
368
  sections.push(`**Status**: ${this.capitalize(data.frontmatter.status)}`);
@@ -366,6 +373,10 @@ export class UserStoryIssueBuilder {
366
373
  }
367
374
  sections.push('');
368
375
 
376
+ // Progress section (NEW)
377
+ sections.push(IssueStateManager.formatProgressMarkdown(progress));
378
+ sections.push('');
379
+
369
380
  // User Story statement
370
381
  if (data.userStoryStatement) {
371
382
  sections.push('## User Story');
@@ -5,16 +5,6 @@
5
5
  "args": ["-y", "@playwright/mcp@latest"],
6
6
  "description": "Local Playwright browser automation - PRIMARY choice for E2E testing and web interaction",
7
7
  "optional": false
8
- },
9
- "browserbase": {
10
- "command": "npx",
11
- "args": ["-y", "@browserbasehq/mcp-server-browserbase"],
12
- "env": {
13
- "BROWSERBASE_API_KEY": "${BROWSERBASE_API_KEY}",
14
- "BROWSERBASE_PROJECT_ID": "${BROWSERBASE_PROJECT_ID}"
15
- },
16
- "description": "Cloud browser automation for running Playwright tests in scalable infrastructure - FALLBACK option",
17
- "optional": true
18
8
  }
19
9
  }
20
10
  }