@planu/cli 0.23.2 → 0.25.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 (397) hide show
  1. package/dist/config/ai-model-pricing.json +81 -0
  2. package/dist/config/framework-registry/csharp-aspnet.json +67 -0
  3. package/dist/config/framework-registry/dart-flutter.json +61 -0
  4. package/dist/config/framework-registry/go-gin.json +62 -0
  5. package/dist/config/framework-registry/index.json +164 -0
  6. package/dist/config/framework-registry/java-springboot.json +67 -0
  7. package/dist/config/framework-registry/php-laravel.json +67 -0
  8. package/dist/config/framework-registry/python-django.json +72 -0
  9. package/dist/config/framework-registry/python-fastapi.json +72 -0
  10. package/dist/config/framework-registry/ruby-rails.json +67 -0
  11. package/dist/config/framework-registry/rust-actix.json +61 -0
  12. package/dist/config/framework-registry/swift-swiftui.json +67 -0
  13. package/dist/config/framework-registry/typescript-angular.json +67 -0
  14. package/dist/config/framework-registry/typescript-astro.json +61 -0
  15. package/dist/config/framework-registry/typescript-express.json +67 -0
  16. package/dist/config/framework-registry/typescript-nestjs.json +62 -0
  17. package/dist/config/framework-registry/typescript-nextjs.json +82 -0
  18. package/dist/config/framework-registry/typescript-nuxt.json +67 -0
  19. package/dist/config/framework-registry/typescript-react.json +77 -0
  20. package/dist/config/framework-registry/typescript-remix.json +61 -0
  21. package/dist/config/framework-registry/typescript-sveltekit.json +67 -0
  22. package/dist/config/framework-registry/typescript-vue.json +72 -0
  23. package/dist/config/license-plans.json +23 -3
  24. package/dist/engine/agile-config-builder.d.ts.map +1 -1
  25. package/dist/engine/agile-config-builder.js +3 -0
  26. package/dist/engine/agile-config-builder.js.map +1 -1
  27. package/dist/engine/ai-cost-estimator/core.d.ts +8 -0
  28. package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -0
  29. package/dist/engine/ai-cost-estimator/core.js +257 -0
  30. package/dist/engine/ai-cost-estimator/core.js.map +1 -0
  31. package/dist/engine/ai-cost-estimator/index.d.ts +4 -0
  32. package/dist/engine/ai-cost-estimator/index.d.ts.map +1 -0
  33. package/dist/engine/ai-cost-estimator/index.js +5 -0
  34. package/dist/engine/ai-cost-estimator/index.js.map +1 -0
  35. package/dist/engine/ai-cost-estimator/model-pricing.d.ts +31 -0
  36. package/dist/engine/ai-cost-estimator/model-pricing.d.ts.map +1 -0
  37. package/dist/engine/ai-cost-estimator/model-pricing.js +96 -0
  38. package/dist/engine/ai-cost-estimator/model-pricing.js.map +1 -0
  39. package/dist/engine/ai-cost-estimator/token-estimator.d.ts +37 -0
  40. package/dist/engine/ai-cost-estimator/token-estimator.d.ts.map +1 -0
  41. package/dist/engine/ai-cost-estimator/token-estimator.js +194 -0
  42. package/dist/engine/ai-cost-estimator/token-estimator.js.map +1 -0
  43. package/dist/engine/ci-generator/context-builders.d.ts +4 -0
  44. package/dist/engine/ci-generator/context-builders.d.ts.map +1 -0
  45. package/dist/engine/ci-generator/context-builders.js +129 -0
  46. package/dist/engine/ci-generator/context-builders.js.map +1 -0
  47. package/dist/engine/ci-generator/index.d.ts +7 -0
  48. package/dist/engine/ci-generator/index.d.ts.map +1 -0
  49. package/dist/engine/ci-generator/index.js +44 -0
  50. package/dist/engine/ci-generator/index.js.map +1 -0
  51. package/dist/engine/ci-generator/stack-detector.d.ts +21 -0
  52. package/dist/engine/ci-generator/stack-detector.d.ts.map +1 -0
  53. package/dist/engine/ci-generator/stack-detector.js +203 -0
  54. package/dist/engine/ci-generator/stack-detector.js.map +1 -0
  55. package/dist/engine/ci-generator/yaml-builder.d.ts +8 -0
  56. package/dist/engine/ci-generator/yaml-builder.d.ts.map +1 -0
  57. package/dist/engine/ci-generator/yaml-builder.js +285 -0
  58. package/dist/engine/ci-generator/yaml-builder.js.map +1 -0
  59. package/dist/engine/dashboard/data-loader.d.ts +21 -0
  60. package/dist/engine/dashboard/data-loader.d.ts.map +1 -0
  61. package/dist/engine/dashboard/data-loader.js +196 -0
  62. package/dist/engine/dashboard/data-loader.js.map +1 -0
  63. package/dist/engine/dashboard/index.d.ts +5 -0
  64. package/dist/engine/dashboard/index.d.ts.map +1 -0
  65. package/dist/engine/dashboard/index.js +6 -0
  66. package/dist/engine/dashboard/index.js.map +1 -0
  67. package/dist/engine/dashboard/routes.d.ts +4 -0
  68. package/dist/engine/dashboard/routes.d.ts.map +1 -0
  69. package/dist/engine/dashboard/routes.js +120 -0
  70. package/dist/engine/dashboard/routes.js.map +1 -0
  71. package/dist/engine/dashboard/server.d.ts +14 -0
  72. package/dist/engine/dashboard/server.d.ts.map +1 -0
  73. package/dist/engine/dashboard/server.js +88 -0
  74. package/dist/engine/dashboard/server.js.map +1 -0
  75. package/dist/engine/dashboard/templates-layout.d.ts +11 -0
  76. package/dist/engine/dashboard/templates-layout.d.ts.map +1 -0
  77. package/dist/engine/dashboard/templates-layout.js +305 -0
  78. package/dist/engine/dashboard/templates-layout.js.map +1 -0
  79. package/dist/engine/dashboard/templates-project.d.ts +10 -0
  80. package/dist/engine/dashboard/templates-project.d.ts.map +1 -0
  81. package/dist/engine/dashboard/templates-project.js +163 -0
  82. package/dist/engine/dashboard/templates-project.js.map +1 -0
  83. package/dist/engine/dashboard/templates.d.ts +3 -0
  84. package/dist/engine/dashboard/templates.d.ts.map +1 -0
  85. package/dist/engine/dashboard/templates.js +4 -0
  86. package/dist/engine/dashboard/templates.js.map +1 -0
  87. package/dist/engine/focus-tracker.d.ts.map +1 -1
  88. package/dist/engine/focus-tracker.js +1 -0
  89. package/dist/engine/focus-tracker.js.map +1 -1
  90. package/dist/engine/hooks/core.d.ts +26 -0
  91. package/dist/engine/hooks/core.d.ts.map +1 -0
  92. package/dist/engine/hooks/core.js +164 -0
  93. package/dist/engine/hooks/core.js.map +1 -0
  94. package/dist/engine/hooks/git-hook-generator.d.ts +14 -0
  95. package/dist/engine/hooks/git-hook-generator.d.ts.map +1 -0
  96. package/dist/engine/hooks/git-hook-generator.js +119 -0
  97. package/dist/engine/hooks/git-hook-generator.js.map +1 -0
  98. package/dist/engine/hooks/index.d.ts +5 -0
  99. package/dist/engine/hooks/index.d.ts.map +1 -0
  100. package/dist/engine/hooks/index.js +6 -0
  101. package/dist/engine/hooks/index.js.map +1 -0
  102. package/dist/engine/hooks/templates.d.ts +14 -0
  103. package/dist/engine/hooks/templates.d.ts.map +1 -0
  104. package/dist/engine/hooks/templates.js +138 -0
  105. package/dist/engine/hooks/templates.js.map +1 -0
  106. package/dist/engine/hooks/triggers.d.ts +27 -0
  107. package/dist/engine/hooks/triggers.d.ts.map +1 -0
  108. package/dist/engine/hooks/triggers.js +104 -0
  109. package/dist/engine/hooks/triggers.js.map +1 -0
  110. package/dist/engine/license-validator/core.d.ts +1 -0
  111. package/dist/engine/license-validator/core.d.ts.map +1 -1
  112. package/dist/engine/license-validator/core.js +10 -1
  113. package/dist/engine/license-validator/core.js.map +1 -1
  114. package/dist/engine/license-validator/fingerprint.d.ts +3 -0
  115. package/dist/engine/license-validator/fingerprint.d.ts.map +1 -0
  116. package/dist/engine/license-validator/fingerprint.js +17 -0
  117. package/dist/engine/license-validator/fingerprint.js.map +1 -0
  118. package/dist/engine/license-validator.d.ts +2 -1
  119. package/dist/engine/license-validator.d.ts.map +1 -1
  120. package/dist/engine/license-validator.js +2 -1
  121. package/dist/engine/license-validator.js.map +1 -1
  122. package/dist/engine/registry/core.d.ts +32 -0
  123. package/dist/engine/registry/core.d.ts.map +1 -0
  124. package/dist/engine/registry/core.js +85 -0
  125. package/dist/engine/registry/core.js.map +1 -0
  126. package/dist/engine/registry/index.d.ts +6 -0
  127. package/dist/engine/registry/index.d.ts.map +1 -0
  128. package/dist/engine/registry/index.js +8 -0
  129. package/dist/engine/registry/index.js.map +1 -0
  130. package/dist/engine/registry/loader.d.ts +18 -0
  131. package/dist/engine/registry/loader.d.ts.map +1 -0
  132. package/dist/engine/registry/loader.js +81 -0
  133. package/dist/engine/registry/loader.js.map +1 -0
  134. package/dist/engine/registry/matcher.d.ts +19 -0
  135. package/dist/engine/registry/matcher.d.ts.map +1 -0
  136. package/dist/engine/registry/matcher.js +150 -0
  137. package/dist/engine/registry/matcher.js.map +1 -0
  138. package/dist/engine/registry/reporter.d.ts +10 -0
  139. package/dist/engine/registry/reporter.d.ts.map +1 -0
  140. package/dist/engine/registry/reporter.js +132 -0
  141. package/dist/engine/registry/reporter.js.map +1 -0
  142. package/dist/engine/registry/validator.d.ts +17 -0
  143. package/dist/engine/registry/validator.d.ts.map +1 -0
  144. package/dist/engine/registry/validator.js +103 -0
  145. package/dist/engine/registry/validator.js.map +1 -0
  146. package/dist/engine/spec-changelog/core.d.ts +16 -0
  147. package/dist/engine/spec-changelog/core.d.ts.map +1 -0
  148. package/dist/engine/spec-changelog/core.js +175 -0
  149. package/dist/engine/spec-changelog/core.js.map +1 -0
  150. package/dist/engine/spec-changelog/diff.d.ts +18 -0
  151. package/dist/engine/spec-changelog/diff.d.ts.map +1 -0
  152. package/dist/engine/spec-changelog/diff.js +116 -0
  153. package/dist/engine/spec-changelog/diff.js.map +1 -0
  154. package/dist/engine/spec-changelog/index.d.ts +3 -0
  155. package/dist/engine/spec-changelog/index.d.ts.map +1 -0
  156. package/dist/engine/spec-changelog/index.js +4 -0
  157. package/dist/engine/spec-changelog/index.js.map +1 -0
  158. package/dist/engine/spec-coverage/core.d.ts +14 -0
  159. package/dist/engine/spec-coverage/core.d.ts.map +1 -0
  160. package/dist/engine/spec-coverage/core.js +132 -0
  161. package/dist/engine/spec-coverage/core.js.map +1 -0
  162. package/dist/engine/spec-coverage/criteria-mapper.d.ts +18 -0
  163. package/dist/engine/spec-coverage/criteria-mapper.d.ts.map +1 -0
  164. package/dist/engine/spec-coverage/criteria-mapper.js +306 -0
  165. package/dist/engine/spec-coverage/criteria-mapper.js.map +1 -0
  166. package/dist/engine/spec-coverage/index.d.ts +4 -0
  167. package/dist/engine/spec-coverage/index.d.ts.map +1 -0
  168. package/dist/engine/spec-coverage/index.js +5 -0
  169. package/dist/engine/spec-coverage/index.js.map +1 -0
  170. package/dist/engine/spec-coverage/test-finder.d.ts +17 -0
  171. package/dist/engine/spec-coverage/test-finder.d.ts.map +1 -0
  172. package/dist/engine/spec-coverage/test-finder.js +250 -0
  173. package/dist/engine/spec-coverage/test-finder.js.map +1 -0
  174. package/dist/engine/spec-templates/catalog-extra.d.ts +4 -0
  175. package/dist/engine/spec-templates/catalog-extra.d.ts.map +1 -0
  176. package/dist/engine/spec-templates/catalog-extra.js +367 -0
  177. package/dist/engine/spec-templates/catalog-extra.js.map +1 -0
  178. package/dist/engine/spec-templates/catalog.d.ts +4 -0
  179. package/dist/engine/spec-templates/catalog.d.ts.map +1 -0
  180. package/dist/engine/spec-templates/catalog.js +386 -0
  181. package/dist/engine/spec-templates/catalog.js.map +1 -0
  182. package/dist/engine/spec-templates/index.d.ts +4 -0
  183. package/dist/engine/spec-templates/index.d.ts.map +1 -0
  184. package/dist/engine/spec-templates/index.js +5 -0
  185. package/dist/engine/spec-templates/index.js.map +1 -0
  186. package/dist/engine/spec-templates/query.d.ts +14 -0
  187. package/dist/engine/spec-templates/query.d.ts.map +1 -0
  188. package/dist/engine/spec-templates/query.js +56 -0
  189. package/dist/engine/spec-templates/query.js.map +1 -0
  190. package/dist/engine/spec-templates/renderer.d.ts +19 -0
  191. package/dist/engine/spec-templates/renderer.d.ts.map +1 -0
  192. package/dist/engine/spec-templates/renderer.js +45 -0
  193. package/dist/engine/spec-templates/renderer.js.map +1 -0
  194. package/dist/engine/usage-tracker/trial.d.ts +4 -4
  195. package/dist/engine/usage-tracker/trial.d.ts.map +1 -1
  196. package/dist/engine/usage-tracker/trial.js +4 -4
  197. package/dist/engine/usage-tracker/trial.js.map +1 -1
  198. package/dist/engine/webhook/event-handlers.d.ts +25 -0
  199. package/dist/engine/webhook/event-handlers.d.ts.map +1 -0
  200. package/dist/engine/webhook/event-handlers.js +89 -0
  201. package/dist/engine/webhook/event-handlers.js.map +1 -0
  202. package/dist/engine/webhook/index.d.ts +4 -0
  203. package/dist/engine/webhook/index.d.ts.map +1 -0
  204. package/dist/engine/webhook/index.js +5 -0
  205. package/dist/engine/webhook/index.js.map +1 -0
  206. package/dist/engine/webhook/server.d.ts +18 -0
  207. package/dist/engine/webhook/server.d.ts.map +1 -0
  208. package/dist/engine/webhook/server.js +187 -0
  209. package/dist/engine/webhook/server.js.map +1 -0
  210. package/dist/engine/webhook/signature.d.ts +16 -0
  211. package/dist/engine/webhook/signature.d.ts.map +1 -0
  212. package/dist/engine/webhook/signature.js +49 -0
  213. package/dist/engine/webhook/signature.js.map +1 -0
  214. package/dist/index.js +18 -0
  215. package/dist/index.js.map +1 -1
  216. package/dist/storage/hooks-store.d.ts +34 -0
  217. package/dist/storage/hooks-store.d.ts.map +1 -0
  218. package/dist/storage/hooks-store.js +128 -0
  219. package/dist/storage/hooks-store.js.map +1 -0
  220. package/dist/storage/index.d.ts +1 -0
  221. package/dist/storage/index.d.ts.map +1 -1
  222. package/dist/storage/index.js +1 -0
  223. package/dist/storage/index.js.map +1 -1
  224. package/dist/tools/activate-license.d.ts.map +1 -1
  225. package/dist/tools/activate-license.js +5 -2
  226. package/dist/tools/activate-license.js.map +1 -1
  227. package/dist/tools/check-spec-accuracy.d.ts +7 -0
  228. package/dist/tools/check-spec-accuracy.d.ts.map +1 -0
  229. package/dist/tools/check-spec-accuracy.js +28 -0
  230. package/dist/tools/check-spec-accuracy.js.map +1 -0
  231. package/dist/tools/ci-generator.d.ts +7 -0
  232. package/dist/tools/ci-generator.d.ts.map +1 -0
  233. package/dist/tools/ci-generator.js +49 -0
  234. package/dist/tools/ci-generator.js.map +1 -0
  235. package/dist/tools/create-spec.d.ts.map +1 -1
  236. package/dist/tools/create-spec.js +4 -0
  237. package/dist/tools/create-spec.js.map +1 -1
  238. package/dist/tools/dashboard.d.ts +6 -0
  239. package/dist/tools/dashboard.d.ts.map +1 -0
  240. package/dist/tools/dashboard.js +48 -0
  241. package/dist/tools/dashboard.js.map +1 -0
  242. package/dist/tools/detect-drift.d.ts.map +1 -1
  243. package/dist/tools/detect-drift.js +6 -0
  244. package/dist/tools/detect-drift.js.map +1 -1
  245. package/dist/tools/estimate-ai-cost.d.ts +8 -0
  246. package/dist/tools/estimate-ai-cost.d.ts.map +1 -0
  247. package/dist/tools/estimate-ai-cost.js +29 -0
  248. package/dist/tools/estimate-ai-cost.js.map +1 -0
  249. package/dist/tools/license-gate.d.ts.map +1 -1
  250. package/dist/tools/license-gate.js +27 -20
  251. package/dist/tools/license-gate.js.map +1 -1
  252. package/dist/tools/license-status.d.ts.map +1 -1
  253. package/dist/tools/license-status.js +3 -0
  254. package/dist/tools/license-status.js.map +1 -1
  255. package/dist/tools/list-specs.d.ts.map +1 -1
  256. package/dist/tools/list-specs.js +15 -0
  257. package/dist/tools/list-specs.js.map +1 -1
  258. package/dist/tools/manage-hooks.d.ts +5 -0
  259. package/dist/tools/manage-hooks.d.ts.map +1 -0
  260. package/dist/tools/manage-hooks.js +247 -0
  261. package/dist/tools/manage-hooks.js.map +1 -0
  262. package/dist/tools/reconcile-spec.d.ts.map +1 -1
  263. package/dist/tools/reconcile-spec.js +24 -0
  264. package/dist/tools/reconcile-spec.js.map +1 -1
  265. package/dist/tools/register-ai-cost-tools.d.ts +3 -0
  266. package/dist/tools/register-ai-cost-tools.d.ts.map +1 -0
  267. package/dist/tools/register-ai-cost-tools.js +25 -0
  268. package/dist/tools/register-ai-cost-tools.js.map +1 -0
  269. package/dist/tools/register-changelog-tools.d.ts +3 -0
  270. package/dist/tools/register-changelog-tools.d.ts.map +1 -0
  271. package/dist/tools/register-changelog-tools.js +23 -0
  272. package/dist/tools/register-changelog-tools.js.map +1 -0
  273. package/dist/tools/register-ci-tools.d.ts +3 -0
  274. package/dist/tools/register-ci-tools.d.ts.map +1 -0
  275. package/dist/tools/register-ci-tools.js +50 -0
  276. package/dist/tools/register-ci-tools.js.map +1 -0
  277. package/dist/tools/register-coverage-tools.d.ts +7 -0
  278. package/dist/tools/register-coverage-tools.d.ts.map +1 -0
  279. package/dist/tools/register-coverage-tools.js +27 -0
  280. package/dist/tools/register-coverage-tools.js.map +1 -0
  281. package/dist/tools/register-dashboard-tools.d.ts +3 -0
  282. package/dist/tools/register-dashboard-tools.d.ts.map +1 -0
  283. package/dist/tools/register-dashboard-tools.js +29 -0
  284. package/dist/tools/register-dashboard-tools.js.map +1 -0
  285. package/dist/tools/register-hooks-tools.d.ts +3 -0
  286. package/dist/tools/register-hooks-tools.d.ts.map +1 -0
  287. package/dist/tools/register-hooks-tools.js +107 -0
  288. package/dist/tools/register-hooks-tools.js.map +1 -0
  289. package/dist/tools/register-registry-tools.d.ts +3 -0
  290. package/dist/tools/register-registry-tools.d.ts.map +1 -0
  291. package/dist/tools/register-registry-tools.js +43 -0
  292. package/dist/tools/register-registry-tools.js.map +1 -0
  293. package/dist/tools/register-template-tools.d.ts +8 -0
  294. package/dist/tools/register-template-tools.d.ts.map +1 -0
  295. package/dist/tools/register-template-tools.js +71 -0
  296. package/dist/tools/register-template-tools.js.map +1 -0
  297. package/dist/tools/register-webhook-tools.d.ts +3 -0
  298. package/dist/tools/register-webhook-tools.d.ts.map +1 -0
  299. package/dist/tools/register-webhook-tools.js +49 -0
  300. package/dist/tools/register-webhook-tools.js.map +1 -0
  301. package/dist/tools/schemas/index.d.ts +1 -0
  302. package/dist/tools/schemas/index.d.ts.map +1 -1
  303. package/dist/tools/schemas/index.js +1 -0
  304. package/dist/tools/schemas/index.js.map +1 -1
  305. package/dist/tools/schemas/registry.d.ts +41 -0
  306. package/dist/tools/schemas/registry.d.ts.map +1 -0
  307. package/dist/tools/schemas/registry.js +62 -0
  308. package/dist/tools/schemas/registry.js.map +1 -0
  309. package/dist/tools/spec-coverage.d.ts +3 -0
  310. package/dist/tools/spec-coverage.d.ts.map +1 -0
  311. package/dist/tools/spec-coverage.js +176 -0
  312. package/dist/tools/spec-coverage.js.map +1 -0
  313. package/dist/tools/spec-history.d.ts +3 -0
  314. package/dist/tools/spec-history.d.ts.map +1 -0
  315. package/dist/tools/spec-history.js +67 -0
  316. package/dist/tools/spec-history.js.map +1 -0
  317. package/dist/tools/spec-templates.d.ts +10 -0
  318. package/dist/tools/spec-templates.d.ts.map +1 -0
  319. package/dist/tools/spec-templates.js +155 -0
  320. package/dist/tools/spec-templates.js.map +1 -0
  321. package/dist/tools/update-registry.d.ts +8 -0
  322. package/dist/tools/update-registry.d.ts.map +1 -0
  323. package/dist/tools/update-registry.js +53 -0
  324. package/dist/tools/update-registry.js.map +1 -0
  325. package/dist/tools/update-status.d.ts.map +1 -1
  326. package/dist/tools/update-status.js +24 -0
  327. package/dist/tools/update-status.js.map +1 -1
  328. package/dist/tools/webhook.d.ts +6 -0
  329. package/dist/tools/webhook.d.ts.map +1 -0
  330. package/dist/tools/webhook.js +150 -0
  331. package/dist/tools/webhook.js.map +1 -0
  332. package/dist/types/ai-cost.d.ts +98 -0
  333. package/dist/types/ai-cost.d.ts.map +1 -0
  334. package/dist/types/ai-cost.js +4 -0
  335. package/dist/types/ai-cost.js.map +1 -0
  336. package/dist/types/analysis.d.ts +64 -0
  337. package/dist/types/analysis.d.ts.map +1 -1
  338. package/dist/types/changelog.d.ts +49 -0
  339. package/dist/types/changelog.d.ts.map +1 -0
  340. package/dist/types/changelog.js +3 -0
  341. package/dist/types/changelog.js.map +1 -0
  342. package/dist/types/ci.d.ts +105 -0
  343. package/dist/types/ci.d.ts.map +1 -0
  344. package/dist/types/ci.js +3 -0
  345. package/dist/types/ci.js.map +1 -0
  346. package/dist/types/coverage.d.ts +95 -0
  347. package/dist/types/coverage.d.ts.map +1 -0
  348. package/dist/types/coverage.js +4 -0
  349. package/dist/types/coverage.js.map +1 -0
  350. package/dist/types/hooks.d.ts +139 -0
  351. package/dist/types/hooks.d.ts.map +1 -0
  352. package/dist/types/hooks.js +3 -0
  353. package/dist/types/hooks.js.map +1 -0
  354. package/dist/types/index.d.ts +8 -0
  355. package/dist/types/index.d.ts.map +1 -1
  356. package/dist/types/index.js +8 -0
  357. package/dist/types/index.js.map +1 -1
  358. package/dist/types/licensing.d.ts +6 -0
  359. package/dist/types/licensing.d.ts.map +1 -1
  360. package/dist/types/registry.d.ts +90 -0
  361. package/dist/types/registry.d.ts.map +1 -0
  362. package/dist/types/registry.js +5 -0
  363. package/dist/types/registry.js.map +1 -0
  364. package/dist/types/spec-templates.d.ts +87 -0
  365. package/dist/types/spec-templates.d.ts.map +1 -0
  366. package/dist/types/spec-templates.js +3 -0
  367. package/dist/types/spec-templates.js.map +1 -0
  368. package/dist/types/ui.d.ts +76 -0
  369. package/dist/types/ui.d.ts.map +1 -1
  370. package/dist/types/webhook.d.ts +62 -0
  371. package/dist/types/webhook.d.ts.map +1 -0
  372. package/dist/types/webhook.js +4 -0
  373. package/dist/types/webhook.js.map +1 -0
  374. package/package.json +1 -1
  375. package/src/config/ai-model-pricing.json +81 -0
  376. package/src/config/framework-registry/csharp-aspnet.json +67 -0
  377. package/src/config/framework-registry/dart-flutter.json +61 -0
  378. package/src/config/framework-registry/go-gin.json +62 -0
  379. package/src/config/framework-registry/index.json +164 -0
  380. package/src/config/framework-registry/java-springboot.json +67 -0
  381. package/src/config/framework-registry/php-laravel.json +67 -0
  382. package/src/config/framework-registry/python-django.json +72 -0
  383. package/src/config/framework-registry/python-fastapi.json +72 -0
  384. package/src/config/framework-registry/ruby-rails.json +67 -0
  385. package/src/config/framework-registry/rust-actix.json +61 -0
  386. package/src/config/framework-registry/swift-swiftui.json +67 -0
  387. package/src/config/framework-registry/typescript-angular.json +67 -0
  388. package/src/config/framework-registry/typescript-astro.json +61 -0
  389. package/src/config/framework-registry/typescript-express.json +67 -0
  390. package/src/config/framework-registry/typescript-nestjs.json +62 -0
  391. package/src/config/framework-registry/typescript-nextjs.json +82 -0
  392. package/src/config/framework-registry/typescript-nuxt.json +67 -0
  393. package/src/config/framework-registry/typescript-react.json +77 -0
  394. package/src/config/framework-registry/typescript-remix.json +61 -0
  395. package/src/config/framework-registry/typescript-sveltekit.json +67 -0
  396. package/src/config/framework-registry/typescript-vue.json +72 -0
  397. package/src/config/license-plans.json +23 -3
@@ -0,0 +1,386 @@
1
+ // engine/spec-templates/catalog.ts — Built-in template catalog (language-agnostic).
2
+ // Each template is framework/language agnostic: no TypeScript-specific terms.
3
+ // Templates 6-8 (data, security, performance) live in catalog-extra.ts to keep file size ≤500L.
4
+ import { EXTRA_TEMPLATES } from './catalog-extra.js';
5
+ /** Full catalog of built-in spec templates (core entries — templates 1–5). */
6
+ const CORE_TEMPLATES = [
7
+ {
8
+ id: 'auth-jwt',
9
+ name: 'JWT Authentication',
10
+ category: 'auth',
11
+ description: 'User authentication flow with JWT tokens: login, logout, refresh, and guards.',
12
+ tags: ['auth', 'jwt', 'security', 'session'],
13
+ variables: [
14
+ {
15
+ key: 'EntityName',
16
+ label: 'Entity name',
17
+ description: 'The name of the authenticated entity (User, Admin, Member…)',
18
+ example: 'User',
19
+ required: true,
20
+ },
21
+ {
22
+ key: 'TokenExpiry',
23
+ label: 'Token expiry',
24
+ description: 'JWT access token expiry duration',
25
+ example: '15 minutes',
26
+ required: false,
27
+ defaultValue: '15 minutes',
28
+ },
29
+ ],
30
+ huTemplate: `# HU: JWT Authentication for {{EntityName}}
31
+
32
+ ## User Story
33
+ As a {{EntityName}}, I want to securely authenticate with JWT tokens so that my session is stateless and protected.
34
+
35
+ ## Acceptance Criteria
36
+
37
+ ### AC-1: Login endpoint
38
+ - [ ] POST /auth/login accepts credentials and returns access + refresh tokens
39
+ - [ ] Access token expires after {{TokenExpiry}}
40
+ - [ ] Refresh token stored server-side and rotated on each use
41
+ - [ ] Failed login returns 401 with no sensitive detail
42
+
43
+ ### AC-2: Protected route guard
44
+ - [ ] Every protected endpoint validates the Bearer token
45
+ - [ ] Expired or invalid tokens return 401
46
+ - [ ] Tampered tokens are rejected and logged
47
+
48
+ ### AC-3: Token refresh
49
+ - [ ] POST /auth/refresh issues new access token given a valid refresh token
50
+ - [ ] Refresh token is single-use (rotation strategy)
51
+
52
+ ### AC-4: Logout
53
+ - [ ] POST /auth/logout invalidates the refresh token server-side
54
+ - [ ] Client-side storage is cleared by the caller
55
+
56
+ ### AC-5: Security requirements
57
+ - [ ] Passwords stored as salted hash (bcrypt or Argon2 equivalent)
58
+ - [ ] HTTPS enforced in production
59
+ - [ ] Rate limiting on /auth/login (max 5 requests/minute per IP)
60
+ - [ ] Brute-force protection with account lockout after N failures
61
+
62
+ ## Out of Scope
63
+ - OAuth2 / SSO providers (create separate spec)
64
+ - Multi-factor authentication (create separate spec)
65
+ `,
66
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: JWT Authentication for {{EntityName}}
67
+
68
+ ## Affected Files
69
+ - auth/login handler
70
+ - auth/refresh handler
71
+ - auth/logout handler
72
+ - auth/middleware (token guard)
73
+ - storage/token-store (refresh token persistence)
74
+ - config/auth-config (token secrets, expiry settings)
75
+
76
+ ## Types / Entities
77
+ - \`{{EntityName}}\`: id, email, passwordHash, createdAt
78
+ - \`AuthTokenPair\`: accessToken, refreshToken, expiresIn
79
+ - \`RefreshTokenRecord\`: token, entityId, expiresAt, usedAt
80
+
81
+ ## Risks
82
+ - Token secret exposure → rotate secrets without downtime (risk: high)
83
+ - Refresh token replay attack → single-use rotation required
84
+ - Brute force on login → rate limiting + lockout required
85
+
86
+ ## Estimation (rough)
87
+ - Dev: 8–16 hours
88
+ - Review: 2–4 hours
89
+ - Difficulty: 3/5
90
+ `,
91
+ progressTemplate: `# PROGRESS: JWT Authentication for {{EntityName}}
92
+
93
+ ## Status: draft
94
+
95
+ ## Criteria
96
+ - [ ] AC-1: Login endpoint
97
+ - [ ] AC-2: Protected route guard
98
+ - [ ] AC-3: Token refresh
99
+ - [ ] AC-4: Logout
100
+ - [ ] AC-5: Security requirements
101
+ `,
102
+ },
103
+ {
104
+ id: 'crud-entity',
105
+ name: 'CRUD Entity',
106
+ category: 'crud',
107
+ description: 'Full Create/Read/Update/Delete lifecycle for any data entity.',
108
+ tags: ['crud', 'rest', 'api', 'database'],
109
+ variables: [
110
+ {
111
+ key: 'EntityName',
112
+ label: 'Entity name',
113
+ description: 'Name of the entity (singular, PascalCase)',
114
+ example: 'Product',
115
+ required: true,
116
+ },
117
+ {
118
+ key: 'EntityPlural',
119
+ label: 'Entity plural',
120
+ description: 'Plural form of the entity name',
121
+ example: 'Products',
122
+ required: true,
123
+ },
124
+ ],
125
+ huTemplate: `# HU: CRUD for {{EntityName}}
126
+
127
+ ## User Story
128
+ As a user, I want to create, view, update and delete {{EntityPlural}} so that I can manage them effectively.
129
+
130
+ ## Acceptance Criteria
131
+
132
+ ### AC-1: Create {{EntityName}}
133
+ - [ ] POST /{{EntityPlural}} accepts valid payload and persists the entity
134
+ - [ ] Duplicate detection where applicable
135
+ - [ ] Returns the created entity with generated ID and timestamps
136
+
137
+ ### AC-2: List {{EntityPlural}}
138
+ - [ ] GET /{{EntityPlural}} returns paginated list
139
+ - [ ] Supports filtering and sorting by key fields
140
+ - [ ] Empty list returns 200 with empty array (not 404)
141
+
142
+ ### AC-3: Get single {{EntityName}}
143
+ - [ ] GET /{{EntityPlural}}/:id returns the entity or 404
144
+ - [ ] Soft-deleted entities return 404
145
+
146
+ ### AC-4: Update {{EntityName}}
147
+ - [ ] PATCH /{{EntityPlural}}/:id applies partial update
148
+ - [ ] PUT /{{EntityPlural}}/:id replaces the full entity
149
+ - [ ] Returns updated entity on success
150
+
151
+ ### AC-5: Delete {{EntityName}}
152
+ - [ ] DELETE /{{EntityPlural}}/:id performs soft delete by default
153
+ - [ ] Hard delete available as a privileged action
154
+ - [ ] Returns 204 No Content on success
155
+
156
+ ### AC-6: Validation
157
+ - [ ] All inputs validated at the API boundary
158
+ - [ ] Invalid fields return 422 with per-field error messages
159
+ `,
160
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: CRUD for {{EntityName}}
161
+
162
+ ## Affected Files
163
+ - handlers/{{EntityPlural}}/create
164
+ - handlers/{{EntityPlural}}/list
165
+ - handlers/{{EntityPlural}}/get
166
+ - handlers/{{EntityPlural}}/update
167
+ - handlers/{{EntityPlural}}/delete
168
+ - storage/{{EntityPlural}}-repository
169
+ - types/{{EntityName}}
170
+
171
+ ## Types / Entities
172
+ - \`{{EntityName}}\`: id, createdAt, updatedAt, deletedAt (nullable)
173
+ - \`Create{{EntityName}}Input\`: entity fields (validated)
174
+ - \`Update{{EntityName}}Input\`: partial entity fields
175
+ - \`List{{EntityPlural}}Query\`: page, limit, sortBy, order, filters
176
+
177
+ ## Risks
178
+ - Missing soft-delete → data loss risk
179
+ - Unbounded list without pagination → performance risk
180
+ - Missing input validation → injection risk
181
+
182
+ ## Estimation (rough)
183
+ - Dev: 6–12 hours
184
+ - Review: 1–3 hours
185
+ - Difficulty: 2/5
186
+ `,
187
+ progressTemplate: `# PROGRESS: CRUD for {{EntityName}}
188
+
189
+ ## Status: draft
190
+
191
+ ## Criteria
192
+ - [ ] AC-1: Create {{EntityName}}
193
+ - [ ] AC-2: List {{EntityPlural}}
194
+ - [ ] AC-3: Get single {{EntityName}}
195
+ - [ ] AC-4: Update {{EntityName}}
196
+ - [ ] AC-5: Delete {{EntityName}}
197
+ - [ ] AC-6: Validation
198
+ `,
199
+ },
200
+ {
201
+ id: 'rest-api-endpoint',
202
+ name: 'REST API Endpoint',
203
+ category: 'api',
204
+ description: 'A single REST endpoint with validation, error handling, and documentation.',
205
+ tags: ['api', 'rest', 'endpoint', 'openapi'],
206
+ variables: [
207
+ {
208
+ key: 'EndpointName',
209
+ label: 'Endpoint name',
210
+ description: 'Short descriptive name for this endpoint',
211
+ example: 'Submit Order',
212
+ required: true,
213
+ },
214
+ {
215
+ key: 'HttpMethod',
216
+ label: 'HTTP Method',
217
+ description: 'HTTP method: GET, POST, PUT, PATCH, DELETE',
218
+ example: 'POST',
219
+ required: true,
220
+ },
221
+ {
222
+ key: 'Path',
223
+ label: 'URL path',
224
+ description: 'The URL path for this endpoint',
225
+ example: '/orders/submit',
226
+ required: true,
227
+ },
228
+ ],
229
+ huTemplate: `# HU: REST API Endpoint — {{EndpointName}}
230
+
231
+ ## User Story
232
+ As an API consumer, I want a reliable {{HttpMethod}} {{Path}} endpoint so that I can {{EndpointName}} without client-side workarounds.
233
+
234
+ ## Acceptance Criteria
235
+
236
+ ### AC-1: Request validation
237
+ - [ ] Input schema validated at the boundary
238
+ - [ ] Invalid requests return 422 with structured error messages
239
+ - [ ] Content-Type header checked when applicable
240
+
241
+ ### AC-2: Core business logic
242
+ - [ ] {{EndpointName}} logic is encapsulated in a dedicated use-case function
243
+ - [ ] Side effects (emails, notifications, jobs) are isolated and testable
244
+
245
+ ### AC-3: Response contract
246
+ - [ ] Success response follows the API response envelope convention
247
+ - [ ] HTTP status codes match the operation semantics
248
+ - [ ] Response schema is documented (OpenAPI or equivalent)
249
+
250
+ ### AC-4: Error handling
251
+ - [ ] All error paths return structured JSON (not stack traces)
252
+ - [ ] 404 returned for missing resources
253
+ - [ ] 409 returned for conflicts
254
+ - [ ] 500 never leaks internal details
255
+
256
+ ### AC-5: Idempotency (if applicable)
257
+ - [ ] Idempotency key header supported for non-idempotent operations
258
+ - [ ] Duplicate requests handled gracefully
259
+
260
+ ### AC-6: Observability
261
+ - [ ] Endpoint logged with method, path, status, latency
262
+ - [ ] Errors reported to the monitoring system
263
+ `,
264
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: REST API Endpoint — {{EndpointName}}
265
+
266
+ ## Affected Files
267
+ - handlers/{{Path}} (route handler)
268
+ - use-cases/{{EndpointName}} (business logic)
269
+ - validators/{{EndpointName}}-input
270
+ - openapi/paths/{{Path}} (documentation)
271
+
272
+ ## Types / Entities
273
+ - \`{{EndpointName}}Input\`: validated request payload
274
+ - \`{{EndpointName}}Output\`: response body shape
275
+ - \`ApiError\`: code, message, details[]
276
+
277
+ ## Risks
278
+ - Missing idempotency for mutation → duplicate side effects
279
+ - Unbounded response size → add pagination or field projection
280
+ - Missing auth guard → unauthorized access
281
+
282
+ ## Estimation (rough)
283
+ - Dev: 4–8 hours
284
+ - Review: 1–2 hours
285
+ - Difficulty: 2/5
286
+ `,
287
+ progressTemplate: `# PROGRESS: REST API Endpoint — {{EndpointName}}
288
+
289
+ ## Status: draft
290
+
291
+ ## Criteria
292
+ - [ ] AC-1: Request validation
293
+ - [ ] AC-2: Core business logic
294
+ - [ ] AC-3: Response contract
295
+ - [ ] AC-4: Error handling
296
+ - [ ] AC-5: Idempotency
297
+ - [ ] AC-6: Observability
298
+ `,
299
+ },
300
+ {
301
+ id: 'ui-form',
302
+ name: 'UI Form',
303
+ category: 'ui',
304
+ description: 'Interactive form with validation, error display, and accessibility.',
305
+ tags: ['ui', 'form', 'ux', 'accessibility', 'validation'],
306
+ variables: [
307
+ {
308
+ key: 'FormName',
309
+ label: 'Form name',
310
+ description: 'Name of the form (e.g. Registration, Checkout, Contact)',
311
+ example: 'Registration',
312
+ required: true,
313
+ },
314
+ ],
315
+ huTemplate: `# HU: {{FormName}} Form
316
+
317
+ ## User Story
318
+ As a user, I want to fill out the {{FormName}} form with clear guidance so that I can complete the action without confusion.
319
+
320
+ ## Acceptance Criteria
321
+
322
+ ### AC-1: Field validation
323
+ - [ ] Required fields marked visually
324
+ - [ ] Validation runs on blur and on submit
325
+ - [ ] Error messages appear adjacent to invalid fields
326
+ - [ ] Valid fields show positive feedback
327
+
328
+ ### AC-2: Submit behavior
329
+ - [ ] Form is disabled (loading state) during submission
330
+ - [ ] Success state shown after successful submission
331
+ - [ ] Errors from the API are displayed inline
332
+
333
+ ### AC-3: Accessibility
334
+ - [ ] All inputs have visible labels
335
+ - [ ] Error messages linked via aria-describedby
336
+ - [ ] Form navigable via keyboard (Tab, Enter, Escape)
337
+ - [ ] Screen reader announces validation errors
338
+
339
+ ### AC-4: Responsive design
340
+ - [ ] Form renders correctly on mobile, tablet, and desktop
341
+ - [ ] Touch targets meet minimum size (44×44 px)
342
+
343
+ ### AC-5: Reset and cancel
344
+ - [ ] Reset clears all fields and removes error state
345
+ - [ ] Cancel navigates away without data loss warning if form is pristine
346
+ - [ ] Cancel shows confirmation dialog if form has unsaved changes
347
+ `,
348
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: {{FormName}} Form
349
+
350
+ ## Affected Files
351
+ - components/{{FormName}}Form
352
+ - hooks/use{{FormName}}Form (form state, validation)
353
+ - api/{{FormName}}-client (submission)
354
+ - i18n/{{FormName}}-form.json (strings)
355
+
356
+ ## Types / Entities
357
+ - \`{{FormName}}FormValues\`: all field values
358
+ - \`{{FormName}}FormErrors\`: per-field error messages
359
+ - \`{{FormName}}FormState\`: idle | submitting | success | error
360
+
361
+ ## Risks
362
+ - Missing server-side validation mirror → inconsistent UX
363
+ - Missing loading state → double submissions
364
+ - Missing ARIA attributes → accessibility failures
365
+
366
+ ## Estimation (rough)
367
+ - Dev: 4–10 hours
368
+ - Review: 1–2 hours
369
+ - Difficulty: 2/5
370
+ `,
371
+ progressTemplate: `# PROGRESS: {{FormName}} Form
372
+
373
+ ## Status: draft
374
+
375
+ ## Criteria
376
+ - [ ] AC-1: Field validation
377
+ - [ ] AC-2: Submit behavior
378
+ - [ ] AC-3: Accessibility
379
+ - [ ] AC-4: Responsive design
380
+ - [ ] AC-5: Reset and cancel
381
+ `,
382
+ },
383
+ ];
384
+ /** Full catalog of built-in spec templates (core + extra). */
385
+ export const BUILT_IN_TEMPLATES = [...CORE_TEMPLATES, ...EXTRA_TEMPLATES];
386
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { BUILT_IN_TEMPLATES } from './catalog.js';
2
+ export { listTemplates, findTemplate, getAvailableCategories } from './query.js';
3
+ export { renderTemplate, interpolate, findMissingRequired } from './renderer.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ // engine/spec-templates/index.ts — Public API barrel for spec-templates engine.
2
+ export { BUILT_IN_TEMPLATES } from './catalog.js';
3
+ export { listTemplates, findTemplate, getAvailableCategories } from './query.js';
4
+ export { renderTemplate, interpolate, findMissingRequired } from './renderer.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { SpecTemplateEntry, TemplateCategory, ListTemplatesResult } from '../../types/spec-templates.js';
2
+ /**
3
+ * Lists templates from the catalog, optionally filtered by category and/or search term.
4
+ */
5
+ export declare function listTemplates(category?: TemplateCategory, search?: string): ListTemplatesResult;
6
+ /**
7
+ * Returns a single template by ID, or undefined if not found.
8
+ */
9
+ export declare function findTemplate(templateId: string): SpecTemplateEntry | undefined;
10
+ /**
11
+ * Returns all available categories that have at least one template.
12
+ */
13
+ export declare function getAvailableCategories(): TemplateCategory[];
14
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AAkBvC;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,CA6B/F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE9E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,EAAE,CAG3D"}
@@ -0,0 +1,56 @@
1
+ // engine/spec-templates/query.ts — Catalog querying: list and find templates.
2
+ import { BUILT_IN_TEMPLATES } from './catalog.js';
3
+ /**
4
+ * Converts a full SpecTemplateEntry to a summary TemplateListItem.
5
+ */
6
+ function toListItem(template) {
7
+ return {
8
+ id: template.id,
9
+ name: template.name,
10
+ category: template.category,
11
+ description: template.description,
12
+ tags: template.tags,
13
+ variableCount: template.variables.length,
14
+ requiredVariableCount: template.variables.filter((v) => v.required).length,
15
+ };
16
+ }
17
+ /**
18
+ * Lists templates from the catalog, optionally filtered by category and/or search term.
19
+ */
20
+ export function listTemplates(category, search) {
21
+ let templates = [...BUILT_IN_TEMPLATES];
22
+ if (category !== undefined) {
23
+ templates = templates.filter((t) => t.category === category);
24
+ }
25
+ if (search !== undefined && search.trim().length > 0) {
26
+ const term = search.trim().toLowerCase();
27
+ templates = templates.filter((t) => t.name.toLowerCase().includes(term) ||
28
+ t.description.toLowerCase().includes(term) ||
29
+ t.tags.some((tag) => tag.toLowerCase().includes(term)));
30
+ }
31
+ const filterLabel = [
32
+ category !== undefined ? `category=${category}` : '',
33
+ search !== undefined && search.trim().length > 0 ? `search="${search.trim()}"` : '',
34
+ ]
35
+ .filter(Boolean)
36
+ .join(', ');
37
+ return {
38
+ templates: templates.map(toListItem),
39
+ total: templates.length,
40
+ filteredBy: filterLabel.length > 0 ? filterLabel : undefined,
41
+ };
42
+ }
43
+ /**
44
+ * Returns a single template by ID, or undefined if not found.
45
+ */
46
+ export function findTemplate(templateId) {
47
+ return BUILT_IN_TEMPLATES.find((t) => t.id === templateId);
48
+ }
49
+ /**
50
+ * Returns all available categories that have at least one template.
51
+ */
52
+ export function getAvailableCategories() {
53
+ const categories = new Set(BUILT_IN_TEMPLATES.map((t) => t.category));
54
+ return [...categories];
55
+ }
56
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/query.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAQ9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD;;GAEG;AACH,SAAS,UAAU,CAAC,QAA2B;IAC7C,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;QACxC,qBAAqB,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;KAC3E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAA2B,EAAE,MAAe;IACxE,IAAI,SAAS,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAExC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzC,SAAS,GAAG,SAAS,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG;QAClB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;QACpD,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;KACpF;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;QACpC,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KAC7D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { SpecTemplateEntry, TemplateVariableValue, TemplateVariable } from '../../types/spec-templates.js';
2
+ /**
3
+ * Interpolates all {{Key}} placeholders in a template string with provided values.
4
+ * Falls back to defaultValue if a variable is optional and not provided.
5
+ */
6
+ export declare function interpolate(template: string, variables: TemplateVariableValue[], definitions: TemplateVariable[]): string;
7
+ /**
8
+ * Returns the keys of required variables that are missing from the provided values.
9
+ */
10
+ export declare function findMissingRequired(template: SpecTemplateEntry, variables: TemplateVariableValue[]): string[];
11
+ /**
12
+ * Renders all three template files (HU, FICHA-TECNICA, PROGRESS) with the provided values.
13
+ */
14
+ export declare function renderTemplate(template: SpecTemplateEntry, variables: TemplateVariableValue[]): {
15
+ hu: string;
16
+ fichaTecnica: string;
17
+ progress: string;
18
+ };
19
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,qBAAqB,EAAE,EAClC,WAAW,EAAE,gBAAgB,EAAE,GAC9B,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,qBAAqB,EAAE,GACjC,MAAM,EAAE,CAWV;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,qBAAqB,EAAE,GACjC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxD"}
@@ -0,0 +1,45 @@
1
+ // engine/spec-templates/renderer.ts — Template variable substitution engine.
2
+ // Replaces {{VariableKey}} placeholders with user-provided values.
3
+ /**
4
+ * Interpolates all {{Key}} placeholders in a template string with provided values.
5
+ * Falls back to defaultValue if a variable is optional and not provided.
6
+ */
7
+ export function interpolate(template, variables, definitions) {
8
+ const valueMap = new Map(variables.map((v) => [v.key, v.value]));
9
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
10
+ const provided = valueMap.get(key);
11
+ if (provided !== undefined && provided.length > 0) {
12
+ return provided;
13
+ }
14
+ const definition = definitions.find((d) => d.key === key);
15
+ if (definition?.defaultValue !== undefined) {
16
+ return definition.defaultValue;
17
+ }
18
+ // Leave the placeholder intact if no value was provided (will be flagged as missing)
19
+ return match;
20
+ });
21
+ }
22
+ /**
23
+ * Returns the keys of required variables that are missing from the provided values.
24
+ */
25
+ export function findMissingRequired(template, variables) {
26
+ const providedKeys = new Set(variables
27
+ .map((v) => v.key)
28
+ .filter((k) => {
29
+ const match = variables.find((v) => v.key === k);
30
+ return match !== undefined && match.value.length > 0;
31
+ }));
32
+ return template.variables.filter((v) => v.required && !providedKeys.has(v.key)).map((v) => v.key);
33
+ }
34
+ /**
35
+ * Renders all three template files (HU, FICHA-TECNICA, PROGRESS) with the provided values.
36
+ */
37
+ export function renderTemplate(template, variables) {
38
+ const defs = template.variables;
39
+ return {
40
+ hu: interpolate(template.huTemplate, variables, defs),
41
+ fichaTecnica: interpolate(template.fichaTecnicaTemplate, variables, defs),
42
+ progress: interpolate(template.progressTemplate, variables, defs),
43
+ };
44
+ }
45
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/renderer.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,mEAAmE;AAQnE;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,SAAkC,EAClC,WAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,UAAU,CAAC,YAAY,CAAC;QACjC,CAAC;QAED,qFAAqF;QACrF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA2B,EAC3B,SAAkC;IAElC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,SAAS;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACjD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,CAAC,CAAC,CACL,CAAC;IAEF,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA2B,EAC3B,SAAkC;IAElC,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;IAChC,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC;QACrD,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,EAAE,IAAI,CAAC;QACzE,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC;KAClE,CAAC;AACJ,CAAC"}
@@ -1,18 +1,18 @@
1
1
  /** Number of days in the full trial period. */
2
- export declare const TRIAL_DAYS = 14;
2
+ export declare const TRIAL_DAYS = 7;
3
3
  /**
4
4
  * Returns the number of whole days elapsed since the given ISO 8601 timestamp.
5
5
  */
6
6
  export declare function calculateDaysSinceFirstRun(firstRunAt: string): number;
7
7
  /**
8
- * Returns true if the installation is still within the 14-day trial period.
8
+ * Returns true if the installation is still within the 7-day trial period.
9
9
  */
10
10
  export declare function isTrialActive(firstRunAt: string): boolean;
11
11
  /**
12
12
  * Returns tool/spec/daily-call limits based on the current trial status.
13
13
  *
14
- * - Day 1–14 (trial active): { tools: 20, specs: 5, dailyCalls: 50 }
15
- * - Day 15+ (trial expired): { tools: 10, specs: 3, dailyCalls: 30 }
14
+ * - Day 1–7 (trial active): { tools: 20, specs: 5, dailyCalls: 50 }
15
+ * - Day 8+ (trial expired): { tools: 10, specs: 3, dailyCalls: 30 }
16
16
  */
17
17
  export declare function getTrialLimits(firstRunAt: string): {
18
18
  tools: number;
@@ -1 +1 @@
1
- {"version":3,"file":"trial.d.ts","sourceRoot":"","sources":["../../../src/engine/usage-tracker/trial.ts"],"names":[],"mappings":"AAMA,+CAA+C;AAC/C,eAAO,MAAM,UAAU,KAAK,CAAC;AAQ7B;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAKA"}
1
+ {"version":3,"file":"trial.d.ts","sourceRoot":"","sources":["../../../src/engine/usage-tracker/trial.ts"],"names":[],"mappings":"AAMA,+CAA+C;AAC/C,eAAO,MAAM,UAAU,IAAI,CAAC;AAQ5B;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzD;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAKA"}
@@ -3,7 +3,7 @@
3
3
  // Constants
4
4
  // ---------------------------------------------------------------------------
5
5
  /** Number of days in the full trial period. */
6
- export const TRIAL_DAYS = 14;
6
+ export const TRIAL_DAYS = 7;
7
7
  const MS_PER_DAY = 24 * 60 * 60 * 1000;
8
8
  // ---------------------------------------------------------------------------
9
9
  // Trial calculations
@@ -18,7 +18,7 @@ export function calculateDaysSinceFirstRun(firstRunAt) {
18
18
  return Math.floor(elapsedMs / MS_PER_DAY);
19
19
  }
20
20
  /**
21
- * Returns true if the installation is still within the 14-day trial period.
21
+ * Returns true if the installation is still within the 7-day trial period.
22
22
  */
23
23
  export function isTrialActive(firstRunAt) {
24
24
  return calculateDaysSinceFirstRun(firstRunAt) < TRIAL_DAYS;
@@ -29,8 +29,8 @@ export function isTrialActive(firstRunAt) {
29
29
  /**
30
30
  * Returns tool/spec/daily-call limits based on the current trial status.
31
31
  *
32
- * - Day 1–14 (trial active): { tools: 20, specs: 5, dailyCalls: 50 }
33
- * - Day 15+ (trial expired): { tools: 10, specs: 3, dailyCalls: 30 }
32
+ * - Day 1–7 (trial active): { tools: 20, specs: 5, dailyCalls: 50 }
33
+ * - Day 8+ (trial expired): { tools: 10, specs: 3, dailyCalls: 30 }
34
34
  */
35
35
  export function getTrialLimits(firstRunAt) {
36
36
  if (isTrialActive(firstRunAt)) {
@@ -1 +1 @@
1
- {"version":3,"file":"trial.js","sourceRoot":"","sources":["../../../src/engine/usage-tracker/trial.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,+CAA+C;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,0BAA0B,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAC7D,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAK/C,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"trial.js","sourceRoot":"","sources":["../../../src/engine/usage-tracker/trial.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,+CAA+C;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,0BAA0B,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAC7D,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAK/C,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { LemonSqueezyWebhookPayload, WebhookProcessResult } from '../../types/index.js';
2
+ /**
3
+ * Handles subscription_cancelled: the customer cancelled their subscription.
4
+ * The tier should be reverted to free when the subscription period ends.
5
+ */
6
+ export declare function handleSubscriptionCancelled(payload: LemonSqueezyWebhookPayload): WebhookProcessResult;
7
+ /**
8
+ * Handles subscription_updated: plan tier may have changed (upgrade/downgrade).
9
+ */
10
+ export declare function handleSubscriptionUpdated(payload: LemonSqueezyWebhookPayload): WebhookProcessResult;
11
+ /**
12
+ * Handles license_key_created: a new license key was issued (after purchase).
13
+ * This is informational — the user will activate the key via activate_license tool.
14
+ */
15
+ export declare function handleLicenseKeyCreated(payload: LemonSqueezyWebhookPayload): WebhookProcessResult;
16
+ /**
17
+ * Returns a generic "acknowledged" result for unhandled but recognised events.
18
+ */
19
+ export declare function handleUnknownEvent(eventType: string): WebhookProcessResult;
20
+ /**
21
+ * Dispatches a parsed webhook payload to the appropriate event handler.
22
+ * Unhandled but valid events are acknowledged with a 200 response.
23
+ */
24
+ export declare function dispatchWebhookEvent(payload: LemonSqueezyWebhookPayload): WebhookProcessResult;
25
+ //# sourceMappingURL=event-handlers.d.ts.map