@owlmeans/viable-common 0.0.44 → 0.0.46

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 (605) hide show
  1. package/README.md +4 -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 +59 -30
  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 +2 -0
  11. package/build/agent/presentation/types.js.map +1 -0
  12. package/build/agent/presentation.d.ts +10 -8
  13. package/build/agent/presentation.d.ts.map +1 -1
  14. package/build/agent/presentation.js +216 -195
  15. package/build/agent/presentation.js.map +1 -1
  16. package/build/agent/types.local.d.ts +3 -1
  17. package/build/agent/types.local.d.ts.map +1 -1
  18. package/build/areas/index.d.ts +1 -0
  19. package/build/areas/index.d.ts.map +1 -1
  20. package/build/areas/index.js.map +1 -1
  21. package/build/areas/tenancy/types.d.ts +23 -0
  22. package/build/areas/tenancy/types.d.ts.map +1 -0
  23. package/build/areas/tenancy/types.js +2 -0
  24. package/build/areas/tenancy/types.js.map +1 -0
  25. package/build/areas/tenancy.d.ts +5 -14
  26. package/build/areas/tenancy.d.ts.map +1 -1
  27. package/build/areas/tenancy.js +20 -26
  28. package/build/areas/tenancy.js.map +1 -1
  29. package/build/ba/connecting/types.d.ts +45 -0
  30. package/build/ba/connecting/types.d.ts.map +1 -0
  31. package/build/ba/connecting/types.js +2 -0
  32. package/build/ba/connecting/types.js.map +1 -0
  33. package/build/ba/connecting.d.ts +4 -0
  34. package/build/ba/connecting.d.ts.map +1 -0
  35. package/build/ba/connecting.js +47 -0
  36. package/build/ba/connecting.js.map +1 -0
  37. package/build/ba/helpers.d.ts +4 -39
  38. package/build/ba/helpers.d.ts.map +1 -1
  39. package/build/ba/helpers.js +5 -79
  40. package/build/ba/helpers.js.map +1 -1
  41. package/build/ba/index.d.ts +2 -0
  42. package/build/ba/index.d.ts.map +1 -1
  43. package/build/ba/index.js +1 -0
  44. package/build/ba/index.js.map +1 -1
  45. package/build/blueprint/types.d.ts +1 -2
  46. package/build/blueprint/types.d.ts.map +1 -1
  47. package/build/connect/branding/types.d.ts +28 -0
  48. package/build/connect/branding/types.d.ts.map +1 -0
  49. package/build/connect/branding/types.js +2 -0
  50. package/build/connect/branding/types.js.map +1 -0
  51. package/build/connect/consts.d.ts +2 -0
  52. package/build/connect/consts.d.ts.map +1 -1
  53. package/build/connect/consts.js +2 -0
  54. package/build/connect/consts.js.map +1 -1
  55. package/build/connect/conversion/types.d.ts +93 -0
  56. package/build/connect/conversion/types.d.ts.map +1 -0
  57. package/build/connect/conversion/types.js +2 -0
  58. package/build/connect/conversion/types.js.map +1 -0
  59. package/build/connect/entrypoints/types.d.ts +30 -0
  60. package/build/connect/entrypoints/types.d.ts.map +1 -0
  61. package/build/connect/entrypoints/types.js +2 -0
  62. package/build/connect/entrypoints/types.js.map +1 -0
  63. package/build/connect/entrypoints.d.ts +17 -11
  64. package/build/connect/entrypoints.d.ts.map +1 -1
  65. package/build/connect/entrypoints.js.map +1 -1
  66. package/build/connect/errors/types.d.ts +20 -0
  67. package/build/connect/errors/types.d.ts.map +1 -0
  68. package/build/connect/errors/types.js +2 -0
  69. package/build/connect/errors/types.js.map +1 -0
  70. package/build/connect/errors.d.ts +1 -1
  71. package/build/connect/errors.d.ts.map +1 -1
  72. package/build/connect/index.d.ts +13 -3
  73. package/build/connect/index.d.ts.map +1 -1
  74. package/build/connect/index.js +1 -1
  75. package/build/connect/index.js.map +1 -1
  76. package/build/connect/kit/types.d.ts +52 -0
  77. package/build/connect/kit/types.d.ts.map +1 -0
  78. package/build/connect/kit/types.js +2 -0
  79. package/build/connect/kit/types.js.map +1 -0
  80. package/build/connect/model-tier/types.d.ts +16 -0
  81. package/build/connect/model-tier/types.d.ts.map +1 -0
  82. package/build/connect/model-tier/types.js +2 -0
  83. package/build/connect/model-tier/types.js.map +1 -0
  84. package/build/connect/model-tier.d.ts +4 -0
  85. package/build/connect/model-tier.d.ts.map +1 -0
  86. package/build/connect/model-tier.js +21 -0
  87. package/build/connect/model-tier.js.map +1 -0
  88. package/build/connect/ops/types.d.ts +198 -0
  89. package/build/connect/ops/types.d.ts.map +1 -0
  90. package/build/connect/ops/types.js +2 -0
  91. package/build/connect/ops/types.js.map +1 -0
  92. package/build/connect/pipeline/types.d.ts +39 -0
  93. package/build/connect/pipeline/types.d.ts.map +1 -0
  94. package/build/connect/pipeline/types.js +2 -0
  95. package/build/connect/pipeline/types.js.map +1 -0
  96. package/build/connect/project/types.d.ts +127 -0
  97. package/build/connect/project/types.d.ts.map +1 -0
  98. package/build/connect/project/types.js +2 -0
  99. package/build/connect/project/types.js.map +1 -0
  100. package/build/connect/references/types.d.ts +157 -0
  101. package/build/connect/references/types.d.ts.map +1 -0
  102. package/build/connect/references/types.js +2 -0
  103. package/build/connect/references/types.js.map +1 -0
  104. package/build/connect/references/types.local.d.ts +5 -0
  105. package/build/connect/references/types.local.d.ts.map +1 -0
  106. package/build/connect/references/types.local.js.map +1 -0
  107. package/build/connect/references.d.ts +1 -1
  108. package/build/connect/references.d.ts.map +1 -1
  109. package/build/connect/references.js.map +1 -1
  110. package/build/connect/schemas.d.ts +8 -5
  111. package/build/connect/schemas.d.ts.map +1 -1
  112. package/build/connect/schemas.js +1 -3
  113. package/build/connect/schemas.js.map +1 -1
  114. package/build/connect/session/types.d.ts +73 -0
  115. package/build/connect/session/types.d.ts.map +1 -0
  116. package/build/connect/session/types.js +2 -0
  117. package/build/connect/session/types.js.map +1 -0
  118. package/build/connect/settings/types.d.ts +48 -0
  119. package/build/connect/settings/types.d.ts.map +1 -0
  120. package/build/connect/settings/types.js +2 -0
  121. package/build/connect/settings/types.js.map +1 -0
  122. package/build/connect/types.d.ts +1 -198
  123. package/build/connect/types.d.ts.map +1 -1
  124. package/build/convert/analysis/types.d.ts +93 -0
  125. package/build/convert/analysis/types.d.ts.map +1 -0
  126. package/build/convert/analysis/types.js +2 -0
  127. package/build/convert/analysis/types.js.map +1 -0
  128. package/build/convert/{consts.local.d.ts → census/consts.local.d.ts} +1 -1
  129. package/build/convert/census/consts.local.d.ts.map +1 -0
  130. package/build/convert/{consts.local.js → census/consts.local.js} +1 -1
  131. package/build/convert/census/consts.local.js.map +1 -0
  132. package/build/convert/census/types.d.ts +176 -0
  133. package/build/convert/census/types.d.ts.map +1 -0
  134. package/build/convert/census/types.js +2 -0
  135. package/build/convert/census/types.js.map +1 -0
  136. package/build/convert/census.d.ts +4 -0
  137. package/build/convert/census.d.ts.map +1 -0
  138. package/build/convert/census.js +83 -0
  139. package/build/convert/census.js.map +1 -0
  140. package/build/convert/consts.d.ts +4 -0
  141. package/build/convert/consts.d.ts.map +1 -1
  142. package/build/convert/consts.js +4 -0
  143. package/build/convert/consts.js.map +1 -1
  144. package/build/convert/detection/types.d.ts +67 -0
  145. package/build/convert/detection/types.d.ts.map +1 -0
  146. package/build/convert/detection/types.js +2 -0
  147. package/build/convert/detection/types.js.map +1 -0
  148. package/build/convert/docs/types.d.ts +129 -0
  149. package/build/convert/docs/types.d.ts.map +1 -0
  150. package/build/convert/docs/types.js +2 -0
  151. package/build/convert/docs/types.js.map +1 -0
  152. package/build/convert/docs.d.ts +4 -0
  153. package/build/convert/docs.d.ts.map +1 -0
  154. package/build/convert/docs.js +9 -0
  155. package/build/convert/docs.js.map +1 -0
  156. package/build/convert/estimate/types.d.ts +77 -0
  157. package/build/convert/estimate/types.d.ts.map +1 -0
  158. package/build/convert/estimate/types.js +2 -0
  159. package/build/convert/estimate/types.js.map +1 -0
  160. package/build/convert/estimate.d.ts +11 -0
  161. package/build/convert/estimate.d.ts.map +1 -0
  162. package/build/convert/estimate.js +18 -0
  163. package/build/convert/estimate.js.map +1 -0
  164. package/build/convert/helpers.d.ts +14 -78
  165. package/build/convert/helpers.d.ts.map +1 -1
  166. package/build/convert/helpers.js +27 -199
  167. package/build/convert/helpers.js.map +1 -1
  168. package/build/convert/index.d.ts +14 -0
  169. package/build/convert/index.d.ts.map +1 -1
  170. package/build/convert/index.js +5 -0
  171. package/build/convert/index.js.map +1 -1
  172. package/build/convert/origin/types.d.ts +41 -0
  173. package/build/convert/origin/types.d.ts.map +1 -0
  174. package/build/convert/origin/types.js +2 -0
  175. package/build/convert/origin/types.js.map +1 -0
  176. package/build/convert/origin.d.ts +4 -0
  177. package/build/convert/origin.d.ts.map +1 -0
  178. package/build/convert/origin.js +25 -0
  179. package/build/convert/origin.js.map +1 -0
  180. package/build/convert/record/types.d.ts +98 -0
  181. package/build/convert/record/types.d.ts.map +1 -0
  182. package/build/convert/record/types.js +2 -0
  183. package/build/convert/record/types.js.map +1 -0
  184. package/build/convert/schemas.d.ts +7 -6
  185. package/build/convert/schemas.d.ts.map +1 -1
  186. package/build/convert/schemas.js +1 -5
  187. package/build/convert/schemas.js.map +1 -1
  188. package/build/convert/stage/types.d.ts +27 -0
  189. package/build/convert/stage/types.d.ts.map +1 -0
  190. package/build/convert/stage/types.js +2 -0
  191. package/build/convert/stage/types.js.map +1 -0
  192. package/build/convert/stage.d.ts +4 -0
  193. package/build/convert/stage.d.ts.map +1 -0
  194. package/build/convert/stage.js +25 -0
  195. package/build/convert/stage.js.map +1 -0
  196. package/build/convert/taxonomy/types.d.ts +71 -0
  197. package/build/convert/taxonomy/types.d.ts.map +1 -0
  198. package/build/convert/taxonomy/types.js +2 -0
  199. package/build/convert/taxonomy/types.js.map +1 -0
  200. package/build/convert/types.d.ts +1 -657
  201. package/build/convert/types.d.ts.map +1 -1
  202. package/build/convert/utils.d.ts +2 -1
  203. package/build/convert/utils.d.ts.map +1 -1
  204. package/build/convert/utils.js +5 -4
  205. package/build/convert/utils.js.map +1 -1
  206. package/build/design/helpers.d.ts +9 -49
  207. package/build/design/helpers.d.ts.map +1 -1
  208. package/build/design/helpers.js +17 -224
  209. package/build/design/helpers.js.map +1 -1
  210. package/build/design/index.d.ts +3 -0
  211. package/build/design/index.d.ts.map +1 -1
  212. package/build/design/index.js +1 -0
  213. package/build/design/index.js.map +1 -1
  214. package/build/design/runtime/types.d.ts +16 -0
  215. package/build/design/runtime/types.d.ts.map +1 -0
  216. package/build/design/runtime/types.js +2 -0
  217. package/build/design/runtime/types.js.map +1 -0
  218. package/build/design/runtime.d.ts +6 -2
  219. package/build/design/runtime.d.ts.map +1 -1
  220. package/build/design/runtime.js +13 -5
  221. package/build/design/runtime.js.map +1 -1
  222. package/build/design/story/types.d.ts +67 -0
  223. package/build/design/story/types.d.ts.map +1 -0
  224. package/build/design/story/types.js +2 -0
  225. package/build/design/story/types.js.map +1 -0
  226. package/build/design/story.d.ts +4 -0
  227. package/build/design/story.d.ts.map +1 -0
  228. package/build/design/story.js +184 -0
  229. package/build/design/story.js.map +1 -0
  230. package/build/dev/types.local.d.ts +2 -1
  231. package/build/dev/types.local.d.ts.map +1 -1
  232. package/build/index.d.ts +1 -0
  233. package/build/index.d.ts.map +1 -1
  234. package/build/index.js +1 -0
  235. package/build/index.js.map +1 -1
  236. package/build/integrity/index.d.ts +4 -0
  237. package/build/integrity/index.d.ts.map +1 -1
  238. package/build/integrity/index.js +2 -0
  239. package/build/integrity/index.js.map +1 -1
  240. package/build/integrity/layout/consts.d.ts +59 -0
  241. package/build/integrity/layout/consts.d.ts.map +1 -0
  242. package/build/integrity/layout/consts.js +66 -0
  243. package/build/integrity/layout/consts.js.map +1 -0
  244. package/build/integrity/layout/consts.local.d.ts +18 -0
  245. package/build/integrity/layout/consts.local.d.ts.map +1 -0
  246. package/build/integrity/layout/consts.local.js +176 -0
  247. package/build/integrity/layout/consts.local.js.map +1 -0
  248. package/build/integrity/layout/types.d.ts +35 -0
  249. package/build/integrity/layout/types.d.ts.map +1 -0
  250. package/build/integrity/layout/types.js +2 -0
  251. package/build/integrity/layout/types.js.map +1 -0
  252. package/build/integrity/layout.d.ts +4 -0
  253. package/build/integrity/layout.d.ts.map +1 -0
  254. package/build/integrity/layout.js +25 -0
  255. package/build/integrity/layout.js.map +1 -0
  256. package/build/integrity/types.d.ts +3 -1
  257. package/build/integrity/types.d.ts.map +1 -1
  258. package/build/integrity/utils.d.ts +6 -81
  259. package/build/integrity/utils.d.ts.map +1 -1
  260. package/build/integrity/utils.js +11 -279
  261. package/build/integrity/utils.js.map +1 -1
  262. package/build/integrity/verify/types.d.ts +26 -0
  263. package/build/integrity/verify/types.d.ts.map +1 -0
  264. package/build/integrity/verify/types.js +2 -0
  265. package/build/integrity/verify/types.js.map +1 -0
  266. package/build/integrity/verify.d.ts +5 -19
  267. package/build/integrity/verify.d.ts.map +1 -1
  268. package/build/integrity/verify.js +164 -175
  269. package/build/integrity/verify.js.map +1 -1
  270. package/build/intent/consts.d.ts +16 -0
  271. package/build/intent/consts.d.ts.map +1 -1
  272. package/build/intent/consts.js +63 -0
  273. package/build/intent/consts.js.map +1 -1
  274. package/build/intent/entrypoints.d.ts +2 -11
  275. package/build/intent/entrypoints.d.ts.map +1 -1
  276. package/build/intent/entrypoints.js.map +1 -1
  277. package/build/intent/flow.d.ts.map +1 -1
  278. package/build/intent/flow.js +2 -2
  279. package/build/intent/flow.js.map +1 -1
  280. package/build/intent/index.d.ts +0 -1
  281. package/build/intent/index.d.ts.map +1 -1
  282. package/build/intent/index.js +0 -1
  283. package/build/intent/index.js.map +1 -1
  284. package/build/intent/types.d.ts +13 -2
  285. package/build/intent/types.d.ts.map +1 -1
  286. package/build/legal/consts.d.ts +36 -0
  287. package/build/legal/consts.d.ts.map +1 -0
  288. package/build/legal/consts.js +16 -0
  289. package/build/legal/consts.js.map +1 -0
  290. package/build/legal/index.d.ts +3 -0
  291. package/build/legal/index.d.ts.map +1 -0
  292. package/build/legal/index.js +2 -0
  293. package/build/legal/index.js.map +1 -0
  294. package/build/legal/types.d.ts +10 -0
  295. package/build/legal/types.d.ts.map +1 -0
  296. package/build/legal/types.js +2 -0
  297. package/build/legal/types.js.map +1 -0
  298. package/build/moderation/index.d.ts +2 -0
  299. package/build/moderation/index.d.ts.map +1 -1
  300. package/build/moderation/index.js +1 -0
  301. package/build/moderation/index.js.map +1 -1
  302. package/build/moderation/utils.d.ts +3 -15
  303. package/build/moderation/utils.d.ts.map +1 -1
  304. package/build/moderation/utils.js +5 -30
  305. package/build/moderation/utils.js.map +1 -1
  306. package/build/moderation/verdict/types.d.ts +24 -0
  307. package/build/moderation/verdict/types.d.ts.map +1 -0
  308. package/build/moderation/verdict/types.js +2 -0
  309. package/build/moderation/verdict/types.js.map +1 -0
  310. package/build/moderation/verdict.d.ts +4 -0
  311. package/build/moderation/verdict.d.ts.map +1 -0
  312. package/build/moderation/verdict.js +21 -0
  313. package/build/moderation/verdict.js.map +1 -0
  314. package/build/planning/card/types.d.ts +42 -0
  315. package/build/planning/card/types.d.ts.map +1 -0
  316. package/build/planning/card/types.js +2 -0
  317. package/build/planning/card/types.js.map +1 -0
  318. package/build/planning/card.d.ts +4 -0
  319. package/build/planning/card.d.ts.map +1 -0
  320. package/build/planning/card.js +51 -0
  321. package/build/planning/card.js.map +1 -0
  322. package/build/planning/flows.d.ts +34 -0
  323. package/build/planning/flows.d.ts.map +1 -0
  324. package/build/planning/flows.js +174 -0
  325. package/build/planning/flows.js.map +1 -0
  326. package/build/planning/helpers.d.ts +11 -37
  327. package/build/planning/helpers.d.ts.map +1 -1
  328. package/build/planning/helpers.js +24 -103
  329. package/build/planning/helpers.js.map +1 -1
  330. package/build/planning/index.d.ts +5 -0
  331. package/build/planning/index.d.ts.map +1 -1
  332. package/build/planning/index.js +2 -0
  333. package/build/planning/index.js.map +1 -1
  334. package/build/planning/landing/types.d.ts +16 -0
  335. package/build/planning/landing/types.d.ts.map +1 -0
  336. package/build/planning/landing/types.js +2 -0
  337. package/build/planning/landing/types.js.map +1 -0
  338. package/build/planning/landing.d.ts +5 -10
  339. package/build/planning/landing.d.ts.map +1 -1
  340. package/build/planning/landing.js +20 -22
  341. package/build/planning/landing.js.map +1 -1
  342. package/build/planning/schemas.d.ts +1 -5
  343. package/build/planning/schemas.d.ts.map +1 -1
  344. package/build/planning/schemas.js +3 -3
  345. package/build/planning/schemas.js.map +1 -1
  346. package/build/planning/spec/types.d.ts +22 -0
  347. package/build/planning/spec/types.d.ts.map +1 -0
  348. package/build/planning/spec/types.js +2 -0
  349. package/build/planning/spec/types.js.map +1 -0
  350. package/build/planning/spec.d.ts +4 -0
  351. package/build/planning/spec.d.ts.map +1 -0
  352. package/build/planning/spec.js +30 -0
  353. package/build/planning/spec.js.map +1 -0
  354. package/build/planning/types.d.ts +4 -3
  355. package/build/planning/types.d.ts.map +1 -1
  356. package/build/scaffold/consts.d.ts +40 -1
  357. package/build/scaffold/consts.d.ts.map +1 -1
  358. package/build/scaffold/consts.js +52 -0
  359. package/build/scaffold/consts.js.map +1 -1
  360. package/build/scaffold/helpers.d.ts +4 -16
  361. package/build/scaffold/helpers.d.ts.map +1 -1
  362. package/build/scaffold/helpers.js +9 -64
  363. package/build/scaffold/helpers.js.map +1 -1
  364. package/build/scaffold/index.d.ts +4 -0
  365. package/build/scaffold/index.d.ts.map +1 -1
  366. package/build/scaffold/index.js +2 -0
  367. package/build/scaffold/index.js.map +1 -1
  368. package/build/scaffold/landing/types.d.ts +48 -0
  369. package/build/scaffold/landing/types.d.ts.map +1 -0
  370. package/build/scaffold/landing/types.js +2 -0
  371. package/build/scaffold/landing/types.js.map +1 -0
  372. package/build/scaffold/landing.d.ts +4 -0
  373. package/build/scaffold/landing.d.ts.map +1 -0
  374. package/build/scaffold/landing.js +95 -0
  375. package/build/scaffold/landing.js.map +1 -0
  376. package/build/scaffold/schemas.d.ts +3 -2
  377. package/build/scaffold/schemas.d.ts.map +1 -1
  378. package/build/scaffold/schemas.js +177 -7
  379. package/build/scaffold/schemas.js.map +1 -1
  380. package/build/scaffold/share/types.d.ts +35 -0
  381. package/build/scaffold/share/types.d.ts.map +1 -0
  382. package/build/scaffold/share/types.js +2 -0
  383. package/build/scaffold/share/types.js.map +1 -0
  384. package/build/scaffold/share.d.ts +4 -0
  385. package/build/scaffold/share.d.ts.map +1 -0
  386. package/build/scaffold/share.js +42 -0
  387. package/build/scaffold/share.js.map +1 -0
  388. package/build/scaffold/types.d.ts +112 -2
  389. package/build/scaffold/types.d.ts.map +1 -1
  390. package/build/skills/consts.d.ts +42 -0
  391. package/build/skills/consts.d.ts.map +1 -1
  392. package/build/skills/consts.js +43 -0
  393. package/build/skills/consts.js.map +1 -1
  394. package/build/skills/index.d.ts +0 -1
  395. package/build/skills/index.d.ts.map +1 -1
  396. package/build/skills/index.js +0 -1
  397. package/build/skills/index.js.map +1 -1
  398. package/build/slot/command/types.d.ts +21 -0
  399. package/build/slot/command/types.d.ts.map +1 -0
  400. package/build/slot/command/types.js +2 -0
  401. package/build/slot/command/types.js.map +1 -0
  402. package/build/slot/command.d.ts +4 -0
  403. package/build/slot/command.d.ts.map +1 -0
  404. package/build/slot/command.js +31 -0
  405. package/build/slot/command.js.map +1 -0
  406. package/build/slot/helpers.d.ts +2 -16
  407. package/build/slot/helpers.d.ts.map +1 -1
  408. package/build/slot/helpers.js +5 -26
  409. package/build/slot/helpers.js.map +1 -1
  410. package/build/slot/index.d.ts +5 -0
  411. package/build/slot/index.d.ts.map +1 -1
  412. package/build/slot/index.js +2 -0
  413. package/build/slot/index.js.map +1 -1
  414. package/build/slot/layout/types.d.ts +17 -0
  415. package/build/slot/layout/types.d.ts.map +1 -0
  416. package/build/slot/layout/types.js +2 -0
  417. package/build/slot/layout/types.js.map +1 -0
  418. package/build/slot/layout.d.ts +4 -9
  419. package/build/slot/layout.d.ts.map +1 -1
  420. package/build/slot/layout.js +13 -15
  421. package/build/slot/layout.js.map +1 -1
  422. package/build/slot/origin/types.d.ts +23 -0
  423. package/build/slot/origin/types.d.ts.map +1 -0
  424. package/build/slot/origin/types.js +2 -0
  425. package/build/slot/origin/types.js.map +1 -0
  426. package/build/slot/origin.d.ts +4 -0
  427. package/build/slot/origin.d.ts.map +1 -0
  428. package/build/slot/origin.js +15 -0
  429. package/build/slot/origin.js.map +1 -0
  430. package/build/slot/types.d.ts.map +1 -1
  431. package/build/slot/utils.d.ts +3 -15
  432. package/build/slot/utils.d.ts.map +1 -1
  433. package/build/slot/utils.js +5 -40
  434. package/build/slot/utils.js.map +1 -1
  435. package/build/topology/card/types.d.ts +21 -0
  436. package/build/topology/card/types.d.ts.map +1 -0
  437. package/build/topology/card/types.js +2 -0
  438. package/build/topology/card/types.js.map +1 -0
  439. package/build/topology/card.d.ts +6 -13
  440. package/build/topology/card.d.ts.map +1 -1
  441. package/build/topology/card.js +83 -86
  442. package/build/topology/card.js.map +1 -1
  443. package/build/topology/helpers.d.ts +7 -33
  444. package/build/topology/helpers.d.ts.map +1 -1
  445. package/build/topology/helpers.js +15 -111
  446. package/build/topology/helpers.js.map +1 -1
  447. package/build/topology/index.d.ts +3 -0
  448. package/build/topology/index.d.ts.map +1 -1
  449. package/build/topology/index.js +1 -0
  450. package/build/topology/index.js.map +1 -1
  451. package/build/topology/resolve/types.d.ts +47 -0
  452. package/build/topology/resolve/types.d.ts.map +1 -0
  453. package/build/topology/resolve/types.js +2 -0
  454. package/build/topology/resolve/types.js.map +1 -0
  455. package/build/topology/resolve.d.ts +4 -0
  456. package/build/topology/resolve.d.ts.map +1 -0
  457. package/build/topology/resolve.js +89 -0
  458. package/build/topology/resolve.js.map +1 -0
  459. package/package.json +18 -11
  460. package/src/agent/index.ts +1 -0
  461. package/src/agent/presentation/types.ts +21 -0
  462. package/src/agent/presentation.ts +199 -165
  463. package/src/agent/types.local.ts +3 -1
  464. package/src/areas/index.ts +1 -0
  465. package/src/areas/tenancy/types.ts +23 -0
  466. package/src/areas/tenancy.ts +26 -25
  467. package/src/ba/connecting/types.ts +45 -0
  468. package/src/ba/connecting.ts +64 -0
  469. package/src/ba/helpers.ts +8 -92
  470. package/src/ba/index.ts +2 -0
  471. package/src/blueprint/types.ts +2 -2
  472. package/src/connect/branding/types.ts +29 -0
  473. package/src/connect/consts.ts +3 -0
  474. package/src/connect/conversion/types.ts +96 -0
  475. package/src/connect/entrypoints/types.ts +25 -0
  476. package/src/connect/entrypoints.ts +13 -2
  477. package/src/connect/errors/types.ts +22 -0
  478. package/src/connect/errors.ts +1 -1
  479. package/src/connect/index.ts +13 -3
  480. package/src/connect/kit/types.ts +56 -0
  481. package/src/connect/model-tier/types.ts +16 -0
  482. package/src/connect/model-tier.ts +22 -0
  483. package/src/connect/{ops.ts → ops/types.ts} +13 -3
  484. package/src/connect/pipeline/types.ts +41 -0
  485. package/src/connect/project/types.ts +127 -0
  486. package/src/connect/references/types.local.ts +5 -0
  487. package/src/connect/references/types.ts +73 -0
  488. package/src/connect/references.ts +13 -2
  489. package/src/connect/schemas.ts +9 -13
  490. package/src/connect/session/types.ts +81 -0
  491. package/src/connect/settings/types.ts +52 -0
  492. package/src/convert/analysis/types.ts +89 -0
  493. package/src/convert/{consts.local.ts → census/consts.local.ts} +1 -1
  494. package/src/convert/census/types.ts +181 -0
  495. package/src/convert/census.ts +95 -0
  496. package/src/convert/consts.ts +5 -0
  497. package/src/convert/detection/types.ts +74 -0
  498. package/src/convert/docs/types.ts +151 -0
  499. package/src/convert/docs.ts +15 -0
  500. package/src/convert/estimate/types.ts +75 -0
  501. package/src/convert/estimate.ts +19 -0
  502. package/src/convert/helpers.ts +29 -210
  503. package/src/convert/index.ts +14 -0
  504. package/src/convert/origin/types.ts +43 -0
  505. package/src/convert/origin.ts +33 -0
  506. package/src/convert/record/types.ts +105 -0
  507. package/src/convert/schemas.ts +13 -12
  508. package/src/convert/stage/types.ts +27 -0
  509. package/src/convert/stage.ts +31 -0
  510. package/src/convert/taxonomy/types.ts +74 -0
  511. package/src/convert/types.ts +5 -709
  512. package/src/convert/utils.ts +5 -6
  513. package/src/design/helpers.ts +20 -245
  514. package/src/design/index.ts +3 -0
  515. package/src/design/runtime/types.ts +14 -0
  516. package/src/design/runtime.ts +22 -7
  517. package/src/design/story/types.ts +67 -0
  518. package/src/design/story.ts +221 -0
  519. package/src/dev/types.local.ts +1 -1
  520. package/src/index.ts +1 -0
  521. package/src/integrity/index.ts +4 -0
  522. package/src/integrity/layout/consts.local.ts +188 -0
  523. package/src/integrity/layout/consts.ts +79 -0
  524. package/src/integrity/layout/types.ts +35 -0
  525. package/src/integrity/layout.ts +39 -0
  526. package/src/integrity/types.ts +3 -1
  527. package/src/integrity/utils.ts +14 -313
  528. package/src/integrity/verify/types.ts +26 -0
  529. package/src/integrity/verify.ts +177 -181
  530. package/src/intent/consts.ts +67 -0
  531. package/src/intent/entrypoints.ts +2 -2
  532. package/src/intent/index.ts +0 -1
  533. package/src/intent/types.ts +9 -2
  534. package/src/legal/consts.ts +17 -0
  535. package/src/legal/index.ts +2 -0
  536. package/src/legal/types.ts +11 -0
  537. package/src/moderation/index.ts +2 -0
  538. package/src/moderation/utils.ts +7 -30
  539. package/src/moderation/verdict/types.ts +22 -0
  540. package/src/moderation/verdict.ts +28 -0
  541. package/src/planning/card/types.ts +44 -0
  542. package/src/planning/card.ts +77 -0
  543. package/src/planning/helpers.ts +28 -116
  544. package/src/planning/index.ts +5 -0
  545. package/src/planning/landing/types.ts +15 -0
  546. package/src/planning/landing.ts +27 -24
  547. package/src/planning/schemas.ts +3 -3
  548. package/src/planning/spec/types.ts +22 -0
  549. package/src/planning/spec.ts +41 -0
  550. package/src/planning/types.ts +4 -4
  551. package/src/scaffold/consts.ts +65 -1
  552. package/src/scaffold/helpers.ts +14 -77
  553. package/src/scaffold/index.ts +4 -0
  554. package/src/scaffold/landing/types.ts +48 -0
  555. package/src/scaffold/landing.ts +120 -0
  556. package/src/scaffold/schemas.ts +183 -7
  557. package/src/scaffold/share/types.ts +35 -0
  558. package/src/scaffold/share.ts +60 -0
  559. package/src/scaffold/types.ts +120 -1
  560. package/src/skills/consts.ts +46 -0
  561. package/src/skills/index.ts +0 -1
  562. package/src/slot/command/types.ts +21 -0
  563. package/src/slot/command.ts +38 -0
  564. package/src/slot/helpers.ts +5 -25
  565. package/src/slot/index.ts +5 -0
  566. package/src/slot/layout/types.ts +17 -0
  567. package/src/slot/layout.ts +19 -16
  568. package/src/slot/origin/types.ts +23 -0
  569. package/src/slot/origin.ts +20 -0
  570. package/src/slot/types.ts +1 -0
  571. package/src/slot/utils.ts +8 -43
  572. package/src/topology/card/types.ts +21 -0
  573. package/src/topology/card.ts +84 -82
  574. package/src/topology/helpers.ts +20 -125
  575. package/src/topology/index.ts +3 -0
  576. package/src/topology/resolve/types.ts +47 -0
  577. package/src/topology/resolve.ts +118 -0
  578. package/tests/blueprint.spec.ts +1 -2
  579. package/tests/connect-errors.spec.ts +1 -1
  580. package/tests/convert.spec.ts +50 -50
  581. package/tests/design.spec.ts +13 -16
  582. package/tests/planning.spec.ts +57 -59
  583. package/tests/presentation.spec.ts +20 -20
  584. package/tests/scaffold.spec.ts +286 -6
  585. package/tests/tenancy.spec.ts +21 -21
  586. package/build/connect/types.local.d.ts +0 -4
  587. package/build/connect/types.local.d.ts.map +0 -1
  588. package/build/connect/types.local.js.map +0 -1
  589. package/build/connect/utils.d.ts +0 -12
  590. package/build/connect/utils.d.ts.map +0 -1
  591. package/build/connect/utils.js +0 -25
  592. package/build/connect/utils.js.map +0 -1
  593. package/build/convert/consts.local.d.ts.map +0 -1
  594. package/build/convert/consts.local.js.map +0 -1
  595. package/build/intent/consts.local.d.ts +0 -4
  596. package/build/intent/consts.local.d.ts.map +0 -1
  597. package/build/intent/consts.local.js +0 -3
  598. package/build/intent/consts.local.js.map +0 -1
  599. package/src/connect/types.local.ts +0 -5
  600. package/src/connect/types.ts +0 -589
  601. package/src/connect/utils.ts +0 -23
  602. package/src/intent/consts.local.ts +0 -3
  603. package/src/intent/flow.ts +0 -66
  604. package/src/skills/roles.ts +0 -46
  605. /package/build/connect/{types.local.js → references/types.local.js} +0 -0
@@ -1,81 +1,18 @@
1
- import type { ScaffoldPlan, ScaffoldStoryPlan, ShareKind } from './types.js'
1
+ import { scaffoldShareHelper } from './share.js'
2
+ import type { ScaffoldPlan, ShareKind } from './types.js'
2
3
 
3
- /**
4
- * ONE reading of who owns a drawn artifact, so no consumer has to interpret the plan itself.
5
- *
6
- * The plan carries `sharesWidgetWith` / `sharesScreenWith` as untrusted hints — a model may drop
7
- * them, invent a code, point forwards, or build a cycle. These resolve all of that away, and
8
- * every one is TOTAL: a code the plan does not hold answers itself, which is the unshared
9
- * behaviour and therefore exactly today's drawn tree.
10
- *
11
- * Pure and IO-free. `fillScaffoldPlan` normalises a plan through them before anything is stamped,
12
- * so the stampers and the scaffold loop can read a plan that is already sane.
13
- */
4
+ /** @deprecated compat:factory-refactor — use `scaffoldShareHelper.shareOwner(…)` */
5
+ export const shareOwner = (plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind: ShareKind = 'widget'): string =>
6
+ scaffoldShareHelper.shareOwner(plan, code, kind)
14
7
 
15
- const pointerOf = (story: ScaffoldStoryPlan, kind: ShareKind): string | undefined =>
16
- kind === 'widget' ? story.sharesWidgetWith : story.sharesScreenWith
8
+ /** @deprecated compat:factory-refactor — use `scaffoldShareHelper.shareGroups(…)` */
9
+ export const shareGroups = (plan: Pick<ScaffoldPlan, 'stories'>, kind: ShareKind = 'widget'): Map<string, string[]> =>
10
+ scaffoldShareHelper.shareGroups(plan, kind)
17
11
 
18
- /**
19
- * The code whose artifact this story renders — itself when it owns one.
20
- *
21
- * Backward-only and bounded: an arrow is followed only to a story EARLIER in plan order, which
22
- * makes a cycle unrepresentable rather than merely unlikely, and makes the owner the earliest
23
- * member of its group. That is what keeps `widgetDefinition(owner)` stable — the name is a
24
- * function of one code, never of the group, so adding a member renames nothing.
25
- */
26
- export const shareOwner = (
27
- plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind: ShareKind = 'widget'
28
- ): string => {
29
- const order = new Map(plan.stories.map((story, index) => [story.code, index]))
30
- const byCode = new Map(plan.stories.map(story => [story.code, story]))
12
+ /** @deprecated compat:factory-refactor — use `scaffoldShareHelper.shareMembers(…)` */
13
+ export const shareMembers = (plan: Pick<ScaffoldPlan, 'stories'>, owner: string, kind: ShareKind = 'widget'): string[] =>
14
+ scaffoldShareHelper.shareMembers(plan, owner, kind)
31
15
 
32
- let current = code
33
- // Bounded by the list length: every hop strictly decreases the plan index, so it terminates.
34
- for (let hop = 0; hop <= plan.stories.length; hop++) {
35
- const story = byCode.get(current)
36
- const target = story != null ? pointerOf(story, kind) : undefined
37
- if (story == null || target == null || target === '' || target === current) {
38
- return current
39
- }
40
- const here = order.get(current)
41
- const there = order.get(target)
42
- // Unknown, forward or self-referential — none of them is a group, so the story owns its own.
43
- if (here == null || there == null || there >= here) {
44
- return current
45
- }
46
- current = target
47
- }
48
-
49
- return current
50
- }
51
-
52
- /**
53
- * Owner code → every member, owner first, in plan order.
54
- *
55
- * The shape the stampers need: one artifact per entry, and the full member list for the notice
56
- * that names them.
57
- */
58
- export const shareGroups = (
59
- plan: Pick<ScaffoldPlan, 'stories'>, kind: ShareKind = 'widget'
60
- ): Map<string, string[]> => {
61
- const groups = new Map<string, string[]>()
62
- for (const story of plan.stories) {
63
- const owner = shareOwner(plan, story.code, kind)
64
- const members = groups.get(owner) ?? []
65
- if (!members.includes(owner)) members.push(owner)
66
- if (!members.includes(story.code)) members.push(story.code)
67
- groups.set(owner, members)
68
- }
69
-
70
- return groups
71
- }
72
-
73
- /** Every story that renders this owner's artifact, owner first. Total: an owner alone answers `[code]`. */
74
- export const shareMembers = (
75
- plan: Pick<ScaffoldPlan, 'stories'>, owner: string, kind: ShareKind = 'widget'
76
- ): string[] => shareGroups(plan, kind).get(owner) ?? [owner]
77
-
78
- /** Whether this story draws the artifact, as opposed to rendering somebody else's. */
79
- export const ownsShare = (
80
- plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind: ShareKind = 'widget'
81
- ): boolean => shareOwner(plan, code, kind) === code
16
+ /** @deprecated compat:factory-refactor — use `scaffoldShareHelper.ownsShare(…)` */
17
+ export const ownsShare = (plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind: ShareKind = 'widget'): boolean =>
18
+ scaffoldShareHelper.ownsShare(plan, code, kind)
@@ -1,4 +1,8 @@
1
1
  export * from './consts.js'
2
2
  export * from './schemas.js'
3
3
  export type * from './types.js'
4
+ export type * from './share/types.js'
5
+ export type * from './landing/types.js'
6
+ export * from './share.js'
7
+ export * from './landing.js'
4
8
  export * from './helpers.js'
@@ -0,0 +1,48 @@
1
+ import type { GuestHomePlan, LandingBand, LandingMenuEntry, LandingSlot } from '../types.js'
2
+
3
+ /**
4
+ * ONE reading of what a landing page draws, so the stamper, the menu and the link planner agree.
5
+ *
6
+ * Pure, IO-free and total over a stored plan of any age: every optional band may be absent or
7
+ * `null`, and blank model text counts as absent.
8
+ */
9
+ export interface LandingPlanHelper {
10
+ /**
11
+ * The bands a landing page draws, in the house order `LANDING_BAND_ORDER`.
12
+ *
13
+ * One presence rule per band:
14
+ *
15
+ * - `hero`, `features`, `problem` (problem and solution) — always;
16
+ * - `steps` — at least one step with a title;
17
+ * - `use-cases` — at least `LANDING_USE_CASES.min` titled cases;
18
+ * - `differentiator` — at least `LANDING_CONTRAST.min` contrast rows filled on both sides,
19
+ * OR a title and a text: the band is a heading and a paragraph, and the table under them is
20
+ * drawn only when it has enough rows;
21
+ * - `approach` — at least `LANDING_PRINCIPLES.min` titled principles;
22
+ * - `testimonials` — at least two quotes;
23
+ * - `about` — a title and a text;
24
+ * - `closing` — whenever the plan carries one.
25
+ */
26
+ landingBandsOf: (home: GuestHomePlan) => LandingBand[]
27
+ /**
28
+ * The guest header menu a page draws.
29
+ *
30
+ * Keeps only entries whose band the page draws (and whose anchor exists), the first of each
31
+ * anchor, in page order; caps the list at `max` (never below `LANDING_MENU.min`); then pads
32
+ * to `LANDING_MENU.min` with `how`, `features` and the first other band the page draws. A
33
+ * label falls back to the page's own section label, then to `LANDING_ANCHOR_LABELS`.
34
+ */
35
+ landingMenuOf: (home: GuestHomePlan, max?: number) => LandingMenuEntry[]
36
+ /**
37
+ * The buttons and links of a landing page that exist — the places a home link can attach to,
38
+ * in page order.
39
+ *
40
+ * - `hero.cta` and `closing.primary` (with a closing) — only without a usable gate, which takes
41
+ * their place (`LANDING_GATE_SLOTS`);
42
+ * - `hero.secondary` — only without a usable gate, and only when the plan labels it;
43
+ * - `hero.browse`, `closing.secondary` — when the plan labels them;
44
+ * - `closing.link.N` — one per titled closing card, at most two;
45
+ * - `useCase.N` — one per drawn case, when the use-cases band is drawn.
46
+ */
47
+ homeSlotsOf: (home: GuestHomePlan) => LandingSlot[]
48
+ }
@@ -0,0 +1,120 @@
1
+ import {
2
+ LANDING_ANCHOR_BAND, LANDING_ANCHOR_LABELS, LANDING_ANCHORS, LANDING_BAND_ORDER, LANDING_CONTRAST,
3
+ LANDING_MENU, LANDING_PRINCIPLES, LANDING_USE_CASES,
4
+ } from './consts.js'
5
+ import type { GuestHomePlan, LandingAnchor, LandingBand, LandingMenuEntry, LandingSlot } from './types.js'
6
+ import type { LandingPlanHelper } from './landing/types.js'
7
+
8
+ const filled = (value: string | null | undefined): boolean => (value?.trim() ?? '') !== ''
9
+
10
+ export const createLandingPlanHelper = (): LandingPlanHelper => {
11
+ /** The use cases a page draws: titled ones, at most {@link LANDING_USE_CASES}.max. */
12
+ const drawnUseCases = (home: GuestHomePlan) =>
13
+ (home.useCases?.cases ?? []).filter(entry => filled(entry.title)).slice(0, LANDING_USE_CASES.max)
14
+
15
+ /** The closing link cards a page draws: titled ones, at most two. */
16
+ const drawnClosingLinks = (home: GuestHomePlan) =>
17
+ (home.closing?.links ?? []).filter(entry => filled(entry.title)).slice(0, 2)
18
+
19
+ /** Whether the gate is drawn: a gate is a form, and one without fields is no gate at all. */
20
+ const usableGate = (home: GuestHomePlan): boolean =>
21
+ home.gate != null && (home.gate.fields ?? []).length > 0
22
+
23
+ /** One presence rule per band — see {@link LandingPlanHelper.landingBandsOf}. */
24
+ const bandPresent: Record<LandingBand, (home: GuestHomePlan) => boolean> = {
25
+ hero: () => true,
26
+ steps: home => (home.steps ?? []).some(step => filled(step.title)),
27
+ features: () => true,
28
+ 'use-cases': home => drawnUseCases(home).length >= LANDING_USE_CASES.min,
29
+ problem: () => true,
30
+ differentiator: home => {
31
+ const band = home.differentiator
32
+ if (band == null) return false
33
+ const rows = (band.contrast ?? []).filter(row => filled(row.usual) && filled(row.ours))
34
+
35
+ return rows.length >= LANDING_CONTRAST.min || (filled(band.title) && filled(band.text))
36
+ },
37
+ approach: home =>
38
+ (home.approach?.principles ?? []).filter(entry => filled(entry.title)).length >= LANDING_PRINCIPLES.min,
39
+ testimonials: home => (home.testimonials ?? []).filter(entry => filled(entry.quote)).length >= 2,
40
+ about: home => home.about != null && filled(home.about.title) && filled(home.about.text),
41
+ closing: home => home.closing != null,
42
+ }
43
+
44
+ const landingBandsOf: LandingPlanHelper['landingBandsOf'] = home =>
45
+ LANDING_BAND_ORDER.filter(band => bandPresent[band](home))
46
+
47
+ /** The page's own section label for an anchor's band, when the plan wrote one. */
48
+ const sectionLabel = (home: GuestHomePlan, anchor: LandingAnchor): string | null | undefined => {
49
+ const labels = home.labels ?? {}
50
+ switch (anchor) {
51
+ case 'how': return labels.steps
52
+ case 'features': return labels.features
53
+ case 'use-cases': return labels.useCases
54
+ case 'why': return labels.differentiator
55
+ case 'approach': return labels.approach
56
+ case 'community': return labels.testimonials
57
+ case 'about': return labels.about
58
+ }
59
+ }
60
+
61
+ const landingMenuOf: LandingPlanHelper['landingMenuOf'] = (home, max = LANDING_MENU.max) => {
62
+ const bands = landingBandsOf(home)
63
+ const drawn = (anchor: LandingAnchor) =>
64
+ LANDING_ANCHORS.includes(anchor) && bands.includes(LANDING_ANCHOR_BAND[anchor])
65
+ const order = (anchor: LandingAnchor) => LANDING_ANCHORS.indexOf(anchor)
66
+ const label = (anchor: LandingAnchor, own?: string | null): string => {
67
+ const candidates = [own, sectionLabel(home, anchor)]
68
+ const chosen = candidates.find(filled)
69
+
70
+ return chosen?.trim() ?? LANDING_ANCHOR_LABELS[anchor]
71
+ }
72
+
73
+ const chosen: LandingMenuEntry[] = []
74
+ for (const entry of home.menu ?? []) {
75
+ if (entry == null || !drawn(entry.anchor) || chosen.some(kept => kept.anchor === entry.anchor)) {
76
+ continue
77
+ }
78
+ chosen.push({ anchor: entry.anchor, label: label(entry.anchor, entry.label) })
79
+ }
80
+ chosen.sort((a, b) => order(a.anchor) - order(b.anchor))
81
+ chosen.splice(Math.max(LANDING_MENU.min, max))
82
+
83
+ const padding: LandingAnchor[] = ['how', 'features', ...LANDING_ANCHORS.filter(
84
+ anchor => anchor !== 'how' && anchor !== 'features'
85
+ )]
86
+ for (const anchor of padding) {
87
+ if (chosen.length >= LANDING_MENU.min) break
88
+ if (drawn(anchor) && !chosen.some(kept => kept.anchor === anchor)) {
89
+ chosen.push({ anchor, label: label(anchor) })
90
+ }
91
+ }
92
+
93
+ return chosen.sort((a, b) => order(a.anchor) - order(b.anchor))
94
+ }
95
+
96
+ const homeSlotsOf: LandingPlanHelper['homeSlotsOf'] = home => {
97
+ const gate = usableGate(home)
98
+ const slots: LandingSlot[] = []
99
+
100
+ if (!gate) slots.push('hero.cta')
101
+ if (!gate && filled(home.hero.secondary?.label)) slots.push('hero.secondary')
102
+ if (filled(home.hero.browse?.label)) slots.push('hero.browse')
103
+
104
+ if (bandPresent['use-cases'](home)) {
105
+ drawnUseCases(home).forEach((_, index) => slots.push(`useCase.${index + 1}` as LandingSlot))
106
+ }
107
+
108
+ if (home.closing != null) {
109
+ if (!gate) slots.push('closing.primary')
110
+ if (filled(home.closing.secondary?.label)) slots.push('closing.secondary')
111
+ drawnClosingLinks(home).forEach((_, index) => slots.push(`closing.link.${index + 1}` as LandingSlot))
112
+ }
113
+
114
+ return slots
115
+ }
116
+
117
+ return { landingBandsOf, landingMenuOf, homeSlotsOf }
118
+ }
119
+
120
+ export const landingPlanHelper = createLandingPlanHelper()
@@ -1,7 +1,9 @@
1
1
  import type { JSONSchemaType } from 'ajv'
2
2
 
3
3
  import { ProjectArea } from '../areas/consts.js'
4
- import { BENTO_FRAGMENT_KINDS, LANDING_GATE_FIELD_KINDS, WidgetKind } from './consts.js'
4
+ import {
5
+ BENTO_FRAGMENT_KINDS, LANDING_ANCHORS, LANDING_GATE_FIELD_KINDS, LANDING_SLOTS, WidgetKind,
6
+ } from './consts.js'
5
7
  import type {
6
8
  BentoFragment, GuestHomePlan, LandingGateAnswer, LandingGateField, LandingGatePlan, ProductIdentity,
7
9
  ScaffoldAreaPlan, ScaffoldPlan, ScaffoldStoryPlan, SketchContent,
@@ -352,6 +354,27 @@ const LandingGatePlanSchema: JSONSchemaType<LandingGatePlan> = {
352
354
  additionalProperties: false,
353
355
  }
354
356
 
357
+ /**
358
+ * The `basis` every band added with the gated landing page carries — one text, so the model reads
359
+ * the same rule on each band and the check downstream has one contract to enforce.
360
+ */
361
+ const BASIS_TEXT = 'A short passage (a few words up to one sentence) copied EXACTLY, word for word,'
362
+ + ' from the person\'s own words, the specification or the vision, that this band is built on.'
363
+ + ' It is checked; a band whose basis is not found there is removed.'
364
+
365
+ const basis = { type: 'string' as const, description: BASIS_TEXT }
366
+
367
+ /** A title + text pair inside a band — required, because the band object itself is optional. */
368
+ const titledText = (title: string, text: string) => ({
369
+ type: 'object' as const,
370
+ properties: {
371
+ title: { type: 'string' as const, description: title },
372
+ text: { type: 'string' as const, description: text },
373
+ },
374
+ required: ['title', 'text'] as ('title' | 'text')[],
375
+ additionalProperties: false as const,
376
+ })
377
+
355
378
  const GuestHomePlanSchema: JSONSchemaType<GuestHomePlan> = {
356
379
  type: 'object',
357
380
  title: 'GuestHomePlan',
@@ -425,7 +448,7 @@ const GuestHomePlanSchema: JSONSchemaType<GuestHomePlan> = {
425
448
  + ' specification actually describes. Give most of them a fragment'
426
449
  },
427
450
  testimonials: {
428
- type: 'array',
451
+ type: 'array', nullable: true,
429
452
  items: {
430
453
  type: 'object',
431
454
  properties: {
@@ -436,7 +459,8 @@ const GuestHomePlanSchema: JSONSchemaType<GuestHomePlan> = {
436
459
  required: ['quote', 'name', 'role'],
437
460
  additionalProperties: false,
438
461
  },
439
- description: '2 illustrative testimonials. No ratings, no numbers, no company names'
462
+ description: 'OPTIONAL: 0 or exactly 2 illustrative testimonials; leave it out unless the'
463
+ + ' product\'s end users choose it for themselves. No ratings, no numbers, no company names'
440
464
  },
441
465
  steps: {
442
466
  type: 'array', nullable: true,
@@ -452,6 +476,94 @@ const GuestHomePlanSchema: JSONSchemaType<GuestHomePlan> = {
452
476
  description: '"How it works": 3 steps taken from the main flow, in order, the last one'
453
477
  + ' delivering the value'
454
478
  },
479
+ useCases: {
480
+ type: 'object', nullable: true,
481
+ description: 'OPTIONAL "Use cases": who the product is for, case by case - only cases the'
482
+ + ' person\'s words, the specification or the vision actually name',
483
+ properties: {
484
+ cases: {
485
+ type: 'array',
486
+ items: {
487
+ type: 'object',
488
+ properties: {
489
+ audience: { type: 'string', description: 'Who this case is for, 1-4 words' },
490
+ title: { type: 'string', description: 'What they do with the product, 2-5 words' },
491
+ text: { type: 'string', description: 'One sentence on what it gives them' },
492
+ },
493
+ required: ['audience', 'title', 'text'],
494
+ additionalProperties: false,
495
+ },
496
+ description: '2 to 4 cases',
497
+ },
498
+ basis,
499
+ },
500
+ required: ['cases', 'basis'],
501
+ additionalProperties: false,
502
+ },
503
+ differentiator: {
504
+ type: 'object', nullable: true,
505
+ description: 'OPTIONAL "Why us": what this product does differently from the usual way,'
506
+ + ' only when the person\'s words, the specification or the vision say so',
507
+ properties: {
508
+ title: { type: 'string', description: 'The difference in 3-6 words' },
509
+ text: { type: 'string', description: 'One or two sentences on it. No invented numbers' },
510
+ contrast: {
511
+ type: 'array',
512
+ items: {
513
+ type: 'object',
514
+ properties: {
515
+ usual: { type: 'string', description: 'How it is usually done, at most 6 words' },
516
+ ours: { type: 'string', description: 'How this product does it, at most 6 words' },
517
+ },
518
+ required: ['usual', 'ours'],
519
+ additionalProperties: false,
520
+ },
521
+ description: '2 to 3 usual-vs-ours rows',
522
+ },
523
+ usualLabel: {
524
+ type: 'string', nullable: true,
525
+ description: 'OPTIONAL heading over the usual column, 1-2 words - e.g. "Usually"',
526
+ },
527
+ oursLabel: {
528
+ type: 'string', nullable: true,
529
+ description: 'OPTIONAL heading over this product\'s column, 1-2 words - e.g. "With us"',
530
+ },
531
+ basis,
532
+ },
533
+ required: ['title', 'text', 'contrast', 'basis'],
534
+ additionalProperties: false,
535
+ },
536
+ approach: {
537
+ type: 'object', nullable: true,
538
+ description: 'OPTIONAL "How we work": the principles the product is run by, only when the'
539
+ + ' person\'s words, the specification or the vision state them',
540
+ properties: {
541
+ title: {
542
+ type: 'string', nullable: true,
543
+ description: 'OPTIONAL heading of the band, one short concrete sentence',
544
+ },
545
+ principles: {
546
+ type: 'array',
547
+ items: titledText('The principle, 2-4 words', 'One sentence on what it means in practice'),
548
+ description: '3 to 4 principles',
549
+ },
550
+ basis,
551
+ },
552
+ required: ['principles', 'basis'],
553
+ additionalProperties: false,
554
+ },
555
+ about: {
556
+ type: 'object', nullable: true,
557
+ description: 'OPTIONAL "About": who is behind the product, only when the person\'s words,'
558
+ + ' the specification or the vision say who',
559
+ properties: {
560
+ title: { type: 'string', description: 'The heading, 2-5 words' },
561
+ text: { type: 'string', description: 'Two or three sentences. Nothing invented' },
562
+ basis,
563
+ },
564
+ required: ['title', 'text', 'basis'],
565
+ additionalProperties: false,
566
+ },
455
567
  labels: {
456
568
  type: 'object', nullable: true,
457
569
  description: 'The small label over each section and that section\'s heading, in the product\'s'
@@ -472,6 +584,17 @@ const GuestHomePlanSchema: JSONSchemaType<GuestHomePlan> = {
472
584
  },
473
585
  problem: { type: 'string', nullable: true, description: 'e.g. "The problem"' },
474
586
  solution: { type: 'string', nullable: true, description: 'e.g. "The solution"' },
587
+ useCases: { type: 'string', nullable: true, description: 'e.g. "Use cases"' },
588
+ useCasesTitle: {
589
+ type: 'string', nullable: true, description: 'e.g. "Made for every kind of home baker."'
590
+ },
591
+ differentiator: { type: 'string', nullable: true, description: 'e.g. "Why us"' },
592
+ approach: { type: 'string', nullable: true, description: 'e.g. "How we work"' },
593
+ approachTitle: {
594
+ type: 'string', nullable: true,
595
+ description: 'e.g. "Small batches, honest notes." - used when the approach has no title'
596
+ },
597
+ about: { type: 'string', nullable: true, description: 'e.g. "About"' },
475
598
  },
476
599
  required: [],
477
600
  additionalProperties: false,
@@ -511,8 +634,57 @@ const GuestHomePlanSchema: JSONSchemaType<GuestHomePlan> = {
511
634
  description: 'ONLY when you were given a landing story; omit it otherwise. '
512
635
  + LandingGatePlanSchema.description,
513
636
  },
637
+ menu: {
638
+ type: 'array', nullable: true,
639
+ items: {
640
+ type: 'object',
641
+ properties: {
642
+ anchor: {
643
+ type: 'string',
644
+ enum: LANDING_ANCHORS,
645
+ description: 'The band it jumps to: how (how it works), features, use-cases, why'
646
+ + ' (the differentiator), approach (how we work), community (testimonials), about'
647
+ },
648
+ label: { type: 'string', description: 'The menu word, 1-2 words in the product\'s language' },
649
+ },
650
+ required: ['anchor', 'label'],
651
+ additionalProperties: false,
652
+ },
653
+ description: 'The header menu of the landing page: 2 to 4 entries, each pointing at a band'
654
+ + ' this page carries, in page order'
655
+ },
656
+ links: {
657
+ type: 'array', nullable: true,
658
+ items: {
659
+ type: 'object',
660
+ properties: {
661
+ slot: {
662
+ type: 'string',
663
+ enum: LANDING_SLOTS,
664
+ description: 'The button: hero.cta, hero.secondary, hero.browse, closing.primary,'
665
+ + ' closing.secondary, closing.link.1/2 (the closing cards), useCase.1-4 (the use'
666
+ + ' cases in order). Without a gate only; with one, hero.cta, hero.secondary and'
667
+ + ' closing.primary do not exist'
668
+ },
669
+ story: {
670
+ type: 'string',
671
+ description: 'The story code, copied EXACTLY from the story list given to you'
672
+ },
673
+ },
674
+ required: ['slot', 'story'],
675
+ additionalProperties: false,
676
+ },
677
+ description: 'Which home buttons open which user story. Leave it out when undecided; an'
678
+ + ' empty list means decided: none. At most one entry per button'
679
+ },
680
+ linksDecided: {
681
+ type: 'array', nullable: true,
682
+ items: { type: 'string' },
683
+ description: 'Story codes whose links were decided at development time (a decision of no'
684
+ + ' button included). Absent on a plan whose links the planner decided. Filled by code'
685
+ },
514
686
  },
515
- required: ['hero', 'problem', 'solution', 'features', 'testimonials'],
687
+ required: ['hero', 'problem', 'solution', 'features'],
516
688
  additionalProperties: false,
517
689
  }
518
690
 
@@ -567,10 +739,14 @@ export const ScaffoldPlanSchema: JSONSchemaType<ScaffoldPlan> = {
567
739
  additionalProperties: false,
568
740
  }
569
741
 
742
+ /** The guest home's keys a model may answer: `linksDecided` is written by code, never asked. */
743
+ const { linksDecided: _linksDecided, ...answeredHomeProperties } = GuestHomePlanSchema.properties!
744
+
570
745
  /**
571
746
  * The plan as the planning MODEL answers it — {@link ScaffoldPlanSchema} with the gate held to the
572
- * form. The stored schema keeps the pre-form gate keys optional so an old plan still validates;
573
- * offering them to the model would let it write a chip picker again. Typed as the stored plan
747
+ * form and without the code-written `linksDecided`. The stored schema keeps the pre-form gate keys
748
+ * optional so an old plan still validates; offering them to the model would let it write a chip
749
+ * picker again. Typed as the stored plan
574
750
  * because every answer is one: the answer's gate is a subset of the stored gate.
575
751
  */
576
752
  export const ScaffoldPlanAnswerSchema = {
@@ -580,7 +756,7 @@ export const ScaffoldPlanAnswerSchema = {
580
756
  guestHome: {
581
757
  ...GuestHomePlanSchema,
582
758
  properties: {
583
- ...GuestHomePlanSchema.properties,
759
+ ...answeredHomeProperties,
584
760
  gate: {
585
761
  ...LandingGateAnswerSchema,
586
762
  nullable: true,
@@ -0,0 +1,35 @@
1
+ import type { ScaffoldPlan, ShareKind } from '../types.js'
2
+
3
+ /**
4
+ * ONE reading of who owns a drawn artifact, so no consumer has to interpret the plan itself.
5
+ *
6
+ * The plan carries `sharesWidgetWith` / `sharesScreenWith` as untrusted hints — a model may drop
7
+ * them, invent a code, point forwards, or build a cycle. These resolve all of that away, and
8
+ * every one is TOTAL: a code the plan does not hold answers itself, which is the unshared
9
+ * behaviour and therefore exactly today's drawn tree.
10
+ *
11
+ * Pure and IO-free. `fillScaffoldPlan` normalises a plan through them before anything is stamped,
12
+ * so the stampers and the scaffold loop can read a plan that is already sane.
13
+ */
14
+ export interface ScaffoldShareHelper {
15
+ /**
16
+ * The code whose artifact this story renders — itself when it owns one.
17
+ *
18
+ * Backward-only and bounded: an arrow is followed only to a story EARLIER in plan order, which
19
+ * makes a cycle unrepresentable rather than merely unlikely, and makes the owner the earliest
20
+ * member of its group. That is what keeps `widgetDefinition(owner)` stable — the name is a
21
+ * function of one code, never of the group, so adding a member renames nothing.
22
+ */
23
+ shareOwner: (plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind?: ShareKind) => string
24
+ /**
25
+ * Owner code → every member, owner first, in plan order.
26
+ *
27
+ * The shape the stampers need: one artifact per entry, and the full member list for the notice
28
+ * that names them.
29
+ */
30
+ shareGroups: (plan: Pick<ScaffoldPlan, 'stories'>, kind?: ShareKind) => Map<string, string[]>
31
+ /** Every story that renders this owner's artifact, owner first. Total: an owner alone answers `[code]`. */
32
+ shareMembers: (plan: Pick<ScaffoldPlan, 'stories'>, owner: string, kind?: ShareKind) => string[]
33
+ /** Whether this story draws the artifact, as opposed to rendering somebody else's. */
34
+ ownsShare: (plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind?: ShareKind) => boolean
35
+ }
@@ -0,0 +1,60 @@
1
+ import type { ScaffoldPlan, ScaffoldStoryPlan, ShareKind } from './types.js'
2
+ import type { ScaffoldShareHelper } from './share/types.js'
3
+
4
+ export const createScaffoldShareHelper = (): ScaffoldShareHelper => {
5
+ const pointerOf = (story: ScaffoldStoryPlan, kind: ShareKind): string | undefined =>
6
+ kind === 'widget' ? story.sharesWidgetWith : story.sharesScreenWith
7
+
8
+ const shareOwner = (
9
+ plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind: ShareKind = 'widget'
10
+ ): string => {
11
+ const order = new Map(plan.stories.map((story, index) => [story.code, index]))
12
+ const byCode = new Map(plan.stories.map(story => [story.code, story]))
13
+
14
+ let current = code
15
+ // Bounded by the list length: every hop strictly decreases the plan index, so it terminates.
16
+ for (let hop = 0; hop <= plan.stories.length; hop++) {
17
+ const story = byCode.get(current)
18
+ const target = story != null ? pointerOf(story, kind) : undefined
19
+ if (story == null || target == null || target === '' || target === current) {
20
+ return current
21
+ }
22
+ const here = order.get(current)
23
+ const there = order.get(target)
24
+ // Unknown, forward or self-referential — none of them is a group, so the story owns its own.
25
+ if (here == null || there == null || there >= here) {
26
+ return current
27
+ }
28
+ current = target
29
+ }
30
+
31
+ return current
32
+ }
33
+
34
+ const shareGroups = (
35
+ plan: Pick<ScaffoldPlan, 'stories'>, kind: ShareKind = 'widget'
36
+ ): Map<string, string[]> => {
37
+ const groups = new Map<string, string[]>()
38
+ for (const story of plan.stories) {
39
+ const owner = shareOwner(plan, story.code, kind)
40
+ const members = groups.get(owner) ?? []
41
+ if (!members.includes(owner)) members.push(owner)
42
+ if (!members.includes(story.code)) members.push(story.code)
43
+ groups.set(owner, members)
44
+ }
45
+
46
+ return groups
47
+ }
48
+
49
+ const shareMembers = (
50
+ plan: Pick<ScaffoldPlan, 'stories'>, owner: string, kind: ShareKind = 'widget'
51
+ ): string[] => shareGroups(plan, kind).get(owner) ?? [owner]
52
+
53
+ const ownsShare = (
54
+ plan: Pick<ScaffoldPlan, 'stories'>, code: string, kind: ShareKind = 'widget'
55
+ ): boolean => shareOwner(plan, code, kind) === code
56
+
57
+ return { shareOwner, shareGroups, shareMembers, ownsShare }
58
+ }
59
+
60
+ export const scaffoldShareHelper = createScaffoldShareHelper()