@owlmeans/viable-common 0.0.44 → 0.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/README.md +3 -3
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/agent-presentation/SKILL.md +4 -4
  4. package/agent-meta/skills/viable-common/SKILL.md +40 -28
  5. package/build/agent/index.d.ts +1 -0
  6. package/build/agent/index.d.ts.map +1 -1
  7. package/build/agent/index.js.map +1 -1
  8. package/build/agent/presentation/types.d.ts +21 -0
  9. package/build/agent/presentation/types.d.ts.map +1 -0
  10. package/build/agent/presentation/types.js.map +1 -0
  11. package/build/agent/presentation.d.ts +10 -8
  12. package/build/agent/presentation.d.ts.map +1 -1
  13. package/build/agent/presentation.js +216 -195
  14. package/build/agent/presentation.js.map +1 -1
  15. package/build/agent/types.local.d.ts +3 -1
  16. package/build/agent/types.local.d.ts.map +1 -1
  17. package/build/areas/index.d.ts +1 -0
  18. package/build/areas/index.d.ts.map +1 -1
  19. package/build/areas/index.js.map +1 -1
  20. package/build/areas/tenancy/types.d.ts +23 -0
  21. package/build/areas/tenancy/types.d.ts.map +1 -0
  22. package/build/areas/tenancy/types.js +2 -0
  23. package/build/areas/tenancy/types.js.map +1 -0
  24. package/build/areas/tenancy.d.ts +5 -14
  25. package/build/areas/tenancy.d.ts.map +1 -1
  26. package/build/areas/tenancy.js +20 -26
  27. package/build/areas/tenancy.js.map +1 -1
  28. package/build/ba/connecting/types.d.ts +45 -0
  29. package/build/ba/connecting/types.d.ts.map +1 -0
  30. package/build/ba/connecting/types.js +2 -0
  31. package/build/ba/connecting/types.js.map +1 -0
  32. package/build/ba/connecting.d.ts +4 -0
  33. package/build/ba/connecting.d.ts.map +1 -0
  34. package/build/ba/connecting.js +47 -0
  35. package/build/ba/connecting.js.map +1 -0
  36. package/build/ba/helpers.d.ts +4 -39
  37. package/build/ba/helpers.d.ts.map +1 -1
  38. package/build/ba/helpers.js +5 -79
  39. package/build/ba/helpers.js.map +1 -1
  40. package/build/ba/index.d.ts +2 -0
  41. package/build/ba/index.d.ts.map +1 -1
  42. package/build/ba/index.js +1 -0
  43. package/build/ba/index.js.map +1 -1
  44. package/build/blueprint/types.d.ts +1 -2
  45. package/build/blueprint/types.d.ts.map +1 -1
  46. package/build/connect/branding/types.d.ts +28 -0
  47. package/build/connect/branding/types.d.ts.map +1 -0
  48. package/build/connect/branding/types.js +2 -0
  49. package/build/connect/branding/types.js.map +1 -0
  50. package/build/connect/consts.d.ts +2 -0
  51. package/build/connect/consts.d.ts.map +1 -1
  52. package/build/connect/consts.js +2 -0
  53. package/build/connect/consts.js.map +1 -1
  54. package/build/connect/conversion/types.d.ts +93 -0
  55. package/build/connect/conversion/types.d.ts.map +1 -0
  56. package/build/connect/conversion/types.js +2 -0
  57. package/build/connect/conversion/types.js.map +1 -0
  58. package/build/connect/entrypoints/types.d.ts +30 -0
  59. package/build/connect/entrypoints/types.d.ts.map +1 -0
  60. package/build/connect/entrypoints/types.js +2 -0
  61. package/build/connect/entrypoints/types.js.map +1 -0
  62. package/build/connect/entrypoints.d.ts +17 -11
  63. package/build/connect/entrypoints.d.ts.map +1 -1
  64. package/build/connect/entrypoints.js.map +1 -1
  65. package/build/connect/errors/types.d.ts +20 -0
  66. package/build/connect/errors/types.d.ts.map +1 -0
  67. package/build/connect/errors/types.js +2 -0
  68. package/build/connect/errors/types.js.map +1 -0
  69. package/build/connect/errors.d.ts +1 -1
  70. package/build/connect/errors.d.ts.map +1 -1
  71. package/build/connect/index.d.ts +13 -3
  72. package/build/connect/index.d.ts.map +1 -1
  73. package/build/connect/index.js +1 -1
  74. package/build/connect/index.js.map +1 -1
  75. package/build/connect/kit/types.d.ts +52 -0
  76. package/build/connect/kit/types.d.ts.map +1 -0
  77. package/build/connect/kit/types.js +2 -0
  78. package/build/connect/{types.js.map → kit/types.js.map} +1 -1
  79. package/build/connect/model-tier/types.d.ts +16 -0
  80. package/build/connect/model-tier/types.d.ts.map +1 -0
  81. package/build/connect/model-tier/types.js +2 -0
  82. package/build/connect/model-tier/types.js.map +1 -0
  83. package/build/connect/model-tier.d.ts +4 -0
  84. package/build/connect/model-tier.d.ts.map +1 -0
  85. package/build/connect/model-tier.js +21 -0
  86. package/build/connect/model-tier.js.map +1 -0
  87. package/build/connect/{ops.d.ts → ops/types.d.ts} +13 -4
  88. package/build/connect/ops/types.d.ts.map +1 -0
  89. package/build/connect/ops/types.js +2 -0
  90. package/build/connect/ops/types.js.map +1 -0
  91. package/build/connect/pipeline/types.d.ts +39 -0
  92. package/build/connect/pipeline/types.d.ts.map +1 -0
  93. package/build/connect/pipeline/types.js +2 -0
  94. package/build/connect/pipeline/types.js.map +1 -0
  95. package/build/connect/project/types.d.ts +127 -0
  96. package/build/connect/project/types.d.ts.map +1 -0
  97. package/build/connect/project/types.js +2 -0
  98. package/build/connect/project/types.js.map +1 -0
  99. package/build/connect/references/types.d.ts +157 -0
  100. package/build/connect/references/types.d.ts.map +1 -0
  101. package/build/connect/references/types.js +2 -0
  102. package/build/connect/references/types.js.map +1 -0
  103. package/build/connect/references/types.local.d.ts +5 -0
  104. package/build/connect/references/types.local.d.ts.map +1 -0
  105. package/build/connect/references/types.local.js.map +1 -0
  106. package/build/connect/references.d.ts +1 -1
  107. package/build/connect/references.d.ts.map +1 -1
  108. package/build/connect/references.js.map +1 -1
  109. package/build/connect/schemas.d.ts +8 -5
  110. package/build/connect/schemas.d.ts.map +1 -1
  111. package/build/connect/schemas.js +1 -3
  112. package/build/connect/schemas.js.map +1 -1
  113. package/build/connect/session/types.d.ts +73 -0
  114. package/build/connect/session/types.d.ts.map +1 -0
  115. package/build/connect/session/types.js +2 -0
  116. package/build/connect/session/types.js.map +1 -0
  117. package/build/connect/settings/types.d.ts +48 -0
  118. package/build/connect/settings/types.d.ts.map +1 -0
  119. package/build/connect/settings/types.js +2 -0
  120. package/build/connect/settings/types.js.map +1 -0
  121. package/build/convert/analysis/types.d.ts +93 -0
  122. package/build/convert/analysis/types.d.ts.map +1 -0
  123. package/build/convert/analysis/types.js +2 -0
  124. package/build/convert/analysis/types.js.map +1 -0
  125. package/build/convert/{consts.local.d.ts → census/consts.local.d.ts} +1 -1
  126. package/build/convert/census/consts.local.d.ts.map +1 -0
  127. package/build/convert/{consts.local.js → census/consts.local.js} +1 -1
  128. package/build/convert/census/consts.local.js.map +1 -0
  129. package/build/convert/census/types.d.ts +176 -0
  130. package/build/convert/census/types.d.ts.map +1 -0
  131. package/build/convert/census/types.js +2 -0
  132. package/build/convert/census/types.js.map +1 -0
  133. package/build/convert/census.d.ts +4 -0
  134. package/build/convert/census.d.ts.map +1 -0
  135. package/build/convert/census.js +83 -0
  136. package/build/convert/census.js.map +1 -0
  137. package/build/convert/consts.d.ts +4 -0
  138. package/build/convert/consts.d.ts.map +1 -1
  139. package/build/convert/consts.js +4 -0
  140. package/build/convert/consts.js.map +1 -1
  141. package/build/convert/detection/types.d.ts +67 -0
  142. package/build/convert/detection/types.d.ts.map +1 -0
  143. package/build/convert/detection/types.js +2 -0
  144. package/build/convert/detection/types.js.map +1 -0
  145. package/build/convert/docs/types.d.ts +129 -0
  146. package/build/convert/docs/types.d.ts.map +1 -0
  147. package/build/convert/docs/types.js +2 -0
  148. package/build/convert/docs/types.js.map +1 -0
  149. package/build/convert/docs.d.ts +4 -0
  150. package/build/convert/docs.d.ts.map +1 -0
  151. package/build/convert/docs.js +9 -0
  152. package/build/convert/docs.js.map +1 -0
  153. package/build/convert/estimate/types.d.ts +77 -0
  154. package/build/convert/estimate/types.d.ts.map +1 -0
  155. package/build/convert/estimate/types.js +2 -0
  156. package/build/convert/estimate/types.js.map +1 -0
  157. package/build/convert/estimate.d.ts +11 -0
  158. package/build/convert/estimate.d.ts.map +1 -0
  159. package/build/convert/estimate.js +18 -0
  160. package/build/convert/estimate.js.map +1 -0
  161. package/build/convert/helpers.d.ts +14 -78
  162. package/build/convert/helpers.d.ts.map +1 -1
  163. package/build/convert/helpers.js +27 -199
  164. package/build/convert/helpers.js.map +1 -1
  165. package/build/convert/index.d.ts +14 -0
  166. package/build/convert/index.d.ts.map +1 -1
  167. package/build/convert/index.js +5 -0
  168. package/build/convert/index.js.map +1 -1
  169. package/build/convert/origin/types.d.ts +41 -0
  170. package/build/convert/origin/types.d.ts.map +1 -0
  171. package/build/convert/origin/types.js +2 -0
  172. package/build/convert/origin/types.js.map +1 -0
  173. package/build/convert/origin.d.ts +4 -0
  174. package/build/convert/origin.d.ts.map +1 -0
  175. package/build/convert/origin.js +25 -0
  176. package/build/convert/origin.js.map +1 -0
  177. package/build/convert/record/types.d.ts +98 -0
  178. package/build/convert/record/types.d.ts.map +1 -0
  179. package/build/convert/record/types.js +2 -0
  180. package/build/convert/record/types.js.map +1 -0
  181. package/build/convert/schemas.d.ts +7 -6
  182. package/build/convert/schemas.d.ts.map +1 -1
  183. package/build/convert/schemas.js +1 -5
  184. package/build/convert/schemas.js.map +1 -1
  185. package/build/convert/stage/types.d.ts +27 -0
  186. package/build/convert/stage/types.d.ts.map +1 -0
  187. package/build/convert/stage/types.js +2 -0
  188. package/build/convert/stage/types.js.map +1 -0
  189. package/build/convert/stage.d.ts +4 -0
  190. package/build/convert/stage.d.ts.map +1 -0
  191. package/build/convert/stage.js +25 -0
  192. package/build/convert/stage.js.map +1 -0
  193. package/build/convert/taxonomy/types.d.ts +71 -0
  194. package/build/convert/taxonomy/types.d.ts.map +1 -0
  195. package/build/convert/taxonomy/types.js +2 -0
  196. package/build/convert/taxonomy/types.js.map +1 -0
  197. package/build/convert/types.d.ts +1 -657
  198. package/build/convert/types.d.ts.map +1 -1
  199. package/build/convert/utils.d.ts +2 -1
  200. package/build/convert/utils.d.ts.map +1 -1
  201. package/build/convert/utils.js +5 -4
  202. package/build/convert/utils.js.map +1 -1
  203. package/build/design/helpers.d.ts +9 -49
  204. package/build/design/helpers.d.ts.map +1 -1
  205. package/build/design/helpers.js +17 -224
  206. package/build/design/helpers.js.map +1 -1
  207. package/build/design/index.d.ts +3 -0
  208. package/build/design/index.d.ts.map +1 -1
  209. package/build/design/index.js +1 -0
  210. package/build/design/index.js.map +1 -1
  211. package/build/design/runtime/types.d.ts +16 -0
  212. package/build/design/runtime/types.d.ts.map +1 -0
  213. package/build/design/runtime/types.js +2 -0
  214. package/build/design/runtime/types.js.map +1 -0
  215. package/build/design/runtime.d.ts +6 -2
  216. package/build/design/runtime.d.ts.map +1 -1
  217. package/build/design/runtime.js +13 -5
  218. package/build/design/runtime.js.map +1 -1
  219. package/build/design/story/types.d.ts +67 -0
  220. package/build/design/story/types.d.ts.map +1 -0
  221. package/build/design/story/types.js +2 -0
  222. package/build/design/story/types.js.map +1 -0
  223. package/build/design/story.d.ts +4 -0
  224. package/build/design/story.d.ts.map +1 -0
  225. package/build/design/story.js +184 -0
  226. package/build/design/story.js.map +1 -0
  227. package/build/dev/types.local.d.ts +2 -1
  228. package/build/dev/types.local.d.ts.map +1 -1
  229. package/build/integrity/index.d.ts +4 -0
  230. package/build/integrity/index.d.ts.map +1 -1
  231. package/build/integrity/index.js +2 -0
  232. package/build/integrity/index.js.map +1 -1
  233. package/build/integrity/layout/consts.d.ts +59 -0
  234. package/build/integrity/layout/consts.d.ts.map +1 -0
  235. package/build/integrity/layout/consts.js +66 -0
  236. package/build/integrity/layout/consts.js.map +1 -0
  237. package/build/integrity/layout/consts.local.d.ts +18 -0
  238. package/build/integrity/layout/consts.local.d.ts.map +1 -0
  239. package/build/integrity/layout/consts.local.js +176 -0
  240. package/build/integrity/layout/consts.local.js.map +1 -0
  241. package/build/integrity/layout/types.d.ts +35 -0
  242. package/build/integrity/layout/types.d.ts.map +1 -0
  243. package/build/integrity/layout/types.js +2 -0
  244. package/build/integrity/layout/types.js.map +1 -0
  245. package/build/integrity/layout.d.ts +4 -0
  246. package/build/integrity/layout.d.ts.map +1 -0
  247. package/build/integrity/layout.js +25 -0
  248. package/build/integrity/layout.js.map +1 -0
  249. package/build/integrity/types.d.ts +3 -1
  250. package/build/integrity/types.d.ts.map +1 -1
  251. package/build/integrity/utils.d.ts +6 -81
  252. package/build/integrity/utils.d.ts.map +1 -1
  253. package/build/integrity/utils.js +11 -279
  254. package/build/integrity/utils.js.map +1 -1
  255. package/build/integrity/verify/types.d.ts +26 -0
  256. package/build/integrity/verify/types.d.ts.map +1 -0
  257. package/build/integrity/verify/types.js +2 -0
  258. package/build/integrity/verify/types.js.map +1 -0
  259. package/build/integrity/verify.d.ts +5 -19
  260. package/build/integrity/verify.d.ts.map +1 -1
  261. package/build/integrity/verify.js +164 -175
  262. package/build/integrity/verify.js.map +1 -1
  263. package/build/intent/consts.d.ts +16 -0
  264. package/build/intent/consts.d.ts.map +1 -1
  265. package/build/intent/consts.js +63 -0
  266. package/build/intent/consts.js.map +1 -1
  267. package/build/intent/entrypoints.d.ts +2 -11
  268. package/build/intent/entrypoints.d.ts.map +1 -1
  269. package/build/intent/entrypoints.js.map +1 -1
  270. package/build/intent/index.d.ts +0 -1
  271. package/build/intent/index.d.ts.map +1 -1
  272. package/build/intent/index.js +0 -1
  273. package/build/intent/index.js.map +1 -1
  274. package/build/intent/types.d.ts +13 -2
  275. package/build/intent/types.d.ts.map +1 -1
  276. package/build/moderation/index.d.ts +2 -0
  277. package/build/moderation/index.d.ts.map +1 -1
  278. package/build/moderation/index.js +1 -0
  279. package/build/moderation/index.js.map +1 -1
  280. package/build/moderation/utils.d.ts +3 -15
  281. package/build/moderation/utils.d.ts.map +1 -1
  282. package/build/moderation/utils.js +5 -30
  283. package/build/moderation/utils.js.map +1 -1
  284. package/build/moderation/verdict/types.d.ts +24 -0
  285. package/build/moderation/verdict/types.d.ts.map +1 -0
  286. package/build/moderation/verdict/types.js +2 -0
  287. package/build/moderation/verdict/types.js.map +1 -0
  288. package/build/moderation/verdict.d.ts +4 -0
  289. package/build/moderation/verdict.d.ts.map +1 -0
  290. package/build/moderation/verdict.js +21 -0
  291. package/build/moderation/verdict.js.map +1 -0
  292. package/build/planning/card/types.d.ts +42 -0
  293. package/build/planning/card/types.d.ts.map +1 -0
  294. package/build/planning/card/types.js +2 -0
  295. package/build/planning/card/types.js.map +1 -0
  296. package/build/planning/card.d.ts +4 -0
  297. package/build/planning/card.d.ts.map +1 -0
  298. package/build/planning/card.js +51 -0
  299. package/build/planning/card.js.map +1 -0
  300. package/build/planning/helpers.d.ts +11 -37
  301. package/build/planning/helpers.d.ts.map +1 -1
  302. package/build/planning/helpers.js +24 -103
  303. package/build/planning/helpers.js.map +1 -1
  304. package/build/planning/index.d.ts +5 -0
  305. package/build/planning/index.d.ts.map +1 -1
  306. package/build/planning/index.js +2 -0
  307. package/build/planning/index.js.map +1 -1
  308. package/build/planning/landing/types.d.ts +16 -0
  309. package/build/planning/landing/types.d.ts.map +1 -0
  310. package/build/planning/landing/types.js +2 -0
  311. package/build/planning/landing/types.js.map +1 -0
  312. package/build/planning/landing.d.ts +5 -10
  313. package/build/planning/landing.d.ts.map +1 -1
  314. package/build/planning/landing.js +20 -22
  315. package/build/planning/landing.js.map +1 -1
  316. package/build/planning/schemas.d.ts +1 -5
  317. package/build/planning/schemas.d.ts.map +1 -1
  318. package/build/planning/schemas.js +3 -3
  319. package/build/planning/schemas.js.map +1 -1
  320. package/build/planning/spec/types.d.ts +22 -0
  321. package/build/planning/spec/types.d.ts.map +1 -0
  322. package/build/planning/spec/types.js +2 -0
  323. package/build/planning/spec/types.js.map +1 -0
  324. package/build/planning/spec.d.ts +4 -0
  325. package/build/planning/spec.d.ts.map +1 -0
  326. package/build/planning/spec.js +30 -0
  327. package/build/planning/spec.js.map +1 -0
  328. package/build/planning/types.d.ts +4 -3
  329. package/build/planning/types.d.ts.map +1 -1
  330. package/build/scaffold/consts.d.ts +40 -1
  331. package/build/scaffold/consts.d.ts.map +1 -1
  332. package/build/scaffold/consts.js +52 -0
  333. package/build/scaffold/consts.js.map +1 -1
  334. package/build/scaffold/helpers.d.ts +4 -16
  335. package/build/scaffold/helpers.d.ts.map +1 -1
  336. package/build/scaffold/helpers.js +9 -64
  337. package/build/scaffold/helpers.js.map +1 -1
  338. package/build/scaffold/index.d.ts +4 -0
  339. package/build/scaffold/index.d.ts.map +1 -1
  340. package/build/scaffold/index.js +2 -0
  341. package/build/scaffold/index.js.map +1 -1
  342. package/build/scaffold/landing/types.d.ts +48 -0
  343. package/build/scaffold/landing/types.d.ts.map +1 -0
  344. package/build/scaffold/landing/types.js +2 -0
  345. package/build/scaffold/landing/types.js.map +1 -0
  346. package/build/scaffold/landing.d.ts +4 -0
  347. package/build/scaffold/landing.d.ts.map +1 -0
  348. package/build/scaffold/landing.js +95 -0
  349. package/build/scaffold/landing.js.map +1 -0
  350. package/build/scaffold/schemas.d.ts +3 -2
  351. package/build/scaffold/schemas.d.ts.map +1 -1
  352. package/build/scaffold/schemas.js +177 -7
  353. package/build/scaffold/schemas.js.map +1 -1
  354. package/build/scaffold/share/types.d.ts +35 -0
  355. package/build/scaffold/share/types.d.ts.map +1 -0
  356. package/build/scaffold/share/types.js +2 -0
  357. package/build/scaffold/share/types.js.map +1 -0
  358. package/build/scaffold/share.d.ts +4 -0
  359. package/build/scaffold/share.d.ts.map +1 -0
  360. package/build/scaffold/share.js +42 -0
  361. package/build/scaffold/share.js.map +1 -0
  362. package/build/scaffold/types.d.ts +112 -2
  363. package/build/scaffold/types.d.ts.map +1 -1
  364. package/build/skills/consts.d.ts +42 -0
  365. package/build/skills/consts.d.ts.map +1 -1
  366. package/build/skills/consts.js +43 -0
  367. package/build/skills/consts.js.map +1 -1
  368. package/build/skills/index.d.ts +0 -1
  369. package/build/skills/index.d.ts.map +1 -1
  370. package/build/skills/index.js +0 -1
  371. package/build/skills/index.js.map +1 -1
  372. package/build/slot/command/types.d.ts +21 -0
  373. package/build/slot/command/types.d.ts.map +1 -0
  374. package/build/slot/command/types.js +2 -0
  375. package/build/slot/command/types.js.map +1 -0
  376. package/build/slot/command.d.ts +4 -0
  377. package/build/slot/command.d.ts.map +1 -0
  378. package/build/slot/command.js +31 -0
  379. package/build/slot/command.js.map +1 -0
  380. package/build/slot/helpers.d.ts +2 -16
  381. package/build/slot/helpers.d.ts.map +1 -1
  382. package/build/slot/helpers.js +5 -26
  383. package/build/slot/helpers.js.map +1 -1
  384. package/build/slot/index.d.ts +5 -0
  385. package/build/slot/index.d.ts.map +1 -1
  386. package/build/slot/index.js +2 -0
  387. package/build/slot/index.js.map +1 -1
  388. package/build/slot/layout/types.d.ts +17 -0
  389. package/build/slot/layout/types.d.ts.map +1 -0
  390. package/build/slot/layout/types.js +2 -0
  391. package/build/slot/layout/types.js.map +1 -0
  392. package/build/slot/layout.d.ts +4 -9
  393. package/build/slot/layout.d.ts.map +1 -1
  394. package/build/slot/layout.js +13 -15
  395. package/build/slot/layout.js.map +1 -1
  396. package/build/slot/origin/types.d.ts +23 -0
  397. package/build/slot/origin/types.d.ts.map +1 -0
  398. package/build/slot/origin/types.js +2 -0
  399. package/build/slot/origin/types.js.map +1 -0
  400. package/build/slot/origin.d.ts +4 -0
  401. package/build/slot/origin.d.ts.map +1 -0
  402. package/build/slot/origin.js +15 -0
  403. package/build/slot/origin.js.map +1 -0
  404. package/build/slot/types.d.ts.map +1 -1
  405. package/build/slot/utils.d.ts +3 -15
  406. package/build/slot/utils.d.ts.map +1 -1
  407. package/build/slot/utils.js +5 -40
  408. package/build/slot/utils.js.map +1 -1
  409. package/build/topology/card/types.d.ts +21 -0
  410. package/build/topology/card/types.d.ts.map +1 -0
  411. package/build/topology/card/types.js +2 -0
  412. package/build/topology/card/types.js.map +1 -0
  413. package/build/topology/card.d.ts +6 -13
  414. package/build/topology/card.d.ts.map +1 -1
  415. package/build/topology/card.js +83 -86
  416. package/build/topology/card.js.map +1 -1
  417. package/build/topology/helpers.d.ts +7 -33
  418. package/build/topology/helpers.d.ts.map +1 -1
  419. package/build/topology/helpers.js +15 -111
  420. package/build/topology/helpers.js.map +1 -1
  421. package/build/topology/index.d.ts +3 -0
  422. package/build/topology/index.d.ts.map +1 -1
  423. package/build/topology/index.js +1 -0
  424. package/build/topology/index.js.map +1 -1
  425. package/build/topology/resolve/types.d.ts +47 -0
  426. package/build/topology/resolve/types.d.ts.map +1 -0
  427. package/build/topology/resolve/types.js +2 -0
  428. package/build/topology/resolve/types.js.map +1 -0
  429. package/build/topology/resolve.d.ts +4 -0
  430. package/build/topology/resolve.d.ts.map +1 -0
  431. package/build/topology/resolve.js +89 -0
  432. package/build/topology/resolve.js.map +1 -0
  433. package/package.json +11 -11
  434. package/src/agent/index.ts +1 -0
  435. package/src/agent/presentation/types.ts +21 -0
  436. package/src/agent/presentation.ts +199 -165
  437. package/src/agent/types.local.ts +3 -1
  438. package/src/areas/index.ts +1 -0
  439. package/src/areas/tenancy/types.ts +23 -0
  440. package/src/areas/tenancy.ts +26 -25
  441. package/src/ba/connecting/types.ts +45 -0
  442. package/src/ba/connecting.ts +64 -0
  443. package/src/ba/helpers.ts +8 -92
  444. package/src/ba/index.ts +2 -0
  445. package/src/blueprint/types.ts +2 -2
  446. package/src/connect/branding/types.ts +29 -0
  447. package/src/connect/consts.ts +3 -0
  448. package/src/connect/conversion/types.ts +96 -0
  449. package/src/connect/entrypoints/types.ts +25 -0
  450. package/src/connect/entrypoints.ts +13 -2
  451. package/src/connect/errors/types.ts +22 -0
  452. package/src/connect/errors.ts +1 -1
  453. package/src/connect/index.ts +13 -3
  454. package/src/connect/kit/types.ts +56 -0
  455. package/src/connect/model-tier/types.ts +16 -0
  456. package/src/connect/model-tier.ts +22 -0
  457. package/src/connect/{ops.ts → ops/types.ts} +13 -3
  458. package/src/connect/pipeline/types.ts +41 -0
  459. package/src/connect/project/types.ts +127 -0
  460. package/src/connect/references/types.local.ts +5 -0
  461. package/src/connect/references/types.ts +73 -0
  462. package/src/connect/references.ts +13 -2
  463. package/src/connect/schemas.ts +9 -13
  464. package/src/connect/session/types.ts +81 -0
  465. package/src/connect/settings/types.ts +52 -0
  466. package/src/convert/analysis/types.ts +89 -0
  467. package/src/convert/{consts.local.ts → census/consts.local.ts} +1 -1
  468. package/src/convert/census/types.ts +181 -0
  469. package/src/convert/census.ts +95 -0
  470. package/src/convert/consts.ts +5 -0
  471. package/src/convert/detection/types.ts +74 -0
  472. package/src/convert/docs/types.ts +151 -0
  473. package/src/convert/docs.ts +15 -0
  474. package/src/convert/estimate/types.ts +75 -0
  475. package/src/convert/estimate.ts +19 -0
  476. package/src/convert/helpers.ts +29 -210
  477. package/src/convert/index.ts +14 -0
  478. package/src/convert/origin/types.ts +43 -0
  479. package/src/convert/origin.ts +33 -0
  480. package/src/convert/record/types.ts +105 -0
  481. package/src/convert/schemas.ts +13 -12
  482. package/src/convert/stage/types.ts +27 -0
  483. package/src/convert/stage.ts +31 -0
  484. package/src/convert/taxonomy/types.ts +74 -0
  485. package/src/convert/types.ts +5 -709
  486. package/src/convert/utils.ts +5 -6
  487. package/src/design/helpers.ts +20 -245
  488. package/src/design/index.ts +3 -0
  489. package/src/design/runtime/types.ts +14 -0
  490. package/src/design/runtime.ts +22 -7
  491. package/src/design/story/types.ts +67 -0
  492. package/src/design/story.ts +221 -0
  493. package/src/dev/types.local.ts +1 -1
  494. package/src/integrity/index.ts +4 -0
  495. package/src/integrity/layout/consts.local.ts +188 -0
  496. package/src/integrity/layout/consts.ts +79 -0
  497. package/src/integrity/layout/types.ts +35 -0
  498. package/src/integrity/layout.ts +39 -0
  499. package/src/integrity/types.ts +3 -1
  500. package/src/integrity/utils.ts +14 -313
  501. package/src/integrity/verify/types.ts +26 -0
  502. package/src/integrity/verify.ts +177 -181
  503. package/src/intent/consts.ts +67 -0
  504. package/src/intent/entrypoints.ts +2 -2
  505. package/src/intent/index.ts +0 -1
  506. package/src/intent/types.ts +9 -2
  507. package/src/moderation/index.ts +2 -0
  508. package/src/moderation/utils.ts +7 -30
  509. package/src/moderation/verdict/types.ts +22 -0
  510. package/src/moderation/verdict.ts +28 -0
  511. package/src/planning/card/types.ts +44 -0
  512. package/src/planning/card.ts +77 -0
  513. package/src/planning/helpers.ts +28 -116
  514. package/src/planning/index.ts +5 -0
  515. package/src/planning/landing/types.ts +15 -0
  516. package/src/planning/landing.ts +27 -24
  517. package/src/planning/schemas.ts +3 -3
  518. package/src/planning/spec/types.ts +22 -0
  519. package/src/planning/spec.ts +41 -0
  520. package/src/planning/types.ts +4 -4
  521. package/src/scaffold/consts.ts +65 -1
  522. package/src/scaffold/helpers.ts +14 -77
  523. package/src/scaffold/index.ts +4 -0
  524. package/src/scaffold/landing/types.ts +48 -0
  525. package/src/scaffold/landing.ts +120 -0
  526. package/src/scaffold/schemas.ts +183 -7
  527. package/src/scaffold/share/types.ts +35 -0
  528. package/src/scaffold/share.ts +60 -0
  529. package/src/scaffold/types.ts +120 -1
  530. package/src/skills/consts.ts +46 -0
  531. package/src/skills/index.ts +0 -1
  532. package/src/slot/command/types.ts +21 -0
  533. package/src/slot/command.ts +38 -0
  534. package/src/slot/helpers.ts +5 -25
  535. package/src/slot/index.ts +5 -0
  536. package/src/slot/layout/types.ts +17 -0
  537. package/src/slot/layout.ts +19 -16
  538. package/src/slot/origin/types.ts +23 -0
  539. package/src/slot/origin.ts +20 -0
  540. package/src/slot/types.ts +1 -0
  541. package/src/slot/utils.ts +8 -43
  542. package/src/topology/card/types.ts +21 -0
  543. package/src/topology/card.ts +84 -82
  544. package/src/topology/helpers.ts +20 -125
  545. package/src/topology/index.ts +3 -0
  546. package/src/topology/resolve/types.ts +47 -0
  547. package/src/topology/resolve.ts +118 -0
  548. package/tests/blueprint.spec.ts +1 -2
  549. package/tests/connect-errors.spec.ts +1 -1
  550. package/tests/convert.spec.ts +50 -50
  551. package/tests/design.spec.ts +13 -16
  552. package/tests/planning.spec.ts +57 -59
  553. package/tests/presentation.spec.ts +20 -20
  554. package/tests/scaffold.spec.ts +286 -6
  555. package/tests/tenancy.spec.ts +21 -21
  556. package/build/connect/ops.d.ts.map +0 -1
  557. package/build/connect/ops.js +0 -2
  558. package/build/connect/ops.js.map +0 -1
  559. package/build/connect/types.d.ts +0 -650
  560. package/build/connect/types.d.ts.map +0 -1
  561. package/build/connect/types.local.d.ts +0 -4
  562. package/build/connect/types.local.d.ts.map +0 -1
  563. package/build/connect/types.local.js.map +0 -1
  564. package/build/connect/utils.d.ts +0 -12
  565. package/build/connect/utils.d.ts.map +0 -1
  566. package/build/connect/utils.js +0 -25
  567. package/build/connect/utils.js.map +0 -1
  568. package/build/convert/consts.local.d.ts.map +0 -1
  569. package/build/convert/consts.local.js.map +0 -1
  570. package/build/intent/consts.local.d.ts +0 -4
  571. package/build/intent/consts.local.d.ts.map +0 -1
  572. package/build/intent/consts.local.js +0 -3
  573. package/build/intent/consts.local.js.map +0 -1
  574. package/build/intent/flow.d.ts +0 -17
  575. package/build/intent/flow.d.ts.map +0 -1
  576. package/build/intent/flow.js +0 -65
  577. package/build/intent/flow.js.map +0 -1
  578. package/build/skills/roles.d.ts +0 -43
  579. package/build/skills/roles.d.ts.map +0 -1
  580. package/build/skills/roles.js +0 -44
  581. package/build/skills/roles.js.map +0 -1
  582. package/src/connect/types.local.ts +0 -5
  583. package/src/connect/types.ts +0 -589
  584. package/src/connect/utils.ts +0 -23
  585. package/src/intent/consts.local.ts +0 -3
  586. package/src/intent/flow.ts +0 -66
  587. package/src/skills/roles.ts +0 -46
  588. /package/build/{connect → agent/presentation}/types.js +0 -0
  589. /package/build/connect/{types.local.js → references/types.local.js} +0 -0
@@ -1,99 +1,101 @@
1
1
  import { SubProject } from '../slot/consts.js'
2
2
  import { TOPOLOGY_VERSION } from './consts.js'
3
- import { orderPackages } from './helpers.js'
3
+ import { topologyHelper } from './resolve.js'
4
4
  import type { TargetPackageDescriptor, TargetPackageKind, TopologyDescriptor, TopologyMeta } from './types.js'
5
5
  import { KINDS, ROLES } from './consts.local.js'
6
+ import type { TopologyCardHelper } from './card/types.js'
6
7
 
8
+ export const createTopologyCardHelper = (): TopologyCardHelper => {
9
+ const asStrings = (value: unknown): string[] =>
10
+ Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []
7
11
 
8
- const asStrings = (value: unknown): string[] =>
9
- Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []
12
+ /**
13
+ * Read a package descriptor out of whatever the file held.
14
+ *
15
+ * Everything is narrowed rather than trusted: the file is on the target's volume, where a person,
16
+ * a GitHub pull or a previous platform version may have written it. A descriptor that cannot be
17
+ * narrowed is DROPPED, never repaired — a package with no name or no recognisable role would
18
+ * otherwise resolve a path somewhere real and wrong.
19
+ */
20
+ const parsePackage = (value: unknown): TargetPackageDescriptor | null => {
21
+ if (value == null || typeof value !== 'object') return null
22
+ const raw = value as Record<string, unknown>
23
+ const name = typeof raw.name === 'string' ? raw.name.trim() : ''
24
+ if (name === '' || name.includes('/') || name.startsWith('.')) return null
25
+ const roles = asStrings(raw.roles).filter((role): role is SubProject => ROLES.has(role))
26
+ if (roles.length === 0) return null
27
+ const kind = KINDS.has(raw.kind as TargetPackageKind) ? raw.kind as TargetPackageKind : 'bundle'
28
+ const areas = asStrings(raw.areas)
29
+ const queues = asStrings(raw.queues)
10
30
 
11
- /**
12
- * Read a package descriptor out of whatever the file held.
13
- *
14
- * Everything is narrowed rather than trusted: the file is on the target's volume, where a person,
15
- * a GitHub pull or a previous platform version may have written it. A descriptor that cannot be
16
- * narrowed is DROPPED, never repaired — a package with no name or no recognisable role would
17
- * otherwise resolve a path somewhere real and wrong.
18
- */
19
- const parsePackage = (value: unknown): TargetPackageDescriptor | null => {
20
- if (value == null || typeof value !== 'object') return null
21
- const raw = value as Record<string, unknown>
22
- const name = typeof raw.name === 'string' ? raw.name.trim() : ''
23
- if (name === '' || name.includes('/') || name.startsWith('.')) return null
24
- const roles = asStrings(raw.roles).filter((role): role is SubProject => ROLES.has(role))
25
- if (roles.length === 0) return null
26
- const kind = KINDS.has(raw.kind as TargetPackageKind) ? raw.kind as TargetPackageKind : 'bundle'
27
- const areas = asStrings(raw.areas)
28
- const queues = asStrings(raw.queues)
31
+ return {
32
+ name,
33
+ roles,
34
+ kind,
35
+ dependsOn: asStrings(raw.dependsOn),
36
+ ...(areas.length > 0 ? { areas: areas as TargetPackageDescriptor['areas'] } : {}),
37
+ ...(queues.length > 0 ? { queues } : {}),
38
+ }
39
+ }
40
+
41
+ const parseTopologyMeta = (data: unknown): TopologyDescriptor | null => {
42
+ if (data == null || typeof data !== 'object') return null
43
+ const raw = data as Record<string, unknown>
44
+ if (typeof raw.dir !== 'string' || raw.dir.trim() === '') return null
45
+ const packages = Array.isArray(raw.packages)
46
+ ? raw.packages.map(parsePackage).filter((pkg): pkg is TargetPackageDescriptor => pkg != null)
47
+ : []
48
+ if (packages.length === 0) return null
29
49
 
30
- return {
31
- name,
32
- roles,
33
- kind,
34
- dependsOn: asStrings(raw.dependsOn),
35
- ...(areas.length > 0 ? { areas: areas as TargetPackageDescriptor['areas'] } : {}),
36
- ...(queues.length > 0 ? { queues } : {}),
50
+ return {
51
+ id: typeof raw.id === 'string' && raw.id !== '' ? raw.id : 'recorded',
52
+ dir: raw.dir.trim(),
53
+ packages,
54
+ }
37
55
  }
38
- }
39
56
 
40
- /**
41
- * Narrow a parsed frontmatter block into a topology, or answer `null`.
42
- *
43
- * `null` means "use the layout default", and every caller treats it that way. A topology file
44
- * written by a platform version this one cannot read must not stop a project from building — the
45
- * arrangement it describes is almost certainly still the default one.
46
- */
47
- export const parseTopologyMeta = (data: unknown): TopologyDescriptor | null => {
48
- if (data == null || typeof data !== 'object') return null
49
- const raw = data as Record<string, unknown>
50
- if (typeof raw.dir !== 'string' || raw.dir.trim() === '') return null
51
- const packages = Array.isArray(raw.packages)
52
- ? raw.packages.map(parsePackage).filter((pkg): pkg is TargetPackageDescriptor => pkg != null)
53
- : []
54
- if (packages.length === 0) return null
57
+ const topologyMeta = (topology: TopologyDescriptor): TopologyMeta => ({
58
+ ...topology,
59
+ packages: topologyHelper.orderPackages(topology.packages),
60
+ version: TOPOLOGY_VERSION,
61
+ updatedAt: new Date().toISOString(),
62
+ })
63
+
64
+ const renderTopologyCard = (topology: TopologyDescriptor): string => {
65
+ const ordered = topologyHelper.orderPackages(topology.packages)
66
+ const rows = ordered.map(pkg => {
67
+ const deps = pkg.dependsOn.length > 0 ? pkg.dependsOn.join(', ') : '—'
68
+ const extra = [
69
+ ...(pkg.areas != null ? [`areas: ${pkg.areas.join(', ')}`] : []),
70
+ ...(pkg.queues != null ? [`queues: ${pkg.queues.join(', ')}`] : []),
71
+ ].join('; ')
55
72
 
56
- return {
57
- id: typeof raw.id === 'string' && raw.id !== '' ? raw.id : 'recorded',
58
- dir: raw.dir.trim(),
59
- packages,
73
+ return `| \`${topology.dir}/${pkg.name}\` | ${pkg.roles.join(', ')} | ${pkg.kind} | ${deps} | ${extra === '' ? '—' : extra} |`
74
+ })
75
+
76
+ return [
77
+ '# Topology',
78
+ '',
79
+ 'Which packages this project has, what each one is, and which compile against which.',
80
+ 'Built in the order of the table — a `library` must be built before anything importing it.',
81
+ '',
82
+ '| Package | Roles | Kind | Depends on | Notes |',
83
+ '|---|---|---|---|---|',
84
+ ...rows,
85
+ '',
86
+ ].join('\n')
60
87
  }
88
+
89
+ return { parseTopologyMeta, topologyMeta, renderTopologyCard }
61
90
  }
62
91
 
63
- export const topologyMeta = (topology: TopologyDescriptor): TopologyMeta => ({
64
- ...topology,
65
- packages: orderPackages(topology.packages),
66
- version: TOPOLOGY_VERSION,
67
- updatedAt: new Date().toISOString(),
68
- })
92
+ export const topologyCardHelper = createTopologyCardHelper()
69
93
 
70
- /**
71
- * The body of `.agents/memory/topology.md` — what a model reads, and what a person reads.
72
- *
73
- * Rendered from the descriptor rather than maintained beside it, for the same reason the layout
74
- * tables are: a card that disagrees with the frontmatter teaches the wrong tree.
75
- */
76
- export const renderTopologyCard = (topology: TopologyDescriptor): string => {
77
- const ordered = orderPackages(topology.packages)
78
- const rows = ordered.map(pkg => {
79
- const deps = pkg.dependsOn.length > 0 ? pkg.dependsOn.join(', ') : '—'
80
- const extra = [
81
- ...(pkg.areas != null ? [`areas: ${pkg.areas.join(', ')}`] : []),
82
- ...(pkg.queues != null ? [`queues: ${pkg.queues.join(', ')}`] : []),
83
- ].join('; ')
94
+ /** @deprecated compat:factory-refactor — use `topologyCardHelper.parseTopologyMeta(…)` */
95
+ export const parseTopologyMeta = (data: unknown): TopologyDescriptor | null => topologyCardHelper.parseTopologyMeta(data)
84
96
 
85
- return `| \`${topology.dir}/${pkg.name}\` | ${pkg.roles.join(', ')} | ${pkg.kind} | ${deps} | ${extra === '' ? '—' : extra} |`
86
- })
97
+ /** @deprecated compat:factory-refactor — use `topologyCardHelper.topologyMeta(…)` */
98
+ export const topologyMeta = (topology: TopologyDescriptor): TopologyMeta => topologyCardHelper.topologyMeta(topology)
87
99
 
88
- return [
89
- '# Topology',
90
- '',
91
- 'Which packages this project has, what each one is, and which compile against which.',
92
- 'Built in the order of the table — a `library` must be built before anything importing it.',
93
- '',
94
- '| Package | Roles | Kind | Depends on | Notes |',
95
- '|---|---|---|---|---|',
96
- ...rows,
97
- '',
98
- ].join('\n')
99
- }
100
+ /** @deprecated compat:factory-refactor — use `topologyCardHelper.renderTopologyCard(…)` */
101
+ export const renderTopologyCard = (topology: TopologyDescriptor): string => topologyCardHelper.renderTopologyCard(topology)
@@ -1,138 +1,33 @@
1
- import { TargetLayout } from '../integrity/consts.js'
2
1
  import type { ProjectArea } from '../areas/consts.js'
3
2
  import type { SubProject } from '../slot/consts.js'
4
- import { LAYOUT_TOPOLOGIES, DEFAULT_TOPOLOGY } from './consts.js'
5
- import type {
6
- ResolvedTopology, TargetPackageDescriptor, TopologyDescriptor,
7
- } from './types.js'
3
+ import { topologyHelper } from './resolve.js'
4
+ import type { ResolvedTopology, TargetPackageDescriptor, TopologyDescriptor } from './types.js'
8
5
 
9
- /**
10
- * Order the packages so that nothing is built before what it compiles against.
11
- *
12
- * Kahn's algorithm, with two deliberate tolerances. An edge to a package the topology does not
13
- * hold is DROPPED rather than fatal — a project may declare a dependency on something a pull has
14
- * not brought in yet, and refusing to order the tree would take the whole build down over one
15
- * name. A cycle leaves its members unvisited, and they are appended in declaration order: a cycle
16
- * cannot be built correctly in any order, so the useful behaviour is to build it in the order
17
- * somebody wrote rather than to throw.
18
- */
19
- export const orderPackages = (packages: TargetPackageDescriptor[]): TargetPackageDescriptor[] => {
20
- const known = new Set(packages.map(pkg => pkg.name))
21
- const index = new Map(packages.map((pkg, at) => [pkg.name, at]))
22
- const pending = new Map(packages.map(pkg => [
23
- pkg.name, pkg.dependsOn.filter(dep => known.has(dep) && dep !== pkg.name).length,
24
- ]))
25
- const dependents = new Map<string, string[]>()
26
- for (const pkg of packages) {
27
- for (const dep of pkg.dependsOn) {
28
- if (!known.has(dep) || dep === pkg.name) continue
29
- dependents.set(dep, [...dependents.get(dep) ?? [], pkg.name])
30
- }
31
- }
6
+ /** @deprecated compat:factory-refactor — use `topologyHelper.orderPackages(…)` */
7
+ export const orderPackages = (packages: TargetPackageDescriptor[]): TargetPackageDescriptor[] =>
8
+ topologyHelper.orderPackages(packages)
32
9
 
33
- const byName = new Map(packages.map(pkg => [pkg.name, pkg]))
34
- const out: TargetPackageDescriptor[] = []
35
- // Ready packages are taken in DECLARATION order, not in the order they became ready. Both are
36
- // correct builds; only one is the same list every time and the same list a person wrote, and
37
- // this order is compared against the shipped layout tables by a test.
38
- const ready = packages.filter(pkg => pending.get(pkg.name) === 0).map(pkg => pkg.name)
39
- const take = (): string | undefined => {
40
- if (ready.length === 0) return undefined
41
- let at = 0
42
- for (let i = 1; i < ready.length; i++) {
43
- if ((index.get(ready[i]) ?? 0) < (index.get(ready[at]) ?? 0)) at = i
44
- }
10
+ /** @deprecated compat:factory-refactor — use `topologyHelper.resolveTopology(…)` */
11
+ export const resolveTopology = (topology: TopologyDescriptor): ResolvedTopology =>
12
+ topologyHelper.resolveTopology(topology)
45
13
 
46
- return ready.splice(at, 1)[0]
47
- }
14
+ /** @deprecated compat:factory-refactor — use `topologyHelper.packageForRole(…)` */
15
+ export const packageForRole = (topology: ResolvedTopology, role: SubProject): TargetPackageDescriptor | null =>
16
+ topologyHelper.packageForRole(topology, role)
48
17
 
49
- for (let name = take(); name != null; name = take()) {
50
- const pkg = byName.get(name)
51
- if (pkg == null) continue
52
- out.push(pkg)
53
- for (const next of dependents.get(name) ?? []) {
54
- const left = (pending.get(next) ?? 0) - 1
55
- pending.set(next, left)
56
- if (left === 0) ready.push(next)
57
- }
58
- }
59
-
60
- const seen = new Set(out.map(pkg => pkg.name))
61
-
62
- return [...out, ...packages.filter(pkg => !seen.has(pkg.name))]
63
- }
64
-
65
- /** Resolve the derived halves — build order, library order and the role index. */
66
- export const resolveTopology = (topology: TopologyDescriptor): ResolvedTopology => {
67
- const ordered = orderPackages(topology.packages)
68
- const byRole: Partial<Record<SubProject, TargetPackageDescriptor[]>> = {}
69
- for (const pkg of ordered) {
70
- for (const role of pkg.roles) {
71
- byRole[role] = [...byRole[role] ?? [], pkg]
72
- }
73
- }
74
-
75
- return {
76
- ...topology,
77
- packages: ordered,
78
- build: ordered.map(pkg => pkg.name),
79
- libraries: ordered.filter(pkg => pkg.kind === 'library').map(pkg => pkg.name),
80
- byRole,
81
- }
82
- }
83
-
84
- /** The default topology for a layout already decided. */
85
- export const topologyOf = (layout: TargetLayout): TopologyDescriptor =>
86
- LAYOUT_TOPOLOGIES[layout] ?? DEFAULT_TOPOLOGY
87
-
88
- /**
89
- * The directory a role names, or `null` when this topology has no package for it.
90
- *
91
- * `null` rather than the role's own name: a command aimed at a package the tree does not have must
92
- * fail where it is issued. Answering with a plausible directory runs it somewhere real and wrong,
93
- * which is how a type check once ran against the shared package instead of the one under repair.
94
- */
95
- export const packageForRole = (
96
- topology: ResolvedTopology, role: SubProject
97
- ): TargetPackageDescriptor | null => topology.byRole[role]?.[0] ?? null
98
-
99
- /** Every package holding a role — more than one only where a topology splits that role. */
100
- export const packagesForRole = (
101
- topology: ResolvedTopology, role: SubProject
102
- ): TargetPackageDescriptor[] => topology.byRole[role] ?? []
103
-
104
- /** The package serving an area, for a topology that splits the browser app across several. */
18
+ /** @deprecated compat:factory-refactor — use `topologyHelper.packageForArea(…)` */
105
19
  export const packageForArea = (
106
20
  topology: ResolvedTopology, role: SubProject, area: ProjectArea
107
- ): TargetPackageDescriptor | null => {
108
- const candidates = packagesForRole(topology, role)
109
- return candidates.find(pkg => pkg.areas?.includes(area) === true)
110
- ?? candidates.find(pkg => pkg.areas == null)
111
- ?? candidates[0]
112
- ?? null
113
- }
21
+ ): TargetPackageDescriptor | null => topologyHelper.packageForArea(topology, role, area)
114
22
 
115
- /** `<dir>/<package>` — the only place a topology directory is composed. */
23
+ /** @deprecated compat:factory-refactor — use `topologyHelper.packageDir(…)` */
116
24
  export const packageDir = (topology: TopologyDescriptor, pkg: TargetPackageDescriptor): string =>
117
- `${topology.dir}/${pkg.name}`
25
+ topologyHelper.packageDir(topology, pkg)
118
26
 
119
- /**
120
- * Merge a package into a topology, by name.
121
- *
122
- * This is the ADOPTION path: a package that arrived with a GitHub pull is classified once and
123
- * recorded here, so the next run addresses the tree that exists rather than re-deriving one that
124
- * does not. Replacing by name rather than appending keeps a re-classification idempotent.
125
- */
126
- export const withPackage = (
127
- topology: TopologyDescriptor, pkg: TargetPackageDescriptor
128
- ): TopologyDescriptor => ({
129
- ...topology,
130
- packages: topology.packages.some(known => known.name === pkg.name)
131
- ? topology.packages.map(known => known.name === pkg.name ? pkg : known)
132
- : [...topology.packages, pkg],
133
- })
27
+ /** @deprecated compat:factory-refactor — use `topologyHelper.withPackage(…)` */
28
+ export const withPackage = (topology: TopologyDescriptor, pkg: TargetPackageDescriptor): TopologyDescriptor =>
29
+ topologyHelper.withPackage(topology, pkg)
134
30
 
135
- /** Whether two topologies describe the same arrangement — used to skip a needless rewrite. */
31
+ /** @deprecated compat:factory-refactor — use `topologyHelper.sameTopology(…)` */
136
32
  export const sameTopology = (a: TopologyDescriptor, b: TopologyDescriptor): boolean =>
137
- JSON.stringify(orderPackages(a.packages)) === JSON.stringify(orderPackages(b.packages))
138
- && a.dir === b.dir
33
+ topologyHelper.sameTopology(a, b)
@@ -1,5 +1,8 @@
1
1
  export type * from './types.js'
2
+ export type * from './resolve/types.js'
3
+ export type * from './card/types.js'
2
4
 
3
5
  export * from './consts.js'
6
+ export * from './resolve.js'
4
7
  export * from './helpers.js'
5
8
  export * from './card.js'
@@ -0,0 +1,47 @@
1
+ import type { ProjectArea } from '../../areas/consts.js'
2
+ import type { TargetLayout } from '../../integrity/consts.js'
3
+ import type { SubProject } from '../../slot/consts.js'
4
+ import type { ResolvedTopology, TargetPackageDescriptor, TopologyDescriptor } from '../types.js'
5
+
6
+ /** A target's package arrangement: build order, the role index, and where each package lives. */
7
+ export interface TopologyHelper {
8
+ /**
9
+ * Order the packages so that nothing is built before what it compiles against.
10
+ *
11
+ * Kahn's algorithm, with two deliberate tolerances. An edge to a package the topology does not
12
+ * hold is DROPPED rather than fatal — a project may declare a dependency on something a pull has
13
+ * not brought in yet, and refusing to order the tree would take the whole build down over one
14
+ * name. A cycle leaves its members unvisited, and they are appended in declaration order: a cycle
15
+ * cannot be built correctly in any order, so the useful behaviour is to build it in the order
16
+ * somebody wrote rather than to throw.
17
+ */
18
+ orderPackages: (packages: TargetPackageDescriptor[]) => TargetPackageDescriptor[]
19
+ /** Resolve the derived halves — build order, library order and the role index. */
20
+ resolveTopology: (topology: TopologyDescriptor) => ResolvedTopology
21
+ /** The default topology for a layout already decided. */
22
+ topologyOf: (layout: TargetLayout) => TopologyDescriptor
23
+ /**
24
+ * The directory a role names, or `null` when this topology has no package for it.
25
+ *
26
+ * `null` rather than the role's own name: a command aimed at a package the tree does not have must
27
+ * fail where it is issued. Answering with a plausible directory runs it somewhere real and wrong,
28
+ * which is how a type check once ran against the shared package instead of the one under repair.
29
+ */
30
+ packageForRole: (topology: ResolvedTopology, role: SubProject) => TargetPackageDescriptor | null
31
+ /** Every package holding a role — more than one only where a topology splits that role. */
32
+ packagesForRole: (topology: ResolvedTopology, role: SubProject) => TargetPackageDescriptor[]
33
+ /** The package serving an area, for a topology that splits the browser app across several. */
34
+ packageForArea: (topology: ResolvedTopology, role: SubProject, area: ProjectArea) => TargetPackageDescriptor | null
35
+ /** `<dir>/<package>` — the only place a topology directory is composed. */
36
+ packageDir: (topology: TopologyDescriptor, pkg: TargetPackageDescriptor) => string
37
+ /**
38
+ * Merge a package into a topology, by name.
39
+ *
40
+ * This is the ADOPTION path: a package that arrived with a GitHub pull is classified once and
41
+ * recorded here, so the next run addresses the tree that exists rather than re-deriving one that
42
+ * does not. Replacing by name rather than appending keeps a re-classification idempotent.
43
+ */
44
+ withPackage: (topology: TopologyDescriptor, pkg: TargetPackageDescriptor) => TopologyDescriptor
45
+ /** Whether two topologies describe the same arrangement — used to skip a needless rewrite. */
46
+ sameTopology: (a: TopologyDescriptor, b: TopologyDescriptor) => boolean
47
+ }
@@ -0,0 +1,118 @@
1
+ import { TargetLayout } from '../integrity/consts.js'
2
+ import type { ProjectArea } from '../areas/consts.js'
3
+ import type { SubProject } from '../slot/consts.js'
4
+ import { LAYOUT_TOPOLOGIES, DEFAULT_TOPOLOGY } from './consts.js'
5
+ import type {
6
+ ResolvedTopology, TargetPackageDescriptor, TopologyDescriptor,
7
+ } from './types.js'
8
+ import type { TopologyHelper } from './resolve/types.js'
9
+
10
+ export const createTopologyHelper = (): TopologyHelper => {
11
+ const orderPackages = (packages: TargetPackageDescriptor[]): TargetPackageDescriptor[] => {
12
+ const known = new Set(packages.map(pkg => pkg.name))
13
+ const index = new Map(packages.map((pkg, at) => [pkg.name, at]))
14
+ const pending = new Map(packages.map(pkg => [
15
+ pkg.name, pkg.dependsOn.filter(dep => known.has(dep) && dep !== pkg.name).length,
16
+ ]))
17
+ const dependents = new Map<string, string[]>()
18
+ for (const pkg of packages) {
19
+ for (const dep of pkg.dependsOn) {
20
+ if (!known.has(dep) || dep === pkg.name) continue
21
+ dependents.set(dep, [...dependents.get(dep) ?? [], pkg.name])
22
+ }
23
+ }
24
+
25
+ const byName = new Map(packages.map(pkg => [pkg.name, pkg]))
26
+ const out: TargetPackageDescriptor[] = []
27
+ // Ready packages are taken in DECLARATION order, not in the order they became ready. Both are
28
+ // correct builds; only one is the same list every time and the same list a person wrote, and
29
+ // this order is compared against the shipped layout tables by a test.
30
+ const ready = packages.filter(pkg => pending.get(pkg.name) === 0).map(pkg => pkg.name)
31
+ const take = (): string | undefined => {
32
+ if (ready.length === 0) return undefined
33
+ let at = 0
34
+ for (let i = 1; i < ready.length; i++) {
35
+ if ((index.get(ready[i]) ?? 0) < (index.get(ready[at]) ?? 0)) at = i
36
+ }
37
+
38
+ return ready.splice(at, 1)[0]
39
+ }
40
+
41
+ for (let name = take(); name != null; name = take()) {
42
+ const pkg = byName.get(name)
43
+ if (pkg == null) continue
44
+ out.push(pkg)
45
+ for (const next of dependents.get(name) ?? []) {
46
+ const left = (pending.get(next) ?? 0) - 1
47
+ pending.set(next, left)
48
+ if (left === 0) ready.push(next)
49
+ }
50
+ }
51
+
52
+ const seen = new Set(out.map(pkg => pkg.name))
53
+
54
+ return [...out, ...packages.filter(pkg => !seen.has(pkg.name))]
55
+ }
56
+
57
+ const resolveTopology = (topology: TopologyDescriptor): ResolvedTopology => {
58
+ const ordered = orderPackages(topology.packages)
59
+ const byRole: Partial<Record<SubProject, TargetPackageDescriptor[]>> = {}
60
+ for (const pkg of ordered) {
61
+ for (const role of pkg.roles) {
62
+ byRole[role] = [...byRole[role] ?? [], pkg]
63
+ }
64
+ }
65
+
66
+ return {
67
+ ...topology,
68
+ packages: ordered,
69
+ build: ordered.map(pkg => pkg.name),
70
+ libraries: ordered.filter(pkg => pkg.kind === 'library').map(pkg => pkg.name),
71
+ byRole,
72
+ }
73
+ }
74
+
75
+ const topologyOf = (layout: TargetLayout): TopologyDescriptor =>
76
+ LAYOUT_TOPOLOGIES[layout] ?? DEFAULT_TOPOLOGY
77
+
78
+ const packageForRole = (
79
+ topology: ResolvedTopology, role: SubProject
80
+ ): TargetPackageDescriptor | null => topology.byRole[role]?.[0] ?? null
81
+
82
+ const packagesForRole = (
83
+ topology: ResolvedTopology, role: SubProject
84
+ ): TargetPackageDescriptor[] => topology.byRole[role] ?? []
85
+
86
+ const packageForArea = (
87
+ topology: ResolvedTopology, role: SubProject, area: ProjectArea
88
+ ): TargetPackageDescriptor | null => {
89
+ const candidates = packagesForRole(topology, role)
90
+ return candidates.find(pkg => pkg.areas?.includes(area) === true)
91
+ ?? candidates.find(pkg => pkg.areas == null)
92
+ ?? candidates[0]
93
+ ?? null
94
+ }
95
+
96
+ const packageDir = (topology: TopologyDescriptor, pkg: TargetPackageDescriptor): string =>
97
+ `${topology.dir}/${pkg.name}`
98
+
99
+ const withPackage = (
100
+ topology: TopologyDescriptor, pkg: TargetPackageDescriptor
101
+ ): TopologyDescriptor => ({
102
+ ...topology,
103
+ packages: topology.packages.some(known => known.name === pkg.name)
104
+ ? topology.packages.map(known => known.name === pkg.name ? pkg : known)
105
+ : [...topology.packages, pkg],
106
+ })
107
+
108
+ const sameTopology = (a: TopologyDescriptor, b: TopologyDescriptor): boolean =>
109
+ JSON.stringify(orderPackages(a.packages)) === JSON.stringify(orderPackages(b.packages))
110
+ && a.dir === b.dir
111
+
112
+ return {
113
+ orderPackages, resolveTopology, topologyOf, packageForRole, packagesForRole, packageForArea, packageDir,
114
+ withPackage, sameTopology,
115
+ }
116
+ }
117
+
118
+ export const topologyHelper = createTopologyHelper()
@@ -1,8 +1,7 @@
1
1
  import { describe, expect, test } from 'bun:test'
2
2
  import { landingGatePreferenceOf, LandingGatePreference } from '../src/blueprint/index.js'
3
3
  import type { Blueprint } from '../src/blueprint/index.js'
4
- import { ViableSkill } from '../src/skills/consts.js'
5
- import { ViablePersona } from '../src/skills/roles.js'
4
+ import { ViablePersona, ViableSkill } from '../src/skills/consts.js'
6
5
 
7
6
  /** Just enough of a blueprint to read a preference from — the shape a test builds. */
8
7
  const base = (extra: Partial<Blueprint> = {}): Blueprint => ({
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, test } from 'bun:test'
2
2
  import { ResilientError } from '@owlmeans/error'
3
3
  import { ConnectConfirmationRequired, ConnectConsentRequired, ConnectOutOfCredits } from '../src/connect/errors.js'
4
- import type { ConnectConfirmation } from '../src/connect/types.js'
4
+ import type { ConnectConfirmation } from '../src/connect/errors/types.js'
5
5
 
6
6
  describe('@owlmeans/viable-common — ConnectOutOfCredits', () => {
7
7
  test('carries its fields fresh, and survives a marshal/unmarshal round trip', () => {