@sixb/core 0.1.11 → 0.1.12

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 (641) hide show
  1. package/dist/actions/builders/params.d.ts +1 -22
  2. package/dist/actions/builders/params.d.ts.map +1 -1
  3. package/dist/actions/index.js +29 -28
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/actions/types/params.d.ts +10 -44
  6. package/dist/actions/types/params.d.ts.map +1 -1
  7. package/dist/actions/validation.d.ts.map +1 -1
  8. package/dist/actions/worker.js +3 -2
  9. package/dist/actions/worker.js.map +2 -2
  10. package/dist/agents/errors.d.ts +1 -1
  11. package/dist/agents/errors.d.ts.map +1 -1
  12. package/dist/agents/execution.d.ts +15 -9
  13. package/dist/agents/execution.d.ts.map +1 -1
  14. package/dist/agents/ids.d.ts +2 -0
  15. package/dist/agents/ids.d.ts.map +1 -1
  16. package/dist/agents/index.d.ts +1 -1
  17. package/dist/agents/index.d.ts.map +1 -1
  18. package/dist/agents/index.js +48 -42
  19. package/dist/agents/index.js.map +1 -1
  20. package/dist/agents/request.d.ts.map +1 -1
  21. package/dist/agents/sandbox.d.ts +5 -0
  22. package/dist/agents/sandbox.d.ts.map +1 -0
  23. package/dist/agents/streams/index.js +4 -3
  24. package/dist/agents/streams/index.js.map +1 -1
  25. package/dist/agents/streams/internal.js +4 -3
  26. package/dist/agents/streams/internal.js.map +1 -1
  27. package/dist/agents/validation.d.ts.map +1 -1
  28. package/dist/auth/index.js +8 -6
  29. package/dist/auth/index.js.map +1 -1
  30. package/dist/authorization/index.js +5 -4
  31. package/dist/authorization/index.js.map +1 -1
  32. package/dist/bootstrap/index.js +50 -46
  33. package/dist/bootstrap/index.js.map +1 -1
  34. package/dist/{chunk-17kfctj6.js → chunk-0mza4xb2.js} +2 -2
  35. package/dist/{chunk-g00bfdq6.js → chunk-2cxv584m.js} +12 -56
  36. package/dist/{chunk-g00bfdq6.js.map → chunk-2cxv584m.js.map} +3 -3
  37. package/dist/{chunk-jsy70480.js → chunk-2h63nrde.js} +365 -95
  38. package/dist/chunk-2h63nrde.js.map +20 -0
  39. package/dist/{chunk-1yefycb1.js → chunk-3bnt2wna.js} +2 -2
  40. package/dist/{chunk-awbhdqyc.js → chunk-3ghw2t5q.js} +1 -1
  41. package/dist/{chunk-b19g04jk.js → chunk-3h7ctayx.js} +1 -1
  42. package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
  43. package/dist/{chunk-5hz0fnca.js → chunk-4k53sm9e.js} +6 -2
  44. package/dist/chunk-4k53sm9e.js.map +12 -0
  45. package/dist/chunk-4ph94nhd.js +81 -0
  46. package/dist/chunk-4ph94nhd.js.map +10 -0
  47. package/dist/chunk-58geavnf.js +29 -0
  48. package/dist/chunk-58geavnf.js.map +10 -0
  49. package/dist/{chunk-0y39rgsb.js → chunk-5tetw4hn.js} +1 -1
  50. package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
  51. package/dist/chunk-69266efg.js.map +12 -0
  52. package/dist/{chunk-a0e6x5hd.js → chunk-6ma8dvzc.js} +121 -53
  53. package/dist/chunk-6ma8dvzc.js.map +15 -0
  54. package/dist/{chunk-skz0hst3.js → chunk-7c2g3sz9.js} +6 -86
  55. package/dist/{chunk-skz0hst3.js.map → chunk-7c2g3sz9.js.map} +3 -3
  56. package/dist/{chunk-z0s4axeh.js → chunk-7qnvhtcd.js} +93 -17
  57. package/dist/{chunk-z0s4axeh.js.map → chunk-7qnvhtcd.js.map} +7 -6
  58. package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
  59. package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
  60. package/dist/chunk-91kcnbf0.js.map +10 -0
  61. package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
  62. package/dist/chunk-96yw3pwd.js.map +10 -0
  63. package/dist/chunk-98cw09sw.js.map +2 -2
  64. package/dist/{chunk-93csa55g.js → chunk-axndsymr.js} +10 -4
  65. package/dist/chunk-axndsymr.js.map +11 -0
  66. package/dist/{chunk-4zhmdsx6.js → chunk-b768c93y.js} +61 -23
  67. package/dist/{chunk-4zhmdsx6.js.map → chunk-b768c93y.js.map} +5 -5
  68. package/dist/{chunk-dz5h08xv.js → chunk-bbaa1fet.js} +24 -9
  69. package/dist/{chunk-dz5h08xv.js.map → chunk-bbaa1fet.js.map} +4 -4
  70. package/dist/{chunk-7apz6hg4.js → chunk-bet1rb9h.js} +8 -4
  71. package/dist/chunk-bet1rb9h.js.map +10 -0
  72. package/dist/{chunk-358caqf5.js → chunk-bfjv1adk.js} +2 -2
  73. package/dist/{chunk-g91qxjj0.js → chunk-bg2bs62d.js} +5 -5
  74. package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
  75. package/dist/chunk-cd234ba4.js.map +14 -0
  76. package/dist/chunk-dmn70ztd.js.map +2 -2
  77. package/dist/{chunk-d63nnr5b.js → chunk-e1f1sqba.js} +39 -53
  78. package/dist/{chunk-d63nnr5b.js.map → chunk-e1f1sqba.js.map} +5 -6
  79. package/dist/{chunk-ap0g1g74.js → chunk-eyjzgav0.js} +39 -4
  80. package/dist/chunk-eyjzgav0.js.map +12 -0
  81. package/dist/{chunk-rb1xx120.js → chunk-f06sf7rr.js} +9 -5
  82. package/dist/chunk-f06sf7rr.js.map +11 -0
  83. package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
  84. package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
  85. package/dist/{chunk-38zv5rkr.js → chunk-g2gezsg5.js} +1 -1
  86. package/dist/{chunk-38zv5rkr.js.map → chunk-g2gezsg5.js.map} +2 -2
  87. package/dist/{chunk-01kj2pbh.js → chunk-g50nxqs5.js} +53 -66
  88. package/dist/chunk-g50nxqs5.js.map +18 -0
  89. package/dist/{chunk-1824gssz.js → chunk-gswwr35f.js} +4 -4
  90. package/dist/{chunk-92vk7gta.js → chunk-gzt6v1ja.js} +1 -1
  91. package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
  92. package/dist/chunk-hgqpcmyr.js.map +12 -0
  93. package/dist/{chunk-gqh45d2n.js → chunk-hkw8rykk.js} +2 -2
  94. package/dist/{chunk-f4w3yp4f.js → chunk-hzw7yv5g.js} +104 -21
  95. package/dist/chunk-hzw7yv5g.js.map +13 -0
  96. package/dist/{chunk-cfvakeax.js → chunk-jjwhy3rs.js} +5 -5
  97. package/dist/chunk-kept9cdd.js +29 -0
  98. package/dist/chunk-kept9cdd.js.map +10 -0
  99. package/dist/{chunk-ftv470j8.js → chunk-m7cx05vp.js} +247 -16
  100. package/dist/{chunk-ftv470j8.js.map → chunk-m7cx05vp.js.map} +14 -10
  101. package/dist/{chunk-z0271qkp.js → chunk-mdnw7nj8.js} +8 -6
  102. package/dist/chunk-mdnw7nj8.js.map +15 -0
  103. package/dist/{chunk-gq8vhakp.js → chunk-nzsy3xrp.js} +249 -86
  104. package/dist/{chunk-gq8vhakp.js.map → chunk-nzsy3xrp.js.map} +13 -11
  105. package/dist/chunk-p1683c0v.js +104 -0
  106. package/dist/chunk-p1683c0v.js.map +11 -0
  107. package/dist/chunk-p6r1ex7t.js +93 -0
  108. package/dist/chunk-p6r1ex7t.js.map +10 -0
  109. package/dist/{chunk-sepyxgpc.js → chunk-qm535afa.js} +10 -10
  110. package/dist/{chunk-sepyxgpc.js.map → chunk-qm535afa.js.map} +4 -4
  111. package/dist/chunk-r5zythxp.js +552 -0
  112. package/dist/chunk-r5zythxp.js.map +17 -0
  113. package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
  114. package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
  115. package/dist/{chunk-3ckk0xfj.js → chunk-sfypc7mk.js} +18 -13
  116. package/dist/{chunk-3ckk0xfj.js.map → chunk-sfypc7mk.js.map} +3 -3
  117. package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
  118. package/dist/chunk-t6f3tdnr.js.map +10 -0
  119. package/dist/{chunk-x9m9x2eq.js → chunk-t7dzd1tm.js} +3 -3
  120. package/dist/{chunk-pr2h4bv4.js → chunk-tg4g4zh0.js} +3 -3
  121. package/dist/chunk-vpxss818.js +56 -0
  122. package/dist/chunk-vpxss818.js.map +10 -0
  123. package/dist/{chunk-ms2tmn1k.js → chunk-vsg0g7h9.js} +53 -57
  124. package/dist/chunk-vsg0g7h9.js.map +17 -0
  125. package/dist/{chunk-8vj0rjgs.js → chunk-wjffn5m4.js} +1 -1
  126. package/dist/{chunk-wf88w4kp.js → chunk-x9tmx3fc.js} +2 -2
  127. package/dist/{chunk-fh8kgex1.js → chunk-xn686q2e.js} +8 -8
  128. package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
  129. package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
  130. package/dist/{chunk-v2vcg0w6.js → chunk-xtfryrfb.js} +2 -2
  131. package/dist/chunk-y0v18c2j.js +363 -0
  132. package/dist/chunk-y0v18c2j.js.map +14 -0
  133. package/dist/{chunk-72w2pxk7.js → chunk-y1ahv8b7.js} +11 -3
  134. package/dist/{chunk-72w2pxk7.js.map → chunk-y1ahv8b7.js.map} +3 -3
  135. package/dist/chunk-y3ev53cq.js +84 -0
  136. package/dist/chunk-y3ev53cq.js.map +10 -0
  137. package/dist/{chunk-gqm76kse.js → chunk-ybhz3j9g.js} +342 -41
  138. package/dist/{chunk-gqm76kse.js.map → chunk-ybhz3j9g.js.map} +17 -12
  139. package/dist/{chunk-z30bv4ga.js → chunk-yxb4c62x.js} +3 -2
  140. package/dist/{chunk-z30bv4ga.js.map → chunk-yxb4c62x.js.map} +3 -3
  141. package/dist/chunk-z3y5kg1x.js +14 -0
  142. package/dist/chunk-z3y5kg1x.js.map +10 -0
  143. package/dist/datasets/validation.d.ts +4 -0
  144. package/dist/datasets/validation.d.ts.map +1 -1
  145. package/dist/datasets/write.d.ts.map +1 -1
  146. package/dist/datasets/write.js +5 -4
  147. package/dist/datasets/write.js.map +1 -1
  148. package/dist/error-reporting/capability.d.ts +3 -2
  149. package/dist/error-reporting/capability.d.ts.map +1 -1
  150. package/dist/error-reporting/internal.js +5 -4
  151. package/dist/error-reporting/internal.js.map +1 -1
  152. package/dist/error-reporting/reports.d.ts +10 -0
  153. package/dist/error-reporting/reports.d.ts.map +1 -1
  154. package/dist/error-reporting/types.d.ts +10 -2
  155. package/dist/error-reporting/types.d.ts.map +1 -1
  156. package/dist/errors/catalog.d.ts +12 -0
  157. package/dist/errors/catalog.d.ts.map +1 -1
  158. package/dist/errors/failure-message.d.ts +8 -0
  159. package/dist/errors/failure-message.d.ts.map +1 -0
  160. package/dist/errors/internal.d.ts.map +1 -1
  161. package/dist/errors/internal.js +3 -2
  162. package/dist/errors/internal.js.map +1 -1
  163. package/dist/events/index.js +5 -4
  164. package/dist/events/index.js.map +1 -1
  165. package/dist/execution/agent.js +44 -41
  166. package/dist/execution/agent.js.map +1 -1
  167. package/dist/execution/authorization.d.ts.map +1 -1
  168. package/dist/execution/authorized-object-reader.d.ts +3 -0
  169. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  170. package/dist/execution/kernel-operation.d.ts +4 -0
  171. package/dist/execution/kernel-operation.d.ts.map +1 -0
  172. package/dist/execution/primitive.js +44 -41
  173. package/dist/execution/primitive.js.map +2 -2
  174. package/dist/execution/request.js +45 -42
  175. package/dist/execution/request.js.map +2 -2
  176. package/dist/execution/types.d.ts +6 -0
  177. package/dist/execution/types.d.ts.map +1 -1
  178. package/dist/index.d.ts +15 -5
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +68 -59
  181. package/dist/index.js.map +1 -1
  182. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  183. package/dist/lake-storage/index.js +5 -4
  184. package/dist/lake-storage/index.js.map +1 -1
  185. package/dist/materialization/errors.d.ts +1 -1
  186. package/dist/materialization/errors.d.ts.map +1 -1
  187. package/dist/materialization/index.d.ts +1 -0
  188. package/dist/materialization/index.d.ts.map +1 -1
  189. package/dist/materialization/index.js +3 -3
  190. package/dist/materialization/model.d.ts +2 -0
  191. package/dist/materialization/model.d.ts.map +1 -1
  192. package/dist/materialization/vectors.d.ts +19 -0
  193. package/dist/materialization/vectors.d.ts.map +1 -0
  194. package/dist/materializer/context.d.ts.map +1 -1
  195. package/dist/materializer/edits/commit.d.ts.map +1 -1
  196. package/dist/materializer/edits/vector-authority.d.ts +6 -0
  197. package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
  198. package/dist/materializer/edits/vectors.d.ts +6 -0
  199. package/dist/materializer/edits/vectors.d.ts.map +1 -0
  200. package/dist/materializer/effective/validate.d.ts.map +1 -1
  201. package/dist/materializer/effective/vector-indexing.d.ts +7 -0
  202. package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
  203. package/dist/materializer/effective/vectors.d.ts +6 -0
  204. package/dist/materializer/effective/vectors.d.ts.map +1 -0
  205. package/dist/materializer/execution/work-executor.d.ts +2 -1
  206. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  207. package/dist/materializer/index.js +26 -25
  208. package/dist/materializer/index.js.map +1 -1
  209. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  210. package/dist/models/catalog-index.d.ts +15 -0
  211. package/dist/models/catalog-index.d.ts.map +1 -0
  212. package/dist/models/catalog.d.ts +27 -6
  213. package/dist/models/catalog.d.ts.map +1 -1
  214. package/dist/models/decision/catalog.d.ts +12 -0
  215. package/dist/models/decision/catalog.d.ts.map +1 -0
  216. package/dist/models/decision/errors.d.ts +7 -0
  217. package/dist/models/decision/errors.d.ts.map +1 -0
  218. package/dist/models/decision/output.d.ts +50 -0
  219. package/dist/models/decision/output.d.ts.map +1 -0
  220. package/dist/models/decision/questions.d.ts +14 -0
  221. package/dist/models/decision/questions.d.ts.map +1 -0
  222. package/dist/models/decision/runtime.d.ts +7 -0
  223. package/dist/models/decision/runtime.d.ts.map +1 -0
  224. package/dist/models/decision/types.d.ts +92 -0
  225. package/dist/models/decision/types.d.ts.map +1 -0
  226. package/dist/models/decision/validation.d.ts +7 -0
  227. package/dist/models/decision/validation.d.ts.map +1 -0
  228. package/dist/models/definitions.d.ts +1 -1
  229. package/dist/models/definitions.d.ts.map +1 -1
  230. package/dist/models/embedding-model.d.ts +60 -0
  231. package/dist/models/embedding-model.d.ts.map +1 -0
  232. package/dist/models/execution/binding.d.ts +2 -0
  233. package/dist/models/execution/binding.d.ts.map +1 -1
  234. package/dist/models/execution/embedding.d.ts +5 -0
  235. package/dist/models/execution/embedding.d.ts.map +1 -0
  236. package/dist/models/execution/index.js +29 -26
  237. package/dist/models/execution/index.js.map +1 -1
  238. package/dist/models/execution/model-call-recorder.d.ts +5 -1
  239. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  240. package/dist/models/execution/session.d.ts +21 -0
  241. package/dist/models/execution/session.d.ts.map +1 -0
  242. package/dist/models/execution.d.ts.map +1 -1
  243. package/dist/models/generation-types.d.ts +2 -0
  244. package/dist/models/generation-types.d.ts.map +1 -1
  245. package/dist/models/index.d.ts +9 -1
  246. package/dist/models/index.d.ts.map +1 -1
  247. package/dist/models/index.js +17 -7
  248. package/dist/models/index.js.map +1 -1
  249. package/dist/models/pricing.d.ts +3 -2
  250. package/dist/models/pricing.d.ts.map +1 -1
  251. package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
  252. package/dist/objects/execution.d.ts +1 -0
  253. package/dist/objects/execution.d.ts.map +1 -1
  254. package/dist/objects/index.js +29 -28
  255. package/dist/objects/index.js.map +1 -1
  256. package/dist/objects/query/executor.d.ts +3 -0
  257. package/dist/objects/query/executor.d.ts.map +1 -1
  258. package/dist/objects/query/index.d.ts +2 -0
  259. package/dist/objects/query/index.d.ts.map +1 -1
  260. package/dist/objects/query/index.js +34 -24
  261. package/dist/objects/query/index.js.map +1 -1
  262. package/dist/objects/query/ir.d.ts +6 -2
  263. package/dist/objects/query/ir.d.ts.map +1 -1
  264. package/dist/objects/query/normalize.d.ts.map +1 -1
  265. package/dist/objects/query/validate.d.ts.map +1 -1
  266. package/dist/objects/sdk/object-handle.d.ts +5 -0
  267. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  268. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  269. package/dist/objects/sdk/query-executor.d.ts +2 -0
  270. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  271. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  272. package/dist/objects/vectors/handle.d.ts +4 -0
  273. package/dist/objects/vectors/handle.d.ts.map +1 -0
  274. package/dist/objects/vectors/indexing-batch.d.ts +6 -0
  275. package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
  276. package/dist/objects/vectors/indexing-generate.d.ts +11 -0
  277. package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
  278. package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
  279. package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
  280. package/dist/objects/vectors/indexing-shared.d.ts +17 -0
  281. package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
  282. package/dist/objects/vectors/indexing-single.d.ts +4 -0
  283. package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
  284. package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
  285. package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
  286. package/dist/objects/vectors/indexing.d.ts +7 -0
  287. package/dist/objects/vectors/indexing.d.ts.map +1 -0
  288. package/dist/objects/vectors/profile.d.ts +13 -0
  289. package/dist/objects/vectors/profile.d.ts.map +1 -0
  290. package/dist/objects/vectors/query.d.ts +5 -0
  291. package/dist/objects/vectors/query.d.ts.map +1 -0
  292. package/dist/objects/vectors/resolve-query.d.ts +6 -0
  293. package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
  294. package/dist/objects/vectors/types.d.ts +11 -0
  295. package/dist/objects/vectors/types.d.ts.map +1 -0
  296. package/dist/ontology/index.d.ts +2 -1
  297. package/dist/ontology/index.d.ts.map +1 -1
  298. package/dist/ontology/index.js +5 -5
  299. package/dist/ontology/index.js.map +1 -1
  300. package/dist/ontology/internal.js +5 -4
  301. package/dist/ontology/internal.js.map +1 -1
  302. package/dist/ontology/registry.d.ts.map +1 -1
  303. package/dist/ontology/types.d.ts +8 -9
  304. package/dist/ontology/types.d.ts.map +1 -1
  305. package/dist/ontology/validation/definition.d.ts +3 -0
  306. package/dist/ontology/validation/definition.d.ts.map +1 -0
  307. package/dist/ontology/validation/properties.d.ts.map +1 -1
  308. package/dist/ontology/validation/query.d.ts.map +1 -1
  309. package/dist/ontology/validation/schema.d.ts +1 -1
  310. package/dist/ontology/validation/schema.d.ts.map +1 -1
  311. package/dist/ontology/vector-profiles.d.ts +4 -0
  312. package/dist/ontology/vector-profiles.d.ts.map +1 -0
  313. package/dist/pipelines/index.js +28 -27
  314. package/dist/pipelines/index.js.map +1 -1
  315. package/dist/projections/internal.js +24 -23
  316. package/dist/projections/internal.js.map +1 -1
  317. package/dist/query.js +2 -2
  318. package/dist/queues/in-memory.d.ts +2 -1
  319. package/dist/queues/in-memory.d.ts.map +1 -1
  320. package/dist/queues/index.d.ts +1 -1
  321. package/dist/queues/index.d.ts.map +1 -1
  322. package/dist/queues/index.js +1 -1
  323. package/dist/queues/types.d.ts +5 -0
  324. package/dist/queues/types.d.ts.map +1 -1
  325. package/dist/runtime/create.d.ts +4 -3
  326. package/dist/runtime/create.d.ts.map +1 -1
  327. package/dist/runtime/host.d.ts +9 -6
  328. package/dist/runtime/host.d.ts.map +1 -1
  329. package/dist/runtime/internal.d.ts +3 -0
  330. package/dist/runtime/internal.d.ts.map +1 -1
  331. package/dist/runtime/internal.js +47 -1
  332. package/dist/runtime/internal.js.map +1 -1
  333. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  334. package/dist/runtime/sixb.d.ts +9 -4
  335. package/dist/runtime/sixb.d.ts.map +1 -1
  336. package/dist/runtime/types.d.ts +15 -3
  337. package/dist/runtime/types.d.ts.map +1 -1
  338. package/dist/sandboxes/auth.d.ts +16 -0
  339. package/dist/sandboxes/auth.d.ts.map +1 -0
  340. package/dist/sandboxes/config.d.ts +5 -0
  341. package/dist/sandboxes/config.d.ts.map +1 -0
  342. package/dist/sandboxes/configuration.d.ts +41 -0
  343. package/dist/sandboxes/configuration.d.ts.map +1 -0
  344. package/dist/sandboxes/environment.d.ts +13 -0
  345. package/dist/sandboxes/environment.d.ts.map +1 -0
  346. package/dist/sandboxes/errors.d.ts +1 -1
  347. package/dist/sandboxes/errors.d.ts.map +1 -1
  348. package/dist/sandboxes/index.d.ts +6 -1
  349. package/dist/sandboxes/index.d.ts.map +1 -1
  350. package/dist/sandboxes/index.js +16 -3
  351. package/dist/sandboxes/index.js.map +1 -1
  352. package/dist/sandboxes/sandbox.d.ts +35 -3
  353. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  354. package/dist/shared/params/builders.d.ts +25 -0
  355. package/dist/shared/params/builders.d.ts.map +1 -0
  356. package/dist/shared/params/types.d.ts +47 -0
  357. package/dist/shared/params/types.d.ts.map +1 -0
  358. package/dist/shared/params/validation.d.ts +15 -0
  359. package/dist/shared/params/validation.d.ts.map +1 -0
  360. package/dist/shares/internal.js +23 -22
  361. package/dist/shares/internal.js.map +2 -2
  362. package/dist/storage/action-runs/failure.js +4 -3
  363. package/dist/storage/action-runs/failure.js.map +1 -1
  364. package/dist/storage/action-runs/provider.js +1 -1
  365. package/dist/storage/agents/in-memory.d.ts +2 -1
  366. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  367. package/dist/storage/agents/index.d.ts +1 -1
  368. package/dist/storage/agents/index.d.ts.map +1 -1
  369. package/dist/storage/agents/provider.d.ts +5 -1
  370. package/dist/storage/agents/provider.d.ts.map +1 -1
  371. package/dist/storage/agents/provider.js +8 -4
  372. package/dist/storage/agents/provider.js.map +1 -1
  373. package/dist/storage/agents/types.d.ts +49 -0
  374. package/dist/storage/agents/types.d.ts.map +1 -1
  375. package/dist/storage/ai-cost/analytics.d.ts +1 -0
  376. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  377. package/dist/storage/ai-cost/index.d.ts +1 -1
  378. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  379. package/dist/storage/ai-cost/provider.js +2 -2
  380. package/dist/storage/ai-cost/types.d.ts +14 -2
  381. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  382. package/dist/storage/ai-limits/enforcement.js +4 -3
  383. package/dist/storage/ai-limits/enforcement.js.map +1 -1
  384. package/dist/storage/connector-connections/provider.js +3 -2
  385. package/dist/storage/connector-connections/provider.js.map +2 -2
  386. package/dist/storage/executions/provider.d.ts +3 -3
  387. package/dist/storage/executions/provider.d.ts.map +1 -1
  388. package/dist/storage/executions/provider.js +13 -11
  389. package/dist/storage/executions/provider.js.map +3 -3
  390. package/dist/storage/executions/types.d.ts +3 -0
  391. package/dist/storage/executions/types.d.ts.map +1 -1
  392. package/dist/storage/executions/validation.d.ts.map +1 -1
  393. package/dist/storage/index.d.ts +5 -3
  394. package/dist/storage/index.d.ts.map +1 -1
  395. package/dist/storage/index.js +25 -22
  396. package/dist/storage/index.js.map +1 -1
  397. package/dist/storage/internal.js +2 -2
  398. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  399. package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
  400. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
  401. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  402. package/dist/storage/objects/in-memory/storage.d.ts +7 -0
  403. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  404. package/dist/storage/objects/types.d.ts +2 -0
  405. package/dist/storage/objects/types.d.ts.map +1 -1
  406. package/dist/storage/ontology/commits.d.ts +1 -0
  407. package/dist/storage/ontology/commits.d.ts.map +1 -1
  408. package/dist/storage/ontology/in-memory/index.d.ts +4 -0
  409. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  410. package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
  411. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  412. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
  413. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  414. package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
  415. package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
  416. package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
  417. package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
  418. package/dist/storage/ontology/index.d.ts +6 -0
  419. package/dist/storage/ontology/index.d.ts.map +1 -1
  420. package/dist/storage/ontology/provider.js +2 -2
  421. package/dist/storage/ontology/vector-indexing.d.ts +94 -0
  422. package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
  423. package/dist/storage/ontology/vectors.d.ts +56 -0
  424. package/dist/storage/ontology/vectors.d.ts.map +1 -0
  425. package/dist/storage/operation-scope.d.ts.map +1 -1
  426. package/dist/storage/operation-scope.js +1 -1
  427. package/dist/storage/projection-runs/provider.js +4 -3
  428. package/dist/storage/projection-runs/provider.js.map +1 -1
  429. package/dist/storage/types.d.ts +1 -1
  430. package/dist/storage/types.d.ts.map +1 -1
  431. package/dist/storage/workflow-runs/provider.js +9 -7
  432. package/dist/storage/workflow-runs/provider.js.map +1 -1
  433. package/dist/syncs/index.js +29 -28
  434. package/dist/syncs/index.js.map +1 -1
  435. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  436. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  437. package/dist/testing/index.js +448 -69
  438. package/dist/testing/index.js.map +7 -7
  439. package/dist/testing/object-query-contract.d.ts.map +1 -1
  440. package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
  441. package/dist/testing/queues-contract.d.ts.map +1 -1
  442. package/dist/webhooks/internal.js +24 -23
  443. package/dist/webhooks/internal.js.map +2 -2
  444. package/dist/workers/index.js +3 -2
  445. package/dist/workers/index.js.map +2 -2
  446. package/dist/workflows/failure.d.ts.map +1 -1
  447. package/dist/workflows/index.js +47 -43
  448. package/dist/workflows/index.js.map +1 -1
  449. package/package.json +1 -1
  450. package/src/actions/builders/params.ts +1 -48
  451. package/src/actions/types/params.ts +14 -74
  452. package/src/actions/validation.ts +7 -84
  453. package/src/agents/errors.ts +3 -0
  454. package/src/agents/execution.ts +67 -15
  455. package/src/agents/ids.ts +8 -0
  456. package/src/agents/index.ts +1 -0
  457. package/src/agents/request.ts +11 -0
  458. package/src/agents/sandbox.ts +44 -0
  459. package/src/agents/validation.ts +2 -108
  460. package/src/datasets/validation.ts +40 -11
  461. package/src/datasets/write.ts +8 -11
  462. package/src/error-reporting/capability.ts +11 -0
  463. package/src/error-reporting/reports.ts +23 -0
  464. package/src/error-reporting/types.ts +12 -1
  465. package/src/errors/catalog.ts +12 -0
  466. package/src/errors/failure-message.ts +15 -0
  467. package/src/errors/internal.ts +57 -25
  468. package/src/execution/authorization.ts +12 -5
  469. package/src/execution/authorized-object-reader.ts +37 -2
  470. package/src/execution/kernel-operation.ts +27 -0
  471. package/src/execution/scopes.ts +2 -0
  472. package/src/execution/types.ts +4 -4
  473. package/src/index.ts +60 -1
  474. package/src/lake-storage/in-memory.ts +5 -3
  475. package/src/materialization/errors.ts +2 -2
  476. package/src/materialization/index.ts +1 -0
  477. package/src/materialization/model.ts +2 -0
  478. package/src/materialization/vectors.ts +18 -0
  479. package/src/materializer/README.md +14 -0
  480. package/src/materializer/context.ts +10 -0
  481. package/src/materializer/edits/commit.ts +8 -1
  482. package/src/materializer/edits/vector-authority.ts +108 -0
  483. package/src/materializer/edits/vectors.ts +100 -0
  484. package/src/materializer/effective/validate.ts +10 -3
  485. package/src/materializer/effective/vector-indexing.ts +84 -0
  486. package/src/materializer/effective/vectors.ts +47 -0
  487. package/src/materializer/execution/work-executor.ts +11 -3
  488. package/src/materializer/projections/replace.ts +1 -1
  489. package/src/materializer/shared/normalize.ts +11 -0
  490. package/src/materializer/telemetry/append.ts +1 -1
  491. package/src/models/catalog-index.ts +38 -0
  492. package/src/models/catalog.ts +66 -38
  493. package/src/models/decision/catalog.ts +32 -0
  494. package/src/models/decision/errors.ts +18 -0
  495. package/src/models/decision/output.ts +101 -0
  496. package/src/models/decision/questions.ts +29 -0
  497. package/src/models/decision/runtime.ts +188 -0
  498. package/src/models/decision/types.ts +109 -0
  499. package/src/models/decision/validation.ts +335 -0
  500. package/src/models/definitions.ts +1 -1
  501. package/src/models/embedding-model.ts +129 -0
  502. package/src/models/execution/README.md +63 -0
  503. package/src/models/execution/binding.ts +2 -0
  504. package/src/models/execution/embedding.ts +133 -0
  505. package/src/models/execution/model-call-recorder.ts +42 -30
  506. package/src/models/execution/session.ts +81 -0
  507. package/src/models/execution.ts +10 -52
  508. package/src/models/generation-types.ts +2 -0
  509. package/src/models/index.ts +37 -0
  510. package/src/models/pricing.ts +1 -2
  511. package/src/objects/authorized-ontology-view.ts +12 -8
  512. package/src/objects/execution.ts +2 -0
  513. package/src/objects/query/executor.ts +13 -4
  514. package/src/objects/query/explain.ts +7 -2
  515. package/src/objects/query/index.ts +2 -0
  516. package/src/objects/query/ir.ts +6 -2
  517. package/src/objects/query/normalize.ts +5 -1
  518. package/src/objects/query/validate.ts +74 -73
  519. package/src/objects/sdk/object-handle.ts +3 -0
  520. package/src/objects/sdk/object-set.ts +1 -0
  521. package/src/objects/sdk/query-builder.ts +9 -3
  522. package/src/objects/sdk/query-executor.ts +2 -1
  523. package/src/objects/sdk/runtime-query-executor.ts +6 -2
  524. package/src/objects/vectors/README.md +59 -0
  525. package/src/objects/vectors/handle.ts +91 -0
  526. package/src/objects/vectors/indexing-batch.ts +163 -0
  527. package/src/objects/vectors/indexing-generate.ts +184 -0
  528. package/src/objects/vectors/indexing-runtime.ts +17 -0
  529. package/src/objects/vectors/indexing-shared.ts +188 -0
  530. package/src/objects/vectors/indexing-single.ts +51 -0
  531. package/src/objects/vectors/indexing-store-batch.ts +62 -0
  532. package/src/objects/vectors/indexing.ts +23 -0
  533. package/src/objects/vectors/profile.ts +64 -0
  534. package/src/objects/vectors/query.ts +16 -0
  535. package/src/objects/vectors/resolve-query.ts +89 -0
  536. package/src/objects/vectors/types.ts +10 -0
  537. package/src/ontology/index.ts +2 -0
  538. package/src/ontology/registry.ts +8 -0
  539. package/src/ontology/types.ts +9 -9
  540. package/src/ontology/validation/definition.ts +104 -0
  541. package/src/ontology/validation/properties.ts +14 -4
  542. package/src/ontology/validation/query.ts +34 -51
  543. package/src/ontology/validation/schema.ts +85 -23
  544. package/src/ontology/vector-profiles.ts +35 -0
  545. package/src/queues/in-memory.ts +5 -0
  546. package/src/queues/index.ts +1 -0
  547. package/src/queues/types.ts +10 -0
  548. package/src/runtime/create.ts +7 -6
  549. package/src/runtime/host.ts +42 -6
  550. package/src/runtime/internal.ts +3 -0
  551. package/src/runtime/resolve-definitions.ts +19 -1
  552. package/src/runtime/sixb.ts +27 -9
  553. package/src/runtime/types.ts +16 -4
  554. package/src/sandboxes/README.md +41 -0
  555. package/src/sandboxes/auth.ts +17 -0
  556. package/src/sandboxes/config.ts +37 -0
  557. package/src/sandboxes/configuration.ts +268 -0
  558. package/src/sandboxes/environment.ts +107 -0
  559. package/src/sandboxes/errors.ts +1 -1
  560. package/src/sandboxes/index.ts +15 -0
  561. package/src/sandboxes/sandbox.ts +38 -3
  562. package/src/shared/params/builders.ts +50 -0
  563. package/src/shared/params/types.ts +84 -0
  564. package/src/shared/params/validation.ts +114 -0
  565. package/src/storage/agents/in-memory.ts +25 -1
  566. package/src/storage/agents/index.ts +3 -0
  567. package/src/storage/agents/provider.ts +105 -0
  568. package/src/storage/agents/types.ts +54 -0
  569. package/src/storage/ai-cost/analytics.ts +59 -21
  570. package/src/storage/ai-cost/index.ts +1 -0
  571. package/src/storage/ai-cost/types.ts +19 -2
  572. package/src/storage/executions/provider.ts +24 -12
  573. package/src/storage/executions/types.ts +1 -0
  574. package/src/storage/executions/validation.ts +7 -3
  575. package/src/storage/index.ts +15 -1
  576. package/src/storage/objects/in-memory/query.ts +25 -11
  577. package/src/storage/objects/in-memory/read-scope.ts +9 -2
  578. package/src/storage/objects/in-memory/read-source.ts +5 -0
  579. package/src/storage/objects/in-memory/selected-reader.ts +5 -1
  580. package/src/storage/objects/in-memory/storage.ts +19 -1
  581. package/src/storage/objects/types.ts +2 -0
  582. package/src/storage/ontology/commits.ts +1 -0
  583. package/src/storage/ontology/in-memory/index.ts +20 -0
  584. package/src/storage/ontology/in-memory/materializations.ts +13 -0
  585. package/src/storage/ontology/in-memory/shared-state.ts +9 -0
  586. package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
  587. package/src/storage/ontology/in-memory/vectors.ts +73 -0
  588. package/src/storage/ontology/index.ts +14 -0
  589. package/src/storage/ontology/vector-indexing.ts +98 -0
  590. package/src/storage/ontology/vectors.ts +48 -0
  591. package/src/storage/operation-scope.ts +1 -0
  592. package/src/storage/types.ts +3 -0
  593. package/src/testing/agent-storage-contract.ts +246 -0
  594. package/src/testing/ai-cost-storage-contract.ts +134 -0
  595. package/src/testing/object-query-contract.ts +41 -25
  596. package/src/testing/object-read-scope-contract.ts +1 -5
  597. package/src/testing/queues-contract.ts +31 -0
  598. package/src/workflows/failure.ts +10 -4
  599. package/src/workflows/validation.ts +2 -2
  600. package/dist/chunk-01kj2pbh.js.map +0 -19
  601. package/dist/chunk-5hz0fnca.js.map +0 -12
  602. package/dist/chunk-7apz6hg4.js.map +0 -10
  603. package/dist/chunk-7bs40fe1.js.map +0 -12
  604. package/dist/chunk-860dwwy0.js.map +0 -14
  605. package/dist/chunk-93csa55g.js.map +0 -11
  606. package/dist/chunk-a0e6x5hd.js.map +0 -14
  607. package/dist/chunk-aa6z4a19.js.map +0 -12
  608. package/dist/chunk-ap0g1g74.js.map +0 -11
  609. package/dist/chunk-f0rwz2vh.js.map +0 -11
  610. package/dist/chunk-f4w3yp4f.js.map +0 -12
  611. package/dist/chunk-jsy70480.js.map +0 -15
  612. package/dist/chunk-mrp7k0pw.js.map +0 -10
  613. package/dist/chunk-ms2tmn1k.js.map +0 -17
  614. package/dist/chunk-rb1xx120.js.map +0 -11
  615. package/dist/chunk-yv79ncbv.js.map +0 -10
  616. package/dist/chunk-z0271qkp.js.map +0 -15
  617. package/dist/chunk-z3y411fq.js +0 -99
  618. package/dist/chunk-z3y411fq.js.map +0 -11
  619. /package/dist/{chunk-17kfctj6.js.map → chunk-0mza4xb2.js.map} +0 -0
  620. /package/dist/{chunk-1yefycb1.js.map → chunk-3bnt2wna.js.map} +0 -0
  621. /package/dist/{chunk-awbhdqyc.js.map → chunk-3ghw2t5q.js.map} +0 -0
  622. /package/dist/{chunk-b19g04jk.js.map → chunk-3h7ctayx.js.map} +0 -0
  623. /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
  624. /package/dist/{chunk-0y39rgsb.js.map → chunk-5tetw4hn.js.map} +0 -0
  625. /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
  626. /package/dist/{chunk-358caqf5.js.map → chunk-bfjv1adk.js.map} +0 -0
  627. /package/dist/{chunk-g91qxjj0.js.map → chunk-bg2bs62d.js.map} +0 -0
  628. /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
  629. /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
  630. /package/dist/{chunk-1824gssz.js.map → chunk-gswwr35f.js.map} +0 -0
  631. /package/dist/{chunk-92vk7gta.js.map → chunk-gzt6v1ja.js.map} +0 -0
  632. /package/dist/{chunk-gqh45d2n.js.map → chunk-hkw8rykk.js.map} +0 -0
  633. /package/dist/{chunk-cfvakeax.js.map → chunk-jjwhy3rs.js.map} +0 -0
  634. /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
  635. /package/dist/{chunk-653vwrzr.js.map → chunk-rdghfsss.js.map} +0 -0
  636. /package/dist/{chunk-x9m9x2eq.js.map → chunk-t7dzd1tm.js.map} +0 -0
  637. /package/dist/{chunk-pr2h4bv4.js.map → chunk-tg4g4zh0.js.map} +0 -0
  638. /package/dist/{chunk-8vj0rjgs.js.map → chunk-wjffn5m4.js.map} +0 -0
  639. /package/dist/{chunk-wf88w4kp.js.map → chunk-x9tmx3fc.js.map} +0 -0
  640. /package/dist/{chunk-fh8kgex1.js.map → chunk-xn686q2e.js.map} +0 -0
  641. /package/dist/{chunk-v2vcg0w6.js.map → chunk-xtfryrfb.js.map} +0 -0
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/ontology/registry.ts", "../src/ontology/builders.ts"],
4
- "sourcesContent": [
5
- "/**\n * Standalone ontology registry — owns all type state and resolution logic.\n *\n * Zero infrastructure dependencies: imports only from the `ontology/` module.\n * Other modules depend on its read-only catalog instead of coupling to the full\n * `Sixb` facade.\n */\n\nimport {\n formatUnknownObjectTypeMessage,\n OntologyNotFoundError,\n OntologyValidationError,\n} from \"./errors\"\nimport type { ObjectTypeWithPropertyTokens } from \"./tokens\"\nimport { createLinkTokenMap, createPropertyTokenMap } from \"./tokens\"\nimport type { ObjectType, Schema, ValueType } from \"./types\"\nimport {\n validatePrimaryProperties,\n validatePropertyDefinitions,\n validateQueryMetadata,\n} from \"./validation\"\n\n// ── Input types ──────────────────────────────────────────────\n\n/** Typed wrapper used by `createSixb` to register full ontology documents. */\nexport type OntologyDocumentInput = {\n readonly id: string\n readonly version: string\n readonly objectTypes: readonly ObjectTypeWithPropertyTokens[]\n readonly valueTypes?: readonly ValueType[]\n}\n\n/**\n * Runtime accepts either full ontology documents or individual object types.\n * This keeps setup flexible while preserving strict typing.\n */\nexport type OntologySource = ObjectTypeWithPropertyTokens | OntologyDocumentInput\n\nexport interface OntologyRegistryOptions {\n readonly sources: readonly OntologySource[]\n}\n\n/** Read-only access to the host's validated ontology definitions and type graph. */\nexport interface OntologyDefinitionCatalog {\n listObjectTypes(): readonly ObjectTypeWithPropertyTokens[]\n getObjectTypeById(objectTypeId: string): ObjectTypeWithPropertyTokens | null\n resolveObjectType(objectTypeId: string): ObjectTypeWithPropertyTokens\n getPrimaryPropertyId(objectTypeId: string): string\n listSubTypes(objectTypeId: string): string[]\n listAncestorChain(objectType: ObjectType): readonly ObjectTypeWithPropertyTokens[]\n isValidLinkTarget(expected: string | string[], actual: string): boolean\n getObjectTypesById(): ReadonlyMap<string, ObjectTypeWithPropertyTokens>\n getValueTypesById(): ReadonlyMap<string, ValueType>\n getPrimaryByTypeId(): ReadonlyMap<string, string>\n}\n\n// ── Private helpers ──────────────────────────────────────────\n\nfunction isOntologyDocumentSource(\n source: OntologySource\n): source is Exclude<OntologySource, ObjectTypeWithPropertyTokens> {\n return \"objectTypes\" in source\n}\n\n/**\n * Recursively walk a schema tree and collect ValueTypes discovered\n * via `valueTypeRef` nodes that carry a `_resolved` schema.\n *\n * This enables auto-registration: when codegen emits `valueTypeRef(VT)`,\n * it stores the resolved schema inline. We extract it here so the runtime\n * `valueTypesById` registry is populated without requiring users to pass\n * ValueTypes explicitly.\n */\nfunction extractValueTypesFromSchema(\n schema: Schema,\n collected: Map<string, ValueType>,\n seen: Set<string>\n): void {\n if (typeof schema === \"string\") return\n\n if (schema.type === \"valueTypeRef\") {\n if (schema._resolved && !seen.has(schema.valueTypeId)) {\n seen.add(schema.valueTypeId)\n const localName = schema.valueTypeId.includes(\":\")\n ? schema.valueTypeId.slice(schema.valueTypeId.indexOf(\":\") + 1)\n : schema.valueTypeId\n collected.set(schema.valueTypeId, {\n id: schema.valueTypeId,\n name: localName,\n schema: schema._resolved,\n })\n extractValueTypesFromSchema(schema._resolved, collected, seen)\n }\n return\n }\n\n if (schema.type === \"object\") {\n for (const field of Object.values(schema.properties)) {\n extractValueTypesFromSchema(field.schema, collected, seen)\n }\n return\n }\n\n if (schema.type === \"array\") {\n extractValueTypesFromSchema(schema.items, collected, seen)\n return\n }\n\n if (schema.type === \"map\") {\n extractValueTypesFromSchema(schema.valueSchema, collected, seen)\n }\n}\n\nfunction collectOntology(sources: readonly OntologySource[]): {\n objectTypes: ObjectTypeWithPropertyTokens[]\n valueTypes: ValueType[]\n} {\n const objectTypes: ObjectTypeWithPropertyTokens[] = []\n const valueTypes: ValueType[] = []\n const seenObjectTypes = new Set<ObjectTypeWithPropertyTokens>()\n\n for (const source of sources) {\n if (isOntologyDocumentSource(source)) {\n for (const ot of source.objectTypes) {\n if (!seenObjectTypes.has(ot)) {\n seenObjectTypes.add(ot)\n objectTypes.push(ot)\n }\n }\n valueTypes.push(...(source.valueTypes ?? []))\n } else {\n if (!seenObjectTypes.has(source)) {\n seenObjectTypes.add(source)\n objectTypes.push(source)\n }\n }\n }\n\n // Auto-discover ValueTypes embedded in ObjectType schemas via _resolved.\n // Explicit ValueTypes (from OntologyDocumentInput) take priority.\n const explicitIds = new Set(valueTypes.map((vt) => vt.id))\n const discovered = new Map<string, ValueType>()\n\n for (const objectType of objectTypes) {\n for (const property of objectType.properties) {\n extractValueTypesFromSchema(property.schema, discovered, explicitIds)\n }\n for (const linkDef of objectType.links) {\n if (linkDef.properties) {\n for (const property of linkDef.properties) {\n extractValueTypesFromSchema(property.schema, discovered, explicitIds)\n }\n }\n }\n }\n\n valueTypes.push(...discovered.values())\n\n return { objectTypes, valueTypes }\n}\n\n// ── OntologyRegistry ─────────────────────────────────────────\n\n/**\n * Self-contained registry for ontology types.\n *\n * Holds all object types, value types, the subtype graph, and the primary\n * property mapping. Validates inheritance chains and flattens inherited\n * properties at construction time.\n *\n * Exposes read-only accessors so consumers never mutate ontology state.\n */\nexport class OntologyRegistry implements OntologyDefinitionCatalog {\n private readonly objectTypesById = new Map<string, ObjectTypeWithPropertyTokens>()\n private readonly valueTypesById = new Map<string, ValueType>()\n private readonly subTypesById = new Map<string, Set<string>>()\n private readonly primaryByTypeId: Map<string, string>\n\n constructor(options: OntologyRegistryOptions) {\n const { objectTypes, valueTypes } = collectOntology(options.sources)\n\n for (const objectType of objectTypes) {\n if (this.objectTypesById.has(objectType.id)) {\n throw new OntologyValidationError(`Duplicate object type id: ${objectType.id}`)\n }\n this.objectTypesById.set(objectType.id, objectType)\n }\n\n for (const valueType of valueTypes) {\n if (this.valueTypesById.has(valueType.id)) {\n throw new OntologyValidationError(`Duplicate value type id: ${valueType.id}`)\n }\n this.valueTypesById.set(valueType.id, valueType)\n }\n\n this.validateAndBuildExtendsRegistry()\n this.resolveInheritedProperties()\n validatePropertyDefinitions(this.objectTypesById, this.valueTypesById)\n validateQueryMetadata(this.objectTypesById, this.valueTypesById)\n this.primaryByTypeId = validatePrimaryProperties(this.objectTypesById)\n }\n\n // ── Public read API ──────────────────────────────────────\n\n /** All registered object types. */\n listObjectTypes(): readonly ObjectTypeWithPropertyTokens[] {\n return [...this.objectTypesById.values()]\n }\n\n /** Lookup an object type by id. Returns `null` if not found. */\n getObjectTypeById(objectTypeId: string): ObjectTypeWithPropertyTokens | null {\n return this.objectTypesById.get(objectTypeId) ?? null\n }\n\n /**\n * Lookup an object type by id, throwing if it does not exist.\n *\n * Use this when the caller requires the type to exist and should fail\n * loudly on unknown types (e.g., write operations receiving a type id).\n */\n resolveObjectType(objectTypeId: string): ObjectTypeWithPropertyTokens {\n const objectType = this.objectTypesById.get(objectTypeId)\n if (!objectType) {\n throw new OntologyNotFoundError(formatUnknownObjectTypeMessage(objectTypeId))\n }\n return objectType\n }\n\n /** Get the primary property id for a given object type. Throws if unknown. */\n getPrimaryPropertyId(objectTypeId: string): string {\n const id = this.primaryByTypeId.get(objectTypeId)\n if (!id) throw new OntologyNotFoundError(formatUnknownObjectTypeMessage(objectTypeId))\n return id\n }\n\n /** Collect all transitive sub-types of the given object type id. */\n listSubTypes(objectTypeId: string): string[] {\n const result: string[] = []\n const collect = (typeId: string): void => {\n const children = this.subTypesById.get(typeId)\n if (!children) return\n for (const childId of children) {\n result.push(childId)\n collect(childId)\n }\n }\n collect(objectTypeId)\n return result\n }\n\n /** Get the structural extends chain from root ancestor to the provided type. */\n listAncestorChain(objectType: ObjectType): readonly ObjectTypeWithPropertyTokens[] {\n const chain: ObjectTypeWithPropertyTokens[] = []\n let current: ObjectTypeWithPropertyTokens | null = this.resolveObjectType(objectType.id)\n const seen = new Set<string>()\n\n while (current) {\n if (seen.has(current.id)) {\n throw new OntologyValidationError(\n `Circular extends chain detected while resolving ancestors for \"${objectType.id}\".`\n )\n }\n seen.add(current.id)\n chain.push(current)\n current = current.extends ? this.resolveObjectType(current.extends) : null\n }\n\n return chain.reverse()\n }\n\n /**\n * Check whether `actual` is a valid target for a link expecting `expected`.\n *\n * Supports wildcard `\"*\"`, single concrete types, and arrays. A type\n * matches if it equals the expected type or is a transitive subtype.\n */\n isValidLinkTarget(expected: string | string[], actual: string): boolean {\n if (expected === \"*\") return true\n const types = Array.isArray(expected) ? expected : [expected]\n if (types.includes(\"*\")) return true\n for (const type of types) {\n if (actual === type || this.listSubTypes(type).includes(actual)) return true\n }\n return false\n }\n\n // ── Map accessors (read-only views) ──────────────────────\n\n /** Read-only view of all object types by id. */\n getObjectTypesById(): ReadonlyMap<string, ObjectTypeWithPropertyTokens> {\n return this.objectTypesById\n }\n\n /** Read-only view of all value types by id. */\n getValueTypesById(): ReadonlyMap<string, ValueType> {\n return this.valueTypesById\n }\n\n /** Read-only view of primary property ids by object type id. */\n getPrimaryByTypeId(): ReadonlyMap<string, string> {\n return this.primaryByTypeId\n }\n\n // ── Private initialization ───────────────────────────────\n\n /**\n * Build the subtype graph from `extends` and `parents` declarations.\n *\n * Validates that parent types exist and detects circular `extends` chains.\n */\n private validateAndBuildExtendsRegistry(): void {\n const resolving = new Set<string>()\n const resolved = new Set<string>()\n\n const registerChild = (parentId: string, childId: string): void => {\n let children = this.subTypesById.get(parentId)\n if (!children) {\n children = new Set()\n this.subTypesById.set(parentId, children)\n }\n children.add(childId)\n }\n\n const visit = (typeId: string, chain: string[]): void => {\n if (resolved.has(typeId)) return\n\n const objectType = this.objectTypesById.get(typeId)\n if (!objectType || !objectType.extends) {\n resolved.add(typeId)\n return\n }\n\n const parentId = objectType.extends\n\n if (!this.objectTypesById.has(parentId)) {\n throw new OntologyValidationError(\n `ObjectType \"${typeId}\" extends unknown type \"${parentId}\". If \"${parentId}\" comes from an external ontology, add it to 'ontologies' in createSixb().`\n )\n }\n\n if (resolving.has(typeId)) {\n throw new OntologyValidationError(\n `Circular extends chain detected: ${[...chain, typeId].join(\" → \")}`\n )\n }\n\n resolving.add(typeId)\n visit(parentId, [...chain, typeId])\n\n registerChild(parentId, typeId)\n\n resolving.delete(typeId)\n resolved.add(typeId)\n }\n\n for (const typeId of this.objectTypesById.keys()) {\n visit(typeId, [])\n }\n\n for (const [typeId, objectType] of this.objectTypesById) {\n if (!objectType.parents) continue\n for (const parentId of objectType.parents) {\n if (parentId === objectType.extends) continue\n if (!this.objectTypesById.has(parentId)) {\n throw new OntologyValidationError(\n `ObjectType \"${typeId}\" lists unknown parent \"${parentId}\" in parents. If \"${parentId}\" comes from an external ontology, add it to 'ontologies' in createSixb().`\n )\n }\n registerChild(parentId, typeId)\n }\n }\n }\n\n /**\n * For types with string `extends`, merge parent properties/links\n * and rebuild tokens. Idempotent: no-op if already flattened (codegen case).\n */\n private resolveInheritedProperties(): void {\n const resolved = new Set<string>()\n\n const resolve = (typeId: string): void => {\n if (resolved.has(typeId)) return\n const objectType = this.objectTypesById.get(typeId)!\n\n if (!objectType.extends) {\n resolved.add(typeId)\n return\n }\n\n resolve(objectType.extends)\n const parent = this.objectTypesById.get(objectType.extends)!\n\n const mergeById = <T extends { id: string }>(\n parentItems: readonly T[],\n childItems: readonly T[]\n ): T[] => {\n const childIds = new Set(childItems.map((item) => item.id))\n const fromParent = parentItems.filter((item) => !childIds.has(item.id))\n return [...fromParent, ...childItems]\n }\n\n const mergedProperties = mergeById(parent.properties, objectType.properties)\n const mergedLinks = mergeById(parent.links, objectType.links)\n\n const changed =\n mergedProperties.length !== objectType.properties.length ||\n mergedLinks.length !== objectType.links.length\n\n if (changed) {\n const merged: ObjectType = {\n ...objectType,\n properties: mergedProperties,\n links: mergedLinks,\n }\n const withTokens: ObjectTypeWithPropertyTokens = {\n ...merged,\n p: createPropertyTokenMap(merged),\n }\n ;(withTokens as ObjectTypeWithPropertyTokens & { l: unknown }).l =\n createLinkTokenMap(merged)\n this.objectTypesById.set(typeId, withTokens)\n }\n\n resolved.add(typeId)\n }\n\n for (const typeId of this.objectTypesById.keys()) {\n resolve(typeId)\n }\n }\n}\n",
6
- "/**\n * Builder helpers for ontology modeling.\n *\n * These functions provide shorthand for constructing `ObjectType`, `ValueType`,\n * `Interface`, `Property`, `ObjectLink`, and `EnumSchema` values with sensible\n * defaults so you can focus on the semantics rather than boilerplate.\n *\n * ```ts\n * import { defineObjectType, prop, link, stringEnum } from \"@sixb/core\"\n *\n * const thermostat = defineObjectType({\n * id: \"thermostat\",\n * name: \"Thermostat\",\n * properties: [\n * prop(\"currentTemperature\", \"double\", {\n * name: \"Current Temperature\",\n * semanticType: \"Temperature\",\n * required: true,\n * }),\n * prop(\"mode\", stringEnum([\"off\", \"heat\", \"cool\", \"auto\"])),\n * ],\n * links: [\n * link.ref(\"controls\", \"hvacZone\", { cardinality: \"one\" }),\n * ],\n * })\n * ```\n */\n\nimport type { ObjectTypeWithPropertyTokens, ObjectTypeWithTokens, PropertyTokenMap } from \"./tokens\"\nimport { createLinkTokenMap, createPropertyTokenMap } from \"./tokens\"\nimport type {\n EnumSchema,\n Interface,\n LinkCardinality,\n ObjectLink,\n ObjectLinkTargetMetadata,\n ObjectType,\n Ontology,\n Property,\n PropertyMode,\n PropertyQueryMetadata,\n Schema,\n ValueType,\n ValueTypeRefSchema,\n} from \"./types\"\nimport type { QuantitativeTypeId } from \"./units\"\n\ntype NameFromOptions<TId extends string, TOptions> = TOptions extends {\n name: infer TName extends string\n}\n ? TName\n : TId\n\n/**\n * Preserve literal option values when an option key is provided.\n *\n * Why this exists:\n * - `prop(\"x\", \"string\", { required: true })` should keep `required` as literal `true`\n * (not widen to `boolean`) so downstream inference can treat the field as required.\n */\ntype FieldFromOptions<TOptions, TKey extends string, TFallback> =\n TOptions extends Record<TKey, infer TValue>\n ? { [K in TKey]: TValue }\n : { [K in TKey]?: TFallback }\n\nconst selfLinkTargetObjectTypeId = \"__sixb.self__\"\ntype SelfLinkTargetObjectTypeId = typeof selfLinkTargetObjectTypeId\n\ntype NormalizeSelfLink<TObjectTypeId extends string, TLink> = TLink extends {\n targetObjectTypeId: SelfLinkTargetObjectTypeId\n}\n ? Omit<TLink, \"targetObjectTypeId\"> & { targetObjectTypeId: TObjectTypeId }\n : TLink\n\ntype NormalizeSelfLinks<TObjectTypeId extends string, TLinks extends readonly ObjectLink[]> = {\n -readonly [K in keyof TLinks]: NormalizeSelfLink<TObjectTypeId, TLinks[K]>\n}\n\n// ── Extends type utilities ───────────────────────────────────\n\n/**\n * Merge parent + child collections by id. Uses built-in `Exclude` on\n * the element union — no recursion, no \"excessively deep\" errors.\n */\ntype MergedCollection<\n TParent extends readonly { id: string }[],\n TChild extends readonly { id: string }[],\n> = Array<Exclude<TParent[number], { id: TChild[number][\"id\"] }> | TChild[number]>\n\n/**\n * Extract child's own collection, normalized as a mutable tuple. Falls back to [].\n */\ntype OwnCollection<TInput, TKey extends string, TItem> =\n TInput extends Record<TKey, infer T extends readonly TItem[]> ? [...T] : []\n\ntype OwnLinks<TInput> = TInput extends { id: infer TObjectTypeId extends string }\n ? TInput extends Record<\"links\", infer TLinks extends readonly ObjectLink[]>\n ? NormalizeSelfLinks<TObjectTypeId, TLinks>\n : []\n : []\n\n/**\n * Merge two arrays by id: parent items first, child items override by id.\n */\nfunction mergeById<T extends { id: string }>(parent: readonly T[], child: readonly T[]): T[] {\n const childIds = new Set(child.map((item) => item.id))\n const fromParent = parent.filter((item) => !childIds.has(item.id))\n return [...fromParent, ...child]\n}\n\n// ── Object Type ─────────────────────────────────────────────\n\ntype DefineObjectTypeBase = Omit<ObjectType, \"properties\" | \"links\" | \"extends\" | \"parents\">\n\n/**\n * Structural constraint for the `extends` field.\n *\n * We require only the data needed for merge (id + collections), not the\n * full `ObjectTypeWithTokens<ObjectType>`. The latter requires\n * `LinkTokenMap<ObjectType>` with a `{ [id: string]: LinkToken }` index\n * signature, which is incompatible with the literal-keyed maps produced by\n * concrete `defineObjectType()` calls.\n */\ntype DefineObjectTypeInput = DefineObjectTypeBase & {\n extends?:\n | string\n | {\n readonly id: string\n readonly properties: readonly Property[]\n readonly links: readonly ObjectLink[]\n }\n parents?: readonly string[]\n properties?: readonly Property[]\n links?: readonly ObjectLink[]\n}\n\n/**\n * Normalize `parents` from readonly tuple to mutable `string[] | undefined`.\n */\ntype NormalizeParents<TInput> = TInput extends { parents: infer P extends readonly string[] }\n ? { parents: [...P] }\n : { parents?: undefined }\n\ntype DefineObjectTypeResult<TInput extends DefineObjectTypeInput> = Omit<\n TInput,\n \"properties\" | \"links\" | \"extends\" | \"parents\"\n> &\n (TInput extends {\n extends: infer TParent extends {\n id: string\n properties: readonly Property[]\n links: readonly ObjectLink[]\n }\n }\n ? NormalizeParents<TInput> & {\n extends: TParent[\"id\"]\n properties: MergedCollection<\n TParent[\"properties\"],\n OwnCollection<TInput, \"properties\", Property>\n >\n links: MergedCollection<TParent[\"links\"], OwnLinks<TInput>>\n }\n : TInput extends { extends: infer TParentId extends string }\n ? {\n extends: TParentId\n parents: string[]\n properties: OwnCollection<TInput, \"properties\", Property>\n links: OwnLinks<TInput>\n }\n : NormalizeParents<TInput> & {\n extends: undefined\n properties: OwnCollection<TInput, \"properties\", Property>\n links: OwnLinks<TInput>\n })\n\ntype DefineObjectTypeWithTokensResult<TInput extends DefineObjectTypeInput> = ObjectTypeWithTokens<\n DefineObjectTypeResult<TInput>\n>\n\n/**\n * Define an object type with sensible defaults.\n *\n * `properties` and `links` default to `[]` so you can define\n * a bare object type with just `id` and `name`.\n */\nexport function defineObjectType<const TInput extends DefineObjectTypeInput>(\n input: TInput\n): DefineObjectTypeWithTokensResult<TInput>\nexport function defineObjectType(input: DefineObjectTypeInput): ObjectTypeWithTokens<ObjectType> {\n const ext = input.extends\n\n const ownProperties = input.properties ? [...input.properties] : []\n const ownLinks = input.links\n ? input.links.map((link) => normalizeSelfLinkTarget(input.id, link))\n : []\n\n let extendsId: string | undefined\n let parentIds: string[] | undefined\n let properties: Property[]\n let links: ObjectLink[]\n\n if (typeof ext === \"string\") {\n // Pre-flattened: string extends — no merge, properties/links taken as-is\n extendsId = ext\n parentIds = [ext, ...(input.parents ?? []).filter((id) => id !== ext)]\n properties = ownProperties\n links = ownLinks\n } else if (ext != null) {\n // Object extends — merge parent collections\n extendsId = ext.id\n parentIds = [ext.id, ...(input.parents ?? []).filter((id) => id !== ext.id)]\n properties = mergeById(ext.properties, ownProperties)\n links = mergeById([...ext.links], ownLinks)\n } else {\n // No extends\n extendsId = undefined\n parentIds = input.parents ? [...input.parents] : undefined\n properties = ownProperties\n links = ownLinks\n }\n\n const objectType: ObjectType = {\n id: input.id,\n name: input.name,\n description: input.description,\n quantityKind: input.quantityKind,\n seeAlso: input.seeAlso,\n extends: extendsId,\n parents: parentIds,\n implements: input.implements,\n properties,\n links,\n search: input.search,\n }\n\n return {\n ...objectType,\n l: createLinkTokenMap(objectType),\n p: createPropertyTokenMap(objectType),\n }\n}\n\nfunction normalizeSelfLinkTarget(objectTypeId: string, link: ObjectLink): ObjectLink {\n if (link.targetObjectTypeId !== selfLinkTargetObjectTypeId) {\n return link\n }\n\n return {\n ...link,\n targetObjectTypeId: objectTypeId,\n }\n}\n\n// ── Ontology ────────────────────────────────────────────────\n\ntype DefineOntologyBase = Omit<Ontology, \"objectTypes\" | \"valueTypes\" | \"interfaces\">\n\ntype DefineOntologyInput = DefineOntologyBase & {\n objectTypes?: readonly ObjectType[]\n valueTypes?: readonly ValueType[]\n interfaces?: readonly Interface[]\n}\n\ntype DefineOntologyResult<TInput extends DefineOntologyInput> = Omit<\n TInput,\n \"objectTypes\" | \"valueTypes\" | \"interfaces\"\n> & {\n objectTypes: TInput extends { objectTypes: infer TObjectTypes extends readonly ObjectType[] }\n ? [...TObjectTypes]\n : []\n valueTypes: TInput extends { valueTypes: infer TValueTypes extends readonly ValueType[] }\n ? [...TValueTypes]\n : []\n interfaces: TInput extends { interfaces: infer TInterfaces extends readonly Interface[] }\n ? [...TInterfaces]\n : []\n}\n\n/**\n * Define a complete ontology document.\n *\n * `objectTypes`, `valueTypes`, and `interfaces` default to `[]`.\n */\nexport function defineOntology<const TInput extends DefineOntologyInput>(\n input: TInput\n): DefineOntologyResult<TInput>\nexport function defineOntology(input: DefineOntologyInput): Ontology {\n return {\n ...input,\n objectTypes: input.objectTypes ? [...input.objectTypes] : [],\n valueTypes: input.valueTypes ? [...input.valueTypes] : [],\n interfaces: input.interfaces ? [...input.interfaces] : [],\n }\n}\n\n// ── Value Type ──────────────────────────────────────────────\n\n/**\n * Define a reusable value type.\n *\n * Identity function for type inference and discoverability — the `define*`\n * prefix makes it easy to find all ontology builders.\n */\nexport function defineValueType<const TValueType extends ValueType>(input: TValueType): TValueType {\n return input\n}\n\n// ── Interface ───────────────────────────────────────────────\n\ntype DefineInterfaceBase = Omit<Interface, \"properties\" | \"links\">\n\ntype DefineInterfaceInput = DefineInterfaceBase & {\n properties?: readonly Property[]\n links?: readonly ObjectLink[]\n}\n\ntype DefineInterfaceResult<TInput extends DefineInterfaceInput> = Omit<\n TInput,\n \"properties\" | \"links\"\n> & {\n properties: TInput extends { properties: infer TProperties extends readonly Property[] }\n ? [...TProperties]\n : []\n links: TInput extends { links: infer TLinks extends readonly ObjectLink[] } ? [...TLinks] : []\n}\n\n/**\n * Define a reusable interface contract.\n *\n * `properties` and `links` default to `[]`.\n */\nexport function defineInterface<const TInput extends DefineInterfaceInput>(\n input: TInput\n): DefineInterfaceResult<TInput>\nexport function defineInterface(input: DefineInterfaceInput): Interface {\n return {\n ...input,\n properties: input.properties ? [...input.properties] : [],\n links: input.links ? [...input.links] : [],\n }\n}\n\n// ── Property shorthand ──────────────────────────────────────\n\ntype PropertyOptions = {\n name?: string\n description?: string\n required?: boolean\n nullable?: boolean\n primary?: true\n mode?: PropertyMode\n semanticType?: QuantitativeTypeId\n query?: PropertyQueryMetadata\n}\n\ntype PropertyResult<\n TId extends string,\n TSchema extends Schema,\n TOptions extends PropertyOptions | undefined,\n> = {\n id: TId\n name: NameFromOptions<TId, TOptions>\n schema: TSchema\n} & FieldFromOptions<TOptions, \"description\", string> &\n FieldFromOptions<TOptions, \"required\", boolean> &\n FieldFromOptions<TOptions, \"nullable\", boolean> &\n FieldFromOptions<TOptions, \"primary\", true> &\n FieldFromOptions<TOptions, \"mode\", PropertyMode> &\n FieldFromOptions<TOptions, \"semanticType\", QuantitativeTypeId> &\n FieldFromOptions<TOptions, \"query\", PropertyQueryMetadata>\n\n/**\n * Shorthand for creating a {@link Property}.\n *\n * `name` defaults to `id` — override via `options.name` when you need\n * a separate display name.\n *\n * ```ts\n * prop(\"currentTemperature\", \"double\", {\n * name: \"Current Temperature\",\n * semanticType: \"Temperature\",\n * required: true,\n * })\n * ```\n */\n// Overloads keep option literals (e.g. `required: true`, `mode: \"telemetry\"`) intact.\nexport function prop<const TId extends string, const TSchema extends Schema>(\n id: TId,\n schema: TSchema\n): PropertyResult<TId, TSchema, undefined>\nexport function prop<\n const TId extends string,\n const TSchema extends Schema,\n const TOptions extends PropertyOptions,\n>(id: TId, schema: TSchema, options: TOptions): PropertyResult<TId, TSchema, TOptions>\nexport function prop(id: string, schema: Schema, options?: PropertyOptions): Property {\n return {\n id,\n name: options?.name ?? id,\n schema,\n ...options,\n }\n}\n\n// ── Link shorthand ──────────────────────────────────────────\n\n/**\n * Runtime check: does a value look like an ObjectType?\n *\n * Discriminates ObjectType from LinkOptions by checking for `properties` and `links`\n * arrays — ObjectType always has them, LinkOptions never does.\n */\nfunction isObjectTypeLike(value: unknown): value is ObjectType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as Record<string, unknown>).properties) &&\n Array.isArray((value as Record<string, unknown>).links)\n )\n}\n\ntype LinkOptions = {\n name?: string\n description?: string\n cardinality?: LinkCardinality\n properties?: Property[]\n}\n\ntype LinkResult<\n TId extends string,\n TTargetObjectTypeId,\n TOptions extends LinkOptions | undefined,\n> = {\n id: TId\n name: NameFromOptions<TId, TOptions>\n targetObjectTypeId: TTargetObjectTypeId\n} & FieldFromOptions<TOptions, \"description\", string> &\n FieldFromOptions<TOptions, \"cardinality\", LinkCardinality> &\n FieldFromOptions<TOptions, \"properties\", Property[]>\n\nexport type DirectLinkResult<\n TId extends string,\n TTargetObjectTypeId,\n TOptions extends LinkOptions | undefined,\n TTarget,\n> = LinkResult<TId, TTargetObjectTypeId, TOptions> & ObjectLinkTargetMetadata<TTarget>\n\ntype ObjectTypeIdArray<TTargets extends readonly ObjectType[]> = Array<TTargets[number][\"id\"]>\nexport type DirectLinkTarget<\n TId extends string,\n TName extends string,\n TProperties extends Property[],\n> = {\n id: TId\n name: TName\n properties: TProperties\n links: ObjectLink[]\n readonly p: PropertyTokenMap<{\n id: TId\n name: TName\n properties: TProperties\n links: ObjectLink[]\n }>\n}\n\ntype DirectLinkTargetFor<TTarget extends ObjectType> = TTarget extends ObjectTypeWithPropertyTokens\n ? DirectLinkTarget<TTarget[\"id\"], TTarget[\"name\"], TTarget[\"properties\"]>\n : TTarget\n\n/**\n * Shorthand for creating an {@link ObjectLink}.\n *\n * `link(...)` accepts direct ObjectType targets and preserves their type for\n * query authoring. Use `link.ref(...)` for id-only references, `link.self(...)`\n * for recursive links, and `link.any(...)` for wildcard links.\n *\n * ```ts\n * // ObjectType target — extracts .id at runtime and preserves the target type\n * link(\"controls\", HVACZone, { cardinality: \"one\" })\n *\n * // Id target — resolved by the generated ontology type manifest\n * link.ref(\"controls\", \"hvacZone\", { cardinality: \"one\" })\n *\n * // Self target — normalized to the source object type id by defineObjectType()\n * link.self(\"parent\", { cardinality: \"one\" })\n *\n * // Multiple targets\n * link(\"rel\", [TypeA, TypeB])\n *\n * // Wildcard — accepts any target type\n * link.any(\"anything\")\n * link.any(\"anything\", { cardinality: \"many\" })\n * ```\n */\ninterface LinkCallable {\n <const TId extends string, const TTarget extends ObjectType>(\n id: TId,\n target: TTarget\n ): DirectLinkResult<TId, TTarget[\"id\"], undefined, DirectLinkTargetFor<TTarget>>\n\n <const TId extends string, const TTarget extends ObjectType, const TOptions extends LinkOptions>(\n id: TId,\n target: TTarget,\n options: TOptions\n ): DirectLinkResult<TId, TTarget[\"id\"], TOptions, DirectLinkTargetFor<TTarget>>\n\n <const TId extends string, const TTargets extends readonly ObjectType[]>(\n id: TId,\n targets: TTargets\n ): DirectLinkResult<\n TId,\n ObjectTypeIdArray<TTargets>,\n undefined,\n DirectLinkTargetFor<TTargets[number]>\n >\n\n <\n const TId extends string,\n const TTargets extends readonly ObjectType[],\n const TOptions extends LinkOptions,\n >(\n id: TId,\n targets: TTargets,\n options: TOptions\n ): DirectLinkResult<\n TId,\n ObjectTypeIdArray<TTargets>,\n TOptions,\n DirectLinkTargetFor<TTargets[number]>\n >\n}\n\ninterface LinkBuilder extends LinkCallable {\n ref: typeof linkRef\n self: typeof linkSelf\n any: typeof linkAny\n}\n\nconst linkImpl = ((\n id: string,\n targetOrTargets: ObjectType | readonly ObjectType[],\n options?: LinkOptions\n): ObjectLink => {\n if (Array.isArray(targetOrTargets)) {\n return {\n id,\n name: options?.name ?? id,\n targetObjectTypeId: targetOrTargets.map((target) => target.id),\n ...options,\n }\n }\n\n if (isObjectTypeLike(targetOrTargets)) {\n return {\n id,\n name: options?.name ?? id,\n targetObjectTypeId: targetOrTargets.id,\n ...options,\n }\n }\n\n throw new Error(\n `[Sixb] link(\"${id}\", ...) requires an ObjectType target. Use link.ref(...) for id references, link.self(...) for self-links, or link.any(...) for wildcard links.`\n )\n}) as LinkCallable\n\nfunction linkRef<\n const TId extends string,\n const TTargetObjectTypeId extends string | readonly string[],\n>(id: TId, targetObjectTypeId: TTargetObjectTypeId): LinkResult<TId, TTargetObjectTypeId, undefined>\nfunction linkRef<\n const TId extends string,\n const TTargetObjectTypeId extends string | readonly string[],\n const TOptions extends LinkOptions,\n>(\n id: TId,\n targetObjectTypeId: TTargetObjectTypeId,\n options: TOptions\n): LinkResult<TId, TTargetObjectTypeId, TOptions>\nfunction linkRef(\n id: string,\n targetObjectTypeId: string | readonly string[],\n options?: LinkOptions\n): ObjectLink {\n return {\n id,\n name: options?.name ?? id,\n targetObjectTypeId:\n typeof targetObjectTypeId === \"string\" ? targetObjectTypeId : [...targetObjectTypeId],\n ...options,\n }\n}\n\nfunction linkSelf<\n const TId extends string,\n const TOptions extends LinkOptions | undefined = undefined,\n>(id: TId, options?: TOptions): LinkResult<TId, SelfLinkTargetObjectTypeId, TOptions> {\n return {\n id,\n name: options?.name ?? id,\n targetObjectTypeId: selfLinkTargetObjectTypeId,\n ...options,\n } as LinkResult<TId, SelfLinkTargetObjectTypeId, TOptions>\n}\n\nfunction linkAny<\n const TId extends string,\n const TOptions extends LinkOptions | undefined = undefined,\n>(id: TId, options?: TOptions): LinkResult<TId, \"*\", TOptions> {\n return {\n id,\n name: options?.name ?? id,\n targetObjectTypeId: \"*\",\n ...options,\n } as LinkResult<TId, \"*\", TOptions>\n}\n\nexport const link: LinkBuilder = Object.assign(linkImpl, {\n ref: linkRef,\n self: linkSelf,\n any: linkAny,\n})\n\n// ── ValueType ref shorthand ─────────────────────────────────\n\n/**\n * Create a value-type reference schema.\n *\n * ```ts\n * prop(\"azimuth\", valueTypeRef(\"bsh:AzimuthShape\"))\n * prop(\"area\", valueTypeRef(AreaShape)) // self-contained, no tuple needed\n * ```\n */\n// 1. String id only (existing behavior, no resolution)\nexport function valueTypeRef<const TId extends string>(\n valueTypeId: TId\n): ValueTypeRefSchema & { valueTypeId: TId }\n// 2. ValueType object (concise, self-contained)\nexport function valueTypeRef<const TVT extends ValueType>(\n valueType: TVT\n): { type: \"valueTypeRef\"; valueTypeId: TVT[\"id\"]; _resolved: TVT[\"schema\"] }\n// 3. String id + explicit schema (escape hatch)\nexport function valueTypeRef<const TId extends string, const TResolved extends Schema>(\n valueTypeId: TId,\n resolved: TResolved\n): { type: \"valueTypeRef\"; valueTypeId: TId; _resolved: TResolved }\n// Implementation\nexport function valueTypeRef(\n idOrValueType: string | ValueType,\n resolved?: Schema\n): ValueTypeRefSchema {\n if (typeof idOrValueType === \"string\") {\n if (resolved !== undefined) {\n return { type: \"valueTypeRef\", valueTypeId: idOrValueType, _resolved: resolved }\n }\n return { type: \"valueTypeRef\", valueTypeId: idOrValueType }\n }\n return {\n type: \"valueTypeRef\",\n valueTypeId: idOrValueType.id,\n _resolved: idOrValueType.schema,\n }\n}\n\n// ── Enum helpers ────────────────────────────────────────────\n\n/**\n * Create a string enum schema.\n *\n * ```ts\n * prop(\"mode\", stringEnum([\"off\", \"heat\", \"cool\", \"auto\"]))\n * ```\n */\nexport function stringEnum<const V extends readonly string[]>(\n values: V\n): EnumSchema & {\n values: [...V]\n} {\n return { type: \"enum\", valueType: \"string\", values: [...values] }\n}\n\n/**\n * Create an integer enum schema.\n *\n * ```ts\n * prop(\"fanSpeed\", integerEnum([1, 2, 3]))\n * ```\n */\nexport function integerEnum<const V extends readonly number[]>(\n values: V\n): EnumSchema & {\n values: [...V]\n} {\n return { type: \"enum\", valueType: \"integer\", values: [...values] }\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "6081A1CE4049FF4764756E2164756E21",
10
- "names": []
11
- }
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/ontology/refs.ts", "../src/ontology/link-path-selection.ts"],
4
- "sourcesContent": [
5
- "import { OntologyValidationError } from \"./errors\"\nimport type { InferSchema } from \"./inference\"\nimport type { ObjectType, Schema, ValueType } from \"./types\"\nimport { isRecord, validateSchemaValue } from \"./validation\"\n\nexport type ObjectRef<TObjectTypeId extends string = string> = {\n objectTypeId: TObjectTypeId\n primaryId: string\n}\n\nexport interface ObjectRefSchema<TObjectTypeId extends string = string> {\n readonly type: \"objectRef\"\n readonly objectTypeId: TObjectTypeId\n}\n\nexport type SchemaOrRef = Schema | ObjectRefSchema\n\nexport type InferSchemaOrRef<\n TSchema extends SchemaOrRef,\n TValueTypes extends readonly ValueType[] = [],\n> =\n TSchema extends ObjectRefSchema<infer TObjectTypeId>\n ? ObjectRef<TObjectTypeId>\n : TSchema extends Schema\n ? InferSchema<TSchema, TValueTypes>\n : never\n\nexport function ref<const TObjectType extends ObjectType>(\n objectType: TObjectType\n): ObjectRefSchema<TObjectType[\"id\"]> {\n return {\n type: \"objectRef\",\n objectTypeId: objectType.id,\n }\n}\n\n/** Build an exact, typed reference to one object instance. */\nexport function objectRef<const TObjectType extends ObjectType>(\n objectType: TObjectType,\n primaryId: string\n): ObjectRef<TObjectType[\"id\"]> {\n if (\n typeof objectType !== \"object\" ||\n objectType === null ||\n typeof objectType.id !== \"string\" ||\n !objectType.id.trim()\n ) {\n throw new OntologyValidationError(\"[Sixb] Object reference type must be an object type.\")\n }\n if (typeof primaryId !== \"string\" || !primaryId.trim()) {\n throw new OntologyValidationError(\"[Sixb] Object reference primary id must not be empty.\")\n }\n return Object.freeze({ objectTypeId: objectType.id, primaryId })\n}\n\nexport function isObjectRefSchema(schema: SchemaOrRef): schema is ObjectRefSchema {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n (schema as { type?: unknown }).type === \"objectRef\"\n )\n}\n\nexport function validateSchemaOrRefValue(\n schema: SchemaOrRef,\n value: unknown,\n path: string,\n valueTypesById: ReadonlyMap<string, ValueType>\n): void {\n if (isObjectRefSchema(schema)) {\n validateObjectRefValue(schema, value, path)\n return\n }\n\n validateSchemaValue(schema, value, path, valueTypesById)\n}\n\nfunction validateObjectRefValue(schema: ObjectRefSchema, value: unknown, path: string): void {\n if (!isRecord(value)) {\n throw new OntologyValidationError(`[Sixb] Property ${path} must be an objectRef`)\n }\n\n const allowedFields = new Set([\"objectTypeId\", \"primaryId\"])\n for (const fieldId of Object.keys(value)) {\n if (!allowedFields.has(fieldId)) {\n throw new OntologyValidationError(`[Sixb] Unknown field '${path}.${fieldId}'`)\n }\n }\n\n if (value.objectTypeId !== schema.objectTypeId) {\n throw new OntologyValidationError(\n `[Sixb] Property ${path}.objectTypeId must be \"${schema.objectTypeId}\"`\n )\n }\n\n if (typeof value.primaryId !== \"string\") {\n throw new OntologyValidationError(`[Sixb] Property ${path}.primaryId must be a string`)\n }\n}\n",
6
- "import type { LinkToken } from \"./tokens\"\n\ndeclare const linkPathSelectionBrand: unique symbol\n\ntype LinkTargetObjectTypeId<TTarget> = TTarget extends readonly string[]\n ? TTarget[number]\n : TTarget extends \"*\"\n ? string\n : TTarget extends string\n ? TTarget\n : never\n\nexport type LinkPathSelectionMode =\n | { readonly kind: \"none\" }\n | { readonly kind: \"all\" }\n | {\n readonly kind: \"selected\"\n readonly links: readonly LinkPathSelection[]\n }\n\n/**\n * Inert nested selection produced by `ObjectType.l.someLink.withLinks(...)`.\n *\n * It stores ids only. Consumers such as Share definitions resolve those ids against their own\n * current ontology registry instead of trusting the token's embedded metadata.\n */\nexport type LinkPathSelection<\n TSourceObjectTypeId extends string = string,\n TLinkId extends string = string,\n TTargetObjectTypeId extends string | readonly string[] = string | readonly string[],\n> = {\n readonly [linkPathSelectionBrand]?: never\n readonly kind: \"linkPathSelection\"\n readonly sourceObjectTypeId: TSourceObjectTypeId\n readonly linkId: TLinkId\n readonly targetObjectTypeId: TTargetObjectTypeId\n readonly selection: LinkPathSelectionMode\n}\n\nexport type LinkPathSelectionInput<TSourceObjectTypeId extends string = string> =\n | LinkToken<TSourceObjectTypeId>\n | LinkPathSelection<TSourceObjectTypeId>\n\nexport interface LinkPathSelectionBuilder<\n TSourceObjectTypeId extends string,\n TLinkId extends string,\n TTargetObjectTypeId extends string | readonly string[],\n> {\n withLinks(): LinkPathSelection<TSourceObjectTypeId, TLinkId, TTargetObjectTypeId>\n withLinks<\n const TLinks extends readonly LinkPathSelectionInput<\n LinkTargetObjectTypeId<TTargetObjectTypeId>\n >[],\n >(links: TLinks): LinkPathSelection<TSourceObjectTypeId, TLinkId, TTargetObjectTypeId>\n}\n\n/** @internal Snapshot a token/path into the portable ids-only representation. */\nexport function snapshotLinkPathSelection(input: LinkPathSelectionInput): LinkPathSelection {\n return snapshotLinkPathSelectionValue(input, new Set())\n}\n\nfunction snapshotLinkPathSelectionValue(input: unknown, visiting: Set<object>): LinkPathSelection {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n throw new Error(\"[Sixb] Link path selection must be a link token or nested link selection.\")\n }\n if (visiting.has(input)) {\n throw new Error(\"[Sixb] Link path selection must not contain a cycle.\")\n }\n visiting.add(input)\n try {\n if (isLinkPathSelection(input)) {\n return createLinkPathSelectionFromIds(\n {\n sourceObjectTypeId: input.sourceObjectTypeId,\n linkId: input.linkId,\n targetObjectTypeId: input.targetObjectTypeId,\n selection: input.selection,\n },\n visiting\n )\n }\n\n return createLinkPathSelectionFromIds(\n {\n sourceObjectTypeId: (input as { readonly objectTypeId?: unknown }).objectTypeId,\n linkId: (input as { readonly id?: unknown }).id,\n targetObjectTypeId: (input as { readonly targetObjectTypeId?: unknown }).targetObjectTypeId,\n selection: { kind: \"none\" },\n },\n visiting\n )\n } finally {\n visiting.delete(input)\n }\n}\n\n/** @internal */\nfunction isLinkPathSelection(value: unknown): value is LinkPathSelection {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { readonly kind?: unknown }).kind === \"linkPathSelection\"\n )\n}\n\nexport function createLinkPathSelection(\n token: LinkToken,\n links: readonly LinkPathSelectionInput[] | undefined\n): LinkPathSelection {\n if (links !== undefined && !Array.isArray(links)) {\n throw new Error(`[Sixb] Link '${token.objectTypeId}.${token.id}' withLinks expects an array.`)\n }\n if (links?.length === 0) {\n throw new Error(\n `[Sixb] Link '${token.objectTypeId}.${token.id}' withLinks([]) is empty; omit withLinks() when no nested links should be selected.`\n )\n }\n\n return createLinkPathSelectionFromIds({\n sourceObjectTypeId: token.objectTypeId,\n linkId: token.id,\n targetObjectTypeId: token.targetObjectTypeId,\n selection:\n links === undefined\n ? { kind: \"all\" }\n : { kind: \"selected\", links: links.map(snapshotLinkPathSelection) },\n })\n}\n\nfunction createLinkPathSelectionFromIds(\n input: {\n readonly sourceObjectTypeId: unknown\n readonly linkId: unknown\n readonly targetObjectTypeId: unknown\n readonly selection: unknown\n },\n visiting: Set<object> = new Set()\n): LinkPathSelection {\n const sourceObjectTypeId = nonEmptyLinkSelectionId(\n input.sourceObjectTypeId,\n \"source object type id\"\n )\n const linkId = nonEmptyLinkSelectionId(input.linkId, \"link id\")\n const targetObjectTypeId = snapshotLinkTarget(input.targetObjectTypeId)\n const selection = snapshotLinkSelectionMode(input.selection, visiting)\n return Object.freeze({\n kind: \"linkPathSelection\" as const,\n sourceObjectTypeId,\n linkId,\n targetObjectTypeId,\n selection,\n })\n}\n\nfunction snapshotLinkSelectionMode(value: unknown, visiting: Set<object>): LinkPathSelectionMode {\n if (typeof value !== \"object\" || value === null) {\n throw new Error(\"[Sixb] Link path selection must declare nested links.\")\n }\n const kind = (value as { readonly kind?: unknown }).kind\n if (kind === \"none\" || kind === \"all\") return Object.freeze({ kind })\n if (kind !== \"selected\") {\n throw new Error(`[Sixb] Unknown nested link selection '${String(kind)}'.`)\n }\n const links = (value as { readonly links?: unknown }).links\n if (!Array.isArray(links)) {\n throw new Error(\"[Sixb] Selected nested links must be an array.\")\n }\n if (links.length === 0) {\n throw new Error(\n \"[Sixb] Selected nested links must not be empty; omit withLinks() when no nested links should be selected.\"\n )\n }\n return Object.freeze({\n kind: \"selected\" as const,\n links: Object.freeze(links.map((link) => snapshotLinkPathSelectionValue(link, visiting))),\n })\n}\n\nfunction snapshotLinkTarget(value: unknown): string | readonly string[] {\n if (Array.isArray(value)) {\n return Object.freeze(\n value.map((item) => nonEmptyLinkSelectionId(item, \"target object type id\"))\n )\n }\n return nonEmptyLinkSelectionId(value, \"target object type id\")\n}\n\nfunction nonEmptyLinkSelectionId(value: unknown, field: string): string {\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`[Sixb] Link path ${field} must not be empty.`)\n }\n return value\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "830E89BB4560E23064756E2164756E21",
10
- "names": []
11
- }
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/errors/catalog.ts", "../src/errors/redaction.ts", "../src/errors/internal.ts"],
4
- "sourcesContent": [
5
- "interface SixbErrorDefinition {\n readonly publicMessage: string\n readonly retryable: boolean\n}\n\n/**\n * Source of truth for stable Sixb error codes and their framework-level policy.\n *\n * Keep this catalog internal. Consumers receive the `SixbErrorCode` union and persisted\n * `SixbFailure` values, not a mutable registry.\n */\nexport const SIXB_ERROR_DEFINITIONS = {\n \"action.phase_failed\": {\n publicMessage: \"Action execution failed.\",\n retryable: false,\n },\n \"agent.execution_failed\": {\n publicMessage: \"Agent execution failed.\",\n retryable: false,\n },\n \"ai.usage_limit_exceeded\": {\n publicMessage: \"AI usage limit exceeded.\",\n retryable: false,\n },\n \"ai.usage_limit_unavailable\": {\n publicMessage: \"AI usage limit could not be evaluated.\",\n retryable: true,\n },\n \"connector.adapter_invalid\": {\n publicMessage: \"Connector adapter returned an invalid result.\",\n retryable: false,\n },\n \"connector.authorization_invalid\": {\n publicMessage: \"Connector authorization is invalid.\",\n retryable: false,\n },\n \"connector.authorization_required\": {\n publicMessage: \"Connector authorization is required.\",\n retryable: false,\n },\n \"connector.configuration_invalid\": {\n publicMessage: \"Connector configuration is invalid.\",\n retryable: false,\n },\n \"connector.credentials_unavailable\": {\n publicMessage: \"Connector credentials are unavailable.\",\n retryable: false,\n },\n \"connector.not_found\": {\n publicMessage: \"Connector resource not found.\",\n retryable: false,\n },\n \"connector.operation_conflict\": {\n publicMessage: \"Connector operation conflicts with the current state.\",\n retryable: false,\n },\n \"connector.operation_in_progress\": {\n publicMessage: \"Another connector credential operation is in progress.\",\n retryable: true,\n },\n \"connector.provider_failed\": {\n publicMessage: \"Connector provider operation failed.\",\n retryable: false,\n },\n \"connector.provider_unavailable\": {\n publicMessage: \"Connector provider is temporarily unavailable.\",\n retryable: true,\n },\n \"connector.replacement_required\": {\n publicMessage: \"Connector selection requires explicit replacement.\",\n retryable: false,\n },\n \"connector.revocation_pending\": {\n publicMessage: \"Connector revocation is pending.\",\n retryable: true,\n },\n \"dataset.not_found\": {\n publicMessage: \"Dataset not found.\",\n retryable: false,\n },\n \"dataset.version_incompatible\": {\n publicMessage: \"Dataset version is incompatible.\",\n retryable: false,\n },\n \"dataset.version_not_found\": {\n publicMessage: \"Dataset version not found.\",\n retryable: false,\n },\n \"dataset.version_read_inconsistent\": {\n publicMessage: \"Dataset version could not be read consistently.\",\n retryable: true,\n },\n \"event.delivery_failed\": {\n publicMessage: \"Event delivery failed.\",\n retryable: true,\n },\n \"internal.unexpected\": {\n publicMessage: \"An unexpected internal error occurred.\",\n retryable: false,\n },\n \"queue.enqueue_failed\": {\n publicMessage: \"The job could not be enqueued.\",\n retryable: true,\n },\n \"pipeline.step_failed\": {\n publicMessage: \"Pipeline step execution failed.\",\n retryable: false,\n },\n \"projection.definition_invalid\": {\n publicMessage: \"Projection definition is invalid.\",\n retryable: false,\n },\n \"projection.execution_failed\": {\n publicMessage: \"Projection execution failed.\",\n retryable: false,\n },\n \"projection.not_found\": {\n publicMessage: \"Projection not found.\",\n retryable: false,\n },\n \"projection.run_already_terminal\": {\n publicMessage: \"Projection run is already terminal.\",\n retryable: false,\n },\n \"projection.run_identity_mismatch\": {\n publicMessage: \"Projection run identity does not match the queued job.\",\n retryable: false,\n },\n \"runtime.cancelled\": {\n publicMessage: \"Execution was cancelled.\",\n retryable: false,\n },\n \"sync.execution_failed\": {\n publicMessage: \"Sync execution failed.\",\n retryable: false,\n },\n \"webhook.delivery_failed\": {\n publicMessage: \"Webhook delivery failed.\",\n retryable: true,\n },\n \"webhook.delivery_rejected\": {\n publicMessage: \"Webhook delivery was rejected.\",\n retryable: false,\n },\n \"workflow.node_failed\": {\n publicMessage: \"Workflow node execution failed.\",\n retryable: false,\n },\n} as const satisfies Readonly<Record<string, SixbErrorDefinition>>\n\ntype CatalogErrorCode = keyof typeof SIXB_ERROR_DEFINITIONS\n\n/** Runtime counterpart of `SixbErrorCode` for internal schema boundaries. */\nexport const SIXB_ERROR_CODES = Object.freeze(Object.keys(SIXB_ERROR_DEFINITIONS)) as readonly [\n CatalogErrorCode,\n ...CatalogErrorCode[],\n]\n",
6
- "import type { ReadonlyJsonValue } from \"../json\"\n\nconst REDACTED = \"[REDACTED]\"\nconst MAX_CONTEXT_DEPTH = 12\nconst MAX_CONTEXT_ENTRIES = 1024\nconst SENSITIVE_KEY =\n /password|passwd|passphrase|secret|token|credential|authorization|cookie|privatekey|apikey|accesskey|connectionstring|databaseurl|clientassertion|signature/i\nconst PRIVATE_CONTAINER =\n /^(?:request|response)(?:body|headers)?$|^(?:headers|body|payload|env|environment)$/i\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.replace(/[^a-z0-9]/gi, \"\")\n return SENSITIVE_KEY.test(normalized) || PRIVATE_CONTAINER.test(normalized)\n}\n\n/** Runtime credentials are additional protection for context; never a license to copy errors. */\nfunction environmentSecrets(): string[] {\n return Object.entries(process.env)\n .filter(([key, value]) => isSensitiveKey(key) && value !== undefined && value.length >= 4)\n .map(([, value]) => value as string)\n .sort((a, b) => b.length - a.length)\n}\n\nexport function createFailureRedactor() {\n const secrets = environmentSecrets()\n let redacted = false\n let truncated = false\n let entries = 0\n\n const text = (input: string): string => {\n let value = input\n for (const secret of secrets) {\n value = value\n .split(REDACTED)\n .map((part) => part.split(secret).join(REDACTED))\n .join(REDACTED)\n }\n value = value\n .replace(\n /-----BEGIN [^-]*PRIVATE KEY-----[\\s\\S]*?(?:-----END [^-]*PRIVATE KEY-----|$)/g,\n REDACTED\n )\n .replace(/\\b(?:Bearer|Basic)\\s+[A-Za-z0-9+/_.~=-]+/gi, REDACTED)\n .replace(/\\beyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b/g, REDACTED)\n .replace(\n /\\b(?:sk[-_](?:live[-_]|test[-_]|proj[-_])?[A-Za-z0-9_-]{12,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]+|AKIA[A-Z0-9]{16})\\b/g,\n REDACTED\n )\n // URLs may carry userinfo, signed query parameters, or credentials in the path.\n .replace(/\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s<>\"']+/gi, REDACTED)\n .replace(\n /[\"']?\\b(?:password|passwd|passphrase|[a-z_-]*secret|[a-z_-]*token|api[-_]?key|authorization|cookie|credential|signature)[\"']?\\s*[=:]\\s*(?:\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'|[^\\s,;]+)/gi,\n REDACTED\n )\n if (value !== input) redacted = true\n return value\n }\n\n const context = (value: ReadonlyJsonValue, depth = 0): ReadonlyJsonValue => {\n if (depth > MAX_CONTEXT_DEPTH || entries++ >= MAX_CONTEXT_ENTRIES) {\n truncated = true\n return \"[TRUNCATED]\"\n }\n if (typeof value === \"string\") return text(value)\n if (value === null || typeof value !== \"object\") return value\n if (Array.isArray(value)) {\n const available = Math.max(0, MAX_CONTEXT_ENTRIES - entries)\n if (value.length > available) truncated = true\n return value.slice(0, available).map((entry) => context(entry, depth + 1))\n }\n const result: Record<string, ReadonlyJsonValue> = Object.create(null)\n for (const [key, entry] of Object.entries(value)) {\n if (entries >= MAX_CONTEXT_ENTRIES) {\n truncated = true\n break\n }\n if (isSensitiveKey(key)) {\n redacted = true\n entries++\n result[text(key)] = REDACTED\n } else {\n result[text(key)] = context(entry, depth + 1)\n }\n }\n return result\n }\n\n return {\n text,\n context,\n get redacted() {\n return redacted\n },\n get truncated() {\n return truncated\n },\n }\n}\n",
7
- "import { cloneJsonValue, isJsonValue, isPlainRecord, type ReadonlyJsonValue } from \"../json\"\nimport { SIXB_ERROR_CODES, SIXB_ERROR_DEFINITIONS } from \"./catalog\"\nimport { createFailureRedactor } from \"./redaction\"\nimport type { SixbErrorCode, SixbFailure } from \"./types\"\n\nexport const SIXB_FAILURE_MAX_MESSAGE_BYTES = 4 * 1024\nexport const SIXB_FAILURE_MAX_SERIALIZED_BYTES = 32 * 1024\nconst TRUNCATION_SUFFIX = \"… [truncated]\"\nconst SIXB_ERROR_CODE_SET: ReadonlySet<string> = new Set(SIXB_ERROR_CODES)\n\ntype SixbErrorCodeTuple = readonly [SixbErrorCode, ...SixbErrorCode[]]\n\nexport { SIXB_ERROR_CODES }\n\nexport interface SixbErrorOptions {\n readonly cause?: unknown\n readonly details?: ReadonlyJsonValue\n}\n\n/** Internal structural view returned by the factory. The implementing class stays private. */\nexport interface SixbCodedError extends Error {\n readonly code: SixbErrorCode\n readonly retryable: boolean\n readonly details?: ReadonlyJsonValue\n readonly cause?: unknown\n}\n\nexport interface ToSixbFailureOptions {\n /** Timestamp for deterministic persistence. Defaults to the current time. */\n readonly at?: Date\n}\n\nexport interface ToScopedSixbFailureOptions<TCodes extends SixbErrorCodeTuple>\n extends ToSixbFailureOptions {\n /** Codes this boundary is allowed to expose. */\n readonly allowedCodes: TCodes\n}\n\nexport interface CaptureSixbFailureOptions<TCodes extends SixbErrorCodeTuple>\n extends ToScopedSixbFailureOptions<TCodes> {\n /** Code assigned when the captured value is uncoded or outside this boundary's contract. */\n readonly defaultCode: TCodes[number]\n /** Context attached only to the boundary error created for such a captured value. */\n readonly details?: ReadonlyJsonValue\n}\n\n/**\n * The canonical exception used inside Sixb.\n *\n * The class is deliberately not exported: repo-internal callers use the factory and consumers only\n * ever observe serializable `SixbFailure` values.\n */\nclass SixbError extends Error implements SixbCodedError {\n override readonly name = \"SixbError\"\n readonly retryable: boolean\n readonly details?: ReadonlyJsonValue\n\n constructor(\n readonly code: SixbErrorCode,\n message: string,\n options: SixbErrorOptions = {}\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause })\n this.retryable = SIXB_ERROR_DEFINITIONS[code].retryable\n if (options.details !== undefined) {\n this.details = cloneJsonValue(options.details, \"Sixb error details\")\n }\n }\n}\n\n/** Creates a coded internal error without exposing its runtime class. */\nexport function createSixbError(\n code: SixbErrorCode,\n message: string,\n options: SixbErrorOptions = {}\n): SixbCodedError {\n return new SixbError(code, message, options)\n}\n\n/**\n * Captures an unknown terminal error as a scoped durable failure.\n *\n * An already-coded error is preserved only when its code belongs to this boundary. Every other\n * value is wrapped once with the boundary's default code and context before serialization.\n */\nexport function captureSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n error: unknown,\n options: CaptureSixbFailureOptions<TCodes>\n): SixbFailure<TCodes[number]> {\n const allowedCodes = new Set<SixbErrorCode>(options.allowedCodes)\n const codedError =\n isSixbError(error) && allowedCodes.has(error.code)\n ? error\n : createSixbError(options.defaultCode, summarizeErrorMessage(error), {\n cause: error,\n ...(options.details === undefined ? {} : { details: options.details }),\n })\n\n return toSixbFailure(codedError, {\n allowedCodes: options.allowedCodes,\n ...(options.at === undefined ? {} : { at: options.at }),\n })\n}\n\n/** Identifies errors created by Sixb without making their class part of the contract. */\nexport function isSixbError(error: unknown): error is SixbCodedError {\n try {\n return error instanceof SixbError\n } catch {\n return false\n }\n}\n\n/**\n * Takes a detached, serializable snapshot of a coded internal error.\n *\n * Use `captureSixbFailure()` instead when a terminal boundary receives an unknown thrown value.\n */\nexport function toSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n error: SixbCodedError,\n options: ToScopedSixbFailureOptions<TCodes>\n): SixbFailure<TCodes[number]>\nexport function toSixbFailure(error: SixbCodedError, options?: ToSixbFailureOptions): SixbFailure\nexport function toSixbFailure(\n error: SixbCodedError,\n options: ToSixbFailureOptions | ToScopedSixbFailureOptions<SixbErrorCodeTuple> = {}\n): SixbFailure {\n if (!isSixbError(error)) {\n throw new Error(\"[Sixb] A durable failure can only be created from a coded Sixb error.\")\n }\n const allowedCodes = \"allowedCodes\" in options ? new Set(options.allowedCodes) : undefined\n if (allowedCodes && !allowedCodes.has(error.code)) {\n throw new Error(`[Sixb] Error code '${error.code}' is not allowed by this failure contract.`)\n }\n const code = error.code\n const redactor = createFailureRedactor()\n const details = error.details === undefined ? undefined : redactor.context(error.details)\n const { detail, truncated } = findFailureDetail(error, code)\n const summary = SIXB_ERROR_DEFINITIONS[code].publicMessage\n const message = truncateUtf8(\n redactor.text(detail && detail.message !== summary ? `${summary} ${detail.message}` : summary),\n SIXB_FAILURE_MAX_MESSAGE_BYTES\n )\n const failure: SixbFailure = {\n code,\n message: message.value,\n retryable: SIXB_ERROR_DEFINITIONS[code].retryable,\n at: failureTimestamp(options.at),\n ...(details === undefined ? {} : { details: cloneJsonValue(details, \"Sixb failure details\") }),\n ...(detail?.httpStatus === undefined ? {} : { httpStatus: detail.httpStatus }),\n ...(redactor.redacted ? { redacted: true } : {}),\n ...(message.truncated || truncated || redactor.truncated ? { truncated: true } : {}),\n }\n\n if (serializedByteLength(failure) <= SIXB_FAILURE_MAX_SERIALIZED_BYTES) return failure\n\n return {\n code: failure.code,\n message: failure.message,\n retryable: failure.retryable,\n at: failure.at,\n ...(failure.httpStatus === undefined ? {} : { httpStatus: failure.httpStatus }),\n ...(failure.redacted ? { redacted: true } : {}),\n truncated: true,\n }\n}\n\nconst NETWORK_MESSAGES: Readonly<Record<string, string>> = {\n ECONNREFUSED: \"The remote service refused the connection.\",\n ECONNRESET: \"The remote service reset the connection.\",\n ENOTFOUND: \"The remote host could not be resolved.\",\n EAI_AGAIN: \"DNS resolution temporarily failed.\",\n ETIMEDOUT: \"The connection timed out.\",\n}\n\nfunction isHttpStatus(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 100 && value <= 599\n}\n\n/** Select one explanation along the causal chain; unrelated aggregate errors stay separate. */\nfunction findFailureDetail(\n error: SixbCodedError,\n boundaryCode: SixbErrorCode\n): { detail?: { message: string; httpStatus?: number }; truncated: boolean } {\n const seen = new Set<object>()\n let current: unknown = error\n while (typeof current === \"object\" && current !== null && !seen.has(current)) {\n if (seen.size === 8) return { truncated: true }\n seen.add(current)\n if (\n isSixbError(current) &&\n current.code !== boundaryCode &&\n current.code !== \"internal.unexpected\"\n ) {\n return {\n detail: { message: SIXB_ERROR_DEFINITIONS[current.code].publicMessage },\n truncated: false,\n }\n }\n try {\n // Read only data properties: arbitrary messages and getters remain private.\n const status =\n Object.getOwnPropertyDescriptor(current, \"status\")?.value ??\n Object.getOwnPropertyDescriptor(current, \"statusCode\")?.value\n if (isHttpStatus(status)) {\n return {\n detail: { message: `Upstream request returned HTTP ${status}.`, httpStatus: status },\n truncated: false,\n }\n }\n const code = Object.getOwnPropertyDescriptor(current, \"code\")?.value\n if (typeof code === \"string\" && Object.hasOwn(NETWORK_MESSAGES, code)) {\n return { detail: { message: NETWORK_MESSAGES[code] }, truncated: false }\n }\n current = Object.getOwnPropertyDescriptor(current, \"cause\")?.value\n } catch {\n break\n }\n }\n return { truncated: false }\n}\n\n/** Serializes a validated failure for durable storage. */\nexport function serializeSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n failure: SixbFailure<TCodes[number]>,\n allowedCodes: TCodes\n): string\nexport function serializeSixbFailure(failure: SixbFailure): string\nexport function serializeSixbFailure(\n failure: SixbFailure,\n allowedCodes?: SixbErrorCodeTuple\n): string {\n const parsed = allowedCodes ? parseSixbFailure(failure, allowedCodes) : parseSixbFailure(failure)\n return JSON.stringify(parsed)\n}\n\n/**\n * Validates and detaches a failure read from a storage boundary.\n *\n * Strings are accepted for SQLite; PostgreSQL adapters can pass their decoded JSON value directly.\n */\nexport function parseSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n value: unknown,\n allowedCodes: TCodes\n): SixbFailure<TCodes[number]>\nexport function parseSixbFailure(value: unknown): SixbFailure\nexport function parseSixbFailure(\n value: unknown,\n allowedCodes: SixbErrorCodeTuple = SIXB_ERROR_CODES\n): SixbFailure {\n const candidate = parseStoredFailureValue(value)\n if (!isPlainRecord(candidate)) {\n throw invalidStoredFailure(\"expected a JSON object\")\n }\n\n const { code, message, retryable, at, details, httpStatus, redacted, truncated } = candidate\n if (typeof code !== \"string\" || !SIXB_ERROR_CODE_SET.has(code)) {\n throw invalidStoredFailure(\"code is not a known Sixb error code\")\n }\n if (!(allowedCodes as readonly string[]).includes(code)) {\n throw invalidStoredFailure(\"code is not allowed by this failure contract\")\n }\n if (typeof message !== \"string\") {\n throw invalidStoredFailure(\"message is not a string\")\n }\n if (utf8ByteLength(message) > SIXB_FAILURE_MAX_MESSAGE_BYTES) {\n throw invalidStoredFailure(`message exceeds ${SIXB_FAILURE_MAX_MESSAGE_BYTES} UTF-8 bytes`)\n }\n if (typeof retryable !== \"boolean\") {\n throw invalidStoredFailure(\"retryable is not a boolean\")\n }\n if (retryable !== SIXB_ERROR_DEFINITIONS[code as SixbErrorCode].retryable) {\n throw invalidStoredFailure(\"retryable does not match the error code policy\")\n }\n if (typeof at !== \"string\" || !isCanonicalIsoTimestamp(at)) {\n throw invalidStoredFailure(\"at is not a canonical ISO-8601 timestamp\")\n }\n if (details !== undefined && !isJsonValue(details)) {\n throw invalidStoredFailure(\"details is not a JSON value\")\n }\n if (truncated !== undefined && truncated !== true) {\n throw invalidStoredFailure(\"truncated must be true when present\")\n }\n\n if (redacted !== undefined && redacted !== true) {\n throw invalidStoredFailure(\"redacted must be true when present\")\n }\n if (httpStatus !== undefined && !isHttpStatus(httpStatus)) {\n throw invalidStoredFailure(\"httpStatus must be an integer HTTP status\")\n }\n const redactor = createFailureRedactor()\n const safeMessage = truncateUtf8(redactor.text(message), SIXB_FAILURE_MAX_MESSAGE_BYTES)\n const safeDetails =\n details === undefined ? undefined : redactor.context(details as ReadonlyJsonValue)\n\n const failure: SixbFailure = {\n code: code as SixbErrorCode,\n message: safeMessage.value,\n retryable,\n at,\n ...(safeDetails === undefined\n ? {}\n : { details: cloneJsonValue(safeDetails, \"Stored Sixb failure details\") }),\n ...(httpStatus === undefined ? {} : { httpStatus: httpStatus as number }),\n ...(redacted || redactor.redacted ? { redacted: true } : {}),\n ...(truncated || redactor.truncated || safeMessage.truncated ? { truncated: true } : {}),\n }\n if (serializedByteLength(failure) > SIXB_FAILURE_MAX_SERIALIZED_BYTES) {\n throw invalidStoredFailure(\n `record exceeds ${SIXB_FAILURE_MAX_SERIALIZED_BYTES} serialized UTF-8 bytes`\n )\n }\n return failure\n}\n\nfunction parseStoredFailureValue(value: unknown): unknown {\n if (typeof value !== \"string\") return value\n try {\n return JSON.parse(value) as unknown\n } catch {\n throw invalidStoredFailure(\"value is not valid JSON\")\n }\n}\n\nfunction isCanonicalIsoTimestamp(value: string): boolean {\n const timestamp = new Date(value)\n return Number.isFinite(timestamp.getTime()) && timestamp.toISOString() === value\n}\n\nfunction invalidStoredFailure(reason: string): Error {\n return new Error(`[Sixb] Stored failure is invalid: ${reason}.`)\n}\n\n/**\n * Extracts a diagnostic message for an internal error or log entry.\n *\n * The result can contain provider data and must not be persisted or returned by an API.\n * `toSixbFailure()` constructs a message from recognized HTTP, network, or Sixb information instead.\n */\nexport function summarizeErrorMessage(value: unknown, fallback?: string): string {\n const message = readStringProperty(value, \"message\")\n if (message !== undefined) return message\n if (typeof value === \"string\") return value\n return fallback ?? safeString(value)\n}\n\nfunction readStringProperty(value: unknown, property: \"message\"): string | undefined {\n if (!isObjectLike(value)) return undefined\n try {\n const result = Reflect.get(value, property)\n return typeof result === \"string\" ? result : undefined\n } catch {\n return undefined\n }\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\"\n}\n\nfunction safeString(value: unknown): string {\n try {\n return String(value)\n } catch {\n return \"Unknown thrown value\"\n }\n}\n\nfunction failureTimestamp(at: Date | undefined): string {\n const timestamp = at ?? new Date()\n if (!Number.isFinite(timestamp.getTime())) {\n throw new Error(\"[Sixb] Failure timestamp must be a valid Date.\")\n }\n return timestamp.toISOString()\n}\n\nfunction serializedByteLength(value: SixbFailure): number {\n return utf8ByteLength(JSON.stringify(value))\n}\n\nfunction utf8ByteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength\n}\n\nfunction truncateUtf8(value: string, maxBytes: number): { value: string; truncated: boolean } {\n if (utf8ByteLength(value) <= maxBytes) return { value, truncated: false }\n\n const suffixBytes = utf8ByteLength(TRUNCATION_SUFFIX)\n const characters = Array.from(value)\n let low = 0\n let high = characters.length\n while (low < high) {\n const middle = Math.ceil((low + high) / 2)\n if (utf8ByteLength(characters.slice(0, middle).join(\"\")) + suffixBytes <= maxBytes) {\n low = middle\n } else {\n high = middle - 1\n }\n }\n\n return { value: `${characters.slice(0, low).join(\"\")}${TRUNCATION_SUFFIX}`, truncated: true }\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "38D8AA61D12F60A664756E2164756E21",
11
- "names": []
12
- }
@@ -1,15 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/runtime/errors.ts", "../src/models/definitions.ts", "../src/models/catalog.ts", "../src/models/errors.ts", "../src/models/pricing.ts", "../src/models/rate-card.ts"],
4
- "sourcesContent": [
5
- "/**\n * Thrown for runtime setup, lifecycle, and internal invariant failures\n * that are not validation errors (e.g., duplicate registrations, missing\n * bootstrap resources, failed event appends, module load failures).\n */\nexport class RuntimeError extends Error {\n readonly name = \"RuntimeError\"\n}\n",
6
- "import {\n MODEL_REASONING_EFFORTS,\n type ModelCapabilities,\n type ModelReasoningBudgetCapabilities,\n type ModelReasoningCapabilities,\n} from \"./language-model\"\n\nexport type ModelKind = \"language\" | \"image\" | \"video\" | \"embedding\"\n\n/** Common catalog identity shared by every present and future model runtime. */\nexport interface ModelDefinition {\n readonly kind: ModelKind\n readonly providerId: string\n readonly modelId: string\n readonly name?: string\n readonly description?: string\n /** Model author for display; does not change the provider/model routing identity. */\n readonly publisher?: { readonly id: string; readonly name: string }\n /** Hosting service label, when the model is offered through an intermediary. */\n readonly via?: string\n readonly family?: string\n readonly tags?: readonly string[]\n readonly releaseDate?: string\n}\n\n/** Serializable facts about one concrete model offering from one provider. */\nexport interface LanguageModelDefinition extends ModelDefinition {\n readonly kind: \"language\"\n readonly knowledgeCutoff?: string\n readonly contextWindow?: number\n /** Maximum input tokens, distinct from a shared input/output context window. */\n readonly maxInputTokens?: number\n readonly maxOutputTokens?: number\n readonly capabilities: ModelCapabilities\n}\n\nexport function defineLanguageModel(definition: LanguageModelDefinition): LanguageModelDefinition {\n if (definition.kind !== \"language\") {\n throw new TypeError(\"[Sixb] Language model definitions must use kind 'language'.\")\n }\n assertModelId(definition.providerId, \"providerId\")\n assertModelId(definition.modelId, \"modelId\")\n assertOptionalString(definition.name, \"name\")\n assertOptionalString(definition.description, \"description\")\n assertOptionalString(definition.via, \"via\")\n if (definition.via !== undefined && !definition.via.trim())\n throw new TypeError(\"[Sixb] Model via must not be empty.\")\n const publisher = definition.publisher\n if (publisher !== undefined) {\n assertRecord(publisher, \"publisher\")\n for (const [field, value] of Object.entries({ id: publisher.id, name: publisher.name })) {\n if (typeof value !== \"string\" || !value.trim() || value !== value.trim())\n throw new TypeError(`[Sixb] Model publisher.${field} must be a nonempty trimmed string.`)\n }\n }\n assertOptionalString(definition.family, \"family\")\n assertOptionalString(definition.releaseDate, \"releaseDate\")\n assertOptionalString(definition.knowledgeCutoff, \"knowledgeCutoff\")\n const tags = freezeStrings(definition.tags, \"tags\")\n const capabilities = defineModelCapabilities(definition.capabilities)\n assertOptionalPositiveInteger(definition.contextWindow, \"contextWindow\")\n assertOptionalPositiveInteger(definition.maxInputTokens, \"maxInputTokens\")\n assertOptionalPositiveInteger(definition.maxOutputTokens, \"maxOutputTokens\")\n return Object.freeze({\n kind: \"language\",\n providerId: definition.providerId,\n modelId: definition.modelId,\n ...(definition.name === undefined ? {} : { name: definition.name }),\n ...(definition.description === undefined ? {} : { description: definition.description }),\n ...(publisher === undefined\n ? {}\n : { publisher: Object.freeze({ id: publisher.id, name: publisher.name }) }),\n ...(definition.via === undefined ? {} : { via: definition.via }),\n ...(definition.family === undefined ? {} : { family: definition.family }),\n ...(tags === undefined ? {} : { tags }),\n ...(definition.releaseDate === undefined ? {} : { releaseDate: definition.releaseDate }),\n ...(definition.knowledgeCutoff === undefined\n ? {}\n : { knowledgeCutoff: definition.knowledgeCutoff }),\n ...(definition.contextWindow === undefined ? {} : { contextWindow: definition.contextWindow }),\n ...(definition.maxInputTokens === undefined\n ? {}\n : { maxInputTokens: definition.maxInputTokens }),\n ...(definition.maxOutputTokens === undefined\n ? {}\n : { maxOutputTokens: definition.maxOutputTokens }),\n capabilities,\n })\n}\n\nfunction defineModelCapabilities(capabilities: unknown): ModelCapabilities {\n assertRecord(capabilities, \"capabilities\")\n const inputMediaTypes =\n capabilities.inputMediaTypes === \"any\"\n ? \"any\"\n : freezeStrings(capabilities.inputMediaTypes, \"capabilities.inputMediaTypes\")\n for (const [field, value] of Object.entries(capabilities)) {\n if (field === \"inputMediaTypes\" || field === \"reasoning\") continue\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new TypeError(`[Sixb] Model capability '${field}' must be boolean.`)\n }\n }\n const reasoning = freezeReasoningCapabilities(capabilities.reasoning)\n const flags: {\n localTools?: boolean\n parallelToolCalls?: boolean\n nativeStructuredOutput?: boolean\n providerExecutedTools?: boolean\n } = {}\n for (const key of [\n \"localTools\",\n \"parallelToolCalls\",\n \"nativeStructuredOutput\",\n \"providerExecutedTools\",\n ] as const) {\n const value = capabilities[key]\n if (typeof value === \"boolean\") flags[key] = value\n }\n return Object.freeze({\n ...(inputMediaTypes === undefined ? {} : { inputMediaTypes }),\n ...(reasoning === undefined ? {} : { reasoning }),\n ...flags,\n })\n}\n\nfunction freezeReasoningCapabilities(reasoning: unknown): ModelCapabilities[\"reasoning\"] {\n if (reasoning === undefined || reasoning === false) return reasoning\n assertRecord(reasoning, \"reasoning\")\n if (reasoning.canDisable !== undefined && typeof reasoning.canDisable !== \"boolean\") {\n throw new TypeError(\"[Sixb] Model reasoning capability 'canDisable' must be boolean.\")\n }\n const efforts = freezeReasoningEfforts(reasoning.efforts)\n const budgetTokens = freezeReasoningBudgetCapabilities(reasoning.budgetTokens)\n return Object.freeze({\n ...(reasoning.canDisable === undefined ? {} : { canDisable: reasoning.canDisable }),\n ...(efforts === undefined ? {} : { efforts }),\n ...(budgetTokens === undefined ? {} : { budgetTokens }),\n } satisfies ModelReasoningCapabilities)\n}\n\nfunction freezeReasoningEfforts(\n efforts: unknown\n): readonly (typeof MODEL_REASONING_EFFORTS)[number][] | undefined {\n if (efforts === undefined) return undefined\n if (!Array.isArray(efforts)) {\n throw new TypeError(\"[Sixb] Model reasoning capability 'efforts' must be an array.\")\n }\n const seen = new Set<string>()\n return Object.freeze(\n efforts.map((value: unknown) => {\n const effort = MODEL_REASONING_EFFORTS.find((allowed) => allowed === value)\n if (effort === undefined) {\n throw new TypeError(`[Sixb] Model reasoning effort '${String(value)}' is invalid.`)\n }\n if (seen.has(effort)) {\n throw new TypeError(`[Sixb] Model reasoning effort '${effort}' is duplicated.`)\n }\n seen.add(effort)\n return effort\n })\n )\n}\n\nfunction freezeReasoningBudgetCapabilities(\n budget: unknown\n): ModelReasoningBudgetCapabilities | undefined {\n if (budget === undefined) return undefined\n assertRecord(budget, \"reasoning budgetTokens\")\n assertOptionalNonnegativeInteger(budget.min, \"capabilities.reasoning.budgetTokens.min\")\n assertOptionalNonnegativeInteger(budget.max, \"capabilities.reasoning.budgetTokens.max\")\n if (budget.min !== undefined && budget.max !== undefined && budget.max < budget.min) {\n throw new TypeError(\n \"[Sixb] Model reasoning token budget maximum must not be below its minimum.\"\n )\n }\n return Object.freeze({\n ...(budget.min === undefined ? {} : { min: budget.min }),\n ...(budget.max === undefined ? {} : { max: budget.max }),\n })\n}\n\nfunction assertModelId(value: string, field: string): void {\n if (!value.trim()) throw new TypeError(`[Sixb] Model ${field} must not be empty.`)\n}\n\nfunction assertOptionalPositiveInteger(value: number | undefined, field: string): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {\n throw new TypeError(`[Sixb] Model ${field} must be a positive safe integer.`)\n }\n}\n\nfunction assertOptionalNonnegativeInteger(\n value: unknown,\n field: string\n): asserts value is number | undefined {\n if (\n value !== undefined &&\n (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0)\n ) {\n throw new TypeError(`[Sixb] Model ${field} must be a nonnegative safe integer.`)\n }\n}\n\nfunction assertOptionalString(value: string | undefined, field: string): void {\n if (value !== undefined && typeof value !== \"string\") {\n throw new TypeError(`[Sixb] Model ${field} must be a string.`)\n }\n}\n\nfunction freezeStrings(value: unknown, field: string): readonly string[] | undefined {\n if (value === undefined) return undefined\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\" || !entry.trim())) {\n throw new TypeError(`[Sixb] Model ${field} must contain nonempty strings.`)\n }\n return Object.freeze([...value])\n}\n\nfunction assertRecord(value: unknown, field: string): asserts value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n throw new TypeError(`[Sixb] Model ${field} must be an object.`)\n}\n",
7
- "import { RuntimeError } from \"../runtime/errors\"\nimport {\n defineLanguageModel,\n type LanguageModelDefinition,\n type ModelDefinition,\n} from \"./definitions\"\nimport type { LanguageModel } from \"./language-model\"\n\n/** Stable identity of one configured language-model binding. */\nexport interface LanguageModelRef {\n readonly provider: string\n readonly modelId: string\n}\n\n/** The configured language models, with the project default. */\nexport interface LanguageModelCatalog {\n readonly default: LanguageModelEntry\n list(): readonly LanguageModelEntry[]\n getByRef(ref: LanguageModelRef): LanguageModelEntry | null\n}\n\n/**\n * One configured language model.\n *\n * The identity describes the configured binding, not only a vendor model. For example,\n * A gateway binding and a direct provider binding for the same vendor model are distinct because their\n * `provider` values differ.\n */\nexport interface LanguageModelEntry extends LanguageModelRef {\n readonly model: LanguageModel\n}\n\n/** Models a project allows Sixb to use, organized by technical model kind. */\nexport interface ModelCatalog {\n readonly language: LanguageModelCatalog\n}\n\nexport interface ModelCatalogInput {\n /** Ordered; the first entry is the project default. */\n readonly language: readonly LanguageModel[]\n}\n\n/** Build the immutable project model catalog. Rejects invalid, duplicate, and empty catalogs. */\nexport function createModelCatalog(input: ModelCatalogInput): ModelCatalog {\n if (!Array.isArray(input?.language)) {\n throw new RuntimeError(\"[Sixb] 'models.language' must be an array of Sixb language models.\")\n }\n\n const entries: LanguageModelEntry[] = []\n const byProvider = new Map<string, Map<string, LanguageModelEntry>>()\n\n for (const [index, model] of input.language.entries()) {\n assertLanguageModel(model, index)\n\n let byModelId = byProvider.get(model.providerId)\n if (byModelId === undefined) {\n byModelId = new Map()\n byProvider.set(model.providerId, byModelId)\n }\n if (byModelId.has(model.modelId)) {\n throw new RuntimeError(\n `[Sixb] Duplicate language model '${model.providerId}/${model.modelId}' in 'models'. Each provider and model id pair may be configured once.`\n )\n }\n\n const entry = Object.freeze({\n provider: model.providerId,\n modelId: model.modelId,\n model,\n })\n byModelId.set(model.modelId, entry)\n entries.push(entry)\n }\n\n const [defaultEntry] = entries\n if (defaultEntry === undefined) {\n throw new RuntimeError(\n \"[Sixb] 'models.language' needs at least one model. Configure one or omit 'models' from createSixb().\"\n )\n }\n\n const listed = Object.freeze(entries.slice())\n const language: LanguageModelCatalog = Object.freeze({\n default: defaultEntry,\n list: () => listed,\n getByRef: (ref: LanguageModelRef) => byProvider.get(ref.provider)?.get(ref.modelId) ?? null,\n })\n\n return Object.freeze({ language })\n}\n\nfunction assertLanguageModel(model: unknown, index: number): asserts model is LanguageModel {\n if ((typeof model !== \"object\" && typeof model !== \"function\") || model === null) {\n throw invalidLanguageModel(index, \"expected a Sixb LanguageModel instance\")\n }\n\n const candidate = model as Record<string, unknown>\n assertModelIdentifier(candidate.providerId, \"provider\", index)\n assertModelIdentifier(candidate.modelId, \"modelId\", index)\n if (typeof candidate.stream !== \"function\") {\n throw invalidLanguageModel(index, \"expected 'stream' to be a function\")\n }\n try {\n const definition = defineLanguageModel(candidate.definition as LanguageModelDefinition)\n if (\n definition.providerId !== candidate.providerId ||\n definition.modelId !== candidate.modelId\n ) {\n throw new Error(\"definition identity does not match the binding\")\n }\n } catch (error) {\n throw invalidLanguageModel(index, error instanceof Error ? error.message : \"invalid definition\")\n }\n}\n\nfunction assertModelIdentifier(value: unknown, field: \"provider\" | \"modelId\", index: number): void {\n if (typeof value !== \"string\" || value.length === 0) {\n throw invalidLanguageModel(index, `expected '${field}' to be a non-empty string`)\n }\n if (value.trim() !== value) {\n throw invalidLanguageModel(index, `expected '${field}' not to have surrounding whitespace`)\n }\n}\n\nfunction invalidLanguageModel(index: number, detail: string): RuntimeError {\n return new RuntimeError(\n `[Sixb] Invalid language model at 'models.language[${index}]': ${detail}.`\n )\n}\n\n/** Provider-owned metadata lookup, independent from the project's configured bindings. */\nexport interface ModelDefinitionCatalog<TDefinition extends ModelDefinition = ModelDefinition> {\n get(modelId: string): Promise<TDefinition | undefined>\n list(): Promise<readonly TDefinition[]>\n}\n\nexport type LanguageModelDefinitionCatalog = ModelDefinitionCatalog<LanguageModelDefinition>\n",
8
- "import type { ModelFinishReason, ModelUsage } from \"./events\"\nimport type { ModelCallCost } from \"./pricing\"\n\n/** Catalog transport/access failed; callers may use local metadata without masking invalid definitions. */\nexport class ModelCatalogUnavailableError extends Error {\n readonly name = \"ModelCatalogUnavailableError\"\n}\n\n/** A provider or provider protocol rejected a model request. */\nexport class ModelProviderError extends Error {\n readonly name = \"ModelProviderError\"\n\n constructor(\n message: string,\n readonly providerId: string,\n readonly modelId: string,\n options?: ErrorOptions & {\n readonly status?: number\n readonly code?: string\n readonly requestId?: string\n readonly retryAfterMs?: number\n readonly retryable?: boolean\n }\n ) {\n super(message, options)\n this.status = options?.status\n this.code = options?.code\n this.requestId = options?.requestId\n this.retryAfterMs = options?.retryAfterMs\n this.retryable = options?.retryable ?? false\n }\n\n readonly status?: number\n readonly code?: string\n readonly requestId?: string\n readonly retryAfterMs?: number\n readonly retryable: boolean\n}\n\nexport class ModelStreamError extends Error {\n readonly name = \"ModelStreamError\"\n}\n\nexport class UnsupportedModelFeatureError extends Error {\n readonly name = \"UnsupportedModelFeatureError\"\n\n constructor(\n message?: string,\n options?: ErrorOptions & {\n readonly reason?: \"unsupported-model\" | \"unsupported-schema\"\n }\n ) {\n super(message, options)\n this.reason = options?.reason\n }\n\n readonly reason?: \"unsupported-model\" | \"unsupported-schema\"\n}\n\nexport class StructuredOutputError extends Error {\n readonly name = \"StructuredOutputError\"\n\n constructor(\n message: string,\n options?: ErrorOptions & {\n readonly text?: string\n readonly providerId?: string\n readonly modelId?: string\n readonly responseId?: string\n readonly responseModelId?: string\n readonly finishReason?: ModelFinishReason\n readonly usage?: ModelUsage\n readonly cost?: ModelCallCost\n }\n ) {\n super(message, options)\n this.text = options?.text\n this.providerId = options?.providerId\n this.modelId = options?.modelId\n this.responseId = options?.responseId\n this.responseModelId = options?.responseModelId\n this.finishReason = options?.finishReason\n this.usage = options?.usage\n this.cost = options?.cost\n }\n\n readonly text?: string\n readonly providerId?: string\n readonly modelId?: string\n readonly responseId?: string\n readonly responseModelId?: string\n readonly finishReason?: ModelFinishReason\n readonly usage?: ModelUsage\n readonly cost?: ModelCallCost\n}\n",
9
- "import type { ModelRoute, ModelUsage } from \"./events\"\nimport type { LanguageModel } from \"./language-model\"\nimport type { LanguageModelRateCard, ModelTokenPrice } from \"./rate-card\"\n\n/** Optional local financial enrichment cannot discard a completed, billable call. */\nexport function estimateModelCall(\n model: LanguageModel,\n input: Parameters<ModelCostEstimator[\"estimate\"]>[0]\n): ModelCostEstimate {\n try {\n return model.costEstimator?.estimate(input) ?? rateModelCall({ usage: input.usage })\n } catch {\n console.warn(\n \"[Sixb] Model cost estimation failed; preserving usage and available provider cost.\"\n )\n return { status: \"unpriceable\", reason: \"missing-rate-card\" }\n }\n}\n\nexport interface ModelMoney {\n readonly currency: \"USD\"\n /** Billionths of one currency unit, serialized as an integer string. */\n readonly amountNanos: string\n}\n\nexport interface ModelReportedCost {\n readonly money: ModelMoney\n readonly providerId?: string\n}\n\n/** A local estimate is never a provider-reported charge. No financial API is required to run. */\nexport type ModelCostEstimate = Exclude<ModelCallCost, { status: \"reported\" }>\n\nexport interface ModelCostEstimator {\n /** Conservative token-cost reservation, including cache writes and pricing tiers.\n * Return undefined when routing or non-token charges prevent a safe local estimate. */\n estimateReservation?(input: {\n readonly inputTokens: number\n readonly outputTokens: number\n }): ModelMoney | undefined\n\n estimate(input: {\n readonly usage: ModelUsage\n readonly route?: ModelRoute\n readonly responseModelId?: string\n }): ModelCostEstimate\n}\n\nexport type ModelCostMeter =\n | \"tokens.input.total\"\n | \"tokens.input.uncached\"\n | \"tokens.input.cacheRead\"\n | \"tokens.input.cacheWrite\"\n | \"tokens.input.cacheWrite5m\"\n | \"tokens.input.cacheWrite1h\"\n | \"tokens.output.total\"\n\nexport interface ModelCostComponent {\n readonly meter: ModelCostMeter\n readonly quantity: string\n readonly rateAmountNanosPerMillion: string\n readonly chargeAmountNanos: string\n}\n\nexport type ModelCallCost =\n | { readonly status: \"reported\"; readonly money: ModelMoney; readonly providerId?: string }\n | {\n readonly status: \"rated\"\n readonly money: ModelMoney\n readonly components: readonly ModelCostComponent[]\n }\n | {\n readonly status: \"unpriceable\"\n readonly reason: \"missing-rate-card\" | \"missing-usage\" | \"inconsistent-usage\"\n readonly missingMeters?: readonly ModelCostMeter[]\n }\n\n/** Reserve at the highest configured token rates, before cache usage and the final tier are known. */\nexport function estimateModelReservation(input: {\n readonly inputTokens: number\n readonly outputTokens: number\n readonly rateCard?: LanguageModelRateCard\n}): ModelMoney | undefined {\n if (!input.rateCard) return undefined\n if (![input.inputTokens, input.outputTokens].every((n) => Number.isSafeInteger(n) && n >= 0)) {\n throw new TypeError(\n \"[Sixb] Model reservation token estimates must be nonnegative safe integers.\"\n )\n }\n const maxRate = (prices: readonly (ModelTokenPrice | undefined)[]) => {\n const rates = prices.flatMap((price) =>\n price === undefined\n ? []\n : typeof price === \"string\"\n ? [price]\n : [price.default, ...price.tiers.map((tier) => tier.price)]\n )\n return rates.reduce((max, price) => {\n const rate = decimalDollarsToNanos(price)\n return rate > max ? rate : max\n }, 0n)\n }\n const card = input.rateCard\n const inputRate = maxRate([\n card.input,\n card.cacheReadInput,\n card.cacheWriteInput,\n card.cacheWriteInput5m,\n card.cacheWriteInput1h,\n ])\n const outputRate = maxRate([card.output])\n const charge = (tokens: number, rate: bigint) => (BigInt(tokens) * rate + 999_999n) / 1_000_000n\n return {\n currency: \"USD\",\n amountNanos: (\n charge(input.inputTokens, inputRate) + charge(input.outputTokens, outputRate)\n ).toString(),\n }\n}\n\n/** Prefer the provider's bill over rate-card estimates, then rate complete token meters locally. */\nexport function rateModelCall(input: {\n readonly usage: ModelUsage\n readonly rateCard?: LanguageModelRateCard\n readonly reported?: undefined\n}): ModelCostEstimate\nexport function rateModelCall(input: {\n readonly usage: ModelUsage\n readonly rateCard?: LanguageModelRateCard\n readonly reported?: ModelReportedCost\n}): ModelCallCost\nexport function rateModelCall(input: {\n readonly usage: ModelUsage\n readonly rateCard?: LanguageModelRateCard\n readonly reported?: ModelReportedCost\n}): ModelCallCost {\n if (input.reported) {\n assertAmountNanos(input.reported.money.amountNanos)\n return {\n status: \"reported\",\n money: input.reported.money,\n ...(input.reported.providerId === undefined ? {} : { providerId: input.reported.providerId }),\n }\n }\n if (!input.rateCard) return { status: \"unpriceable\", reason: \"missing-rate-card\" }\n const { usage, rateCard } = input\n if (!validUsageCounters(usage)) {\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n if (usage.inputTokens === undefined || usage.outputTokens === undefined) {\n return {\n status: \"unpriceable\",\n reason: \"missing-usage\",\n missingMeters: [\n ...(usage.inputTokens === undefined ? ([\"tokens.input.total\"] as const) : []),\n ...(usage.outputTokens === undefined ? ([\"tokens.output.total\"] as const) : []),\n ],\n }\n }\n\n const partitioned = partitionInputUsage(usage, rateCard)\n if (partitioned.status !== \"rated\") return partitioned\n\n const components: ModelCostComponent[] = []\n if (!partitioned.partitioned) {\n components.push(\n component(\"tokens.input.total\", usage.inputTokens, rateCard.input, usage.inputTokens)\n )\n } else {\n components.push(\n component(\"tokens.input.uncached\", partitioned.uncached, rateCard.input, usage.inputTokens)\n )\n if (partitioned.cacheRead !== undefined) {\n components.push(\n component(\n \"tokens.input.cacheRead\",\n partitioned.cacheRead,\n rateCard.cacheReadInput!,\n usage.inputTokens\n )\n )\n }\n if (partitioned.cacheWrite !== undefined) {\n components.push(\n component(\n \"tokens.input.cacheWrite\",\n partitioned.cacheWrite,\n rateCard.cacheWriteInput!,\n usage.inputTokens\n )\n )\n }\n if (partitioned.cacheWrite5m !== undefined) {\n components.push(\n component(\n \"tokens.input.cacheWrite5m\",\n partitioned.cacheWrite5m,\n rateCard.cacheWriteInput5m ?? rateCard.cacheWriteInput!,\n usage.inputTokens\n )\n )\n }\n if (partitioned.cacheWrite1h !== undefined) {\n components.push(\n component(\n \"tokens.input.cacheWrite1h\",\n partitioned.cacheWrite1h,\n rateCard.cacheWriteInput1h ?? rateCard.cacheWriteInput!,\n usage.inputTokens\n )\n )\n }\n }\n components.push(\n component(\"tokens.output.total\", usage.outputTokens, rateCard.output, usage.inputTokens)\n )\n const total = components.reduce((sum, entry) => sum + BigInt(entry.chargeAmountNanos), 0n)\n return {\n status: \"rated\",\n money: { currency: rateCard.currency, amountNanos: total.toString() },\n components,\n }\n}\n\ntype PartitionResult =\n | { readonly status: \"rated\"; readonly partitioned: false }\n | {\n readonly status: \"rated\"\n readonly partitioned: true\n readonly uncached: number\n readonly cacheRead?: number\n readonly cacheWrite?: number\n readonly cacheWrite5m?: number\n readonly cacheWrite1h?: number\n }\n | Extract<ModelCallCost, { status: \"unpriceable\" }>\n\nfunction partitionInputUsage(usage: ModelUsage, rateCard: LanguageModelRateCard): PartitionResult {\n const hasSpecificWrites =\n usage.cacheWrite5mInputTokens !== undefined || usage.cacheWrite1hInputTokens !== undefined\n const cacheWriteSpecific =\n (usage.cacheWrite5mInputTokens ?? 0) + (usage.cacheWrite1hInputTokens ?? 0)\n if (\n hasSpecificWrites &&\n usage.cacheWriteInputTokens !== undefined &&\n usage.cacheWriteInputTokens !== cacheWriteSpecific\n ) {\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n\n const partitioned =\n usage.uncachedInputTokens !== undefined ||\n usage.cacheReadInputTokens !== undefined ||\n usage.cacheWriteInputTokens !== undefined ||\n hasSpecificWrites ||\n rateCard.cacheReadInput !== undefined ||\n rateCard.cacheWriteInput !== undefined ||\n rateCard.cacheWriteInput5m !== undefined ||\n rateCard.cacheWriteInput1h !== undefined\n if (!partitioned) return { status: \"rated\", partitioned: false }\n\n const cacheRead = usage.cacheReadInputTokens ?? 0\n const totalWrite = usage.cacheWriteInputTokens ?? cacheWriteSpecific\n if (usage.inputTokens !== undefined && cacheRead + totalWrite > usage.inputTokens) {\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n\n const missing: ModelCostMeter[] = []\n if (usage.uncachedInputTokens === undefined) missing.push(\"tokens.input.uncached\")\n if (rateCard.cacheReadInput !== undefined && usage.cacheReadInputTokens === undefined) {\n missing.push(\"tokens.input.cacheRead\")\n }\n if (\n rateCard.cacheWriteInput !== undefined &&\n rateCard.cacheWriteInput5m === undefined &&\n rateCard.cacheWriteInput1h === undefined &&\n usage.cacheWriteInputTokens === undefined\n ) {\n missing.push(\"tokens.input.cacheWrite\")\n }\n if (rateCard.cacheWriteInput5m !== undefined && usage.cacheWrite5mInputTokens === undefined) {\n missing.push(\"tokens.input.cacheWrite5m\")\n }\n if (rateCard.cacheWriteInput1h !== undefined && usage.cacheWrite1hInputTokens === undefined) {\n missing.push(\"tokens.input.cacheWrite1h\")\n }\n if (missing.length > 0) {\n return { status: \"unpriceable\", reason: \"missing-usage\", missingMeters: missing }\n }\n if (cacheRead > 0 && rateCard.cacheReadInput === undefined) {\n return {\n status: \"unpriceable\",\n reason: \"missing-rate-card\",\n missingMeters: [\"tokens.input.cacheRead\"],\n }\n }\n if (!hasSpecificWrites && totalWrite > 0 && rateCard.cacheWriteInput === undefined) {\n return {\n status: \"unpriceable\",\n reason: \"missing-rate-card\",\n missingMeters: [\"tokens.input.cacheWrite\"],\n }\n }\n if (\n (usage.cacheWrite5mInputTokens ?? 0) > 0 &&\n rateCard.cacheWriteInput5m === undefined &&\n rateCard.cacheWriteInput === undefined\n ) {\n return {\n status: \"unpriceable\",\n reason: \"missing-rate-card\",\n missingMeters: [\"tokens.input.cacheWrite5m\"],\n }\n }\n if (\n (usage.cacheWrite1hInputTokens ?? 0) > 0 &&\n rateCard.cacheWriteInput1h === undefined &&\n rateCard.cacheWriteInput === undefined\n ) {\n return {\n status: \"unpriceable\",\n reason: \"missing-rate-card\",\n missingMeters: [\"tokens.input.cacheWrite1h\"],\n }\n }\n\n const uncached = usage.uncachedInputTokens!\n if (uncached + cacheRead + totalWrite !== usage.inputTokens) {\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n return {\n status: \"rated\",\n partitioned: true,\n uncached,\n ...(rateCard.cacheReadInput === undefined ? {} : { cacheRead }),\n ...(hasSpecificWrites\n ? {\n ...(rateCard.cacheWriteInput5m !== undefined || rateCard.cacheWriteInput !== undefined\n ? { cacheWrite5m: usage.cacheWrite5mInputTokens ?? 0 }\n : {}),\n ...(rateCard.cacheWriteInput1h !== undefined || rateCard.cacheWriteInput !== undefined\n ? { cacheWrite1h: usage.cacheWrite1hInputTokens ?? 0 }\n : {}),\n }\n : rateCard.cacheWriteInput === undefined\n ? {}\n : { cacheWrite: totalWrite }),\n }\n}\n\nfunction validUsageCounters(usage: ModelUsage): boolean {\n return Object.entries(usage)\n .filter(([key]) => key !== \"raw\")\n .every(([, value]) => value === undefined || (Number.isSafeInteger(value) && value >= 0))\n}\n\nfunction component(\n meter: ModelCostMeter,\n quantity: number,\n price: ModelTokenPrice,\n tierTokens: number\n): ModelCostComponent {\n const rate = decimalDollarsToNanos(resolvePrice(price, tierTokens))\n const charge = (BigInt(quantity) * rate + 500_000n) / 1_000_000n\n return {\n meter,\n quantity: quantity.toString(),\n rateAmountNanosPerMillion: rate.toString(),\n chargeAmountNanos: charge.toString(),\n }\n}\n\nfunction resolvePrice(price: ModelTokenPrice, tokens: number): string {\n if (typeof price === \"string\") return price\n return (\n price.tiers.find(\n (tier) =>\n tokens >= tier.minTokens && (tier.maxTokens === undefined || tokens < tier.maxTokens)\n )?.price ?? price.default\n )\n}\n\nfunction decimalDollarsToNanos(value: string): bigint {\n const [whole = \"0\", fraction = \"\"] = value.split(\".\")\n const nanos = fraction.slice(0, 9).padEnd(9, \"0\")\n const roundUp = Number(fraction[9] ?? \"0\") >= 5\n return BigInt(whole) * 1_000_000_000n + BigInt(nanos) + (roundUp ? 1n : 0n)\n}\n\nfunction assertAmountNanos(value: string): void {\n if (!/^(?:0|[1-9]\\d*)$/.test(value)) {\n throw new TypeError(\"[Sixb] Provider-reported model cost must use nonnegative amountNanos.\")\n }\n}\n",
10
- "/** Decimal USD per million tokens. Strings keep provider prices exact. */\nexport type ModelUnitPrice = string\n\nexport interface ModelPricingTier {\n readonly minTokens: number\n readonly maxTokens?: number\n readonly price: ModelUnitPrice\n}\n\nexport type ModelTokenPrice =\n | ModelUnitPrice\n | { readonly default: ModelUnitPrice; readonly tiers: readonly ModelPricingTier[] }\n\nexport interface LanguageModelRateCard {\n readonly currency: \"USD\"\n readonly unit: \"million-tokens\"\n readonly input: ModelTokenPrice\n readonly output: ModelTokenPrice\n readonly cacheReadInput?: ModelTokenPrice\n readonly cacheWriteInput?: ModelTokenPrice\n readonly cacheWriteInput5m?: ModelTokenPrice\n readonly cacheWriteInput1h?: ModelTokenPrice\n}\n\n/** Validate and snapshot provider-owned pricing independently of operational metadata. */\nexport function defineModelRateCard(rateCard: LanguageModelRateCard): LanguageModelRateCard {\n assertRecord(rateCard, \"rate card\")\n if (rateCard.currency !== \"USD\" || rateCard.unit !== \"million-tokens\") {\n throw new TypeError(\"[Sixb] Model rate cards must use USD per million tokens.\")\n }\n return Object.freeze({\n currency: \"USD\",\n unit: \"million-tokens\",\n input: tokenPrice(rateCard.input),\n output: tokenPrice(rateCard.output),\n ...(rateCard.cacheReadInput === undefined\n ? {}\n : { cacheReadInput: tokenPrice(rateCard.cacheReadInput) }),\n ...(rateCard.cacheWriteInput === undefined\n ? {}\n : { cacheWriteInput: tokenPrice(rateCard.cacheWriteInput) }),\n ...(rateCard.cacheWriteInput5m === undefined\n ? {}\n : { cacheWriteInput5m: tokenPrice(rateCard.cacheWriteInput5m) }),\n ...(rateCard.cacheWriteInput1h === undefined\n ? {}\n : { cacheWriteInput1h: tokenPrice(rateCard.cacheWriteInput1h) }),\n })\n}\n\nfunction tokenPrice(value: ModelTokenPrice): ModelTokenPrice {\n if (typeof value === \"string\") return price(value)\n assertRecord(value, \"token price\")\n if (!Array.isArray(value.tiers)) throw new TypeError(\"[Sixb] Model price tiers must be an array.\")\n let previousMax = 0\n return Object.freeze({\n default: price(value.default),\n tiers: Object.freeze(\n value.tiers.map((tier, index) => {\n assertRecord(tier, \"price tier\")\n if (\n typeof tier.minTokens !== \"number\" ||\n !Number.isSafeInteger(tier.minTokens) ||\n tier.minTokens < 0\n ) {\n throw new TypeError(\"[Sixb] Model price tier has an invalid minimum.\")\n }\n if (index > 0 && tier.minTokens < previousMax) {\n throw new TypeError(\"[Sixb] Model price tiers must be ordered and nonoverlapping.\")\n }\n if (\n tier.maxTokens !== undefined &&\n (typeof tier.maxTokens !== \"number\" ||\n !Number.isSafeInteger(tier.maxTokens) ||\n tier.maxTokens <= tier.minTokens)\n ) {\n throw new TypeError(\"[Sixb] Model price tier has an invalid maximum.\")\n }\n previousMax = tier.maxTokens ?? Number.POSITIVE_INFINITY\n return Object.freeze({\n minTokens: tier.minTokens,\n ...(tier.maxTokens === undefined ? {} : { maxTokens: tier.maxTokens }),\n price: price(tier.price),\n })\n })\n ),\n })\n}\n\nfunction price(value: unknown): string {\n if (typeof value !== \"string\" || !/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/.test(value)) {\n throw new TypeError(\"[Sixb] Model price must be a nonnegative decimal string.\")\n }\n return value\n}\n\nfunction assertRecord(value: unknown, field: string): asserts value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new TypeError(`[Sixb] Model ${field} must be an object.`)\n }\n}\n"
11
- ],
12
- "mappings": "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",
13
- "debugId": "2E4C0EA051E48B7564756E2164756E21",
14
- "names": []
15
- }
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/datasets/write.ts"],
4
- "sourcesContent": [
5
- "import type { BlobStorage, FileRef } from \"../blob-storage\"\nimport { isFileRef } from \"../blob-storage\"\nimport { isPlainRecord } from \"../json\"\nimport type { DatasetMergeCommitResult } from \"../lake-storage/merge\"\nimport { getDatasetMergeChangeValidationError } from \"../lake-storage/merge-validation\"\nimport type {\n DatasetProducer,\n DatasetRow,\n DatasetWriteMode,\n LakeStorage,\n} from \"../lake-storage/types\"\nimport type { MergeChange } from \"./changes\"\nimport type { DatasetDefinition } from \"./types\"\nimport { getDatasetRowValidationError } from \"./validation\"\n\nexport interface DatasetWriteValue {\n readonly value: unknown\n}\n\nexport interface WriteDatasetInput<TValue extends DatasetWriteValue = DatasetWriteValue> {\n readonly lakeStorage: LakeStorage\n readonly blobStorage: Pick<BlobStorage, \"stat\">\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode | \"merge\"\n readonly signal: AbortSignal\n /** Lazy so a merge's latest-version guard is checked before fetching source data. */\n readValues(): Promise<Iterable<TValue> | AsyncIterable<TValue>>\n readonly producer?: DatasetProducer\n readonly expectedLatestVersionId?: string\n readonly commitMessage?: string\n /** Diagnostic label for the caller, including its component prefix. */\n readonly sourceLabel?: string\n /** Progress includes validated values even if the operation subsequently fails. */\n onRead?(rowsRead: number): void\n /** Attach caller-owned source provenance to a validation failure. */\n mapValidationError?(error: unknown, value: TValue, itemIndex: number): unknown\n}\n\nexport type WriteDatasetResult = DatasetMergeCommitResult & { readonly rowsRead: number }\n\n/**\n * Validate, stage, and commit one dataset write using existing lake sessions.\n *\n * The caller owns fetching/cancelling its source, execution bookkeeping, and publishing the\n * dataset-update notification for a `created` result. This operation returns immediately after\n * the lake commit; it does not wait for downstream pipelines or projections.\n */\nexport async function writeDataset<TValue extends DatasetWriteValue>(\n input: WriteDatasetInput<TValue>\n): Promise<WriteDatasetResult> {\n const { lakeStorage, dataset, signal } = input\n let abortWrite: (() => Promise<void>) | undefined\n let rowsRead = 0\n const onRead = () => {\n rowsRead += 1\n input.onRead?.(rowsRead)\n }\n\n throwIfAborted(signal)\n await lakeStorage.createDataset(dataset)\n try {\n throwIfAborted(signal)\n const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === \"snapshot\"\n if (input.mode === \"merge\" || reconcileSnapshot) {\n const session = await lakeStorage.beginMerge({\n dataset,\n expectedLatestVersionId: input.expectedLatestVersionId,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n throwIfAborted(signal)\n const values = await input.readValues()\n throwIfAborted(signal)\n await session.writeChanges(\n validatedValues(\n input,\n values,\n async (value, itemIndex) =>\n reconcileSnapshot\n ? { kind: \"upsert\" as const, row: await validateRow(value, input, itemIndex) }\n : validateMergeChange(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n const result = await session.commit({\n commitMessage: input.commitMessage,\n createInitialVersion: reconcileSnapshot,\n retryOnConflict: dataset.sequenceBy !== undefined,\n signal,\n })\n return { ...result, rowsRead }\n }\n\n const values = await input.readValues()\n throwIfAborted(signal)\n const session = await lakeStorage.beginWrite({\n dataset,\n mode: input.mode,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n await session.writeRows(\n validatedValues(\n input,\n values,\n (value, itemIndex) => validateRow(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n\n // Preserve sync semantics: an empty append must not invent an initial dataset version.\n if (rowsRead === 0 && input.mode === \"append\") {\n const version = await lakeStorage.getLatestVersion(dataset.id)\n await session.abort()\n return { outcome: \"unchanged\", version, rowsRead }\n }\n\n const { outcome, ...version } = await session.commit({\n expectedLatestVersionId: input.expectedLatestVersionId,\n commitMessage: input.commitMessage,\n })\n return { outcome, version, rowsRead }\n } catch (error) {\n // Cleanup must not replace the source, validation, cancellation, or commit failure.\n await abortWrite?.().catch(() => {})\n throw error\n }\n}\n\nasync function* validatedValues<TValue extends DatasetWriteValue, TResult>(\n input: WriteDatasetInput<TValue>,\n values: Iterable<TValue> | AsyncIterable<TValue>,\n validate: (value: unknown, itemIndex: number) => Promise<TResult>,\n onRead: () => void\n): AsyncIterable<TResult> {\n let itemIndex = 0\n for await (const sourceValue of values) {\n throwIfAborted(input.signal)\n itemIndex += 1\n let value: TResult\n try {\n value = await validate(sourceValue.value, itemIndex)\n } catch (error) {\n throw input.mapValidationError\n ? input.mapValidationError(error, sourceValue, itemIndex)\n : error\n }\n onRead()\n yield value\n }\n}\n\nfunction sourceLabel(input: Pick<WriteDatasetInput, \"dataset\" | \"sourceLabel\">): string {\n return input.sourceLabel ?? `[Sixb] Dataset '${input.dataset.id}' writer`\n}\n\nasync function validateRow(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<DatasetRow> {\n if (!isPlainRecord(value)) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. Dataset rows must be plain objects.`\n )\n }\n const validationError = getDatasetRowValidationError(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError}`\n )\n }\n await verifyRowFileRefs(value, input, itemIndex)\n return value\n}\n\nasync function validateMergeChange(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<MergeChange<DatasetRow, DatasetRow>> {\n const validationError = getDatasetMergeChangeValidationError(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`\n )\n }\n const change = value as MergeChange<DatasetRow, DatasetRow>\n if (change.kind === \"upsert\") await verifyRowFileRefs(change.row, input, itemIndex)\n return change\n}\n\nasync function verifyRowFileRefs(\n row: DatasetRow,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<void> {\n for (const column of input.dataset.schema.columns) {\n if (column.type !== \"fileRef\") continue\n const value = row[column.name]\n if (isFileRef(value)) await verifyFileRef(value, input, column.name, itemIndex)\n }\n}\n\nasync function verifyFileRef(\n fileRef: FileRef,\n input: WriteDatasetInput,\n columnName: string,\n itemIndex: number\n): Promise<void> {\n const blobInfo = await input.blobStorage.stat(fileRef.blobId)\n const context = `${sourceLabel(input)} returned row ${itemIndex} with dataset '${input.dataset.id}' column '${columnName}'`\n if (!blobInfo) {\n throw new Error(`${context} referencing unknown blob '${fileRef.blobId}'.`)\n }\n if (blobInfo.digest !== fileRef.digest) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with digest '${fileRef.digest}', but blob storage has '${blobInfo.digest}'.`\n )\n }\n if (blobInfo.sizeBytes !== fileRef.sizeBytes) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with size ${fileRef.sizeBytes}, but blob storage has ${blobInfo.sizeBytes}.`\n )\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (!signal.aborted) return\n if (signal.reason instanceof Error) throw signal.reason\n const error = new Error(\n typeof signal.reason === \"string\" && signal.reason.length > 0\n ? signal.reason\n : \"[Sixb] Dataset write was cancelled.\"\n )\n error.name = \"AbortError\"\n throw error\n}\n"
6
- ],
7
- "mappings": ";;;;;;;;;;;;;;;AA+CA,eAAsB,aAA8C,CAClE,OAC6B;AAAA,EAC7B,QAAQ,aAAa,SAAS,WAAW;AAAA,EACzC,IAAI;AAAA,EACJ,IAAI,WAAW;AAAA,EACf,MAAM,SAAS,MAAM;AAAA,IACnB,YAAY;AAAA,IACZ,MAAM,SAAS,QAAQ;AAAA;AAAA,EAGzB,eAAe,MAAM;AAAA,EACrB,MAAM,YAAY,cAAc,OAAO;AAAA,EACvC,IAAI;AAAA,IACF,eAAe,MAAM;AAAA,IACrB,MAAM,oBAAoB,QAAQ,eAAe,aAAa,MAAM,SAAS;AAAA,IAC7E,IAAI,MAAM,SAAS,WAAW,mBAAmB;AAAA,MAC/C,MAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C;AAAA,QACA,yBAAyB,MAAM;AAAA,QAC/B,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,MACD,aAAa,MAAM,QAAQ,MAAM;AAAA,MACjC,eAAe,MAAM;AAAA,MACrB,MAAM,SAAS,MAAM,MAAM,WAAW;AAAA,MACtC,eAAe,MAAM;AAAA,MACrB,MAAM,QAAQ,aACZ,gBACE,OACA,QACA,OAAO,OAAO,cACZ,oBACI,EAAE,MAAM,UAAmB,KAAK,MAAM,YAAY,OAAO,OAAO,SAAS,EAAE,IAC3E,oBAAoB,OAAO,OAAO,SAAS,GACjD,MACF,CACF;AAAA,MACA,eAAe,MAAM;AAAA,MACrB,MAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,QAClC,eAAe,MAAM;AAAA,QACrB,sBAAsB;AAAA,QACtB,iBAAiB,QAAQ,eAAe;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,MACD,OAAO,KAAK,QAAQ,SAAS;AAAA,IAC/B;AAAA,IAEA,MAAM,SAAS,MAAM,MAAM,WAAW;AAAA,IACtC,eAAe,MAAM;AAAA,IACrB,MAAM,UAAU,MAAM,YAAY,WAAW;AAAA,MAC3C;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IACD,aAAa,MAAM,QAAQ,MAAM;AAAA,IACjC,MAAM,QAAQ,UACZ,gBACE,OACA,QACA,CAAC,OAAO,cAAc,YAAY,OAAO,OAAO,SAAS,GACzD,MACF,CACF;AAAA,IACA,eAAe,MAAM;AAAA,IAGrB,IAAI,aAAa,KAAK,MAAM,SAAS,UAAU;AAAA,MAC7C,MAAM,UAAU,MAAM,YAAY,iBAAiB,QAAQ,EAAE;AAAA,MAC7D,MAAM,QAAQ,MAAM;AAAA,MACpB,OAAO,EAAE,SAAS,aAAa,SAAS,SAAS;AAAA,IACnD;AAAA,IAEA,QAAQ,YAAY,YAAY,MAAM,QAAQ,OAAO;AAAA,MACnD,yBAAyB,MAAM;AAAA,MAC/B,eAAe,MAAM;AAAA,IACvB,CAAC;AAAA,IACD,OAAO,EAAE,SAAS,SAAS,SAAS;AAAA,IACpC,OAAO,OAAO;AAAA,IAEd,MAAM,aAAa,EAAE,MAAM,MAAM,EAAE;AAAA,IACnC,MAAM;AAAA;AAAA;AAIV,gBAAgB,eAA0D,CACxE,OACA,QACA,UACA,QACwB;AAAA,EACxB,IAAI,YAAY;AAAA,EAChB,iBAAiB,eAAe,QAAQ;AAAA,IACtC,eAAe,MAAM,MAAM;AAAA,IAC3B,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ,MAAM,SAAS,YAAY,OAAO,SAAS;AAAA,MACnD,OAAO,OAAO;AAAA,MACd,MAAM,MAAM,qBACR,MAAM,mBAAmB,OAAO,aAAa,SAAS,IACtD;AAAA;AAAA,IAEN,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA;AAGF,SAAS,WAAW,CAAC,OAAmE;AAAA,EACtF,OAAO,MAAM,eAAe,mBAAmB,MAAM,QAAQ;AAAA;AAG/D,eAAe,WAAW,CACxB,OACA,OACA,WACqB;AAAA,EACrB,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IACzB,MAAM,IAAI,MACR,GAAG,YAAY,KAAK,qCAAqC,gDAC3D;AAAA,EACF;AAAA,EACA,MAAM,kBAAkB,8BAA6B,OAAO,MAAM,OAAO;AAAA,EACzE,IAAI,iBAAiB;AAAA,IACnB,MAAM,IAAI,MACR,GAAG,YAAY,KAAK,qCAAqC,cAAc,iBACzE;AAAA,EACF;AAAA,EACA,MAAM,kBAAkB,OAAO,OAAO,SAAS;AAAA,EAC/C,OAAO;AAAA;AAGT,eAAe,mBAAmB,CAChC,OACA,OACA,WAC8C;AAAA,EAC9C,MAAM,kBAAkB,sCAAqC,OAAO,MAAM,OAAO;AAAA,EACjF,IAAI,iBAAiB;AAAA,IACnB,MAAM,IAAI,MACR,GAAG,YAAY,KAAK,8CAA8C,cAAc,iBAClF;AAAA,EACF;AAAA,EACA,MAAM,SAAS;AAAA,EACf,IAAI,OAAO,SAAS;AAAA,IAAU,MAAM,kBAAkB,OAAO,KAAK,OAAO,SAAS;AAAA,EAClF,OAAO;AAAA;AAGT,eAAe,iBAAiB,CAC9B,KACA,OACA,WACe;AAAA,EACf,WAAW,UAAU,MAAM,QAAQ,OAAO,SAAS;AAAA,IACjD,IAAI,OAAO,SAAS;AAAA,MAAW;AAAA,IAC/B,MAAM,QAAQ,IAAI,OAAO;AAAA,IACzB,IAAI,WAAU,KAAK;AAAA,MAAG,MAAM,cAAc,OAAO,OAAO,OAAO,MAAM,SAAS;AAAA,EAChF;AAAA;AAGF,eAAe,aAAa,CAC1B,SACA,OACA,YACA,WACe;AAAA,EACf,MAAM,WAAW,MAAM,MAAM,YAAY,KAAK,QAAQ,MAAM;AAAA,EAC5D,MAAM,UAAU,GAAG,YAAY,KAAK,kBAAkB,2BAA2B,MAAM,QAAQ,eAAe;AAAA,EAC9G,IAAI,CAAC,UAAU;AAAA,IACb,MAAM,IAAI,MAAM,GAAG,qCAAqC,QAAQ,UAAU;AAAA,EAC5E;AAAA,EACA,IAAI,SAAS,WAAW,QAAQ,QAAQ;AAAA,IACtC,MAAM,IAAI,MACR,GAAG,6BAA6B,QAAQ,wBAAwB,QAAQ,kCAAkC,SAAS,UACrH;AAAA,EACF;AAAA,EACA,IAAI,SAAS,cAAc,QAAQ,WAAW;AAAA,IAC5C,MAAM,IAAI,MACR,GAAG,6BAA6B,QAAQ,qBAAqB,QAAQ,mCAAmC,SAAS,YACnH;AAAA,EACF;AAAA;AAGF,SAAS,cAAc,CAAC,QAA2B;AAAA,EACjD,IAAI,CAAC,OAAO;AAAA,IAAS;AAAA,EACrB,IAAI,OAAO,kBAAkB;AAAA,IAAO,MAAM,OAAO;AAAA,EACjD,MAAM,QAAQ,IAAI,MAChB,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,SAAS,IACxD,OAAO,SACP,qCACN;AAAA,EACA,MAAM,OAAO;AAAA,EACb,MAAM;AAAA;",
8
- "debugId": "403BB5EF31615BCA64756E2164756E21",
9
- "names": []
10
- }