specweave 0.21.2 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/CLAUDE.md +429 -10
  2. package/README.md +33 -3
  3. package/dist/plugins/specweave-github/lib/CodeValidator.d.ts +101 -0
  4. package/dist/plugins/specweave-github/lib/CodeValidator.d.ts.map +1 -0
  5. package/dist/plugins/specweave-github/lib/CodeValidator.js +219 -0
  6. package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -0
  7. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts +98 -0
  8. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts.map +1 -0
  9. package/dist/plugins/specweave-github/lib/IssueStateManager.js +146 -0
  10. package/dist/plugins/specweave-github/lib/IssueStateManager.js.map +1 -0
  11. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts +182 -0
  12. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.d.ts.map +1 -0
  13. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +603 -0
  14. package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -0
  15. package/dist/plugins/specweave-github/lib/types.d.ts +34 -0
  16. package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  18. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -0
  19. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  20. package/dist/src/cli/commands/check-hooks.d.ts +11 -0
  21. package/dist/src/cli/commands/check-hooks.d.ts.map +1 -0
  22. package/dist/src/cli/commands/check-hooks.js +144 -0
  23. package/dist/src/cli/commands/check-hooks.js.map +1 -0
  24. package/dist/src/cli/commands/cicd-monitor.js +3 -3
  25. package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
  26. package/dist/src/cli/commands/import-docs.js +2 -2
  27. package/dist/src/cli/commands/import-docs.js.map +1 -1
  28. package/dist/src/cli/commands/init-multiproject.js +4 -4
  29. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  30. package/dist/src/cli/commands/init.d.ts.map +1 -1
  31. package/dist/src/cli/commands/init.js +60 -5
  32. package/dist/src/cli/commands/init.js.map +1 -1
  33. package/dist/src/cli/commands/migrate-to-multiproject.js +3 -3
  34. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  35. package/dist/src/cli/commands/plan/agent-invoker.d.ts +79 -0
  36. package/dist/src/cli/commands/plan/agent-invoker.d.ts.map +1 -0
  37. package/dist/src/cli/commands/plan/agent-invoker.js +383 -0
  38. package/dist/src/cli/commands/plan/agent-invoker.js.map +1 -0
  39. package/dist/src/cli/commands/plan/increment-detector.d.ts +27 -0
  40. package/dist/src/cli/commands/plan/increment-detector.d.ts.map +1 -0
  41. package/dist/src/cli/commands/plan/increment-detector.js +159 -0
  42. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -0
  43. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +45 -0
  44. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts.map +1 -0
  45. package/dist/src/cli/commands/plan/plan-orchestrator.js +229 -0
  46. package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -0
  47. package/dist/src/cli/commands/plan/plan-validator.d.ts +36 -0
  48. package/dist/src/cli/commands/plan/plan-validator.d.ts.map +1 -0
  49. package/dist/src/cli/commands/plan/plan-validator.js +174 -0
  50. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -0
  51. package/dist/src/cli/commands/plan/types.d.ts +170 -0
  52. package/dist/src/cli/commands/plan/types.d.ts.map +1 -0
  53. package/dist/src/cli/commands/plan/types.js +42 -0
  54. package/dist/src/cli/commands/plan/types.js.map +1 -0
  55. package/dist/src/cli/commands/plan-command.d.ts +16 -0
  56. package/dist/src/cli/commands/plan-command.d.ts.map +1 -0
  57. package/dist/src/cli/commands/plan-command.js +127 -0
  58. package/dist/src/cli/commands/plan-command.js.map +1 -0
  59. package/dist/src/cli/commands/switch-project.js +3 -3
  60. package/dist/src/cli/commands/switch-project.js.map +1 -1
  61. package/dist/src/cli/commands/validate-parent-repo.js +1 -1
  62. package/dist/src/cli/commands/validate-parent-repo.js.map +1 -1
  63. package/dist/src/config/ConfigManager.d.ts +69 -0
  64. package/dist/src/config/ConfigManager.d.ts.map +1 -0
  65. package/dist/src/config/ConfigManager.js +130 -0
  66. package/dist/src/config/ConfigManager.js.map +1 -0
  67. package/dist/src/config/types.d.ts +1357 -0
  68. package/dist/src/config/types.d.ts.map +1 -0
  69. package/dist/src/config/types.js +67 -0
  70. package/dist/src/config/types.js.map +1 -0
  71. package/dist/src/core/brownfield/importer.d.ts +1 -1
  72. package/dist/src/core/brownfield/importer.d.ts.map +1 -1
  73. package/dist/src/core/brownfield/importer.js +3 -3
  74. package/dist/src/core/brownfield/importer.js.map +1 -1
  75. package/dist/src/core/cicd/config-loader.d.ts +1 -1
  76. package/dist/src/core/cicd/config-loader.d.ts.map +1 -1
  77. package/dist/src/core/cicd/index.d.ts +6 -6
  78. package/dist/src/core/cicd/index.d.ts.map +1 -1
  79. package/dist/src/core/cicd/index.js +6 -6
  80. package/dist/src/core/cicd/index.js.map +1 -1
  81. package/dist/src/core/cicd/monitor-service.d.ts +3 -3
  82. package/dist/src/core/cicd/monitor-service.d.ts.map +1 -1
  83. package/dist/src/core/cicd/monitor-service.js +3 -3
  84. package/dist/src/core/cicd/monitor-service.js.map +1 -1
  85. package/dist/src/core/cicd/notifier.d.ts +1 -1
  86. package/dist/src/core/cicd/notifier.d.ts.map +1 -1
  87. package/dist/src/core/cicd/state-manager.d.ts +1 -1
  88. package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
  89. package/dist/src/core/cicd/state-manager.js +1 -1
  90. package/dist/src/core/cicd/state-manager.js.map +1 -1
  91. package/dist/src/core/cicd/workflow-monitor.d.ts +1 -1
  92. package/dist/src/core/cicd/workflow-monitor.d.ts.map +1 -1
  93. package/dist/src/core/cicd/workflow-monitor.js +1 -1
  94. package/dist/src/core/cicd/workflow-monitor.js.map +1 -1
  95. package/dist/src/core/cost-tracker.d.ts +2 -2
  96. package/dist/src/core/cost-tracker.d.ts.map +1 -1
  97. package/dist/src/core/cost-tracker.js +1 -1
  98. package/dist/src/core/cost-tracker.js.map +1 -1
  99. package/dist/src/core/hooks/HealthReporter.d.ts +55 -0
  100. package/dist/src/core/hooks/HealthReporter.d.ts.map +1 -0
  101. package/dist/src/core/hooks/HealthReporter.js +268 -0
  102. package/dist/src/core/hooks/HealthReporter.js.map +1 -0
  103. package/dist/src/core/hooks/HookAutoFixer.d.ts +41 -0
  104. package/dist/src/core/hooks/HookAutoFixer.d.ts.map +1 -0
  105. package/dist/src/core/hooks/HookAutoFixer.js +222 -0
  106. package/dist/src/core/hooks/HookAutoFixer.js.map +1 -0
  107. package/dist/src/core/hooks/HookExecutor.d.ts +57 -0
  108. package/dist/src/core/hooks/HookExecutor.d.ts.map +1 -0
  109. package/dist/src/core/hooks/HookExecutor.js +287 -0
  110. package/dist/src/core/hooks/HookExecutor.js.map +1 -0
  111. package/dist/src/core/hooks/HookHealthChecker.d.ts +51 -0
  112. package/dist/src/core/hooks/HookHealthChecker.d.ts.map +1 -0
  113. package/dist/src/core/hooks/HookHealthChecker.js +212 -0
  114. package/dist/src/core/hooks/HookHealthChecker.js.map +1 -0
  115. package/dist/src/core/hooks/HookScanner.d.ts +65 -0
  116. package/dist/src/core/hooks/HookScanner.d.ts.map +1 -0
  117. package/dist/src/core/hooks/HookScanner.js +214 -0
  118. package/dist/src/core/hooks/HookScanner.js.map +1 -0
  119. package/dist/src/core/hooks/types.d.ts +281 -0
  120. package/dist/src/core/hooks/types.d.ts.map +1 -0
  121. package/dist/src/core/hooks/types.js +10 -0
  122. package/dist/src/core/hooks/types.js.map +1 -0
  123. package/dist/src/core/iac/index.d.ts +10 -0
  124. package/dist/src/core/iac/index.d.ts.map +1 -0
  125. package/dist/src/core/iac/index.js +11 -0
  126. package/dist/src/core/iac/index.js.map +1 -0
  127. package/dist/src/core/iac/template-engine.d.ts +77 -0
  128. package/dist/src/core/iac/template-engine.d.ts.map +1 -0
  129. package/dist/src/core/iac/template-engine.js +182 -0
  130. package/dist/src/core/iac/template-engine.js.map +1 -0
  131. package/dist/src/core/increment/ac-status-manager.d.ts +115 -0
  132. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -0
  133. package/dist/src/core/increment/ac-status-manager.js +343 -0
  134. package/dist/src/core/increment/ac-status-manager.js.map +1 -0
  135. package/dist/src/core/increment/auto-transition-manager.d.ts +60 -0
  136. package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -0
  137. package/dist/src/core/increment/auto-transition-manager.js +192 -0
  138. package/dist/src/core/increment/auto-transition-manager.js.map +1 -0
  139. package/dist/src/core/increment/limits.d.ts +1 -1
  140. package/dist/src/core/increment/limits.d.ts.map +1 -1
  141. package/dist/src/core/increment/limits.js +2 -2
  142. package/dist/src/core/increment/limits.js.map +1 -1
  143. package/dist/src/core/increment/spec-sync-manager.d.ts +177 -0
  144. package/dist/src/core/increment/spec-sync-manager.d.ts.map +1 -0
  145. package/dist/src/core/increment/spec-sync-manager.js +496 -0
  146. package/dist/src/core/increment/spec-sync-manager.js.map +1 -0
  147. package/dist/src/core/increment/status-auto-transition.d.ts +46 -0
  148. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -0
  149. package/dist/src/core/increment/status-auto-transition.js +178 -0
  150. package/dist/src/core/increment/status-auto-transition.js.map +1 -0
  151. package/dist/src/core/increment/task-state-manager.d.ts +75 -0
  152. package/dist/src/core/increment/task-state-manager.d.ts.map +1 -0
  153. package/dist/src/core/increment/task-state-manager.js +117 -0
  154. package/dist/src/core/increment/task-state-manager.js.map +1 -0
  155. package/dist/src/core/living-docs/CodeValidator.d.ts +68 -0
  156. package/dist/src/core/living-docs/CodeValidator.d.ts.map +1 -0
  157. package/dist/src/core/living-docs/CodeValidator.js +160 -0
  158. package/dist/src/core/living-docs/CodeValidator.js.map +1 -0
  159. package/dist/src/core/living-docs/CompletionPropagator.d.ts +84 -0
  160. package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -0
  161. package/dist/src/core/living-docs/CompletionPropagator.js +206 -0
  162. package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -0
  163. package/dist/src/core/living-docs/ProjectDetector.d.ts +29 -0
  164. package/dist/src/core/living-docs/ProjectDetector.d.ts.map +1 -0
  165. package/dist/src/core/living-docs/ProjectDetector.js +94 -0
  166. package/dist/src/core/living-docs/ProjectDetector.js.map +1 -0
  167. package/dist/src/core/living-docs/SpecDistributor.d.ts +60 -0
  168. package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -0
  169. package/dist/src/core/living-docs/SpecDistributor.js +228 -0
  170. package/dist/src/core/living-docs/SpecDistributor.js.map +1 -0
  171. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +116 -0
  172. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +1 -0
  173. package/dist/src/core/living-docs/ThreeLayerSyncManager.js +356 -0
  174. package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +1 -0
  175. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  176. package/dist/src/core/living-docs/hierarchy-mapper.js +2 -1
  177. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  178. package/dist/src/core/living-docs/index.d.ts +1 -1
  179. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  180. package/dist/src/core/living-docs/index.js +5 -1
  181. package/dist/src/core/living-docs/index.js.map +1 -1
  182. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  183. package/dist/src/core/living-docs/project-detector.js +38 -0
  184. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  185. package/dist/src/core/living-docs/types.d.ts +70 -300
  186. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  187. package/dist/src/core/living-docs/types.js +2 -10
  188. package/dist/src/core/living-docs/types.js.map +1 -1
  189. package/dist/src/core/project-manager.d.ts +1 -1
  190. package/dist/src/core/project-manager.d.ts.map +1 -1
  191. package/dist/src/core/project-manager.js +2 -2
  192. package/dist/src/core/project-manager.js.map +1 -1
  193. package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
  194. package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -1
  195. package/dist/src/core/qa/risk-calculator.d.ts +1 -1
  196. package/dist/src/core/qa/risk-calculator.d.ts.map +1 -1
  197. package/dist/src/core/repo-structure/setup-summary.d.ts +1 -1
  198. package/dist/src/core/repo-structure/setup-summary.d.ts.map +1 -1
  199. package/dist/src/core/rfc-generator-v2.d.ts +1 -1
  200. package/dist/src/core/rfc-generator-v2.d.ts.map +1 -1
  201. package/dist/src/core/rfc-generator-v2.js +1 -1
  202. package/dist/src/core/rfc-generator-v2.js.map +1 -1
  203. package/dist/src/core/serverless/context-detector.d.ts +12 -0
  204. package/dist/src/core/serverless/context-detector.d.ts.map +1 -0
  205. package/dist/src/core/serverless/context-detector.js +213 -0
  206. package/dist/src/core/serverless/context-detector.js.map +1 -0
  207. package/dist/src/core/serverless/cost-comparison.d.ts +73 -0
  208. package/dist/src/core/serverless/cost-comparison.d.ts.map +1 -0
  209. package/dist/src/core/serverless/cost-comparison.js +198 -0
  210. package/dist/src/core/serverless/cost-comparison.js.map +1 -0
  211. package/dist/src/core/serverless/cost-estimator.d.ts +69 -0
  212. package/dist/src/core/serverless/cost-estimator.d.ts.map +1 -0
  213. package/dist/src/core/serverless/cost-estimator.js +127 -0
  214. package/dist/src/core/serverless/cost-estimator.js.map +1 -0
  215. package/dist/src/core/serverless/cost-optimizer.d.ts +57 -0
  216. package/dist/src/core/serverless/cost-optimizer.d.ts.map +1 -0
  217. package/dist/src/core/serverless/cost-optimizer.js +221 -0
  218. package/dist/src/core/serverless/cost-optimizer.js.map +1 -0
  219. package/dist/src/core/serverless/index.d.ts +20 -0
  220. package/dist/src/core/serverless/index.d.ts.map +1 -0
  221. package/dist/src/core/serverless/index.js +26 -0
  222. package/dist/src/core/serverless/index.js.map +1 -0
  223. package/dist/src/core/serverless/learning-path-recommender.d.ts +152 -0
  224. package/dist/src/core/serverless/learning-path-recommender.d.ts.map +1 -0
  225. package/dist/src/core/serverless/learning-path-recommender.js +389 -0
  226. package/dist/src/core/serverless/learning-path-recommender.js.map +1 -0
  227. package/dist/src/core/serverless/platform-data-loader.d.ts +22 -0
  228. package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -0
  229. package/dist/src/core/serverless/platform-data-loader.js +49 -0
  230. package/dist/src/core/serverless/platform-data-loader.js.map +1 -0
  231. package/dist/src/core/serverless/platform-selector.d.ts +20 -0
  232. package/dist/src/core/serverless/platform-selector.d.ts.map +1 -0
  233. package/dist/src/core/serverless/platform-selector.js +279 -0
  234. package/dist/src/core/serverless/platform-selector.js.map +1 -0
  235. package/dist/src/core/serverless/recommendation-formatter.d.ts +24 -0
  236. package/dist/src/core/serverless/recommendation-formatter.d.ts.map +1 -0
  237. package/dist/src/core/serverless/recommendation-formatter.js +70 -0
  238. package/dist/src/core/serverless/recommendation-formatter.js.map +1 -0
  239. package/dist/src/core/serverless/suitability-analyzer.d.ts +22 -0
  240. package/dist/src/core/serverless/suitability-analyzer.d.ts.map +1 -0
  241. package/dist/src/core/serverless/suitability-analyzer.js +262 -0
  242. package/dist/src/core/serverless/suitability-analyzer.js.map +1 -0
  243. package/dist/src/core/serverless/types.d.ts +96 -0
  244. package/dist/src/core/serverless/types.d.ts.map +1 -0
  245. package/dist/src/core/serverless/types.js +5 -0
  246. package/dist/src/core/serverless/types.js.map +1 -0
  247. package/dist/src/core/sync/bidirectional-engine.d.ts +1 -1
  248. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
  249. package/dist/src/core/sync/enhanced-content-builder.d.ts +1 -1
  250. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  251. package/dist/src/core/sync/profile-manager.d.ts +1 -1
  252. package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
  253. package/dist/src/core/sync/profile-selector.d.ts +1 -1
  254. package/dist/src/core/sync/profile-selector.d.ts.map +1 -1
  255. package/dist/src/core/sync/profile-selector.js +1 -1
  256. package/dist/src/core/sync/profile-selector.js.map +1 -1
  257. package/dist/src/core/sync/project-context.d.ts +1 -1
  258. package/dist/src/core/sync/project-context.d.ts.map +1 -1
  259. package/dist/src/core/sync/rate-limiter.d.ts +1 -1
  260. package/dist/src/core/sync/rate-limiter.d.ts.map +1 -1
  261. package/dist/src/core/sync/status-sync-engine.d.ts +2 -2
  262. package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -1
  263. package/dist/src/core/sync/status-sync-engine.js +2 -2
  264. package/dist/src/core/sync/status-sync-engine.js.map +1 -1
  265. package/dist/src/core/sync/time-range-selector.d.ts +1 -1
  266. package/dist/src/core/sync/time-range-selector.d.ts.map +1 -1
  267. package/dist/src/core/sync/time-range-selector.js +1 -1
  268. package/dist/src/core/sync/time-range-selector.js.map +1 -1
  269. package/dist/src/core/types/config.d.ts +23 -0
  270. package/dist/src/core/types/config.d.ts.map +1 -1
  271. package/dist/src/core/types/config.js +10 -0
  272. package/dist/src/core/types/config.js.map +1 -1
  273. package/dist/src/core/types/increment-metadata.d.ts +27 -0
  274. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  275. package/dist/src/core/types/increment-metadata.js +45 -1
  276. package/dist/src/core/types/increment-metadata.js.map +1 -1
  277. package/dist/src/core/types/sync-profile.d.ts +2 -0
  278. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  279. package/dist/src/core/types/sync-profile.js.map +1 -1
  280. package/dist/src/core/validation/increment-structure-validator.d.ts +47 -0
  281. package/dist/src/core/validation/increment-structure-validator.d.ts.map +1 -0
  282. package/dist/src/core/validation/increment-structure-validator.js +187 -0
  283. package/dist/src/core/validation/increment-structure-validator.js.map +1 -0
  284. package/dist/src/core/validation/three-file-validator.d.ts +82 -0
  285. package/dist/src/core/validation/three-file-validator.d.ts.map +1 -0
  286. package/dist/src/core/validation/three-file-validator.js +320 -0
  287. package/dist/src/core/validation/three-file-validator.js.map +1 -0
  288. package/dist/src/core/workflow/phase-detector.d.ts +103 -0
  289. package/dist/src/core/workflow/phase-detector.d.ts.map +1 -0
  290. package/dist/src/core/workflow/phase-detector.js +704 -0
  291. package/dist/src/core/workflow/phase-detector.js.map +1 -0
  292. package/dist/src/core/workflow/types.d.ts +153 -0
  293. package/dist/src/core/workflow/types.d.ts.map +1 -0
  294. package/dist/src/core/workflow/types.js +47 -0
  295. package/dist/src/core/workflow/types.js.map +1 -0
  296. package/dist/src/init/ArchitecturePresenter.d.ts +47 -0
  297. package/dist/src/init/ArchitecturePresenter.d.ts.map +1 -0
  298. package/dist/src/init/ArchitecturePresenter.js +180 -0
  299. package/dist/src/init/ArchitecturePresenter.js.map +1 -0
  300. package/dist/src/init/InitFlow.d.ts +37 -0
  301. package/dist/src/init/InitFlow.d.ts.map +1 -0
  302. package/dist/src/init/InitFlow.js +238 -0
  303. package/dist/src/init/InitFlow.js.map +1 -0
  304. package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts +107 -0
  305. package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts.map +1 -0
  306. package/dist/src/init/architecture/ArchitectureDecisionEngine.js +405 -0
  307. package/dist/src/init/architecture/ArchitectureDecisionEngine.js.map +1 -0
  308. package/dist/src/init/architecture/CloudCreditsDatabase.d.ts +11 -0
  309. package/dist/src/init/architecture/CloudCreditsDatabase.d.ts.map +1 -0
  310. package/dist/src/init/architecture/CloudCreditsDatabase.js +92 -0
  311. package/dist/src/init/architecture/CloudCreditsDatabase.js.map +1 -0
  312. package/dist/src/init/architecture/CostEstimator.d.ts +52 -0
  313. package/dist/src/init/architecture/CostEstimator.d.ts.map +1 -0
  314. package/dist/src/init/architecture/CostEstimator.js +107 -0
  315. package/dist/src/init/architecture/CostEstimator.js.map +1 -0
  316. package/dist/src/init/architecture/InfrastructureMapper.d.ts +41 -0
  317. package/dist/src/init/architecture/InfrastructureMapper.d.ts.map +1 -0
  318. package/dist/src/init/architecture/InfrastructureMapper.js +140 -0
  319. package/dist/src/init/architecture/InfrastructureMapper.js.map +1 -0
  320. package/dist/src/init/architecture/ProjectGenerator.d.ts +44 -0
  321. package/dist/src/init/architecture/ProjectGenerator.d.ts.map +1 -0
  322. package/dist/src/init/architecture/ProjectGenerator.js +216 -0
  323. package/dist/src/init/architecture/ProjectGenerator.js.map +1 -0
  324. package/dist/src/init/architecture/types.d.ts +251 -0
  325. package/dist/src/init/architecture/types.d.ts.map +1 -0
  326. package/dist/src/init/architecture/types.js +54 -0
  327. package/dist/src/init/architecture/types.js.map +1 -0
  328. package/dist/src/init/compliance/ComplianceDetector.d.ts +17 -0
  329. package/dist/src/init/compliance/ComplianceDetector.d.ts.map +1 -0
  330. package/dist/src/init/compliance/ComplianceDetector.js +64 -0
  331. package/dist/src/init/compliance/ComplianceDetector.js.map +1 -0
  332. package/dist/src/init/compliance/standards-database.d.ts +48 -0
  333. package/dist/src/init/compliance/standards-database.d.ts.map +1 -0
  334. package/dist/src/init/compliance/standards-database.js +506 -0
  335. package/dist/src/init/compliance/standards-database.js.map +1 -0
  336. package/dist/src/init/compliance/types.d.ts +91 -0
  337. package/dist/src/init/compliance/types.d.ts.map +1 -0
  338. package/dist/src/init/compliance/types.js +43 -0
  339. package/dist/src/init/compliance/types.js.map +1 -0
  340. package/dist/src/init/repo/GitHubAPIClient.d.ts +51 -0
  341. package/dist/src/init/repo/GitHubAPIClient.d.ts.map +1 -0
  342. package/dist/src/init/repo/GitHubAPIClient.js +144 -0
  343. package/dist/src/init/repo/GitHubAPIClient.js.map +1 -0
  344. package/dist/src/init/repo/RepositorySelector.d.ts +45 -0
  345. package/dist/src/init/repo/RepositorySelector.d.ts.map +1 -0
  346. package/dist/src/init/repo/RepositorySelector.js +106 -0
  347. package/dist/src/init/repo/RepositorySelector.js.map +1 -0
  348. package/dist/src/init/repo/types.d.ts +95 -0
  349. package/dist/src/init/repo/types.d.ts.map +1 -0
  350. package/dist/src/init/repo/types.js +25 -0
  351. package/dist/src/init/repo/types.js.map +1 -0
  352. package/dist/src/init/research/CompetitorAnalyzer.d.ts +79 -0
  353. package/dist/src/init/research/CompetitorAnalyzer.d.ts.map +1 -0
  354. package/dist/src/init/research/CompetitorAnalyzer.js +265 -0
  355. package/dist/src/init/research/CompetitorAnalyzer.js.map +1 -0
  356. package/dist/src/init/research/MarketDetector.d.ts +62 -0
  357. package/dist/src/init/research/MarketDetector.d.ts.map +1 -0
  358. package/dist/src/init/research/MarketDetector.js +247 -0
  359. package/dist/src/init/research/MarketDetector.js.map +1 -0
  360. package/dist/src/init/research/OpportunityScorer.d.ts +58 -0
  361. package/dist/src/init/research/OpportunityScorer.d.ts.map +1 -0
  362. package/dist/src/init/research/OpportunityScorer.js +194 -0
  363. package/dist/src/init/research/OpportunityScorer.js.map +1 -0
  364. package/dist/src/init/research/QuestionGenerator.d.ts +68 -0
  365. package/dist/src/init/research/QuestionGenerator.d.ts.map +1 -0
  366. package/dist/src/init/research/QuestionGenerator.js +244 -0
  367. package/dist/src/init/research/QuestionGenerator.js.map +1 -0
  368. package/dist/src/init/research/ReportGenerator.d.ts +36 -0
  369. package/dist/src/init/research/ReportGenerator.d.ts.map +1 -0
  370. package/dist/src/init/research/ReportGenerator.js +125 -0
  371. package/dist/src/init/research/ReportGenerator.js.map +1 -0
  372. package/dist/src/init/research/VisionAnalyzer.d.ts +129 -0
  373. package/dist/src/init/research/VisionAnalyzer.d.ts.map +1 -0
  374. package/dist/src/init/research/VisionAnalyzer.js +212 -0
  375. package/dist/src/init/research/VisionAnalyzer.js.map +1 -0
  376. package/dist/src/init/research/keyword-extractor.d.ts +78 -0
  377. package/dist/src/init/research/keyword-extractor.d.ts.map +1 -0
  378. package/dist/src/init/research/keyword-extractor.js +230 -0
  379. package/dist/src/init/research/keyword-extractor.js.map +1 -0
  380. package/dist/src/init/research/src/config/ConfigManager.d.ts +14 -0
  381. package/dist/src/init/research/src/config/ConfigManager.d.ts.map +1 -0
  382. package/dist/src/init/research/src/config/ConfigManager.js +45 -0
  383. package/dist/src/init/research/src/config/ConfigManager.js.map +1 -0
  384. package/dist/src/init/research/src/config/types.d.ts +102 -0
  385. package/dist/src/init/research/src/config/types.d.ts.map +1 -0
  386. package/dist/src/init/research/src/config/types.js +24 -0
  387. package/dist/src/init/research/src/config/types.js.map +1 -0
  388. package/dist/src/init/research/types.d.ts +183 -0
  389. package/dist/src/init/research/types.d.ts.map +1 -0
  390. package/dist/src/init/research/types.js +65 -0
  391. package/dist/src/init/research/types.js.map +1 -0
  392. package/dist/src/init/team/ServerlessSavingsCalculator.d.ts +136 -0
  393. package/dist/src/init/team/ServerlessSavingsCalculator.d.ts.map +1 -0
  394. package/dist/src/init/team/ServerlessSavingsCalculator.js +360 -0
  395. package/dist/src/init/team/ServerlessSavingsCalculator.js.map +1 -0
  396. package/dist/src/init/team/TeamRecommender.d.ts +122 -0
  397. package/dist/src/init/team/TeamRecommender.d.ts.map +1 -0
  398. package/dist/src/init/team/TeamRecommender.js +405 -0
  399. package/dist/src/init/team/TeamRecommender.js.map +1 -0
  400. package/dist/src/init/team/types.d.ts +95 -0
  401. package/dist/src/init/team/types.d.ts.map +1 -0
  402. package/dist/src/init/team/types.js +23 -0
  403. package/dist/src/init/team/types.js.map +1 -0
  404. package/dist/src/integrations/jira/jira-mapper.d.ts +1 -1
  405. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  406. package/dist/src/types/cost-tracking.d.ts +1 -1
  407. package/dist/src/types/cost-tracking.d.ts.map +1 -1
  408. package/dist/src/utils/cost-reporter.d.ts +2 -2
  409. package/dist/src/utils/cost-reporter.d.ts.map +1 -1
  410. package/dist/src/utils/docs-preview/config-generator.d.ts +1 -1
  411. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  412. package/dist/src/utils/docs-preview/config-generator.js +1 -1
  413. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
  414. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
  415. package/dist/src/utils/docs-preview/docusaurus-setup.js +4 -4
  416. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  417. package/dist/src/utils/docs-preview/index.d.ts +6 -6
  418. package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
  419. package/dist/src/utils/docs-preview/index.js +6 -6
  420. package/dist/src/utils/docs-preview/index.js.map +1 -1
  421. package/dist/src/utils/docs-preview/package-installer.d.ts +1 -1
  422. package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -1
  423. package/dist/src/utils/docs-preview/package-installer.js +1 -1
  424. package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
  425. package/dist/src/utils/docs-preview/server-manager.d.ts +1 -1
  426. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
  427. package/dist/src/utils/docs-preview/server-manager.js +1 -1
  428. package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
  429. package/dist/src/utils/docs-preview/sidebar-builder.d.ts +1 -1
  430. package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -1
  431. package/dist/src/utils/generate-skills-index.d.ts +1 -1
  432. package/dist/src/utils/generate-skills-index.js +1 -1
  433. package/dist/src/utils/project-detection.js +1 -1
  434. package/dist/src/utils/project-detection.js.map +1 -1
  435. package/package.json +17 -10
  436. package/plugins/specweave/agents/architect/AGENT.md +605 -0
  437. package/plugins/specweave/agents/infrastructure/AGENT.md +760 -0
  438. package/plugins/specweave/agents/pm/AGENT.md +14 -13
  439. package/plugins/specweave/commands/specweave-check-hooks.md +186 -0
  440. package/plugins/specweave/commands/specweave-plan.md +151 -0
  441. package/plugins/specweave/commands/specweave-sync-acs.md +342 -0
  442. package/plugins/specweave/commands/specweave-validate.md +60 -11
  443. package/plugins/specweave/hooks/lib/update-status-line.sh +8 -4
  444. package/plugins/specweave/hooks/post-increment-change.sh +4 -0
  445. package/plugins/specweave/hooks/post-increment-completion.sh +7 -1
  446. package/plugins/specweave/hooks/post-increment-planning.sh +4 -0
  447. package/plugins/specweave/hooks/post-increment-status-change.sh +4 -0
  448. package/plugins/specweave/hooks/user-prompt-submit.sh +78 -0
  449. package/plugins/specweave/iac-templates/aws-lambda/README.md.hbs +280 -0
  450. package/plugins/specweave/iac-templates/aws-lambda/defaults.json +118 -0
  451. package/plugins/specweave/iac-templates/aws-lambda/environments/dev.defaults.json +46 -0
  452. package/plugins/specweave/iac-templates/aws-lambda/environments/prod.defaults.json +67 -0
  453. package/plugins/specweave/iac-templates/aws-lambda/environments/staging.defaults.json +47 -0
  454. package/plugins/specweave/iac-templates/aws-lambda/main.tf.hbs +241 -0
  455. package/plugins/specweave/iac-templates/aws-lambda/outputs.tf.hbs +61 -0
  456. package/plugins/specweave/iac-templates/aws-lambda/provider.tf.hbs +15 -0
  457. package/plugins/specweave/iac-templates/aws-lambda/variables.tf.hbs +88 -0
  458. package/plugins/specweave/iac-templates/azure-functions/README.md.hbs +315 -0
  459. package/plugins/specweave/iac-templates/azure-functions/defaults.json +65 -0
  460. package/plugins/specweave/iac-templates/azure-functions/environments/dev.defaults.json +30 -0
  461. package/plugins/specweave/iac-templates/azure-functions/environments/prod.defaults.json +34 -0
  462. package/plugins/specweave/iac-templates/azure-functions/environments/staging.defaults.json +31 -0
  463. package/plugins/specweave/iac-templates/azure-functions/iam.tf.hbs +34 -0
  464. package/plugins/specweave/iac-templates/azure-functions/main.tf.hbs +247 -0
  465. package/plugins/specweave/iac-templates/azure-functions/outputs.tf.hbs +72 -0
  466. package/plugins/specweave/iac-templates/azure-functions/provider.tf.hbs +14 -0
  467. package/plugins/specweave/iac-templates/azure-functions/variables.tf.hbs +64 -0
  468. package/plugins/specweave/iac-templates/firebase/README.md.hbs +487 -0
  469. package/plugins/specweave/iac-templates/firebase/defaults.json +55 -0
  470. package/plugins/specweave/iac-templates/firebase/environments/dev.defaults.json +44 -0
  471. package/plugins/specweave/iac-templates/firebase/environments/prod.defaults.json +52 -0
  472. package/plugins/specweave/iac-templates/firebase/environments/staging.defaults.json +43 -0
  473. package/plugins/specweave/iac-templates/firebase/iam.tf.hbs +75 -0
  474. package/plugins/specweave/iac-templates/firebase/main.tf.hbs +297 -0
  475. package/plugins/specweave/iac-templates/firebase/outputs.tf.hbs +67 -0
  476. package/plugins/specweave/iac-templates/firebase/provider.tf.hbs +26 -0
  477. package/plugins/specweave/iac-templates/firebase/variables.tf.hbs +68 -0
  478. package/plugins/specweave/iac-templates/gcp-cloud-functions/README.md.hbs +330 -0
  479. package/plugins/specweave/iac-templates/gcp-cloud-functions/defaults.json +69 -0
  480. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/dev.defaults.json +33 -0
  481. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/prod.defaults.json +40 -0
  482. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/staging.defaults.json +33 -0
  483. package/plugins/specweave/iac-templates/gcp-cloud-functions/iam.tf.hbs +54 -0
  484. package/plugins/specweave/iac-templates/gcp-cloud-functions/main.tf.hbs +211 -0
  485. package/plugins/specweave/iac-templates/gcp-cloud-functions/outputs.tf.hbs +44 -0
  486. package/plugins/specweave/iac-templates/gcp-cloud-functions/provider.tf.hbs +14 -0
  487. package/plugins/specweave/iac-templates/gcp-cloud-functions/variables.tf.hbs +82 -0
  488. package/plugins/specweave/iac-templates/supabase/README.md.hbs +534 -0
  489. package/plugins/specweave/iac-templates/supabase/defaults.json +69 -0
  490. package/plugins/specweave/iac-templates/supabase/environments/dev.defaults.json +55 -0
  491. package/plugins/specweave/iac-templates/supabase/environments/prod.defaults.json +75 -0
  492. package/plugins/specweave/iac-templates/supabase/environments/staging.defaults.json +54 -0
  493. package/plugins/specweave/iac-templates/supabase/iam.tf.hbs +146 -0
  494. package/plugins/specweave/iac-templates/supabase/main.tf.hbs +310 -0
  495. package/plugins/specweave/iac-templates/supabase/outputs.tf.hbs +74 -0
  496. package/plugins/specweave/iac-templates/supabase/provider.tf.hbs +19 -0
  497. package/plugins/specweave/iac-templates/supabase/variables.tf.hbs +78 -0
  498. package/plugins/specweave/knowledge-base/serverless/FRESHNESS.md +69 -0
  499. package/plugins/specweave/knowledge-base/serverless/learning-paths.json +865 -0
  500. package/plugins/specweave/knowledge-base/serverless/platforms/aws-lambda.json +41 -0
  501. package/plugins/specweave/knowledge-base/serverless/platforms/azure-functions.json +41 -0
  502. package/plugins/specweave/knowledge-base/serverless/platforms/firebase.json +46 -0
  503. package/plugins/specweave/knowledge-base/serverless/platforms/gcp-cloud-functions.json +41 -0
  504. package/plugins/specweave/knowledge-base/serverless/platforms/supabase.json +41 -0
  505. package/plugins/specweave/knowledge-base/serverless/schema.json +155 -0
  506. package/plugins/specweave/lib/hooks/auto-transition.js +50 -0
  507. package/plugins/specweave/lib/hooks/auto-transition.ts +84 -0
  508. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +1 -1
  509. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +1 -1
  510. package/plugins/specweave/lib/hooks/sync-living-docs.js +4 -31
  511. package/plugins/specweave/lib/hooks/{sync-living-docs.ts → sync-living-docs.ts.DISABLED} +9 -48
  512. package/plugins/specweave/lib/hooks/translate-file.js +1 -1
  513. package/plugins/specweave/lib/hooks/translate-file.ts +1 -1
  514. package/plugins/specweave/lib/hooks/update-ac-status.js +24 -75
  515. package/plugins/specweave/lib/hooks/update-ac-status.ts +46 -135
  516. package/plugins/specweave/lib/hooks/update-tasks-md.js +115 -3
  517. package/plugins/specweave/lib/hooks/update-tasks-md.ts +182 -10
  518. package/plugins/specweave/lib/utils/validate-dev-setup.sh +133 -0
  519. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -15
  520. package/plugins/specweave/skills/serverless-recommender/SKILL.md +368 -0
  521. package/plugins/specweave/templates/iac/aws-lambda/templates/iam.tf.hbs +137 -0
  522. package/plugins/specweave/templates/iac/aws-lambda/templates/main.tf.hbs +216 -0
  523. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  524. package/plugins/specweave-github/lib/CodeValidator.js +195 -0
  525. package/plugins/specweave-github/lib/CodeValidator.ts +284 -0
  526. package/plugins/specweave-github/lib/IssueStateManager.js +117 -0
  527. package/plugins/specweave-github/lib/IssueStateManager.ts +231 -0
  528. package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +545 -0
  529. package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +809 -0
  530. package/plugins/specweave-github/lib/types.ts +38 -0
  531. package/plugins/specweave-github/lib/user-story-issue-builder.js +7 -0
  532. package/plugins/specweave-github/lib/user-story-issue-builder.ts +11 -0
  533. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1200 -0
  534. package/plugins/specweave-ui/.mcp.json +0 -10
  535. package/plugins/specweave-ui/README.md +26 -26
  536. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +31 -18
  537. package/src/templates/AGENTS.md.template +22 -1
  538. package/src/templates/tasks.md.template +51 -33
  539. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +0 -89
  540. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +0 -1
  541. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +0 -226
  542. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +0 -1
  543. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +0 -60
  544. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +0 -1
  545. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +0 -201
  546. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +0 -1
  547. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +0 -42
  548. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +0 -1
  549. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +0 -123
  550. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +0 -1
  551. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +0 -45
  552. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +0 -1
  553. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +0 -132
  554. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +0 -1
  555. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +0 -33
  556. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +0 -1
  557. package/dist/plugins/specweave/lib/hooks/reflection-parser.js +0 -419
  558. package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +0 -1
  559. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +0 -56
  560. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +0 -1
  561. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +0 -239
  562. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +0 -1
  563. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +0 -64
  564. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +0 -1
  565. package/dist/plugins/specweave/lib/hooks/reflection-storage.js +0 -305
  566. package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +0 -1
  567. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +0 -43
  568. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +0 -1
  569. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +0 -203
  570. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +0 -1
  571. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +0 -32
  572. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +0 -1
  573. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +0 -405
  574. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +0 -1
  575. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +0 -59
  576. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +0 -1
  577. package/dist/plugins/specweave/lib/hooks/translate-file.js +0 -350
  578. package/dist/plugins/specweave/lib/hooks/translate-file.js.map +0 -1
  579. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +0 -13
  580. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +0 -1
  581. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +0 -175
  582. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +0 -1
  583. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +0 -164
  584. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +0 -1
  585. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +0 -73
  586. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +0 -1
  587. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +0 -21
  588. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +0 -1
  589. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +0 -162
  590. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +0 -1
  591. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +0 -29
  592. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +0 -1
  593. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +0 -203
  594. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +0 -1
  595. package/dist/src/core/living-docs/spec-distributor.d.ts +0 -180
  596. package/dist/src/core/living-docs/spec-distributor.d.ts.map +0 -1
  597. package/dist/src/core/living-docs/spec-distributor.js +0 -1840
  598. package/dist/src/core/living-docs/spec-distributor.js.map +0 -1
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Learning Path Recommender for Serverless Platforms
3
+ *
4
+ * Recommends curated learning resources based on skill level, platform,
5
+ * and best practices for serverless development.
6
+ */
7
+ /**
8
+ * User skill levels for serverless development
9
+ */
10
+ export type SkillLevel = 'beginner' | 'intermediate' | 'advanced';
11
+ /**
12
+ * Learning resource types
13
+ */
14
+ export type ResourceType = 'tutorial' | 'documentation' | 'video' | 'course' | 'sample-project' | 'blog-post' | 'webinar';
15
+ /**
16
+ * Complexity rating for sample projects
17
+ */
18
+ export type ProjectComplexity = 'basic' | 'intermediate' | 'advanced';
19
+ /**
20
+ * Best practice categories
21
+ */
22
+ export type BestPracticeCategory = 'performance' | 'security' | 'cost' | 'architecture' | 'monitoring' | 'testing';
23
+ /**
24
+ * Severity level for common pitfalls
25
+ */
26
+ export type PitfallSeverity = 'critical' | 'high' | 'medium' | 'low';
27
+ /**
28
+ * A single learning resource (tutorial, course, video, etc.)
29
+ */
30
+ export interface LearningResource {
31
+ id: string;
32
+ title: string;
33
+ url: string;
34
+ type: ResourceType;
35
+ skillLevel: SkillLevel;
36
+ estimatedTime?: string;
37
+ provider?: string;
38
+ description?: string;
39
+ tags?: string[];
40
+ prerequisite?: string;
41
+ lastVerified?: string;
42
+ }
43
+ /**
44
+ * A best practice guide for a specific category
45
+ */
46
+ export interface BestPractice {
47
+ id: string;
48
+ category: BestPracticeCategory;
49
+ title: string;
50
+ description: string;
51
+ priority: 'high' | 'medium' | 'low';
52
+ example?: string;
53
+ relatedResources?: string[];
54
+ }
55
+ /**
56
+ * A common pitfall with mitigation strategy
57
+ */
58
+ export interface CommonPitfall {
59
+ id: string;
60
+ title: string;
61
+ description: string;
62
+ mitigation: string;
63
+ severity: PitfallSeverity;
64
+ example?: string;
65
+ affectedSkillLevels?: SkillLevel[];
66
+ }
67
+ /**
68
+ * A sample project with complexity rating
69
+ */
70
+ export interface SampleProject extends LearningResource {
71
+ complexity: ProjectComplexity;
72
+ estimatedDuration?: string;
73
+ technologies?: string[];
74
+ sourceRepo?: string;
75
+ }
76
+ /**
77
+ * Data freshness information
78
+ */
79
+ export interface DataFreshness {
80
+ lastVerified: string;
81
+ isStale: boolean;
82
+ staleDays: number;
83
+ maxStaleDays: number;
84
+ }
85
+ /**
86
+ * Complete learning path recommendation result
87
+ */
88
+ export interface LearningPathResult {
89
+ platform: string;
90
+ platformId: string;
91
+ skillLevel: SkillLevel;
92
+ tutorials: LearningResource[];
93
+ documentation: LearningResource[];
94
+ videos: LearningResource[];
95
+ courses: LearningResource[];
96
+ sampleProjects: SampleProject[];
97
+ bestPractices: BestPractice[];
98
+ commonPitfalls: CommonPitfall[];
99
+ dataFreshness: DataFreshness;
100
+ nextSteps: string[];
101
+ estimatedLearningTime?: string;
102
+ }
103
+ /**
104
+ * Skill detection result with confidence
105
+ */
106
+ export interface SkillDetectionResult {
107
+ skillLevel: SkillLevel;
108
+ confidence: 'low' | 'medium' | 'high';
109
+ signals: string[];
110
+ justification: string;
111
+ }
112
+ /**
113
+ * Detect user skill level from natural language input
114
+ *
115
+ * Analyzes keywords and patterns to determine if user is beginner/intermediate/advanced
116
+ * @param userInput - User's description of their experience
117
+ * @returns SkillDetectionResult with detected level and confidence
118
+ */
119
+ export declare function detectSkillLevel(userInput: string): SkillDetectionResult;
120
+ /**
121
+ * Recommend learning path for a specific platform and skill level
122
+ *
123
+ * @param platformId - ID of the serverless platform
124
+ * @param skillLevel - Optional skill level (will default to 'beginner' if not provided)
125
+ * @returns Complete learning path recommendation
126
+ */
127
+ export declare function recommendLearningPath(platformId: string, skillLevel?: SkillLevel): LearningPathResult;
128
+ /**
129
+ * Get all available platform IDs
130
+ */
131
+ export declare function getAvailablePlatforms(): string[];
132
+ /**
133
+ * Get platforms with fresh data (not stale)
134
+ */
135
+ export declare function getFreshPlatforms(maxStaleDays?: number): string[];
136
+ /**
137
+ * Get stale platforms (data not verified within max days)
138
+ */
139
+ export declare function getStalePlatforms(maxStaleDays?: number): string[];
140
+ /**
141
+ * Get learning resources for a specific category and platform
142
+ */
143
+ export declare function getResourcesByType(platformId: string, resourceType: ResourceType, skillLevel?: SkillLevel): LearningResource[];
144
+ /**
145
+ * Validate learning path data integrity
146
+ */
147
+ export declare function validateLearningPathData(): {
148
+ isValid: boolean;
149
+ errors: string[];
150
+ warnings: string[];
151
+ };
152
+ //# sourceMappingURL=learning-path-recommender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-path-recommender.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/learning-path-recommender.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,eAAe,GACf,OAAO,GACP,QAAQ,GACR,gBAAgB,GAChB,WAAW,GACX,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,UAAU,GACV,MAAM,GACN,cAAc,GACd,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AA+BD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CA0GxE;AAyCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,UAAU,GACtB,kBAAkB,CAgFpB;AAkFD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAOhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,GAAE,MAAW,GAAG,MAAM,EAAE,CAYrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,GAAE,MAAW,GAAG,MAAM,EAAE,CAYrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,UAAU,CAAC,EAAE,UAAU,GACtB,gBAAgB,EAAE,CAoCpB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAuDA"}
@@ -0,0 +1,389 @@
1
+ /**
2
+ * Learning Path Recommender for Serverless Platforms
3
+ *
4
+ * Recommends curated learning resources based on skill level, platform,
5
+ * and best practices for serverless development.
6
+ */
7
+ import * as path from 'path';
8
+ import * as fs from 'fs';
9
+ // ============================================================================
10
+ // Module Functions
11
+ // ============================================================================
12
+ /**
13
+ * Detect user skill level from natural language input
14
+ *
15
+ * Analyzes keywords and patterns to determine if user is beginner/intermediate/advanced
16
+ * @param userInput - User's description of their experience
17
+ * @returns SkillDetectionResult with detected level and confidence
18
+ */
19
+ export function detectSkillLevel(userInput) {
20
+ const input = userInput.toLowerCase();
21
+ const signals = [];
22
+ // Beginner indicators
23
+ const beginnerKeywords = [
24
+ 'new to',
25
+ 'first time',
26
+ 'never used',
27
+ 'just getting started',
28
+ 'learning',
29
+ 'basics',
30
+ 'beginner',
31
+ 'noob',
32
+ 'what is',
33
+ 'how do i',
34
+ 'no experience',
35
+ ];
36
+ // Advanced indicators
37
+ const advancedKeywords = [
38
+ 'production',
39
+ 'performance optimization',
40
+ 'cold start',
41
+ 'concurrent execution',
42
+ 'distributed',
43
+ 'scaling',
44
+ 'advanced',
45
+ 'expert',
46
+ 'complex architecture',
47
+ 'migration',
48
+ 'multi-region',
49
+ 'enterprise',
50
+ 'vpc',
51
+ 'reserved capacity',
52
+ ];
53
+ // Intermediate indicators
54
+ const intermediateKeywords = [
55
+ 'worked with',
56
+ 'familiar with',
57
+ 'experienced',
58
+ 'built',
59
+ 'deployed',
60
+ 'integration',
61
+ 'api',
62
+ 'database',
63
+ 'ci/cd',
64
+ 'testing',
65
+ ];
66
+ let beginnerScore = 0;
67
+ let advancedScore = 0;
68
+ let intermediateScore = 0;
69
+ for (const keyword of beginnerKeywords) {
70
+ if (input.includes(keyword)) {
71
+ beginnerScore += 2;
72
+ signals.push(`Beginner keyword: "${keyword}"`);
73
+ }
74
+ }
75
+ for (const keyword of advancedKeywords) {
76
+ if (input.includes(keyword)) {
77
+ advancedScore += 3;
78
+ signals.push(`Advanced keyword: "${keyword}"`);
79
+ }
80
+ }
81
+ for (const keyword of intermediateKeywords) {
82
+ if (input.includes(keyword)) {
83
+ intermediateScore += 1;
84
+ signals.push(`Intermediate keyword: "${keyword}"`);
85
+ }
86
+ }
87
+ // Determine skill level based on scores
88
+ let skillLevel = 'beginner';
89
+ let confidence = 'medium';
90
+ let justification = '';
91
+ if (advancedScore > beginnerScore && advancedScore > intermediateScore) {
92
+ skillLevel = 'advanced';
93
+ confidence = advancedScore >= 6 ? 'high' : 'medium';
94
+ justification = `Detected ${advancedScore} advanced signals`;
95
+ }
96
+ else if (intermediateScore > beginnerScore && intermediateScore > advancedScore) {
97
+ skillLevel = 'intermediate';
98
+ confidence = intermediateScore >= 3 ? 'high' : 'medium';
99
+ justification = `Detected ${intermediateScore} intermediate signals`;
100
+ }
101
+ else {
102
+ skillLevel = 'beginner';
103
+ confidence = beginnerScore >= 2 ? 'high' : 'low';
104
+ justification = `Detected ${beginnerScore} beginner signals`;
105
+ }
106
+ // Adjust confidence if input is very short
107
+ if (userInput.length < 20) {
108
+ confidence = 'low';
109
+ }
110
+ return {
111
+ skillLevel,
112
+ confidence,
113
+ signals,
114
+ justification,
115
+ };
116
+ }
117
+ /**
118
+ * Load learning paths knowledge base from JSON file
119
+ * @returns Parsed knowledge base
120
+ */
121
+ function loadKnowledgeBase() {
122
+ const knowledgeBasePath = path.join(__dirname, '../../..', 'plugins/specweave/knowledge-base/serverless/learning-paths.json');
123
+ if (!fs.existsSync(knowledgeBasePath)) {
124
+ throw new Error(`Learning paths knowledge base not found at ${knowledgeBasePath}`);
125
+ }
126
+ const jsonContent = fs.readFileSync(knowledgeBasePath, 'utf-8');
127
+ return JSON.parse(jsonContent);
128
+ }
129
+ /**
130
+ * Check if data is fresh (verified within max stale days)
131
+ * @param lastVerified - Date in YYYY-MM-DD format
132
+ * @param maxStaleDays - Maximum days allowed before data is considered stale
133
+ * @returns DataFreshness object
134
+ */
135
+ function checkDataFreshness(lastVerified, maxStaleDays = 60) {
136
+ const verifiedDate = new Date(lastVerified);
137
+ const today = new Date();
138
+ const diffTime = Math.abs(today.getTime() - verifiedDate.getTime());
139
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
140
+ return {
141
+ lastVerified,
142
+ isStale: diffDays > maxStaleDays,
143
+ staleDays: diffDays,
144
+ maxStaleDays,
145
+ };
146
+ }
147
+ /**
148
+ * Recommend learning path for a specific platform and skill level
149
+ *
150
+ * @param platformId - ID of the serverless platform
151
+ * @param skillLevel - Optional skill level (will default to 'beginner' if not provided)
152
+ * @returns Complete learning path recommendation
153
+ */
154
+ export function recommendLearningPath(platformId, skillLevel) {
155
+ const knowledgeBase = loadKnowledgeBase();
156
+ // Find platform in knowledge base
157
+ const platformData = knowledgeBase.platforms[platformId];
158
+ if (!platformData) {
159
+ throw new Error(`Platform '${platformId}' not found. Available platforms: ${Object.keys(knowledgeBase.platforms).join(', ')}`);
160
+ }
161
+ // Default to beginner if not specified
162
+ const detectedSkillLevel = skillLevel || 'beginner';
163
+ // Filter resources by skill level
164
+ const tutorials = platformData.resources.tutorials.filter((r) => r.skillLevel === detectedSkillLevel || r.skillLevel === 'beginner');
165
+ const documentation = platformData.resources.documentation.filter((r) => r.skillLevel === detectedSkillLevel || r.skillLevel === 'beginner');
166
+ const videos = platformData.resources.videos.filter((r) => r.skillLevel === detectedSkillLevel || r.skillLevel === 'beginner');
167
+ const courses = platformData.resources.courses.filter((r) => r.skillLevel === detectedSkillLevel || r.skillLevel === 'beginner');
168
+ const sampleProjects = platformData.resources.sampleProjects.filter((r) => r.skillLevel === detectedSkillLevel);
169
+ // Filter best practices by relevance to skill level
170
+ const bestPractices = platformData.bestPractices;
171
+ // Filter pitfalls by skill level relevance
172
+ const commonPitfalls = platformData.commonPitfalls.filter((p) => {
173
+ if (!p.affectedSkillLevels) {
174
+ return true; // Include if not restricted
175
+ }
176
+ return p.affectedSkillLevels.includes(detectedSkillLevel);
177
+ });
178
+ // Check data freshness
179
+ const dataFreshness = checkDataFreshness(platformData.lastVerified, knowledgeBase.maxStaleDays);
180
+ // Generate next steps based on skill level
181
+ const nextSteps = generateNextSteps(detectedSkillLevel, tutorials, sampleProjects);
182
+ // Estimate total learning time
183
+ const estimatedLearningTime = estimateTotalLearningTime(tutorials, videos, courses, sampleProjects);
184
+ return {
185
+ platform: platformData.name,
186
+ platformId,
187
+ skillLevel: detectedSkillLevel,
188
+ tutorials,
189
+ documentation,
190
+ videos,
191
+ courses,
192
+ sampleProjects,
193
+ bestPractices,
194
+ commonPitfalls,
195
+ dataFreshness,
196
+ nextSteps,
197
+ estimatedLearningTime,
198
+ };
199
+ }
200
+ /**
201
+ * Generate recommended next steps based on skill level
202
+ */
203
+ function generateNextSteps(skillLevel, tutorials, projects) {
204
+ const steps = [];
205
+ if (skillLevel === 'beginner') {
206
+ steps.push('Start with the official documentation to understand core concepts');
207
+ steps.push('Complete a beginner tutorial to set up your first function');
208
+ steps.push('Build a simple "Hello World" function to test the basics');
209
+ steps.push('Explore the sample projects for inspiration');
210
+ steps.push('Gradually move to intermediate tutorials as you gain confidence');
211
+ }
212
+ else if (skillLevel === 'intermediate') {
213
+ steps.push('Review the best practices guide for performance and security');
214
+ steps.push('Build a sample project with real-world features (database, API calls)');
215
+ steps.push('Study common pitfalls and how to avoid them');
216
+ steps.push('Explore monitoring and logging strategies');
217
+ steps.push('Consider advanced topics like cold start optimization');
218
+ }
219
+ else {
220
+ steps.push('Review the cost optimization and advanced architecture guides');
221
+ steps.push('Implement advanced patterns (event sourcing, CQRS)');
222
+ steps.push('Work on scaling and multi-region deployments');
223
+ steps.push('Contribute to open-source serverless projects');
224
+ steps.push('Mentor junior developers and share your knowledge');
225
+ }
226
+ return steps;
227
+ }
228
+ /**
229
+ * Estimate total learning time from resources
230
+ */
231
+ function estimateTotalLearningTime(tutorials, videos, courses, projects) {
232
+ const timeEstimates = [];
233
+ // Parse time estimates
234
+ const parseTimeEstimate = (timeStr) => {
235
+ if (!timeStr)
236
+ return null;
237
+ const match = timeStr.match(/(\d+)/);
238
+ if (!match)
239
+ return null;
240
+ const minutes = parseInt(match[1], 10);
241
+ return minutes;
242
+ };
243
+ // Collect all time estimates
244
+ for (const resource of [...tutorials, ...videos, ...courses, ...projects]) {
245
+ const estimate = parseTimeEstimate(resource.estimatedTime);
246
+ if (estimate) {
247
+ timeEstimates.push(estimate);
248
+ }
249
+ }
250
+ if (timeEstimates.length === 0) {
251
+ return undefined;
252
+ }
253
+ const totalMinutes = timeEstimates.reduce((a, b) => a + b, 0);
254
+ const totalHours = Math.round(totalMinutes / 60);
255
+ if (totalHours < 1) {
256
+ return `${totalMinutes} minutes`;
257
+ }
258
+ else if (totalHours < 24) {
259
+ return `${totalHours} hours`;
260
+ }
261
+ else {
262
+ const days = Math.round(totalHours / 8);
263
+ return `${days} days (studying ${Math.round(totalHours / days)} hours/day)`;
264
+ }
265
+ }
266
+ /**
267
+ * Get all available platform IDs
268
+ */
269
+ export function getAvailablePlatforms() {
270
+ try {
271
+ const knowledgeBase = loadKnowledgeBase();
272
+ return Object.keys(knowledgeBase.platforms);
273
+ }
274
+ catch {
275
+ return ['aws-lambda', 'azure-functions', 'gcp-functions', 'firebase-functions', 'supabase'];
276
+ }
277
+ }
278
+ /**
279
+ * Get platforms with fresh data (not stale)
280
+ */
281
+ export function getFreshPlatforms(maxStaleDays = 60) {
282
+ const knowledgeBase = loadKnowledgeBase();
283
+ const freshPlatforms = [];
284
+ for (const [platformId, platformData] of Object.entries(knowledgeBase.platforms)) {
285
+ const freshness = checkDataFreshness(platformData.lastVerified, maxStaleDays);
286
+ if (!freshness.isStale) {
287
+ freshPlatforms.push(platformId);
288
+ }
289
+ }
290
+ return freshPlatforms;
291
+ }
292
+ /**
293
+ * Get stale platforms (data not verified within max days)
294
+ */
295
+ export function getStalePlatforms(maxStaleDays = 60) {
296
+ const knowledgeBase = loadKnowledgeBase();
297
+ const stalePlatforms = [];
298
+ for (const [platformId, platformData] of Object.entries(knowledgeBase.platforms)) {
299
+ const freshness = checkDataFreshness(platformData.lastVerified, maxStaleDays);
300
+ if (freshness.isStale) {
301
+ stalePlatforms.push(platformId);
302
+ }
303
+ }
304
+ return stalePlatforms;
305
+ }
306
+ /**
307
+ * Get learning resources for a specific category and platform
308
+ */
309
+ export function getResourcesByType(platformId, resourceType, skillLevel) {
310
+ const knowledgeBase = loadKnowledgeBase();
311
+ const platformData = knowledgeBase.platforms[platformId];
312
+ if (!platformData) {
313
+ throw new Error(`Platform '${platformId}' not found`);
314
+ }
315
+ let resources = [];
316
+ switch (resourceType) {
317
+ case 'tutorial':
318
+ resources = platformData.resources.tutorials;
319
+ break;
320
+ case 'documentation':
321
+ resources = platformData.resources.documentation;
322
+ break;
323
+ case 'video':
324
+ resources = platformData.resources.videos;
325
+ break;
326
+ case 'course':
327
+ resources = platformData.resources.courses;
328
+ break;
329
+ case 'sample-project':
330
+ resources = platformData.resources.sampleProjects;
331
+ break;
332
+ default:
333
+ resources = [];
334
+ }
335
+ // Filter by skill level if specified
336
+ if (skillLevel) {
337
+ resources = resources.filter((r) => r.skillLevel === skillLevel);
338
+ }
339
+ return resources;
340
+ }
341
+ /**
342
+ * Validate learning path data integrity
343
+ */
344
+ export function validateLearningPathData() {
345
+ const errors = [];
346
+ const warnings = [];
347
+ try {
348
+ const knowledgeBase = loadKnowledgeBase();
349
+ // Check for required fields
350
+ for (const [platformId, platformData] of Object.entries(knowledgeBase.platforms)) {
351
+ if (!platformData.name) {
352
+ errors.push(`Platform ${platformId} missing name`);
353
+ }
354
+ if (!platformData.lastVerified) {
355
+ errors.push(`Platform ${platformId} missing lastVerified date`);
356
+ }
357
+ // Check for stale data
358
+ const freshness = checkDataFreshness(platformData.lastVerified, 60);
359
+ if (freshness.isStale) {
360
+ warnings.push(`Platform ${platformId} data is stale (last verified ${freshness.staleDays} days ago)`);
361
+ }
362
+ // Validate all resources have IDs
363
+ const allResources = [
364
+ ...platformData.resources.tutorials,
365
+ ...platformData.resources.documentation,
366
+ ...platformData.resources.videos,
367
+ ...platformData.resources.courses,
368
+ ...platformData.resources.sampleProjects,
369
+ ];
370
+ for (const resource of allResources) {
371
+ if (!resource.id) {
372
+ errors.push(`Platform ${platformId} has resource without ID: ${resource.title}`);
373
+ }
374
+ if (!resource.url) {
375
+ errors.push(`Platform ${platformId} resource ${resource.id} missing URL: ${resource.title}`);
376
+ }
377
+ }
378
+ }
379
+ }
380
+ catch (error) {
381
+ errors.push(`Failed to load knowledge base: ${error}`);
382
+ }
383
+ return {
384
+ isValid: errors.length === 0,
385
+ errors,
386
+ warnings,
387
+ };
388
+ }
389
+ //# sourceMappingURL=learning-path-recommender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-path-recommender.js","sourceRoot":"","sources":["../../../../src/core/serverless/learning-path-recommender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ServerlessPlatform } from './types.js';
2
+ /**
3
+ * Loads and manages serverless platform data from the knowledge base
4
+ */
5
+ export declare class PlatformDataLoader {
6
+ private platformsDir;
7
+ private platforms;
8
+ constructor();
9
+ /**
10
+ * Load all platform data files
11
+ */
12
+ loadAll(): Promise<ServerlessPlatform[]>;
13
+ /**
14
+ * Load a specific platform by ID
15
+ */
16
+ loadById(id: string): Promise<ServerlessPlatform | undefined>;
17
+ /**
18
+ * Get all loaded platforms
19
+ */
20
+ getAllPlatforms(): ServerlessPlatform[];
21
+ }
22
+ //# sourceMappingURL=platform-data-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-data-loader.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/platform-data-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAA8C;;IAQ/D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqB9C;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAOnE;;OAEG;IACH,eAAe,IAAI,kBAAkB,EAAE;CAGxC"}
@@ -0,0 +1,49 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Loads and manages serverless platform data from the knowledge base
5
+ */
6
+ export class PlatformDataLoader {
7
+ constructor() {
8
+ this.platforms = new Map();
9
+ // Determine path to knowledge base (works from both src/ and dist/)
10
+ const rootDir = path.join(__dirname, '../../..');
11
+ this.platformsDir = path.join(rootDir, 'plugins/specweave/knowledge-base/serverless/platforms');
12
+ }
13
+ /**
14
+ * Load all platform data files
15
+ */
16
+ async loadAll() {
17
+ const platformFiles = [
18
+ 'aws-lambda.json',
19
+ 'azure-functions.json',
20
+ 'gcp-cloud-functions.json',
21
+ 'firebase.json',
22
+ 'supabase.json'
23
+ ];
24
+ const platforms = [];
25
+ for (const file of platformFiles) {
26
+ const filePath = path.join(this.platformsDir, file);
27
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
28
+ platforms.push(data);
29
+ this.platforms.set(data.id, data);
30
+ }
31
+ return platforms;
32
+ }
33
+ /**
34
+ * Load a specific platform by ID
35
+ */
36
+ async loadById(id) {
37
+ if (this.platforms.size === 0) {
38
+ await this.loadAll();
39
+ }
40
+ return this.platforms.get(id);
41
+ }
42
+ /**
43
+ * Get all loaded platforms
44
+ */
45
+ getAllPlatforms() {
46
+ return Array.from(this.platforms.values());
47
+ }
48
+ }
49
+ //# sourceMappingURL=platform-data-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-data-loader.js","sourceRoot":"","sources":["../../../../src/core/serverless/platform-data-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAI7B;QAFQ,cAAS,GAAoC,IAAI,GAAG,EAAE,CAAC;QAG7D,oEAAoE;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uDAAuD,CAAC,CAAC;IAClG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,aAAa,GAAG;YACpB,iBAAiB;YACjB,sBAAsB;YACtB,0BAA0B;YAC1B,eAAe;YACf,eAAe;SAChB,CAAC;QAEF,MAAM,SAAS,GAAyB,EAAE,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Platform Selector
3
+ *
4
+ * Ranks serverless platforms based on project context and requirements.
5
+ */
6
+ import type { ProjectContext, PlatformKnowledgeBase, PlatformSelectionResult } from './types.js';
7
+ interface SelectionCriteria {
8
+ context: ProjectContext;
9
+ preferredEcosystem?: 'aws' | 'azure' | 'gcp' | 'open-source' | 'mobile';
10
+ runtimeRequired?: string;
11
+ prioritizeStartupCredits?: boolean;
12
+ prioritizeLearning?: boolean;
13
+ isProduction?: boolean;
14
+ }
15
+ /**
16
+ * Select and rank platforms based on criteria
17
+ */
18
+ export declare function selectPlatforms(knowledgeBase: PlatformKnowledgeBase, criteria: SelectionCriteria): PlatformSelectionResult;
19
+ export {};
20
+ //# sourceMappingURL=platform-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-selector.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/platform-selector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EAEd,qBAAqB,EAErB,uBAAuB,EAExB,MAAM,YAAY,CAAC;AAEpB,UAAU,iBAAiB;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,kBAAkB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,aAAa,GAAG,QAAQ,CAAC;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,qBAAqB,EACpC,QAAQ,EAAE,iBAAiB,GAC1B,uBAAuB,CA0BzB"}