@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
@@ -3,190 +3,224 @@ import { agentLoopActions, codeActions, documentActions, structuredActions } fro
3
3
  import { AgentCodeLanguage, AgentMarkdownKind, AgentMessageCategory, AgentMessageRole, AgentStructuredKind } from './consts.js'
4
4
  import type { RecordValue } from './types.local.js'
5
5
  import type { AgentMessageClassificationInput, AgentMessagePresentation } from './types.js'
6
+ import type { AgentPresentationHelper } from './presentation/types.js'
7
+
8
+ export const createAgentPresentationHelper = (): AgentPresentationHelper => {
9
+ const asRecord = (value: unknown): RecordValue | undefined =>
10
+ value != null && typeof value === 'object' && !Array.isArray(value)
11
+ ? value as RecordValue
12
+ : undefined
13
+
14
+ const actionOf = (input: AgentMessageClassificationInput): string => input.action?.toLowerCase() ?? ''
15
+
16
+ const sourceOf = (input: AgentMessageClassificationInput): string =>
17
+ `${input.agent ?? ''} ${input.helper ?? ''}`.toLowerCase()
18
+
19
+ const contentOf = (input: AgentMessageClassificationInput): string => input.text?.trim() ?? ''
20
+
21
+ /**
22
+ * Source extraction is an internal context-reduction pass. Its terminal tool call contains only
23
+ * line ranges, which are useful to the coder but add no useful information to a person's journal.
24
+ */
25
+ const isAgentMessageHidden = (input: AgentMessageClassificationInput): boolean =>
26
+ actionOf(input) === 'source-extract'
27
+
28
+ /** Maps the attribution that reached the event boundary to the visual specialist family. */
29
+ const agentMessageRoleOf = (input: AgentMessageClassificationInput): AgentMessageRole => {
30
+ const source = sourceOf(input)
31
+ const action = actionOf(input)
32
+
33
+ if (action === 'arbitrary-modification' || source.includes('orchestrator')) return AgentMessageRole.Orchestrator
34
+ if (source.includes('fix')) return AgentMessageRole.Repair
35
+ if (source.includes('coder') || source.includes('developer') || codeActions.has(action)) return AgentMessageRole.Developer
36
+ if (source.includes('visual') || source.includes('ui-helper')) return AgentMessageRole.VisualDesign
37
+ if (source.includes('ux-')) return AgentMessageRole.Ux
38
+ if (source.includes('business') || source.includes('ba-') || source.includes('analysis') || source.includes('analyst')) return AgentMessageRole.Analytical
39
+ if (source.includes('product') || source.includes('naming')) return AgentMessageRole.Product
40
+ if (source.includes('architect') || source.includes('arch') || source.includes('layout-helper') ||
41
+ source.includes('api-helper') || source.includes('access-helper') || source.includes('datalayer-helper') ||
42
+ source.includes('domain') || source.includes('nav-helper') || source.includes('ui-com-helper') ||
43
+ source.includes('ui-state-helper')) return AgentMessageRole.Architect
44
+ return AgentMessageRole.Technical
45
+ }
6
46
 
7
- const asRecord = (value: unknown): RecordValue | undefined =>
8
- value != null && typeof value === 'object' && !Array.isArray(value)
9
- ? value as RecordValue
10
- : undefined
47
+ /** Pulls a schema argument out of LangChain's serialised tool-call shape. */
48
+ const agentToolCallArguments = (value: unknown): unknown => {
49
+ if (!Array.isArray(value) || value.length !== 1) return value
50
+ const call = asRecord(value[0])
51
+ return call?.args ?? value
52
+ }
11
53
 
12
- const actionOf = (input: AgentMessageClassificationInput): string => input.action?.toLowerCase() ?? ''
54
+ const structuredKindOf = (value: unknown): AgentStructuredKind | undefined => {
55
+ if (value == null) return undefined
13
56
 
14
- const sourceOf = (input: AgentMessageClassificationInput): string =>
15
- `${input.agent ?? ''} ${input.helper ?? ''}`.toLowerCase()
57
+ const toolArgs = agentToolCallArguments(value)
58
+ const object = asRecord(toolArgs)
59
+ if (object == null) {
60
+ if (Array.isArray(toolArgs)) return AgentStructuredKind.GenericList
61
+ return undefined
62
+ }
16
63
 
17
- const contentOf = (input: AgentMessageClassificationInput): string => input.text?.trim() ?? ''
64
+ // Checked ahead of the single-array shapes below: a scaffold plan carries its own `stories`
65
+ // array (so the StoryPlan check would otherwise swallow it), and a runtime decision straight
66
+ // from the MODEL never carries `actor`/`worker` — those are added only once the decision is
67
+ // persisted onto a StoryDesign — so requiring them here missed every live model call.
68
+ if ('identity' in object && 'guestHome' in object && 'areas' in object && 'stories' in object) {
69
+ return AgentStructuredKind.ScaffoldPlan
70
+ }
71
+ if (Array.isArray(object.jobs) && Array.isArray(object.agents) && 'kv' in object) {
72
+ return AgentStructuredKind.RuntimeDecision
73
+ }
18
74
 
19
- /**
20
- * Source extraction is an internal context-reduction pass. Its terminal tool call contains only
21
- * line ranges, which are useful to the coder but add no useful information to a person's journal.
22
- */
23
- export const isAgentMessageHidden = (input: AgentMessageClassificationInput): boolean =>
24
- actionOf(input) === 'source-extract'
25
-
26
- /** Maps the attribution that reached the event boundary to the visual specialist family. */
27
- export const agentMessageRoleOf = (input: AgentMessageClassificationInput): AgentMessageRole => {
28
- const source = sourceOf(input)
29
- const action = actionOf(input)
30
-
31
- if (action === 'arbitrary-modification' || source.includes('orchestrator')) return AgentMessageRole.Orchestrator
32
- if (source.includes('fix')) return AgentMessageRole.Repair
33
- if (source.includes('coder') || source.includes('developer') || codeActions.has(action)) return AgentMessageRole.Developer
34
- if (source.includes('visual') || source.includes('ui-helper')) return AgentMessageRole.VisualDesign
35
- if (source.includes('ux-')) return AgentMessageRole.Ux
36
- if (source.includes('business') || source.includes('ba-') || source.includes('analysis') || source.includes('analyst')) return AgentMessageRole.Analytical
37
- if (source.includes('product') || source.includes('naming')) return AgentMessageRole.Product
38
- if (source.includes('architect') || source.includes('arch') || source.includes('layout-helper') ||
39
- source.includes('api-helper') || source.includes('access-helper') || source.includes('datalayer-helper') ||
40
- source.includes('domain') || source.includes('nav-helper') || source.includes('ui-com-helper') ||
41
- source.includes('ui-state-helper')) return AgentMessageRole.Architect
42
- return AgentMessageRole.Technical
43
- }
75
+ if (Array.isArray(object.files)) return AgentStructuredKind.ArtifactSelection
76
+ if (Array.isArray(object.entities)) return AgentStructuredKind.EntitySelection
77
+ if (Array.isArray(object.stories)) return AgentStructuredKind.StoryPlan
78
+ if (Array.isArray(object.screens)) return AgentStructuredKind.ScreenPlan
79
+ if (Array.isArray(object.components)) return AgentStructuredKind.ComponentPlan
80
+ if (Array.isArray(object.transitions)) return AgentStructuredKind.TransitionPlan
81
+ if (Array.isArray(object.entries)) return AgentStructuredKind.EntrypointSelection
82
+ if (Array.isArray(object.candidates)) return AgentStructuredKind.CandidateRanking
83
+ if (Object.values(object).some(value => {
84
+ const entry = asRecord(value)
85
+ return entry != null && Array.isArray(entry.permissions) && 'level' in entry
86
+ })) return AgentStructuredKind.AccessPolicy
87
+ return AgentStructuredKind.GenericRecord
88
+ }
44
89
 
45
- /** Pulls a schema argument out of LangChain's serialised tool-call shape. */
46
- export const agentToolCallArguments = (value: unknown): unknown => {
47
- if (!Array.isArray(value) || value.length !== 1) return value
48
- const call = asRecord(value[0])
49
- return call?.args ?? value
50
- }
90
+ const decisionAction = (action: string): boolean =>
91
+ action.startsWith('should-') || action.startsWith('is-') || action.includes('blueprint-case') || action.includes('choose-case')
51
92
 
52
- const structuredKindOf = (value: unknown): AgentStructuredKind | undefined => {
53
- if (value == null) return undefined
93
+ const fileExtensionLanguage = (path: string): AgentCodeLanguage => {
94
+ const name = path.toLowerCase().split('?')[0]
95
+ if (/\.(tsx|jsx)$/.test(name)) return AgentCodeLanguage.ReactTsx
96
+ if (/\.css$/.test(name)) return AgentCodeLanguage.Css
97
+ if (/\.(ts|mts|cts|js|mjs|cjs)$/.test(name)) return AgentCodeLanguage.TypeScript
98
+ if (/\.json$/.test(name)) return AgentCodeLanguage.Json
99
+ return AgentCodeLanguage.Other
100
+ }
54
101
 
55
- const toolArgs = agentToolCallArguments(value)
56
- const object = asRecord(toolArgs)
57
- if (object == null) {
58
- if (Array.isArray(toolArgs)) return AgentStructuredKind.GenericList
59
- return undefined
102
+ /** Finds the language of a unified diff from its destination (or source) file path. */
103
+ const agentDiffLanguageOf = (text: string): AgentCodeLanguage => {
104
+ const match = text.match(/^\+\+\+\s+(?:b\/)?(.+)$/m) ?? text.match(/^---\s+(?:a\/)?(.+)$/m)
105
+ return match == null ? AgentCodeLanguage.Other : fileExtensionLanguage(match[1])
60
106
  }
61
107
 
62
- // Checked ahead of the single-array shapes below: a scaffold plan carries its own `stories`
63
- // array (so the StoryPlan check would otherwise swallow it), and a runtime decision straight
64
- // from the MODEL never carries `actor`/`worker` — those are added only once the decision is
65
- // persisted onto a StoryDesign — so requiring them here missed every live model call.
66
- if ('identity' in object && 'guestHome' in object && 'areas' in object && 'stories' in object) {
67
- return AgentStructuredKind.ScaffoldPlan
108
+ const fencedLanguageOf = (text: string): AgentCodeLanguage | undefined => {
109
+ const match = text.match(/^```([\w+-]+)/m)
110
+ const language = match?.[1]?.toLowerCase()
111
+ if (language == null) return undefined
112
+ if (['tsx', 'jsx', 'react'].includes(language)) return AgentCodeLanguage.ReactTsx
113
+ if (language === 'css') return AgentCodeLanguage.Css
114
+ if (['ts', 'typescript', 'js', 'javascript'].includes(language)) return AgentCodeLanguage.TypeScript
115
+ if (language === 'json') return AgentCodeLanguage.Json
116
+ return AgentCodeLanguage.Other
68
117
  }
69
- if (Array.isArray(object.jobs) && Array.isArray(object.agents) && 'kv' in object) {
70
- return AgentStructuredKind.RuntimeDecision
118
+
119
+ /** Conservative code detection; prose with one identifier remains plain text. */
120
+ const agentCodeLanguageOf = (text: string): AgentCodeLanguage => {
121
+ const content = text.trim().replace(/^```[\w+-]*\n?|\n?```$/g, '')
122
+ const fenced = fencedLanguageOf(text)
123
+ if (fenced != null) return fenced
124
+ if (content === '') return AgentCodeLanguage.Other
125
+ try {
126
+ JSON.parse(content)
127
+ if (/^[{[]/.test(content)) return AgentCodeLanguage.Json
128
+ } catch {
129
+ // The remaining heuristics deliberately require source-like syntax.
130
+ }
131
+ if (/<[A-Za-z][\w.:-]*(?:\s[^>]*)?\/>|<[A-Za-z][\w.:-]*(?:\s[^>]*)?>/.test(content) &&
132
+ /\b(import|export|const|function|return)\b/.test(content)) return AgentCodeLanguage.ReactTsx
133
+ if (/(^|\n)\s*(?:[.#][\w-]+|[a-z][\w-]*(?:\[[^\]]+\])?)\s*\{[^}]*:[^}]*\}/.test(content)) {
134
+ return AgentCodeLanguage.Css
135
+ }
136
+ if (/\b(import|export|interface|type|const|let|function|class)\b/.test(content) &&
137
+ /[;{}]|=>/.test(content)) return AgentCodeLanguage.TypeScript
138
+ return AgentCodeLanguage.Other
71
139
  }
72
140
 
73
- if (Array.isArray(object.files)) return AgentStructuredKind.ArtifactSelection
74
- if (Array.isArray(object.entities)) return AgentStructuredKind.EntitySelection
75
- if (Array.isArray(object.stories)) return AgentStructuredKind.StoryPlan
76
- if (Array.isArray(object.screens)) return AgentStructuredKind.ScreenPlan
77
- if (Array.isArray(object.components)) return AgentStructuredKind.ComponentPlan
78
- if (Array.isArray(object.transitions)) return AgentStructuredKind.TransitionPlan
79
- if (Array.isArray(object.entries)) return AgentStructuredKind.EntrypointSelection
80
- if (Array.isArray(object.candidates)) return AgentStructuredKind.CandidateRanking
81
- if (Object.values(object).some(value => {
82
- const entry = asRecord(value)
83
- return entry != null && Array.isArray(entry.permissions) && 'level' in entry
84
- })) return AgentStructuredKind.AccessPolicy
85
- return AgentStructuredKind.GenericRecord
86
- }
141
+ const isUnifiedDiff = (text: string): boolean =>
142
+ /^---\s+.+\n\+\+\+\s+.+/m.test(text) || (/^@@\s+[-+]/m.test(text) && /^(?:\+|-)[^+-]/m.test(text))
87
143
 
88
- const decisionAction = (action: string): boolean =>
89
- action.startsWith('should-') || action.startsWith('is-') || action.includes('blueprint-case') || action.includes('choose-case')
144
+ const markdownKindOf = (text: string): AgentMarkdownKind | undefined => {
145
+ if (/^#{1,6}\s+/m.test(text) || /^>\s+/m.test(text) || /^\|.+\|\s*$/m.test(text)) {
146
+ return AgentMarkdownKind.Documentation
147
+ }
148
+ const listItems = text.match(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/gm)?.length ?? 0
149
+ return listItems >= 2 ? AgentMarkdownKind.Documentation : undefined
150
+ }
90
151
 
91
- const fileExtensionLanguage = (path: string): AgentCodeLanguage => {
92
- const name = path.toLowerCase().split('?')[0]
93
- if (/\.(tsx|jsx)$/.test(name)) return AgentCodeLanguage.ReactTsx
94
- if (/\.css$/.test(name)) return AgentCodeLanguage.Css
95
- if (/\.(ts|mts|cts|js|mjs|cjs)$/.test(name)) return AgentCodeLanguage.TypeScript
96
- if (/\.json$/.test(name)) return AgentCodeLanguage.Json
97
- return AgentCodeLanguage.Other
98
- }
152
+ const isGenericStructure = (kind: AgentStructuredKind | undefined): boolean =>
153
+ kind == null || kind === AgentStructuredKind.GenericRecord || kind === AgentStructuredKind.GenericList ||
154
+ kind === AgentStructuredKind.GenericValue
155
+
156
+ const classifyAgentMessage = (input: AgentMessageClassificationInput): AgentMessagePresentation => {
157
+ const role = agentMessageRoleOf(input)
158
+ const action = actionOf(input)
159
+ const text = contentOf(input)
160
+ const structure = structuredKindOf(input.value)
161
+
162
+ if (input.outputType === 'tool_calls') {
163
+ // A single pinned-schema call resolves to its own card; everything else — several calls in
164
+ // one turn, an unconstrained agent-loop action, or a shape too generic to be informative —
165
+ // is a tool call, not a schema result.
166
+ const isMultiCall = Array.isArray(input.value) && input.value.length > 1
167
+ const isToolCalls = isMultiCall || agentLoopActions.has(action) || isGenericStructure(structure)
168
+ return {
169
+ category: AgentMessageCategory.Structured,
170
+ structure: isToolCalls ? AgentStructuredKind.ToolCalls : structure!,
171
+ role,
172
+ }
173
+ }
174
+ if (structure != null) return { category: AgentMessageCategory.Structured, structure, role }
175
+ const actionStructure = structuredActions[action]
176
+ if (actionStructure != null) return { category: AgentMessageCategory.Structured, structure: actionStructure, role }
177
+ if (decisionAction(action)) return { category: AgentMessageCategory.Structured, structure: AgentStructuredKind.Decision, role }
178
+ if (isUnifiedDiff(text) || action === 'update-code') {
179
+ return { category: AgentMessageCategory.Diff, language: agentDiffLanguageOf(text), role }
180
+ }
181
+ if (codeActions.has(action) || fencedLanguageOf(text) != null || agentCodeLanguageOf(text) !== AgentCodeLanguage.Other) {
182
+ return { category: AgentMessageCategory.Code, language: agentCodeLanguageOf(text), role }
183
+ }
184
+ const document = documentActions[action] ?? markdownKindOf(text)
185
+ if (document != null) return { category: AgentMessageCategory.Markdown, document, role }
186
+ if (input.value != null) {
187
+ return {
188
+ category: AgentMessageCategory.Structured,
189
+ structure: Array.isArray(input.value) ? AgentStructuredKind.GenericList : AgentStructuredKind.GenericValue,
190
+ role,
191
+ }
192
+ }
193
+ return { category: AgentMessageCategory.Plain, role }
194
+ }
99
195
 
100
- /** Finds the language of a unified diff from its destination (or source) file path. */
101
- export const agentDiffLanguageOf = (text: string): AgentCodeLanguage => {
102
- const match = text.match(/^\+\+\+\s+(?:b\/)?(.+)$/m) ?? text.match(/^---\s+(?:a\/)?(.+)$/m)
103
- return match == null ? AgentCodeLanguage.Other : fileExtensionLanguage(match[1])
196
+ return {
197
+ isAgentMessageHidden, agentMessageRoleOf, agentToolCallArguments, agentDiffLanguageOf, agentCodeLanguageOf,
198
+ isUnifiedDiff, classifyAgentMessage,
199
+ }
104
200
  }
105
201
 
106
- const fencedLanguageOf = (text: string): AgentCodeLanguage | undefined => {
107
- const match = text.match(/^```([\w+-]+)/m)
108
- const language = match?.[1]?.toLowerCase()
109
- if (language == null) return undefined
110
- if (['tsx', 'jsx', 'react'].includes(language)) return AgentCodeLanguage.ReactTsx
111
- if (language === 'css') return AgentCodeLanguage.Css
112
- if (['ts', 'typescript', 'js', 'javascript'].includes(language)) return AgentCodeLanguage.TypeScript
113
- if (language === 'json') return AgentCodeLanguage.Json
114
- return AgentCodeLanguage.Other
115
- }
202
+ export const agentPresentationHelper = createAgentPresentationHelper()
116
203
 
117
- /** Conservative code detection; prose with one identifier remains plain text. */
118
- export const agentCodeLanguageOf = (text: string): AgentCodeLanguage => {
119
- const content = text.trim().replace(/^```[\w+-]*\n?|\n?```$/g, '')
120
- const fenced = fencedLanguageOf(text)
121
- if (fenced != null) return fenced
122
- if (content === '') return AgentCodeLanguage.Other
123
- try {
124
- JSON.parse(content)
125
- if (/^[{[]/.test(content)) return AgentCodeLanguage.Json
126
- } catch {
127
- // The remaining heuristics deliberately require source-like syntax.
128
- }
129
- if (/<[A-Za-z][\w.:-]*(?:\s[^>]*)?\/>|<[A-Za-z][\w.:-]*(?:\s[^>]*)?>/.test(content) &&
130
- /\b(import|export|const|function|return)\b/.test(content)) return AgentCodeLanguage.ReactTsx
131
- if (/(^|\n)\s*(?:[.#][\w-]+|[a-z][\w-]*(?:\[[^\]]+\])?)\s*\{[^}]*:[^}]*\}/.test(content)) {
132
- return AgentCodeLanguage.Css
133
- }
134
- if (/\b(import|export|interface|type|const|let|function|class)\b/.test(content) &&
135
- /[;{}]|=>/.test(content)) return AgentCodeLanguage.TypeScript
136
- return AgentCodeLanguage.Other
137
- }
204
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.isAgentMessageHidden(…)` */
205
+ export const isAgentMessageHidden = (input: AgentMessageClassificationInput): boolean =>
206
+ agentPresentationHelper.isAgentMessageHidden(input)
138
207
 
139
- export const isUnifiedDiff = (text: string): boolean =>
140
- /^---\s+.+\n\+\+\+\s+.+/m.test(text) || (/^@@\s+[-+]/m.test(text) && /^(?:\+|-)[^+-]/m.test(text))
208
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentMessageRoleOf(…)` */
209
+ export const agentMessageRoleOf = (input: AgentMessageClassificationInput): AgentMessageRole =>
210
+ agentPresentationHelper.agentMessageRoleOf(input)
141
211
 
142
- const markdownKindOf = (text: string): AgentMarkdownKind | undefined => {
143
- if (/^#{1,6}\s+/m.test(text) || /^>\s+/m.test(text) || /^\|.+\|\s*$/m.test(text)) {
144
- return AgentMarkdownKind.Documentation
145
- }
146
- const listItems = text.match(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/gm)?.length ?? 0
147
- return listItems >= 2 ? AgentMarkdownKind.Documentation : undefined
148
- }
212
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentToolCallArguments(…)` */
213
+ export const agentToolCallArguments = (value: unknown): unknown => agentPresentationHelper.agentToolCallArguments(value)
149
214
 
150
- const isGenericStructure = (kind: AgentStructuredKind | undefined): boolean =>
151
- kind == null || kind === AgentStructuredKind.GenericRecord || kind === AgentStructuredKind.GenericList ||
152
- kind === AgentStructuredKind.GenericValue
153
-
154
- export const classifyAgentMessage = (input: AgentMessageClassificationInput): AgentMessagePresentation => {
155
- const role = agentMessageRoleOf(input)
156
- const action = actionOf(input)
157
- const text = contentOf(input)
158
- const structure = structuredKindOf(input.value)
159
-
160
- if (input.outputType === 'tool_calls') {
161
- // A single pinned-schema call resolves to its own card; everything else — several calls in
162
- // one turn, an unconstrained agent-loop action, or a shape too generic to be informative —
163
- // is a tool call, not a schema result.
164
- const isMultiCall = Array.isArray(input.value) && input.value.length > 1
165
- const isToolCalls = isMultiCall || agentLoopActions.has(action) || isGenericStructure(structure)
166
- return {
167
- category: AgentMessageCategory.Structured,
168
- structure: isToolCalls ? AgentStructuredKind.ToolCalls : structure!,
169
- role,
170
- }
171
- }
172
- if (structure != null) return { category: AgentMessageCategory.Structured, structure, role }
173
- const actionStructure = structuredActions[action]
174
- if (actionStructure != null) return { category: AgentMessageCategory.Structured, structure: actionStructure, role }
175
- if (decisionAction(action)) return { category: AgentMessageCategory.Structured, structure: AgentStructuredKind.Decision, role }
176
- if (isUnifiedDiff(text) || action === 'update-code') {
177
- return { category: AgentMessageCategory.Diff, language: agentDiffLanguageOf(text), role }
178
- }
179
- if (codeActions.has(action) || fencedLanguageOf(text) != null || agentCodeLanguageOf(text) !== AgentCodeLanguage.Other) {
180
- return { category: AgentMessageCategory.Code, language: agentCodeLanguageOf(text), role }
181
- }
182
- const document = documentActions[action] ?? markdownKindOf(text)
183
- if (document != null) return { category: AgentMessageCategory.Markdown, document, role }
184
- if (input.value != null) {
185
- return {
186
- category: AgentMessageCategory.Structured,
187
- structure: Array.isArray(input.value) ? AgentStructuredKind.GenericList : AgentStructuredKind.GenericValue,
188
- role,
189
- }
190
- }
191
- return { category: AgentMessageCategory.Plain, role }
192
- }
215
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentDiffLanguageOf(…)` */
216
+ export const agentDiffLanguageOf = (text: string): AgentCodeLanguage => agentPresentationHelper.agentDiffLanguageOf(text)
217
+
218
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.agentCodeLanguageOf(…)` */
219
+ export const agentCodeLanguageOf = (text: string): AgentCodeLanguage => agentPresentationHelper.agentCodeLanguageOf(text)
220
+
221
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.isUnifiedDiff(…)` */
222
+ export const isUnifiedDiff = (text: string): boolean => agentPresentationHelper.isUnifiedDiff(text)
223
+
224
+ /** @deprecated compat:factory-refactor — use `agentPresentationHelper.classifyAgentMessage(…)` */
225
+ export const classifyAgentMessage = (input: AgentMessageClassificationInput): AgentMessagePresentation =>
226
+ agentPresentationHelper.classifyAgentMessage(input)
@@ -1 +1,3 @@
1
- export type RecordValue = Record<string, unknown>
1
+ export interface RecordValue {
2
+ [key: string]: unknown
3
+ }
@@ -1,4 +1,5 @@
1
1
  export type * from './types.js'
2
+ export type * from './tenancy/types.js'
2
3
 
3
4
  export * from './consts.js'
4
5
  export * from './tenancy.js'
@@ -0,0 +1,23 @@
1
+ import type { Blueprint } from '../../blueprint/types.js'
2
+ import type { ProjectArea } from '../consts.js'
3
+ import type { ProjectTenancy } from '../types.js'
4
+
5
+ /** Which of a product's audiences act inside a tenant organization. */
6
+ export interface TenancyHelper {
7
+ /**
8
+ * The tenancy of a resolved blueprint.
9
+ *
10
+ * Total, like `landingGatePreferenceOf`: an absent layer, an absent key and a value this deploy
11
+ * cannot read all answer {@link NO_TENANCY}. Only a literal `true` turns a flag on, because a flag
12
+ * read as on by mistake splits a product's people into organizations nobody asked for, while one
13
+ * read as off leaves the application exactly as it was before tenancy existed.
14
+ */
15
+ tenancyOf: (blueprint?: Pick<Blueprint, 'experience'> | null) => ProjectTenancy
16
+ /**
17
+ * Whether an AREA's people act inside a tenant organization.
18
+ *
19
+ * Guest has no organization to act in, and admin is the project owner, who stands above every
20
+ * tenant rather than inside one — so both are never tenanted, whatever the flags say.
21
+ */
22
+ tenantedArea: (area: ProjectArea, tenancy: ProjectTenancy) => boolean
23
+ }
@@ -1,33 +1,34 @@
1
1
  import type { Blueprint } from '../blueprint/types.js'
2
2
  import { ProjectArea, NO_TENANCY } from './consts.js'
3
3
  import type { ProjectTenancy } from './types.js'
4
+ import type { TenancyHelper } from './tenancy/types.js'
4
5
 
5
- /**
6
- * The tenancy of a resolved blueprint.
7
- *
8
- * Total, like `landingGatePreferenceOf`: an absent layer, an absent key and a value this deploy
9
- * cannot read all answer {@link NO_TENANCY}. Only a literal `true` turns a flag on, because a flag
10
- * read as on by mistake splits a product's people into organizations nobody asked for, while one
11
- * read as off leaves the application exactly as it was before tenancy existed.
12
- */
13
- export const tenancyOf = (blueprint?: Pick<Blueprint, 'experience'> | null): ProjectTenancy => {
14
- const tenancy = blueprint?.experience?.tenancy
15
- const operators = tenancy?.operators === true
16
- const users = tenancy?.users === true
6
+ export const createTenancyHelper = (): TenancyHelper => {
7
+ const tenancyOf = (blueprint?: Pick<Blueprint, 'experience'> | null): ProjectTenancy => {
8
+ const tenancy = blueprint?.experience?.tenancy
9
+ const operators = tenancy?.operators === true
10
+ const users = tenancy?.users === true
17
11
 
18
- return operators || users ? Object.freeze({ operators, users }) : NO_TENANCY
19
- }
12
+ return operators || users ? Object.freeze({ operators, users }) : NO_TENANCY
13
+ }
20
14
 
21
- /**
22
- * Whether an AREA's people act inside a tenant organization.
23
- *
24
- * Guest has no organization to act in, and admin is the project owner, who stands above every
25
- * tenant rather than inside one — so both are never tenanted, whatever the flags say.
26
- */
27
- export const tenantedArea = (area: ProjectArea, tenancy: ProjectTenancy): boolean => {
28
- switch (area) {
29
- case ProjectArea.User: return tenancy.users === true
30
- case ProjectArea.Operator: return tenancy.operators === true
31
- default: return false
15
+ const tenantedArea = (area: ProjectArea, tenancy: ProjectTenancy): boolean => {
16
+ switch (area) {
17
+ case ProjectArea.User: return tenancy.users === true
18
+ case ProjectArea.Operator: return tenancy.operators === true
19
+ default: return false
20
+ }
32
21
  }
22
+
23
+ return { tenancyOf, tenantedArea }
33
24
  }
25
+
26
+ export const tenancyHelper = createTenancyHelper()
27
+
28
+ /** @deprecated compat:factory-refactor — use `tenancyHelper.tenancyOf(…)` */
29
+ export const tenancyOf = (blueprint?: Pick<Blueprint, 'experience'> | null): ProjectTenancy =>
30
+ tenancyHelper.tenancyOf(blueprint)
31
+
32
+ /** @deprecated compat:factory-refactor — use `tenancyHelper.tenantedArea(…)` */
33
+ export const tenantedArea = (area: ProjectArea, tenancy: ProjectTenancy): boolean =>
34
+ tenancyHelper.tenantedArea(area, tenancy)
@@ -0,0 +1,45 @@
1
+ import type { StoryDraft } from '../../areas/types.js'
2
+ import type { ConnectingStoryDraft, MergedStoryDraft } from '../types.js'
3
+
4
+ /** The connecting stories of a flow: how many it may carry, and where each one lands. */
5
+ export interface ConnectingStoryHelper {
6
+ /**
7
+ * How many connecting stories one flow may carry.
8
+ *
9
+ * An N-step chain has N-1 joints, and a connecting story exists to bridge one of them — so the
10
+ * flow sizes its own supporting cast, and a three-step product can never end up with eight list
11
+ * screens. It is a CEILING, not a target: the prompt is told to write as few as its rules actually
12
+ * derived, and most flows land well below this.
13
+ *
14
+ * The real reason for a hard number: every story here becomes a full develop run the project's
15
+ * owner pays for.
16
+ */
17
+ connectingStoryCap: (flowCount: number) => number
18
+ /**
19
+ * Interleave the connecting stories into the flow they were derived from.
20
+ *
21
+ * `after` is an ANCHOR, not a position: it names the flow story whose result the connecting story
22
+ * displays, so the connecting story lands immediately behind it — which is also immediately in
23
+ * front of the step it leads into. The result is ONE ordered list, and it is the order records are
24
+ * created in.
25
+ *
26
+ * This is the only place the anchor is interpreted. Both halves of the feature — the prompt that
27
+ * produces it and the pipeline that persists the result — read it through here, or the two drift
28
+ * and nothing fails loudly enough to notice. The CLAMPED anchor is carried out on each connective
29
+ * entry as `after`, which is what the story card's `follows` relationship is written from.
30
+ *
31
+ * Four properties are deliberate:
32
+ *
33
+ * - **The flow subsequence is never disturbed.** Strip the connecting stories back out and you have
34
+ * `flow`, in `flow` order: story N still implements numbered step N. Everything that finds the
35
+ * primary story depends on that.
36
+ * - **Nothing precedes the first flow story.** An anchor below 1 is clamped up rather than opening a
37
+ * position in front of the flow — nothing can be listed before the step that produced it, and
38
+ * story 1 stays the enabling action.
39
+ * - **A placement is advice; the story is work already paid for.** An anchor past the end means
40
+ * "at the end", and one that is not a number at all means the front of the flow. Neither is a
41
+ * reason to lose a story.
42
+ * - **Ties keep the model's order**, which is the only ranking anything has.
43
+ */
44
+ mergeConnectingStories: (flow: StoryDraft[], connecting: ConnectingStoryDraft[]) => MergedStoryDraft[]
45
+ }
@@ -0,0 +1,64 @@
1
+ import type { StoryDraft } from "../areas/types.js"
2
+ import type { ConnectingStoryDraft, MergedStoryDraft } from "./types.js"
3
+ import { StoryKind } from "./consts.js"
4
+ import type { ConnectingStoryHelper } from './connecting/types.js'
5
+
6
+ export const createConnectingStoryHelper = (): ConnectingStoryHelper => {
7
+ const connectingStoryCap = (flowCount: number): number => Math.max(flowCount - 1, 0)
8
+
9
+ /** Collapse case and whitespace, so "the same story twice" is recognised as such. */
10
+ const canonical = (story: string): string => story.trim().replace(/\s+/g, ' ').toLowerCase()
11
+
12
+ const mergeConnectingStories = (
13
+ flow: StoryDraft[], connecting: ConnectingStoryDraft[]
14
+ ): MergedStoryDraft[] => {
15
+ if (flow.length < 1) {
16
+ return []
17
+ }
18
+
19
+ const seen = new Set(flow.map(({ story }) => canonical(story)))
20
+ const placed: Array<{ draft: ConnectingStoryDraft, at: number }> = []
21
+
22
+ for (const draft of connecting) {
23
+ const text = canonical(draft.story)
24
+ // A connecting story that repeats a flow story is not a second story: it is one develop run
25
+ // spent twice AND — since the home-screen detector matches its answer back by exact text — a
26
+ // second record that answer could resolve to.
27
+ if (text === '' || seen.has(text)) {
28
+ continue
29
+ }
30
+ seen.add(text)
31
+
32
+ const after = Number(draft.after)
33
+ placed.push({
34
+ draft,
35
+ at: Number.isFinite(after) ? Math.min(Math.max(Math.trunc(after), 1), flow.length) : 1,
36
+ })
37
+ }
38
+
39
+ // Over the cap, the LATEST-anchored go: a story late in the flow gates the fewest steps behind
40
+ // it, while the queue that hands step 1 to step 2 is what makes everything after it reachable.
41
+ // The sort is stable, so two stories on the same step keep the order they were derived in.
42
+ const surviving = placed
43
+ .map((entry, order) => ({ ...entry, order }))
44
+ .sort((a, b) => a.at - b.at || a.order - b.order)
45
+ .slice(0, connectingStoryCap(flow.length))
46
+
47
+ // Bucket N holds what comes immediately after flow story N (1-based, as the prompt numbers them).
48
+ const buckets: ConnectingStoryDraft[][] = flow.map(() => [])
49
+ for (const { draft, at } of surviving) {
50
+ buckets[at - 1]!.push(draft)
51
+ }
52
+
53
+ return flow.flatMap(({ story, area }, index) => [
54
+ { story, area, kind: StoryKind.Flow },
55
+ ...buckets[index]!.map(draft => (
56
+ { story: draft.story.trim(), area: draft.area, kind: StoryKind.Connective, after: index + 1 }
57
+ )),
58
+ ])
59
+ }
60
+
61
+ return { connectingStoryCap, mergeConnectingStories }
62
+ }
63
+
64
+ export const connectingStoryHelper = createConnectingStoryHelper()