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,69 @@
1
+ /**
2
+ * Serverless Cost Estimator
3
+ *
4
+ * Calculates accurate costs for serverless platforms including:
5
+ * - Compute costs (GB-seconds)
6
+ * - Request costs
7
+ * - Data transfer costs
8
+ * - Free tier deductions
9
+ */
10
+ import type { ServerlessPlatform } from './types.js';
11
+ /**
12
+ * Input parameters for cost estimation
13
+ */
14
+ export interface CostEstimationInput {
15
+ requestsPerMonth: number;
16
+ avgExecutionTimeMs: number;
17
+ memoryMb: number;
18
+ dataTransferGb: number;
19
+ }
20
+ /**
21
+ * Detailed cost breakdown by category
22
+ */
23
+ export interface CostBreakdown {
24
+ compute: number;
25
+ requests: number;
26
+ dataTransfer: number;
27
+ total: number;
28
+ freeTierDeduction: number;
29
+ billableAmount: number;
30
+ }
31
+ /**
32
+ * Complete cost estimation result for a platform
33
+ */
34
+ export interface CostEstimationResult {
35
+ platform: ServerlessPlatform;
36
+ input: CostEstimationInput;
37
+ breakdown: CostBreakdown;
38
+ withinFreeTier: boolean;
39
+ monthlyEstimate: number;
40
+ }
41
+ /**
42
+ * Estimate costs for a serverless platform
43
+ *
44
+ * @param platform - The serverless platform to estimate costs for
45
+ * @param input - Usage parameters
46
+ * @returns Detailed cost estimation with breakdown
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const input = {
51
+ * requestsPerMonth: 1000000,
52
+ * avgExecutionTimeMs: 200,
53
+ * memoryMb: 512,
54
+ * dataTransferGb: 5
55
+ * };
56
+ * const result = estimateCost(platform, input);
57
+ * console.log(`Monthly cost: $${result.monthlyEstimate}`);
58
+ * ```
59
+ */
60
+ export declare function estimateCost(platform: ServerlessPlatform, input: CostEstimationInput): CostEstimationResult;
61
+ /**
62
+ * Estimate costs by platform ID
63
+ *
64
+ * @param platformId - Platform identifier (e.g., 'aws-lambda', 'firebase')
65
+ * @param input - Usage parameters
66
+ * @returns Cost estimation result
67
+ */
68
+ export declare function estimateCostById(platformId: string, input: CostEstimationInput): Promise<CostEstimationResult>;
69
+ //# sourceMappingURL=cost-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/cost-estimator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,CAyDtB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAS/B"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Serverless Cost Estimator
3
+ *
4
+ * Calculates accurate costs for serverless platforms including:
5
+ * - Compute costs (GB-seconds)
6
+ * - Request costs
7
+ * - Data transfer costs
8
+ * - Free tier deductions
9
+ */
10
+ import { PlatformDataLoader } from './platform-data-loader.js';
11
+ /**
12
+ * Estimate costs for a serverless platform
13
+ *
14
+ * @param platform - The serverless platform to estimate costs for
15
+ * @param input - Usage parameters
16
+ * @returns Detailed cost estimation with breakdown
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const input = {
21
+ * requestsPerMonth: 1000000,
22
+ * avgExecutionTimeMs: 200,
23
+ * memoryMb: 512,
24
+ * dataTransferGb: 5
25
+ * };
26
+ * const result = estimateCost(platform, input);
27
+ * console.log(`Monthly cost: $${result.monthlyEstimate}`);
28
+ * ```
29
+ */
30
+ export function estimateCost(platform, input) {
31
+ // Validate input
32
+ validateInput(input);
33
+ const { pricing } = platform;
34
+ // Calculate GB-seconds
35
+ // Formula: (requests × execution_time_ms × memory_MB) / (1000 × 1024)
36
+ const gbSeconds = (input.requestsPerMonth * input.avgExecutionTimeMs * input.memoryMb) / (1000 * 1024);
37
+ // Calculate raw costs before free tier
38
+ const computeCostRaw = gbSeconds * pricing.payAsYouGo.computePerGbSecond;
39
+ const requestCostRaw = (input.requestsPerMonth / 1000000) * pricing.payAsYouGo.requestsPer1M;
40
+ const dataTransferCostRaw = input.dataTransferGb * pricing.payAsYouGo.dataTransferPerGb;
41
+ // Calculate free tier deductions
42
+ const freeTierDeduction = calculateFreeTierDeduction({
43
+ compute: computeCostRaw,
44
+ requests: requestCostRaw,
45
+ dataTransfer: dataTransferCostRaw,
46
+ }, {
47
+ gbSeconds,
48
+ requests: input.requestsPerMonth,
49
+ dataTransferGb: input.dataTransferGb,
50
+ }, platform);
51
+ // Calculate billable amounts
52
+ const computeCost = Math.max(0, computeCostRaw - freeTierDeduction.compute);
53
+ const requestCost = Math.max(0, requestCostRaw - freeTierDeduction.requests);
54
+ const dataTransferCost = Math.max(0, dataTransferCostRaw - freeTierDeduction.dataTransfer);
55
+ const total = computeCostRaw + requestCostRaw + dataTransferCostRaw;
56
+ const totalFreeTierDeduction = freeTierDeduction.compute + freeTierDeduction.requests + freeTierDeduction.dataTransfer;
57
+ const billableAmount = computeCost + requestCost + dataTransferCost;
58
+ const breakdown = {
59
+ compute: computeCost,
60
+ requests: requestCost,
61
+ dataTransfer: dataTransferCost,
62
+ total,
63
+ freeTierDeduction: totalFreeTierDeduction,
64
+ billableAmount,
65
+ };
66
+ return {
67
+ platform,
68
+ input,
69
+ breakdown,
70
+ withinFreeTier: billableAmount === 0,
71
+ monthlyEstimate: billableAmount,
72
+ };
73
+ }
74
+ /**
75
+ * Estimate costs by platform ID
76
+ *
77
+ * @param platformId - Platform identifier (e.g., 'aws-lambda', 'firebase')
78
+ * @param input - Usage parameters
79
+ * @returns Cost estimation result
80
+ */
81
+ export async function estimateCostById(platformId, input) {
82
+ const loader = new PlatformDataLoader();
83
+ const platform = await loader.loadById(platformId);
84
+ if (!platform) {
85
+ throw new Error(`Platform not found: ${platformId}`);
86
+ }
87
+ return estimateCost(platform, input);
88
+ }
89
+ /**
90
+ * Calculate free tier deductions
91
+ */
92
+ function calculateFreeTierDeduction(costs, usage, platform) {
93
+ const { freeTier, payAsYouGo } = platform.pricing;
94
+ // Calculate how much of each resource is covered by free tier
95
+ const freeComputeGbSeconds = Math.min(usage.gbSeconds, freeTier.computeGbSeconds);
96
+ const freeRequests = Math.min(usage.requests, freeTier.requests);
97
+ const freeDataTransferGb = Math.min(usage.dataTransferGb, freeTier.dataTransferGb);
98
+ // Calculate the monetary value of free tier coverage
99
+ const computeDeduction = freeComputeGbSeconds * payAsYouGo.computePerGbSecond;
100
+ const requestsDeduction = (freeRequests / 1000000) * payAsYouGo.requestsPer1M;
101
+ const dataTransferDeduction = freeDataTransferGb * payAsYouGo.dataTransferPerGb;
102
+ return {
103
+ compute: Math.min(computeDeduction, costs.compute),
104
+ requests: Math.min(requestsDeduction, costs.requests),
105
+ dataTransfer: Math.min(dataTransferDeduction, costs.dataTransfer),
106
+ };
107
+ }
108
+ /**
109
+ * Validate cost estimation input
110
+ */
111
+ function validateInput(input) {
112
+ if (input.requestsPerMonth < 0) {
113
+ throw new Error('Requests per month cannot be negative');
114
+ }
115
+ if (input.avgExecutionTimeMs < 0) {
116
+ throw new Error('Average execution time cannot be negative');
117
+ }
118
+ if (input.memoryMb < 0) {
119
+ throw new Error('Memory cannot be negative');
120
+ }
121
+ if (input.dataTransferGb < 0) {
122
+ throw new Error('Data transfer cannot be negative');
123
+ }
124
+ // Zero requests is valid (e.g., for testing or estimation purposes)
125
+ // No warning needed as it's a valid scenario
126
+ }
127
+ //# sourceMappingURL=cost-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimator.js","sourceRoot":"","sources":["../../../../src/core/serverless/cost-estimator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Serverless Cost Optimizer
3
+ *
4
+ * Analyzes usage patterns and provides optimization recommendations to reduce costs:
5
+ * - Memory right-sizing
6
+ * - Caching strategies
7
+ * - Batching recommendations
8
+ * - Reserved capacity
9
+ * - Compression
10
+ * - CDN usage
11
+ */
12
+ import type { ServerlessPlatform } from './types.js';
13
+ import type { CostEstimationInput } from './cost-estimator.js';
14
+ /**
15
+ * Types of optimization recommendations
16
+ */
17
+ export type OptimizationType = 'memory' | 'caching' | 'batching' | 'reserved-capacity' | 'compression' | 'cdn';
18
+ /**
19
+ * Individual optimization recommendation
20
+ */
21
+ export interface OptimizationRecommendation {
22
+ type: OptimizationType;
23
+ description: string;
24
+ estimatedSavings: number;
25
+ implementationComplexity: 'low' | 'medium' | 'high';
26
+ priority: 'high' | 'medium' | 'low';
27
+ }
28
+ /**
29
+ * Complete cost optimization analysis result
30
+ */
31
+ export interface CostOptimizationResult {
32
+ currentCost: number;
33
+ optimizedCost: number;
34
+ potentialSavings: number;
35
+ recommendations: OptimizationRecommendation[];
36
+ }
37
+ /**
38
+ * Analyze usage and generate cost optimization recommendations
39
+ *
40
+ * @param platform - The serverless platform
41
+ * @param input - Current usage parameters
42
+ * @returns Optimization analysis with recommendations
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const input = {
47
+ * requestsPerMonth: 5000000,
48
+ * avgExecutionTimeMs: 500,
49
+ * memoryMb: 1024,
50
+ * dataTransferGb: 50
51
+ * };
52
+ * const result = optimizeCost(platform, input);
53
+ * console.log(`Potential savings: $${result.potentialSavings}/month`);
54
+ * ```
55
+ */
56
+ export declare function optimizeCost(platform: ServerlessPlatform, input: CostEstimationInput): CostOptimizationResult;
57
+ //# sourceMappingURL=cost-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-optimizer.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/cost-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,mBAAmB,GACnB,aAAa,GACb,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpD,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,0BAA0B,EAAE,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,mBAAmB,GACzB,sBAAsB,CA+DxB"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Serverless Cost Optimizer
3
+ *
4
+ * Analyzes usage patterns and provides optimization recommendations to reduce costs:
5
+ * - Memory right-sizing
6
+ * - Caching strategies
7
+ * - Batching recommendations
8
+ * - Reserved capacity
9
+ * - Compression
10
+ * - CDN usage
11
+ */
12
+ import { estimateCost } from './cost-estimator.js';
13
+ /**
14
+ * Analyze usage and generate cost optimization recommendations
15
+ *
16
+ * @param platform - The serverless platform
17
+ * @param input - Current usage parameters
18
+ * @returns Optimization analysis with recommendations
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const input = {
23
+ * requestsPerMonth: 5000000,
24
+ * avgExecutionTimeMs: 500,
25
+ * memoryMb: 1024,
26
+ * dataTransferGb: 50
27
+ * };
28
+ * const result = optimizeCost(platform, input);
29
+ * console.log(`Potential savings: $${result.potentialSavings}/month`);
30
+ * ```
31
+ */
32
+ export function optimizeCost(platform, input) {
33
+ const currentEstimation = estimateCost(platform, input);
34
+ const currentCost = currentEstimation.monthlyEstimate;
35
+ const recommendations = [];
36
+ let optimizedCost = currentCost;
37
+ // 1. Memory right-sizing
38
+ const memoryOptimization = analyzeMemoryOptimization(platform, input, currentCost);
39
+ if (memoryOptimization) {
40
+ recommendations.push(memoryOptimization);
41
+ optimizedCost -= memoryOptimization.estimatedSavings;
42
+ }
43
+ // 2. Caching recommendations
44
+ const cachingOptimization = analyzeCachingOpportunity(input, currentCost);
45
+ if (cachingOptimization) {
46
+ recommendations.push(cachingOptimization);
47
+ optimizedCost -= cachingOptimization.estimatedSavings;
48
+ }
49
+ // 3. Batching recommendations
50
+ const batchingOptimization = analyzeBatchingOpportunity(input, currentCost);
51
+ if (batchingOptimization) {
52
+ recommendations.push(batchingOptimization);
53
+ optimizedCost -= batchingOptimization.estimatedSavings;
54
+ }
55
+ // 4. Reserved capacity
56
+ const reservedCapacityOptimization = analyzeReservedCapacity(input, currentCost);
57
+ if (reservedCapacityOptimization) {
58
+ recommendations.push(reservedCapacityOptimization);
59
+ optimizedCost -= reservedCapacityOptimization.estimatedSavings;
60
+ }
61
+ // 5. Compression
62
+ const compressionOptimization = analyzeCompression(input, currentCost);
63
+ if (compressionOptimization) {
64
+ recommendations.push(compressionOptimization);
65
+ optimizedCost -= compressionOptimization.estimatedSavings;
66
+ }
67
+ // 6. CDN recommendations
68
+ const cdnOptimization = analyzeCdnOpportunity(input, currentCost);
69
+ if (cdnOptimization) {
70
+ recommendations.push(cdnOptimization);
71
+ optimizedCost -= cdnOptimization.estimatedSavings;
72
+ }
73
+ // Sort recommendations by priority and savings
74
+ recommendations.sort((a, b) => {
75
+ const priorityOrder = { high: 3, medium: 2, low: 1 };
76
+ const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority];
77
+ if (priorityDiff !== 0)
78
+ return priorityDiff;
79
+ return b.estimatedSavings - a.estimatedSavings;
80
+ });
81
+ return {
82
+ currentCost,
83
+ optimizedCost: Math.max(0, optimizedCost),
84
+ potentialSavings: currentCost - Math.max(0, optimizedCost),
85
+ recommendations,
86
+ };
87
+ }
88
+ /**
89
+ * Analyze memory right-sizing opportunities
90
+ */
91
+ function analyzeMemoryOptimization(platform, input, currentCost) {
92
+ // Test different memory configurations
93
+ const memoryOptions = [128, 256, 512, 1024, 2048];
94
+ const currentMemory = input.memoryMb;
95
+ // Only recommend if current memory is not already minimal
96
+ if (currentMemory <= 128) {
97
+ return null;
98
+ }
99
+ // Find optimal memory (assuming execution time might improve with more memory)
100
+ let bestMemory = currentMemory;
101
+ let bestCost = currentCost;
102
+ for (const memory of memoryOptions) {
103
+ if (memory >= currentMemory)
104
+ continue; // Only test smaller sizes
105
+ const testInput = { ...input, memoryMb: memory };
106
+ const estimation = estimateCost(platform, testInput);
107
+ if (estimation.monthlyEstimate < bestCost) {
108
+ bestCost = estimation.monthlyEstimate;
109
+ bestMemory = memory;
110
+ }
111
+ }
112
+ if (bestMemory < currentMemory) {
113
+ const savings = currentCost - bestCost;
114
+ const savingsPercent = ((savings / currentCost) * 100).toFixed(1);
115
+ return {
116
+ type: 'memory',
117
+ description: `Reduce memory from ${currentMemory}MB to ${bestMemory}MB. This could save ${savingsPercent}% on compute costs. Test thoroughly to ensure performance is acceptable.`,
118
+ estimatedSavings: savings,
119
+ implementationComplexity: 'low',
120
+ priority: savings > currentCost * 0.2 ? 'high' : 'medium',
121
+ };
122
+ }
123
+ return null;
124
+ }
125
+ /**
126
+ * Analyze caching opportunities
127
+ */
128
+ function analyzeCachingOpportunity(input, currentCost) {
129
+ // High request rate with potential for repetitive queries
130
+ const requestsPerSecond = input.requestsPerMonth / (30 * 24 * 60 * 60);
131
+ if (requestsPerSecond > 10) {
132
+ // Assume 30-50% of requests could be cached
133
+ const cacheHitRate = 0.4;
134
+ const estimatedSavings = currentCost * cacheHitRate * 0.9; // 90% reduction for cached requests
135
+ return {
136
+ type: 'caching',
137
+ description: `Implement caching (Redis, CloudFront, or API Gateway caching) to reduce function invocations. With ~${requestsPerSecond.toFixed(1)} requests/second, caching could eliminate 30-50% of function calls.`,
138
+ estimatedSavings,
139
+ implementationComplexity: 'medium',
140
+ priority: estimatedSavings > currentCost * 0.2 ? 'high' : 'medium',
141
+ };
142
+ }
143
+ return null;
144
+ }
145
+ /**
146
+ * Analyze batching opportunities
147
+ */
148
+ function analyzeBatchingOpportunity(input, currentCost) {
149
+ // Many small invocations that could be batched
150
+ if (input.requestsPerMonth > 1000000 && input.avgExecutionTimeMs < 100) {
151
+ // Batching could reduce invocations by 80%
152
+ const estimatedSavings = currentCost * 0.5; // Conservative 50% savings
153
+ return {
154
+ type: 'batching',
155
+ description: `Batch multiple operations together to reduce invocation count. With ${(input.requestsPerMonth / 1000000).toFixed(1)}M short invocations, batching could significantly reduce request costs.`,
156
+ estimatedSavings,
157
+ implementationComplexity: 'high',
158
+ priority: estimatedSavings > currentCost * 0.3 ? 'high' : 'medium',
159
+ };
160
+ }
161
+ return null;
162
+ }
163
+ /**
164
+ * Analyze reserved capacity opportunities
165
+ */
166
+ function analyzeReservedCapacity(input, currentCost) {
167
+ // High consistent traffic (AWS Lambda offers provisioned concurrency)
168
+ const requestsPerSecond = input.requestsPerMonth / (30 * 24 * 60 * 60);
169
+ if (requestsPerSecond > 100 && currentCost > 500) {
170
+ // Reserved capacity typically saves 20-40%
171
+ const estimatedSavings = currentCost * 0.3;
172
+ return {
173
+ type: 'reserved-capacity',
174
+ description: `Consider provisioned concurrency (AWS Lambda) or reserved capacity. With high consistent traffic (~${requestsPerSecond.toFixed(0)} req/s), reserved capacity could save 20-40% and eliminate cold starts.`,
175
+ estimatedSavings,
176
+ implementationComplexity: 'low',
177
+ priority: 'high',
178
+ };
179
+ }
180
+ return null;
181
+ }
182
+ /**
183
+ * Analyze compression opportunities
184
+ */
185
+ function analyzeCompression(input, currentCost) {
186
+ // High data transfer
187
+ if (input.dataTransferGb > 100) {
188
+ // Compression can reduce transfer by 60-80%
189
+ const compressionRatio = 0.7;
190
+ const dataTransferCostRatio = 0.2; // Assume ~20% of total cost is data transfer
191
+ const estimatedSavings = currentCost * dataTransferCostRatio * compressionRatio;
192
+ return {
193
+ type: 'compression',
194
+ description: `Enable response compression (gzip/brotli) to reduce data transfer costs. With ${input.dataTransferGb.toFixed(0)}GB/month, compression could reduce transfer by 60-80%.`,
195
+ estimatedSavings,
196
+ implementationComplexity: 'low',
197
+ priority: estimatedSavings > 50 ? 'high' : 'medium',
198
+ };
199
+ }
200
+ return null;
201
+ }
202
+ /**
203
+ * Analyze CDN opportunities
204
+ */
205
+ function analyzeCdnOpportunity(input, currentCost) {
206
+ // High read traffic that could benefit from edge caching
207
+ if (input.requestsPerMonth > 10000000 && input.dataTransferGb > 50) {
208
+ // CDN can reduce origin requests by 70-90%
209
+ const cdnCacheRate = 0.8;
210
+ const estimatedSavings = currentCost * cdnCacheRate * 0.6;
211
+ return {
212
+ type: 'cdn',
213
+ description: `Use a CDN (CloudFront, Cloudflare, Fastly) to cache static content and reduce origin requests. With ${(input.requestsPerMonth / 1000000).toFixed(1)}M requests, a CDN could cache 70-90% of traffic.`,
214
+ estimatedSavings,
215
+ implementationComplexity: 'medium',
216
+ priority: estimatedSavings > currentCost * 0.4 ? 'high' : 'medium',
217
+ };
218
+ }
219
+ return null;
220
+ }
221
+ //# sourceMappingURL=cost-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-optimizer.js","sourceRoot":"","sources":["../../../../src/core/serverless/cost-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Serverless Architecture Intelligence - Barrel Exports
3
+ *
4
+ * This module provides comprehensive serverless platform intelligence including:
5
+ * - Context detection (pet-project, startup, enterprise)
6
+ * - Workload suitability analysis
7
+ * - Platform selection and ranking
8
+ * - Cost estimation and optimization
9
+ * - Learning path recommendations
10
+ */
11
+ export * from './types.js';
12
+ export * from './platform-data-loader.js';
13
+ export * from './context-detector.js';
14
+ export * from './suitability-analyzer.js';
15
+ export * from './platform-selector.js';
16
+ export * from './cost-estimator.js';
17
+ export * from './cost-optimizer.js';
18
+ export * from './cost-comparison.js';
19
+ export * from './learning-path-recommender.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/serverless/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Serverless Architecture Intelligence - Barrel Exports
3
+ *
4
+ * This module provides comprehensive serverless platform intelligence including:
5
+ * - Context detection (pet-project, startup, enterprise)
6
+ * - Workload suitability analysis
7
+ * - Platform selection and ranking
8
+ * - Cost estimation and optimization
9
+ * - Learning path recommendations
10
+ */
11
+ // Core types and interfaces
12
+ export * from './types.js';
13
+ // Platform data and loading
14
+ export * from './platform-data-loader.js';
15
+ // Context and suitability analysis
16
+ export * from './context-detector.js';
17
+ export * from './suitability-analyzer.js';
18
+ // Platform selection
19
+ export * from './platform-selector.js';
20
+ // Cost analysis modules
21
+ export * from './cost-estimator.js';
22
+ export * from './cost-optimizer.js';
23
+ export * from './cost-comparison.js';
24
+ // Learning and education
25
+ export * from './learning-path-recommender.js';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/serverless/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4BAA4B;AAC5B,cAAc,YAAY,CAAC;AAE3B,4BAA4B;AAC5B,cAAc,2BAA2B,CAAC;AAE1C,mCAAmC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAE1C,qBAAqB;AACrB,cAAc,wBAAwB,CAAC;AAEvC,wBAAwB;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAErC,yBAAyB;AACzB,cAAc,gCAAgC,CAAC"}