@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,219 +1,215 @@
1
1
  import { IntegrityRule, TARGET_FORBIDDEN_SCRIPTS, TARGET_SLUG_PATTERN } from './consts.js'
2
- import { detectTargetLayout, targetManifest, targetPackageName, targetRequiredDeps } from './utils.js'
2
+ import { targetLayoutHelper } from './layout.js'
3
3
  import type { IntegrityViolation, TargetFileMap, TargetIntegrityReport } from './types.js'
4
-
5
- /**
6
- * Decide whether a tree is the generated application, from its files alone.
7
- *
8
- * Pure and IO-free on purpose. The publisher reads the sandbox and calls this; a test reads
9
- * the template and calls this; both then agree by construction. It is also why the check is
10
- * cheap enough to sit in front of every spawn rather than only at the moments someone
11
- * remembered to guard.
12
- *
13
- * The tree picks the manifest it is verified against. A slot holds the layout it was
14
- * initialized with for the life of the project and nothing migrates it, so asserting the
15
- * current layout unconditionally does not make the check stricter — it aims it at a tree that
16
- * was never there, and every legacy slot answers with one `missing` violation per file it was
17
- * never supposed to have. That refuses the application the platform itself generated.
18
- *
19
- * Every rule collects rather than short-circuits: a tree that fails is usually a person's
20
- * repository, and telling them one thing at a time turns a fix into a dozen round trips
21
- * through a pull that reverts itself each time.
22
- */
23
- export const verifyTargetShape = (files: TargetFileMap): TargetIntegrityReport => {
24
- const violations: IntegrityViolation[] = []
25
- const layout = detectTargetLayout(files)
26
- const manifest = targetManifest(layout)
27
-
28
- // Only this layout's files. The caller reads the union of every layout's list so that the
29
- // probes are in hand before the layout is known — reporting the other layout's paths as
30
- // missing would refuse both trees at once.
31
- for (const path of manifest.files) {
32
- if (files[path] == null) {
33
- violations.push({
34
- path, rule: IntegrityRule.Missing,
35
- detail: `${path} is missing — a Viable project always has it.`
36
- })
4
+ import type { TargetIntegrityHelper } from './verify/types.js'
5
+
6
+ export const createTargetIntegrityHelper = (): TargetIntegrityHelper => {
7
+ const verifyTargetShape = (files: TargetFileMap): TargetIntegrityReport => {
8
+ const violations: IntegrityViolation[] = []
9
+ const layout = targetLayoutHelper.detectTargetLayout(files)
10
+ const manifest = targetLayoutHelper.targetManifest(layout)
11
+
12
+ // Only this layout's files. The caller reads the union of every layout's list so that the
13
+ // probes are in hand before the layout is known — reporting the other layout's paths as
14
+ // missing would refuse both trees at once.
15
+ for (const path of manifest.files) {
16
+ if (files[path] == null) {
17
+ violations.push({
18
+ path, rule: IntegrityRule.Missing,
19
+ detail: `${path} is missing — a Viable project always has it.`
20
+ })
21
+ }
37
22
  }
38
- }
39
-
40
- // The slug is read once, from the root, and every package name is checked against it. A
41
- // project the user renamed is still the project; a package that does not carry the root's
42
- // name is a different tree wearing the workspace layout.
43
- const slug = checkRoot()
44
- checkInstallConfig()
45
- for (const pkg of manifest.packages) {
46
- checkPackage(pkg, slug)
47
- }
48
- checkMarkers()
49
23
 
50
- return { ok: violations.length === 0, violations, layout }
24
+ // The slug is read once, from the root, and every package name is checked against it. A
25
+ // project the user renamed is still the project; a package that does not carry the root's
26
+ // name is a different tree wearing the workspace layout.
27
+ const slug = checkRoot()
28
+ checkInstallConfig()
29
+ for (const pkg of manifest.packages) {
30
+ checkPackage(pkg, slug)
31
+ }
32
+ checkMarkers()
51
33
 
52
- function checkRoot(): string | null {
53
- const found = readJson('package.json')
54
- if (found == null) return null
34
+ return { ok: violations.length === 0, violations, layout }
55
35
 
56
- const name = typeof found.name === 'string' ? found.name : ''
57
- if (!TARGET_SLUG_PATTERN.test(name)) {
58
- violations.push({
59
- path: 'package.json', rule: IntegrityRule.PackageName,
60
- detail: `The root package name "${String(found.name)}" is not a project slug`
61
- + ` — lowercase letters, digits and inner hyphens, up to 32 characters.`
62
- })
63
- }
64
- if (found.type !== 'module') {
65
- violations.push({
66
- path: 'package.json', rule: IntegrityRule.ModuleType,
67
- detail: 'The root package must declare "type": "module".'
68
- })
69
- }
36
+ function checkRoot(): string | null {
37
+ const found = readJson('package.json')
38
+ if (found == null) return null
70
39
 
71
- // The workspace list is what makes the packages resolve to each other. Both spellings are
72
- // the same tree: the glob `create-app` emits, or the entries written out.
73
- const declared = Array.isArray(found.workspaces) ? found.workspaces as string[] : []
74
- const isGlob = declared.length === 1 && declared[0] === manifest.workspaceGlob
75
- const isExplicit = declared.length === manifest.workspaceEntries.length
76
- && manifest.workspaceEntries.every(entry => declared.includes(entry))
77
- if (!isGlob && !isExplicit) {
78
- violations.push({
79
- path: 'package.json', rule: IntegrityRule.Workspaces,
80
- detail: `The root package must declare the workspaces as ["${manifest.workspaceGlob}"]`
81
- + ` or as exactly ${manifest.workspaceEntries.join(', ')}.`
82
- })
83
- }
40
+ const name = typeof found.name === 'string' ? found.name : ''
41
+ if (!TARGET_SLUG_PATTERN.test(name)) {
42
+ violations.push({
43
+ path: 'package.json', rule: IntegrityRule.PackageName,
44
+ detail: `The root package name "${String(found.name)}" is not a project slug`
45
+ + ` — lowercase letters, digits and inner hyphens, up to 32 characters.`
46
+ })
47
+ }
48
+ if (found.type !== 'module') {
49
+ violations.push({
50
+ path: 'package.json', rule: IntegrityRule.ModuleType,
51
+ detail: 'The root package must declare "type": "module".'
52
+ })
53
+ }
84
54
 
85
- checkScripts('package.json', found)
55
+ // The workspace list is what makes the packages resolve to each other. Both spellings are
56
+ // the same tree: the glob `create-app` emits, or the entries written out.
57
+ const declared = Array.isArray(found.workspaces) ? found.workspaces as string[] : []
58
+ const isGlob = declared.length === 1 && declared[0] === manifest.workspaceGlob
59
+ const isExplicit = declared.length === manifest.workspaceEntries.length
60
+ && manifest.workspaceEntries.every(entry => declared.includes(entry))
61
+ if (!isGlob && !isExplicit) {
62
+ violations.push({
63
+ path: 'package.json', rule: IntegrityRule.Workspaces,
64
+ detail: `The root package must declare the workspaces as ["${manifest.workspaceGlob}"]`
65
+ + ` or as exactly ${manifest.workspaceEntries.join(', ')}.`
66
+ })
67
+ }
86
68
 
87
- return TARGET_SLUG_PATTERN.test(name) ? name : null
88
- }
69
+ checkScripts('package.json', found)
89
70
 
90
- /**
91
- * `bunfig.toml` decides where `bun install` fetches from and how it links.
92
- *
93
- * A registry line pointed elsewhere makes every dependency in the tree arbitrary code
94
- * regardless of how well-formed the manifests are, so it is checked as a shape rather than
95
- * a marker: nothing but the hoisted-linker install block belongs in it.
96
- */
97
- function checkInstallConfig(): void {
98
- const content = files['bunfig.toml']
99
- if (content == null) return
100
-
101
- const offending = content.split('\n')
102
- .map(line => line.trim())
103
- .filter(line => line.length > 0 && !line.startsWith('#'))
104
- .filter(line => !/^\[install\]$/.test(line) && !/^linker\s*=/.test(line))
105
-
106
- if (offending.length > 0) {
107
- violations.push({
108
- path: 'bunfig.toml', rule: IntegrityRule.InstallConfig,
109
- detail: 'bunfig.toml may only declare the hoisted install linker.'
110
- })
71
+ return TARGET_SLUG_PATTERN.test(name) ? name : null
111
72
  }
112
- }
113
73
 
114
- function checkPackage(pkg: string, slug: string | null): void {
115
- const path = `${manifest.dir}/${pkg}/package.json`
116
- const found = readJson(path)
117
- if (found == null) return
118
-
119
- // With no readable slug the name and the workspace dependencies have nothing to be checked
120
- // against; the root violation already says why, and repeating it per package is noise.
121
- if (slug != null) {
122
- const expected = targetPackageName(slug, pkg)
123
- if (found.name !== expected) {
74
+ /**
75
+ * `bunfig.toml` decides where `bun install` fetches from and how it links.
76
+ *
77
+ * A registry line pointed elsewhere makes every dependency in the tree arbitrary code
78
+ * regardless of how well-formed the manifests are, so it is checked as a shape rather than
79
+ * a marker: nothing but the hoisted-linker install block belongs in it.
80
+ */
81
+ function checkInstallConfig(): void {
82
+ const content = files['bunfig.toml']
83
+ if (content == null) return
84
+
85
+ const offending = content.split('\n')
86
+ .map(line => line.trim())
87
+ .filter(line => line.length > 0 && !line.startsWith('#'))
88
+ .filter(line => !/^\[install\]$/.test(line) && !/^linker\s*=/.test(line))
89
+
90
+ if (offending.length > 0) {
124
91
  violations.push({
125
- path, rule: IntegrityRule.PackageName,
126
- detail: `Package must be named "${expected}", not "${String(found.name)}".`
92
+ path: 'bunfig.toml', rule: IntegrityRule.InstallConfig,
93
+ detail: 'bunfig.toml may only declare the hoisted install linker.'
127
94
  })
128
95
  }
129
96
  }
130
- if (found.type !== 'module') {
131
- violations.push({
132
- path, rule: IntegrityRule.ModuleType,
133
- detail: `Package "${pkg}" must declare "type": "module".`
134
- })
135
- }
136
-
137
- const scripts = asRecord(found.scripts)
138
- if (scripts.build !== manifest.buildScripts[pkg]) {
139
- // The one the platform actually spawns.
140
- violations.push({
141
- path, rule: IntegrityRule.BuildScript,
142
- detail: `The build script of "${pkg}" must be exactly \`${manifest.buildScripts[pkg]}\`.`
143
- })
144
- }
145
- checkScripts(path, found)
146
97
 
147
- if (slug == null) return
148
-
149
- const deps = { ...asRecord(found.dependencies), ...asRecord(found.devDependencies) }
150
- for (const dep of targetRequiredDeps(slug, pkg, layout)) {
151
- if (deps[dep] == null) {
98
+ function checkPackage(pkg: string, slug: string | null): void {
99
+ const path = `${manifest.dir}/${pkg}/package.json`
100
+ const found = readJson(path)
101
+ if (found == null) return
102
+
103
+ // With no readable slug the name and the workspace dependencies have nothing to be checked
104
+ // against; the root violation already says why, and repeating it per package is noise.
105
+ if (slug != null) {
106
+ const expected = targetLayoutHelper.targetPackageName(slug, pkg)
107
+ if (found.name !== expected) {
108
+ violations.push({
109
+ path, rule: IntegrityRule.PackageName,
110
+ detail: `Package must be named "${expected}", not "${String(found.name)}".`
111
+ })
112
+ }
113
+ }
114
+ if (found.type !== 'module') {
152
115
  violations.push({
153
- path, rule: IntegrityRule.RequiredDependency,
154
- detail: `Package "${pkg}" must depend on ${dep}.`
116
+ path, rule: IntegrityRule.ModuleType,
117
+ detail: `Package "${pkg}" must declare "type": "module".`
155
118
  })
156
119
  }
157
- }
158
- }
159
120
 
160
- /** Lifecycle hooks run on `bun install`, before anything else has a chance to refuse. */
161
- function checkScripts(path: string, found: Record<string, unknown>): void {
162
- const scripts = asRecord(found.scripts)
163
- for (const hook of TARGET_FORBIDDEN_SCRIPTS) {
164
- if (scripts[hook] != null) {
121
+ const scripts = asRecord(found.scripts)
122
+ if (scripts.build !== manifest.buildScripts[pkg]) {
123
+ // The one the platform actually spawns.
165
124
  violations.push({
166
- path, rule: IntegrityRule.LifecycleScript,
167
- detail: `Lifecycle script "${hook}" is not allowed in a target project.`
125
+ path, rule: IntegrityRule.BuildScript,
126
+ detail: `The build script of "${pkg}" must be exactly \`${manifest.buildScripts[pkg]}\`.`
168
127
  })
169
128
  }
129
+ checkScripts(path, found)
130
+
131
+ if (slug == null) return
132
+
133
+ const deps = { ...asRecord(found.dependencies), ...asRecord(found.devDependencies) }
134
+ for (const dep of targetLayoutHelper.targetRequiredDeps(slug, pkg, layout)) {
135
+ if (deps[dep] == null) {
136
+ violations.push({
137
+ path, rule: IntegrityRule.RequiredDependency,
138
+ detail: `Package "${pkg}" must depend on ${dep}.`
139
+ })
140
+ }
141
+ }
170
142
  }
171
- }
172
143
 
173
- function checkMarkers(): void {
174
- for (const [path, markers] of Object.entries(manifest.markers)) {
175
- const content = files[path]
176
- if (content == null) continue
144
+ /** Lifecycle hooks run on `bun install`, before anything else has a chance to refuse. */
145
+ function checkScripts(path: string, found: Record<string, unknown>): void {
146
+ const scripts = asRecord(found.scripts)
147
+ for (const hook of TARGET_FORBIDDEN_SCRIPTS) {
148
+ if (scripts[hook] != null) {
149
+ violations.push({
150
+ path, rule: IntegrityRule.LifecycleScript,
151
+ detail: `Lifecycle script "${hook}" is not allowed in a target project.`
152
+ })
153
+ }
154
+ }
155
+ }
177
156
 
178
- const absent = markers.filter(marker => !content.includes(marker))
179
- if (absent.length > 0) {
180
- violations.push({
181
- path, rule: IntegrityRule.EntryMarker,
182
- detail: `${path} does not look like the generated app's entry: ${absent.join(', ')} not found.`
183
- })
157
+ function checkMarkers(): void {
158
+ for (const [path, markers] of Object.entries(manifest.markers)) {
159
+ const content = files[path]
160
+ if (content == null) continue
161
+
162
+ const absent = markers.filter(marker => !content.includes(marker))
163
+ if (absent.length > 0) {
164
+ violations.push({
165
+ path, rule: IntegrityRule.EntryMarker,
166
+ detail: `${path} does not look like the generated app's entry: ${absent.join(', ')} not found.`
167
+ })
168
+ }
184
169
  }
185
170
  }
186
- }
187
171
 
188
- function readJson(path: string): Record<string, unknown> | null {
189
- const content = files[path]
190
- if (content == null) return null
191
- try {
192
- const parsed: unknown = JSON.parse(content)
193
-
194
- return typeof parsed === 'object' && parsed !== null
195
- ? parsed as Record<string, unknown>
196
- : reportUnreadable(path)
197
- } catch {
198
- return reportUnreadable(path)
172
+ function readJson(path: string): Record<string, unknown> | null {
173
+ const content = files[path]
174
+ if (content == null) return null
175
+ try {
176
+ const parsed: unknown = JSON.parse(content)
177
+
178
+ return typeof parsed === 'object' && parsed !== null
179
+ ? parsed as Record<string, unknown>
180
+ : reportUnreadable(path)
181
+ } catch {
182
+ return reportUnreadable(path)
183
+ }
199
184
  }
200
- }
201
185
 
202
- function reportUnreadable(path: string): null {
203
- violations.push({
204
- path, rule: IntegrityRule.Unreadable, detail: `${path} is not a readable JSON object.`
205
- })
186
+ function reportUnreadable(path: string): null {
187
+ violations.push({
188
+ path, rule: IntegrityRule.Unreadable, detail: `${path} is not a readable JSON object.`
189
+ })
190
+
191
+ return null
192
+ }
206
193
 
207
- return null
194
+ function asRecord(value: unknown): Record<string, string> {
195
+ return typeof value === 'object' && value !== null
196
+ ? value as Record<string, string>
197
+ : {}
198
+ }
208
199
  }
209
200
 
210
- function asRecord(value: unknown): Record<string, string> {
211
- return typeof value === 'object' && value !== null
212
- ? value as Record<string, string>
213
- : {}
214
- }
201
+ const formatIntegrityReport = (report: TargetIntegrityReport): string =>
202
+ report.violations.map(violation => `${violation.path}: ${violation.detail}`).join('\n')
203
+
204
+ return { verifyTargetShape, formatIntegrityReport }
215
205
  }
216
206
 
217
- /** One line per violation — what goes into a log, `slot.lastError`, or a build diagnostic. */
207
+ export const targetIntegrityHelper = createTargetIntegrityHelper()
208
+
209
+ /** @deprecated compat:factory-refactor — use `targetIntegrityHelper.verifyTargetShape(…)` */
210
+ export const verifyTargetShape = (files: TargetFileMap): TargetIntegrityReport =>
211
+ targetIntegrityHelper.verifyTargetShape(files)
212
+
213
+ /** @deprecated compat:factory-refactor — use `targetIntegrityHelper.formatIntegrityReport(…)` */
218
214
  export const formatIntegrityReport = (report: TargetIntegrityReport): string =>
219
- report.violations.map(violation => `${violation.path}: ${violation.detail}`).join('\n')
215
+ targetIntegrityHelper.formatIntegrityReport(report)
@@ -12,6 +12,10 @@
12
12
  * read the same declarations, and none of them may reinvent a name the others parse.
13
13
  */
14
14
 
15
+ import { DISPATCHER } from '@owlmeans/auth'
16
+ import { HOME } from '@owlmeans/context'
17
+ import type { ShallowFlow } from '@owlmeans/flow'
18
+
15
19
  /** Every address of the hand-off. API routes are guest routes; the landing is a screen. */
16
20
  export const intent = Object.freeze({
17
21
  base: 'viable:manager-api:intent:base',
@@ -64,3 +68,66 @@ export enum IntentFlowStep {
64
68
  /** The platform's home screen, where the draft is offered back. */
65
69
  Review = 'review',
66
70
  }
71
+
72
+ const payloadMap = { [INTENT_PAYLOAD_REF]: 0 }
73
+
74
+ /**
75
+ * The hand-off flow both sides walk.
76
+ *
77
+ * `compose` runs on the public site: the prompt is stashed and `handoff` carries the reference to
78
+ * `land`, whose module is the platform's landing screen — so the site redirects to
79
+ * `land`'s address with the payload as query. The landing then enters at `land` FRESH (the
80
+ * reference arrives as `?ref=`, never as a serialized token, which the platform's own sign-in
81
+ * parses from `?flow=` on every page), and either goes on to `review` (signed in) or parks the flow
82
+ * with `suspendFlow` at `sign-in`, whose non-explicit way forward is `review` — the home screen —
83
+ * so whichever sign-in method finishes lands there.
84
+ *
85
+ * The steps address CONCRETE entrypoint aliases, never `$`-prefixed references: this flow is never
86
+ * the live `FlowService` model and nothing here needs `configureFlows`.
87
+ */
88
+ export const intentFlow: ShallowFlow = {
89
+ flow: INTENT_FLOW,
90
+ initialStep: IntentFlowStep.Compose,
91
+ steps: {
92
+ [IntentFlowStep.Compose]: {
93
+ index: 0,
94
+ step: IntentFlowStep.Compose,
95
+ service: '',
96
+ initial: true,
97
+ payloadMap,
98
+ transitions: {
99
+ handoff: { transition: 'handoff', step: IntentFlowStep.Land },
100
+ },
101
+ },
102
+ [IntentFlowStep.Land]: {
103
+ index: 1,
104
+ step: IntentFlowStep.Land,
105
+ service: '',
106
+ module: intent.landing,
107
+ initial: true,
108
+ payloadMap,
109
+ transitions: {
110
+ review: { transition: 'review', step: IntentFlowStep.Review },
111
+ 'sign-in': { transition: 'sign-in', step: IntentFlowStep.SignIn, explicit: true },
112
+ },
113
+ },
114
+ [IntentFlowStep.SignIn]: {
115
+ index: 2,
116
+ step: IntentFlowStep.SignIn,
117
+ service: '',
118
+ module: DISPATCHER,
119
+ payloadMap,
120
+ transitions: {
121
+ next: { transition: 'next', step: IntentFlowStep.Review },
122
+ },
123
+ },
124
+ [IntentFlowStep.Review]: {
125
+ index: 3,
126
+ step: IntentFlowStep.Review,
127
+ service: '',
128
+ module: HOME,
129
+ payloadMap,
130
+ transitions: {},
131
+ },
132
+ },
133
+ }
@@ -3,7 +3,7 @@ import { frontend, route, RouteMethod } from '@owlmeans/route'
3
3
  import { INTENT_API_PATH, INTENT_LANDING_PATH, intent } from './consts.js'
4
4
  import { IntentPickupBodySchema, IntentStashBodySchema } from './schemas.js'
5
5
  import type {
6
- IntentPickupBody, IntentPickupResult, IntentProtocolOptions, IntentStashBody, IntentStashResult,
6
+ IntentPickupBody, IntentPickupResult, IntentProtocolOptions, IntentProtocols, IntentStashBody, IntentStashResult,
7
7
  } from './types.js'
8
8
 
9
9
  /**
@@ -20,7 +20,7 @@ import type {
20
20
  * The landing screen is `sticky`, like the OAuth consent screens: it is an ordinary in-app screen
21
21
  * that a visitor arrives at directly from another origin.
22
22
  */
23
- export const makeIntentProtocols = (opts: IntentProtocolOptions = {}) => {
23
+ export const makeIntentProtocols = (opts: IntentProtocolOptions = {}): IntentProtocols => {
24
24
  const base = openProtocol(route(intent.base, opts.path ?? INTENT_API_PATH))
25
25
 
26
26
  return {
@@ -2,5 +2,4 @@ export * from './consts.js'
2
2
  export * from './schemas.js'
3
3
  export * from './errors.js'
4
4
  export * from './entrypoints.js'
5
- export * from './flow.js'
6
5
  export type * from './types.js'
@@ -1,5 +1,5 @@
1
+ import type { EntrypointProtocol, OpenRequest, OpenValue } from '@owlmeans/entrypoint'
1
2
  import type { ResourceRecord } from '@owlmeans/resource'
2
- import { makeIntentProtocols } from './entrypoints.js'
3
3
 
4
4
  /** What the public site sends: the prompt and the person's confirmation of its processing. */
5
5
  export interface IntentStashBody {
@@ -45,4 +45,11 @@ export interface IntentProtocolOptions {
45
45
  landing?: string
46
46
  }
47
47
 
48
- export type IntentProtocols = ReturnType<typeof makeIntentProtocols>
48
+ /** The intent-first hand-off tree {@link makeIntentProtocols} declares. */
49
+ export interface IntentProtocols {
50
+ base: EntrypointProtocol<OpenRequest, OpenValue>
51
+ stash: EntrypointProtocol<{ body: IntentStashBody }, IntentStashResult>
52
+ pickup: EntrypointProtocol<{ body: IntentPickupBody }, IntentPickupResult>
53
+ /** The landing screen — `sticky`, an in-app screen a visitor reaches from another origin. */
54
+ landing: EntrypointProtocol<OpenRequest, OpenValue>
55
+ }
@@ -0,0 +1,17 @@
1
+ import type { LegalDocumentDates, LegalDocumentKey } from './types.js'
2
+
3
+ /**
4
+ * The shared dates for the platform's legal acceptance and the public site's legal pages.
5
+ * Changing terms/privacy/billing/product updated dates requires renewed terms acceptance;
6
+ * privacy.updated also revises marketing consent. The other documents are display-only.
7
+ */
8
+ export const OWLMEANS_LEGAL_DATES = {
9
+ terms: { effective: '2026-05-30', updated: '2026-05-30' },
10
+ privacy: { effective: '2026-05-30', updated: '2026-05-30' },
11
+ cookies: { effective: '2026-09-24', updated: '2026-09-25' },
12
+ 'services-agreement': { effective: '2026-10-04', updated: '2026-10-04' },
13
+ 'platform-license': { effective: '2026-10-04', updated: '2026-10-04' },
14
+ // These documents date the platform's sign-in terms line without public-site pages yet.
15
+ billing: { effective: '2026-05-30', updated: '2026-05-30' },
16
+ product: { effective: '2026-05-30', updated: '2026-05-30' },
17
+ } as const satisfies Record<LegalDocumentKey, LegalDocumentDates>
@@ -0,0 +1,2 @@
1
+ export * from './consts.js'
2
+ export type * from './types.js'
@@ -0,0 +1,11 @@
1
+ /** ISO YYYY-MM-DD dates, formatted for the reader's locale by the consumer. */
2
+ export interface LegalDocumentDates {
3
+ /** The day this version of the document takes effect. */
4
+ effective: string
5
+ /** The day this version of the document was last edited. */
6
+ updated: string
7
+ }
8
+
9
+ /** The complete document set; the date table must cover every key. */
10
+ // Kept as a type: a union of the document keys.
11
+ export type LegalDocumentKey = 'terms' | 'privacy' | 'cookies' | 'services-agreement' | 'platform-license' | 'billing' | 'product'
@@ -1,4 +1,6 @@
1
1
  export * from './consts.js'
2
2
  export * from './schemas.js'
3
+ export * from './verdict.js'
3
4
  export * from './utils.js'
4
5
  export type * from './types.js'
6
+ export type * from './verdict/types.js'
@@ -1,35 +1,12 @@
1
- import { ModerationCategory } from './consts.js'
1
+ import type { ModerationCategory } from './consts.js'
2
2
  import type { ModerationAction, ModerationPolicy, ModerationVerdict } from './types.js'
3
+ import { moderationVerdictHelper } from './verdict.js'
3
4
 
4
- /**
5
- * Narrow whatever the model put in `category` to a real one, or to nothing.
6
- *
7
- * The wire field is a free string on purpose — see {@link ModerationVerdictSchema}. A model
8
- * that is allowing has nothing to categorise and still fills the field, so anything
9
- * unrecognized is treated as absent rather than as a failure.
10
- */
11
- export const normalizeCategory = (category?: string): ModerationCategory | undefined => {
12
- const values = Object.values(ModerationCategory) as string[]
5
+ /** @deprecated compat:factory-refactor — use `moderationVerdictHelper.normalizeCategory(…)` */
6
+ export const normalizeCategory = (category?: string): ModerationCategory | undefined =>
7
+ moderationVerdictHelper.normalizeCategory(category)
13
8
 
14
- return category != null && values.includes(category)
15
- ? category as ModerationCategory
16
- : undefined
17
- }
18
-
19
- /**
20
- * What to do about a verdict.
21
- *
22
- * Pure, because this is the part with the operational levers on it and the part most likely
23
- * to be wrong in a hurry: `enforce` turns the whole gate into an observer without a deploy,
24
- * and `bypassEntities` releases one entity when a real customer is wrongly refused.
25
- */
9
+ /** @deprecated compat:factory-refactor — use `moderationVerdictHelper.decideModeration(…)` */
26
10
  export const decideModeration = (
27
11
  verdict: ModerationVerdict, policy: ModerationPolicy & { entityId?: string } = {}
28
- ): ModerationAction => {
29
- if (verdict.allowed) return 'allow'
30
- if (policy.entityId != null && policy.bypassEntities?.includes(policy.entityId) === true) return 'allow'
31
-
32
- // Defaults to ON: a gate that has to be switched on is a gate that is off in every
33
- // environment nobody remembered to configure.
34
- return policy.enforce !== false ? 'refuse' : 'shadow'
35
- }
12
+ ): ModerationAction => moderationVerdictHelper.decideModeration(verdict, policy)
@@ -0,0 +1,22 @@
1
+ import type { ModerationCategory } from '../consts.js'
2
+ import type { ModerationAction, ModerationPolicy, ModerationVerdict } from '../types.js'
3
+
4
+ /** Reading a moderation verdict: its category, and what to do about it. */
5
+ export interface ModerationVerdictHelper {
6
+ /**
7
+ * Narrow whatever the model put in `category` to a real one, or to nothing.
8
+ *
9
+ * The wire field is a free string on purpose — see {@link ModerationVerdictSchema}. A model
10
+ * that is allowing has nothing to categorise and still fills the field, so anything
11
+ * unrecognized is treated as absent rather than as a failure.
12
+ */
13
+ normalizeCategory: (category?: string) => ModerationCategory | undefined
14
+ /**
15
+ * What to do about a verdict.
16
+ *
17
+ * Pure, because this is the part with the operational levers on it and the part most likely
18
+ * to be wrong in a hurry: `enforce` turns the whole gate into an observer without a deploy,
19
+ * and `bypassEntities` releases one entity when a real customer is wrongly refused.
20
+ */
21
+ decideModeration: (verdict: ModerationVerdict, policy?: ModerationPolicy & { entityId?: string }) => ModerationAction
22
+ }