@owlmeans/viable-common 0.0.43 → 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 (708) 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 +59 -36
  5. package/build/agent/consts.d.ts +58 -0
  6. package/build/agent/consts.d.ts.map +1 -0
  7. package/build/agent/consts.js +63 -0
  8. package/build/agent/consts.js.map +1 -0
  9. package/build/agent/consts.local.d.ts +21 -0
  10. package/build/agent/consts.local.d.ts.map +1 -0
  11. package/build/agent/consts.local.js +44 -0
  12. package/build/agent/consts.local.js.map +1 -0
  13. package/build/agent/index.d.ts +2 -0
  14. package/build/agent/index.d.ts.map +1 -1
  15. package/build/agent/index.js +1 -0
  16. package/build/agent/index.js.map +1 -1
  17. package/build/agent/presentation/types.d.ts +21 -0
  18. package/build/agent/presentation/types.d.ts.map +1 -0
  19. package/build/agent/presentation/types.js.map +1 -0
  20. package/build/agent/presentation.d.ts +12 -94
  21. package/build/agent/presentation.d.ts.map +1 -1
  22. package/build/agent/presentation.js +218 -299
  23. package/build/agent/presentation.js.map +1 -1
  24. package/build/agent/types.d.ts +30 -0
  25. package/build/agent/types.d.ts.map +1 -1
  26. package/build/agent/types.local.d.ts +4 -0
  27. package/build/agent/types.local.d.ts.map +1 -0
  28. package/build/agent/types.local.js +2 -0
  29. package/build/agent/types.local.js.map +1 -0
  30. package/build/areas/consts.d.ts +5 -0
  31. package/build/areas/consts.d.ts.map +1 -1
  32. package/build/areas/consts.js +4 -0
  33. package/build/areas/consts.js.map +1 -1
  34. package/build/areas/index.d.ts +1 -0
  35. package/build/areas/index.d.ts.map +1 -1
  36. package/build/areas/index.js.map +1 -1
  37. package/build/areas/tenancy/types.d.ts +23 -0
  38. package/build/areas/tenancy/types.d.ts.map +1 -0
  39. package/build/areas/tenancy/types.js +2 -0
  40. package/build/areas/tenancy/types.js.map +1 -0
  41. package/build/areas/tenancy.d.ts +6 -50
  42. package/build/areas/tenancy.d.ts.map +1 -1
  43. package/build/areas/tenancy.js +21 -31
  44. package/build/areas/tenancy.js.map +1 -1
  45. package/build/areas/types.d.ts +32 -0
  46. package/build/areas/types.d.ts.map +1 -1
  47. package/build/ba/connecting/types.d.ts +45 -0
  48. package/build/ba/connecting/types.d.ts.map +1 -0
  49. package/build/ba/connecting/types.js +2 -0
  50. package/build/ba/connecting/types.js.map +1 -0
  51. package/build/ba/connecting.d.ts +4 -0
  52. package/build/ba/connecting.d.ts.map +1 -0
  53. package/build/ba/connecting.js +47 -0
  54. package/build/ba/connecting.js.map +1 -0
  55. package/build/ba/helpers.d.ts +4 -39
  56. package/build/ba/helpers.d.ts.map +1 -1
  57. package/build/ba/helpers.js +5 -79
  58. package/build/ba/helpers.js.map +1 -1
  59. package/build/ba/index.d.ts +2 -0
  60. package/build/ba/index.d.ts.map +1 -1
  61. package/build/ba/index.js +1 -0
  62. package/build/ba/index.js.map +1 -1
  63. package/build/ba/types.d.ts +1 -1
  64. package/build/ba/types.d.ts.map +1 -1
  65. package/build/blueprint/consts.d.ts +41 -0
  66. package/build/blueprint/consts.d.ts.map +1 -1
  67. package/build/blueprint/consts.js +51 -0
  68. package/build/blueprint/consts.js.map +1 -1
  69. package/build/blueprint/consts.local.d.ts +2 -0
  70. package/build/blueprint/consts.local.d.ts.map +1 -0
  71. package/build/blueprint/consts.local.js +3 -0
  72. package/build/blueprint/consts.local.js.map +1 -0
  73. package/build/blueprint/index.d.ts +1 -0
  74. package/build/blueprint/index.d.ts.map +1 -1
  75. package/build/blueprint/index.js +1 -0
  76. package/build/blueprint/index.js.map +1 -1
  77. package/build/blueprint/types.d.ts +3 -52
  78. package/build/blueprint/types.d.ts.map +1 -1
  79. package/build/blueprint/types.js +1 -65
  80. package/build/blueprint/types.js.map +1 -1
  81. package/build/blueprint/utils.d.ts +11 -0
  82. package/build/blueprint/utils.d.ts.map +1 -0
  83. package/build/blueprint/utils.js +16 -0
  84. package/build/blueprint/utils.js.map +1 -0
  85. package/build/branding.d.ts +0 -8
  86. package/build/branding.d.ts.map +1 -1
  87. package/build/branding.js +0 -16
  88. package/build/branding.js.map +1 -1
  89. package/build/connect/branding/types.d.ts +28 -0
  90. package/build/connect/branding/types.d.ts.map +1 -0
  91. package/build/connect/branding/types.js +2 -0
  92. package/build/connect/branding/types.js.map +1 -0
  93. package/build/connect/consts.d.ts +2 -10
  94. package/build/connect/consts.d.ts.map +1 -1
  95. package/build/connect/consts.js +2 -23
  96. package/build/connect/consts.js.map +1 -1
  97. package/build/connect/conversion/types.d.ts +93 -0
  98. package/build/connect/conversion/types.d.ts.map +1 -0
  99. package/build/connect/conversion/types.js +2 -0
  100. package/build/connect/conversion/types.js.map +1 -0
  101. package/build/connect/entrypoints/types.d.ts +30 -0
  102. package/build/connect/entrypoints/types.d.ts.map +1 -0
  103. package/build/connect/entrypoints/types.js +2 -0
  104. package/build/connect/entrypoints/types.js.map +1 -0
  105. package/build/connect/entrypoints.d.ts +61 -92
  106. package/build/connect/entrypoints.d.ts.map +1 -1
  107. package/build/connect/entrypoints.js +5 -2
  108. package/build/connect/entrypoints.js.map +1 -1
  109. package/build/connect/errors/types.d.ts +20 -0
  110. package/build/connect/errors/types.d.ts.map +1 -0
  111. package/build/connect/errors/types.js +2 -0
  112. package/build/connect/errors/types.js.map +1 -0
  113. package/build/connect/errors.d.ts +32 -0
  114. package/build/connect/errors.d.ts.map +1 -1
  115. package/build/connect/errors.js +65 -0
  116. package/build/connect/errors.js.map +1 -1
  117. package/build/connect/index.d.ts +13 -2
  118. package/build/connect/index.d.ts.map +1 -1
  119. package/build/connect/index.js +1 -0
  120. package/build/connect/index.js.map +1 -1
  121. package/build/connect/kit/types.d.ts +52 -0
  122. package/build/connect/kit/types.d.ts.map +1 -0
  123. package/build/connect/kit/types.js +2 -0
  124. package/build/connect/{types.js.map → kit/types.js.map} +1 -1
  125. package/build/connect/model-tier/types.d.ts +16 -0
  126. package/build/connect/model-tier/types.d.ts.map +1 -0
  127. package/build/connect/model-tier/types.js +2 -0
  128. package/build/connect/model-tier/types.js.map +1 -0
  129. package/build/connect/model-tier.d.ts +4 -0
  130. package/build/connect/model-tier.d.ts.map +1 -0
  131. package/build/connect/model-tier.js +21 -0
  132. package/build/connect/model-tier.js.map +1 -0
  133. package/build/connect/{ops.d.ts → ops/types.d.ts} +13 -4
  134. package/build/connect/ops/types.d.ts.map +1 -0
  135. package/build/connect/ops/types.js +2 -0
  136. package/build/connect/ops/types.js.map +1 -0
  137. package/build/connect/pipeline/types.d.ts +39 -0
  138. package/build/connect/pipeline/types.d.ts.map +1 -0
  139. package/build/connect/pipeline/types.js +2 -0
  140. package/build/connect/pipeline/types.js.map +1 -0
  141. package/build/connect/project/types.d.ts +127 -0
  142. package/build/connect/project/types.d.ts.map +1 -0
  143. package/build/connect/project/types.js +2 -0
  144. package/build/connect/project/types.js.map +1 -0
  145. package/build/connect/references/types.d.ts +157 -0
  146. package/build/connect/references/types.d.ts.map +1 -0
  147. package/build/connect/references/types.js +2 -0
  148. package/build/connect/references/types.js.map +1 -0
  149. package/build/connect/references/types.local.d.ts +5 -0
  150. package/build/connect/references/types.local.d.ts.map +1 -0
  151. package/build/connect/references/types.local.js +2 -0
  152. package/build/connect/references/types.local.js.map +1 -0
  153. package/build/connect/references.d.ts +1 -153
  154. package/build/connect/references.d.ts.map +1 -1
  155. package/build/connect/references.js.map +1 -1
  156. package/build/connect/schemas.d.ts +9 -5
  157. package/build/connect/schemas.d.ts.map +1 -1
  158. package/build/connect/schemas.js +10 -3
  159. package/build/connect/schemas.js.map +1 -1
  160. package/build/connect/session/types.d.ts +73 -0
  161. package/build/connect/session/types.d.ts.map +1 -0
  162. package/build/connect/session/types.js +2 -0
  163. package/build/connect/session/types.js.map +1 -0
  164. package/build/connect/settings/types.d.ts +48 -0
  165. package/build/connect/settings/types.d.ts.map +1 -0
  166. package/build/connect/settings/types.js +2 -0
  167. package/build/connect/settings/types.js.map +1 -0
  168. package/build/consts.d.ts +8 -0
  169. package/build/consts.d.ts.map +1 -1
  170. package/build/consts.js +16 -0
  171. package/build/consts.js.map +1 -1
  172. package/build/convert/analysis/types.d.ts +93 -0
  173. package/build/convert/analysis/types.d.ts.map +1 -0
  174. package/build/convert/analysis/types.js +2 -0
  175. package/build/convert/analysis/types.js.map +1 -0
  176. package/build/convert/census/consts.local.d.ts +55 -0
  177. package/build/convert/census/consts.local.d.ts.map +1 -0
  178. package/build/convert/census/consts.local.js +104 -0
  179. package/build/convert/census/consts.local.js.map +1 -0
  180. package/build/convert/census/types.d.ts +176 -0
  181. package/build/convert/census/types.d.ts.map +1 -0
  182. package/build/convert/census/types.js +2 -0
  183. package/build/convert/census/types.js.map +1 -0
  184. package/build/convert/census.d.ts +4 -0
  185. package/build/convert/census.d.ts.map +1 -0
  186. package/build/convert/census.js +83 -0
  187. package/build/convert/census.js.map +1 -0
  188. package/build/convert/consts.d.ts +4 -12
  189. package/build/convert/consts.d.ts.map +1 -1
  190. package/build/convert/consts.js +4 -3
  191. package/build/convert/consts.js.map +1 -1
  192. package/build/convert/detection/types.d.ts +67 -0
  193. package/build/convert/detection/types.d.ts.map +1 -0
  194. package/build/convert/detection/types.js +2 -0
  195. package/build/convert/detection/types.js.map +1 -0
  196. package/build/convert/docs/types.d.ts +129 -0
  197. package/build/convert/docs/types.d.ts.map +1 -0
  198. package/build/convert/docs/types.js +2 -0
  199. package/build/convert/docs/types.js.map +1 -0
  200. package/build/convert/docs.d.ts +4 -0
  201. package/build/convert/docs.d.ts.map +1 -0
  202. package/build/convert/docs.js +9 -0
  203. package/build/convert/docs.js.map +1 -0
  204. package/build/convert/estimate/types.d.ts +77 -0
  205. package/build/convert/estimate/types.d.ts.map +1 -0
  206. package/build/convert/estimate/types.js +2 -0
  207. package/build/convert/estimate/types.js.map +1 -0
  208. package/build/convert/estimate.d.ts +11 -0
  209. package/build/convert/estimate.d.ts.map +1 -0
  210. package/build/convert/estimate.js +18 -0
  211. package/build/convert/estimate.js.map +1 -0
  212. package/build/convert/helpers.d.ts +14 -78
  213. package/build/convert/helpers.d.ts.map +1 -1
  214. package/build/convert/helpers.js +27 -300
  215. package/build/convert/helpers.js.map +1 -1
  216. package/build/convert/index.d.ts +15 -0
  217. package/build/convert/index.d.ts.map +1 -1
  218. package/build/convert/index.js +6 -0
  219. package/build/convert/index.js.map +1 -1
  220. package/build/convert/origin/types.d.ts +41 -0
  221. package/build/convert/origin/types.d.ts.map +1 -0
  222. package/build/convert/origin/types.js +2 -0
  223. package/build/convert/origin/types.js.map +1 -0
  224. package/build/convert/origin.d.ts +4 -0
  225. package/build/convert/origin.d.ts.map +1 -0
  226. package/build/convert/origin.js +25 -0
  227. package/build/convert/origin.js.map +1 -0
  228. package/build/convert/record/types.d.ts +98 -0
  229. package/build/convert/record/types.d.ts.map +1 -0
  230. package/build/convert/record/types.js +2 -0
  231. package/build/convert/record/types.js.map +1 -0
  232. package/build/convert/schemas.d.ts +7 -6
  233. package/build/convert/schemas.d.ts.map +1 -1
  234. package/build/convert/schemas.js +1 -5
  235. package/build/convert/schemas.js.map +1 -1
  236. package/build/convert/stage/types.d.ts +27 -0
  237. package/build/convert/stage/types.d.ts.map +1 -0
  238. package/build/convert/stage/types.js +2 -0
  239. package/build/convert/stage/types.js.map +1 -0
  240. package/build/convert/stage.d.ts +4 -0
  241. package/build/convert/stage.d.ts.map +1 -0
  242. package/build/convert/stage.js +25 -0
  243. package/build/convert/stage.js.map +1 -0
  244. package/build/convert/taxonomy/types.d.ts +71 -0
  245. package/build/convert/taxonomy/types.d.ts.map +1 -0
  246. package/build/convert/taxonomy/types.js +2 -0
  247. package/build/convert/taxonomy/types.js.map +1 -0
  248. package/build/convert/types.d.ts +1 -648
  249. package/build/convert/types.d.ts.map +1 -1
  250. package/build/convert/utils.d.ts +5 -0
  251. package/build/convert/utils.d.ts.map +1 -0
  252. package/build/convert/utils.js +6 -0
  253. package/build/convert/utils.js.map +1 -0
  254. package/build/design/consts.d.ts +37 -0
  255. package/build/design/consts.d.ts.map +1 -1
  256. package/build/design/consts.js +44 -8
  257. package/build/design/consts.js.map +1 -1
  258. package/build/design/helpers.d.ts +9 -49
  259. package/build/design/helpers.d.ts.map +1 -1
  260. package/build/design/helpers.js +17 -224
  261. package/build/design/helpers.js.map +1 -1
  262. package/build/design/index.d.ts +3 -0
  263. package/build/design/index.d.ts.map +1 -1
  264. package/build/design/index.js +1 -0
  265. package/build/design/index.js.map +1 -1
  266. package/build/design/runtime/types.d.ts +16 -0
  267. package/build/design/runtime/types.d.ts.map +1 -0
  268. package/build/design/runtime/types.js +2 -0
  269. package/build/design/runtime/types.js.map +1 -0
  270. package/build/design/runtime.d.ts +8 -105
  271. package/build/design/runtime.d.ts.map +1 -1
  272. package/build/design/runtime.js +13 -48
  273. package/build/design/runtime.js.map +1 -1
  274. package/build/design/schemas.d.ts +1 -9
  275. package/build/design/schemas.d.ts.map +1 -1
  276. package/build/design/schemas.js +1 -1
  277. package/build/design/schemas.js.map +1 -1
  278. package/build/design/story/types.d.ts +67 -0
  279. package/build/design/story/types.d.ts.map +1 -0
  280. package/build/design/story/types.js +2 -0
  281. package/build/design/story/types.js.map +1 -0
  282. package/build/design/story.d.ts +4 -0
  283. package/build/design/story.d.ts.map +1 -0
  284. package/build/design/story.js +184 -0
  285. package/build/design/story.js.map +1 -0
  286. package/build/design/types.d.ts +75 -1
  287. package/build/design/types.d.ts.map +1 -1
  288. package/build/dev/schemas.d.ts.map +1 -1
  289. package/build/dev/schemas.js.map +1 -1
  290. package/build/dev/types.local.d.ts +5 -0
  291. package/build/dev/types.local.d.ts.map +1 -0
  292. package/build/dev/types.local.js +2 -0
  293. package/build/dev/types.local.js.map +1 -0
  294. package/build/integrity/consts.d.ts +0 -117
  295. package/build/integrity/consts.d.ts.map +1 -1
  296. package/build/integrity/consts.js +0 -281
  297. package/build/integrity/consts.js.map +1 -1
  298. package/build/integrity/consts.local.d.ts +5 -0
  299. package/build/integrity/consts.local.d.ts.map +1 -0
  300. package/build/integrity/consts.local.js +5 -0
  301. package/build/integrity/consts.local.js.map +1 -0
  302. package/build/integrity/index.d.ts +5 -0
  303. package/build/integrity/index.d.ts.map +1 -1
  304. package/build/integrity/index.js +3 -0
  305. package/build/integrity/index.js.map +1 -1
  306. package/build/integrity/layout/consts.d.ts +59 -0
  307. package/build/integrity/layout/consts.d.ts.map +1 -0
  308. package/build/integrity/layout/consts.js +66 -0
  309. package/build/integrity/layout/consts.js.map +1 -0
  310. package/build/integrity/layout/consts.local.d.ts +18 -0
  311. package/build/integrity/layout/consts.local.d.ts.map +1 -0
  312. package/build/integrity/layout/consts.local.js +176 -0
  313. package/build/integrity/layout/consts.local.js.map +1 -0
  314. package/build/integrity/layout/types.d.ts +35 -0
  315. package/build/integrity/layout/types.d.ts.map +1 -0
  316. package/build/integrity/layout/types.js +2 -0
  317. package/build/integrity/layout/types.js.map +1 -0
  318. package/build/integrity/layout.d.ts +4 -0
  319. package/build/integrity/layout.d.ts.map +1 -0
  320. package/build/integrity/layout.js +25 -0
  321. package/build/integrity/layout.js.map +1 -0
  322. package/build/integrity/types.d.ts +36 -2
  323. package/build/integrity/types.d.ts.map +1 -1
  324. package/build/integrity/utils.d.ts +13 -0
  325. package/build/integrity/utils.d.ts.map +1 -0
  326. package/build/integrity/utils.js +12 -0
  327. package/build/integrity/utils.js.map +1 -0
  328. package/build/integrity/verify/types.d.ts +26 -0
  329. package/build/integrity/verify/types.d.ts.map +1 -0
  330. package/build/integrity/verify/types.js +2 -0
  331. package/build/integrity/verify/types.js.map +1 -0
  332. package/build/integrity/verify.d.ts +5 -19
  333. package/build/integrity/verify.d.ts.map +1 -1
  334. package/build/integrity/verify.js +165 -175
  335. package/build/integrity/verify.js.map +1 -1
  336. package/build/intent/consts.d.ts +16 -0
  337. package/build/intent/consts.d.ts.map +1 -1
  338. package/build/intent/consts.js +63 -0
  339. package/build/intent/consts.js.map +1 -1
  340. package/build/intent/entrypoints.d.ts +2 -12
  341. package/build/intent/entrypoints.d.ts.map +1 -1
  342. package/build/intent/entrypoints.js.map +1 -1
  343. package/build/intent/index.d.ts +0 -1
  344. package/build/intent/index.d.ts.map +1 -1
  345. package/build/intent/index.js +0 -1
  346. package/build/intent/index.js.map +1 -1
  347. package/build/intent/types.d.ts +13 -0
  348. package/build/intent/types.d.ts.map +1 -1
  349. package/build/metadata/consts.d.ts +33 -0
  350. package/build/metadata/consts.d.ts.map +1 -1
  351. package/build/metadata/consts.js +37 -0
  352. package/build/metadata/consts.js.map +1 -1
  353. package/build/metadata/types.d.ts +1 -33
  354. package/build/metadata/types.d.ts.map +1 -1
  355. package/build/metadata/types.js +1 -38
  356. package/build/metadata/types.js.map +1 -1
  357. package/build/moderation/index.d.ts +2 -0
  358. package/build/moderation/index.d.ts.map +1 -1
  359. package/build/moderation/index.js +1 -0
  360. package/build/moderation/index.js.map +1 -1
  361. package/build/moderation/utils.d.ts +3 -15
  362. package/build/moderation/utils.d.ts.map +1 -1
  363. package/build/moderation/utils.js +5 -30
  364. package/build/moderation/utils.js.map +1 -1
  365. package/build/moderation/verdict/types.d.ts +24 -0
  366. package/build/moderation/verdict/types.d.ts.map +1 -0
  367. package/build/moderation/verdict/types.js +2 -0
  368. package/build/moderation/verdict/types.js.map +1 -0
  369. package/build/moderation/verdict.d.ts +4 -0
  370. package/build/moderation/verdict.d.ts.map +1 -0
  371. package/build/moderation/verdict.js +21 -0
  372. package/build/moderation/verdict.js.map +1 -0
  373. package/build/planning/card/types.d.ts +42 -0
  374. package/build/planning/card/types.d.ts.map +1 -0
  375. package/build/planning/card/types.js +2 -0
  376. package/build/planning/card/types.js.map +1 -0
  377. package/build/planning/card.d.ts +4 -0
  378. package/build/planning/card.d.ts.map +1 -0
  379. package/build/planning/card.js +51 -0
  380. package/build/planning/card.js.map +1 -0
  381. package/build/planning/consts.d.ts +13 -1
  382. package/build/planning/consts.d.ts.map +1 -1
  383. package/build/planning/consts.js +13 -0
  384. package/build/planning/consts.js.map +1 -1
  385. package/build/planning/helpers.d.ts +11 -37
  386. package/build/planning/helpers.d.ts.map +1 -1
  387. package/build/planning/helpers.js +24 -103
  388. package/build/planning/helpers.js.map +1 -1
  389. package/build/planning/index.d.ts +5 -1
  390. package/build/planning/index.d.ts.map +1 -1
  391. package/build/planning/index.js +2 -1
  392. package/build/planning/index.js.map +1 -1
  393. package/build/planning/landing/types.d.ts +16 -0
  394. package/build/planning/landing/types.d.ts.map +1 -0
  395. package/build/planning/landing/types.js +2 -0
  396. package/build/planning/landing/types.js.map +1 -0
  397. package/build/planning/landing.d.ts +5 -22
  398. package/build/planning/landing.d.ts.map +1 -1
  399. package/build/planning/landing.js +21 -35
  400. package/build/planning/landing.js.map +1 -1
  401. package/build/planning/schemas.d.ts +33 -0
  402. package/build/planning/schemas.d.ts.map +1 -1
  403. package/build/planning/schemas.js +173 -4
  404. package/build/planning/schemas.js.map +1 -1
  405. package/build/planning/spec/types.d.ts +22 -0
  406. package/build/planning/spec/types.d.ts.map +1 -0
  407. package/build/planning/spec/types.js +2 -0
  408. package/build/planning/spec/types.js.map +1 -0
  409. package/build/planning/spec.d.ts +4 -0
  410. package/build/planning/spec.d.ts.map +1 -0
  411. package/build/planning/spec.js +30 -0
  412. package/build/planning/spec.js.map +1 -0
  413. package/build/planning/types.d.ts +6 -5
  414. package/build/planning/types.d.ts.map +1 -1
  415. package/build/preview/consts.d.ts +3 -1
  416. package/build/preview/consts.d.ts.map +1 -1
  417. package/build/preview/consts.js +2 -0
  418. package/build/preview/consts.js.map +1 -1
  419. package/build/preview/types.d.ts +17 -2
  420. package/build/preview/types.d.ts.map +1 -1
  421. package/build/scaffold/consts.d.ts +40 -1
  422. package/build/scaffold/consts.d.ts.map +1 -1
  423. package/build/scaffold/consts.js +52 -0
  424. package/build/scaffold/consts.js.map +1 -1
  425. package/build/scaffold/helpers.d.ts +5 -30
  426. package/build/scaffold/helpers.d.ts.map +1 -1
  427. package/build/scaffold/helpers.js +9 -53
  428. package/build/scaffold/helpers.js.map +1 -1
  429. package/build/scaffold/index.d.ts +4 -0
  430. package/build/scaffold/index.d.ts.map +1 -1
  431. package/build/scaffold/index.js +2 -0
  432. package/build/scaffold/index.js.map +1 -1
  433. package/build/scaffold/landing/types.d.ts +48 -0
  434. package/build/scaffold/landing/types.d.ts.map +1 -0
  435. package/build/scaffold/landing/types.js +2 -0
  436. package/build/scaffold/landing/types.js.map +1 -0
  437. package/build/scaffold/landing.d.ts +4 -0
  438. package/build/scaffold/landing.d.ts.map +1 -0
  439. package/build/scaffold/landing.js +95 -0
  440. package/build/scaffold/landing.js.map +1 -0
  441. package/build/scaffold/schemas.d.ts +3 -2
  442. package/build/scaffold/schemas.d.ts.map +1 -1
  443. package/build/scaffold/schemas.js +177 -7
  444. package/build/scaffold/schemas.js.map +1 -1
  445. package/build/scaffold/share/types.d.ts +35 -0
  446. package/build/scaffold/share/types.d.ts.map +1 -0
  447. package/build/scaffold/share/types.js +2 -0
  448. package/build/scaffold/share/types.js.map +1 -0
  449. package/build/scaffold/share.d.ts +4 -0
  450. package/build/scaffold/share.d.ts.map +1 -0
  451. package/build/scaffold/share.js +42 -0
  452. package/build/scaffold/share.js.map +1 -0
  453. package/build/scaffold/types.d.ts +114 -2
  454. package/build/scaffold/types.d.ts.map +1 -1
  455. package/build/skills/consts.d.ts +42 -0
  456. package/build/skills/consts.d.ts.map +1 -1
  457. package/build/skills/consts.js +43 -0
  458. package/build/skills/consts.js.map +1 -1
  459. package/build/skills/index.d.ts +0 -1
  460. package/build/skills/index.d.ts.map +1 -1
  461. package/build/skills/index.js +0 -1
  462. package/build/skills/index.js.map +1 -1
  463. package/build/slot/command/types.d.ts +21 -0
  464. package/build/slot/command/types.d.ts.map +1 -0
  465. package/build/slot/command/types.js +2 -0
  466. package/build/slot/command/types.js.map +1 -0
  467. package/build/slot/command.d.ts +4 -0
  468. package/build/slot/command.d.ts.map +1 -0
  469. package/build/slot/command.js +31 -0
  470. package/build/slot/command.js.map +1 -0
  471. package/build/slot/consts.d.ts +7 -13
  472. package/build/slot/consts.d.ts.map +1 -1
  473. package/build/slot/consts.js +10 -36
  474. package/build/slot/consts.js.map +1 -1
  475. package/build/slot/helpers.d.ts +3 -22
  476. package/build/slot/helpers.d.ts.map +1 -1
  477. package/build/slot/helpers.js +5 -26
  478. package/build/slot/helpers.js.map +1 -1
  479. package/build/slot/index.d.ts +6 -0
  480. package/build/slot/index.d.ts.map +1 -1
  481. package/build/slot/index.js +3 -0
  482. package/build/slot/index.js.map +1 -1
  483. package/build/slot/layout/types.d.ts +17 -0
  484. package/build/slot/layout/types.d.ts.map +1 -0
  485. package/build/slot/layout/types.js +2 -0
  486. package/build/slot/layout/types.js.map +1 -0
  487. package/build/slot/layout.d.ts +5 -66
  488. package/build/slot/layout.d.ts.map +1 -1
  489. package/build/slot/layout.js +13 -27
  490. package/build/slot/layout.js.map +1 -1
  491. package/build/slot/origin/types.d.ts +23 -0
  492. package/build/slot/origin/types.d.ts.map +1 -0
  493. package/build/slot/origin/types.js +2 -0
  494. package/build/slot/origin/types.js.map +1 -0
  495. package/build/slot/origin.d.ts +4 -0
  496. package/build/slot/origin.d.ts.map +1 -0
  497. package/build/slot/origin.js +15 -0
  498. package/build/slot/origin.js.map +1 -0
  499. package/build/slot/types.d.ts +55 -1
  500. package/build/slot/types.d.ts.map +1 -1
  501. package/build/slot/utils.d.ts +6 -0
  502. package/build/slot/utils.d.ts.map +1 -0
  503. package/build/slot/utils.js +6 -0
  504. package/build/slot/utils.js.map +1 -0
  505. package/build/topology/card/types.d.ts +21 -0
  506. package/build/topology/card/types.d.ts.map +1 -0
  507. package/build/topology/card/types.js +2 -0
  508. package/build/topology/card/types.js.map +1 -0
  509. package/build/topology/card.d.ts +7 -19
  510. package/build/topology/card.d.ts.map +1 -1
  511. package/build/topology/card.js +84 -89
  512. package/build/topology/card.js.map +1 -1
  513. package/build/topology/consts.local.d.ts +4 -0
  514. package/build/topology/consts.local.d.ts.map +1 -0
  515. package/build/topology/consts.local.js +4 -0
  516. package/build/topology/consts.local.js.map +1 -0
  517. package/build/topology/helpers.d.ts +7 -33
  518. package/build/topology/helpers.d.ts.map +1 -1
  519. package/build/topology/helpers.js +15 -111
  520. package/build/topology/helpers.js.map +1 -1
  521. package/build/topology/index.d.ts +3 -0
  522. package/build/topology/index.d.ts.map +1 -1
  523. package/build/topology/index.js +1 -0
  524. package/build/topology/index.js.map +1 -1
  525. package/build/topology/resolve/types.d.ts +47 -0
  526. package/build/topology/resolve/types.d.ts.map +1 -0
  527. package/build/topology/resolve/types.js +2 -0
  528. package/build/topology/resolve/types.js.map +1 -0
  529. package/build/topology/resolve.d.ts +4 -0
  530. package/build/topology/resolve.d.ts.map +1 -0
  531. package/build/topology/resolve.js +89 -0
  532. package/build/topology/resolve.js.map +1 -0
  533. package/build/topology/types.d.ts +5 -0
  534. package/build/topology/types.d.ts.map +1 -1
  535. package/package.json +13 -13
  536. package/src/agent/consts.local.ts +47 -0
  537. package/src/agent/consts.ts +61 -0
  538. package/src/agent/index.ts +2 -0
  539. package/src/agent/presentation/types.ts +21 -0
  540. package/src/agent/presentation.ts +200 -309
  541. package/src/agent/types.local.ts +3 -0
  542. package/src/agent/types.ts +40 -0
  543. package/src/areas/consts.ts +7 -0
  544. package/src/areas/index.ts +1 -0
  545. package/src/areas/tenancy/types.ts +23 -0
  546. package/src/areas/tenancy.ts +26 -61
  547. package/src/areas/types.ts +31 -0
  548. package/src/ba/connecting/types.ts +45 -0
  549. package/src/ba/connecting.ts +64 -0
  550. package/src/ba/helpers.ts +8 -92
  551. package/src/ba/index.ts +2 -0
  552. package/src/ba/types.ts +1 -1
  553. package/src/blueprint/consts.local.ts +3 -0
  554. package/src/blueprint/consts.ts +52 -0
  555. package/src/blueprint/index.ts +1 -0
  556. package/src/blueprint/types.ts +4 -74
  557. package/src/blueprint/utils.ts +20 -0
  558. package/src/branding.ts +0 -17
  559. package/src/connect/branding/types.ts +29 -0
  560. package/src/connect/consts.ts +3 -22
  561. package/src/connect/conversion/types.ts +96 -0
  562. package/src/connect/entrypoints/types.ts +25 -0
  563. package/src/connect/entrypoints.ts +18 -35
  564. package/src/connect/errors/types.ts +22 -0
  565. package/src/connect/errors.ts +75 -0
  566. package/src/connect/index.ts +13 -2
  567. package/src/connect/kit/types.ts +56 -0
  568. package/src/connect/model-tier/types.ts +16 -0
  569. package/src/connect/model-tier.ts +22 -0
  570. package/src/connect/{ops.ts → ops/types.ts} +13 -3
  571. package/src/connect/pipeline/types.ts +41 -0
  572. package/src/connect/project/types.ts +127 -0
  573. package/src/connect/references/types.local.ts +5 -0
  574. package/src/connect/references/types.ts +73 -0
  575. package/src/connect/references.ts +15 -75
  576. package/src/connect/schemas.ts +19 -12
  577. package/src/connect/session/types.ts +81 -0
  578. package/src/connect/settings/types.ts +52 -0
  579. package/src/consts.ts +17 -0
  580. package/src/convert/analysis/types.ts +89 -0
  581. package/src/convert/census/consts.local.ts +120 -0
  582. package/src/convert/census/types.ts +181 -0
  583. package/src/convert/census.ts +95 -0
  584. package/src/convert/consts.ts +5 -14
  585. package/src/convert/detection/types.ts +74 -0
  586. package/src/convert/docs/types.ts +151 -0
  587. package/src/convert/docs.ts +15 -0
  588. package/src/convert/estimate/types.ts +75 -0
  589. package/src/convert/estimate.ts +19 -0
  590. package/src/convert/helpers.ts +29 -328
  591. package/src/convert/index.ts +15 -0
  592. package/src/convert/origin/types.ts +43 -0
  593. package/src/convert/origin.ts +33 -0
  594. package/src/convert/record/types.ts +105 -0
  595. package/src/convert/schemas.ts +13 -12
  596. package/src/convert/stage/types.ts +27 -0
  597. package/src/convert/stage.ts +31 -0
  598. package/src/convert/taxonomy/types.ts +74 -0
  599. package/src/convert/types.ts +5 -703
  600. package/src/convert/utils.ts +7 -0
  601. package/src/design/consts.ts +48 -0
  602. package/src/design/helpers.ts +20 -245
  603. package/src/design/index.ts +3 -0
  604. package/src/design/runtime/types.ts +14 -0
  605. package/src/design/runtime.ts +18 -116
  606. package/src/design/schemas.ts +2 -10
  607. package/src/design/story/types.ts +67 -0
  608. package/src/design/story.ts +221 -0
  609. package/src/design/types.ts +81 -1
  610. package/src/dev/schemas.ts +1 -3
  611. package/src/dev/types.local.ts +4 -0
  612. package/src/integrity/consts.local.ts +5 -0
  613. package/src/integrity/consts.ts +0 -348
  614. package/src/integrity/index.ts +5 -0
  615. package/src/integrity/layout/consts.local.ts +188 -0
  616. package/src/integrity/layout/consts.ts +79 -0
  617. package/src/integrity/layout/types.ts +35 -0
  618. package/src/integrity/layout.ts +39 -0
  619. package/src/integrity/types.ts +37 -2
  620. package/src/integrity/utils.ts +21 -0
  621. package/src/integrity/verify/types.ts +26 -0
  622. package/src/integrity/verify.ts +178 -184
  623. package/src/intent/consts.ts +67 -0
  624. package/src/intent/entrypoints.ts +2 -3
  625. package/src/intent/index.ts +0 -1
  626. package/src/intent/types.ts +10 -0
  627. package/src/metadata/consts.ts +37 -0
  628. package/src/metadata/types.ts +1 -37
  629. package/src/moderation/index.ts +2 -0
  630. package/src/moderation/utils.ts +7 -30
  631. package/src/moderation/verdict/types.ts +22 -0
  632. package/src/moderation/verdict.ts +28 -0
  633. package/src/planning/card/types.ts +44 -0
  634. package/src/planning/card.ts +77 -0
  635. package/src/planning/consts.ts +15 -2
  636. package/src/planning/helpers.ts +28 -116
  637. package/src/planning/index.ts +5 -1
  638. package/src/planning/landing/types.ts +15 -0
  639. package/src/planning/landing.ts +28 -38
  640. package/src/planning/schemas.ts +191 -4
  641. package/src/planning/spec/types.ts +22 -0
  642. package/src/planning/spec.ts +41 -0
  643. package/src/planning/types.ts +6 -6
  644. package/src/preview/consts.ts +2 -0
  645. package/src/preview/types.ts +19 -0
  646. package/src/scaffold/consts.ts +65 -1
  647. package/src/scaffold/helpers.ts +14 -80
  648. package/src/scaffold/index.ts +4 -0
  649. package/src/scaffold/landing/types.ts +48 -0
  650. package/src/scaffold/landing.ts +120 -0
  651. package/src/scaffold/schemas.ts +183 -7
  652. package/src/scaffold/share/types.ts +35 -0
  653. package/src/scaffold/share.ts +60 -0
  654. package/src/scaffold/types.ts +123 -1
  655. package/src/skills/consts.ts +46 -0
  656. package/src/skills/index.ts +0 -1
  657. package/src/slot/command/types.ts +21 -0
  658. package/src/slot/command.ts +38 -0
  659. package/src/slot/consts.ts +11 -40
  660. package/src/slot/helpers.ts +6 -31
  661. package/src/slot/index.ts +6 -0
  662. package/src/slot/layout/types.ts +17 -0
  663. package/src/slot/layout.ts +19 -77
  664. package/src/slot/origin/types.ts +23 -0
  665. package/src/slot/origin.ts +20 -0
  666. package/src/slot/types.ts +58 -1
  667. package/src/slot/utils.ts +10 -0
  668. package/src/topology/card/types.ts +21 -0
  669. package/src/topology/card.ts +85 -90
  670. package/src/topology/consts.local.ts +6 -0
  671. package/src/topology/helpers.ts +20 -125
  672. package/src/topology/index.ts +3 -0
  673. package/src/topology/resolve/types.ts +47 -0
  674. package/src/topology/resolve.ts +118 -0
  675. package/src/topology/types.ts +6 -0
  676. package/tests/blueprint.spec.ts +1 -2
  677. package/tests/branding.spec.ts +2 -2
  678. package/tests/connect-convert.spec.ts +21 -1
  679. package/tests/connect-errors.spec.ts +34 -1
  680. package/tests/convert.spec.ts +51 -52
  681. package/tests/design.spec.ts +13 -16
  682. package/tests/error-status.spec.ts +7 -1
  683. package/tests/planning.spec.ts +58 -75
  684. package/tests/presentation.spec.ts +21 -23
  685. package/tests/scaffold.spec.ts +286 -6
  686. package/tests/tenancy.spec.ts +21 -21
  687. package/build/connect/ops.d.ts.map +0 -1
  688. package/build/connect/ops.js +0 -2
  689. package/build/connect/ops.js.map +0 -1
  690. package/build/connect/types.d.ts +0 -437
  691. package/build/connect/types.d.ts.map +0 -1
  692. package/build/intent/flow.d.ts +0 -17
  693. package/build/intent/flow.d.ts.map +0 -1
  694. package/build/intent/flow.js +0 -65
  695. package/build/intent/flow.js.map +0 -1
  696. package/build/planning/flows.d.ts +0 -34
  697. package/build/planning/flows.d.ts.map +0 -1
  698. package/build/planning/flows.js +0 -174
  699. package/build/planning/flows.js.map +0 -1
  700. package/build/skills/roles.d.ts +0 -43
  701. package/build/skills/roles.d.ts.map +0 -1
  702. package/build/skills/roles.js +0 -44
  703. package/build/skills/roles.js.map +0 -1
  704. package/src/connect/types.ts +0 -466
  705. package/src/intent/flow.ts +0 -67
  706. package/src/planning/flows.ts +0 -204
  707. package/src/skills/roles.ts +0 -46
  708. /package/build/{connect → agent/presentation}/types.js +0 -0
@@ -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()
@@ -198,6 +198,90 @@ export interface LandingGateAnswer {
198
198
  note: string
199
199
  }
200
200
 
201
+ /**
202
+ * A band of the landing page that the header menu can jump to — the `id` its section carries.
203
+ * A CLOSED set: each value is one stamped band, so a value nothing draws is a menu entry that
204
+ * scrolls nowhere. `LANDING_ANCHOR_BAND` maps each to its band.
205
+ */
206
+ export type LandingAnchor = 'how' | 'features' | 'use-cases' | 'why' | 'approach' | 'community' | 'about'
207
+
208
+ /**
209
+ * The bands a landing page can carry, named in the house order `LANDING_BAND_ORDER` declares.
210
+ * `problem` is the problem-and-solution band. Which of them a page draws is `landingBandsOf`.
211
+ */
212
+ export type LandingBand =
213
+ | 'hero' | 'steps' | 'features' | 'use-cases' | 'problem' | 'differentiator' | 'approach'
214
+ | 'testimonials' | 'about' | 'closing'
215
+
216
+ /**
217
+ * A button or link of the landing page that can open a user story — the place a {@link HomeLink}
218
+ * attaches to. Which of them a given page actually draws is `homeSlotsOf`.
219
+ */
220
+ export type LandingSlot =
221
+ | 'hero.cta' | 'hero.secondary' | 'hero.browse'
222
+ | 'closing.primary' | 'closing.secondary' | 'closing.link.1' | 'closing.link.2'
223
+ | 'useCase.1' | 'useCase.2' | 'useCase.3' | 'useCase.4'
224
+
225
+ /** One entry of the guest header menu: a band to jump to and the word it is shown as. */
226
+ export interface LandingMenuEntry {
227
+ anchor: LandingAnchor
228
+ /** 1-2 words in the product's language. */
229
+ label: string
230
+ }
231
+
232
+ /** A home button that opens a user story instead of its default action. */
233
+ export interface HomeLink {
234
+ slot: LandingSlot
235
+ /** The story's CODE. */
236
+ story: string
237
+ }
238
+
239
+ /** One use case of the landing page: who, doing what. */
240
+ export interface LandingUseCase {
241
+ /** Who this case is for, in a few words. */
242
+ audience: string
243
+ title: string
244
+ text: string
245
+ }
246
+
247
+ /**
248
+ * The bands added with the gated landing page carry a `basis`: a passage copied word for word from
249
+ * the person's own words, the specification or the vision. It is checked downstream, and a band
250
+ * whose basis is not found there is removed — the band exists only when its claim has a source.
251
+ */
252
+ export interface LandingUseCases {
253
+ /** Two to four cases. */
254
+ cases: LandingUseCase[]
255
+ basis: string
256
+ }
257
+
258
+ /** "Why us": what this product does differently, as a short usual-vs-ours contrast. */
259
+ export interface LandingDifferentiator {
260
+ title: string
261
+ text: string
262
+ /** Two to three rows, at most six words on each side. */
263
+ contrast: { usual: string, ours: string }[]
264
+ /** The heading over the `usual` column; absent falls back to the stamper's own. */
265
+ usualLabel?: string | null
266
+ /** The heading over the `ours` column; absent falls back to the stamper's own. */
267
+ oursLabel?: string | null
268
+ basis: string
269
+ }
270
+
271
+ /** "How we work": the principles the product is run by, three to four. */
272
+ export interface LandingApproach {
273
+ title?: string | null
274
+ principles: { title: string, text: string }[]
275
+ basis: string
276
+ }
277
+
278
+ /** The about band: who is behind the product. */
279
+ export interface LandingAbout {
280
+ title: string
281
+ text: string
282
+ basis: string
283
+ }
284
+
201
285
  /** The guest area's landing page — the product's public face. */
202
286
  export interface GuestHomePlan {
203
287
  hero: {
@@ -219,9 +303,21 @@ export interface GuestHomePlan {
219
303
  solution: { title: string, text: string }
220
304
  /** The bento tiles — four, each optionally anchored by a fragment of the product's interface. */
221
305
  features: { title: string, text: string, fragment?: BentoFragment }[]
222
- testimonials: { quote: string, name: string, role: string }[]
306
+ /**
307
+ * None or exactly two. Optional since the gated landing page: a plan stored before carries it,
308
+ * and a product whose end users do not choose it for themselves leaves it out.
309
+ */
310
+ testimonials?: { quote: string, name: string, role: string }[] | null
223
311
  /** "How it works" — three steps taken from the main flow. */
224
312
  steps?: { title: string, text: string }[]
313
+ /** Who it is for, case by case. */
314
+ useCases?: LandingUseCases | null
315
+ /** "Why us". */
316
+ differentiator?: LandingDifferentiator | null
317
+ /** "How we work". */
318
+ approach?: LandingApproach | null
319
+ /** Who is behind the product. */
320
+ about?: LandingAbout | null
225
321
  /** The small section labels and section headings; absent ones fall back to the stamper's own. */
226
322
  labels?: {
227
323
  steps?: string
@@ -232,7 +328,30 @@ export interface GuestHomePlan {
232
328
  testimonialsTitle?: string
233
329
  problem?: string
234
330
  solution?: string
331
+ useCases?: string | null
332
+ useCasesTitle?: string | null
333
+ differentiator?: string | null
334
+ approach?: string | null
335
+ approachTitle?: string | null
336
+ about?: string | null
235
337
  }
338
+ /**
339
+ * The guest header menu — two to four bands to jump to. Entries whose band the page does not
340
+ * draw are dropped; `landingMenuOf` is the one reading of it.
341
+ */
342
+ menu?: LandingMenuEntry[] | null
343
+ /**
344
+ * Which home buttons open which user story. Absent or `null` means NOT DECIDED yet; `[]` means
345
+ * decided: none. A slot the page does not draw (`homeSlotsOf`) is ignored.
346
+ */
347
+ links?: HomeLink[] | null
348
+ /**
349
+ * The story codes whose links were decided at DEVELOPMENT time, one per story asked — a decision
350
+ * of "no control" included. Absent (or `null`) on a plan whose links the planner decided: then
351
+ * {@link GuestHomePlan.links} speaks for every story of the plan. Written by code, never asked of
352
+ * the model.
353
+ */
354
+ linksDecided?: string[] | null
236
355
  /** The closing band: a headline, a lead, the two pills and two link cards. */
237
356
  closing?: {
238
357
  headline: string
@@ -266,3 +385,6 @@ export interface ScaffoldPlan {
266
385
  */
267
386
  motifs: string
268
387
  }
388
+
389
+ /** Which field the arrow is being followed along. */
390
+ export type ShareKind = 'widget' | 'screen'