@sixb/core 0.1.14 → 0.1.16

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 (259) hide show
  1. package/dist/actions/index.js +26 -26
  2. package/dist/actions/worker.js +1 -1
  3. package/dist/agents/index.js +41 -41
  4. package/dist/agents/index.js.map +1 -1
  5. package/dist/agents/streams/index.js +2 -2
  6. package/dist/agents/streams/internal.js +2 -2
  7. package/dist/auth/index.js +6 -6
  8. package/dist/authorization/index.js +3 -3
  9. package/dist/bootstrap/index.js +44 -44
  10. package/dist/{chunk-6rzb1g6h.js → chunk-2xvgy3x5.js} +2 -2
  11. package/dist/{chunk-16jenmzw.js → chunk-3q7z9hd4.js} +33 -33
  12. package/dist/{chunk-16jenmzw.js.map → chunk-3q7z9hd4.js.map} +1 -1
  13. package/dist/{chunk-hxgj4kzd.js → chunk-40qb8wpe.js} +11 -11
  14. package/dist/{chunk-hxgj4kzd.js.map → chunk-40qb8wpe.js.map} +3 -3
  15. package/dist/{chunk-vn3yh259.js → chunk-4gmng3vf.js} +1 -1
  16. package/dist/{chunk-znw0zvy4.js → chunk-4wn7bxxa.js} +25 -7
  17. package/dist/chunk-4wn7bxxa.js.map +12 -0
  18. package/dist/{chunk-gct3m1da.js → chunk-667x4drs.js} +3 -3
  19. package/dist/{chunk-rzcjp5m2.js → chunk-69kt9q43.js} +2 -2
  20. package/dist/{chunk-3qpcrcj8.js → chunk-6aawea28.js} +2 -4
  21. package/dist/chunk-6aawea28.js.map +10 -0
  22. package/dist/{chunk-rzkr70gr.js → chunk-6fsr7y93.js} +5 -1
  23. package/dist/{chunk-rzkr70gr.js.map → chunk-6fsr7y93.js.map} +3 -3
  24. package/dist/{chunk-3fpgxpsq.js → chunk-6z1q7j19.js} +144 -73
  25. package/dist/{chunk-3fpgxpsq.js.map → chunk-6z1q7j19.js.map} +6 -6
  26. package/dist/{chunk-ypj2wqtj.js → chunk-70jmg2zx.js} +2 -2
  27. package/dist/{chunk-m8zkvep1.js → chunk-7g2gjvah.js} +1 -1
  28. package/dist/{chunk-pvgpckm1.js → chunk-8x74221e.js} +10 -10
  29. package/dist/{chunk-ma1mhh7w.js → chunk-a7ne02hk.js} +6 -6
  30. package/dist/{chunk-bxx3ms5t.js → chunk-b9y8hcm2.js} +2 -2
  31. package/dist/{chunk-ww185kt6.js → chunk-chdg6eqq.js} +2 -2
  32. package/dist/{chunk-y487ywrv.js → chunk-cq44v1a6.js} +4 -4
  33. package/dist/{chunk-4ypbe95r.js → chunk-cxj8y8t0.js} +2 -2
  34. package/dist/{chunk-3a338wrp.js → chunk-dp7yk20b.js} +1 -1
  35. package/dist/{chunk-dv4ct8mp.js → chunk-dsv8kdgk.js} +4 -4
  36. package/dist/{chunk-dsfw1bdr.js → chunk-f72rbvsb.js} +2 -2
  37. package/dist/{chunk-4tnrzqqh.js → chunk-fj1dvp37.js} +1 -1
  38. package/dist/{chunk-ht4a7mjg.js → chunk-g4rbm4a6.js} +42 -8
  39. package/dist/{chunk-ht4a7mjg.js.map → chunk-g4rbm4a6.js.map} +3 -3
  40. package/dist/{chunk-wnxabtn4.js → chunk-gkxsenvp.js} +19 -11
  41. package/dist/{chunk-wnxabtn4.js.map → chunk-gkxsenvp.js.map} +4 -4
  42. package/dist/{chunk-vef6qa14.js → chunk-gmdvns8f.js} +2 -2
  43. package/dist/{chunk-728fp090.js → chunk-h044jb97.js} +1072 -1075
  44. package/dist/chunk-h044jb97.js.map +15 -0
  45. package/dist/{chunk-00pfcqh4.js → chunk-h4138ww2.js} +130 -71
  46. package/dist/{chunk-00pfcqh4.js.map → chunk-h4138ww2.js.map} +5 -5
  47. package/dist/{chunk-yvf2jqj8.js → chunk-h866d223.js} +1 -1
  48. package/dist/{chunk-qma80ych.js → chunk-hn2r7z41.js} +3 -2
  49. package/dist/chunk-hn2r7z41.js.map +11 -0
  50. package/dist/{chunk-bdhfn0ww.js → chunk-kkqwzy6h.js} +1 -1
  51. package/dist/{chunk-wn7mznxc.js → chunk-kttr5ftm.js} +5 -5
  52. package/dist/{chunk-kxea54yg.js → chunk-kvysp909.js} +3 -3
  53. package/dist/{chunk-p1683c0v.js → chunk-kyjcwqz6.js} +5 -2
  54. package/dist/{chunk-p1683c0v.js.map → chunk-kyjcwqz6.js.map} +3 -3
  55. package/dist/{chunk-ffwvdgk1.js → chunk-nj0020ay.js} +1 -1
  56. package/dist/{chunk-q2xghyft.js → chunk-nkbev3tr.js} +5 -5
  57. package/dist/{chunk-cbn96bve.js → chunk-nvymebc1.js} +2 -2
  58. package/dist/{chunk-2fv8sajb.js → chunk-qnd7ehe5.js} +2 -2
  59. package/dist/{chunk-jfdggg1p.js → chunk-sbcm1b92.js} +5 -5
  60. package/dist/{chunk-d8yes9yx.js → chunk-swxzncrv.js} +1 -1
  61. package/dist/{chunk-drz59ve0.js → chunk-tkdbge6v.js} +1 -1
  62. package/dist/{chunk-ky7zpbtt.js → chunk-tnvafr7g.js} +1 -1
  63. package/dist/{chunk-y6vnvayj.js → chunk-vjcd8d27.js} +1 -1
  64. package/dist/{chunk-hj0n3c2p.js → chunk-vjqt7q3a.js} +45 -27
  65. package/dist/{chunk-hj0n3c2p.js.map → chunk-vjqt7q3a.js.map} +3 -3
  66. package/dist/{chunk-z9h698s8.js → chunk-vsvrv7n8.js} +1 -1
  67. package/dist/{chunk-xgptywp0.js → chunk-y2aq6ag9.js} +1 -1
  68. package/dist/{chunk-e2c5yxfe.js → chunk-zb47r1c8.js} +2 -2
  69. package/dist/{chunk-3nx8vj5a.js → chunk-zvmr2hqk.js} +3 -2
  70. package/dist/chunk-zvmr2hqk.js.map +12 -0
  71. package/dist/deploy/define.d.ts +4 -0
  72. package/dist/deploy/define.d.ts.map +1 -0
  73. package/dist/deploy/index.d.ts +3 -0
  74. package/dist/deploy/index.d.ts.map +1 -0
  75. package/dist/deploy/index.js +10 -0
  76. package/dist/deploy/index.js.map +10 -0
  77. package/dist/deploy/internal.d.ts +3 -0
  78. package/dist/deploy/internal.d.ts.map +1 -0
  79. package/dist/deploy/internal.js +244 -0
  80. package/dist/deploy/internal.js.map +11 -0
  81. package/dist/deploy/services.d.ts +8 -0
  82. package/dist/deploy/services.d.ts.map +1 -0
  83. package/dist/deploy/types.d.ts +309 -0
  84. package/dist/deploy/types.d.ts.map +1 -0
  85. package/dist/deploy/validation.d.ts +7 -0
  86. package/dist/deploy/validation.d.ts.map +1 -0
  87. package/dist/error-reporting/internal.js +3 -3
  88. package/dist/errors/catalog.d.ts +4 -0
  89. package/dist/errors/catalog.d.ts.map +1 -1
  90. package/dist/errors/internal.js +1 -1
  91. package/dist/events/index.js +3 -3
  92. package/dist/execution/agent.js +38 -38
  93. package/dist/execution/primitive.js +34 -34
  94. package/dist/execution/request.js +36 -36
  95. package/dist/execution/request.js.map +1 -1
  96. package/dist/index.js +56 -56
  97. package/dist/index.js.map +1 -1
  98. package/dist/maintenance/ontology-maintenance.d.ts +2 -0
  99. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  100. package/dist/maintenance/types.d.ts +8 -2
  101. package/dist/maintenance/types.d.ts.map +1 -1
  102. package/dist/materialization/dataset-watermark.d.ts +6 -1
  103. package/dist/materialization/dataset-watermark.d.ts.map +1 -1
  104. package/dist/materialization/index.js +1 -1
  105. package/dist/materialization/model.d.ts +6 -0
  106. package/dist/materialization/model.d.ts.map +1 -1
  107. package/dist/materializer/index.js +22 -22
  108. package/dist/materializer/index.js.map +1 -1
  109. package/dist/materializer/projections/finish-run.d.ts.map +1 -1
  110. package/dist/materializer/projections/replace.d.ts.map +1 -1
  111. package/dist/materializer/projections/source-materialization.d.ts +6 -2
  112. package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
  113. package/dist/models/embedding-model.d.ts +4 -0
  114. package/dist/models/embedding-model.d.ts.map +1 -1
  115. package/dist/models/execution/index.js +19 -19
  116. package/dist/models/index.js +2 -2
  117. package/dist/objects/index.js +25 -25
  118. package/dist/objects/query/index.js +21 -21
  119. package/dist/objects/query/index.js.map +1 -1
  120. package/dist/objects/vectors/indexing-generate.d.ts.map +1 -1
  121. package/dist/objects/vectors/profile.d.ts.map +1 -1
  122. package/dist/objects/vectors/query.d.ts +1 -1
  123. package/dist/objects/vectors/query.d.ts.map +1 -1
  124. package/dist/objects/vectors/resolve-query.d.ts.map +1 -1
  125. package/dist/objects/vectors/types.d.ts +1 -1
  126. package/dist/objects/vectors/types.d.ts.map +1 -1
  127. package/dist/ontology/builders.d.ts +13 -4
  128. package/dist/ontology/builders.d.ts.map +1 -1
  129. package/dist/ontology/index.js +3 -3
  130. package/dist/ontology/internal.js +2 -2
  131. package/dist/ontology/vector-profiles.d.ts.map +1 -1
  132. package/dist/pipelines/index.js +23 -23
  133. package/dist/projections/internal.js +20 -20
  134. package/dist/projections/types.d.ts +1 -1
  135. package/dist/projections/types.d.ts.map +1 -1
  136. package/dist/queues/in-memory.d.ts +1 -1
  137. package/dist/queues/in-memory.d.ts.map +1 -1
  138. package/dist/runtime/internal.js +23 -23
  139. package/dist/sandboxes/index.js +5 -5
  140. package/dist/shares/internal.js +18 -18
  141. package/dist/shares/internal.js.map +1 -1
  142. package/dist/storage/action-runs/failure.js +2 -2
  143. package/dist/storage/agents/provider.js +1 -1
  144. package/dist/storage/ai-limits/enforcement.js +2 -2
  145. package/dist/storage/connector-connections/provider.js +1 -1
  146. package/dist/storage/file-upload-sessions/provider.js +7 -7
  147. package/dist/storage/index.d.ts +2 -2
  148. package/dist/storage/index.d.ts.map +1 -1
  149. package/dist/storage/index.js +33 -33
  150. package/dist/storage/index.js.map +1 -1
  151. package/dist/storage/internal.js +1 -1
  152. package/dist/storage/ontology/in-memory/sources.d.ts +6 -3
  153. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  154. package/dist/storage/ontology/index.d.ts +1 -1
  155. package/dist/storage/ontology/index.d.ts.map +1 -1
  156. package/dist/storage/ontology/provider.d.ts +16 -3
  157. package/dist/storage/ontology/provider.d.ts.map +1 -1
  158. package/dist/storage/ontology/provider.js +8 -4
  159. package/dist/storage/ontology/provider.js.map +1 -1
  160. package/dist/storage/ontology/sources.d.ts +36 -8
  161. package/dist/storage/ontology/sources.d.ts.map +1 -1
  162. package/dist/storage/projection-runs/in-memory.d.ts +3 -1
  163. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  164. package/dist/storage/projection-runs/index.d.ts +1 -1
  165. package/dist/storage/projection-runs/index.d.ts.map +1 -1
  166. package/dist/storage/projection-runs/lifecycle.d.ts +12 -0
  167. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  168. package/dist/storage/projection-runs/provider.js +10 -4
  169. package/dist/storage/projection-runs/provider.js.map +1 -1
  170. package/dist/storage/projection-runs/types.d.ts +32 -1
  171. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  172. package/dist/storage/workflow-runs/provider.js +7 -7
  173. package/dist/syncs/index.js +24 -24
  174. package/dist/testing/index.js +306 -64
  175. package/dist/testing/index.js.map +4 -4
  176. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  177. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  178. package/dist/webhooks/internal.js +19 -19
  179. package/dist/webhooks/internal.js.map +1 -1
  180. package/dist/workers/index.js +1 -1
  181. package/dist/workflows/index.js +41 -41
  182. package/package.json +13 -1
  183. package/src/deploy/define.ts +6 -0
  184. package/src/deploy/index.ts +41 -0
  185. package/src/deploy/internal.ts +7 -0
  186. package/src/deploy/services.ts +51 -0
  187. package/src/deploy/types.ts +338 -0
  188. package/src/deploy/validation.ts +261 -0
  189. package/src/errors/catalog.ts +4 -0
  190. package/src/maintenance/ontology-maintenance.ts +32 -2
  191. package/src/maintenance/types.ts +8 -2
  192. package/src/materialization/dataset-watermark.ts +6 -4
  193. package/src/materialization/model.ts +7 -0
  194. package/src/materializer/README.md +26 -6
  195. package/src/materializer/projections/finish-run.ts +129 -26
  196. package/src/materializer/projections/replace.ts +67 -49
  197. package/src/materializer/projections/source-materialization.ts +11 -6
  198. package/src/models/embedding-model.ts +12 -0
  199. package/src/models/execution/embedding.ts +5 -1
  200. package/src/objects/query/validate.ts +1 -10
  201. package/src/objects/vectors/README.md +8 -0
  202. package/src/objects/vectors/handle.ts +1 -1
  203. package/src/objects/vectors/indexing-generate.ts +5 -1
  204. package/src/objects/vectors/profile.ts +2 -0
  205. package/src/objects/vectors/query.ts +18 -4
  206. package/src/objects/vectors/resolve-query.ts +9 -5
  207. package/src/objects/vectors/types.ts +3 -1
  208. package/src/ontology/builders.ts +21 -7
  209. package/src/ontology/vector-profiles.ts +1 -0
  210. package/src/projections/types.ts +1 -0
  211. package/src/storage/index.ts +6 -1
  212. package/src/storage/ontology/in-memory/sources.ts +119 -55
  213. package/src/storage/ontology/index.ts +4 -1
  214. package/src/storage/ontology/provider.ts +64 -7
  215. package/src/storage/ontology/sources.ts +42 -8
  216. package/src/storage/projection-runs/in-memory.ts +41 -2
  217. package/src/storage/projection-runs/index.ts +2 -0
  218. package/src/storage/projection-runs/lifecycle.ts +61 -4
  219. package/src/storage/projection-runs/types.ts +41 -1
  220. package/src/testing/ontology-storage-contract.ts +141 -15
  221. package/src/testing/projection-run-storage-contract.ts +174 -1
  222. package/dist/chunk-3nx8vj5a.js.map +0 -12
  223. package/dist/chunk-3qpcrcj8.js.map +0 -10
  224. package/dist/chunk-728fp090.js.map +0 -15
  225. package/dist/chunk-qma80ych.js.map +0 -11
  226. package/dist/chunk-znw0zvy4.js.map +0 -12
  227. /package/dist/{chunk-6rzb1g6h.js.map → chunk-2xvgy3x5.js.map} +0 -0
  228. /package/dist/{chunk-vn3yh259.js.map → chunk-4gmng3vf.js.map} +0 -0
  229. /package/dist/{chunk-gct3m1da.js.map → chunk-667x4drs.js.map} +0 -0
  230. /package/dist/{chunk-rzcjp5m2.js.map → chunk-69kt9q43.js.map} +0 -0
  231. /package/dist/{chunk-ypj2wqtj.js.map → chunk-70jmg2zx.js.map} +0 -0
  232. /package/dist/{chunk-m8zkvep1.js.map → chunk-7g2gjvah.js.map} +0 -0
  233. /package/dist/{chunk-pvgpckm1.js.map → chunk-8x74221e.js.map} +0 -0
  234. /package/dist/{chunk-ma1mhh7w.js.map → chunk-a7ne02hk.js.map} +0 -0
  235. /package/dist/{chunk-bxx3ms5t.js.map → chunk-b9y8hcm2.js.map} +0 -0
  236. /package/dist/{chunk-ww185kt6.js.map → chunk-chdg6eqq.js.map} +0 -0
  237. /package/dist/{chunk-y487ywrv.js.map → chunk-cq44v1a6.js.map} +0 -0
  238. /package/dist/{chunk-4ypbe95r.js.map → chunk-cxj8y8t0.js.map} +0 -0
  239. /package/dist/{chunk-3a338wrp.js.map → chunk-dp7yk20b.js.map} +0 -0
  240. /package/dist/{chunk-dv4ct8mp.js.map → chunk-dsv8kdgk.js.map} +0 -0
  241. /package/dist/{chunk-dsfw1bdr.js.map → chunk-f72rbvsb.js.map} +0 -0
  242. /package/dist/{chunk-4tnrzqqh.js.map → chunk-fj1dvp37.js.map} +0 -0
  243. /package/dist/{chunk-vef6qa14.js.map → chunk-gmdvns8f.js.map} +0 -0
  244. /package/dist/{chunk-yvf2jqj8.js.map → chunk-h866d223.js.map} +0 -0
  245. /package/dist/{chunk-bdhfn0ww.js.map → chunk-kkqwzy6h.js.map} +0 -0
  246. /package/dist/{chunk-wn7mznxc.js.map → chunk-kttr5ftm.js.map} +0 -0
  247. /package/dist/{chunk-kxea54yg.js.map → chunk-kvysp909.js.map} +0 -0
  248. /package/dist/{chunk-ffwvdgk1.js.map → chunk-nj0020ay.js.map} +0 -0
  249. /package/dist/{chunk-q2xghyft.js.map → chunk-nkbev3tr.js.map} +0 -0
  250. /package/dist/{chunk-cbn96bve.js.map → chunk-nvymebc1.js.map} +0 -0
  251. /package/dist/{chunk-2fv8sajb.js.map → chunk-qnd7ehe5.js.map} +0 -0
  252. /package/dist/{chunk-jfdggg1p.js.map → chunk-sbcm1b92.js.map} +0 -0
  253. /package/dist/{chunk-d8yes9yx.js.map → chunk-swxzncrv.js.map} +0 -0
  254. /package/dist/{chunk-drz59ve0.js.map → chunk-tkdbge6v.js.map} +0 -0
  255. /package/dist/{chunk-ky7zpbtt.js.map → chunk-tnvafr7g.js.map} +0 -0
  256. /package/dist/{chunk-y6vnvayj.js.map → chunk-vjcd8d27.js.map} +0 -0
  257. /package/dist/{chunk-z9h698s8.js.map → chunk-vsvrv7n8.js.map} +0 -0
  258. /package/dist/{chunk-xgptywp0.js.map → chunk-y2aq6ag9.js.map} +0 -0
  259. /package/dist/{chunk-e2c5yxfe.js.map → chunk-zb47r1c8.js.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  createPrincipalRuntimeAuthorization,
4
4
  createDisabledRuntimeAuthorization,
5
5
  createDelegatedRuntimeAuthorization
6
- } from "./chunk-rzcjp5m2.js";
6
+ } from "./chunk-69kt9q43.js";
7
7
 
8
8
  // src/execution/scopes.ts
9
9
  import { randomUUID } from "crypto";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  parseSixbFailure2
4
- } from "./chunk-rzkr70gr.js";
4
+ } from "./chunk-6fsr7y93.js";
5
5
  import {
6
6
  isPlainRecord
7
7
  } from "./chunk-wy0qdqfm.js";
@@ -7,13 +7,13 @@ import {
7
7
  ConnectorError2,
8
8
  createConnectorCodedError,
9
9
  getConnectorExecutionSourceResolver
10
- } from "./chunk-cbn96bve.js";
10
+ } from "./chunk-nvymebc1.js";
11
11
  import {
12
12
  isDatasetDefinition2
13
13
  } from "./chunk-cd234ba4.js";
14
14
  import {
15
15
  SyncValidationError2
16
- } from "./chunk-q2xghyft.js";
16
+ } from "./chunk-nkbev3tr.js";
17
17
  import {
18
18
  isOAuthConnectorAdapter,
19
19
  isConnectorDefinition
@@ -3,7 +3,7 @@ import {
3
3
  validatePrimaryProperties2,
4
4
  validatePropertyDefinitions2,
5
5
  validateQueryMetadata2
6
- } from "./chunk-d8yes9yx.js";
6
+ } from "./chunk-swxzncrv.js";
7
7
  import {
8
8
  createPropertyTokenMap2,
9
9
  createLinkTokenMap2
@@ -28,6 +28,7 @@ function snapshotVectorProfiles(profiles) {
28
28
  providerId,
29
29
  modelId,
30
30
  dimensions: definition.dimensions,
31
+ ...definition.inputMode ? { inputMode: definition.inputMode } : {},
31
32
  ...definition.representation ? {
32
33
  representation: Object.freeze({
33
34
  name: definition.representation.name,
@@ -460,4 +461,4 @@ function integerEnum2(values) {
460
461
  }
461
462
  export { snapshotVectorProfiles, OntologyRegistry2, defineObjectType2, defineOntology2, defineValueType2, defineInterface2, prop2, link2, valueTypeRef2, stringEnum2, integerEnum2 };
462
463
 
463
- //# debugId=BF5295FE042DF86664756E2164756E21
464
+ //# debugId=5A2422C7AC15B2AF64756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/ontology/vector-profiles.ts", "../src/ontology/registry.ts", "../src/ontology/builders.ts"],
4
+ "sourcesContent": [
5
+ "import type { ObjectVectorSearchProfile } from \"./types\"\n\n/** Metadata-only copy. Executable provider objects and credentials never leave the host. */\nexport function snapshotVectorProfiles(\n profiles: Readonly<Record<string, ObjectVectorSearchProfile>>\n): Readonly<Record<string, ObjectVectorSearchProfile>> {\n const snapshot: Record<string, ObjectVectorSearchProfile> = Object.create(null)\n for (const [name, profileDefinition] of Object.entries(profiles)) {\n const { providerId, modelId, definition } = profileDefinition.model\n snapshot[name] = Object.freeze({\n source: Object.freeze([...profileDefinition.source]),\n model: Object.freeze({\n providerId,\n modelId,\n definition: Object.freeze({\n kind: \"embedding\" as const,\n providerId,\n modelId,\n dimensions: definition.dimensions,\n ...(definition.inputMode ? { inputMode: definition.inputMode } : {}),\n ...(definition.representation\n ? {\n representation: Object.freeze({\n name: definition.representation.name,\n ...(definition.representation.version === undefined\n ? {}\n : { version: definition.representation.version }),\n }),\n }\n : {}),\n }),\n }),\n })\n }\n return Object.freeze(snapshot)\n}\n",
6
+ "/**\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\"\nimport { snapshotVectorProfiles } from \"./vector-profiles\"\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 (and the semantic type, if any) inline. We\n * extract them here so the runtime `valueTypesById` registry is populated\n * without requiring users to pass ValueTypes explicitly. Unit validation reads\n * the semantic type from that registry, so dropping it would make a\n * unit-bearing value type reject every unit.\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 ...(schema._semanticType === undefined ? {} : { semanticType: schema._semanticType }),\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 for (const [id, type] of this.objectTypesById) {\n if (type.search?.vectors)\n this.objectTypesById.set(id, {\n ...type,\n search: { ...type.search, vectors: snapshotVectorProfiles(type.search.vectors) },\n })\n }\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",
7
+ "/**\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 } from \"./tokens\"\nimport { createLinkTokenMap, createPropertyTokenMap } from \"./tokens\"\nimport type {\n EnumSchema,\n Interface,\n LinkCardinality,\n ObjectLink,\n ObjectLinkTargetMetadata,\n ObjectType,\n ObjectVectorSearchProfile,\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\"]>\n/** Keep profile names without carrying provider types through every linked declaration. */\nexport type DirectLinkTarget<\n TId extends string,\n TName extends string,\n TProperties extends Property[],\n TVectorProfiles extends string = never,\n> = ObjectTypeWithPropertyTokens<\n {\n id: TId\n name: TName\n properties: TProperties\n links: ObjectLink[]\n } & ([TVectorProfiles] extends [never]\n ? unknown\n : { search: { vectors: Record<TVectorProfiles, ObjectVectorSearchProfile> } })\n>\n\ntype DirectLinkTargetFor<TTarget extends ObjectType> = TTarget extends ObjectTypeWithPropertyTokens\n ? DirectLinkTarget<\n TTarget[\"id\"],\n TTarget[\"name\"],\n TTarget[\"properties\"],\n TTarget extends { search: { vectors: infer TProfiles } }\n ? Extract<keyof TProfiles, string>\n : never\n >\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: carries the schema and the semantic type)\nexport function valueTypeRef<const TVT extends ValueType>(\n valueType: TVT\n): TVT extends { semanticType: infer TSemanticType extends QuantitativeTypeId }\n ? {\n type: \"valueTypeRef\"\n valueTypeId: TVT[\"id\"]\n _resolved: TVT[\"schema\"]\n _semanticType: TSemanticType\n }\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 ...(idOrValueType.semanticType === undefined\n ? {}\n : { _semanticType: idOrValueType.semanticType }),\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"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "5A2422C7AC15B2AF64756E2164756E21",
11
+ "names": []
12
+ }
@@ -0,0 +1,4 @@
1
+ import type { DeployConfig } from "./types";
2
+ /** Declares a deployment in `sixb.deploy.ts`. `sixb deploy` validates it when it loads the file. */
3
+ export declare function defineDeploy<const TConfig extends DeployConfig>(config: TConfig): TConfig;
4
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/deploy/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,KAAK,CAAC,OAAO,SAAS,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAEzF"}
@@ -0,0 +1,3 @@
1
+ export { defineDeploy } from "./define";
2
+ export type { DeployAccess, DeployAccessKey, DeployCheck, DeployCheckContext, DeployCi, DeployCiCredential, DeployCommand, DeployConfig, DeployConfigurableWorkerType, DeployContext, DeployControlAction, DeployEnv, DeployEvent, DeployHttpServiceConfig, DeployHttpServiceName, DeployListenAddress, DeployLogsOptions, DeployOperationContext, DeployProcessDefinition, DeployProcessOptions, DeployProcessStatus, DeployRecord, DeployRelease, DeployReleaseHttp, DeployReleaseProcess, DeployReleaseService, DeployScalableProcessOptions, DeployServiceName, DeployServicesConfig, DeploySetupContext, DeploySingletonServiceConfig, DeploySingletonServiceName, DeploySource, DeploySourceArchive, DeployStatus, DeployTarget, DeployWorkersConfig, DeployWorkerType, } from "./types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,10 @@
1
+ // @bun
2
+ // src/deploy/define.ts
3
+ function defineDeploy(config) {
4
+ return config;
5
+ }
6
+ export {
7
+ defineDeploy
8
+ };
9
+
10
+ //# debugId=988A26A9EC64ED7164756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/deploy/define.ts"],
4
+ "sourcesContent": [
5
+ "import type { DeployConfig } from \"./types\"\n\n/** Declares a deployment in `sixb.deploy.ts`. `sixb deploy` validates it when it loads the file. */\nexport function defineDeploy<const TConfig extends DeployConfig>(config: TConfig): TConfig {\n return config\n}\n"
6
+ ],
7
+ "mappings": ";;AAGO,SAAS,YAAgD,CAAC,QAA0B;AAAA,EACzF,OAAO;AAAA;",
8
+ "debugId": "988A26A9EC64ED7164756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ export { DEPLOY_SERVICES, DEPLOY_WORKER_TYPES, isDeployHttpService, isDeploySingletonService, } from "./services";
2
+ export { validateDeployConfig } from "./validation";
3
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/deploy/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,244 @@
1
+ // @bun
2
+ // src/deploy/services.ts
3
+ var SERVICES = {
4
+ api: "http",
5
+ atlas: "http",
6
+ app: "http",
7
+ orchestrator: "singleton",
8
+ scheduler: "singleton",
9
+ rules: "singleton",
10
+ workers: "workers"
11
+ };
12
+ var WORKER_TYPES = {
13
+ sync: true,
14
+ action: false,
15
+ agent: true,
16
+ pipeline: true,
17
+ projection: true,
18
+ workflow: true
19
+ };
20
+ var DEPLOY_SERVICES = Object.keys(SERVICES);
21
+ var DEPLOY_WORKER_TYPES = Object.keys(WORKER_TYPES);
22
+ var DEPLOY_CONFIGURABLE_WORKER_TYPES = DEPLOY_WORKER_TYPES.filter((workerType) => WORKER_TYPES[workerType]);
23
+ function isDeployHttpService(service) {
24
+ return SERVICES[service] === "http";
25
+ }
26
+ function isDeploySingletonService(service) {
27
+ return SERVICES[service] === "singleton";
28
+ }
29
+ // src/deploy/validation.ts
30
+ var NAME_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
31
+ var DOMAIN_LABEL = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
32
+ var DOMAIN_PATTERN = new RegExp(`^${DOMAIN_LABEL}(?:\\.${DOMAIN_LABEL})*$`, "i");
33
+ var ENV_NAME_PATTERN = /^[A-Z_][A-Z0-9_]*$/;
34
+ var MEMORY_PATTERN = /^\d+(?:\.\d+)?\s*(?:b|k|kb|m|mb|g|gb)?$/i;
35
+ var MAX_TIMER_MS = 2147483647;
36
+ var PROCESS_OPTIONS = ["killTimeoutMs", "restartDelayMs", "maxMemory"];
37
+ var SCALABLE_PROCESS_OPTIONS = [...PROCESS_OPTIONS, "instances"];
38
+ function validateDeployConfig(value) {
39
+ const config = record(value, "The deploy config");
40
+ knownKeys(config, ["name", "domain", "target", "env", "services", "processes"], "");
41
+ name(config.name, "name");
42
+ if (config.domain !== undefined)
43
+ domain(config.domain, "domain");
44
+ target(config.target);
45
+ if (config.env !== undefined)
46
+ env(config.env, "env");
47
+ if (config.services !== undefined)
48
+ services(config.services);
49
+ if (config.processes !== undefined)
50
+ processes(config.processes);
51
+ return value;
52
+ }
53
+ function target(value) {
54
+ const hint = "Use a deploy target, such as `new SshTarget({ host })` from @sixb/deploy-ssh.";
55
+ if (typeof value !== "object" || value === null) {
56
+ throw new Error(`[SixbDeploy] target is required. ${hint}`);
57
+ }
58
+ const candidate = value;
59
+ const methods = ["listenAddress", "deploy", "status", "logs", "control", "check"];
60
+ if (typeof candidate.kind !== "string" || typeof candidate.location !== "string" || methods.some((method) => typeof candidate[method] !== "function")) {
61
+ throw new Error(`[SixbDeploy] target is not a deploy target. ${hint}`);
62
+ }
63
+ }
64
+ function services(value) {
65
+ const config = record(value, "services");
66
+ knownKeys(config, DEPLOY_SERVICES, "services");
67
+ for (const service of DEPLOY_SERVICES) {
68
+ const override = config[service];
69
+ if (override === undefined || typeof override === "boolean")
70
+ continue;
71
+ const path = `services.${service}`;
72
+ const options = record(override, path);
73
+ if (isDeployHttpService(service)) {
74
+ knownKeys(options, ["domain", "env", "process"], path, {
75
+ port: "Ports belong to the target, such as `new SshTarget({ ports: { api: 3012 } })`."
76
+ });
77
+ if (options.domain !== undefined)
78
+ domain(options.domain, `${path}.domain`);
79
+ if (options.process !== undefined) {
80
+ processOptions(options.process, `${path}.process`, PROCESS_OPTIONS, {
81
+ instances: "HTTP services run one process each."
82
+ });
83
+ }
84
+ } else if (isDeploySingletonService(service)) {
85
+ knownKeys(options, ["env", "process"], path);
86
+ if (options.process !== undefined) {
87
+ processOptions(options.process, `${path}.process`, PROCESS_OPTIONS, {
88
+ instances: `The ${service} runs exactly one process: a second would duplicate its work.`
89
+ });
90
+ }
91
+ } else {
92
+ knownKeys(options, ["types", "agentTurnTimeout", "concurrency", "env", "process"], path);
93
+ if (options.types !== undefined)
94
+ workerTypes(options.types, `${path}.types`);
95
+ if (options.agentTurnTimeout !== undefined) {
96
+ string(options.agentTurnTimeout, `${path}.agentTurnTimeout`);
97
+ }
98
+ if (options.concurrency !== undefined) {
99
+ workerConcurrency(options.concurrency, `${path}.concurrency`);
100
+ }
101
+ if (options.process !== undefined) {
102
+ processOptions(options.process, `${path}.process`, SCALABLE_PROCESS_OPTIONS);
103
+ }
104
+ }
105
+ if (options.env !== undefined)
106
+ env(options.env, `${path}.env`);
107
+ }
108
+ }
109
+ function processes(value) {
110
+ const config = record(value, "processes");
111
+ for (const [processName, definition] of Object.entries(config)) {
112
+ const path = `processes.${processName}`;
113
+ name(processName, path);
114
+ if (DEPLOY_SERVICES.includes(processName)) {
115
+ throw new Error(`[SixbDeploy] ${path} uses the name of a Sixb service. Rename the process.`);
116
+ }
117
+ const options = record(definition, path);
118
+ knownKeys(options, ["entrypoint", "args", "env", "process"], path);
119
+ entrypoint(options.entrypoint, `${path}.entrypoint`);
120
+ if (options.args !== undefined) {
121
+ if (!Array.isArray(options.args) || options.args.some((arg) => typeof arg !== "string")) {
122
+ throw new Error(`[SixbDeploy] ${path}.args must be an array of strings.`);
123
+ }
124
+ }
125
+ if (options.env !== undefined)
126
+ env(options.env, `${path}.env`);
127
+ if (options.process !== undefined) {
128
+ processOptions(options.process, `${path}.process`, SCALABLE_PROCESS_OPTIONS);
129
+ }
130
+ }
131
+ }
132
+ function workerTypes(value, path) {
133
+ if (value === "all")
134
+ return;
135
+ if (!Array.isArray(value) || value.length === 0) {
136
+ throw new Error(`[SixbDeploy] ${path} must be "all" or a non-empty list of worker types.`);
137
+ }
138
+ const seen = new Set;
139
+ for (const workerType of value) {
140
+ if (!DEPLOY_WORKER_TYPES.includes(workerType)) {
141
+ throw new Error(`[SixbDeploy] ${path} has unknown worker type ${JSON.stringify(workerType)}. ` + `Available: ${DEPLOY_WORKER_TYPES.join(", ")}.`);
142
+ }
143
+ if (seen.has(workerType)) {
144
+ throw new Error(`[SixbDeploy] ${path} lists ${workerType} more than once.`);
145
+ }
146
+ seen.add(workerType);
147
+ }
148
+ }
149
+ function workerConcurrency(value, path) {
150
+ const config = record(value, path);
151
+ for (const [workerType, concurrency] of Object.entries(config)) {
152
+ if (workerType === "action") {
153
+ throw new Error(`[SixbDeploy] ${path}.action cannot be set: action jobs run one at a time.`);
154
+ }
155
+ if (!DEPLOY_CONFIGURABLE_WORKER_TYPES.includes(workerType)) {
156
+ throw new Error(`[SixbDeploy] ${path} has unknown worker type "${workerType}". ` + `Available: ${DEPLOY_CONFIGURABLE_WORKER_TYPES.join(", ")}.`);
157
+ }
158
+ positiveInteger(concurrency, `${path}.${workerType}`);
159
+ }
160
+ }
161
+ function processOptions(value, path, allowed, hints = {}) {
162
+ const options = record(value, path);
163
+ knownKeys(options, allowed, path, hints);
164
+ if (options.instances !== undefined)
165
+ positiveInteger(options.instances, `${path}.instances`);
166
+ if (options.killTimeoutMs !== undefined) {
167
+ positiveInteger(options.killTimeoutMs, `${path}.killTimeoutMs`, MAX_TIMER_MS);
168
+ }
169
+ if (options.restartDelayMs !== undefined) {
170
+ positiveInteger(options.restartDelayMs, `${path}.restartDelayMs`, MAX_TIMER_MS);
171
+ }
172
+ if (options.maxMemory !== undefined) {
173
+ if (typeof options.maxMemory !== "string" || !MEMORY_PATTERN.test(options.maxMemory.trim())) {
174
+ throw new Error(`[SixbDeploy] ${path}.maxMemory must be a size such as "512M" or "2G".`);
175
+ }
176
+ }
177
+ }
178
+ function entrypoint(value, path) {
179
+ string(value, path);
180
+ const segments = value.split(/[\\/]/);
181
+ if (value.startsWith("/") || segments.includes("..")) {
182
+ throw new Error(`[SixbDeploy] ${path} must be a path inside the project, relative to its directory.`);
183
+ }
184
+ }
185
+ function env(value, path) {
186
+ const variables = record(value, path);
187
+ for (const [key, variable] of Object.entries(variables)) {
188
+ if (!ENV_NAME_PATTERN.test(key)) {
189
+ throw new Error(`[SixbDeploy] ${path}.${key} is not a valid environment variable name. ` + "Use uppercase letters, digits, and underscores.");
190
+ }
191
+ if (typeof variable !== "string") {
192
+ throw new Error(`[SixbDeploy] ${path}.${key} must be a string.`);
193
+ }
194
+ }
195
+ }
196
+ function name(value, path) {
197
+ string(value, path);
198
+ if (!NAME_PATTERN.test(value) || value.length > 63) {
199
+ throw new Error(`[SixbDeploy] ${path} must use lowercase letters, numbers, and hyphens, ` + "start and end with a letter or number, and be at most 63 characters.");
200
+ }
201
+ }
202
+ function domain(value, path) {
203
+ string(value, path);
204
+ if (value.includes("://") || value.includes("/")) {
205
+ throw new Error(`[SixbDeploy] ${path} must be a hostname such as app.example.com, not a URL.`);
206
+ }
207
+ if (value.length > 253 || !DOMAIN_PATTERN.test(value)) {
208
+ throw new Error(`[SixbDeploy] ${path} must be a valid hostname such as app.example.com.`);
209
+ }
210
+ }
211
+ function positiveInteger(value, path, maximum = Number.MAX_SAFE_INTEGER) {
212
+ if (!Number.isInteger(value) || value < 1 || value > maximum) {
213
+ throw new Error(`[SixbDeploy] ${path} must be a positive integer.`);
214
+ }
215
+ }
216
+ function string(value, path) {
217
+ if (typeof value !== "string" || value.trim() === "") {
218
+ throw new Error(`[SixbDeploy] ${path} must be a non-empty string.`);
219
+ }
220
+ }
221
+ function record(value, path) {
222
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
223
+ throw new Error(`[SixbDeploy] ${path} must be an object.`);
224
+ }
225
+ return value;
226
+ }
227
+ function knownKeys(value, allowed, path, hints = {}) {
228
+ for (const key of Object.keys(value)) {
229
+ if (allowed.includes(key))
230
+ continue;
231
+ const setting = path ? `${path}.${key}` : key;
232
+ const hint = hints[key] ?? `Available: ${allowed.join(", ")}.`;
233
+ throw new Error(`[SixbDeploy] Unknown deploy setting '${setting}'. ${hint}`);
234
+ }
235
+ }
236
+ export {
237
+ DEPLOY_SERVICES,
238
+ DEPLOY_WORKER_TYPES,
239
+ isDeployHttpService,
240
+ isDeploySingletonService,
241
+ validateDeployConfig
242
+ };
243
+
244
+ //# debugId=0E2C47DFD73C115364756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/deploy/services.ts", "../src/deploy/validation.ts"],
4
+ "sourcesContent": [
5
+ "import type {\n DeployConfigurableWorkerType,\n DeployHttpServiceName,\n DeployServiceName,\n DeploySingletonServiceName,\n DeployWorkerType,\n} from \"./types\"\n\n// Records rather than arrays so that each list is total over its union: a service or worker type\n// added to the types does not compile until it is listed here, and validation accepts it.\n\nconst SERVICES = {\n api: \"http\",\n atlas: \"http\",\n app: \"http\",\n orchestrator: \"singleton\",\n scheduler: \"singleton\",\n rules: \"singleton\",\n workers: \"workers\",\n} as const satisfies Record<DeployServiceName, \"http\" | \"singleton\" | \"workers\">\n\n/** Whether each worker type's concurrency can be configured. */\nconst WORKER_TYPES: {\n readonly [Type in DeployWorkerType]: Type extends DeployConfigurableWorkerType ? true : false\n} = {\n sync: true,\n action: false,\n agent: true,\n pipeline: true,\n projection: true,\n workflow: true,\n}\n\n/** Every service, in the order a deployment lists them. */\nexport const DEPLOY_SERVICES = Object.keys(SERVICES) as DeployServiceName[]\n\nexport const DEPLOY_WORKER_TYPES = Object.keys(WORKER_TYPES) as DeployWorkerType[]\n\nexport const DEPLOY_CONFIGURABLE_WORKER_TYPES = DEPLOY_WORKER_TYPES.filter(\n (workerType): workerType is DeployConfigurableWorkerType => WORKER_TYPES[workerType]\n)\n\nexport function isDeployHttpService(service: DeployServiceName): service is DeployHttpServiceName {\n return SERVICES[service] === \"http\"\n}\n\nexport function isDeploySingletonService(\n service: DeployServiceName\n): service is DeploySingletonServiceName {\n return SERVICES[service] === \"singleton\"\n}\n",
6
+ "import {\n DEPLOY_CONFIGURABLE_WORKER_TYPES,\n DEPLOY_SERVICES,\n DEPLOY_WORKER_TYPES,\n isDeployHttpService,\n isDeploySingletonService,\n} from \"./services\"\nimport type { DeployConfig } from \"./types\"\n\ntype UnknownRecord = Record<string, unknown>\n\nconst NAME_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst DOMAIN_LABEL = \"[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\"\nconst DOMAIN_PATTERN = new RegExp(`^${DOMAIN_LABEL}(?:\\\\.${DOMAIN_LABEL})*$`, \"i\")\nconst ENV_NAME_PATTERN = /^[A-Z_][A-Z0-9_]*$/\nconst MEMORY_PATTERN = /^\\d+(?:\\.\\d+)?\\s*(?:b|k|kb|m|mb|g|gb)?$/i\n/** Longest delay a timer honors; anything larger fires immediately. */\nconst MAX_TIMER_MS = 2_147_483_647\n\nconst PROCESS_OPTIONS = [\"killTimeoutMs\", \"restartDelayMs\", \"maxMemory\"] as const\nconst SCALABLE_PROCESS_OPTIONS = [...PROCESS_OPTIONS, \"instances\"] as const\n\n/**\n * Checks a loaded `sixb.deploy.ts` default export and returns it typed. Validates shape and\n * values only; `sixb deploy` resolves defaults and checks what depends on the target.\n */\nexport function validateDeployConfig(value: unknown): DeployConfig {\n const config = record(value, \"The deploy config\")\n knownKeys(config, [\"name\", \"domain\", \"target\", \"env\", \"services\", \"processes\"], \"\")\n\n name(config.name, \"name\")\n if (config.domain !== undefined) domain(config.domain, \"domain\")\n target(config.target)\n if (config.env !== undefined) env(config.env, \"env\")\n if (config.services !== undefined) services(config.services)\n if (config.processes !== undefined) processes(config.processes)\n\n return value as DeployConfig\n}\n\nfunction target(value: unknown): void {\n const hint = \"Use a deploy target, such as `new SshTarget({ host })` from @sixb/deploy-ssh.\"\n if (typeof value !== \"object\" || value === null) {\n throw new Error(`[SixbDeploy] target is required. ${hint}`)\n }\n const candidate = value as UnknownRecord\n const methods = [\"listenAddress\", \"deploy\", \"status\", \"logs\", \"control\", \"check\"]\n if (\n typeof candidate.kind !== \"string\" ||\n typeof candidate.location !== \"string\" ||\n methods.some((method) => typeof candidate[method] !== \"function\")\n ) {\n throw new Error(`[SixbDeploy] target is not a deploy target. ${hint}`)\n }\n}\n\nfunction services(value: unknown): void {\n const config = record(value, \"services\")\n knownKeys(config, DEPLOY_SERVICES, \"services\")\n\n for (const service of DEPLOY_SERVICES) {\n const override = config[service]\n if (override === undefined || typeof override === \"boolean\") continue\n const path = `services.${service}`\n const options = record(override, path)\n\n if (isDeployHttpService(service)) {\n knownKeys(options, [\"domain\", \"env\", \"process\"], path, {\n port: \"Ports belong to the target, such as `new SshTarget({ ports: { api: 3012 } })`.\",\n })\n if (options.domain !== undefined) domain(options.domain, `${path}.domain`)\n if (options.process !== undefined) {\n processOptions(options.process, `${path}.process`, PROCESS_OPTIONS, {\n instances: \"HTTP services run one process each.\",\n })\n }\n } else if (isDeploySingletonService(service)) {\n knownKeys(options, [\"env\", \"process\"], path)\n if (options.process !== undefined) {\n processOptions(options.process, `${path}.process`, PROCESS_OPTIONS, {\n instances: `The ${service} runs exactly one process: a second would duplicate its work.`,\n })\n }\n } else {\n knownKeys(options, [\"types\", \"agentTurnTimeout\", \"concurrency\", \"env\", \"process\"], path)\n if (options.types !== undefined) workerTypes(options.types, `${path}.types`)\n if (options.agentTurnTimeout !== undefined) {\n string(options.agentTurnTimeout, `${path}.agentTurnTimeout`)\n }\n if (options.concurrency !== undefined) {\n workerConcurrency(options.concurrency, `${path}.concurrency`)\n }\n if (options.process !== undefined) {\n processOptions(options.process, `${path}.process`, SCALABLE_PROCESS_OPTIONS)\n }\n }\n\n if (options.env !== undefined) env(options.env, `${path}.env`)\n }\n}\n\nfunction processes(value: unknown): void {\n const config = record(value, \"processes\")\n\n for (const [processName, definition] of Object.entries(config)) {\n const path = `processes.${processName}`\n name(processName, path)\n if ((DEPLOY_SERVICES as readonly string[]).includes(processName)) {\n throw new Error(`[SixbDeploy] ${path} uses the name of a Sixb service. Rename the process.`)\n }\n\n const options = record(definition, path)\n knownKeys(options, [\"entrypoint\", \"args\", \"env\", \"process\"], path)\n entrypoint(options.entrypoint, `${path}.entrypoint`)\n if (options.args !== undefined) {\n if (!Array.isArray(options.args) || options.args.some((arg) => typeof arg !== \"string\")) {\n throw new Error(`[SixbDeploy] ${path}.args must be an array of strings.`)\n }\n }\n if (options.env !== undefined) env(options.env, `${path}.env`)\n if (options.process !== undefined) {\n processOptions(options.process, `${path}.process`, SCALABLE_PROCESS_OPTIONS)\n }\n }\n}\n\nfunction workerTypes(value: unknown, path: string): void {\n if (value === \"all\") return\n if (!Array.isArray(value) || value.length === 0) {\n throw new Error(`[SixbDeploy] ${path} must be \"all\" or a non-empty list of worker types.`)\n }\n const seen = new Set<string>()\n for (const workerType of value) {\n if (!(DEPLOY_WORKER_TYPES as readonly unknown[]).includes(workerType)) {\n throw new Error(\n `[SixbDeploy] ${path} has unknown worker type ${JSON.stringify(workerType)}. ` +\n `Available: ${DEPLOY_WORKER_TYPES.join(\", \")}.`\n )\n }\n if (seen.has(workerType)) {\n throw new Error(`[SixbDeploy] ${path} lists ${workerType} more than once.`)\n }\n seen.add(workerType)\n }\n}\n\nfunction workerConcurrency(value: unknown, path: string): void {\n const config = record(value, path)\n for (const [workerType, concurrency] of Object.entries(config)) {\n if (workerType === \"action\") {\n throw new Error(`[SixbDeploy] ${path}.action cannot be set: action jobs run one at a time.`)\n }\n if (!(DEPLOY_CONFIGURABLE_WORKER_TYPES as readonly string[]).includes(workerType)) {\n throw new Error(\n `[SixbDeploy] ${path} has unknown worker type \"${workerType}\". ` +\n `Available: ${DEPLOY_CONFIGURABLE_WORKER_TYPES.join(\", \")}.`\n )\n }\n positiveInteger(concurrency, `${path}.${workerType}`)\n }\n}\n\nfunction processOptions(\n value: unknown,\n path: string,\n allowed: readonly string[],\n hints: Readonly<Record<string, string>> = {}\n): void {\n const options = record(value, path)\n knownKeys(options, allowed, path, hints)\n if (options.instances !== undefined) positiveInteger(options.instances, `${path}.instances`)\n if (options.killTimeoutMs !== undefined) {\n positiveInteger(options.killTimeoutMs, `${path}.killTimeoutMs`, MAX_TIMER_MS)\n }\n if (options.restartDelayMs !== undefined) {\n positiveInteger(options.restartDelayMs, `${path}.restartDelayMs`, MAX_TIMER_MS)\n }\n if (options.maxMemory !== undefined) {\n if (typeof options.maxMemory !== \"string\" || !MEMORY_PATTERN.test(options.maxMemory.trim())) {\n throw new Error(`[SixbDeploy] ${path}.maxMemory must be a size such as \"512M\" or \"2G\".`)\n }\n }\n}\n\nfunction entrypoint(value: unknown, path: string): void {\n string(value, path)\n const segments = value.split(/[\\\\/]/)\n if (value.startsWith(\"/\") || segments.includes(\"..\")) {\n throw new Error(\n `[SixbDeploy] ${path} must be a path inside the project, relative to its directory.`\n )\n }\n}\n\nfunction env(value: unknown, path: string): void {\n const variables = record(value, path)\n for (const [key, variable] of Object.entries(variables)) {\n if (!ENV_NAME_PATTERN.test(key)) {\n throw new Error(\n `[SixbDeploy] ${path}.${key} is not a valid environment variable name. ` +\n \"Use uppercase letters, digits, and underscores.\"\n )\n }\n if (typeof variable !== \"string\") {\n throw new Error(`[SixbDeploy] ${path}.${key} must be a string.`)\n }\n }\n}\n\nfunction name(value: unknown, path: string): void {\n string(value, path)\n if (!NAME_PATTERN.test(value) || value.length > 63) {\n throw new Error(\n `[SixbDeploy] ${path} must use lowercase letters, numbers, and hyphens, ` +\n \"start and end with a letter or number, and be at most 63 characters.\"\n )\n }\n}\n\nfunction domain(value: unknown, path: string): void {\n string(value, path)\n if (value.includes(\"://\") || value.includes(\"/\")) {\n throw new Error(`[SixbDeploy] ${path} must be a hostname such as app.example.com, not a URL.`)\n }\n if (value.length > 253 || !DOMAIN_PATTERN.test(value)) {\n throw new Error(`[SixbDeploy] ${path} must be a valid hostname such as app.example.com.`)\n }\n}\n\nfunction positiveInteger(value: unknown, path: string, maximum = Number.MAX_SAFE_INTEGER): void {\n if (!Number.isInteger(value) || (value as number) < 1 || (value as number) > maximum) {\n throw new Error(`[SixbDeploy] ${path} must be a positive integer.`)\n }\n}\n\nfunction string(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`[SixbDeploy] ${path} must be a non-empty string.`)\n }\n}\n\nfunction record(value: unknown, path: string): UnknownRecord {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`[SixbDeploy] ${path} must be an object.`)\n }\n return value as UnknownRecord\n}\n\nfunction knownKeys(\n value: UnknownRecord,\n allowed: readonly string[],\n path: string,\n hints: Readonly<Record<string, string>> = {}\n): void {\n for (const key of Object.keys(value)) {\n if (allowed.includes(key)) continue\n const setting = path ? `${path}.${key}` : key\n const hint = hints[key] ?? `Available: ${allowed.join(\", \")}.`\n throw new Error(`[SixbDeploy] Unknown deploy setting '${setting}'. ${hint}`)\n }\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "0E2C47DFD73C115364756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,8 @@
1
+ import type { DeployConfigurableWorkerType, DeployHttpServiceName, DeployServiceName, DeploySingletonServiceName, DeployWorkerType } from "./types";
2
+ /** Every service, in the order a deployment lists them. */
3
+ export declare const DEPLOY_SERVICES: DeployServiceName[];
4
+ export declare const DEPLOY_WORKER_TYPES: DeployWorkerType[];
5
+ export declare const DEPLOY_CONFIGURABLE_WORKER_TYPES: DeployConfigurableWorkerType[];
6
+ export declare function isDeployHttpService(service: DeployServiceName): service is DeployHttpServiceName;
7
+ export declare function isDeploySingletonService(service: DeployServiceName): service is DeploySingletonServiceName;
8
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/deploy/services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EACjB,MAAM,SAAS,CAAA;AA2BhB,2DAA2D;AAC3D,eAAO,MAAM,eAAe,EAA4B,iBAAiB,EAAE,CAAA;AAE3E,eAAO,MAAM,mBAAmB,EAAgC,gBAAgB,EAAE,CAAA;AAElF,eAAO,MAAM,gCAAgC,gCAE5C,CAAA;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,IAAI,qBAAqB,CAEhG;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,GACzB,OAAO,IAAI,0BAA0B,CAEvC"}