@owlmeans/viable-common 0.0.44 → 0.0.45

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 (589) hide show
  1. package/README.md +3 -3
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/agent-presentation/SKILL.md +4 -4
  4. package/agent-meta/skills/viable-common/SKILL.md +40 -28
  5. package/build/agent/index.d.ts +1 -0
  6. package/build/agent/index.d.ts.map +1 -1
  7. package/build/agent/index.js.map +1 -1
  8. package/build/agent/presentation/types.d.ts +21 -0
  9. package/build/agent/presentation/types.d.ts.map +1 -0
  10. package/build/agent/presentation/types.js.map +1 -0
  11. package/build/agent/presentation.d.ts +10 -8
  12. package/build/agent/presentation.d.ts.map +1 -1
  13. package/build/agent/presentation.js +216 -195
  14. package/build/agent/presentation.js.map +1 -1
  15. package/build/agent/types.local.d.ts +3 -1
  16. package/build/agent/types.local.d.ts.map +1 -1
  17. package/build/areas/index.d.ts +1 -0
  18. package/build/areas/index.d.ts.map +1 -1
  19. package/build/areas/index.js.map +1 -1
  20. package/build/areas/tenancy/types.d.ts +23 -0
  21. package/build/areas/tenancy/types.d.ts.map +1 -0
  22. package/build/areas/tenancy/types.js +2 -0
  23. package/build/areas/tenancy/types.js.map +1 -0
  24. package/build/areas/tenancy.d.ts +5 -14
  25. package/build/areas/tenancy.d.ts.map +1 -1
  26. package/build/areas/tenancy.js +20 -26
  27. package/build/areas/tenancy.js.map +1 -1
  28. package/build/ba/connecting/types.d.ts +45 -0
  29. package/build/ba/connecting/types.d.ts.map +1 -0
  30. package/build/ba/connecting/types.js +2 -0
  31. package/build/ba/connecting/types.js.map +1 -0
  32. package/build/ba/connecting.d.ts +4 -0
  33. package/build/ba/connecting.d.ts.map +1 -0
  34. package/build/ba/connecting.js +47 -0
  35. package/build/ba/connecting.js.map +1 -0
  36. package/build/ba/helpers.d.ts +4 -39
  37. package/build/ba/helpers.d.ts.map +1 -1
  38. package/build/ba/helpers.js +5 -79
  39. package/build/ba/helpers.js.map +1 -1
  40. package/build/ba/index.d.ts +2 -0
  41. package/build/ba/index.d.ts.map +1 -1
  42. package/build/ba/index.js +1 -0
  43. package/build/ba/index.js.map +1 -1
  44. package/build/blueprint/types.d.ts +1 -2
  45. package/build/blueprint/types.d.ts.map +1 -1
  46. package/build/connect/branding/types.d.ts +28 -0
  47. package/build/connect/branding/types.d.ts.map +1 -0
  48. package/build/connect/branding/types.js +2 -0
  49. package/build/connect/branding/types.js.map +1 -0
  50. package/build/connect/consts.d.ts +2 -0
  51. package/build/connect/consts.d.ts.map +1 -1
  52. package/build/connect/consts.js +2 -0
  53. package/build/connect/consts.js.map +1 -1
  54. package/build/connect/conversion/types.d.ts +93 -0
  55. package/build/connect/conversion/types.d.ts.map +1 -0
  56. package/build/connect/conversion/types.js +2 -0
  57. package/build/connect/conversion/types.js.map +1 -0
  58. package/build/connect/entrypoints/types.d.ts +30 -0
  59. package/build/connect/entrypoints/types.d.ts.map +1 -0
  60. package/build/connect/entrypoints/types.js +2 -0
  61. package/build/connect/entrypoints/types.js.map +1 -0
  62. package/build/connect/entrypoints.d.ts +17 -11
  63. package/build/connect/entrypoints.d.ts.map +1 -1
  64. package/build/connect/entrypoints.js.map +1 -1
  65. package/build/connect/errors/types.d.ts +20 -0
  66. package/build/connect/errors/types.d.ts.map +1 -0
  67. package/build/connect/errors/types.js +2 -0
  68. package/build/connect/errors/types.js.map +1 -0
  69. package/build/connect/errors.d.ts +1 -1
  70. package/build/connect/errors.d.ts.map +1 -1
  71. package/build/connect/index.d.ts +13 -3
  72. package/build/connect/index.d.ts.map +1 -1
  73. package/build/connect/index.js +1 -1
  74. package/build/connect/index.js.map +1 -1
  75. package/build/connect/kit/types.d.ts +52 -0
  76. package/build/connect/kit/types.d.ts.map +1 -0
  77. package/build/connect/kit/types.js +2 -0
  78. package/build/connect/{types.js.map → kit/types.js.map} +1 -1
  79. package/build/connect/model-tier/types.d.ts +16 -0
  80. package/build/connect/model-tier/types.d.ts.map +1 -0
  81. package/build/connect/model-tier/types.js +2 -0
  82. package/build/connect/model-tier/types.js.map +1 -0
  83. package/build/connect/model-tier.d.ts +4 -0
  84. package/build/connect/model-tier.d.ts.map +1 -0
  85. package/build/connect/model-tier.js +21 -0
  86. package/build/connect/model-tier.js.map +1 -0
  87. package/build/connect/{ops.d.ts → ops/types.d.ts} +13 -4
  88. package/build/connect/ops/types.d.ts.map +1 -0
  89. package/build/connect/ops/types.js +2 -0
  90. package/build/connect/ops/types.js.map +1 -0
  91. package/build/connect/pipeline/types.d.ts +39 -0
  92. package/build/connect/pipeline/types.d.ts.map +1 -0
  93. package/build/connect/pipeline/types.js +2 -0
  94. package/build/connect/pipeline/types.js.map +1 -0
  95. package/build/connect/project/types.d.ts +127 -0
  96. package/build/connect/project/types.d.ts.map +1 -0
  97. package/build/connect/project/types.js +2 -0
  98. package/build/connect/project/types.js.map +1 -0
  99. package/build/connect/references/types.d.ts +157 -0
  100. package/build/connect/references/types.d.ts.map +1 -0
  101. package/build/connect/references/types.js +2 -0
  102. package/build/connect/references/types.js.map +1 -0
  103. package/build/connect/references/types.local.d.ts +5 -0
  104. package/build/connect/references/types.local.d.ts.map +1 -0
  105. package/build/connect/references/types.local.js.map +1 -0
  106. package/build/connect/references.d.ts +1 -1
  107. package/build/connect/references.d.ts.map +1 -1
  108. package/build/connect/references.js.map +1 -1
  109. package/build/connect/schemas.d.ts +8 -5
  110. package/build/connect/schemas.d.ts.map +1 -1
  111. package/build/connect/schemas.js +1 -3
  112. package/build/connect/schemas.js.map +1 -1
  113. package/build/connect/session/types.d.ts +73 -0
  114. package/build/connect/session/types.d.ts.map +1 -0
  115. package/build/connect/session/types.js +2 -0
  116. package/build/connect/session/types.js.map +1 -0
  117. package/build/connect/settings/types.d.ts +48 -0
  118. package/build/connect/settings/types.d.ts.map +1 -0
  119. package/build/connect/settings/types.js +2 -0
  120. package/build/connect/settings/types.js.map +1 -0
  121. package/build/convert/analysis/types.d.ts +93 -0
  122. package/build/convert/analysis/types.d.ts.map +1 -0
  123. package/build/convert/analysis/types.js +2 -0
  124. package/build/convert/analysis/types.js.map +1 -0
  125. package/build/convert/{consts.local.d.ts → census/consts.local.d.ts} +1 -1
  126. package/build/convert/census/consts.local.d.ts.map +1 -0
  127. package/build/convert/{consts.local.js → census/consts.local.js} +1 -1
  128. package/build/convert/census/consts.local.js.map +1 -0
  129. package/build/convert/census/types.d.ts +176 -0
  130. package/build/convert/census/types.d.ts.map +1 -0
  131. package/build/convert/census/types.js +2 -0
  132. package/build/convert/census/types.js.map +1 -0
  133. package/build/convert/census.d.ts +4 -0
  134. package/build/convert/census.d.ts.map +1 -0
  135. package/build/convert/census.js +83 -0
  136. package/build/convert/census.js.map +1 -0
  137. package/build/convert/consts.d.ts +4 -0
  138. package/build/convert/consts.d.ts.map +1 -1
  139. package/build/convert/consts.js +4 -0
  140. package/build/convert/consts.js.map +1 -1
  141. package/build/convert/detection/types.d.ts +67 -0
  142. package/build/convert/detection/types.d.ts.map +1 -0
  143. package/build/convert/detection/types.js +2 -0
  144. package/build/convert/detection/types.js.map +1 -0
  145. package/build/convert/docs/types.d.ts +129 -0
  146. package/build/convert/docs/types.d.ts.map +1 -0
  147. package/build/convert/docs/types.js +2 -0
  148. package/build/convert/docs/types.js.map +1 -0
  149. package/build/convert/docs.d.ts +4 -0
  150. package/build/convert/docs.d.ts.map +1 -0
  151. package/build/convert/docs.js +9 -0
  152. package/build/convert/docs.js.map +1 -0
  153. package/build/convert/estimate/types.d.ts +77 -0
  154. package/build/convert/estimate/types.d.ts.map +1 -0
  155. package/build/convert/estimate/types.js +2 -0
  156. package/build/convert/estimate/types.js.map +1 -0
  157. package/build/convert/estimate.d.ts +11 -0
  158. package/build/convert/estimate.d.ts.map +1 -0
  159. package/build/convert/estimate.js +18 -0
  160. package/build/convert/estimate.js.map +1 -0
  161. package/build/convert/helpers.d.ts +14 -78
  162. package/build/convert/helpers.d.ts.map +1 -1
  163. package/build/convert/helpers.js +27 -199
  164. package/build/convert/helpers.js.map +1 -1
  165. package/build/convert/index.d.ts +14 -0
  166. package/build/convert/index.d.ts.map +1 -1
  167. package/build/convert/index.js +5 -0
  168. package/build/convert/index.js.map +1 -1
  169. package/build/convert/origin/types.d.ts +41 -0
  170. package/build/convert/origin/types.d.ts.map +1 -0
  171. package/build/convert/origin/types.js +2 -0
  172. package/build/convert/origin/types.js.map +1 -0
  173. package/build/convert/origin.d.ts +4 -0
  174. package/build/convert/origin.d.ts.map +1 -0
  175. package/build/convert/origin.js +25 -0
  176. package/build/convert/origin.js.map +1 -0
  177. package/build/convert/record/types.d.ts +98 -0
  178. package/build/convert/record/types.d.ts.map +1 -0
  179. package/build/convert/record/types.js +2 -0
  180. package/build/convert/record/types.js.map +1 -0
  181. package/build/convert/schemas.d.ts +7 -6
  182. package/build/convert/schemas.d.ts.map +1 -1
  183. package/build/convert/schemas.js +1 -5
  184. package/build/convert/schemas.js.map +1 -1
  185. package/build/convert/stage/types.d.ts +27 -0
  186. package/build/convert/stage/types.d.ts.map +1 -0
  187. package/build/convert/stage/types.js +2 -0
  188. package/build/convert/stage/types.js.map +1 -0
  189. package/build/convert/stage.d.ts +4 -0
  190. package/build/convert/stage.d.ts.map +1 -0
  191. package/build/convert/stage.js +25 -0
  192. package/build/convert/stage.js.map +1 -0
  193. package/build/convert/taxonomy/types.d.ts +71 -0
  194. package/build/convert/taxonomy/types.d.ts.map +1 -0
  195. package/build/convert/taxonomy/types.js +2 -0
  196. package/build/convert/taxonomy/types.js.map +1 -0
  197. package/build/convert/types.d.ts +1 -657
  198. package/build/convert/types.d.ts.map +1 -1
  199. package/build/convert/utils.d.ts +2 -1
  200. package/build/convert/utils.d.ts.map +1 -1
  201. package/build/convert/utils.js +5 -4
  202. package/build/convert/utils.js.map +1 -1
  203. package/build/design/helpers.d.ts +9 -49
  204. package/build/design/helpers.d.ts.map +1 -1
  205. package/build/design/helpers.js +17 -224
  206. package/build/design/helpers.js.map +1 -1
  207. package/build/design/index.d.ts +3 -0
  208. package/build/design/index.d.ts.map +1 -1
  209. package/build/design/index.js +1 -0
  210. package/build/design/index.js.map +1 -1
  211. package/build/design/runtime/types.d.ts +16 -0
  212. package/build/design/runtime/types.d.ts.map +1 -0
  213. package/build/design/runtime/types.js +2 -0
  214. package/build/design/runtime/types.js.map +1 -0
  215. package/build/design/runtime.d.ts +6 -2
  216. package/build/design/runtime.d.ts.map +1 -1
  217. package/build/design/runtime.js +13 -5
  218. package/build/design/runtime.js.map +1 -1
  219. package/build/design/story/types.d.ts +67 -0
  220. package/build/design/story/types.d.ts.map +1 -0
  221. package/build/design/story/types.js +2 -0
  222. package/build/design/story/types.js.map +1 -0
  223. package/build/design/story.d.ts +4 -0
  224. package/build/design/story.d.ts.map +1 -0
  225. package/build/design/story.js +184 -0
  226. package/build/design/story.js.map +1 -0
  227. package/build/dev/types.local.d.ts +2 -1
  228. package/build/dev/types.local.d.ts.map +1 -1
  229. package/build/integrity/index.d.ts +4 -0
  230. package/build/integrity/index.d.ts.map +1 -1
  231. package/build/integrity/index.js +2 -0
  232. package/build/integrity/index.js.map +1 -1
  233. package/build/integrity/layout/consts.d.ts +59 -0
  234. package/build/integrity/layout/consts.d.ts.map +1 -0
  235. package/build/integrity/layout/consts.js +66 -0
  236. package/build/integrity/layout/consts.js.map +1 -0
  237. package/build/integrity/layout/consts.local.d.ts +18 -0
  238. package/build/integrity/layout/consts.local.d.ts.map +1 -0
  239. package/build/integrity/layout/consts.local.js +176 -0
  240. package/build/integrity/layout/consts.local.js.map +1 -0
  241. package/build/integrity/layout/types.d.ts +35 -0
  242. package/build/integrity/layout/types.d.ts.map +1 -0
  243. package/build/integrity/layout/types.js +2 -0
  244. package/build/integrity/layout/types.js.map +1 -0
  245. package/build/integrity/layout.d.ts +4 -0
  246. package/build/integrity/layout.d.ts.map +1 -0
  247. package/build/integrity/layout.js +25 -0
  248. package/build/integrity/layout.js.map +1 -0
  249. package/build/integrity/types.d.ts +3 -1
  250. package/build/integrity/types.d.ts.map +1 -1
  251. package/build/integrity/utils.d.ts +6 -81
  252. package/build/integrity/utils.d.ts.map +1 -1
  253. package/build/integrity/utils.js +11 -279
  254. package/build/integrity/utils.js.map +1 -1
  255. package/build/integrity/verify/types.d.ts +26 -0
  256. package/build/integrity/verify/types.d.ts.map +1 -0
  257. package/build/integrity/verify/types.js +2 -0
  258. package/build/integrity/verify/types.js.map +1 -0
  259. package/build/integrity/verify.d.ts +5 -19
  260. package/build/integrity/verify.d.ts.map +1 -1
  261. package/build/integrity/verify.js +164 -175
  262. package/build/integrity/verify.js.map +1 -1
  263. package/build/intent/consts.d.ts +16 -0
  264. package/build/intent/consts.d.ts.map +1 -1
  265. package/build/intent/consts.js +63 -0
  266. package/build/intent/consts.js.map +1 -1
  267. package/build/intent/entrypoints.d.ts +2 -11
  268. package/build/intent/entrypoints.d.ts.map +1 -1
  269. package/build/intent/entrypoints.js.map +1 -1
  270. package/build/intent/index.d.ts +0 -1
  271. package/build/intent/index.d.ts.map +1 -1
  272. package/build/intent/index.js +0 -1
  273. package/build/intent/index.js.map +1 -1
  274. package/build/intent/types.d.ts +13 -2
  275. package/build/intent/types.d.ts.map +1 -1
  276. package/build/moderation/index.d.ts +2 -0
  277. package/build/moderation/index.d.ts.map +1 -1
  278. package/build/moderation/index.js +1 -0
  279. package/build/moderation/index.js.map +1 -1
  280. package/build/moderation/utils.d.ts +3 -15
  281. package/build/moderation/utils.d.ts.map +1 -1
  282. package/build/moderation/utils.js +5 -30
  283. package/build/moderation/utils.js.map +1 -1
  284. package/build/moderation/verdict/types.d.ts +24 -0
  285. package/build/moderation/verdict/types.d.ts.map +1 -0
  286. package/build/moderation/verdict/types.js +2 -0
  287. package/build/moderation/verdict/types.js.map +1 -0
  288. package/build/moderation/verdict.d.ts +4 -0
  289. package/build/moderation/verdict.d.ts.map +1 -0
  290. package/build/moderation/verdict.js +21 -0
  291. package/build/moderation/verdict.js.map +1 -0
  292. package/build/planning/card/types.d.ts +42 -0
  293. package/build/planning/card/types.d.ts.map +1 -0
  294. package/build/planning/card/types.js +2 -0
  295. package/build/planning/card/types.js.map +1 -0
  296. package/build/planning/card.d.ts +4 -0
  297. package/build/planning/card.d.ts.map +1 -0
  298. package/build/planning/card.js +51 -0
  299. package/build/planning/card.js.map +1 -0
  300. package/build/planning/helpers.d.ts +11 -37
  301. package/build/planning/helpers.d.ts.map +1 -1
  302. package/build/planning/helpers.js +24 -103
  303. package/build/planning/helpers.js.map +1 -1
  304. package/build/planning/index.d.ts +5 -0
  305. package/build/planning/index.d.ts.map +1 -1
  306. package/build/planning/index.js +2 -0
  307. package/build/planning/index.js.map +1 -1
  308. package/build/planning/landing/types.d.ts +16 -0
  309. package/build/planning/landing/types.d.ts.map +1 -0
  310. package/build/planning/landing/types.js +2 -0
  311. package/build/planning/landing/types.js.map +1 -0
  312. package/build/planning/landing.d.ts +5 -10
  313. package/build/planning/landing.d.ts.map +1 -1
  314. package/build/planning/landing.js +20 -22
  315. package/build/planning/landing.js.map +1 -1
  316. package/build/planning/schemas.d.ts +1 -5
  317. package/build/planning/schemas.d.ts.map +1 -1
  318. package/build/planning/schemas.js +3 -3
  319. package/build/planning/schemas.js.map +1 -1
  320. package/build/planning/spec/types.d.ts +22 -0
  321. package/build/planning/spec/types.d.ts.map +1 -0
  322. package/build/planning/spec/types.js +2 -0
  323. package/build/planning/spec/types.js.map +1 -0
  324. package/build/planning/spec.d.ts +4 -0
  325. package/build/planning/spec.d.ts.map +1 -0
  326. package/build/planning/spec.js +30 -0
  327. package/build/planning/spec.js.map +1 -0
  328. package/build/planning/types.d.ts +4 -3
  329. package/build/planning/types.d.ts.map +1 -1
  330. package/build/scaffold/consts.d.ts +40 -1
  331. package/build/scaffold/consts.d.ts.map +1 -1
  332. package/build/scaffold/consts.js +52 -0
  333. package/build/scaffold/consts.js.map +1 -1
  334. package/build/scaffold/helpers.d.ts +4 -16
  335. package/build/scaffold/helpers.d.ts.map +1 -1
  336. package/build/scaffold/helpers.js +9 -64
  337. package/build/scaffold/helpers.js.map +1 -1
  338. package/build/scaffold/index.d.ts +4 -0
  339. package/build/scaffold/index.d.ts.map +1 -1
  340. package/build/scaffold/index.js +2 -0
  341. package/build/scaffold/index.js.map +1 -1
  342. package/build/scaffold/landing/types.d.ts +48 -0
  343. package/build/scaffold/landing/types.d.ts.map +1 -0
  344. package/build/scaffold/landing/types.js +2 -0
  345. package/build/scaffold/landing/types.js.map +1 -0
  346. package/build/scaffold/landing.d.ts +4 -0
  347. package/build/scaffold/landing.d.ts.map +1 -0
  348. package/build/scaffold/landing.js +95 -0
  349. package/build/scaffold/landing.js.map +1 -0
  350. package/build/scaffold/schemas.d.ts +3 -2
  351. package/build/scaffold/schemas.d.ts.map +1 -1
  352. package/build/scaffold/schemas.js +177 -7
  353. package/build/scaffold/schemas.js.map +1 -1
  354. package/build/scaffold/share/types.d.ts +35 -0
  355. package/build/scaffold/share/types.d.ts.map +1 -0
  356. package/build/scaffold/share/types.js +2 -0
  357. package/build/scaffold/share/types.js.map +1 -0
  358. package/build/scaffold/share.d.ts +4 -0
  359. package/build/scaffold/share.d.ts.map +1 -0
  360. package/build/scaffold/share.js +42 -0
  361. package/build/scaffold/share.js.map +1 -0
  362. package/build/scaffold/types.d.ts +112 -2
  363. package/build/scaffold/types.d.ts.map +1 -1
  364. package/build/skills/consts.d.ts +42 -0
  365. package/build/skills/consts.d.ts.map +1 -1
  366. package/build/skills/consts.js +43 -0
  367. package/build/skills/consts.js.map +1 -1
  368. package/build/skills/index.d.ts +0 -1
  369. package/build/skills/index.d.ts.map +1 -1
  370. package/build/skills/index.js +0 -1
  371. package/build/skills/index.js.map +1 -1
  372. package/build/slot/command/types.d.ts +21 -0
  373. package/build/slot/command/types.d.ts.map +1 -0
  374. package/build/slot/command/types.js +2 -0
  375. package/build/slot/command/types.js.map +1 -0
  376. package/build/slot/command.d.ts +4 -0
  377. package/build/slot/command.d.ts.map +1 -0
  378. package/build/slot/command.js +31 -0
  379. package/build/slot/command.js.map +1 -0
  380. package/build/slot/helpers.d.ts +2 -16
  381. package/build/slot/helpers.d.ts.map +1 -1
  382. package/build/slot/helpers.js +5 -26
  383. package/build/slot/helpers.js.map +1 -1
  384. package/build/slot/index.d.ts +5 -0
  385. package/build/slot/index.d.ts.map +1 -1
  386. package/build/slot/index.js +2 -0
  387. package/build/slot/index.js.map +1 -1
  388. package/build/slot/layout/types.d.ts +17 -0
  389. package/build/slot/layout/types.d.ts.map +1 -0
  390. package/build/slot/layout/types.js +2 -0
  391. package/build/slot/layout/types.js.map +1 -0
  392. package/build/slot/layout.d.ts +4 -9
  393. package/build/slot/layout.d.ts.map +1 -1
  394. package/build/slot/layout.js +13 -15
  395. package/build/slot/layout.js.map +1 -1
  396. package/build/slot/origin/types.d.ts +23 -0
  397. package/build/slot/origin/types.d.ts.map +1 -0
  398. package/build/slot/origin/types.js +2 -0
  399. package/build/slot/origin/types.js.map +1 -0
  400. package/build/slot/origin.d.ts +4 -0
  401. package/build/slot/origin.d.ts.map +1 -0
  402. package/build/slot/origin.js +15 -0
  403. package/build/slot/origin.js.map +1 -0
  404. package/build/slot/types.d.ts.map +1 -1
  405. package/build/slot/utils.d.ts +3 -15
  406. package/build/slot/utils.d.ts.map +1 -1
  407. package/build/slot/utils.js +5 -40
  408. package/build/slot/utils.js.map +1 -1
  409. package/build/topology/card/types.d.ts +21 -0
  410. package/build/topology/card/types.d.ts.map +1 -0
  411. package/build/topology/card/types.js +2 -0
  412. package/build/topology/card/types.js.map +1 -0
  413. package/build/topology/card.d.ts +6 -13
  414. package/build/topology/card.d.ts.map +1 -1
  415. package/build/topology/card.js +83 -86
  416. package/build/topology/card.js.map +1 -1
  417. package/build/topology/helpers.d.ts +7 -33
  418. package/build/topology/helpers.d.ts.map +1 -1
  419. package/build/topology/helpers.js +15 -111
  420. package/build/topology/helpers.js.map +1 -1
  421. package/build/topology/index.d.ts +3 -0
  422. package/build/topology/index.d.ts.map +1 -1
  423. package/build/topology/index.js +1 -0
  424. package/build/topology/index.js.map +1 -1
  425. package/build/topology/resolve/types.d.ts +47 -0
  426. package/build/topology/resolve/types.d.ts.map +1 -0
  427. package/build/topology/resolve/types.js +2 -0
  428. package/build/topology/resolve/types.js.map +1 -0
  429. package/build/topology/resolve.d.ts +4 -0
  430. package/build/topology/resolve.d.ts.map +1 -0
  431. package/build/topology/resolve.js +89 -0
  432. package/build/topology/resolve.js.map +1 -0
  433. package/package.json +11 -11
  434. package/src/agent/index.ts +1 -0
  435. package/src/agent/presentation/types.ts +21 -0
  436. package/src/agent/presentation.ts +199 -165
  437. package/src/agent/types.local.ts +3 -1
  438. package/src/areas/index.ts +1 -0
  439. package/src/areas/tenancy/types.ts +23 -0
  440. package/src/areas/tenancy.ts +26 -25
  441. package/src/ba/connecting/types.ts +45 -0
  442. package/src/ba/connecting.ts +64 -0
  443. package/src/ba/helpers.ts +8 -92
  444. package/src/ba/index.ts +2 -0
  445. package/src/blueprint/types.ts +2 -2
  446. package/src/connect/branding/types.ts +29 -0
  447. package/src/connect/consts.ts +3 -0
  448. package/src/connect/conversion/types.ts +96 -0
  449. package/src/connect/entrypoints/types.ts +25 -0
  450. package/src/connect/entrypoints.ts +13 -2
  451. package/src/connect/errors/types.ts +22 -0
  452. package/src/connect/errors.ts +1 -1
  453. package/src/connect/index.ts +13 -3
  454. package/src/connect/kit/types.ts +56 -0
  455. package/src/connect/model-tier/types.ts +16 -0
  456. package/src/connect/model-tier.ts +22 -0
  457. package/src/connect/{ops.ts → ops/types.ts} +13 -3
  458. package/src/connect/pipeline/types.ts +41 -0
  459. package/src/connect/project/types.ts +127 -0
  460. package/src/connect/references/types.local.ts +5 -0
  461. package/src/connect/references/types.ts +73 -0
  462. package/src/connect/references.ts +13 -2
  463. package/src/connect/schemas.ts +9 -13
  464. package/src/connect/session/types.ts +81 -0
  465. package/src/connect/settings/types.ts +52 -0
  466. package/src/convert/analysis/types.ts +89 -0
  467. package/src/convert/{consts.local.ts → census/consts.local.ts} +1 -1
  468. package/src/convert/census/types.ts +181 -0
  469. package/src/convert/census.ts +95 -0
  470. package/src/convert/consts.ts +5 -0
  471. package/src/convert/detection/types.ts +74 -0
  472. package/src/convert/docs/types.ts +151 -0
  473. package/src/convert/docs.ts +15 -0
  474. package/src/convert/estimate/types.ts +75 -0
  475. package/src/convert/estimate.ts +19 -0
  476. package/src/convert/helpers.ts +29 -210
  477. package/src/convert/index.ts +14 -0
  478. package/src/convert/origin/types.ts +43 -0
  479. package/src/convert/origin.ts +33 -0
  480. package/src/convert/record/types.ts +105 -0
  481. package/src/convert/schemas.ts +13 -12
  482. package/src/convert/stage/types.ts +27 -0
  483. package/src/convert/stage.ts +31 -0
  484. package/src/convert/taxonomy/types.ts +74 -0
  485. package/src/convert/types.ts +5 -709
  486. package/src/convert/utils.ts +5 -6
  487. package/src/design/helpers.ts +20 -245
  488. package/src/design/index.ts +3 -0
  489. package/src/design/runtime/types.ts +14 -0
  490. package/src/design/runtime.ts +22 -7
  491. package/src/design/story/types.ts +67 -0
  492. package/src/design/story.ts +221 -0
  493. package/src/dev/types.local.ts +1 -1
  494. package/src/integrity/index.ts +4 -0
  495. package/src/integrity/layout/consts.local.ts +188 -0
  496. package/src/integrity/layout/consts.ts +79 -0
  497. package/src/integrity/layout/types.ts +35 -0
  498. package/src/integrity/layout.ts +39 -0
  499. package/src/integrity/types.ts +3 -1
  500. package/src/integrity/utils.ts +14 -313
  501. package/src/integrity/verify/types.ts +26 -0
  502. package/src/integrity/verify.ts +177 -181
  503. package/src/intent/consts.ts +67 -0
  504. package/src/intent/entrypoints.ts +2 -2
  505. package/src/intent/index.ts +0 -1
  506. package/src/intent/types.ts +9 -2
  507. package/src/moderation/index.ts +2 -0
  508. package/src/moderation/utils.ts +7 -30
  509. package/src/moderation/verdict/types.ts +22 -0
  510. package/src/moderation/verdict.ts +28 -0
  511. package/src/planning/card/types.ts +44 -0
  512. package/src/planning/card.ts +77 -0
  513. package/src/planning/helpers.ts +28 -116
  514. package/src/planning/index.ts +5 -0
  515. package/src/planning/landing/types.ts +15 -0
  516. package/src/planning/landing.ts +27 -24
  517. package/src/planning/schemas.ts +3 -3
  518. package/src/planning/spec/types.ts +22 -0
  519. package/src/planning/spec.ts +41 -0
  520. package/src/planning/types.ts +4 -4
  521. package/src/scaffold/consts.ts +65 -1
  522. package/src/scaffold/helpers.ts +14 -77
  523. package/src/scaffold/index.ts +4 -0
  524. package/src/scaffold/landing/types.ts +48 -0
  525. package/src/scaffold/landing.ts +120 -0
  526. package/src/scaffold/schemas.ts +183 -7
  527. package/src/scaffold/share/types.ts +35 -0
  528. package/src/scaffold/share.ts +60 -0
  529. package/src/scaffold/types.ts +120 -1
  530. package/src/skills/consts.ts +46 -0
  531. package/src/skills/index.ts +0 -1
  532. package/src/slot/command/types.ts +21 -0
  533. package/src/slot/command.ts +38 -0
  534. package/src/slot/helpers.ts +5 -25
  535. package/src/slot/index.ts +5 -0
  536. package/src/slot/layout/types.ts +17 -0
  537. package/src/slot/layout.ts +19 -16
  538. package/src/slot/origin/types.ts +23 -0
  539. package/src/slot/origin.ts +20 -0
  540. package/src/slot/types.ts +1 -0
  541. package/src/slot/utils.ts +8 -43
  542. package/src/topology/card/types.ts +21 -0
  543. package/src/topology/card.ts +84 -82
  544. package/src/topology/helpers.ts +20 -125
  545. package/src/topology/index.ts +3 -0
  546. package/src/topology/resolve/types.ts +47 -0
  547. package/src/topology/resolve.ts +118 -0
  548. package/tests/blueprint.spec.ts +1 -2
  549. package/tests/connect-errors.spec.ts +1 -1
  550. package/tests/convert.spec.ts +50 -50
  551. package/tests/design.spec.ts +13 -16
  552. package/tests/planning.spec.ts +57 -59
  553. package/tests/presentation.spec.ts +20 -20
  554. package/tests/scaffold.spec.ts +286 -6
  555. package/tests/tenancy.spec.ts +21 -21
  556. package/build/connect/ops.d.ts.map +0 -1
  557. package/build/connect/ops.js +0 -2
  558. package/build/connect/ops.js.map +0 -1
  559. package/build/connect/types.d.ts +0 -650
  560. package/build/connect/types.d.ts.map +0 -1
  561. package/build/connect/types.local.d.ts +0 -4
  562. package/build/connect/types.local.d.ts.map +0 -1
  563. package/build/connect/types.local.js.map +0 -1
  564. package/build/connect/utils.d.ts +0 -12
  565. package/build/connect/utils.d.ts.map +0 -1
  566. package/build/connect/utils.js +0 -25
  567. package/build/connect/utils.js.map +0 -1
  568. package/build/convert/consts.local.d.ts.map +0 -1
  569. package/build/convert/consts.local.js.map +0 -1
  570. package/build/intent/consts.local.d.ts +0 -4
  571. package/build/intent/consts.local.d.ts.map +0 -1
  572. package/build/intent/consts.local.js +0 -3
  573. package/build/intent/consts.local.js.map +0 -1
  574. package/build/intent/flow.d.ts +0 -17
  575. package/build/intent/flow.d.ts.map +0 -1
  576. package/build/intent/flow.js +0 -65
  577. package/build/intent/flow.js.map +0 -1
  578. package/build/skills/roles.d.ts +0 -43
  579. package/build/skills/roles.d.ts.map +0 -1
  580. package/build/skills/roles.js +0 -44
  581. package/build/skills/roles.js.map +0 -1
  582. package/src/connect/types.local.ts +0 -5
  583. package/src/connect/types.ts +0 -589
  584. package/src/connect/utils.ts +0 -23
  585. package/src/intent/consts.local.ts +0 -3
  586. package/src/intent/flow.ts +0 -66
  587. package/src/skills/roles.ts +0 -46
  588. /package/build/{connect → agent/presentation}/types.js +0 -0
  589. /package/build/connect/{types.local.js → references/types.local.js} +0 -0
@@ -1,8 +1,7 @@
1
- import { CONVERSION_SEED_DATA_DIR, CONVERSION_SEED_DIR, CONVERSION_STORY_DIR } from './consts.js'
1
+ import { conversionDocHelper } from './docs.js'
2
2
 
3
- export const conversionStoryDoc = (code: string): string => `${CONVERSION_STORY_DIR}/${code}.md`
3
+ /** @deprecated compat:factory-refactor — use `conversionDocHelper.conversionStoryDoc(…)` */
4
+ export const conversionStoryDoc = (code: string): string => conversionDocHelper.conversionStoryDoc(code)
4
5
 
5
- export const conversionSeedDoc = (name: string): string => `${CONVERSION_SEED_DIR}/${name}.md`
6
-
7
- export const conversionSeedData = (name: string, ext: string): string =>
8
- `${CONVERSION_SEED_DATA_DIR}/${name}.${ext}`
6
+ /** @deprecated compat:factory-refactor — use `conversionDocHelper.conversionSeedDoc(…)` */
7
+ export const conversionSeedDoc = (name: string): string => conversionDocHelper.conversionSeedDoc(name)
@@ -1,259 +1,34 @@
1
- import { SpecCategory } from '../ba/consts.js'
2
- import type { Entity, StoryComponent, StoryScreen, UserStory } from '../ba/types.js'
3
- import { DesignStaleness, STORY_DESIGN_VERSION } from './consts.js'
1
+ import type { UserStory } from '../ba/types.js'
2
+ import type { DesignStaleness } from './consts.js'
3
+ import { storyDesignHelper } from './story.js'
4
4
  import type { StoryDesign } from './types.js'
5
5
 
6
- /**
7
- * The in-memory aggregate the coders take, derived from the design ALONE.
8
- *
9
- * Derived rather than stored, and derived HERE rather than at the platform: the aggregate is what
10
- * every generation helper reads, and a second place that assembles it is a second place that can
11
- * assemble it differently. The `code` in particular is load-bearing - the scaffold stamps every
12
- * placeholder it draws with it, so a run keyed by anything else cannot recognise its own
13
- * reservation.
14
- *
15
- * For a context with no card behind it. Where a story card exists, `userStoryOf(card, design)` is
16
- * the reader: the card wins on the narrative, code, area and actor, which a person may have
17
- * changed since the design was written.
18
- */
19
- export const userStoryOfDesign = (design: StoryDesign): UserStory => {
20
- const componentOf = (name: string): StoryComponent | null => {
21
- const component = design.components.find(entry => entry.name === name)
22
- if (component == null) {
23
- return null
24
- }
6
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.userStoryOfDesign(…)` */
7
+ export const userStoryOfDesign = (design: StoryDesign): UserStory => storyDesignHelper.userStoryOfDesign(design)
25
8
 
26
- return {
27
- name: component.name,
28
- description: '',
29
- specs: {
30
- [SpecCategory.UX]: component.specs.ux,
31
- [SpecCategory.UI]: component.specs.ui,
32
- } as Record<SpecCategory, string>,
33
- entities: component.entities.map(entity => ({
34
- name: entity, description: '', attributes: [],
35
- } satisfies Entity)),
36
- }
37
- }
9
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.screenMapOf(…)` */
10
+ export const screenMapOf = (design: StoryDesign): Record<string, string[]> => storyDesignHelper.screenMapOf(design)
38
11
 
39
- const screens: StoryScreen[] = design.screens.map(screen => ({
40
- name: screen.name,
41
- description: '',
42
- ...(screen.section != null ? { section: screen.section } : {}),
43
- specs: {
44
- [SpecCategory.UX]: screen.specs.ux,
45
- [SpecCategory.UI]: screen.specs.ui,
46
- } as Record<SpecCategory, string>,
47
- components: screen.components
48
- .map(componentOf)
49
- .filter((component): component is StoryComponent => component != null),
50
- }))
12
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.designPaths(…)` */
13
+ export const designPaths = (design: StoryDesign): string[] => storyDesignHelper.designPaths(design)
51
14
 
52
- return {
53
- story: design.narrative,
54
- code: design.code,
55
- area: design.area,
56
- entity: null as unknown as string,
57
- entities: design.entities.map(entity => ({
58
- name: entity.name, description: entity.description, attributes: [],
59
- } satisfies Entity)),
60
- screens,
61
- }
62
- }
63
-
64
- /** Screen name to component names - the shape every UX and UI prompt takes. */
65
- export const screenMapOf = (design: StoryDesign): Record<string, string[]> =>
66
- design.screens.reduce<Record<string, string[]>>((map, screen) => {
67
- map[screen.name] = [...screen.components]
68
-
69
- return map
70
- }, {})
71
-
72
- /** Every path the design names, in the order the implementation stage visits them. */
73
- export const designPaths = (design: StoryDesign): string[] => [
74
- ...design.types.map(entry => entry.path),
75
- ...design.resources.map(entry => entry.path),
76
- ...design.models.map(entry => entry.path),
77
- ...design.api.map(entry => entry.path),
78
- ...design.stores.map(entry => entry.path),
79
- ...design.components.flatMap(entry => [entry.viewModelPath, entry.path]),
80
- ...design.screens.map(entry => entry.path),
81
- ]
82
-
83
- /**
84
- * How far the world has moved since the design was written.
85
- *
86
- * Ordered by severity, and each answer has one correct reaction: a version mismatch REFUSES, a
87
- * changed narrative re-designs, a changed project warns and continues, a moved tree re-runs only
88
- * the stages that read the tree. Collapsing them into a boolean would make every one of those the
89
- * most expensive of the four.
90
- */
15
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.designStaleness(…)` */
91
16
  export const designStaleness = (
92
17
  design: StoryDesign,
93
18
  now: { narrativeHash: string, projectHash: string, registryHash: string },
94
- ): DesignStaleness => {
95
- if (design.version !== STORY_DESIGN_VERSION) {
96
- return DesignStaleness.Version
97
- }
98
- if (design.provenance.narrativeHash !== now.narrativeHash) {
99
- return DesignStaleness.Narrative
100
- }
101
- if (design.provenance.projectHash !== now.projectHash) {
102
- return DesignStaleness.Project
103
- }
104
- if (design.provenance.registryHash !== now.registryHash) {
105
- return DesignStaleness.Tree
106
- }
107
-
108
- return DesignStaleness.Fresh
109
- }
110
-
111
- /**
112
- * A stable, dependency-free hash of arbitrary text.
113
- *
114
- * FNV-1a, because what is being detected is "did this change", not "is this authentic" - and a
115
- * design record must be readable by a browser bundle, a worker and a test with no crypto import
116
- * between them.
117
- */
118
- export const designHash = (...parts: Array<string | undefined>): string => {
119
- const text = parts.filter(part => part != null).join(' ')
120
- let hash = 0x811c9dc5
121
- for (let at = 0; at < text.length; at += 1) {
122
- hash ^= text.charCodeAt(at)
123
- hash = Math.imul(hash, 0x01000193) >>> 0
124
- }
19
+ ): DesignStaleness => storyDesignHelper.designStaleness(design, now)
125
20
 
126
- return hash.toString(16).padStart(8, '0')
127
- }
21
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.designHash(…)` */
22
+ export const designHash = (...parts: Array<string | undefined>): string => storyDesignHelper.designHash(...parts)
128
23
 
129
- /** An empty design, so every stage can fill its own slice without inventing the shape. */
24
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.emptyStoryDesign(…)` */
130
25
  export const emptyStoryDesign = (
131
26
  input: Pick<StoryDesign, 'code' | 'narrative' | 'area'> & Partial<StoryDesign>,
132
- ): StoryDesign => ({
133
- version: STORY_DESIGN_VERSION,
134
- reserved: {},
135
- entities: [],
136
- screens: [],
137
- components: [],
138
- types: [],
139
- resources: [],
140
- models: [],
141
- api: [],
142
- stores: [],
143
- transitions: [],
144
- access: { list: {}, resolvedAt: {} },
145
- provenance: {
146
- designedAt: new Date().toISOString(),
147
- narrativeHash: '',
148
- projectHash: '',
149
- registryHash: '',
150
- paths: [],
151
- },
152
- ...input,
153
- })
154
-
155
- /**
156
- * The design, small enough to hand a model, complete enough to act on.
157
- *
158
- * What a free-flight agent needs is names and counts: which screens exist, what is on them, which
159
- * types and endpoints the story implies. The UX and UI prose is the bulk of a design and none of
160
- * it helps an agent decide what to do next, so it is deliberately left out.
161
- */
162
- export const designDigest = (design: StoryDesign): string => {
163
- const lines: string[] = [
164
- `Story ${design.code} (${design.area}): ${design.narrative}`,
165
- ]
166
- if (design.reserved.section != null || design.reserved.screen != null) {
167
- lines.push(`Reserved: section=${design.reserved.section ?? '-'} screen=${design.reserved.screen ?? '-'}`)
168
- }
169
- lines.push('', 'Screens:')
170
- for (const screen of design.screens) {
171
- lines.push(
172
- `- ${screen.name} -> ${screen.path} (alias ${screen.alias}`
173
- + `${screen.section != null ? `, section ${screen.section}` : ''}`
174
- + `${screen.adopted ? ', existing' : ''}) renders ${screen.components.join(', ') || '-'}`,
175
- )
176
- }
177
- lines.push('', 'Components:')
178
- for (const component of design.components) {
179
- lines.push(
180
- `- ${component.name} -> ${component.path} (+ ${component.viewModelPath})`
181
- + `${component.entities.length > 0 ? ` about ${component.entities.join(', ')}` : ''}`,
182
- )
183
- }
184
- lines.push('', 'Data layer:')
185
- for (const type of design.types) {
186
- lines.push(`- type ${type.path} (${type.entity})`)
187
- }
188
- for (const resource of design.resources) {
189
- lines.push(`- resource ${resource.path} (${resource.entity})`)
190
- }
191
- for (const model of design.models) {
192
- lines.push(`- model ${model.path} (${model.entities.join(', ')})`)
193
- }
194
- for (const api of design.api) {
195
- lines.push(
196
- `- api ${api.path} (${api.entity})`
197
- + `${api.endpoints.length > 0 ? `: ${api.endpoints.map(e => e.alias).join(', ')}` : ''}`,
198
- )
199
- }
200
- for (const store of design.stores) {
201
- lines.push(`- store ${store.path} (${store.entity})`)
202
- }
203
- if (design.transitions.length > 0) {
204
- lines.push('', 'Transitions:')
205
- for (const transition of design.transitions) {
206
- lines.push(`- ${transition.from} -> ${transition.to} (${transition.action})`)
207
- }
208
- }
209
- const guarded = Object.keys(design.access.list)
210
- if (guarded.length > 0) {
211
- lines.push('', `Access declared on: ${guarded.join(', ')}`)
212
- }
213
-
214
- return lines.join('\n')
215
- }
216
-
217
- /**
218
- * Apply a patch to a design, refusing anything that would rename an allocated artifact.
219
- *
220
- * A path or an alias is registry-owned. Changing one behind the registry's back leaves two
221
- * spellings of the same thing in a project, and no number of fix attempts repairs that — the
222
- * compiler sees a missing module and the fixer, reasonably, renames the reference to match
223
- * whichever spelling it found first.
224
- *
225
- * Returns the reason as a STRING when it refuses, so a model can read it and take the other route.
226
- */
227
- export const amendStoryDesign = (
228
- design: StoryDesign, patch: Record<string, unknown>,
229
- ): StoryDesign | string => {
230
- const forbidden: string[] = []
231
-
232
- const checkList = <T extends { path?: string, alias?: string, name?: string }>(
233
- key: string, current: T[], next: unknown,
234
- ): void => {
235
- if (!Array.isArray(next)) return
236
- for (const entry of next as T[]) {
237
- const known = current.find(item => item.name === entry.name)
238
- if (known == null) continue
239
- if (entry.path != null && known.path != null && entry.path !== known.path) {
240
- forbidden.push(`${key}.${String(entry.name)}.path`)
241
- }
242
- if (entry.alias != null && known.alias != null && entry.alias !== known.alias) {
243
- forbidden.push(`${key}.${String(entry.name)}.alias`)
244
- }
245
- }
246
- }
247
-
248
- checkList('screens', design.screens, patch.screens)
249
- checkList('components', design.components, patch.components)
27
+ ): StoryDesign => storyDesignHelper.emptyStoryDesign(input)
250
28
 
251
- if (forbidden.length > 0) {
252
- return `Refused: ${forbidden.join(', ')} name artifacts the project's registry allocated. `
253
- + 'A design may change what a screen or a component DOES - its UX, its UI, its section, its '
254
- + 'endpoints - but never where it lives or what it is called. Rename through the registry, '
255
- + 'or leave the name alone and change the behaviour.'
256
- }
29
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.designDigest(…)` */
30
+ export const designDigest = (design: StoryDesign): string => storyDesignHelper.designDigest(design)
257
31
 
258
- return { ...design, ...patch } as StoryDesign
259
- }
32
+ /** @deprecated compat:factory-refactor — use `storyDesignHelper.amendStoryDesign(…)` */
33
+ export const amendStoryDesign = (design: StoryDesign, patch: Record<string, unknown>): StoryDesign | string =>
34
+ storyDesignHelper.amendStoryDesign(design, patch)
@@ -1,5 +1,8 @@
1
1
  export * from './consts.js'
2
+ export * from './story.js'
2
3
  export * from './helpers.js'
3
4
  export * from './schemas.js'
4
5
  export type * from './types.js'
6
+ export type * from './story/types.js'
7
+ export type * from './runtime/types.js'
5
8
  export * from './runtime.js'
@@ -0,0 +1,14 @@
1
+ import type { StoryActor } from '../consts.js'
2
+ import type { StoryDesignRuntime } from '../types.js'
3
+
4
+ /**
5
+ * What a story needs BEYOND a screen, an endpoint and a table — and the standing answer is
6
+ * "nothing". See `design/runtime.ts`.
7
+ */
8
+ export interface StoryRuntimeHelper {
9
+ isEphemeralActor: (actor?: StoryActor) => boolean
10
+ /** Read the gate off a design, total over a design that predates it. */
11
+ runtimeOf: (design?: { runtime?: StoryDesignRuntime }) => StoryDesignRuntime
12
+ /** Whether anything at all was asked for — the one check every new step is gated on. */
13
+ needsRuntime: (runtime: StoryDesignRuntime) => boolean
14
+ }
@@ -16,14 +16,29 @@
16
16
 
17
17
  import { EPHEMERAL_ACTORS, NO_RUNTIME, StoryActor } from './consts.js'
18
18
  import type { StoryDesignRuntime } from './types.js'
19
+ import type { StoryRuntimeHelper } from './runtime/types.js'
19
20
 
20
- export const isEphemeralActor = (actor?: StoryActor): boolean =>
21
- actor != null && EPHEMERAL_ACTORS.includes(actor)
21
+ export const createStoryRuntimeHelper = (): StoryRuntimeHelper => {
22
+ const isEphemeralActor = (actor?: StoryActor): boolean =>
23
+ actor != null && EPHEMERAL_ACTORS.includes(actor)
22
24
 
23
- /** Read the gate off a design, total over a design that predates it. */
25
+ const runtimeOf = (design?: { runtime?: StoryDesignRuntime }): StoryDesignRuntime =>
26
+ design?.runtime ?? NO_RUNTIME
27
+
28
+ const needsRuntime = (runtime: StoryDesignRuntime): boolean =>
29
+ runtime.worker || runtime.jobs.length > 0 || runtime.agents.length > 0
30
+
31
+ return { isEphemeralActor, runtimeOf, needsRuntime }
32
+ }
33
+
34
+ export const storyRuntimeHelper = createStoryRuntimeHelper()
35
+
36
+ /** @deprecated compat:factory-refactor — use `storyRuntimeHelper.isEphemeralActor(…)` */
37
+ export const isEphemeralActor = (actor?: StoryActor): boolean => storyRuntimeHelper.isEphemeralActor(actor)
38
+
39
+ /** @deprecated compat:factory-refactor — use `storyRuntimeHelper.runtimeOf(…)` */
24
40
  export const runtimeOf = (design?: { runtime?: StoryDesignRuntime }): StoryDesignRuntime =>
25
- design?.runtime ?? NO_RUNTIME
41
+ storyRuntimeHelper.runtimeOf(design)
26
42
 
27
- /** Whether anything at all was asked for — the one check every new step is gated on. */
28
- export const needsRuntime = (runtime: StoryDesignRuntime): boolean =>
29
- runtime.worker || runtime.jobs.length > 0 || runtime.agents.length > 0
43
+ /** @deprecated compat:factory-refactor — use `storyRuntimeHelper.needsRuntime(…)` */
44
+ export const needsRuntime = (runtime: StoryDesignRuntime): boolean => storyRuntimeHelper.needsRuntime(runtime)
@@ -0,0 +1,67 @@
1
+ import type { UserStory } from '../../ba/types.js'
2
+ import type { DesignStaleness } from '../consts.js'
3
+ import type { StoryDesign } from '../types.js'
4
+
5
+ /** Reading, digesting, hashing and amending a story's design record. */
6
+ export interface StoryDesignHelper {
7
+ /**
8
+ * The in-memory aggregate the coders take, derived from the design ALONE.
9
+ *
10
+ * Derived rather than stored, and derived HERE rather than at the platform: the aggregate is what
11
+ * every generation helper reads, and a second place that assembles it is a second place that can
12
+ * assemble it differently. The `code` in particular is load-bearing - the scaffold stamps every
13
+ * placeholder it draws with it, so a run keyed by anything else cannot recognise its own
14
+ * reservation.
15
+ *
16
+ * For a context with no card behind it. Where a story card exists, `userStoryOf(card, design)` is
17
+ * the reader: the card wins on the narrative, code, area and actor, which a person may have
18
+ * changed since the design was written.
19
+ */
20
+ userStoryOfDesign: (design: StoryDesign) => UserStory
21
+ /** Screen name to component names - the shape every UX and UI prompt takes. */
22
+ screenMapOf: (design: StoryDesign) => Record<string, string[]>
23
+ /** Every path the design names, in the order the implementation stage visits them. */
24
+ designPaths: (design: StoryDesign) => string[]
25
+ /**
26
+ * How far the world has moved since the design was written.
27
+ *
28
+ * Ordered by severity, and each answer has one correct reaction: a version mismatch REFUSES, a
29
+ * changed narrative re-designs, a changed project warns and continues, a moved tree re-runs only
30
+ * the stages that read the tree. Collapsing them into a boolean would make every one of those the
31
+ * most expensive of the four.
32
+ */
33
+ designStaleness: (
34
+ design: StoryDesign, now: { narrativeHash: string, projectHash: string, registryHash: string },
35
+ ) => DesignStaleness
36
+ /**
37
+ * A stable, dependency-free hash of arbitrary text.
38
+ *
39
+ * FNV-1a, because what is being detected is "did this change", not "is this authentic" - and a
40
+ * design record must be readable by a browser bundle, a worker and a test with no crypto import
41
+ * between them.
42
+ */
43
+ designHash: (...parts: Array<string | undefined>) => string
44
+ /** An empty design, so every stage can fill its own slice without inventing the shape. */
45
+ emptyStoryDesign: (
46
+ input: Pick<StoryDesign, 'code' | 'narrative' | 'area'> & Partial<StoryDesign>,
47
+ ) => StoryDesign
48
+ /**
49
+ * The design, small enough to hand a model, complete enough to act on.
50
+ *
51
+ * What a free-flight agent needs is names and counts: which screens exist, what is on them, which
52
+ * types and endpoints the story implies. The UX and UI prose is the bulk of a design and none of
53
+ * it helps an agent decide what to do next, so it is deliberately left out.
54
+ */
55
+ designDigest: (design: StoryDesign) => string
56
+ /**
57
+ * Apply a patch to a design, refusing anything that would rename an allocated artifact.
58
+ *
59
+ * A path or an alias is registry-owned. Changing one behind the registry's back leaves two
60
+ * spellings of the same thing in a project, and no number of fix attempts repairs that — the
61
+ * compiler sees a missing module and the fixer, reasonably, renames the reference to match
62
+ * whichever spelling it found first.
63
+ *
64
+ * Returns the reason as a STRING when it refuses, so a model can read it and take the other route.
65
+ */
66
+ amendStoryDesign: (design: StoryDesign, patch: Record<string, unknown>) => StoryDesign | string
67
+ }
@@ -0,0 +1,221 @@
1
+ import { SpecCategory } from '../ba/consts.js'
2
+ import type { Entity, StoryComponent, StoryScreen, UserStory } from '../ba/types.js'
3
+ import { DesignStaleness, STORY_DESIGN_VERSION } from './consts.js'
4
+ import type { StoryDesign } from './types.js'
5
+ import type { StoryDesignHelper } from './story/types.js'
6
+
7
+ export const createStoryDesignHelper = (): StoryDesignHelper => {
8
+ const userStoryOfDesign = (design: StoryDesign): UserStory => {
9
+ const componentOf = (name: string): StoryComponent | null => {
10
+ const component = design.components.find(entry => entry.name === name)
11
+ if (component == null) {
12
+ return null
13
+ }
14
+
15
+ return {
16
+ name: component.name,
17
+ description: '',
18
+ specs: {
19
+ [SpecCategory.UX]: component.specs.ux,
20
+ [SpecCategory.UI]: component.specs.ui,
21
+ } as Record<SpecCategory, string>,
22
+ entities: component.entities.map(entity => ({
23
+ name: entity, description: '', attributes: [],
24
+ } satisfies Entity)),
25
+ }
26
+ }
27
+
28
+ const screens: StoryScreen[] = design.screens.map(screen => ({
29
+ name: screen.name,
30
+ description: '',
31
+ ...(screen.section != null ? { section: screen.section } : {}),
32
+ specs: {
33
+ [SpecCategory.UX]: screen.specs.ux,
34
+ [SpecCategory.UI]: screen.specs.ui,
35
+ } as Record<SpecCategory, string>,
36
+ components: screen.components
37
+ .map(componentOf)
38
+ .filter((component): component is StoryComponent => component != null),
39
+ }))
40
+
41
+ return {
42
+ story: design.narrative,
43
+ code: design.code,
44
+ area: design.area,
45
+ entity: null as unknown as string,
46
+ entities: design.entities.map(entity => ({
47
+ name: entity.name, description: entity.description, attributes: [],
48
+ } satisfies Entity)),
49
+ screens,
50
+ }
51
+ }
52
+
53
+ const screenMapOf = (design: StoryDesign): Record<string, string[]> =>
54
+ design.screens.reduce<Record<string, string[]>>((map, screen) => {
55
+ map[screen.name] = [...screen.components]
56
+
57
+ return map
58
+ }, {})
59
+
60
+ const designPaths = (design: StoryDesign): string[] => [
61
+ ...design.types.map(entry => entry.path),
62
+ ...design.resources.map(entry => entry.path),
63
+ ...design.models.map(entry => entry.path),
64
+ ...design.api.map(entry => entry.path),
65
+ ...design.stores.map(entry => entry.path),
66
+ ...design.components.flatMap(entry => [entry.viewModelPath, entry.path]),
67
+ ...design.screens.map(entry => entry.path),
68
+ ]
69
+
70
+ const designStaleness = (
71
+ design: StoryDesign,
72
+ now: { narrativeHash: string, projectHash: string, registryHash: string },
73
+ ): DesignStaleness => {
74
+ if (design.version !== STORY_DESIGN_VERSION) {
75
+ return DesignStaleness.Version
76
+ }
77
+ if (design.provenance.narrativeHash !== now.narrativeHash) {
78
+ return DesignStaleness.Narrative
79
+ }
80
+ if (design.provenance.projectHash !== now.projectHash) {
81
+ return DesignStaleness.Project
82
+ }
83
+ if (design.provenance.registryHash !== now.registryHash) {
84
+ return DesignStaleness.Tree
85
+ }
86
+
87
+ return DesignStaleness.Fresh
88
+ }
89
+
90
+ const designHash = (...parts: Array<string | undefined>): string => {
91
+ const text = parts.filter(part => part != null).join(' ')
92
+ let hash = 0x811c9dc5
93
+ for (let at = 0; at < text.length; at += 1) {
94
+ hash ^= text.charCodeAt(at)
95
+ hash = Math.imul(hash, 0x01000193) >>> 0
96
+ }
97
+
98
+ return hash.toString(16).padStart(8, '0')
99
+ }
100
+
101
+ const emptyStoryDesign = (
102
+ input: Pick<StoryDesign, 'code' | 'narrative' | 'area'> & Partial<StoryDesign>,
103
+ ): StoryDesign => ({
104
+ version: STORY_DESIGN_VERSION,
105
+ reserved: {},
106
+ entities: [],
107
+ screens: [],
108
+ components: [],
109
+ types: [],
110
+ resources: [],
111
+ models: [],
112
+ api: [],
113
+ stores: [],
114
+ transitions: [],
115
+ access: { list: {}, resolvedAt: {} },
116
+ provenance: {
117
+ designedAt: new Date().toISOString(),
118
+ narrativeHash: '',
119
+ projectHash: '',
120
+ registryHash: '',
121
+ paths: [],
122
+ },
123
+ ...input,
124
+ })
125
+
126
+ const designDigest = (design: StoryDesign): string => {
127
+ const lines: string[] = [
128
+ `Story ${design.code} (${design.area}): ${design.narrative}`,
129
+ ]
130
+ if (design.reserved.section != null || design.reserved.screen != null) {
131
+ lines.push(`Reserved: section=${design.reserved.section ?? '-'} screen=${design.reserved.screen ?? '-'}`)
132
+ }
133
+ lines.push('', 'Screens:')
134
+ for (const screen of design.screens) {
135
+ lines.push(
136
+ `- ${screen.name} -> ${screen.path} (alias ${screen.alias}`
137
+ + `${screen.section != null ? `, section ${screen.section}` : ''}`
138
+ + `${screen.adopted ? ', existing' : ''}) renders ${screen.components.join(', ') || '-'}`,
139
+ )
140
+ }
141
+ lines.push('', 'Components:')
142
+ for (const component of design.components) {
143
+ lines.push(
144
+ `- ${component.name} -> ${component.path} (+ ${component.viewModelPath})`
145
+ + `${component.entities.length > 0 ? ` about ${component.entities.join(', ')}` : ''}`,
146
+ )
147
+ }
148
+ lines.push('', 'Data layer:')
149
+ for (const type of design.types) {
150
+ lines.push(`- type ${type.path} (${type.entity})`)
151
+ }
152
+ for (const resource of design.resources) {
153
+ lines.push(`- resource ${resource.path} (${resource.entity})`)
154
+ }
155
+ for (const model of design.models) {
156
+ lines.push(`- model ${model.path} (${model.entities.join(', ')})`)
157
+ }
158
+ for (const api of design.api) {
159
+ lines.push(
160
+ `- api ${api.path} (${api.entity})`
161
+ + `${api.endpoints.length > 0 ? `: ${api.endpoints.map(e => e.alias).join(', ')}` : ''}`,
162
+ )
163
+ }
164
+ for (const store of design.stores) {
165
+ lines.push(`- store ${store.path} (${store.entity})`)
166
+ }
167
+ if (design.transitions.length > 0) {
168
+ lines.push('', 'Transitions:')
169
+ for (const transition of design.transitions) {
170
+ lines.push(`- ${transition.from} -> ${transition.to} (${transition.action})`)
171
+ }
172
+ }
173
+ const guarded = Object.keys(design.access.list)
174
+ if (guarded.length > 0) {
175
+ lines.push('', `Access declared on: ${guarded.join(', ')}`)
176
+ }
177
+
178
+ return lines.join('\n')
179
+ }
180
+
181
+ const amendStoryDesign = (
182
+ design: StoryDesign, patch: Record<string, unknown>,
183
+ ): StoryDesign | string => {
184
+ const forbidden: string[] = []
185
+
186
+ const checkList = <T extends { path?: string, alias?: string, name?: string }>(
187
+ key: string, current: T[], next: unknown,
188
+ ): void => {
189
+ if (!Array.isArray(next)) return
190
+ for (const entry of next as T[]) {
191
+ const known = current.find(item => item.name === entry.name)
192
+ if (known == null) continue
193
+ if (entry.path != null && known.path != null && entry.path !== known.path) {
194
+ forbidden.push(`${key}.${String(entry.name)}.path`)
195
+ }
196
+ if (entry.alias != null && known.alias != null && entry.alias !== known.alias) {
197
+ forbidden.push(`${key}.${String(entry.name)}.alias`)
198
+ }
199
+ }
200
+ }
201
+
202
+ checkList('screens', design.screens, patch.screens)
203
+ checkList('components', design.components, patch.components)
204
+
205
+ if (forbidden.length > 0) {
206
+ return `Refused: ${forbidden.join(', ')} name artifacts the project's registry allocated. `
207
+ + 'A design may change what a screen or a component DOES - its UX, its UI, its section, its '
208
+ + 'endpoints - but never where it lives or what it is called. Rename through the registry, '
209
+ + 'or leave the name alone and change the behaviour.'
210
+ }
211
+
212
+ return { ...design, ...patch } as StoryDesign
213
+ }
214
+
215
+ return {
216
+ userStoryOfDesign, screenMapOf, designPaths, designStaleness, designHash, emptyStoryDesign, designDigest,
217
+ amendStoryDesign,
218
+ }
219
+ }
220
+
221
+ export const storyDesignHelper = createStoryDesignHelper()
@@ -1,4 +1,4 @@
1
1
  import type { AccessBlock } from './types.js'
2
2
 
3
3
  /** The part of an {@link AccessBlock} a model is asked for. */
4
- export type ModelAccessBlock = Omit<AccessBlock, 'defaults' | 'entityScoped'>
4
+ export interface ModelAccessBlock extends Omit<AccessBlock, 'defaults' | 'entityScoped'> {}
@@ -1,4 +1,8 @@
1
1
  export * from './consts.js'
2
+ export * from './layout/consts.js'
3
+ export * from './layout.js'
2
4
  export * from './utils.js'
3
5
  export * from './verify.js'
4
6
  export type * from './types.js'
7
+ export type * from './layout/types.js'
8
+ export type * from './verify/types.js'