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,704 @@
1
+ /**
2
+ * Phase Detector - Auto-detect current workflow phase
3
+ *
4
+ * Analyzes user prompts, commands, file states, and context to determine
5
+ * the current phase of the SpecWeave development workflow.
6
+ *
7
+ * Detection Algorithm:
8
+ * - Keyword Analysis (40% weight): Match keywords in user prompt
9
+ * - Command Analysis (30% weight): Analyze recent command history
10
+ * - Context Analysis (20% weight): Check file states and increment status
11
+ * - Hint Analysis (10% weight): Detect explicit user hints
12
+ *
13
+ * Part of increment 0039: Ultra-Smart Next Command (US-001)
14
+ */
15
+ import { WorkflowPhase, EvidenceType } from './types.js';
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import { MetadataManager } from '../increment/metadata-manager.js';
19
+ /**
20
+ * Default configuration for PhaseDetector
21
+ */
22
+ const DEFAULT_CONFIG = {
23
+ keywordWeight: 0.4,
24
+ commandWeight: 0.3,
25
+ contextWeight: 0.2,
26
+ hintWeight: 0.1,
27
+ confidenceThreshold: 0.6,
28
+ includeAlternatives: true
29
+ };
30
+ /**
31
+ * Keyword mappings for each workflow phase
32
+ */
33
+ const KEYWORD_MAPPINGS = [
34
+ // SPEC_WRITING phase
35
+ {
36
+ phase: WorkflowPhase.SPEC_WRITING,
37
+ keywords: [
38
+ 'spec', 'specification', 'requirements', 'user story', 'user stories',
39
+ 'acceptance criteria', 'AC', 'functional requirement', 'non-functional',
40
+ 'define', 'document', 'describe', 'outline', 'detail',
41
+ 'what should', 'how should', 'requirements gathering', 'product requirements',
42
+ 'write spec', 'update spec', 'edit spec', 'create spec'
43
+ ],
44
+ weight: 1.0
45
+ },
46
+ // PLAN_GENERATION phase
47
+ {
48
+ phase: WorkflowPhase.PLAN_GENERATION,
49
+ keywords: [
50
+ 'plan', 'architecture', 'design', 'approach', 'strategy',
51
+ 'technical design', 'system design', 'component design',
52
+ 'how to implement', 'implementation plan', 'technical approach',
53
+ 'architect', 'module', 'component', 'service',
54
+ 'generate plan', 'create plan', 'plan.md'
55
+ ],
56
+ weight: 1.0
57
+ },
58
+ // TASK_BREAKDOWN phase
59
+ {
60
+ phase: WorkflowPhase.TASK_BREAKDOWN,
61
+ keywords: [
62
+ 'task', 'tasks', 'todo', 'checklist', 'breakdown', 'split',
63
+ 'divide', 'organize', 'prioritize', 'order',
64
+ 'task list', 'work items', 'backlog items',
65
+ 'create tasks', 'generate tasks', 'tasks.md', 'task breakdown'
66
+ ],
67
+ weight: 1.0
68
+ },
69
+ // IMPLEMENTATION phase
70
+ {
71
+ phase: WorkflowPhase.IMPLEMENTATION,
72
+ keywords: [
73
+ 'implement', 'code', 'develop', 'build', 'create', 'add',
74
+ 'write code', 'programming', 'coding', 'development',
75
+ 'feature', 'functionality', 'component implementation',
76
+ 'let\'s build', 'let\'s implement', 'let\'s code', 'let\'s develop',
77
+ 'start working', 'begin implementation', 'write', 'fix bug', 'bug fix'
78
+ ],
79
+ weight: 1.2 // Slightly higher weight as implementation is common
80
+ },
81
+ // TESTING phase
82
+ {
83
+ phase: WorkflowPhase.TESTING,
84
+ keywords: [
85
+ 'test', 'testing', 'unit test', 'integration test', 'e2e test',
86
+ 'test case', 'test suite', 'coverage', 'tdd', 'test-driven',
87
+ 'write tests', 'run tests', 'test coverage', 'jest', 'mocha',
88
+ 'assertions', 'expect', 'verify', 'validate tests',
89
+ 'test plan', 'test strategy'
90
+ ],
91
+ weight: 1.1
92
+ },
93
+ // DOCUMENTATION phase
94
+ {
95
+ phase: WorkflowPhase.DOCUMENTATION,
96
+ keywords: [
97
+ 'document', 'documentation', 'docs', 'readme', 'guide',
98
+ 'api documentation', 'user guide', 'developer guide',
99
+ 'write docs', 'update docs', 'sync docs', 'living docs',
100
+ 'markdown', 'comments', 'jsdoc', 'docstring'
101
+ ],
102
+ weight: 0.9
103
+ },
104
+ // REVIEW phase
105
+ {
106
+ phase: WorkflowPhase.REVIEW,
107
+ keywords: [
108
+ 'review', 'code review', 'qa', 'quality', 'validate', 'check',
109
+ 'quality assurance', 'quality check', 'peer review',
110
+ 'inspect', 'audit', 'verify quality', 'quality gate',
111
+ 'pull request', 'pr', 'merge request', 'mr'
112
+ ],
113
+ weight: 0.9
114
+ },
115
+ // COMPLETION phase
116
+ {
117
+ phase: WorkflowPhase.COMPLETION,
118
+ keywords: [
119
+ 'done', 'complete', 'finish', 'close', 'wrap up', 'finalize',
120
+ 'completed', 'finished', 'all done', 'ready to close',
121
+ 'increment done', 'increment complete', 'archive',
122
+ 'mark as done', 'mark complete', 'close increment'
123
+ ],
124
+ weight: 1.0
125
+ }
126
+ ];
127
+ /**
128
+ * Command mappings for each workflow phase
129
+ */
130
+ const COMMAND_MAPPINGS = [
131
+ // SPEC_WRITING
132
+ {
133
+ phase: WorkflowPhase.SPEC_WRITING,
134
+ commandPattern: '/specweave:increment',
135
+ weight: 1.2
136
+ },
137
+ {
138
+ phase: WorkflowPhase.SPEC_WRITING,
139
+ commandPattern: '/specweave:validate',
140
+ weight: 0.8
141
+ },
142
+ // PLAN_GENERATION
143
+ {
144
+ phase: WorkflowPhase.PLAN_GENERATION,
145
+ commandPattern: '/specweave:plan',
146
+ weight: 1.5
147
+ },
148
+ // IMPLEMENTATION
149
+ {
150
+ phase: WorkflowPhase.IMPLEMENTATION,
151
+ commandPattern: '/specweave:do',
152
+ weight: 1.5
153
+ },
154
+ {
155
+ phase: WorkflowPhase.IMPLEMENTATION,
156
+ commandPattern: '/specweave:progress',
157
+ weight: 1.0
158
+ },
159
+ // TESTING
160
+ {
161
+ phase: WorkflowPhase.TESTING,
162
+ commandPattern: '/specweave:test',
163
+ weight: 1.3
164
+ },
165
+ {
166
+ phase: WorkflowPhase.TESTING,
167
+ commandPattern: 'npm test',
168
+ weight: 1.2
169
+ },
170
+ {
171
+ phase: WorkflowPhase.TESTING,
172
+ commandPattern: 'jest',
173
+ weight: 1.2
174
+ },
175
+ // DOCUMENTATION
176
+ {
177
+ phase: WorkflowPhase.DOCUMENTATION,
178
+ commandPattern: '/specweave:sync-docs',
179
+ weight: 1.4
180
+ },
181
+ // REVIEW
182
+ {
183
+ phase: WorkflowPhase.REVIEW,
184
+ commandPattern: '/specweave:qa',
185
+ weight: 1.3
186
+ },
187
+ // COMPLETION
188
+ {
189
+ phase: WorkflowPhase.COMPLETION,
190
+ commandPattern: '/specweave:done',
191
+ weight: 1.5
192
+ }
193
+ ];
194
+ /**
195
+ * PhaseDetector - Detect current workflow phase
196
+ */
197
+ export class PhaseDetector {
198
+ constructor(config = {}) {
199
+ this.DEFAULT_CACHE_TTL = 5000; // 5 seconds
200
+ // Performance tracking
201
+ this.detectionCount = 0;
202
+ this.cacheHits = 0;
203
+ this.cacheMisses = 0;
204
+ this.totalDetectionTime = 0;
205
+ this.config = { ...DEFAULT_CONFIG, ...config };
206
+ this.fileStateCache = new Map();
207
+ }
208
+ /**
209
+ * Get performance statistics
210
+ */
211
+ getPerformanceStats() {
212
+ return {
213
+ detectionCount: this.detectionCount,
214
+ cacheHits: this.cacheHits,
215
+ cacheMisses: this.cacheMisses,
216
+ cacheHitRate: this.cacheHits / Math.max(this.cacheHits + this.cacheMisses, 1),
217
+ averageDetectionTime: this.totalDetectionTime / Math.max(this.detectionCount, 1)
218
+ };
219
+ }
220
+ /**
221
+ * Reset performance statistics
222
+ */
223
+ resetPerformanceStats() {
224
+ this.detectionCount = 0;
225
+ this.cacheHits = 0;
226
+ this.cacheMisses = 0;
227
+ this.totalDetectionTime = 0;
228
+ }
229
+ /**
230
+ * Clear the file state cache
231
+ */
232
+ clearCache() {
233
+ this.fileStateCache.clear();
234
+ }
235
+ /**
236
+ * Get cached file states if available and not expired
237
+ */
238
+ getCachedFileStates(incrementDir) {
239
+ const cached = this.fileStateCache.get(incrementDir);
240
+ if (!cached) {
241
+ this.cacheMisses++;
242
+ return null;
243
+ }
244
+ const now = Date.now();
245
+ if (now - cached.timestamp > cached.ttl) {
246
+ // Cache expired
247
+ this.fileStateCache.delete(incrementDir);
248
+ this.cacheMisses++;
249
+ return null;
250
+ }
251
+ this.cacheHits++;
252
+ return cached.states;
253
+ }
254
+ /**
255
+ * Cache file states for future use
256
+ */
257
+ cacheFileStates(incrementDir, states) {
258
+ this.fileStateCache.set(incrementDir, {
259
+ states,
260
+ timestamp: Date.now(),
261
+ ttl: this.DEFAULT_CACHE_TTL
262
+ });
263
+ }
264
+ /**
265
+ * Detect the current workflow phase from context
266
+ */
267
+ async detect(context) {
268
+ const startTime = Date.now();
269
+ const evidence = [];
270
+ // 1. Keyword Analysis (40% weight)
271
+ const keywordEvidence = this.analyzeKeywords(context.userPrompt);
272
+ evidence.push(...keywordEvidence);
273
+ // 2. Command Analysis (30% weight)
274
+ if (context.recentCommands && context.recentCommands.length > 0) {
275
+ const commandEvidence = this.analyzeCommands(context.recentCommands);
276
+ evidence.push(...commandEvidence);
277
+ }
278
+ // 3. Context Analysis (20% weight)
279
+ const contextEvidence = await this.analyzeContext(context);
280
+ evidence.push(...contextEvidence);
281
+ // 4. Hint Analysis (10% weight)
282
+ if (context.explicitHint) {
283
+ const hintEvidence = this.analyzeHint(context.explicitHint);
284
+ evidence.push(...hintEvidence);
285
+ }
286
+ // Calculate phase scores
287
+ const phaseScores = this.calculatePhaseScores(evidence);
288
+ // Get top phase and alternatives
289
+ const sortedPhases = Object.entries(phaseScores)
290
+ .map(([phase, score]) => ({ phase: phase, score }))
291
+ .sort((a, b) => b.score - a.score);
292
+ const topPhase = sortedPhases[0];
293
+ const alternatives = sortedPhases
294
+ .slice(1, 4) // Top 3 alternatives
295
+ .map(p => ({
296
+ phase: p.phase,
297
+ confidence: p.score,
298
+ reason: `Score: ${p.score.toFixed(2)} (lower than primary phase)`
299
+ }));
300
+ // Generate suggestion
301
+ const suggestion = this.generateSuggestion(topPhase.phase, topPhase.score);
302
+ // Track performance
303
+ const elapsedTime = Date.now() - startTime;
304
+ this.detectionCount++;
305
+ this.totalDetectionTime += elapsedTime;
306
+ return {
307
+ phase: topPhase.phase,
308
+ confidence: topPhase.score,
309
+ evidence: evidence.filter(e => e.weight > 0), // Filter out zero-weight evidence
310
+ alternatives: this.config.includeAlternatives ? alternatives : [],
311
+ suggestedCommand: suggestion?.command,
312
+ suggestionReason: suggestion?.reason
313
+ };
314
+ }
315
+ /**
316
+ * Analyze keywords in user prompt
317
+ */
318
+ analyzeKeywords(userPrompt) {
319
+ const evidence = [];
320
+ const promptLower = userPrompt.toLowerCase();
321
+ for (const mapping of KEYWORD_MAPPINGS) {
322
+ const matchedKeywords = [];
323
+ for (const keyword of mapping.keywords) {
324
+ const keywordLower = keyword.toLowerCase();
325
+ if (promptLower.includes(keywordLower)) {
326
+ matchedKeywords.push(keyword);
327
+ }
328
+ }
329
+ if (matchedKeywords.length > 0) {
330
+ // Weight = (base weight) * (mapping weight) * (number of matches)
331
+ const baseWeight = this.config.keywordWeight;
332
+ const weight = baseWeight * (mapping.weight || 1.0) * Math.min(matchedKeywords.length, 3) / 3;
333
+ evidence.push({
334
+ type: EvidenceType.KEYWORD,
335
+ description: `Keywords found: ${matchedKeywords.join(', ')}`,
336
+ weight,
337
+ source: `keyword: ${matchedKeywords[0]}`
338
+ });
339
+ }
340
+ }
341
+ return evidence;
342
+ }
343
+ /**
344
+ * Analyze recent command history
345
+ */
346
+ analyzeCommands(recentCommands) {
347
+ const evidence = [];
348
+ // Most recent command has highest weight
349
+ const weights = [1.0, 0.7, 0.5, 0.3, 0.2]; // Decay for older commands
350
+ for (let i = 0; i < Math.min(recentCommands.length, 5); i++) {
351
+ const command = recentCommands[i];
352
+ const recencyWeight = weights[i];
353
+ for (const mapping of COMMAND_MAPPINGS) {
354
+ if (command.includes(mapping.commandPattern)) {
355
+ const baseWeight = this.config.commandWeight;
356
+ const weight = baseWeight * (mapping.weight || 1.0) * recencyWeight;
357
+ evidence.push({
358
+ type: EvidenceType.COMMAND,
359
+ description: `Recent command: ${command}`,
360
+ weight,
361
+ source: `command: ${mapping.commandPattern}`
362
+ });
363
+ }
364
+ }
365
+ }
366
+ return evidence;
367
+ }
368
+ /**
369
+ * Analyze explicit user hint
370
+ */
371
+ analyzeHint(hint) {
372
+ const evidence = [];
373
+ const hintLower = hint.toLowerCase();
374
+ // Check for phase names directly mentioned
375
+ for (const phase of Object.values(WorkflowPhase)) {
376
+ if (hintLower.includes(phase) || hintLower.includes(phase.replace('-', ' '))) {
377
+ evidence.push({
378
+ type: EvidenceType.USER_HINT,
379
+ description: `Explicit phase hint: ${phase}`,
380
+ weight: this.config.hintWeight * 2.0, // Strong signal
381
+ source: `hint: ${phase}`
382
+ });
383
+ }
384
+ }
385
+ return evidence;
386
+ }
387
+ /**
388
+ * Analyze context (file states and increment status)
389
+ */
390
+ async analyzeContext(context) {
391
+ const evidence = [];
392
+ // Determine working directory
393
+ const workingDir = context.workingDirectory || process.cwd();
394
+ // Check if we're in a SpecWeave project
395
+ const specweaveDir = path.join(workingDir, '.specweave');
396
+ if (!fs.existsSync(specweaveDir)) {
397
+ // Not in a SpecWeave project, no context evidence
398
+ return evidence;
399
+ }
400
+ // If incrementId provided, analyze increment-specific context
401
+ if (context.incrementId) {
402
+ const incrementDir = path.join(specweaveDir, 'increments', context.incrementId);
403
+ if (fs.existsSync(incrementDir)) {
404
+ // Analyze file states
405
+ const fileStates = this.getFileStates(incrementDir);
406
+ const fileEvidence = this.analyzeFileStates(fileStates);
407
+ evidence.push(...fileEvidence);
408
+ // Analyze increment metadata
409
+ try {
410
+ const metadata = MetadataManager.read(context.incrementId);
411
+ const statusEvidence = this.analyzeIncrementStatus(metadata.status);
412
+ evidence.push(...statusEvidence);
413
+ }
414
+ catch (error) {
415
+ // Metadata not found or invalid, skip status evidence
416
+ }
417
+ }
418
+ }
419
+ return evidence;
420
+ }
421
+ /**
422
+ * Get file states for key increment files (with caching)
423
+ */
424
+ getFileStates(incrementDir) {
425
+ // Check cache first
426
+ const cached = this.getCachedFileStates(incrementDir);
427
+ if (cached) {
428
+ return cached;
429
+ }
430
+ // Cache miss, compute file states
431
+ const files = ['spec.md', 'plan.md', 'tasks.md'];
432
+ const states = [];
433
+ for (const file of files) {
434
+ const filePath = path.join(incrementDir, file);
435
+ const exists = fs.existsSync(filePath);
436
+ if (exists) {
437
+ const stats = fs.statSync(filePath);
438
+ const isEmpty = stats.size === 0;
439
+ states.push({
440
+ path: file,
441
+ exists: true,
442
+ empty: isEmpty,
443
+ lastModified: stats.mtime
444
+ });
445
+ }
446
+ else {
447
+ states.push({
448
+ path: file,
449
+ exists: false
450
+ });
451
+ }
452
+ }
453
+ // Cache the result
454
+ this.cacheFileStates(incrementDir, states);
455
+ return states;
456
+ }
457
+ /**
458
+ * Analyze file states to determine likely phase
459
+ */
460
+ analyzeFileStates(fileStates) {
461
+ const evidence = [];
462
+ const specExists = fileStates.find(f => f.path === 'spec.md')?.exists || false;
463
+ const planExists = fileStates.find(f => f.path === 'plan.md')?.exists || false;
464
+ const tasksExist = fileStates.find(f => f.path === 'tasks.md')?.exists || false;
465
+ const specEmpty = fileStates.find(f => f.path === 'spec.md')?.empty || false;
466
+ const planEmpty = fileStates.find(f => f.path === 'plan.md')?.empty || false;
467
+ // Spec exists but empty → SPEC_WRITING
468
+ if (specExists && specEmpty) {
469
+ evidence.push({
470
+ type: EvidenceType.FILE_STATE,
471
+ description: 'spec.md exists but is empty',
472
+ weight: this.config.contextWeight * 1.3,
473
+ source: 'file-state: spec-empty'
474
+ });
475
+ }
476
+ // Spec exists but plan doesn't → PLAN_GENERATION
477
+ if (specExists && !specEmpty && !planExists) {
478
+ evidence.push({
479
+ type: EvidenceType.FILE_STATE,
480
+ description: 'spec.md exists, plan.md missing',
481
+ weight: this.config.contextWeight * 1.5,
482
+ source: 'file-state: plan-missing'
483
+ });
484
+ }
485
+ // Plan exists but empty → PLAN_GENERATION
486
+ if (planExists && planEmpty) {
487
+ evidence.push({
488
+ type: EvidenceType.FILE_STATE,
489
+ description: 'plan.md exists but is empty',
490
+ weight: this.config.contextWeight * 1.2,
491
+ source: 'file-state: plan-empty'
492
+ });
493
+ }
494
+ // Plan exists but tasks don't → TASK_BREAKDOWN
495
+ if (planExists && !planEmpty && !tasksExist) {
496
+ evidence.push({
497
+ type: EvidenceType.FILE_STATE,
498
+ description: 'plan.md exists, tasks.md missing',
499
+ weight: this.config.contextWeight * 1.4,
500
+ source: 'file-state: tasks-missing'
501
+ });
502
+ }
503
+ // All files exist → likely IMPLEMENTATION or TESTING
504
+ if (specExists && planExists && tasksExist && !specEmpty && !planEmpty) {
505
+ evidence.push({
506
+ type: EvidenceType.FILE_STATE,
507
+ description: 'All increment files present',
508
+ weight: this.config.contextWeight * 1.0,
509
+ source: 'file-state: all-present'
510
+ });
511
+ }
512
+ return evidence;
513
+ }
514
+ /**
515
+ * Analyze increment status to determine likely phase
516
+ */
517
+ analyzeIncrementStatus(status) {
518
+ const evidence = [];
519
+ switch (status.toLowerCase()) {
520
+ case 'planning':
521
+ evidence.push({
522
+ type: EvidenceType.INCREMENT_STATUS,
523
+ description: 'Increment status: PLANNING',
524
+ weight: this.config.contextWeight * 1.3,
525
+ source: 'status: planning'
526
+ });
527
+ break;
528
+ case 'active':
529
+ evidence.push({
530
+ type: EvidenceType.INCREMENT_STATUS,
531
+ description: 'Increment status: ACTIVE',
532
+ weight: this.config.contextWeight * 1.2,
533
+ source: 'status: active'
534
+ });
535
+ break;
536
+ case 'paused':
537
+ evidence.push({
538
+ type: EvidenceType.INCREMENT_STATUS,
539
+ description: 'Increment status: PAUSED',
540
+ weight: this.config.contextWeight * 0.8,
541
+ source: 'status: paused'
542
+ });
543
+ break;
544
+ case 'completed':
545
+ evidence.push({
546
+ type: EvidenceType.INCREMENT_STATUS,
547
+ description: 'Increment status: COMPLETED',
548
+ weight: this.config.contextWeight * 1.5,
549
+ source: 'status: completed'
550
+ });
551
+ break;
552
+ }
553
+ return evidence;
554
+ }
555
+ /**
556
+ * Calculate aggregated phase scores from evidence
557
+ */
558
+ calculatePhaseScores(evidence) {
559
+ const scores = {};
560
+ // Initialize all phases to 0
561
+ for (const phase of Object.values(WorkflowPhase)) {
562
+ scores[phase] = 0;
563
+ }
564
+ // Group evidence by phase
565
+ const evidenceByPhase = this.groupEvidenceByPhase(evidence);
566
+ // Calculate score for each phase
567
+ for (const [phase, phaseEvidence] of Object.entries(evidenceByPhase)) {
568
+ const totalWeight = phaseEvidence.reduce((sum, e) => sum + e.weight, 0);
569
+ scores[phase] = Math.min(totalWeight, 1.0); // Cap at 1.0
570
+ }
571
+ return scores;
572
+ }
573
+ /**
574
+ * Group evidence by the phase it suggests
575
+ */
576
+ groupEvidenceByPhase(evidence) {
577
+ const grouped = {};
578
+ for (const ev of evidence) {
579
+ // Extract phase from source (e.g., "keyword: implement" -> IMPLEMENTATION)
580
+ const phase = this.inferPhaseFromSource(ev.source);
581
+ if (phase) {
582
+ if (!grouped[phase]) {
583
+ grouped[phase] = [];
584
+ }
585
+ grouped[phase].push(ev);
586
+ }
587
+ }
588
+ return grouped;
589
+ }
590
+ /**
591
+ * Infer workflow phase from evidence source
592
+ */
593
+ inferPhaseFromSource(source) {
594
+ // Source format: "keyword: <keyword>" or "command: <command>" or "file-state: <state>" or "status: <status>"
595
+ const [type, value] = source.split(': ');
596
+ if (type === 'keyword') {
597
+ // Find keyword mapping
598
+ for (const mapping of KEYWORD_MAPPINGS) {
599
+ if (mapping.keywords.some(k => k.toLowerCase() === value.toLowerCase())) {
600
+ return mapping.phase;
601
+ }
602
+ }
603
+ }
604
+ else if (type === 'command') {
605
+ // Find command mapping
606
+ for (const mapping of COMMAND_MAPPINGS) {
607
+ if (value.includes(mapping.commandPattern)) {
608
+ return mapping.phase;
609
+ }
610
+ }
611
+ }
612
+ else if (type === 'hint') {
613
+ // Hint directly contains phase name
614
+ return value;
615
+ }
616
+ else if (type === 'file-state') {
617
+ // Map file states to phases
618
+ switch (value) {
619
+ case 'spec-empty':
620
+ return WorkflowPhase.SPEC_WRITING;
621
+ case 'plan-missing':
622
+ case 'plan-empty':
623
+ return WorkflowPhase.PLAN_GENERATION;
624
+ case 'tasks-missing':
625
+ return WorkflowPhase.TASK_BREAKDOWN;
626
+ case 'all-present':
627
+ return WorkflowPhase.IMPLEMENTATION;
628
+ default:
629
+ return null;
630
+ }
631
+ }
632
+ else if (type === 'status') {
633
+ // Map increment status to phases
634
+ switch (value) {
635
+ case 'planning':
636
+ return WorkflowPhase.PLAN_GENERATION;
637
+ case 'active':
638
+ return WorkflowPhase.IMPLEMENTATION;
639
+ case 'completed':
640
+ return WorkflowPhase.COMPLETION;
641
+ case 'paused':
642
+ // Paused doesn't indicate a specific phase
643
+ return null;
644
+ default:
645
+ return null;
646
+ }
647
+ }
648
+ return null;
649
+ }
650
+ /**
651
+ * Generate command suggestion based on detected phase
652
+ */
653
+ generateSuggestion(phase, confidence) {
654
+ // Only suggest if confidence is above threshold
655
+ if (confidence < this.config.confidenceThreshold) {
656
+ return null;
657
+ }
658
+ switch (phase) {
659
+ case WorkflowPhase.SPEC_WRITING:
660
+ return {
661
+ command: '/specweave:increment',
662
+ reason: 'Create new increment with spec.md template'
663
+ };
664
+ case WorkflowPhase.PLAN_GENERATION:
665
+ return {
666
+ command: '/specweave:plan',
667
+ reason: 'Generate implementation plan from spec.md'
668
+ };
669
+ case WorkflowPhase.TASK_BREAKDOWN:
670
+ return {
671
+ command: '/specweave:plan',
672
+ reason: 'Generate tasks.md with embedded test plans'
673
+ };
674
+ case WorkflowPhase.IMPLEMENTATION:
675
+ return {
676
+ command: '/specweave:do',
677
+ reason: 'Execute tasks from tasks.md'
678
+ };
679
+ case WorkflowPhase.TESTING:
680
+ return {
681
+ command: '/specweave:test',
682
+ reason: 'Run test suite and validate coverage'
683
+ };
684
+ case WorkflowPhase.DOCUMENTATION:
685
+ return {
686
+ command: '/specweave:sync-docs',
687
+ reason: 'Sync increment to living documentation'
688
+ };
689
+ case WorkflowPhase.REVIEW:
690
+ return {
691
+ command: '/specweave:qa',
692
+ reason: 'Run quality assessment on increment'
693
+ };
694
+ case WorkflowPhase.COMPLETION:
695
+ return {
696
+ command: '/specweave:done',
697
+ reason: 'Close increment and update status'
698
+ };
699
+ default:
700
+ return null;
701
+ }
702
+ }
703
+ }
704
+ //# sourceMappingURL=phase-detector.js.map