@planu/cli 0.63.7 → 0.64.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 (601) hide show
  1. package/dist/config/license-plans.json +16 -1
  2. package/dist/engine/a2a/capability-card.d.ts +16 -0
  3. package/dist/engine/a2a/capability-card.d.ts.map +1 -0
  4. package/dist/engine/a2a/capability-card.js +69 -0
  5. package/dist/engine/a2a/capability-card.js.map +1 -0
  6. package/dist/engine/a2a/delegate.d.ts +15 -0
  7. package/dist/engine/a2a/delegate.d.ts.map +1 -0
  8. package/dist/engine/a2a/delegate.js +47 -0
  9. package/dist/engine/a2a/delegate.js.map +1 -0
  10. package/dist/engine/a2a/fallback.d.ts +12 -0
  11. package/dist/engine/a2a/fallback.d.ts.map +1 -0
  12. package/dist/engine/a2a/fallback.js +52 -0
  13. package/dist/engine/a2a/fallback.js.map +1 -0
  14. package/dist/engine/a2a/index.d.ts +5 -0
  15. package/dist/engine/a2a/index.d.ts.map +1 -0
  16. package/dist/engine/a2a/index.js +6 -0
  17. package/dist/engine/a2a/index.js.map +1 -0
  18. package/dist/engine/a2a/task-manager.d.ts +39 -0
  19. package/dist/engine/a2a/task-manager.d.ts.map +1 -0
  20. package/dist/engine/a2a/task-manager.js +84 -0
  21. package/dist/engine/a2a/task-manager.js.map +1 -0
  22. package/dist/engine/ac-gap-detector/analyze-gaps.d.ts +13 -0
  23. package/dist/engine/ac-gap-detector/analyze-gaps.d.ts.map +1 -0
  24. package/dist/engine/ac-gap-detector/analyze-gaps.js +43 -0
  25. package/dist/engine/ac-gap-detector/analyze-gaps.js.map +1 -0
  26. package/dist/engine/ac-gap-detector/constants.d.ts +22 -0
  27. package/dist/engine/ac-gap-detector/constants.d.ts.map +1 -0
  28. package/dist/engine/ac-gap-detector/constants.js +143 -0
  29. package/dist/engine/ac-gap-detector/constants.js.map +1 -0
  30. package/dist/engine/ac-gap-detector/gap-rules.d.ts +16 -0
  31. package/dist/engine/ac-gap-detector/gap-rules.d.ts.map +1 -0
  32. package/dist/engine/ac-gap-detector/gap-rules.js +180 -0
  33. package/dist/engine/ac-gap-detector/gap-rules.js.map +1 -0
  34. package/dist/engine/ac-gap-detector/pattern-matcher.d.ts +16 -0
  35. package/dist/engine/ac-gap-detector/pattern-matcher.d.ts.map +1 -0
  36. package/dist/engine/ac-gap-detector/pattern-matcher.js +62 -0
  37. package/dist/engine/ac-gap-detector/pattern-matcher.js.map +1 -0
  38. package/dist/engine/ac-gap-detector.d.ts +3 -0
  39. package/dist/engine/ac-gap-detector.d.ts.map +1 -0
  40. package/dist/engine/ac-gap-detector.js +5 -0
  41. package/dist/engine/ac-gap-detector.js.map +1 -0
  42. package/dist/engine/audit-trail/attestation.d.ts +11 -0
  43. package/dist/engine/audit-trail/attestation.d.ts.map +1 -0
  44. package/dist/engine/audit-trail/attestation.js +47 -0
  45. package/dist/engine/audit-trail/attestation.js.map +1 -0
  46. package/dist/engine/audit-trail/index.d.ts +6 -0
  47. package/dist/engine/audit-trail/index.d.ts.map +1 -0
  48. package/dist/engine/audit-trail/index.js +6 -0
  49. package/dist/engine/audit-trail/index.js.map +1 -0
  50. package/dist/engine/audit-trail/logger.d.ts +17 -0
  51. package/dist/engine/audit-trail/logger.d.ts.map +1 -0
  52. package/dist/engine/audit-trail/logger.js +78 -0
  53. package/dist/engine/audit-trail/logger.js.map +1 -0
  54. package/dist/engine/audit-trail/query.d.ts +7 -0
  55. package/dist/engine/audit-trail/query.d.ts.map +1 -0
  56. package/dist/engine/audit-trail/query.js +61 -0
  57. package/dist/engine/audit-trail/query.js.map +1 -0
  58. package/dist/engine/audit-trail/utils.d.ts +18 -0
  59. package/dist/engine/audit-trail/utils.d.ts.map +1 -0
  60. package/dist/engine/audit-trail/utils.js +44 -0
  61. package/dist/engine/audit-trail/utils.js.map +1 -0
  62. package/dist/engine/audit-trail/verifier.d.ts +10 -0
  63. package/dist/engine/audit-trail/verifier.d.ts.map +1 -0
  64. package/dist/engine/audit-trail/verifier.js +78 -0
  65. package/dist/engine/audit-trail/verifier.js.map +1 -0
  66. package/dist/engine/auth/config.d.ts +20 -0
  67. package/dist/engine/auth/config.d.ts.map +1 -0
  68. package/dist/engine/auth/config.js +49 -0
  69. package/dist/engine/auth/config.js.map +1 -0
  70. package/dist/engine/auth/index.d.ts +6 -0
  71. package/dist/engine/auth/index.d.ts.map +1 -0
  72. package/dist/engine/auth/index.js +7 -0
  73. package/dist/engine/auth/index.js.map +1 -0
  74. package/dist/engine/auth/middleware.d.ts +19 -0
  75. package/dist/engine/auth/middleware.d.ts.map +1 -0
  76. package/dist/engine/auth/middleware.js +64 -0
  77. package/dist/engine/auth/middleware.js.map +1 -0
  78. package/dist/engine/auth/pkce.d.ts +17 -0
  79. package/dist/engine/auth/pkce.d.ts.map +1 -0
  80. package/dist/engine/auth/pkce.js +33 -0
  81. package/dist/engine/auth/pkce.js.map +1 -0
  82. package/dist/engine/auth/scope-mapper.d.ts +21 -0
  83. package/dist/engine/auth/scope-mapper.d.ts.map +1 -0
  84. package/dist/engine/auth/scope-mapper.js +124 -0
  85. package/dist/engine/auth/scope-mapper.js.map +1 -0
  86. package/dist/engine/auth/token-validator.d.ts +15 -0
  87. package/dist/engine/auth/token-validator.d.ts.map +1 -0
  88. package/dist/engine/auth/token-validator.js +121 -0
  89. package/dist/engine/auth/token-validator.js.map +1 -0
  90. package/dist/engine/ci-generator/index.d.ts.map +1 -1
  91. package/dist/engine/ci-generator/index.js +8 -2
  92. package/dist/engine/ci-generator/index.js.map +1 -1
  93. package/dist/engine/ci-generator/yaml-builder.d.ts +7 -2
  94. package/dist/engine/ci-generator/yaml-builder.d.ts.map +1 -1
  95. package/dist/engine/ci-generator/yaml-builder.js +49 -1
  96. package/dist/engine/ci-generator/yaml-builder.js.map +1 -1
  97. package/dist/engine/design-to-spec/ac-generator.d.ts +21 -0
  98. package/dist/engine/design-to-spec/ac-generator.d.ts.map +1 -0
  99. package/dist/engine/design-to-spec/ac-generator.js +185 -0
  100. package/dist/engine/design-to-spec/ac-generator.js.map +1 -0
  101. package/dist/engine/design-to-spec/index.d.ts +11 -0
  102. package/dist/engine/design-to-spec/index.d.ts.map +1 -0
  103. package/dist/engine/design-to-spec/index.js +19 -0
  104. package/dist/engine/design-to-spec/index.js.map +1 -0
  105. package/dist/engine/design-to-spec/parser.d.ts +7 -0
  106. package/dist/engine/design-to-spec/parser.d.ts.map +1 -0
  107. package/dist/engine/design-to-spec/parser.js +290 -0
  108. package/dist/engine/design-to-spec/parser.js.map +1 -0
  109. package/dist/engine/design-to-spec/spec-builder.d.ts +12 -0
  110. package/dist/engine/design-to-spec/spec-builder.d.ts.map +1 -0
  111. package/dist/engine/design-to-spec/spec-builder.js +148 -0
  112. package/dist/engine/design-to-spec/spec-builder.js.map +1 -0
  113. package/dist/engine/design-to-spec/ui-contract-builder.d.ts +17 -0
  114. package/dist/engine/design-to-spec/ui-contract-builder.d.ts.map +1 -0
  115. package/dist/engine/design-to-spec/ui-contract-builder.js +175 -0
  116. package/dist/engine/design-to-spec/ui-contract-builder.js.map +1 -0
  117. package/dist/engine/elicitation/builder.d.ts +37 -0
  118. package/dist/engine/elicitation/builder.d.ts.map +1 -0
  119. package/dist/engine/elicitation/builder.js +115 -0
  120. package/dist/engine/elicitation/builder.js.map +1 -0
  121. package/dist/engine/elicitation/fallback.d.ts +20 -0
  122. package/dist/engine/elicitation/fallback.d.ts.map +1 -0
  123. package/dist/engine/elicitation/fallback.js +72 -0
  124. package/dist/engine/elicitation/fallback.js.map +1 -0
  125. package/dist/engine/elicitation/index.d.ts +4 -0
  126. package/dist/engine/elicitation/index.d.ts.map +1 -0
  127. package/dist/engine/elicitation/index.js +5 -0
  128. package/dist/engine/elicitation/index.js.map +1 -0
  129. package/dist/engine/elicitation/response-parser.d.ts +9 -0
  130. package/dist/engine/elicitation/response-parser.d.ts.map +1 -0
  131. package/dist/engine/elicitation/response-parser.js +163 -0
  132. package/dist/engine/elicitation/response-parser.js.map +1 -0
  133. package/dist/engine/federation/cross-repo-resolver.d.ts +21 -0
  134. package/dist/engine/federation/cross-repo-resolver.d.ts.map +1 -0
  135. package/dist/engine/federation/cross-repo-resolver.js +75 -0
  136. package/dist/engine/federation/cross-repo-resolver.js.map +1 -0
  137. package/dist/engine/federation/drift-checker.d.ts +19 -0
  138. package/dist/engine/federation/drift-checker.d.ts.map +1 -0
  139. package/dist/engine/federation/drift-checker.js +114 -0
  140. package/dist/engine/federation/drift-checker.js.map +1 -0
  141. package/dist/engine/federation/federation-store.d.ts +25 -0
  142. package/dist/engine/federation/federation-store.d.ts.map +1 -0
  143. package/dist/engine/federation/federation-store.js +58 -0
  144. package/dist/engine/federation/federation-store.js.map +1 -0
  145. package/dist/engine/federation/index.d.ts +4 -0
  146. package/dist/engine/federation/index.d.ts.map +1 -0
  147. package/dist/engine/federation/index.js +5 -0
  148. package/dist/engine/federation/index.js.map +1 -0
  149. package/dist/engine/github/spec-ac-analyzer.d.ts +40 -0
  150. package/dist/engine/github/spec-ac-analyzer.d.ts.map +1 -0
  151. package/dist/engine/github/spec-ac-analyzer.js +181 -0
  152. package/dist/engine/github/spec-ac-analyzer.js.map +1 -0
  153. package/dist/engine/hooks/handlers/on-impl-change.d.ts +3 -1
  154. package/dist/engine/hooks/handlers/on-impl-change.d.ts.map +1 -1
  155. package/dist/engine/hooks/handlers/on-impl-change.js +25 -1
  156. package/dist/engine/hooks/handlers/on-impl-change.js.map +1 -1
  157. package/dist/engine/infrastructure/component-mapper.d.ts +9 -0
  158. package/dist/engine/infrastructure/component-mapper.d.ts.map +1 -0
  159. package/dist/engine/infrastructure/component-mapper.js +162 -0
  160. package/dist/engine/infrastructure/component-mapper.js.map +1 -0
  161. package/dist/engine/infrastructure/cost-estimator.d.ts +6 -0
  162. package/dist/engine/infrastructure/cost-estimator.d.ts.map +1 -0
  163. package/dist/engine/infrastructure/cost-estimator.js +48 -0
  164. package/dist/engine/infrastructure/cost-estimator.js.map +1 -0
  165. package/dist/engine/infrastructure/docker-compose-generator.d.ts +6 -0
  166. package/dist/engine/infrastructure/docker-compose-generator.d.ts.map +1 -0
  167. package/dist/engine/infrastructure/docker-compose-generator.js +201 -0
  168. package/dist/engine/infrastructure/docker-compose-generator.js.map +1 -0
  169. package/dist/engine/infrastructure/index.d.ts +15 -0
  170. package/dist/engine/infrastructure/index.d.ts.map +1 -0
  171. package/dist/engine/infrastructure/index.js +67 -0
  172. package/dist/engine/infrastructure/index.js.map +1 -0
  173. package/dist/engine/infrastructure/kubernetes-generator.d.ts +6 -0
  174. package/dist/engine/infrastructure/kubernetes-generator.d.ts.map +1 -0
  175. package/dist/engine/infrastructure/kubernetes-generator.js +141 -0
  176. package/dist/engine/infrastructure/kubernetes-generator.js.map +1 -0
  177. package/dist/engine/infrastructure/railway-generator.d.ts +6 -0
  178. package/dist/engine/infrastructure/railway-generator.d.ts.map +1 -0
  179. package/dist/engine/infrastructure/railway-generator.js +87 -0
  180. package/dist/engine/infrastructure/railway-generator.js.map +1 -0
  181. package/dist/engine/infrastructure/signal-detector.d.ts +7 -0
  182. package/dist/engine/infrastructure/signal-detector.d.ts.map +1 -0
  183. package/dist/engine/infrastructure/signal-detector.js +174 -0
  184. package/dist/engine/infrastructure/signal-detector.js.map +1 -0
  185. package/dist/engine/infrastructure/terraform-generator.d.ts +6 -0
  186. package/dist/engine/infrastructure/terraform-generator.d.ts.map +1 -0
  187. package/dist/engine/infrastructure/terraform-generator.js +241 -0
  188. package/dist/engine/infrastructure/terraform-generator.js.map +1 -0
  189. package/dist/engine/living-spec/annotation-parser.d.ts.map +1 -1
  190. package/dist/engine/living-spec/annotation-parser.js.map +1 -1
  191. package/dist/engine/living-spec/auto-updater.d.ts +58 -0
  192. package/dist/engine/living-spec/auto-updater.d.ts.map +1 -0
  193. package/dist/engine/living-spec/auto-updater.js +311 -0
  194. package/dist/engine/living-spec/auto-updater.js.map +1 -0
  195. package/dist/engine/living-spec/conflict-resolver.d.ts +46 -0
  196. package/dist/engine/living-spec/conflict-resolver.d.ts.map +1 -0
  197. package/dist/engine/living-spec/conflict-resolver.js +301 -0
  198. package/dist/engine/living-spec/conflict-resolver.js.map +1 -0
  199. package/dist/engine/living-spec/hash-tracker.d.ts.map +1 -1
  200. package/dist/engine/living-spec/hash-tracker.js.map +1 -1
  201. package/dist/engine/living-spec/index.d.ts +1 -0
  202. package/dist/engine/living-spec/index.d.ts.map +1 -1
  203. package/dist/engine/living-spec/index.js +1 -0
  204. package/dist/engine/living-spec/index.js.map +1 -1
  205. package/dist/engine/living-spec/signature-tracker.d.ts.map +1 -1
  206. package/dist/engine/living-spec/signature-tracker.js.map +1 -1
  207. package/dist/engine/observability/config.d.ts +16 -0
  208. package/dist/engine/observability/config.d.ts.map +1 -0
  209. package/dist/engine/observability/config.js +44 -0
  210. package/dist/engine/observability/config.js.map +1 -0
  211. package/dist/engine/observability/index.d.ts +7 -0
  212. package/dist/engine/observability/index.d.ts.map +1 -0
  213. package/dist/engine/observability/index.js +8 -0
  214. package/dist/engine/observability/index.js.map +1 -0
  215. package/dist/engine/observability/metrics.d.ts +12 -0
  216. package/dist/engine/observability/metrics.d.ts.map +1 -0
  217. package/dist/engine/observability/metrics.js +61 -0
  218. package/dist/engine/observability/metrics.js.map +1 -0
  219. package/dist/engine/observability/noop-tracer.d.ts +13 -0
  220. package/dist/engine/observability/noop-tracer.d.ts.map +1 -0
  221. package/dist/engine/observability/noop-tracer.js +41 -0
  222. package/dist/engine/observability/noop-tracer.js.map +1 -0
  223. package/dist/engine/observability/otel-tracer.d.ts +19 -0
  224. package/dist/engine/observability/otel-tracer.d.ts.map +1 -0
  225. package/dist/engine/observability/otel-tracer.js +134 -0
  226. package/dist/engine/observability/otel-tracer.js.map +1 -0
  227. package/dist/engine/observability/span-helpers.d.ts +28 -0
  228. package/dist/engine/observability/span-helpers.d.ts.map +1 -0
  229. package/dist/engine/observability/span-helpers.js +68 -0
  230. package/dist/engine/observability/span-helpers.js.map +1 -0
  231. package/dist/engine/observability/tracer.d.ts +26 -0
  232. package/dist/engine/observability/tracer.d.ts.map +1 -0
  233. package/dist/engine/observability/tracer.js +45 -0
  234. package/dist/engine/observability/tracer.js.map +1 -0
  235. package/dist/engine/rbac/index.d.ts +3 -0
  236. package/dist/engine/rbac/index.d.ts.map +1 -0
  237. package/dist/engine/rbac/index.js +4 -0
  238. package/dist/engine/rbac/index.js.map +1 -0
  239. package/dist/engine/rbac/permission-checker.d.ts +21 -0
  240. package/dist/engine/rbac/permission-checker.d.ts.map +1 -0
  241. package/dist/engine/rbac/permission-checker.js +74 -0
  242. package/dist/engine/rbac/permission-checker.js.map +1 -0
  243. package/dist/engine/rbac/roles.d.ts +12 -0
  244. package/dist/engine/rbac/roles.d.ts.map +1 -0
  245. package/dist/engine/rbac/roles.js +37 -0
  246. package/dist/engine/rbac/roles.js.map +1 -0
  247. package/dist/engine/shared/ac-extractor.d.ts +9 -0
  248. package/dist/engine/shared/ac-extractor.d.ts.map +1 -0
  249. package/dist/engine/shared/ac-extractor.js +36 -0
  250. package/dist/engine/shared/ac-extractor.js.map +1 -0
  251. package/dist/engine/shared/line-diff.d.ts +11 -0
  252. package/dist/engine/shared/line-diff.d.ts.map +1 -0
  253. package/dist/engine/shared/line-diff.js +32 -0
  254. package/dist/engine/shared/line-diff.js.map +1 -0
  255. package/dist/engine/spec-decomposer/analyzer.d.ts +18 -0
  256. package/dist/engine/spec-decomposer/analyzer.d.ts.map +1 -0
  257. package/dist/engine/spec-decomposer/analyzer.js +263 -0
  258. package/dist/engine/spec-decomposer/analyzer.js.map +1 -0
  259. package/dist/engine/spec-decomposer/file-mapper.d.ts +17 -0
  260. package/dist/engine/spec-decomposer/file-mapper.d.ts.map +1 -0
  261. package/dist/engine/spec-decomposer/file-mapper.js +96 -0
  262. package/dist/engine/spec-decomposer/file-mapper.js.map +1 -0
  263. package/dist/engine/spec-decomposer/index.d.ts +14 -0
  264. package/dist/engine/spec-decomposer/index.d.ts.map +1 -0
  265. package/dist/engine/spec-decomposer/index.js +50 -0
  266. package/dist/engine/spec-decomposer/index.js.map +1 -0
  267. package/dist/engine/spec-decomposer/ownership-resolver.d.ts +7 -0
  268. package/dist/engine/spec-decomposer/ownership-resolver.d.ts.map +1 -0
  269. package/dist/engine/spec-decomposer/ownership-resolver.js +169 -0
  270. package/dist/engine/spec-decomposer/ownership-resolver.js.map +1 -0
  271. package/dist/engine/spec-observability/index.d.ts +4 -0
  272. package/dist/engine/spec-observability/index.d.ts.map +1 -0
  273. package/dist/engine/spec-observability/index.js +4 -0
  274. package/dist/engine/spec-observability/index.js.map +1 -0
  275. package/dist/engine/spec-observability/metrics.d.ts +8 -0
  276. package/dist/engine/spec-observability/metrics.d.ts.map +1 -0
  277. package/dist/engine/spec-observability/metrics.js +116 -0
  278. package/dist/engine/spec-observability/metrics.js.map +1 -0
  279. package/dist/engine/spec-observability/tracker.d.ts +22 -0
  280. package/dist/engine/spec-observability/tracker.d.ts.map +1 -0
  281. package/dist/engine/spec-observability/tracker.js +77 -0
  282. package/dist/engine/spec-observability/tracker.js.map +1 -0
  283. package/dist/engine/spec-reader.d.ts +7 -0
  284. package/dist/engine/spec-reader.d.ts.map +1 -0
  285. package/dist/engine/spec-reader.js +23 -0
  286. package/dist/engine/spec-reader.js.map +1 -0
  287. package/dist/engine/spec-repair.d.ts +10 -0
  288. package/dist/engine/spec-repair.d.ts.map +1 -0
  289. package/dist/engine/spec-repair.js +388 -0
  290. package/dist/engine/spec-repair.js.map +1 -0
  291. package/dist/engine/spec-versioning/brancher.d.ts +17 -0
  292. package/dist/engine/spec-versioning/brancher.d.ts.map +1 -0
  293. package/dist/engine/spec-versioning/brancher.js +113 -0
  294. package/dist/engine/spec-versioning/brancher.js.map +1 -0
  295. package/dist/engine/spec-versioning/differ.d.ts +19 -0
  296. package/dist/engine/spec-versioning/differ.d.ts.map +1 -0
  297. package/dist/engine/spec-versioning/differ.js +151 -0
  298. package/dist/engine/spec-versioning/differ.js.map +1 -0
  299. package/dist/engine/spec-versioning/index.d.ts +5 -0
  300. package/dist/engine/spec-versioning/index.d.ts.map +1 -0
  301. package/dist/engine/spec-versioning/index.js +6 -0
  302. package/dist/engine/spec-versioning/index.js.map +1 -0
  303. package/dist/engine/spec-versioning/merger.d.ts +18 -0
  304. package/dist/engine/spec-versioning/merger.d.ts.map +1 -0
  305. package/dist/engine/spec-versioning/merger.js +113 -0
  306. package/dist/engine/spec-versioning/merger.js.map +1 -0
  307. package/dist/engine/spec-versioning/version-store.d.ts +18 -0
  308. package/dist/engine/spec-versioning/version-store.d.ts.map +1 -0
  309. package/dist/engine/spec-versioning/version-store.js +96 -0
  310. package/dist/engine/spec-versioning/version-store.js.map +1 -0
  311. package/dist/engine/well-known/discovery.d.ts +7 -0
  312. package/dist/engine/well-known/discovery.d.ts.map +1 -0
  313. package/dist/engine/well-known/discovery.js +109 -0
  314. package/dist/engine/well-known/discovery.js.map +1 -0
  315. package/dist/engine/well-known/index.d.ts +6 -0
  316. package/dist/engine/well-known/index.d.ts.map +1 -0
  317. package/dist/engine/well-known/index.js +5 -0
  318. package/dist/engine/well-known/index.js.map +1 -0
  319. package/dist/engine/well-known/manifest-generator.d.ts +7 -0
  320. package/dist/engine/well-known/manifest-generator.d.ts.map +1 -0
  321. package/dist/engine/well-known/manifest-generator.js +60 -0
  322. package/dist/engine/well-known/manifest-generator.js.map +1 -0
  323. package/dist/engine/well-known/manifest-schema.d.ts +92 -0
  324. package/dist/engine/well-known/manifest-schema.d.ts.map +1 -0
  325. package/dist/engine/well-known/manifest-schema.js +70 -0
  326. package/dist/engine/well-known/manifest-schema.js.map +1 -0
  327. package/dist/resources/spec-granular.d.ts +33 -0
  328. package/dist/resources/spec-granular.d.ts.map +1 -0
  329. package/dist/resources/spec-granular.js +299 -0
  330. package/dist/resources/spec-granular.js.map +1 -0
  331. package/dist/storage/federation-store.d.ts +29 -0
  332. package/dist/storage/federation-store.d.ts.map +1 -0
  333. package/dist/storage/federation-store.js +111 -0
  334. package/dist/storage/federation-store.js.map +1 -0
  335. package/dist/storage/index.d.ts +3 -0
  336. package/dist/storage/index.d.ts.map +1 -1
  337. package/dist/storage/index.js +3 -0
  338. package/dist/storage/index.js.map +1 -1
  339. package/dist/storage/rbac-store.d.ts +8 -0
  340. package/dist/storage/rbac-store.d.ts.map +1 -0
  341. package/dist/storage/rbac-store.js +75 -0
  342. package/dist/storage/rbac-store.js.map +1 -0
  343. package/dist/storage/spec-observability-store.d.ts +16 -0
  344. package/dist/storage/spec-observability-store.d.ts.map +1 -0
  345. package/dist/storage/spec-observability-store.js +55 -0
  346. package/dist/storage/spec-observability-store.js.map +1 -0
  347. package/dist/tools/a2a-handler.d.ts +14 -0
  348. package/dist/tools/a2a-handler.d.ts.map +1 -0
  349. package/dist/tools/a2a-handler.js +100 -0
  350. package/dist/tools/a2a-handler.js.map +1 -0
  351. package/dist/tools/assign-role-handler.d.ts +3 -0
  352. package/dist/tools/assign-role-handler.d.ts.map +1 -0
  353. package/dist/tools/assign-role-handler.js +25 -0
  354. package/dist/tools/assign-role-handler.js.map +1 -0
  355. package/dist/tools/audit-trail-handler.d.ts +4 -0
  356. package/dist/tools/audit-trail-handler.d.ts.map +1 -0
  357. package/dist/tools/audit-trail-handler.js +91 -0
  358. package/dist/tools/audit-trail-handler.js.map +1 -0
  359. package/dist/tools/auto-update-spec.d.ts +3 -0
  360. package/dist/tools/auto-update-spec.d.ts.map +1 -0
  361. package/dist/tools/auto-update-spec.js +43 -0
  362. package/dist/tools/auto-update-spec.js.map +1 -0
  363. package/dist/tools/branch-spec.d.ts +3 -0
  364. package/dist/tools/branch-spec.d.ts.map +1 -0
  365. package/dist/tools/branch-spec.js +68 -0
  366. package/dist/tools/branch-spec.js.map +1 -0
  367. package/dist/tools/configure-auth-handler.d.ts +15 -0
  368. package/dist/tools/configure-auth-handler.d.ts.map +1 -0
  369. package/dist/tools/configure-auth-handler.js +113 -0
  370. package/dist/tools/configure-auth-handler.js.map +1 -0
  371. package/dist/tools/configure-observability.d.ts +14 -0
  372. package/dist/tools/configure-observability.d.ts.map +1 -0
  373. package/dist/tools/configure-observability.js +96 -0
  374. package/dist/tools/configure-observability.js.map +1 -0
  375. package/dist/tools/configure-roles-handler.d.ts +4 -0
  376. package/dist/tools/configure-roles-handler.d.ts.map +1 -0
  377. package/dist/tools/configure-roles-handler.js +36 -0
  378. package/dist/tools/configure-roles-handler.js.map +1 -0
  379. package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.d.ts +7 -0
  380. package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.d.ts.map +1 -0
  381. package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.js +114 -0
  382. package/dist/tools/create-spec-hu/ac-adapters/architecture-adapter.js.map +1 -0
  383. package/dist/tools/create-spec-hu/ac-adapters/database-adapter.d.ts +7 -0
  384. package/dist/tools/create-spec-hu/ac-adapters/database-adapter.d.ts.map +1 -0
  385. package/dist/tools/create-spec-hu/ac-adapters/database-adapter.js +48 -0
  386. package/dist/tools/create-spec-hu/ac-adapters/database-adapter.js.map +1 -0
  387. package/dist/tools/create-spec-hu/ac-adapters/index.d.ts +14 -0
  388. package/dist/tools/create-spec-hu/ac-adapters/index.d.ts.map +1 -0
  389. package/dist/tools/create-spec-hu/ac-adapters/index.js +28 -0
  390. package/dist/tools/create-spec-hu/ac-adapters/index.js.map +1 -0
  391. package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.d.ts +7 -0
  392. package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.d.ts.map +1 -0
  393. package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.js +99 -0
  394. package/dist/tools/create-spec-hu/ac-adapters/stack-adapter.js.map +1 -0
  395. package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.d.ts +7 -0
  396. package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.d.ts.map +1 -0
  397. package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.js +62 -0
  398. package/dist/tools/create-spec-hu/ac-adapters/testing-adapter.js.map +1 -0
  399. package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
  400. package/dist/tools/create-spec-hu/hu-body-generators.js +41 -19
  401. package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
  402. package/dist/tools/create-spec-tech/ficha-content.d.ts.map +1 -1
  403. package/dist/tools/create-spec-tech/ficha-content.js +235 -5
  404. package/dist/tools/create-spec-tech/ficha-content.js.map +1 -1
  405. package/dist/tools/decompose-spec.d.ts +7 -0
  406. package/dist/tools/decompose-spec.d.ts.map +1 -0
  407. package/dist/tools/decompose-spec.js +49 -0
  408. package/dist/tools/decompose-spec.js.map +1 -0
  409. package/dist/tools/design-to-spec.d.ts +12 -0
  410. package/dist/tools/design-to-spec.d.ts.map +1 -0
  411. package/dist/tools/design-to-spec.js +73 -0
  412. package/dist/tools/design-to-spec.js.map +1 -0
  413. package/dist/tools/detect-ac-gaps.d.ts +7 -0
  414. package/dist/tools/detect-ac-gaps.d.ts.map +1 -0
  415. package/dist/tools/detect-ac-gaps.js +63 -0
  416. package/dist/tools/detect-ac-gaps.js.map +1 -0
  417. package/dist/tools/discover-registry.d.ts +8 -0
  418. package/dist/tools/discover-registry.d.ts.map +1 -0
  419. package/dist/tools/discover-registry.js +79 -0
  420. package/dist/tools/discover-registry.js.map +1 -0
  421. package/dist/tools/federate-specs.d.ts +6 -0
  422. package/dist/tools/federate-specs.d.ts.map +1 -0
  423. package/dist/tools/federate-specs.js +41 -0
  424. package/dist/tools/federate-specs.js.map +1 -0
  425. package/dist/tools/federation-status.d.ts +6 -0
  426. package/dist/tools/federation-status.d.ts.map +1 -0
  427. package/dist/tools/federation-status.js +56 -0
  428. package/dist/tools/federation-status.js.map +1 -0
  429. package/dist/tools/generate-annotations.d.ts.map +1 -1
  430. package/dist/tools/generate-annotations.js +3 -1
  431. package/dist/tools/generate-annotations.js.map +1 -1
  432. package/dist/tools/generate-infrastructure.d.ts +3 -0
  433. package/dist/tools/generate-infrastructure.d.ts.map +1 -0
  434. package/dist/tools/generate-infrastructure.js +60 -0
  435. package/dist/tools/generate-infrastructure.js.map +1 -0
  436. package/dist/tools/merge-spec-branch.d.ts +3 -0
  437. package/dist/tools/merge-spec-branch.d.ts.map +1 -0
  438. package/dist/tools/merge-spec-branch.js +103 -0
  439. package/dist/tools/merge-spec-branch.js.map +1 -0
  440. package/dist/tools/publish-registry.d.ts +8 -0
  441. package/dist/tools/publish-registry.d.ts.map +1 -0
  442. package/dist/tools/publish-registry.js +76 -0
  443. package/dist/tools/publish-registry.js.map +1 -0
  444. package/dist/tools/register-a2a-tools.d.ts +3 -0
  445. package/dist/tools/register-a2a-tools.d.ts.map +1 -0
  446. package/dist/tools/register-a2a-tools.js +66 -0
  447. package/dist/tools/register-a2a-tools.js.map +1 -0
  448. package/dist/tools/register-audit-trail-tools.d.ts +3 -0
  449. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -0
  450. package/dist/tools/register-audit-trail-tools.js +62 -0
  451. package/dist/tools/register-audit-trail-tools.js.map +1 -0
  452. package/dist/tools/register-decompose-tools.d.ts +3 -0
  453. package/dist/tools/register-decompose-tools.d.ts.map +1 -0
  454. package/dist/tools/register-decompose-tools.js +31 -0
  455. package/dist/tools/register-decompose-tools.js.map +1 -0
  456. package/dist/tools/register-federation-tools.d.ts +6 -0
  457. package/dist/tools/register-federation-tools.d.ts.map +1 -0
  458. package/dist/tools/register-federation-tools.js +48 -0
  459. package/dist/tools/register-federation-tools.js.map +1 -0
  460. package/dist/tools/register-infrastructure-tools.d.ts +3 -0
  461. package/dist/tools/register-infrastructure-tools.d.ts.map +1 -0
  462. package/dist/tools/register-infrastructure-tools.js +34 -0
  463. package/dist/tools/register-infrastructure-tools.js.map +1 -0
  464. package/dist/tools/register-living-spec-tools.d.ts.map +1 -1
  465. package/dist/tools/register-living-spec-tools.js +2 -8
  466. package/dist/tools/register-living-spec-tools.js.map +1 -1
  467. package/dist/tools/register-observability-tools.d.ts +3 -0
  468. package/dist/tools/register-observability-tools.d.ts.map +1 -0
  469. package/dist/tools/register-observability-tools.js +48 -0
  470. package/dist/tools/register-observability-tools.js.map +1 -0
  471. package/dist/tools/register-rbac-tools.d.ts +3 -0
  472. package/dist/tools/register-rbac-tools.d.ts.map +1 -0
  473. package/dist/tools/register-rbac-tools.js +36 -0
  474. package/dist/tools/register-rbac-tools.js.map +1 -0
  475. package/dist/tools/register-spec-observability-tools.d.ts +3 -0
  476. package/dist/tools/register-spec-observability-tools.d.ts.map +1 -0
  477. package/dist/tools/register-spec-observability-tools.js +24 -0
  478. package/dist/tools/register-spec-observability-tools.js.map +1 -0
  479. package/dist/tools/register-versioning-tools.d.ts +3 -0
  480. package/dist/tools/register-versioning-tools.d.ts.map +1 -0
  481. package/dist/tools/register-versioning-tools.js +93 -0
  482. package/dist/tools/register-versioning-tools.js.map +1 -0
  483. package/dist/tools/register-well-known-tools.d.ts +3 -0
  484. package/dist/tools/register-well-known-tools.d.ts.map +1 -0
  485. package/dist/tools/register-well-known-tools.js +36 -0
  486. package/dist/tools/register-well-known-tools.js.map +1 -0
  487. package/dist/tools/repair-spec.d.ts +9 -0
  488. package/dist/tools/repair-spec.d.ts.map +1 -0
  489. package/dist/tools/repair-spec.js +93 -0
  490. package/dist/tools/repair-spec.js.map +1 -0
  491. package/dist/tools/resolve-spec-conflict.d.ts +7 -0
  492. package/dist/tools/resolve-spec-conflict.d.ts.map +1 -0
  493. package/dist/tools/resolve-spec-conflict.js +63 -0
  494. package/dist/tools/resolve-spec-conflict.js.map +1 -0
  495. package/dist/tools/response-helpers.d.ts +42 -0
  496. package/dist/tools/response-helpers.d.ts.map +1 -1
  497. package/dist/tools/response-helpers.js +29 -0
  498. package/dist/tools/response-helpers.js.map +1 -1
  499. package/dist/tools/schemas/auth-schema.d.ts +12 -0
  500. package/dist/tools/schemas/auth-schema.d.ts.map +1 -0
  501. package/dist/tools/schemas/auth-schema.js +38 -0
  502. package/dist/tools/schemas/auth-schema.js.map +1 -0
  503. package/dist/tools/schemas/rbac.d.ts +26 -0
  504. package/dist/tools/schemas/rbac.d.ts.map +1 -0
  505. package/dist/tools/schemas/rbac.js +25 -0
  506. package/dist/tools/schemas/rbac.js.map +1 -0
  507. package/dist/tools/schemas/well-known.d.ts +12 -0
  508. package/dist/tools/schemas/well-known.d.ts.map +1 -0
  509. package/dist/tools/schemas/well-known.js +31 -0
  510. package/dist/tools/schemas/well-known.js.map +1 -0
  511. package/dist/tools/snapshot-spec-hashes.d.ts.map +1 -1
  512. package/dist/tools/snapshot-spec-hashes.js.map +1 -1
  513. package/dist/tools/spec-usage-report.d.ts +3 -0
  514. package/dist/tools/spec-usage-report.d.ts.map +1 -0
  515. package/dist/tools/spec-usage-report.js +95 -0
  516. package/dist/tools/spec-usage-report.js.map +1 -0
  517. package/dist/tools/start-hooks.d.ts.map +1 -1
  518. package/dist/tools/start-hooks.js +93 -16
  519. package/dist/tools/start-hooks.js.map +1 -1
  520. package/dist/tools/version-spec.d.ts +3 -0
  521. package/dist/tools/version-spec.d.ts.map +1 -0
  522. package/dist/tools/version-spec.js +54 -0
  523. package/dist/tools/version-spec.js.map +1 -0
  524. package/dist/types/a2a.d.ts +125 -0
  525. package/dist/types/a2a.d.ts.map +1 -0
  526. package/dist/types/a2a.js +3 -0
  527. package/dist/types/a2a.js.map +1 -0
  528. package/dist/types/ac-gap.d.ts +57 -0
  529. package/dist/types/ac-gap.d.ts.map +1 -0
  530. package/dist/types/ac-gap.js +3 -0
  531. package/dist/types/ac-gap.js.map +1 -0
  532. package/dist/types/audit-trail.d.ts +77 -0
  533. package/dist/types/audit-trail.d.ts.map +1 -0
  534. package/dist/types/audit-trail.js +3 -0
  535. package/dist/types/audit-trail.js.map +1 -0
  536. package/dist/types/auth.d.ts +82 -0
  537. package/dist/types/auth.d.ts.map +1 -0
  538. package/dist/types/auth.js +3 -0
  539. package/dist/types/auth.js.map +1 -0
  540. package/dist/types/ci.d.ts +10 -25
  541. package/dist/types/ci.d.ts.map +1 -1
  542. package/dist/types/design-to-spec.d.ts +89 -0
  543. package/dist/types/design-to-spec.d.ts.map +1 -0
  544. package/dist/types/design-to-spec.js +3 -0
  545. package/dist/types/design-to-spec.js.map +1 -0
  546. package/dist/types/elicitation.d.ts +109 -0
  547. package/dist/types/elicitation.d.ts.map +1 -0
  548. package/dist/types/elicitation.js +3 -0
  549. package/dist/types/elicitation.js.map +1 -0
  550. package/dist/types/federation.d.ts +95 -0
  551. package/dist/types/federation.d.ts.map +1 -0
  552. package/dist/types/federation.js +3 -0
  553. package/dist/types/federation.js.map +1 -0
  554. package/dist/types/file-hooks.d.ts +8 -6
  555. package/dist/types/file-hooks.d.ts.map +1 -1
  556. package/dist/types/github.d.ts +17 -0
  557. package/dist/types/github.d.ts.map +1 -1
  558. package/dist/types/index.d.ts +16 -0
  559. package/dist/types/index.d.ts.map +1 -1
  560. package/dist/types/index.js +16 -0
  561. package/dist/types/index.js.map +1 -1
  562. package/dist/types/infrastructure.d.ts +71 -0
  563. package/dist/types/infrastructure.d.ts.map +1 -0
  564. package/dist/types/infrastructure.js +3 -0
  565. package/dist/types/infrastructure.js.map +1 -0
  566. package/dist/types/living-spec.d.ts +100 -0
  567. package/dist/types/living-spec.d.ts.map +1 -1
  568. package/dist/types/observability.d.ts +105 -0
  569. package/dist/types/observability.d.ts.map +1 -0
  570. package/dist/types/observability.js +3 -0
  571. package/dist/types/observability.js.map +1 -0
  572. package/dist/types/rbac.d.ts +51 -0
  573. package/dist/types/rbac.d.ts.map +1 -0
  574. package/dist/types/rbac.js +4 -0
  575. package/dist/types/rbac.js.map +1 -0
  576. package/dist/types/resources.d.ts +20 -0
  577. package/dist/types/resources.d.ts.map +1 -0
  578. package/dist/types/resources.js +3 -0
  579. package/dist/types/resources.js.map +1 -0
  580. package/dist/types/spec/repair.d.ts +33 -0
  581. package/dist/types/spec/repair.d.ts.map +1 -0
  582. package/dist/types/spec/repair.js +3 -0
  583. package/dist/types/spec/repair.js.map +1 -0
  584. package/dist/types/spec-decomposer.d.ts +108 -0
  585. package/dist/types/spec-decomposer.d.ts.map +1 -0
  586. package/dist/types/spec-decomposer.js +4 -0
  587. package/dist/types/spec-decomposer.js.map +1 -0
  588. package/dist/types/spec-observability.d.ts +71 -0
  589. package/dist/types/spec-observability.d.ts.map +1 -0
  590. package/dist/types/spec-observability.js +4 -0
  591. package/dist/types/spec-observability.js.map +1 -0
  592. package/dist/types/spec-versioning.d.ts +117 -0
  593. package/dist/types/spec-versioning.d.ts.map +1 -0
  594. package/dist/types/spec-versioning.js +3 -0
  595. package/dist/types/spec-versioning.js.map +1 -0
  596. package/dist/types/well-known.d.ts +70 -0
  597. package/dist/types/well-known.d.ts.map +1 -0
  598. package/dist/types/well-known.js +3 -0
  599. package/dist/types/well-known.js.map +1 -0
  600. package/package.json +1 -1
  601. package/src/config/license-plans.json +16 -1
@@ -0,0 +1,185 @@
1
+ // engine/design-to-spec/ac-generator.ts — Generate acceptance criteria from parsed design (SPEC-159)
2
+ // ---------------------------------------------------------------------------
3
+ // A11y AC templates (WCAG 2.1 AA)
4
+ // ---------------------------------------------------------------------------
5
+ const A11Y_TEMPLATES = [
6
+ 'All interactive elements are keyboard accessible (Tab, Enter, Space)',
7
+ 'All images have descriptive alt text or are marked as decorative (alt="")',
8
+ 'Color contrast ratio meets WCAG 2.1 AA (≥ 4.5:1 for normal text, ≥ 3:1 for large text)',
9
+ 'Form fields have associated labels (visible or via aria-label)',
10
+ 'Error messages are programmatically associated with their fields (aria-describedby)',
11
+ 'Page has a logical heading hierarchy (h1 → h2 → h3)',
12
+ 'Focus is visible and never lost during interactions',
13
+ 'Screen reader announces dynamic content updates (aria-live regions)',
14
+ ];
15
+ const A11Y_BY_COMPONENT_TYPE = {
16
+ button: [
17
+ 'Button has accessible name (label text or aria-label)',
18
+ 'Disabled buttons communicate state to screen readers (aria-disabled)',
19
+ ],
20
+ input: [
21
+ 'Input field has a visible label or aria-label',
22
+ 'Required fields are marked with aria-required="true"',
23
+ 'Validation errors are announced to screen readers',
24
+ ],
25
+ modal: [
26
+ 'Modal traps focus when open; returns focus to trigger on close',
27
+ 'Modal has role="dialog" and aria-modal="true"',
28
+ 'Pressing Escape closes the modal',
29
+ ],
30
+ nav: [
31
+ 'Navigation has a landmark role (role="navigation" or <nav>)',
32
+ 'Current page/item is indicated via aria-current',
33
+ ],
34
+ list: [
35
+ 'List uses semantic <ul>/<ol>/<li> or appropriate ARIA list roles',
36
+ 'Empty state is announced to screen readers',
37
+ ],
38
+ form: [
39
+ 'Form has a clear submit mechanism accessible via keyboard',
40
+ 'All required fields are indicated (asterisk + aria-required)',
41
+ ],
42
+ image: ['Informative images have descriptive alt text', 'Decorative images use alt=""'],
43
+ card: ['Card interactive area has an accessible name describing its action'],
44
+ text: [],
45
+ container: [],
46
+ other: [],
47
+ };
48
+ // ---------------------------------------------------------------------------
49
+ // AC generators per screen/component
50
+ // ---------------------------------------------------------------------------
51
+ /** Generate ACs for a specific component */
52
+ function generateComponentAcs(component, screenName) {
53
+ const acs = [];
54
+ const ctx = `${screenName} > ${component.name}`;
55
+ // Visibility AC
56
+ acs.push(`${ctx} is visible and rendered correctly on first load`);
57
+ // Interaction state ACs
58
+ for (const state of component.interactionStates) {
59
+ if (state.name !== 'default') {
60
+ acs.push(`${ctx} shows ${state.name} state when ${state.trigger.toLowerCase()}`);
61
+ }
62
+ }
63
+ // Type-specific ACs
64
+ switch (component.type) {
65
+ case 'form':
66
+ acs.push(`${ctx} validates all required fields before submission`);
67
+ acs.push(`${ctx} shows inline error messages for invalid fields`);
68
+ acs.push(`${ctx} shows success feedback after successful submission`);
69
+ break;
70
+ case 'button':
71
+ acs.push(`${ctx} is disabled and non-interactive when loading is in progress`);
72
+ break;
73
+ case 'input':
74
+ acs.push(`${ctx} accepts valid input and rejects invalid input with a clear error message`);
75
+ break;
76
+ case 'list':
77
+ acs.push(`${ctx} shows an empty state message when there are no items`);
78
+ acs.push(`${ctx} shows a loading skeleton while data is being fetched`);
79
+ break;
80
+ case 'modal':
81
+ acs.push(`${ctx} opens when its trigger is activated`);
82
+ acs.push(`${ctx} closes when the user clicks outside or presses Escape`);
83
+ break;
84
+ case 'nav':
85
+ case 'card':
86
+ case 'text':
87
+ case 'image':
88
+ case 'container':
89
+ case 'other':
90
+ break;
91
+ }
92
+ return acs;
93
+ }
94
+ /** Generate ACs for data bindings on a screen */
95
+ function generateDataBindingAcs(screenName, dataSource) {
96
+ return [
97
+ `${screenName}: Data from "${dataSource}" loads successfully within 2 seconds`,
98
+ `${screenName}: A loading indicator is shown while "${dataSource}" data is being fetched`,
99
+ `${screenName}: An error state is shown if "${dataSource}" data fails to load`,
100
+ `${screenName}: Stale data is refreshed when the user returns to the screen`,
101
+ ];
102
+ }
103
+ /** Generate platform-specific ACs */
104
+ function generatePlatformAcs(screenName, platform) {
105
+ const acs = [];
106
+ switch (platform) {
107
+ case 'web':
108
+ acs.push(`${screenName}: Layout adapts correctly at mobile (< 768px), tablet (768–1023px), and desktop (≥ 1024px) breakpoints`);
109
+ acs.push(`${screenName}: Page title is set correctly for SEO and screen reader context`);
110
+ break;
111
+ case 'mobile':
112
+ acs.push(`${screenName}: Touch targets are at least 44 × 44 pt (iOS) / 48 × 48 dp (Android)`);
113
+ acs.push(`${screenName}: Screen works correctly in both portrait and landscape orientations`);
114
+ break;
115
+ case 'desktop':
116
+ acs.push(`${screenName}: Keyboard shortcuts are discoverable and functional`);
117
+ acs.push(`${screenName}: Layout uses available horizontal space efficiently`);
118
+ break;
119
+ }
120
+ return acs;
121
+ }
122
+ // ---------------------------------------------------------------------------
123
+ // Public API
124
+ // ---------------------------------------------------------------------------
125
+ /**
126
+ * Generates acceptance criteria for a single screen.
127
+ * Returns ACs grouped by theme: visibility, interactions, data, a11y, platform.
128
+ */
129
+ export function generateAcsForScreen(screen, platform, includeA11y) {
130
+ const acs = [];
131
+ // Screen-level ACs
132
+ acs.push(`${screen.name} renders without layout errors on first load`);
133
+ acs.push(`${screen.name} is accessible via its defined route: ${screen.route ?? '(route TBD)'}`);
134
+ // Component-level ACs
135
+ for (const component of screen.components) {
136
+ acs.push(...generateComponentAcs(component, screen.name));
137
+ }
138
+ // Data binding ACs
139
+ for (const binding of screen.dataBindings) {
140
+ acs.push(...generateDataBindingAcs(screen.name, binding.dataSource));
141
+ }
142
+ // Platform ACs
143
+ acs.push(...generatePlatformAcs(screen.name, platform));
144
+ // A11y ACs
145
+ if (includeA11y) {
146
+ acs.push(...A11Y_TEMPLATES.map((t) => `${screen.name}: ${t}`));
147
+ for (const component of screen.components) {
148
+ const typeAcs = A11Y_BY_COMPONENT_TYPE[component.type];
149
+ acs.push(...typeAcs.map((t) => `${screen.name} > ${component.name}: ${t}`));
150
+ }
151
+ }
152
+ return acs;
153
+ }
154
+ /**
155
+ * Generates all acceptance criteria for a set of screens.
156
+ * Returns a deduplicated flat array of AC strings.
157
+ */
158
+ export function generateAllAcs(screens, platform, includeA11y) {
159
+ const seen = new Set();
160
+ const result = [];
161
+ for (const screen of screens) {
162
+ const screenAcs = generateAcsForScreen(screen, platform, includeA11y);
163
+ for (const ac of screenAcs) {
164
+ if (!seen.has(ac)) {
165
+ seen.add(ac);
166
+ result.push(ac);
167
+ }
168
+ }
169
+ }
170
+ return result;
171
+ }
172
+ /**
173
+ * Returns a11y requirements for a component type.
174
+ * Used by ui-contract-builder to annotate component entries.
175
+ */
176
+ export function getA11yRequirementsForComponent(componentType) {
177
+ return A11Y_BY_COMPONENT_TYPE[componentType];
178
+ }
179
+ /**
180
+ * Returns global a11y requirements that apply to every screen.
181
+ */
182
+ export function getGlobalA11yRequirements() {
183
+ return [...A11Y_TEMPLATES];
184
+ }
185
+ //# sourceMappingURL=ac-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ac-generator.js","sourceRoot":"","sources":["../../../src/engine/design-to-spec/ac-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { parseDesignDescription } from './parser.js';
2
+ export { generateAcsForScreen, generateAllAcs, getA11yRequirementsForComponent, getGlobalA11yRequirements, } from './ac-generator.js';
3
+ export { buildUiContract, buildComponentTreeSummary } from './ui-contract-builder.js';
4
+ export { buildSpecMarkdown, assembleResult } from './spec-builder.js';
5
+ import type { DesignToSpecArgs, DesignToSpecResult } from '../../types/index.js';
6
+ /**
7
+ * Main entry point: generates a structured spec from a design description.
8
+ * Orchestrates parser → AC generator → UI contract builder → spec assembler.
9
+ */
10
+ export declare function generateSpecFromDesign(args: DesignToSpecArgs): DesignToSpecResult;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/design-to-spec/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAkB,MAAM,sBAAsB,CAAC;AAIjG;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAOjF"}
@@ -0,0 +1,19 @@
1
+ // engine/design-to-spec/index.ts — Barrel export for design-to-spec engine (SPEC-159)
2
+ export { parseDesignDescription } from './parser.js';
3
+ export { generateAcsForScreen, generateAllAcs, getA11yRequirementsForComponent, getGlobalA11yRequirements, } from './ac-generator.js';
4
+ export { buildUiContract, buildComponentTreeSummary } from './ui-contract-builder.js';
5
+ export { buildSpecMarkdown, assembleResult } from './spec-builder.js';
6
+ import { parseDesignDescription } from './parser.js';
7
+ import { assembleResult } from './spec-builder.js';
8
+ /**
9
+ * Main entry point: generates a structured spec from a design description.
10
+ * Orchestrates parser → AC generator → UI contract builder → spec assembler.
11
+ */
12
+ export function generateSpecFromDesign(args) {
13
+ const platform = args.platform ?? 'web';
14
+ const includeA11y = args.includeA11y ?? true;
15
+ const screenNames = args.screens ?? [];
16
+ const parsedDesign = parseDesignDescription(args.designDescription, screenNames, platform);
17
+ return assembleResult(parsedDesign, args.projectId, platform, includeA11y);
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/design-to-spec/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,MAAM,QAAQ,GAAmB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAEvC,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3F,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ParsedDesign, DesignPlatform } from '../../types/index.js';
2
+ /**
3
+ * Parses a design description string into a structured ParsedDesign representation.
4
+ * Extracts screens, components, breakpoints, and design tokens without any I/O.
5
+ */
6
+ export declare function parseDesignDescription(description: string, screenNames: string[], platform: DesignPlatform): ParsedDesign;
7
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/engine/design-to-spec/parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EAQZ,cAAc,EACf,MAAM,sBAAsB,CAAC;AAwT9B;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,cAAc,GACvB,YAAY,CAmBd"}
@@ -0,0 +1,290 @@
1
+ // engine/design-to-spec/parser.ts — Parse design description into structured screens/components (SPEC-159)
2
+ // ---------------------------------------------------------------------------
3
+ // Constants
4
+ // ---------------------------------------------------------------------------
5
+ const WEB_BREAKPOINTS = [
6
+ { name: 'mobile', minWidth: 0, maxWidth: 767, description: 'Mobile devices (portrait)' },
7
+ { name: 'tablet', minWidth: 768, maxWidth: 1023, description: 'Tablet devices' },
8
+ { name: 'desktop', minWidth: 1024, description: 'Desktop and larger screens' },
9
+ ];
10
+ const MOBILE_BREAKPOINTS = [
11
+ { name: 'small', minWidth: 320, maxWidth: 374, description: 'Small mobile (320–374px)' },
12
+ { name: 'medium', minWidth: 375, maxWidth: 413, description: 'Standard mobile (375–413px)' },
13
+ { name: 'large', minWidth: 414, description: 'Large mobile (414px+)' },
14
+ ];
15
+ const DESKTOP_BREAKPOINTS = [
16
+ { name: 'standard', minWidth: 1024, maxWidth: 1439, description: 'Standard desktop' },
17
+ { name: 'wide', minWidth: 1440, description: 'Wide / large desktop' },
18
+ ];
19
+ const COMPONENT_KEYWORDS = {
20
+ form: ['form', 'input', 'submit', 'field', 'label', 'signup', 'login', 'register', 'checkout'],
21
+ button: ['button', 'btn', 'cta', 'action', 'click', 'tap', 'link'],
22
+ input: ['input', 'textbox', 'textarea', 'search', 'field', 'entry'],
23
+ list: ['list', 'table', 'grid', 'feed', 'items', 'rows', 'columns'],
24
+ modal: ['modal', 'dialog', 'popup', 'overlay', 'drawer', 'sheet'],
25
+ nav: ['nav', 'navigation', 'menu', 'sidebar', 'header', 'footer', 'tab', 'breadcrumb'],
26
+ card: ['card', 'tile', 'panel', 'widget', 'item', 'product'],
27
+ text: ['text', 'paragraph', 'heading', 'title', 'label', 'copy', 'content'],
28
+ image: ['image', 'img', 'photo', 'icon', 'avatar', 'thumbnail', 'banner'],
29
+ container: ['container', 'section', 'wrapper', 'layout', 'page', 'screen', 'view'],
30
+ other: [],
31
+ };
32
+ const INTERACTION_PATTERNS = [
33
+ { trigger: /hover/i, name: 'hover', visualChange: 'Highlight or shadow change on hover' },
34
+ { trigger: /click|tap/i, name: 'active', visualChange: 'Pressed state visual feedback' },
35
+ { trigger: /focus/i, name: 'focus', visualChange: 'Focus ring visible around element' },
36
+ { trigger: /disabled/i, name: 'disabled', visualChange: 'Reduced opacity, cursor: not-allowed' },
37
+ {
38
+ trigger: /loading|spinner/i,
39
+ name: 'loading',
40
+ visualChange: 'Loading spinner or skeleton shown',
41
+ },
42
+ { trigger: /error|invalid/i, name: 'error', visualChange: 'Red border, error message displayed' },
43
+ { trigger: /success|complete/i, name: 'success', visualChange: 'Success indicator shown' },
44
+ ];
45
+ // ---------------------------------------------------------------------------
46
+ // Helpers
47
+ // ---------------------------------------------------------------------------
48
+ /** Infer component type from a name/description string */
49
+ function inferComponentType(text) {
50
+ const lower = text.toLowerCase();
51
+ for (const [type, keywords] of Object.entries(COMPONENT_KEYWORDS)) {
52
+ if (type === 'other') {
53
+ continue;
54
+ }
55
+ if (keywords.some((kw) => lower.includes(kw))) {
56
+ return type;
57
+ }
58
+ }
59
+ return 'other';
60
+ }
61
+ /** Extract interaction states from a block of text */
62
+ function extractInteractionStates(text) {
63
+ const states = [];
64
+ for (const pattern of INTERACTION_PATTERNS) {
65
+ if (pattern.trigger.test(text)) {
66
+ states.push({
67
+ name: pattern.name,
68
+ trigger: `User ${pattern.name}s the element`,
69
+ visualChange: pattern.visualChange,
70
+ });
71
+ }
72
+ }
73
+ // Always include default state
74
+ if (states.length === 0) {
75
+ states.push({ name: 'default', trigger: 'Element rendered', visualChange: 'Normal display' });
76
+ }
77
+ return states;
78
+ }
79
+ /** Build a minimal prop from a keyword */
80
+ function buildProp(name, type, required, description) {
81
+ return { name, type, required, description };
82
+ }
83
+ /** Generate basic props based on component type */
84
+ function generatePropsForType(componentType) {
85
+ switch (componentType) {
86
+ case 'button':
87
+ return [
88
+ buildProp('label', 'string', true, 'Button text label'),
89
+ buildProp('onClick', '() => void', true, 'Click handler'),
90
+ buildProp('disabled', 'boolean', false, 'Disables the button when true'),
91
+ buildProp('variant', "'primary' | 'secondary' | 'ghost'", false, 'Visual variant'),
92
+ ];
93
+ case 'input':
94
+ return [
95
+ buildProp('value', 'string', true, 'Current input value'),
96
+ buildProp('onChange', '(v: string) => void', true, 'Change handler'),
97
+ buildProp('placeholder', 'string', false, 'Placeholder text'),
98
+ buildProp('error', 'string', false, 'Error message to display'),
99
+ ];
100
+ case 'list':
101
+ return [
102
+ buildProp('items', 'unknown[]', true, 'Array of items to render'),
103
+ buildProp('loading', 'boolean', false, 'Shows loading state when true'),
104
+ buildProp('emptyMessage', 'string', false, 'Message when list is empty'),
105
+ ];
106
+ case 'modal':
107
+ return [
108
+ buildProp('isOpen', 'boolean', true, 'Controls modal visibility'),
109
+ buildProp('onClose', '() => void', true, 'Close handler'),
110
+ buildProp('title', 'string', false, 'Modal title'),
111
+ ];
112
+ case 'card':
113
+ return [
114
+ buildProp('title', 'string', true, 'Card title'),
115
+ buildProp('description', 'string', false, 'Card description text'),
116
+ buildProp('onClick', '() => void', false, 'Card click handler'),
117
+ ];
118
+ case 'container':
119
+ case 'form':
120
+ case 'nav':
121
+ case 'text':
122
+ case 'image':
123
+ case 'other':
124
+ // 'node' is a framework-agnostic placeholder — actual type depends on the project's UI framework
125
+ // (e.g. React.ReactNode, Vue's VNode, Angular's TemplateRef, plain HTMLElement, etc.)
126
+ return [buildProp('children', 'node', false, 'Child content')];
127
+ }
128
+ }
129
+ /** Slugify a name to a valid ID */
130
+ function toId(name) {
131
+ return name
132
+ .toLowerCase()
133
+ .replace(/[^a-z0-9]+/g, '-')
134
+ .replace(/(^-|-$)/g, '');
135
+ }
136
+ // ---------------------------------------------------------------------------
137
+ // Screen extraction
138
+ // ---------------------------------------------------------------------------
139
+ /** Split description text into screen blocks by common screen delimiters */
140
+ function splitIntoScreenBlocks(description, screenNames) {
141
+ if (screenNames.length > 0) {
142
+ // Use provided screen names as anchors
143
+ const blocks = [];
144
+ let remaining = description;
145
+ for (const name of screenNames) {
146
+ const idx = remaining.toLowerCase().indexOf(name.toLowerCase());
147
+ if (idx !== -1) {
148
+ const before = remaining.slice(0, idx).trim();
149
+ if (before) {
150
+ blocks.push(before);
151
+ }
152
+ remaining = remaining.slice(idx);
153
+ }
154
+ }
155
+ if (remaining.trim()) {
156
+ blocks.push(remaining.trim());
157
+ }
158
+ return blocks.length > 1 ? blocks : [description];
159
+ }
160
+ // Auto-split on "Screen:", "Page:", "View:", or numbered sections
161
+ const screenPattern = /(?=(?:screen|page|view|section)\s*[:–-]?\s*\w)/gi;
162
+ const parts = description.split(screenPattern).filter(Boolean);
163
+ return parts.length > 1 ? parts : [description];
164
+ }
165
+ /** Extract component descriptions from a text block */
166
+ function extractComponentsFromText(text) {
167
+ const components = [];
168
+ // Match bullet-style component descriptions
169
+ const bulletPattern = /[-•*]\s+(.+?)(?=\n[-•*]|\n\n|$)/gs;
170
+ let match;
171
+ let index = 0;
172
+ while ((match = bulletPattern.exec(text)) !== null) {
173
+ const raw = (match[1] ?? '').trim();
174
+ const type = inferComponentType(raw);
175
+ const id = `comp-${toId(raw.slice(0, 20))}-${index}`;
176
+ components.push({
177
+ id,
178
+ name: raw.slice(0, 50),
179
+ type,
180
+ description: raw,
181
+ props: generatePropsForType(type),
182
+ interactionStates: extractInteractionStates(raw),
183
+ a11yRequirements: [],
184
+ children: [],
185
+ });
186
+ index++;
187
+ }
188
+ // If no bullets found, treat whole block as single component
189
+ if (components.length === 0 && text.trim().length > 0) {
190
+ const type = inferComponentType(text);
191
+ components.push({
192
+ id: `comp-main-${index}`,
193
+ name: 'Main Content',
194
+ type,
195
+ description: text.slice(0, 200),
196
+ props: generatePropsForType(type),
197
+ interactionStates: extractInteractionStates(text),
198
+ a11yRequirements: [],
199
+ children: [],
200
+ });
201
+ }
202
+ return components;
203
+ }
204
+ /** Extract data bindings from text (looks for "bound to", "fetches", "loads", "displays") */
205
+ function extractDataBindings(text, components) {
206
+ const bindings = [];
207
+ const bindingPattern = /(?:bound to|fetches|loads|displays|shows)\s+([\w\s]+?)(?:\.|,|from|via|$)/gi;
208
+ let match;
209
+ while ((match = bindingPattern.exec(text)) !== null) {
210
+ const dataSource = (match[1] ?? '').trim();
211
+ if (!dataSource) {
212
+ continue;
213
+ }
214
+ // Try to match the binding to the component whose description mentions the data source keyword;
215
+ // fall back to the first component if no specific match is found.
216
+ const keyword = dataSource.toLowerCase();
217
+ const targetComp = components.find((c) => c.description.toLowerCase().includes(keyword)) ?? components[0];
218
+ if (targetComp) {
219
+ bindings.push({
220
+ componentId: targetComp.id,
221
+ dataSource,
222
+ fieldMapping: `${toId(dataSource)} → ${targetComp.name}`,
223
+ loadingState: 'Loading indicator shown while fetching',
224
+ errorState: 'Error message displayed on fetch failure',
225
+ });
226
+ }
227
+ }
228
+ return bindings;
229
+ }
230
+ /** Parse a single screen block into a DesignScreen */
231
+ function parseScreenBlock(block, index, screenNames, platform) {
232
+ const nameMatch = /^(?:screen|page|view|section)?\s*[:–-]?\s*([^\n.]+)/i.exec(block);
233
+ const screenName = screenNames[index] ?? nameMatch?.[1]?.trim() ?? `Screen ${index + 1}`;
234
+ const id = `screen-${toId(screenName)}-${index}`;
235
+ const breakpoints = platform === 'web'
236
+ ? WEB_BREAKPOINTS
237
+ : platform === 'mobile'
238
+ ? MOBILE_BREAKPOINTS
239
+ : DESKTOP_BREAKPOINTS;
240
+ const components = extractComponentsFromText(block);
241
+ const dataBindings = extractDataBindings(block, components);
242
+ return {
243
+ id,
244
+ name: screenName,
245
+ description: block.slice(0, 300).trim(),
246
+ components,
247
+ breakpoints,
248
+ acceptanceCriteria: [],
249
+ a11yRequirements: [],
250
+ dataBindings,
251
+ };
252
+ }
253
+ /** Extract design tokens from description (colors, fonts, spacing hints) */
254
+ function extractDesignTokens(description) {
255
+ const tokens = [];
256
+ const colorPattern = /#[0-9a-fA-F]{3,6}|rgb\([^)]+\)|hsl\([^)]+\)/g;
257
+ let match;
258
+ let idx = 0;
259
+ while ((match = colorPattern.exec(description)) !== null) {
260
+ tokens.push({
261
+ name: `color-${idx++}`,
262
+ category: 'color',
263
+ value: match[0],
264
+ });
265
+ }
266
+ return tokens;
267
+ }
268
+ // ---------------------------------------------------------------------------
269
+ // Public API
270
+ // ---------------------------------------------------------------------------
271
+ /**
272
+ * Parses a design description string into a structured ParsedDesign representation.
273
+ * Extracts screens, components, breakpoints, and design tokens without any I/O.
274
+ */
275
+ export function parseDesignDescription(description, screenNames, platform) {
276
+ const trimmed = description.trim();
277
+ const titleMatch = /^([^\n.!?]{5,80})/.exec(trimmed);
278
+ const title = titleMatch?.[1]?.trim() ?? 'Untitled Design';
279
+ const blocks = splitIntoScreenBlocks(trimmed, screenNames);
280
+ const screens = blocks.map((block, i) => parseScreenBlock(block, i, screenNames, platform));
281
+ const tokens = extractDesignTokens(trimmed);
282
+ return {
283
+ title,
284
+ platform,
285
+ screens,
286
+ globalComponents: [],
287
+ designTokens: tokens,
288
+ };
289
+ }
290
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/engine/design-to-spec/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ParsedDesign, DesignToSpecResult, DesignPlatform } from '../../types/index.js';
2
+ /**
3
+ * Assembles a complete spec.md markdown string from a ParsedDesign.
4
+ * Includes: YAML frontmatter, description, UI contract, ACs per screen, a11y section.
5
+ */
6
+ export declare function buildSpecMarkdown(design: ParsedDesign, projectId: string, platform: DesignPlatform, includeA11y: boolean): string;
7
+ /**
8
+ * Assembles the full DesignToSpecResult from parsed design and config options.
9
+ * Pre-computes shared values once to avoid redundant calls inside buildSpecMarkdown.
10
+ */
11
+ export declare function assembleResult(design: ParsedDesign, projectId: string, platform: DesignPlatform, includeA11y: boolean): DesignToSpecResult;
12
+ //# sourceMappingURL=spec-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../../../src/engine/design-to-spec/spec-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAiG9B;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,OAAO,GACnB,MAAM,CAaR;AAqDD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,OAAO,GACnB,kBAAkB,CA0BpB"}