@salsita-ai/sdk 0.50.0-develop.be40f0cee8 → 0.50.0-develop.c1dcc73e88

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 (1036) hide show
  1. package/README.md +3 -3
  2. package/dist/admin/create-admin-pages-from-spec.d.ts +1 -1
  3. package/dist/application-spec/errors/diagnostic-codes.d.ts +5 -0
  4. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  5. package/dist/application-spec/errors/diagnostic-messages.d.ts +5 -0
  6. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  7. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  8. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  9. package/dist/application-spec/generate-application/code/common/project-module-list.d.ts +8 -0
  10. package/dist/application-spec/generate-application/code/common/project-module-list.js +3 -0
  11. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  12. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +8 -1
  13. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  14. package/dist/application-spec/generate-application/code/templates/admin-domain-code.d.ts +1 -2
  15. package/dist/application-spec/generate-application/code/templates/admin-domain-code.js +6 -14
  16. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.d.ts +1 -2
  17. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.js +4 -4
  18. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.d.ts +1 -2
  19. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.js +7 -16
  20. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.d.ts +1 -2
  21. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.js +7 -9
  22. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-assistant.d.ts +2 -2
  23. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-assistant.js +1 -1
  24. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.d.ts +4 -2
  25. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +53 -54
  26. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +1 -1
  27. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  28. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-relation-expressions.js +1 -1
  29. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.d.ts +6 -8
  30. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +11 -11
  31. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +1 -1
  32. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  33. package/dist/application-spec/generate-application/code/templates/domain-spec.js +12 -12
  34. package/dist/application-spec/generate-application/code/templates/domain.js +5 -5
  35. package/dist/application-spec/generate-application/code/templates/index.d.ts +1 -7
  36. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  37. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  38. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  39. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +93 -41
  40. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +1 -1
  41. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +2 -2
  42. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  43. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.d.ts +1 -0
  44. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +6 -0
  45. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +37 -12
  46. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +19 -7
  47. package/dist/application-spec/generate-application/code/templates/webhook-builders.js +9 -4
  48. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -2
  49. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +1 -3
  50. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +1 -3
  51. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +4 -3
  52. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.js +1 -1
  53. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +2 -1
  54. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  55. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +2 -4
  56. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  57. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  58. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  59. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +7 -2
  60. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  61. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
  62. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
  63. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
  64. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
  65. package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
  66. package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
  67. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.d.ts +3 -8
  68. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.js +1 -1
  69. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +9 -43
  70. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  71. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-server-settings.d.ts +2 -2
  72. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.d.ts +5 -21
  73. package/dist/application-spec/parse-application-files/spec/sections/infra.d.ts +2 -0
  74. package/dist/application-spec/parse-application-files/spec/sections/infra.js +1 -1
  75. package/dist/client/authorized-client.d.ts +3 -1
  76. package/dist/client/authorized-client.js +1 -1
  77. package/dist/client/contract.d.ts +34 -0
  78. package/dist/client/contract.js +1 -1
  79. package/dist/client/index.d.ts +2 -2
  80. package/dist/client/index.js +1 -1
  81. package/dist/client/local-authorized-client.d.ts +3 -1
  82. package/dist/client/local-authorized-client.js +1 -1
  83. package/dist/client/memory-authorized-client.d.ts +3 -1
  84. package/dist/client/memory-authorized-client.js +1 -1
  85. package/dist/client/phoenix-api.d.ts +271 -30
  86. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  87. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +245 -13
  88. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  89. package/dist/configurator/application-runtime/extensions/systems/assistant-system/change-recorder.d.ts +85 -0
  90. package/dist/configurator/application-runtime/extensions/systems/assistant-system/change-recorder.js +1 -0
  91. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +8 -3
  92. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  93. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +4 -0
  94. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  95. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +16 -1
  96. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  97. package/dist/configurator/application-runtime/extensions/systems/graphql-system/side-effects.d.ts +9 -0
  98. package/dist/configurator/application-runtime/extensions/systems/graphql-system/side-effects.js +1 -0
  99. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +1 -1
  100. package/dist/configurator/common/configurator-interface.d.ts +5 -1
  101. package/dist/configurator/common/configurator-interface.js +1 -1
  102. package/dist/configurator/common/frontend-analytics.d.ts +21 -21
  103. package/dist/configurator/index.d.ts +0 -1
  104. package/dist/configurator/index.js +1 -1
  105. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +6 -0
  106. package/dist/configurator/pages/DefaultConfiguratorLayout.js +1 -0
  107. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  108. package/dist/configurator/scene/scene-analytics/scene-analytics.d.ts +2 -2
  109. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  110. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +3 -7
  111. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  112. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  113. package/dist/configurator/ui/assistant/AssistantThread.d.ts +7 -8
  114. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  115. package/dist/configurator/ui/assistant/index.d.ts +1 -1
  116. package/dist/configurator/ui/assistant/index.js +1 -1
  117. package/dist/configurator/ui/assistant/thread-items.d.ts +14 -3
  118. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  119. package/dist/configurator/ui/assistant/tool-chip.d.ts +8 -1
  120. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  121. package/dist/configurator/ui/assistant/use-is-assistant-panel-open.d.ts +5 -0
  122. package/dist/configurator/ui/assistant/use-is-assistant-panel-open.js +1 -0
  123. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +1 -75
  124. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -20
  125. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  126. package/dist/configurator/ui/configurator-layout/universal/DesktopSidebar.d.ts +92 -0
  127. package/dist/configurator/ui/configurator-layout/universal/DesktopSidebar.js +16 -0
  128. package/dist/configurator/ui/configurator-layout/universal/Layout.js +1 -1
  129. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +2 -2
  130. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  131. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +47 -0
  132. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -0
  133. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +11 -26
  134. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.js +1 -1
  135. package/dist/configurator/ui/legacy/mobile-controls/MobileControls.d.ts +1 -1
  136. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.d.ts +2 -2
  137. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  138. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +100 -117
  139. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +18 -12
  140. package/dist/docs/complex-use-cases/sketching.mdx +0 -38
  141. package/dist/docs/controls/select-attribute/cardselect.mdx +9 -13
  142. package/dist/docs/index.json +1 -1
  143. package/dist/docs/integrations/woocommerce/local-development.mdx +1 -1
  144. package/dist/docs/layouts/custom-price.mdx +14 -16
  145. package/dist/docs/layouts/sidebar/tabs.mdx +24 -21
  146. package/dist/docs/layouts/toolbar.mdx +3 -1
  147. package/dist/docs/other-features/domain-actions.mdx +1 -1
  148. package/dist/docs/other-features/side-effects.mdx +76 -45
  149. package/dist/docs/other-features/transformers.mdx +1 -1
  150. package/dist/docs/other-features/violation-messages.mdx +52 -56
  151. package/dist/docs/phoenix/admin.mdx +9 -24
  152. package/dist/docs/phoenix/configurator-interface.mdx +104 -65
  153. package/dist/docs/phoenix/deployments.mdx +1 -1
  154. package/dist/docs/phoenix/domain-model.mdx +4 -0
  155. package/dist/docs/phoenix/expression-context.mdx +11 -3
  156. package/dist/docs/phoenix/getting-started.mdx +1 -1
  157. package/dist/docs/phoenix/localization.mdx +3 -22
  158. package/dist/docs/phoenix/phoenix-cli.mdx +124 -49
  159. package/dist/docs/phoenix/project-structure.mdx +24 -11
  160. package/dist/docs/phoenix/quickstart.mdx +2 -2
  161. package/dist/docs/phoenix/sdk-builder-workflow.mdx +12 -11
  162. package/dist/docs/phoenix/webhooks.mdx +2 -2
  163. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +15 -13
  164. package/dist/docs/relations/hierarchy.mdx +13 -2
  165. package/dist/docs/ux-guidelines/choosing-a-control.mdx +11 -0
  166. package/dist/domain/admin-domain/__generated/enhanced-model.d.ts +1 -2
  167. package/dist/domain/admin-domain/__generated/model/versions/v1.d.ts +1 -1
  168. package/dist/domain/admin-domain/__generated/model/versions/v2.d.ts +1 -1
  169. package/dist/domain/admin-domain/__generated/model/versions/v3.d.ts +1 -1
  170. package/dist/domain/admin-domain/__generated/model/versions/v4.d.ts +1 -1
  171. package/dist/domain/admin-domain/__generated/model/versions/v5.d.ts +1 -1
  172. package/dist/domain/admin-domain/__generated/model/versions/v6.d.ts +2 -2
  173. package/dist/domain/admin-domain/__generated/model/versions/v6.js +1 -1
  174. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -14
  175. package/dist/domain/admin-domain/implementation/common-admin-migrations.d.ts +1 -1
  176. package/dist/domain/admin-domain/implementation/common-admin-publish.d.ts +1 -2
  177. package/dist/domain/admin-domain/index.d.ts +9 -5
  178. package/dist/domain/admin-domain/index.js +1 -1
  179. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +2 -2
  180. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  181. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  182. package/dist/domain/application/admin-page-factories.d.ts +1 -2
  183. package/dist/domain/application/application-config.d.ts +28 -97
  184. package/dist/domain/application/assistant/assistant-manifest.d.ts +63 -0
  185. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +95 -0
  186. package/dist/domain/application/assistant/assistant-value-type.d.ts +9 -0
  187. package/dist/domain/application/assistant/assistant-value-type.js +1 -0
  188. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +4 -0
  189. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -0
  190. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  191. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -0
  192. package/dist/domain/application/assistant/index.d.ts +4 -0
  193. package/dist/domain/application/assistant/index.js +1 -0
  194. package/dist/domain/application/assistant-field-options.d.ts +2 -3
  195. package/dist/domain/application/assistant-mutations.d.ts +3 -5
  196. package/dist/domain/application/assistant-mutations.js +1 -1
  197. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -7
  198. package/dist/domain/application/configurator-builder.d.ts +33 -18
  199. package/dist/domain/application/configurator-builder.js +1 -1
  200. package/dist/domain/application/create-initial-published-data.d.ts +6 -7
  201. package/dist/domain/application/index.d.ts +3 -6
  202. package/dist/domain/application/index.js +1 -1
  203. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  204. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  205. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  206. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  207. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  208. package/dist/domain/application/published-data/build-legend-data.d.ts +1 -1
  209. package/dist/domain/application/published-data/create-finalize-admin-domain.d.ts +1 -2
  210. package/dist/domain/application/published-data/format-field-type.d.ts +1 -1
  211. package/dist/domain/application/published-data/map-data-to-sheet.d.ts +1 -1
  212. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +3 -3
  213. package/dist/domain/application/published-data/map-published-data.d.ts +7 -4
  214. package/dist/domain/application/published-data/validate-sheet-data.d.ts +1 -1
  215. package/dist/domain/available-system-components.js +1 -1
  216. package/dist/domain/core/action/action-factory.d.ts +11 -0
  217. package/dist/domain/core/{action.d.ts → action/action.d.ts} +22 -18
  218. package/dist/domain/core/action/index.d.ts +2 -0
  219. package/dist/domain/core/action/index.js +1 -0
  220. package/dist/domain/{components → core/component}/component-reader-types.d.ts +1 -2
  221. package/dist/domain/{components → core/component}/debug-state-component.d.ts +1 -1
  222. package/dist/domain/core/component/debug-state-component.js +1 -0
  223. package/dist/domain/core/component/domain-component-optic.d.ts +65 -0
  224. package/dist/domain/core/component/domain-component-optic.js +16 -0
  225. package/dist/domain/{components → core/component}/drag-state-component.d.ts +1 -1
  226. package/dist/domain/core/component/drag-state-component.js +1 -0
  227. package/dist/domain/{components → core/component}/export-state-component.d.ts +1 -1
  228. package/dist/domain/core/component/export-state-component.js +1 -0
  229. package/dist/domain/{components → core/component}/fullscreen-state-component.d.ts +1 -1
  230. package/dist/domain/core/component/fullscreen-state-component.js +1 -0
  231. package/dist/domain/{components → core/component}/group-components-by-entity-id-and-name.d.ts +1 -2
  232. package/dist/domain/core/component/group-components-by-entity-id-and-name.js +1 -0
  233. package/dist/domain/{components → core/component}/hover-state-component.d.ts +1 -1
  234. package/dist/domain/core/component/hover-state-component.js +1 -0
  235. package/dist/domain/core/component/index.d.ts +18 -0
  236. package/dist/domain/core/component/index.js +1 -0
  237. package/dist/domain/{components → core/component}/legacy-filter.d.ts +4 -19
  238. package/dist/domain/{components → core/component}/navigation-state-component.d.ts +1 -1
  239. package/dist/domain/core/component/navigation-state-component.js +1 -0
  240. package/dist/domain/{components → core/component}/selection-state-component.d.ts +1 -1
  241. package/dist/domain/core/component/selection-state-component.js +1 -0
  242. package/dist/domain/{components → core/component}/system-component-builder.d.ts +1 -2
  243. package/dist/domain/core/component/system-component-builder.js +1 -0
  244. package/dist/domain/{components → core/component}/system-component-filter.d.ts +38 -20
  245. package/dist/domain/core/component/system-virtual-entity.js +1 -0
  246. package/dist/domain/{components → core/component}/tool-state-component.d.ts +1 -1
  247. package/dist/domain/core/component/tool-state-component.js +1 -0
  248. package/dist/domain/{components → core/component}/updates.d.ts +17 -2
  249. package/dist/domain/{components → core/component}/view-state-component.d.ts +1 -1
  250. package/dist/domain/core/component/view-state-component.js +1 -0
  251. package/dist/domain/{components → core/component}/viewport-state-component.d.ts +1 -1
  252. package/dist/domain/core/component/viewport-state-component.js +1 -0
  253. package/dist/domain/core/data-schema/data-cell-value.d.ts +4 -0
  254. package/dist/domain/core/data-schema/data-schema-array-field.d.ts +5 -0
  255. package/dist/domain/core/data-schema/data-schema-field-object.d.ts +4 -0
  256. package/dist/domain/core/data-schema/data-schema-field.d.ts +2 -0
  257. package/dist/domain/core/data-schema/data-schema-field.js +1 -0
  258. package/dist/domain/core/data-schema/data-schema-localized-field.d.ts +4 -0
  259. package/dist/domain/core/data-schema/data-schema-localized-field.js +1 -0
  260. package/dist/domain/core/data-schema/data-schema-primitive-field.d.ts +5 -0
  261. package/dist/domain/core/data-schema/data-schema-primitive-field.js +1 -0
  262. package/dist/domain/core/data-schema/data-schema.d.ts +2 -0
  263. package/dist/domain/core/data-schema/data-schema.js +1 -0
  264. package/dist/domain/core/data-schema/index.d.ts +7 -0
  265. package/dist/domain/core/data-schema/index.js +1 -0
  266. package/dist/domain/core/decoder/create-decoder.d.ts +6 -0
  267. package/dist/domain/core/decoder/create-decoder.js +1 -0
  268. package/dist/domain/core/decoder/decoder.d.ts +6 -0
  269. package/dist/domain/core/decoder/decoder.js +1 -0
  270. package/dist/domain/core/decoder/index.d.ts +2 -0
  271. package/dist/domain/core/decoder/index.js +1 -0
  272. package/dist/domain/core/domain-factory.d.ts +4 -5
  273. package/dist/domain/core/domain-factory.js +1 -1
  274. package/dist/domain/core/domain.d.ts +4 -5
  275. package/dist/domain/core/domain.js +1 -1
  276. package/dist/domain/core/emission/index.d.ts +8 -0
  277. package/dist/domain/core/emission/index.js +1 -0
  278. package/dist/domain/core/emission/reset-state-emission.d.ts +12 -0
  279. package/dist/domain/core/emission/reset-state-emission.js +1 -0
  280. package/dist/domain/core/emission/state-emission.d.ts +4 -0
  281. package/dist/domain/core/emission/state-emission.js +1 -0
  282. package/dist/domain/core/emission/state-update-emission.d.ts +14 -0
  283. package/dist/domain/core/emission/state-update-emission.js +1 -0
  284. package/dist/domain/core/emission/state-validation-result.d.ts +18 -0
  285. package/dist/domain/core/emission/state-validation-result.js +1 -0
  286. package/dist/domain/core/emission/transformation-log.d.ts +2 -0
  287. package/dist/domain/core/emission/transformation-log.js +1 -0
  288. package/dist/domain/core/emission/transformer-log-entry.d.ts +6 -0
  289. package/dist/domain/core/emission/transformer-log-entry.js +1 -0
  290. package/dist/domain/core/emission/transformer-log.d.ts +11 -0
  291. package/dist/domain/core/emission/transformer-log.js +1 -0
  292. package/dist/domain/core/emission/transformer-phase.d.ts +1 -0
  293. package/dist/domain/core/emission/transformer-phase.js +1 -0
  294. package/dist/domain/core/expression/aliased-expressions.d.ts +10 -0
  295. package/dist/domain/core/expression/aliased-expressions.js +1 -0
  296. package/dist/domain/{expressions → core/expression}/constant-expressions.d.ts +3 -4
  297. package/dist/domain/core/expression/constant-expressions.js +1 -0
  298. package/dist/domain/core/expression/custom-expression.d.ts +25 -0
  299. package/dist/domain/core/expression/custom-expression.js +1 -0
  300. package/dist/domain/core/expression/expression.d.ts +46 -0
  301. package/dist/domain/core/expression/expression.js +1 -0
  302. package/dist/domain/core/expression/index.d.ts +4 -0
  303. package/dist/domain/core/expression/index.js +1 -0
  304. package/dist/domain/core/index.d.ts +13 -17
  305. package/dist/domain/core/index.js +1 -1
  306. package/dist/domain/{invariants → core/invariant}/builtin-invariant.d.ts +2 -2
  307. package/dist/domain/core/invariant/custom-invariants.d.ts +13 -0
  308. package/dist/domain/core/invariant/custom-invariants.js +1 -0
  309. package/dist/domain/core/invariant/index.d.ts +5 -0
  310. package/dist/domain/core/invariant/index.js +1 -0
  311. package/dist/domain/core/invariant/invariants.d.ts +10 -0
  312. package/dist/domain/core/invariant/invariants.js +1 -0
  313. package/dist/domain/core/invariant/violation-component.js +1 -0
  314. package/dist/domain/{invariants → core/invariant}/violation.d.ts +2 -2
  315. package/dist/domain/core/{component.d.ts → model/component.d.ts} +1 -1
  316. package/dist/domain/core/model/index.d.ts +6 -0
  317. package/dist/domain/core/model/index.js +1 -0
  318. package/dist/domain/core/{reflection.d.ts → model/reflection.d.ts} +1 -1
  319. package/dist/domain/core/model/reflection.js +1 -0
  320. package/dist/domain/core/recipe/index.d.ts +1 -0
  321. package/dist/domain/core/recipe/index.js +1 -0
  322. package/dist/domain/core/recipe/recipes.d.ts +23 -0
  323. package/dist/domain/core/recipe/recipes.js +1 -0
  324. package/dist/domain/core/relation/all-of-type-relation.d.ts +19 -0
  325. package/dist/domain/core/relation/all-of-type-relation.js +1 -0
  326. package/dist/domain/{relations → core/relation}/component-factories.d.ts +1 -2
  327. package/dist/domain/core/relation/component-factories.js +1 -0
  328. package/dist/domain/{relations → core/relation}/composed-of.d.ts +1 -1
  329. package/dist/domain/core/relation/composed-of.js +1 -0
  330. package/dist/domain/core/relation/direct-relation.d.ts +17 -0
  331. package/dist/domain/core/relation/index.d.ts +8 -0
  332. package/dist/domain/core/relation/index.js +1 -0
  333. package/dist/domain/core/relation/indirect-relation.d.ts +25 -0
  334. package/dist/domain/core/relation/indirect-relation.js +1 -0
  335. package/dist/domain/{relations → core/relation}/reference-component.d.ts +4 -5
  336. package/dist/domain/core/relation/reference-component.js +1 -0
  337. package/dist/domain/{relations → core/relation}/reference-field.d.ts +1 -1
  338. package/dist/domain/core/relation/reference-field.js +1 -0
  339. package/dist/domain/core/relation/relation-factory.d.ts +22 -0
  340. package/dist/domain/core/relation/relation-factory.js +1 -0
  341. package/dist/domain/core/schema/enhanced-json-schema.js +1 -0
  342. package/dist/domain/core/schema/extended-schema-validator.js +1 -0
  343. package/dist/domain/core/schema/index.d.ts +3 -0
  344. package/dist/domain/core/schema/index.js +1 -0
  345. package/dist/domain/core/schema/schema-validator.js +1 -0
  346. package/dist/domain/core/state/id-sequence.d.ts +15 -0
  347. package/dist/domain/core/state/id-sequence.js +1 -0
  348. package/dist/domain/core/state/index.d.ts +3 -0
  349. package/dist/domain/core/state/index.js +1 -0
  350. package/dist/domain/core/{migrations.d.ts → state/migrations.d.ts} +15 -47
  351. package/dist/domain/core/state/migrations.js +1 -0
  352. package/dist/domain/core/{state.d.ts → state/state.d.ts} +2 -3
  353. package/dist/domain/domain-builder.d.ts +11 -11
  354. package/dist/domain/domain-builder.js +1 -1
  355. package/dist/domain/domain-context/action-system/action-system.d.ts +2 -4
  356. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  357. package/dist/domain/domain-context/action-system/index.d.ts +1 -0
  358. package/dist/domain/domain-context/action-system/index.js +1 -0
  359. package/dist/domain/domain-context/analytics-system/index.d.ts +2 -0
  360. package/dist/domain/domain-context/analytics-system/index.js +1 -0
  361. package/dist/domain/domain-context/create-transformer.d.ts +2 -2
  362. package/dist/domain/domain-context/dimension-system/dimension-state.js +1 -1
  363. package/dist/domain/domain-context/dimension-system/dimension-system.d.ts +3 -4
  364. package/dist/domain/domain-context/dimension-system/dimension-system.js +1 -1
  365. package/dist/domain/domain-context/dimension-system/index.d.ts +1 -0
  366. package/dist/domain/domain-context/dimension-system/index.js +1 -0
  367. package/dist/domain/domain-context/domain-context-systems.d.ts +8 -10
  368. package/dist/domain/domain-context/index.d.ts +8 -18
  369. package/dist/domain/domain-context/index.js +1 -1
  370. package/dist/domain/domain-context/navigation-system/index.d.ts +3 -0
  371. package/dist/domain/domain-context/navigation-system/index.js +1 -0
  372. package/dist/domain/domain-context/navigation-system/navigation-system.d.ts +5 -8
  373. package/dist/domain/domain-context/navigation-system/navigation-system.js +1 -1
  374. package/dist/domain/domain-context/navigation-system/navigation-updates.d.ts +1 -12
  375. package/dist/domain/domain-context/navigation-system/navigation-updates.js +1 -1
  376. package/dist/domain/domain-context/navigation-system/selection-transformers.d.ts +2 -2
  377. package/dist/domain/domain-context/navigation-system/selection-transformers.js +1 -1
  378. package/dist/domain/domain-context/recipe-system/index.d.ts +1 -0
  379. package/dist/domain/domain-context/recipe-system/index.js +1 -0
  380. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.d.ts +2 -4
  381. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.js +1 -1
  382. package/dist/domain/domain-context/relation-transformers/cascade-deletes.d.ts +3 -3
  383. package/dist/domain/domain-context/relation-transformers/cascade-deletes.js +1 -1
  384. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.d.ts +3 -3
  385. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.js +1 -1
  386. package/dist/domain/domain-context/relation-transformers/create-entity-refs.d.ts +3 -3
  387. package/dist/domain/domain-context/relation-transformers/create-entity-refs.js +2 -2
  388. package/dist/domain/domain-context/relation-transformers/index.d.ts +4 -0
  389. package/dist/domain/domain-context/relation-transformers/index.js +1 -0
  390. package/dist/domain/domain-context/relation-transformers/replace-refs.d.ts +3 -3
  391. package/dist/domain/domain-context/relation-transformers/replace-refs.js +1 -1
  392. package/dist/domain/domain-context/store-system/apply-updates.d.ts +1 -3
  393. package/dist/domain/domain-context/store-system/apply-updates.js +1 -1
  394. package/dist/domain/domain-context/store-system/index.d.ts +4 -0
  395. package/dist/domain/domain-context/store-system/index.js +1 -0
  396. package/dist/domain/domain-context/store-system/next-domain-entity-id.d.ts +1 -13
  397. package/dist/domain/domain-context/store-system/next-domain-entity-id.js +1 -1
  398. package/dist/domain/domain-context/store-system/reconcile-projected-entities.d.ts +1 -2
  399. package/dist/domain/domain-context/store-system/reconcile-projected-entities.js +1 -1
  400. package/dist/domain/domain-context/store-system/store-system.d.ts +2 -39
  401. package/dist/domain/domain-context/store-system/store-system.js +2 -2
  402. package/dist/domain/domain-context/store-system/system-state.d.ts +2 -4
  403. package/dist/domain/domain-context/store-system/system-state.js +1 -1
  404. package/dist/domain/domain-context/transformers/actions-builder.d.ts +1 -2
  405. package/dist/domain/domain-context/transformers/actions-builder.js +1 -1
  406. package/dist/domain/domain-context/transformers/auto-snap-transformer.d.ts +6 -10
  407. package/dist/domain/domain-context/transformers/auto-snap-transformer.js +1 -1
  408. package/dist/domain/domain-context/transformers/chain-builder.d.ts +3 -3
  409. package/dist/domain/domain-context/transformers/context.d.ts +2 -7
  410. package/dist/domain/domain-context/transformers/context.js +1 -1
  411. package/dist/domain/domain-context/transformers/entity-builder.d.ts +1 -5
  412. package/dist/domain/domain-context/transformers/entity-builder.js +1 -1
  413. package/dist/domain/domain-context/transformers/index.d.ts +1 -1
  414. package/dist/domain/domain-context/transformers/index.js +1 -1
  415. package/dist/domain/domain-context/transformers/then-builder.d.ts +1 -2
  416. package/dist/domain/domain-context/transformers/then-builder.js +1 -1
  417. package/dist/domain/domain-context/transformers/when-builder.d.ts +3 -9
  418. package/dist/domain/domain-context/transformers/when-builder.js +1 -1
  419. package/dist/domain/domain-context/undo-system.d.ts +2 -3
  420. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +11 -0
  421. package/dist/domain/domain-runtime/domain-context/action-context.js +1 -0
  422. package/dist/domain/domain-runtime/domain-context/component-reader.d.ts +1 -4
  423. package/dist/domain/domain-runtime/domain-context/component-reader.js +1 -1
  424. package/dist/domain/domain-runtime/domain-context/domain-context.js +1 -1
  425. package/dist/domain/domain-runtime/domain-context/expression-context.d.ts +8 -0
  426. package/dist/domain/domain-runtime/domain-context/expression-context.js +1 -0
  427. package/dist/domain/domain-runtime/domain-context/index.d.ts +3 -0
  428. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.d.ts +18 -0
  429. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.js +1 -0
  430. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +19 -25
  431. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  432. package/dist/domain/domain-runtime/domain-runtime.d.ts +72 -72
  433. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +24 -0
  434. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -0
  435. package/dist/domain/domain-runtime/spec/index.d.ts +5 -0
  436. package/dist/domain/domain-runtime/spec/index.js +1 -1
  437. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  438. package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.d.ts +1 -2
  439. package/dist/domain/{application → domain-runtime/spec/module-checks}/element-registration.d.ts +6 -1
  440. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -0
  441. package/dist/domain/{application → domain-runtime/spec/module-checks}/handler-registration.d.ts +5 -0
  442. package/dist/domain/domain-runtime/spec/module-checks/handler-registration.js +1 -0
  443. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +8 -0
  444. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -0
  445. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +25 -0
  446. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -0
  447. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +4 -0
  448. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -0
  449. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +4 -0
  450. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.js +1 -0
  451. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +15 -0
  452. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -0
  453. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +22 -0
  454. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -0
  455. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +6 -0
  456. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -0
  457. package/dist/domain/{actions → domain-runtime/spec}/prepare-action-implementations.d.ts +1 -1
  458. package/dist/domain/domain-runtime/spec/prepare-action-implementations.js +5 -0
  459. package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.d.ts +1 -1
  460. package/dist/domain/domain-runtime/spec/selectors.d.ts +7 -8
  461. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  462. package/dist/domain/domain-runtime/spec/types.d.ts +6 -6
  463. package/dist/domain/{system-components → extensions}/angle-indicator.d.ts +1 -1
  464. package/dist/domain/extensions/angle-indicator.js +1 -0
  465. package/dist/domain/extensions/attribute-switch.js +1 -0
  466. package/dist/domain/{system-components → extensions}/autorotate-camera-component.d.ts +1 -1
  467. package/dist/domain/extensions/autorotate-camera-component.js +1 -0
  468. package/dist/domain/{system-components → extensions}/basic-sidebar-footer.d.ts +1 -1
  469. package/dist/domain/extensions/basic-sidebar-footer.js +1 -0
  470. package/dist/domain/extensions/camera-based-hidden-entity-object.js +1 -0
  471. package/dist/domain/extensions/camera-based-hidden-entity.js +1 -0
  472. package/dist/domain/{system-components → extensions}/canvas-config.d.ts +1 -1
  473. package/dist/domain/extensions/canvas-config.js +1 -0
  474. package/dist/domain/extensions/canvas-custom-environment.js +1 -0
  475. package/dist/domain/{system-components → extensions}/canvas-padding.d.ts +1 -1
  476. package/dist/domain/extensions/canvas-padding.js +1 -0
  477. package/dist/domain/{system-components → extensions}/canvas-preset-environment.d.ts +1 -1
  478. package/dist/domain/extensions/canvas-preset-environment.js +1 -0
  479. package/dist/domain/{system-components → extensions}/child-entity-recipe-hierarchy.d.ts +2 -2
  480. package/dist/domain/extensions/child-entity-recipe-hierarchy.js +1 -0
  481. package/dist/domain/extensions/client-side-image.js +1 -0
  482. package/dist/domain/extensions/color-value.js +1 -0
  483. package/dist/domain/{system-components → extensions}/common/angle-indicator-schema.d.ts +1 -1
  484. package/dist/domain/extensions/common/angle-indicator-schema.js +1 -0
  485. package/dist/domain/{system-components → extensions}/common/dimension-indicator-schema.d.ts +1 -1
  486. package/dist/domain/extensions/common/dimension-indicator-schema.js +1 -0
  487. package/dist/domain/extensions/common/index.d.ts +4 -0
  488. package/dist/domain/extensions/common/index.js +1 -0
  489. package/dist/domain/{system-components → extensions}/custom-header.d.ts +2 -2
  490. package/dist/domain/{system-components → extensions}/custom-header.js +1 -1
  491. package/dist/domain/extensions/custom-price-footer.js +1 -0
  492. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.d.ts +2 -2
  493. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.js +1 -1
  494. package/dist/domain/{system-components → extensions}/dimension-indicator.d.ts +1 -1
  495. package/dist/domain/extensions/dimension-indicator.js +1 -0
  496. package/dist/domain/{system-components → extensions}/editable-angle-indicator.d.ts +3 -2
  497. package/dist/domain/extensions/editable-angle-indicator.js +1 -0
  498. package/dist/domain/{system-components → extensions}/editable-distance-dimension-indicator.d.ts +3 -2
  499. package/dist/domain/extensions/editable-distance-dimension-indicator.js +1 -0
  500. package/dist/domain/{system-components → extensions}/editable-offset-indicator.d.ts +3 -2
  501. package/dist/domain/extensions/editable-offset-indicator.js +1 -0
  502. package/dist/domain/{system-components → extensions}/editable-size-indicator.d.ts +3 -2
  503. package/dist/domain/extensions/editable-size-indicator.js +1 -0
  504. package/dist/domain/{system-components → extensions}/entity-header.d.ts +1 -1
  505. package/dist/domain/extensions/entity-header.js +1 -0
  506. package/dist/domain/{system-components → extensions}/exit-tool-mode-fab.d.ts +1 -1
  507. package/dist/domain/extensions/exit-tool-mode-fab.js +1 -0
  508. package/dist/domain/{system-components → extensions}/finalize-action.d.ts +1 -1
  509. package/dist/domain/extensions/finalize-action.js +1 -0
  510. package/dist/domain/extensions/finalize-component.js +1 -0
  511. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -0
  512. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -0
  513. package/dist/domain/{system-components → extensions}/fixed-header.d.ts +1 -1
  514. package/dist/domain/extensions/fixed-header.js +1 -0
  515. package/dist/domain/{system-components → extensions}/floating-header.d.ts +1 -1
  516. package/dist/domain/extensions/floating-header.js +1 -0
  517. package/dist/domain/{system-components → extensions}/hidden-header.d.ts +1 -1
  518. package/dist/domain/extensions/hidden-header.js +1 -0
  519. package/dist/domain/{system-components → extensions}/hidden-sidebar-footer.d.ts +1 -1
  520. package/dist/domain/extensions/hidden-sidebar-footer.js +1 -0
  521. package/dist/domain/{system-components → extensions}/horizontal-tabs.d.ts +1 -1
  522. package/dist/domain/extensions/horizontal-tabs.js +1 -0
  523. package/dist/domain/extensions/index.d.ts +69 -0
  524. package/dist/domain/extensions/index.js +1 -0
  525. package/dist/domain/{system-components → extensions}/list-selector-dimension-indicator.d.ts +3 -2
  526. package/dist/domain/extensions/list-selector-dimension-indicator.js +1 -0
  527. package/dist/domain/extensions/multilingual-text-value.js +1 -0
  528. package/dist/domain/extensions/navigation-steps.js +1 -0
  529. package/dist/domain/{system-components → extensions}/offset-anchors.d.ts +1 -1
  530. package/dist/domain/extensions/offset-anchors.js +1 -0
  531. package/dist/domain/{system-components → extensions}/offset-indicator.d.ts +1 -2
  532. package/dist/domain/extensions/offset-indicator.js +1 -0
  533. package/dist/domain/{system-components → extensions}/offset.d.ts +1 -1
  534. package/dist/domain/extensions/offset.js +1 -0
  535. package/dist/domain/{system-components → extensions}/other-action.d.ts +1 -1
  536. package/dist/domain/extensions/other-action.js +1 -0
  537. package/dist/domain/{system-components → extensions}/property-page.d.ts +2 -2
  538. package/dist/domain/extensions/property-page.js +1 -0
  539. package/dist/domain/{system-components → extensions}/read-sidebar-footer.d.ts +1 -1
  540. package/dist/domain/extensions/read-sidebar-footer.js +1 -0
  541. package/dist/domain/{system-components → extensions}/replace-entity-recipe-hierarchy.d.ts +2 -2
  542. package/dist/domain/extensions/replace-entity-recipe-hierarchy.js +1 -0
  543. package/dist/domain/extensions/rotatable.js +1 -0
  544. package/dist/domain/extensions/rotation-handle.js +1 -0
  545. package/dist/domain/extensions/save-template-thumbnail.js +1 -0
  546. package/dist/domain/{system-components → extensions}/scene-entity-add-fab.d.ts +1 -1
  547. package/dist/domain/extensions/scene-entity-add-fab.js +1 -0
  548. package/dist/domain/extensions/scene-entity-animation.js +1 -0
  549. package/dist/domain/extensions/scene-entity-control.js +1 -0
  550. package/dist/domain/{system-components → extensions}/scene-entity-delete-fab.d.ts +1 -1
  551. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -0
  552. package/dist/domain/extensions/scene-entity-floor-object.js +1 -0
  553. package/dist/domain/{system-components → extensions}/scene-entity-html-hotspot.d.ts +1 -1
  554. package/dist/domain/extensions/scene-entity-html-hotspot.js +1 -0
  555. package/dist/domain/{system-components → extensions}/scene-entity-navigation-hotspot.d.ts +1 -1
  556. package/dist/domain/extensions/scene-entity-navigation-hotspot.js +1 -0
  557. package/dist/domain/{system-components → extensions}/scene-entity-object-html-hotspot.d.ts +1 -1
  558. package/dist/domain/extensions/scene-entity-object-html-hotspot.js +1 -0
  559. package/dist/domain/{system-components → extensions}/scene-entity-select-hotspot.d.ts +1 -1
  560. package/dist/domain/extensions/scene-entity-select-hotspot.js +1 -0
  561. package/dist/domain/extensions/scene-entity-wall-object.js +1 -0
  562. package/dist/domain/extensions/selectable-component.js +1 -0
  563. package/dist/domain/{system-components → extensions}/sidebar-tabs.d.ts +1 -1
  564. package/dist/domain/extensions/sidebar-tabs.js +1 -0
  565. package/dist/domain/extensions/simple-summary.js +1 -0
  566. package/dist/domain/{system-components → extensions}/size.d.ts +1 -1
  567. package/dist/domain/extensions/size.js +1 -0
  568. package/dist/domain/{system-components → extensions}/sketching-draw.d.ts +1 -1
  569. package/dist/domain/extensions/sketching-draw.js +1 -0
  570. package/dist/domain/{system-components → extensions}/sketching-edit.d.ts +2 -2
  571. package/dist/domain/extensions/sketching-edit.js +1 -0
  572. package/dist/domain/extensions/summary-component.js +1 -0
  573. package/dist/domain/extensions/text-value.js +1 -0
  574. package/dist/domain/extensions/tool-controls.js +1 -0
  575. package/dist/domain/{system-components → extensions}/tool-menu-fab.d.ts +2 -2
  576. package/dist/domain/extensions/tool-menu-fab.js +1 -0
  577. package/dist/domain/{system-components → extensions}/toolbar.d.ts +2 -2
  578. package/dist/domain/{system-components → extensions}/toolbar.js +1 -1
  579. package/dist/domain/{system-components → extensions}/universal-sidebar-footer.d.ts +1 -1
  580. package/dist/domain/extensions/universal-sidebar-footer.js +1 -0
  581. package/dist/domain/extensions/view-controls.js +1 -0
  582. package/dist/domain/index.d.ts +2 -32
  583. package/dist/domain/index.js +1 -1
  584. package/dist/domain/mocks/create-mock-domain-context.d.ts +1 -1
  585. package/dist/domain/mocks/create-mock-domain-runtime-services.d.ts +1 -1
  586. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +21 -21
  587. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  588. package/dist/domain/mocks/create-mock-domain.d.ts +1 -1
  589. package/dist/domain/mocks/create-mock-state.d.ts +2 -2
  590. package/dist/domain/projections/blender-projections/blender-projections.d.ts +2 -3
  591. package/dist/domain/projections/blender-projections/blender-projections.js +1 -1
  592. package/dist/domain/projections/blender-projections/camera.d.ts +2 -2
  593. package/dist/domain/projections/collision-projections.d.ts +1 -1
  594. package/dist/domain/projections/composition-projections.d.ts +1 -1
  595. package/dist/domain/projections/composition-projections.js +1 -1
  596. package/dist/domain/projections/constraint-projections.d.ts +1 -1
  597. package/dist/domain/projections/index.d.ts +1 -1
  598. package/dist/domain/projections/position-projections.d.ts +1 -1
  599. package/dist/domain/projections/projected-entities-projections.d.ts +2 -3
  600. package/dist/domain/projections/snap-matching.d.ts +1 -2
  601. package/dist/domain/projections/snap-utils.d.ts +1 -2
  602. package/dist/domain/projections/snapping-projections.d.ts +1 -1
  603. package/dist/domain/projections/validation-projections.d.ts +3 -20
  604. package/dist/domain/projections/validation-projections.js +1 -1
  605. package/dist/domain/sketching/sketching-projections.d.ts +1 -1
  606. package/dist/domain/system-components/admin-sidebar.d.ts +1 -1
  607. package/dist/domain/system-components/admin-sidebar.js +1 -1
  608. package/dist/domain/system-components/angle-dimension.js +1 -1
  609. package/dist/domain/system-components/application-config.d.ts +1 -1
  610. package/dist/domain/system-components/application-config.js +1 -1
  611. package/dist/domain/system-components/attribute-selection.js +1 -1
  612. package/dist/domain/system-components/bounding-box-component.d.ts +1 -1
  613. package/dist/domain/system-components/bounding-box-component.js +1 -1
  614. package/dist/domain/system-components/bounding-sphere-component.d.ts +1 -1
  615. package/dist/domain/system-components/bounding-sphere-component.js +1 -1
  616. package/dist/domain/system-components/child-entity-recipes.d.ts +1 -1
  617. package/dist/domain/system-components/child-entity-recipes.js +1 -1
  618. package/dist/domain/system-components/child-entity-selection.d.ts +1 -2
  619. package/dist/domain/system-components/child-entity-selection.js +1 -1
  620. package/dist/domain/system-components/collision-box-geometry.d.ts +1 -1
  621. package/dist/domain/system-components/collision-box-geometry.js +1 -1
  622. package/dist/domain/system-components/collision-geometries.d.ts +1 -1
  623. package/dist/domain/system-components/collision-geometry.d.ts +1 -1
  624. package/dist/domain/system-components/collision-geometry.js +1 -1
  625. package/dist/domain/system-components/collision-point-geometry.d.ts +1 -1
  626. package/dist/domain/system-components/collision-point-geometry.js +1 -1
  627. package/dist/domain/system-components/common/index.d.ts +0 -4
  628. package/dist/domain/system-components/common/index.js +1 -1
  629. package/dist/domain/system-components/common/recipes.d.ts +1 -2
  630. package/dist/domain/system-components/constraint.d.ts +1 -1
  631. package/dist/domain/system-components/constraint.js +1 -1
  632. package/dist/domain/system-components/create-blueprint.d.ts +1 -1
  633. package/dist/domain/system-components/custom-scene-entity.d.ts +1 -1
  634. package/dist/domain/system-components/custom-scene-entity.js +1 -1
  635. package/dist/domain/system-components/detail.js +1 -1
  636. package/dist/domain/system-components/distance-dimension-select.d.ts +1 -1
  637. package/dist/domain/system-components/distance-dimension-select.js +1 -1
  638. package/dist/domain/system-components/distance-dimension.d.ts +1 -1
  639. package/dist/domain/system-components/distance-dimension.js +1 -1
  640. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  641. package/dist/domain/system-components/drag-handle.js +1 -1
  642. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  643. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  644. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  645. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  646. package/dist/domain/system-components/generic-dimension.d.ts +1 -1
  647. package/dist/domain/system-components/generic-dimension.js +1 -1
  648. package/dist/domain/system-components/hidden-entity.js +1 -1
  649. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -2
  650. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  651. package/dist/domain/system-components/index.d.ts +0 -68
  652. package/dist/domain/system-components/index.js +1 -1
  653. package/dist/domain/system-components/material-override-property-transition.js +1 -1
  654. package/dist/domain/system-components/material-override-transformer.js +1 -1
  655. package/dist/domain/system-components/material-swatch.js +1 -1
  656. package/dist/domain/system-components/navigation-page.js +1 -1
  657. package/dist/domain/system-components/navigation-panel-list.js +1 -1
  658. package/dist/domain/system-components/phoenix-entity-elements/admin-data-table-sidebar.d.ts +1 -1
  659. package/dist/domain/system-components/phoenix-layout-elements/admin-connected-resource-page.d.ts +1 -1
  660. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-actions.d.ts +1 -1
  661. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-page.d.ts +1 -1
  662. package/dist/domain/system-components/pivot-point.d.ts +1 -1
  663. package/dist/domain/system-components/pivot-point.js +1 -1
  664. package/dist/domain/system-components/price.js +1 -1
  665. package/dist/domain/system-components/projected-entities.d.ts +1 -1
  666. package/dist/domain/system-components/projected-entities.js +1 -1
  667. package/dist/domain/system-components/replace-entity-recipes.d.ts +1 -1
  668. package/dist/domain/system-components/replace-entity-recipes.js +1 -1
  669. package/dist/domain/system-components/scene-entity-ambient-light.js +1 -1
  670. package/dist/domain/system-components/scene-entity-box-object.js +1 -1
  671. package/dist/domain/system-components/scene-entity-directional-light.js +1 -1
  672. package/dist/domain/system-components/scene-entity-local-material-override.js +1 -1
  673. package/dist/domain/system-components/scene-entity-material-override.js +1 -1
  674. package/dist/domain/system-components/scene-entity-object-clip.js +1 -1
  675. package/dist/domain/system-components/scene-entity-object-decal.js +1 -1
  676. package/dist/domain/system-components/scene-entity-object-group.js +1 -1
  677. package/dist/domain/system-components/scene-entity-object-local-material-override.js +1 -1
  678. package/dist/domain/system-components/scene-entity-object-material-override.js +1 -1
  679. package/dist/domain/system-components/scene-entity-object-properties.js +1 -1
  680. package/dist/domain/system-components/scene-entity-object-remote-material-override.js +1 -1
  681. package/dist/domain/system-components/scene-entity-object-text-decal.js +1 -1
  682. package/dist/domain/system-components/scene-entity-object-transformer.js +1 -1
  683. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.js +1 -1
  684. package/dist/domain/system-components/scene-entity-object.js +1 -1
  685. package/dist/domain/system-components/scene-entity-point-light.js +1 -1
  686. package/dist/domain/system-components/scene-entity-properties.js +1 -1
  687. package/dist/domain/system-components/scene-entity-rect-area-light.js +1 -1
  688. package/dist/domain/system-components/scene-entity-remote-material-override.js +1 -1
  689. package/dist/domain/system-components/scene-entity-remote-object.js +1 -1
  690. package/dist/domain/system-components/scene-entity-spot-light.js +1 -1
  691. package/dist/domain/system-components/scene-entity-transimissive-material-override.js +1 -1
  692. package/dist/domain/system-components/sketching-line.d.ts +1 -1
  693. package/dist/domain/system-components/sketching-line.js +1 -1
  694. package/dist/domain/system-components/sketching-rectangle.d.ts +1 -1
  695. package/dist/domain/system-components/sketching-rectangle.js +1 -1
  696. package/dist/domain/system-components/sketching.d.ts +1 -1
  697. package/dist/domain/system-components/sketching.js +1 -1
  698. package/dist/domain/system-components/snap-axis.d.ts +1 -1
  699. package/dist/domain/system-components/snap-axis.js +1 -1
  700. package/dist/domain/system-components/snap-edge.d.ts +1 -1
  701. package/dist/domain/system-components/snap-edge.js +1 -1
  702. package/dist/domain/system-components/snap-plane.d.ts +1 -1
  703. package/dist/domain/system-components/snap-plane.js +1 -1
  704. package/dist/domain/system-components/snap-point.d.ts +1 -1
  705. package/dist/domain/system-components/snap-point.js +1 -1
  706. package/dist/domain/system-components/static-orthographic-camera-component.d.ts +1 -1
  707. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  708. package/dist/domain/system-components/static-perspective-camera-component.d.ts +1 -1
  709. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  710. package/dist/domain/utils/eval-cache.d.ts +2 -3
  711. package/dist/domain/utils/map-nested-object.d.ts +1 -1
  712. package/dist/domain/utils/memo-eval.d.ts +2 -4
  713. package/dist/editor/Editor.js +1 -1
  714. package/dist/editor/domain-editors/use-implementation-files.d.ts +8 -8
  715. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  716. package/dist/editor/graphql/GraphQLPanel.js +1 -1
  717. package/dist/editor/variants/VariantAnswerFooter.d.ts +17 -0
  718. package/dist/editor/variants/VariantAnswerFooter.js +1 -0
  719. package/dist/editor/variants/VariantPreviewHandler.d.ts +6 -0
  720. package/dist/editor/variants/VariantPreviewHandler.js +1 -0
  721. package/dist/editor/variants/variant-preview-styles.d.ts +49 -0
  722. package/dist/editor/variants/variant-preview-styles.js +1 -0
  723. package/dist/i18n/locales/cs/messages.js +1 -1
  724. package/dist/i18n/locales/da/messages.js +1 -1
  725. package/dist/i18n/locales/de/messages.js +1 -1
  726. package/dist/i18n/locales/de-AT/messages.js +1 -1
  727. package/dist/i18n/locales/en/messages.js +1 -1
  728. package/dist/i18n/locales/en-AU/messages.js +1 -1
  729. package/dist/i18n/locales/en-GB/messages.js +1 -1
  730. package/dist/i18n/locales/es/messages.js +1 -1
  731. package/dist/i18n/locales/fr/messages.js +1 -1
  732. package/dist/i18n/locales/hu/messages.js +1 -1
  733. package/dist/i18n/locales/it/messages.js +1 -1
  734. package/dist/i18n/locales/nl/messages.js +1 -1
  735. package/dist/i18n/locales/pl/messages.js +1 -1
  736. package/dist/i18n/locales/pt/messages.js +1 -1
  737. package/dist/i18n/locales/ro/messages.js +1 -1
  738. package/dist/i18n/locales/sk/messages.js +1 -1
  739. package/dist/i18n/locales/tr/messages.js +1 -1
  740. package/dist/legacy/domain-cli/gen/configurator-builder.js +30 -16
  741. package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -3
  742. package/dist/legacy/domain-cli/gen/defaults.js +1 -7
  743. package/dist/legacy/domain-cli/gen/implementation.js +7 -11
  744. package/dist/legacy/domain-cli/gen/invariants.js +7 -6
  745. package/dist/legacy/domain-cli/gen/relations.js +1 -1
  746. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  747. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  748. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  749. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  750. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  751. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +1 -0
  752. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +17 -15
  753. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.d.ts +1 -1
  754. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.js +4 -0
  755. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -19
  756. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +15 -16
  757. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +22 -23
  758. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +15 -16
  759. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.d.ts +7 -2
  760. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.js +8 -12
  761. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.d.ts +1 -1
  762. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.js +1 -1
  763. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/webhook-builders.js +7 -7
  764. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  765. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +4 -3
  766. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  767. package/dist/phoenix/cli.js +1 -1
  768. package/dist/phoenix/commands/deploy.js +2 -2
  769. package/dist/phoenix/commands/dev.js +5 -5
  770. package/dist/phoenix/commands/index.d.ts +1 -0
  771. package/dist/phoenix/commands/index.js +1 -1
  772. package/dist/phoenix/commands/init.d.ts +4 -4
  773. package/dist/phoenix/commands/init.js +1 -1
  774. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  775. package/dist/phoenix/commands/prepare-local-environment-command.js +1 -1
  776. package/dist/phoenix/commands/prettier.js +1 -1
  777. package/dist/phoenix/commands/story-dev.js +2 -2
  778. package/dist/phoenix/commands/variants.d.ts +35 -0
  779. package/dist/phoenix/commands/variants.js +1 -0
  780. package/dist/phoenix/editor-server/commands-router.d.ts +68 -1
  781. package/dist/phoenix/editor-server/commands-router.js +1 -1
  782. package/dist/phoenix/editor-server/editor-router.d.ts +65 -0
  783. package/dist/phoenix/editor-server/editor-server.d.ts +3 -3
  784. package/dist/phoenix/editor-server/editor-server.js +1 -1
  785. package/dist/phoenix/editor-server/protocol.d.ts +1 -0
  786. package/dist/phoenix/editor-server/spec-router.js +1 -1
  787. package/dist/phoenix/editor-server/trpc.d.ts +3 -0
  788. package/dist/phoenix/scripts/build-admin.js +1 -1
  789. package/dist/phoenix/services/application-spec-project-watcher.d.ts +13 -2
  790. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  791. package/dist/phoenix/services/index.d.ts +4 -0
  792. package/dist/phoenix/services/index.js +1 -1
  793. package/dist/phoenix/services/phoenix-application.d.ts +21 -0
  794. package/dist/phoenix/services/phoenix-application.js +1 -0
  795. package/dist/phoenix/services/phoenix-store.d.ts +48 -0
  796. package/dist/phoenix/services/phoenix-store.js +1 -0
  797. package/dist/phoenix/services/phx-variant-previews-plugin.d.ts +9 -0
  798. package/dist/phoenix/services/phx-variant-previews-plugin.js +1 -0
  799. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  800. package/dist/phoenix/services/variant-file-session.d.ts +36 -0
  801. package/dist/phoenix/services/variant-file-session.js +1 -0
  802. package/dist/phoenix/services/variant-preview-service.d.ts +80 -0
  803. package/dist/phoenix/services/variant-preview-service.js +1 -0
  804. package/dist/phoenix/services/vite-config.js +1 -1
  805. package/dist/phoenix/utils/git/index.d.ts +1 -0
  806. package/dist/phoenix/utils/git/index.js +1 -0
  807. package/dist/phoenix/utils/git/is-inside-git-repository.d.ts +6 -0
  808. package/dist/phoenix/utils/git/is-inside-git-repository.js +1 -0
  809. package/dist/phoenix/utils/index.d.ts +1 -0
  810. package/dist/phoenix/utils/index.js +1 -1
  811. package/dist/react-sdk/application-runtime/common-services/analytics/analytics-service.d.ts +2 -2
  812. package/dist/react-sdk/application-runtime/common-services/analytics/domain-controls-analytics.d.ts +21 -21
  813. package/dist/react-sdk/application-runtime/hooks/data/use-published-data.d.ts +1 -1
  814. package/dist/react-sdk/application-runtime/hooks/use-domain-application-props.d.ts +5 -2
  815. package/dist/react-sdk/application-runtime/hooks/use-spec.d.ts +1 -1
  816. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.d.ts +1 -1
  817. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  818. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +40 -40
  819. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +9 -9
  820. package/dist/react-sdk/domain-context/index.d.ts +1 -1
  821. package/dist/react-sdk/domain-context/index.js +1 -1
  822. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +6 -0
  823. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  824. package/dist/ui-sdk/common/use-viewport-size.d.ts +4 -1
  825. package/dist/ui-sdk/common/use-viewport-size.js +1 -1
  826. package/dist/ui-sdk/components/mobile-controls/index.d.ts +1 -1
  827. package/dist/ui-sdk/theme/types.d.ts +1 -1
  828. package/dist/webhook/builders/common.d.ts +8 -0
  829. package/dist/webhook/builders/webhook-builder.d.ts +1 -1
  830. package/dist/webhook/builders/webhook-builder.js +1 -1
  831. package/package.json +4 -4
  832. package/dist/application-spec/generate-application/code/templates/env-ci.d.ts +0 -1
  833. package/dist/application-spec/generate-application/code/templates/env-ci.js +0 -25
  834. package/dist/application-spec/generate-application/code/templates/env-example.d.ts +0 -1
  835. package/dist/application-spec/generate-application/code/templates/env-example.js +0 -90
  836. package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
  837. package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
  838. package/dist/application-spec/generate-application/code/templates/private-assets-readme.d.ts +0 -1
  839. package/dist/application-spec/generate-application/code/templates/private-assets-readme.js +0 -24
  840. package/dist/application-spec/generate-application/code/templates/public-assets-readme.d.ts +0 -1
  841. package/dist/application-spec/generate-application/code/templates/public-assets-readme.js +0 -24
  842. package/dist/application-spec/generate-application/code/templates/readme.d.ts +0 -1
  843. package/dist/application-spec/generate-application/code/templates/readme.js +0 -23
  844. package/dist/application-spec/generate-application/code/templates/skills/agents-md.d.ts +0 -1
  845. package/dist/application-spec/generate-application/code/templates/skills/agents-md.js +0 -2
  846. package/dist/configurator/assistant/index.d.ts +0 -1
  847. package/dist/configurator/assistant/index.js +0 -1
  848. package/dist/configurator/assistant/use-assistant-chat.d.ts +0 -30
  849. package/dist/configurator/assistant/use-assistant-chat.js +0 -1
  850. package/dist/configurator/ui/assistant/AssistantPanelProvider.d.ts +0 -42
  851. package/dist/configurator/ui/assistant/AssistantPanelProvider.js +0 -1
  852. package/dist/domain/actions/action-factory.d.ts +0 -10
  853. package/dist/domain/actions/prepare-action-implementations.js +0 -5
  854. package/dist/domain/application/element-registration.js +0 -1
  855. package/dist/domain/application/handler-registration.js +0 -1
  856. package/dist/domain/application/resolve-imported-transformers.d.ts +0 -13
  857. package/dist/domain/application/resolve-imported-transformers.js +0 -1
  858. package/dist/domain/application/resource-builder.d.ts +0 -13
  859. package/dist/domain/application/resource-builder.js +0 -1
  860. package/dist/domain/components/debug-state-component.js +0 -1
  861. package/dist/domain/components/domain-component-optic.d.ts +0 -76
  862. package/dist/domain/components/domain-component-optic.js +0 -16
  863. package/dist/domain/components/drag-state-component.js +0 -1
  864. package/dist/domain/components/export-state-component.js +0 -1
  865. package/dist/domain/components/fullscreen-state-component.js +0 -1
  866. package/dist/domain/components/group-components-by-entity-id-and-name.js +0 -1
  867. package/dist/domain/components/hover-state-component.js +0 -1
  868. package/dist/domain/components/index.d.ts +0 -2
  869. package/dist/domain/components/index.js +0 -1
  870. package/dist/domain/components/navigation-state-component.js +0 -1
  871. package/dist/domain/components/selection-state-component.js +0 -1
  872. package/dist/domain/components/system-component-builder.js +0 -1
  873. package/dist/domain/components/system-virtual-entity.js +0 -1
  874. package/dist/domain/components/tool-state-component.js +0 -1
  875. package/dist/domain/components/view-state-component.js +0 -1
  876. package/dist/domain/components/viewport-state-component.js +0 -1
  877. package/dist/domain/core/expression.d.ts +0 -50
  878. package/dist/domain/core/json-schema.js +0 -1
  879. package/dist/domain/core/migrations.js +0 -1
  880. package/dist/domain/core/reflection.js +0 -1
  881. package/dist/domain/domain-context/recipe-system/recipes.d.ts +0 -57
  882. package/dist/domain/domain-context/recipe-system/recipes.js +0 -1
  883. package/dist/domain/expressions/constant-expressions.js +0 -1
  884. package/dist/domain/expressions/custom-expression.d.ts +0 -13
  885. package/dist/domain/expressions/custom-expression.js +0 -1
  886. package/dist/domain/expressions/index.d.ts +0 -1
  887. package/dist/domain/expressions/index.js +0 -1
  888. package/dist/domain/invariants/custom-invariants.d.ts +0 -22
  889. package/dist/domain/invariants/custom-invariants.js +0 -1
  890. package/dist/domain/invariants/invariants.d.ts +0 -68
  891. package/dist/domain/invariants/invariants.js +0 -1
  892. package/dist/domain/invariants/violation-component.js +0 -1
  893. package/dist/domain/relations/all-of-type-relation.d.ts +0 -33
  894. package/dist/domain/relations/all-of-type-relation.js +0 -1
  895. package/dist/domain/relations/component-factories.js +0 -1
  896. package/dist/domain/relations/composed-of.js +0 -1
  897. package/dist/domain/relations/direct-relation.d.ts +0 -29
  898. package/dist/domain/relations/indirect-relation.d.ts +0 -81
  899. package/dist/domain/relations/indirect-relation.js +0 -1
  900. package/dist/domain/relations/reference-component.js +0 -1
  901. package/dist/domain/relations/relation-factory.d.ts +0 -19
  902. package/dist/domain/relations/relation-factory.js +0 -1
  903. package/dist/domain/relations/relation-implementation.d.ts +0 -8
  904. package/dist/domain/system-components/angle-indicator.js +0 -1
  905. package/dist/domain/system-components/attribute-switch.js +0 -1
  906. package/dist/domain/system-components/autorotate-camera-component.js +0 -1
  907. package/dist/domain/system-components/basic-sidebar-footer.js +0 -1
  908. package/dist/domain/system-components/camera-based-hidden-entity-object.js +0 -1
  909. package/dist/domain/system-components/camera-based-hidden-entity.js +0 -1
  910. package/dist/domain/system-components/canvas-config.js +0 -1
  911. package/dist/domain/system-components/canvas-custom-environment.js +0 -1
  912. package/dist/domain/system-components/canvas-padding.js +0 -1
  913. package/dist/domain/system-components/canvas-preset-environment.js +0 -1
  914. package/dist/domain/system-components/child-entity-recipe-hierarchy.js +0 -1
  915. package/dist/domain/system-components/client-side-image.js +0 -1
  916. package/dist/domain/system-components/color-value.js +0 -1
  917. package/dist/domain/system-components/common/angle-indicator-schema.js +0 -1
  918. package/dist/domain/system-components/common/dimension-indicator-schema.js +0 -1
  919. package/dist/domain/system-components/custom-price-footer.js +0 -1
  920. package/dist/domain/system-components/dimension-indicator.js +0 -1
  921. package/dist/domain/system-components/editable-angle-indicator.js +0 -1
  922. package/dist/domain/system-components/editable-distance-dimension-indicator.js +0 -1
  923. package/dist/domain/system-components/editable-offset-indicator.js +0 -1
  924. package/dist/domain/system-components/editable-size-indicator.js +0 -1
  925. package/dist/domain/system-components/entity-header.js +0 -1
  926. package/dist/domain/system-components/exit-tool-mode-fab.js +0 -1
  927. package/dist/domain/system-components/finalize-action.js +0 -1
  928. package/dist/domain/system-components/finalize-component.js +0 -1
  929. package/dist/domain/system-components/fit-selection-orthographic-camera-component.js +0 -1
  930. package/dist/domain/system-components/fit-selection-perspective-camera-component.js +0 -1
  931. package/dist/domain/system-components/fixed-header.js +0 -1
  932. package/dist/domain/system-components/floating-header.js +0 -1
  933. package/dist/domain/system-components/hidden-header.js +0 -1
  934. package/dist/domain/system-components/hidden-sidebar-footer.js +0 -1
  935. package/dist/domain/system-components/horizontal-tabs.js +0 -1
  936. package/dist/domain/system-components/list-selector-dimension-indicator.js +0 -1
  937. package/dist/domain/system-components/multilingual-text-value.js +0 -1
  938. package/dist/domain/system-components/navigation-steps.js +0 -1
  939. package/dist/domain/system-components/offset-anchors.js +0 -1
  940. package/dist/domain/system-components/offset-indicator.js +0 -1
  941. package/dist/domain/system-components/offset.js +0 -1
  942. package/dist/domain/system-components/other-action.js +0 -1
  943. package/dist/domain/system-components/property-page.js +0 -1
  944. package/dist/domain/system-components/read-sidebar-footer.js +0 -1
  945. package/dist/domain/system-components/replace-entity-recipe-hierarchy.js +0 -1
  946. package/dist/domain/system-components/rotatable.js +0 -1
  947. package/dist/domain/system-components/rotation-handle.js +0 -1
  948. package/dist/domain/system-components/save-template-thumbnail.js +0 -1
  949. package/dist/domain/system-components/scene-entity-add-fab.js +0 -1
  950. package/dist/domain/system-components/scene-entity-animation.js +0 -1
  951. package/dist/domain/system-components/scene-entity-control.js +0 -1
  952. package/dist/domain/system-components/scene-entity-delete-fab.js +0 -1
  953. package/dist/domain/system-components/scene-entity-floor-object.js +0 -1
  954. package/dist/domain/system-components/scene-entity-html-hotspot.js +0 -1
  955. package/dist/domain/system-components/scene-entity-navigation-hotspot.js +0 -1
  956. package/dist/domain/system-components/scene-entity-object-html-hotspot.js +0 -1
  957. package/dist/domain/system-components/scene-entity-select-hotspot.js +0 -1
  958. package/dist/domain/system-components/scene-entity-wall-object.js +0 -1
  959. package/dist/domain/system-components/selectable-component.js +0 -1
  960. package/dist/domain/system-components/sidebar-tabs.js +0 -1
  961. package/dist/domain/system-components/simple-summary.js +0 -1
  962. package/dist/domain/system-components/size.js +0 -1
  963. package/dist/domain/system-components/sketching-draw.js +0 -1
  964. package/dist/domain/system-components/sketching-edit.js +0 -1
  965. package/dist/domain/system-components/summary-component.js +0 -1
  966. package/dist/domain/system-components/text-value.js +0 -1
  967. package/dist/domain/system-components/tool-controls.js +0 -1
  968. package/dist/domain/system-components/tool-menu-fab.js +0 -1
  969. package/dist/domain/system-components/universal-sidebar-footer.js +0 -1
  970. package/dist/domain/system-components/view-controls.js +0 -1
  971. package/dist/phoenix/application-spec/generate-assistant-prompt.d.ts +0 -12
  972. package/dist/phoenix/application-spec/generate-assistant-prompt.js +0 -1
  973. /package/dist/domain/{components/component-reader-types.js → application/assistant/assistant-manifest.js} +0 -0
  974. /package/dist/domain/{core/action.js → application/assistant/assistant-resolved-manifest.js} +0 -0
  975. /package/dist/domain/{actions → core/action}/action-factory.js +0 -0
  976. /package/dist/domain/core/{enhanced-json-schema.js → action/action.js} +0 -0
  977. /package/dist/domain/core/{expression.js → component/component-reader-types.js} +0 -0
  978. /package/dist/domain/{components → core/component}/legacy-filter.js +0 -0
  979. /package/dist/domain/{components → core/component}/system-component-filter.js +0 -0
  980. /package/dist/domain/{components → core/component}/system-virtual-entity.d.ts +0 -0
  981. /package/dist/domain/{components → core/component}/updates.js +0 -0
  982. /package/dist/domain/core/{schema-validator.js → data-schema/data-cell-value.js} +0 -0
  983. /package/dist/domain/{relations/reference-field.js → core/data-schema/data-schema-array-field.js} +0 -0
  984. /package/dist/domain/{relations/relation-implementation.js → core/data-schema/data-schema-field-object.js} +0 -0
  985. /package/dist/domain/{invariants → core/invariant}/builtin-invariant.js +0 -0
  986. /package/dist/domain/{invariants → core/invariant}/violation-component.d.ts +0 -0
  987. /package/dist/domain/{invariants → core/invariant}/violation.js +0 -0
  988. /package/dist/domain/core/{alias.d.ts → model/alias.d.ts} +0 -0
  989. /package/dist/domain/core/{alias.js → model/alias.js} +0 -0
  990. /package/dist/domain/core/{common-definitions.d.ts → model/common-definitions.d.ts} +0 -0
  991. /package/dist/domain/core/{common-definitions.js → model/common-definitions.js} +0 -0
  992. /package/dist/domain/core/{component.js → model/component.js} +0 -0
  993. /package/dist/domain/core/{model.d.ts → model/model.d.ts} +0 -0
  994. /package/dist/domain/core/{model.js → model/model.js} +0 -0
  995. /package/dist/domain/core/{preset.d.ts → model/preset.d.ts} +0 -0
  996. /package/dist/domain/core/{preset.js → model/preset.js} +0 -0
  997. /package/dist/domain/{relations → core/relation}/direct-relation.js +0 -0
  998. /package/dist/domain/core/{schema-validator-ajv.d.ts → schema/create-ajv-schema-validator.d.ts} +0 -0
  999. /package/dist/domain/core/{schema-validator-ajv.js → schema/create-ajv-schema-validator.js} +0 -0
  1000. /package/dist/domain/core/{schema-validator-csp.d.ts → schema/create-csp-schema-validator.d.ts} +0 -0
  1001. /package/dist/domain/core/{schema-validator-csp.js → schema/create-csp-schema-validator.js} +0 -0
  1002. /package/dist/domain/core/{enhanced-json-schema.d.ts → schema/enhanced-json-schema.d.ts} +0 -0
  1003. /package/dist/domain/core/{json-schema.d.ts → schema/extended-schema-validator.d.ts} +0 -0
  1004. /package/dist/domain/core/{schema-validator.d.ts → schema/schema-validator.d.ts} +0 -0
  1005. /package/dist/domain/core/{state.js → state/state.js} +0 -0
  1006. /package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.js +0 -0
  1007. /package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.js +0 -0
  1008. /package/dist/domain/{system-components → extensions}/attribute-switch.d.ts +0 -0
  1009. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity-object.d.ts +0 -0
  1010. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity.d.ts +0 -0
  1011. /package/dist/domain/{system-components → extensions}/canvas-custom-environment.d.ts +0 -0
  1012. /package/dist/domain/{system-components → extensions}/client-side-image.d.ts +0 -0
  1013. /package/dist/domain/{system-components → extensions}/color-value.d.ts +0 -0
  1014. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.d.ts +0 -0
  1015. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.js +0 -0
  1016. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.d.ts +0 -0
  1017. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.js +0 -0
  1018. /package/dist/domain/{system-components → extensions}/custom-price-footer.d.ts +0 -0
  1019. /package/dist/domain/{system-components → extensions}/finalize-component.d.ts +0 -0
  1020. /package/dist/domain/{system-components → extensions}/fit-selection-orthographic-camera-component.d.ts +0 -0
  1021. /package/dist/domain/{system-components → extensions}/fit-selection-perspective-camera-component.d.ts +0 -0
  1022. /package/dist/domain/{system-components → extensions}/multilingual-text-value.d.ts +0 -0
  1023. /package/dist/domain/{system-components → extensions}/navigation-steps.d.ts +0 -0
  1024. /package/dist/domain/{system-components → extensions}/rotatable.d.ts +0 -0
  1025. /package/dist/domain/{system-components → extensions}/rotation-handle.d.ts +0 -0
  1026. /package/dist/domain/{system-components → extensions}/save-template-thumbnail.d.ts +0 -0
  1027. /package/dist/domain/{system-components → extensions}/scene-entity-animation.d.ts +0 -0
  1028. /package/dist/domain/{system-components → extensions}/scene-entity-control.d.ts +0 -0
  1029. /package/dist/domain/{system-components → extensions}/scene-entity-floor-object.d.ts +0 -0
  1030. /package/dist/domain/{system-components → extensions}/scene-entity-wall-object.d.ts +0 -0
  1031. /package/dist/domain/{system-components → extensions}/selectable-component.d.ts +0 -0
  1032. /package/dist/domain/{system-components → extensions}/simple-summary.d.ts +0 -0
  1033. /package/dist/domain/{system-components → extensions}/summary-component.d.ts +0 -0
  1034. /package/dist/domain/{system-components → extensions}/text-value.d.ts +0 -0
  1035. /package/dist/domain/{system-components → extensions}/tool-controls.d.ts +0 -0
  1036. /package/dist/domain/{system-components → extensions}/view-controls.d.ts +0 -0
@@ -11,7 +11,6 @@ import { ThemeRuntime } from '../sections/theme-runtime.js';
11
11
  import { TransformersRuntime } from '../sections/transformers-runtime.js';
12
12
  import { ConfiguratorModelRuntime } from './configurator-model-runtime.js';
13
13
  import { ConfiguratorStatesRuntime } from './states-runtime.js';
14
- type AnyImportedTransformer = ImportedTransformer<any, any, any, any, any, any, any>;
15
14
  export type ConfiguratorRuntime = Branded<'ConfiguratorRuntime', {
16
15
  readonly modelRuntime: ConfiguratorModelRuntime;
17
16
  readonly componentOptics: ComponentOptics;
@@ -30,5 +29,4 @@ export type ConfiguratorRuntimeResult = {
30
29
  readonly ok: false;
31
30
  readonly missingExpressions: readonly MissingExpression[];
32
31
  };
33
- export declare const ConfiguratorRuntime: (spec: ApplicationSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, importedTransformers: readonly AnyImportedTransformer[], invariantImplementations?: InvariantImplementations) => ConfiguratorRuntimeResult;
34
- export {};
32
+ export declare const ConfiguratorRuntime: (spec: ApplicationSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, importedTransformers: readonly ImportedTransformer[], invariantImplementations?: InvariantImplementations) => ConfiguratorRuntimeResult;
@@ -1,9 +1,10 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
+ import type { AssistantResolvedManifest } from '#package/domain';
2
3
  import type { RuntimeReferenceStore } from '../../../caching/index.js';
3
- import type { ApplicationSpec, AssistantSpec } from '../../../parse-application-files/index.js';
4
- /** Parse-time assistant manifest with change tracking, carried to the runtime spec on hot reload. */
4
+ import type { ApplicationSpec } from '../../../parse-application-files/index.js';
5
+ /** Resolved assistant manifest with change tracking, carried to the runtime spec on hot reload. */
5
6
  export type AssistantRuntime = Branded<'AssistantRuntime', {
6
- readonly assistant: AssistantSpec;
7
+ readonly assistant: AssistantResolvedManifest | null;
7
8
  readonly changed: boolean;
8
9
  }>;
9
10
  export declare const AssistantRuntime: (spec: ApplicationSpec, referenceStore: RuntimeReferenceStore) => AssistantRuntime;
@@ -1 +1 @@
1
- import s from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";export const AssistantRuntime=(a,i)=>{let n=i.createBuilder("assistant",{build:s=>s,getKey:()=>"assistant",compare:(t,a)=>s(t,a)}).build({assistant:a.configurator.assistant});return t({assistant:n.output.assistant,changed:n.changed})};
1
+ import s from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";export const AssistantRuntime=(a,i)=>{let e=i.createBuilder("assistant",{build:s=>s,getKey:()=>"assistant",compare:(t,a)=>s(t,a)}).build({assistant:a.configurator.assistant?.resolved??null});return t({assistant:e.output.assistant,changed:e.changed})};
@@ -4,7 +4,8 @@ import type { RuntimeReferenceStore } from '../../../caching/index.js';
4
4
  import type { ComponentEntry } from '../../../parse-application-files/spec/index.js';
5
5
  import type { AdminModelRuntime } from '../admin-runtime/admin-model-runtime.js';
6
6
  import type { ConfiguratorModelRuntime } from '../configurator-runtime/configurator-model-runtime.js';
7
- type AnyComponentOptic = DomainComponentOptic<any, any, any, any, any, any, SystemComponentTypeConstraint>;
7
+ /** A component optic of any project, for any component type. */
8
+ export type AnyComponentOptic = DomainComponentOptic<any, any, any, any, any, any, SystemComponentTypeConstraint>;
8
9
  /** A single built component optic with its identifying metadata. */
9
10
  export type ComponentOptic = Branded<'ComponentOptic', {
10
11
  readonly typeOrAlias: string;
@@ -1 +1 @@
1
- import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{createRelationFactory as i}from"#package/domain";import{canonicalEnhancedJsonValueKey as a}from"../../../core/index.js";import{isSdkExpressionImplementation as n}from"../../../parse-application-files/spec/index.js";import{generateMemoEvalPlanRuntime as r}from"./generate-memo-eval-plan-runtime.js";let l={},o={relation:(e,t)=>i(e.aliasMap)(t[0]),violations:(e,t)=>{let i=t[0];if("object"!=typeof i||null===i||!("entityType"in i)||"string"!=typeof i.entityType)throw Error("Cannot create the violations expression because its entityType parameter is missing. The application spec is inconsistent; rebuild it from a valid invariants declaration.");let a=i.entityType,n=Object.entries(e.invariantImplementations).flatMap(([t,i])=>{let n=e.aliasMap[t];return t===a||n?.includes(a)?i:[]});return{origin:{name:"$violations",typeOrAlias:a},evaluate:(e,t,i)=>n.flatMap(a=>a.evaluate(e,t,i)),meta:{}}}},s=e=>{let t=r(e.plan);return{origin:{name:e.name,typeOrAlias:e.entityOrAlias},evaluate:(e,i,a)=>t(a.domain.get$Entity(e,i),i,a),meta:{}}},p=e=>({...(0,o[e.kind])({aliasMap:e.aliasMap,invariantImplementations:e.invariantImplementations},e.params),origin:{name:e.name,typeOrAlias:e.entityOrAlias}});export const ExpressionRuntime=(i,r,o,m,u=l)=>{let d={};for(let[e,t]of i.latestModel.aliases)d[String(e)]=t.map(String);let f=r.createBuilder(`${m}/sdk`,{build:p,getKey:e=>`sdk::${e.entityOrAlias}::${e.name}`,compare:(t,i)=>t.kind===i.kind&&e(t.params,i.params)&&e(t.aliasMap,i.aliasMap)&&("violations"!==i.kind||t.invariantImplementations===i.invariantImplementations)}),y=r.createBuilder(`${m}/user`,{build:e=>e.impl,getKey:e=>`user::${e.entityType}::${e.name}`,compare:(e,t)=>e.impl===t.impl}),g=r.createBuilder(`${m}/value`,{build:s,getKey:e=>`value::${e.entityOrAlias}::${e.name}`,compare:(e,t)=>e.valueKey===t.valueKey}),c={},v=!1,S=new Set,b=new Set,k=new Set;for(let[e,t]of i.expressions.expressions)for(let[,i]of t){let t=d[String(e)]??[String(e)];if(n(i.implementation)){let a={entityOrAlias:String(e),name:String(i.name),kind:i.implementation.kind,params:i.implementation.params,aliasMap:d,invariantImplementations:u},n=f.build(a);for(let e of(n.changed&&(v=!0),S.add(f.getKey(a)),t))c[e]||(c[e]={}),c[e][String(i.name)]=n.output;continue}if("value"===i.implementation.kind){let n=i.implementation.value,r={entityOrAlias:String(e),name:String(i.name),valueKey:a(n),plan:i.implementation.plan},l=g.build(r);for(let e of(l.changed&&(v=!0),k.add(g.getKey(r)),t))c[e]||(c[e]={}),c[e][String(i.name)]=l.output;continue}}for(let[e,t]of Object.entries(o))for(let[i,a]of Object.entries(t)){let t={entityType:e,name:i,impl:a},n=y.build(t);n.changed&&(v=!0),b.add(y.getKey(t)),c[e]||(c[e]={}),c[e][i]=n.output}f.cleanup(S)&&(v=!0),y.cleanup(b)&&(v=!0),g.cleanup(k)&&(v=!0);let x=[];for(let[e,t]of i.expressions.entityExpressions)for(let a of t.shapeGroups){let t=i.expressions.expressions.get(a);if(t)for(let[i]of t)c[String(e)]?.[String(i)]||x.push({entityType:String(e),exprName:String(i)})}return x.length>0?{ok:!1,missing:x}:{ok:!0,runtime:t({merged:c,changed:v})}};
1
+ import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{createRelationFactory as i}from"#package/domain";import{canonicalEnhancedJsonValueKey as n}from"../../../core/index.js";import{isSdkExpressionImplementation as a}from"../../../parse-application-files/spec/index.js";import{generateMemoEvalPlanRuntime as r}from"./generate-memo-eval-plan-runtime.js";let l={},o=["0-1","1-1","0-N","1-N"],s={relation:(e,t)=>{let n=t[0];if(!("object"==typeof n&&null!==n&&"kind"in n&&"target"in n&&"string"==typeof n.target&&"cardinality"in n&&o.includes(n.cardinality)&&("allOfType"===n.kind||("direct"===n.kind||"indirect"===n.kind)&&"field"in n&&"string"==typeof n.field)))throw Error("Cannot create the relation expression because its parameter is not a relation declaration. The application spec is inconsistent; rebuild it from a valid relations declaration.");return i(e.aliasMap)(n)},violations:(e,t)=>{let i=t[0];if("object"!=typeof i||null===i||!("entityType"in i)||"string"!=typeof i.entityType)throw Error("Cannot create the violations expression because its entityType parameter is missing. The application spec is inconsistent; rebuild it from a valid invariants declaration.");let n=i.entityType,a=Object.entries(e.invariantImplementations).flatMap(([t,i])=>{let a=e.aliasMap[t];return t===n||a?.includes(n)?i:[]});return{origin:{name:"$violations",typeOrAlias:n},evaluate:(e,t,i)=>a.flatMap(n=>n.evaluate(e,t,i)),meta:{}}}},p=e=>{let t=r(e.plan);return{origin:{name:e.name,typeOrAlias:e.entityOrAlias},evaluate:(e,i,n)=>t(n.domain.get$Entity(e,i),i,n),meta:{}}},m=e=>({...(0,s[e.kind])({aliasMap:e.aliasMap,invariantImplementations:e.invariantImplementations},e.params),origin:{name:e.name,typeOrAlias:e.entityOrAlias}});export const ExpressionRuntime=(i,r,o,s,d=l)=>{let u={};for(let[e,t]of i.latestModel.aliases)u[String(e)]=t.map(String);let c=r.createBuilder(`${s}/sdk`,{build:m,getKey:e=>`sdk::${e.entityOrAlias}::${e.name}`,compare:(t,i)=>t.kind===i.kind&&e(t.params,i.params)&&e(t.aliasMap,i.aliasMap)&&("violations"!==i.kind||t.invariantImplementations===i.invariantImplementations)}),f=r.createBuilder(`${s}/user`,{build:e=>e.impl,getKey:e=>`user::${e.entityType}::${e.name}`,compare:(e,t)=>e.impl===t.impl}),y=r.createBuilder(`${s}/value`,{build:p,getKey:e=>`value::${e.entityOrAlias}::${e.name}`,compare:(e,t)=>e.valueKey===t.valueKey}),g={},v=!1,S=new Set,k=new Set,b=new Set;for(let[e,t]of i.expressions.expressions)for(let[,i]of t){let t=u[String(e)]??[String(e)];if(a(i.implementation)){let n={entityOrAlias:String(e),name:String(i.name),kind:i.implementation.kind,params:i.implementation.params,aliasMap:u,invariantImplementations:d},a=c.build(n);for(let e of(a.changed&&(v=!0),S.add(c.getKey(n)),t))g[e]||(g[e]={}),g[e][String(i.name)]=a.output;continue}if("value"===i.implementation.kind){let a=i.implementation.value,r={entityOrAlias:String(e),name:String(i.name),valueKey:n(a),plan:i.implementation.plan},l=y.build(r);for(let e of(l.changed&&(v=!0),b.add(y.getKey(r)),t))g[e]||(g[e]={}),g[e][String(i.name)]=l.output;continue}}for(let[e,t]of Object.entries(o))for(let[i,n]of Object.entries(t)){let t={entityType:e,name:i,impl:n},a=f.build(t);a.changed&&(v=!0),k.add(f.getKey(t)),g[e]||(g[e]={}),g[e][i]=a.output}c.cleanup(S)&&(v=!0),f.cleanup(k)&&(v=!0),y.cleanup(b)&&(v=!0);let h=[];for(let[e,t]of i.expressions.entityExpressions)for(let n of t.shapeGroups){let t=i.expressions.expressions.get(n);if(t)for(let[i]of t)g[String(e)]?.[String(i)]||h.push({entityType:String(e),exprName:String(i)})}return h.length>0?{ok:!1,missing:h}:{ok:!0,runtime:t({merged:g,changed:v})}};
@@ -2,7 +2,6 @@ import { Branded } from '@salsita-ai/common/utils';
2
2
  import type { ImportedTransformer } from '#package/domain';
3
3
  import type { RuntimeReferenceStore } from '../../../caching/index.js';
4
4
  import type { ApplicationSpec } from '../../../parse-application-files/index.js';
5
- type AnyImportedTransformer = ImportedTransformer<any, any, any, any, any, any, any>;
6
5
  /**
7
6
  * Runtime section for transformers. Combines two sources of truth:
8
7
  * - `importedTransformers` — factory functions from src/transformers/*.ts
@@ -13,9 +12,8 @@ type AnyImportedTransformer = ImportedTransformer<any, any, any, any, any, any,
13
12
  * decide whether to push a fresh `createTransformers` factory into the registry.
14
13
  */
15
14
  export type TransformersRuntime = Branded<'TransformersRuntime', {
16
- readonly importedTransformers: readonly AnyImportedTransformer[];
15
+ readonly importedTransformers: readonly ImportedTransformer[];
17
16
  readonly specTransformers: ApplicationSpec['configurator']['transformers'];
18
17
  readonly changed: boolean;
19
18
  }>;
20
- export declare const TransformersRuntime: (spec: ApplicationSpec, referenceStore: RuntimeReferenceStore, importedTransformers: readonly AnyImportedTransformer[]) => TransformersRuntime;
21
- export {};
19
+ export declare const TransformersRuntime: (spec: ApplicationSpec, referenceStore: RuntimeReferenceStore, importedTransformers: readonly ImportedTransformer[]) => TransformersRuntime;
@@ -1 +1 @@
1
- import{z as t}from"zod";import{ASSISTANT_AI_PROVIDERS as e,ASSISTANT_MODEL_TIERS as o,ASSISTANT_REASONING_LEVELS as i}from"@salsita-ai/contracts/assistant";export const ASSISTANT_OPTION_COMPONENT_TYPES=["materialSwatch","attributeSelection","distanceDimensionSelect"];export const ASSISTANT_HINTS=["sameForAllInstances","constantDuringSession"];let n=t.string().regex(/^(?!__)[_A-Za-z][_0-9A-Za-z]*$/,'must be a GraphQL name: letters, digits and "_", not starting with a digit or "__"'),r=e=>t.enum(e,{errorMap:()=>({message:`must be one of: ${e.join(", ")}`})}),s=t.object({description:t.string().optional(),as:n.optional()}).strict(),a=t.array(r(ASSISTANT_HINTS)),c=t.object({options:t.object({componentType:r(ASSISTANT_OPTION_COMPONENT_TYPES),instanceName:t.string().min(1,"must not be empty; name the component instance that holds the choices"),as:n.optional(),validate:t.boolean().optional(),allowDryRuns:t.boolean().optional(),hints:a.optional()}).strict().optional()}).strict(),l=t.object({as:t.string().trim().min(1,"must not be empty; remove the key to use the instance name").optional(),description:t.string().optional(),allowDryRuns:t.boolean().optional()}).strict(),p=e=>t.object({hints:a.optional(),groups:t.record(t.string(),l.nullable(),{required_error:`is required: the recipe groups of the type go under "groups", keyed by the instance name of a "${e}" component`})}).strict(),d=t.object({description:t.string().optional(),as:n.optional()}).strict(),m=`is required: declare provider (${e.join(", ")}), model (${o.join(", ")}) and reasoning (${i.join(", ")})`,g=t.object({provider:r(e),model:r(o),reasoning:r(i)},{required_error:m,invalid_type_error:m}).strict();export const rawAssistantSchema=t.object({entities:t.record(t.string(),t.record(t.string(),s.nullable())).optional(),deletable:t.record(t.string(),t.object({}).strict().nullable()).optional(),writable:t.record(t.string(),t.record(t.string(),c.nullable())).optional(),childRecipes:t.record(t.string(),p("childEntityRecipes")).optional(),replaceRecipes:t.record(t.string(),p("replaceEntityRecipes")).optional(),actions:t.record(t.string(),d.nullable()).optional(),instructions:t.string().trim().min(1,"must not be empty; remove the key when there are no instructions").optional(),ai:g}).strict();
1
+ import{z as t}from"zod";import{ASSISTANT_AI_PROVIDERS as e,ASSISTANT_MODEL_TIERS as o,ASSISTANT_REASONING_LEVELS as i}from"@salsita-ai/contracts/assistant";export const ASSISTANT_OPTION_COMPONENT_TYPES=["materialSwatch","attributeSelection","distanceDimensionSelect"];export const ASSISTANT_HINTS=["sameForAllInstances","constantDuringSession"];let n=t.string().regex(/^(?!__)[_A-Za-z][_0-9A-Za-z]*$/,'must be a GraphQL name: letters, digits and "_", not starting with a digit or "__"'),r=e=>t.enum(e,{errorMap:()=>({message:`must be one of: ${e.join(", ")}`})}),s=t.object({description:t.string().optional(),as:n.optional()}).strict(),a=t.array(r(ASSISTANT_HINTS)),l=t.object({options:t.object({componentType:r(ASSISTANT_OPTION_COMPONENT_TYPES),instanceName:t.string().min(1,"must not be empty; name the component instance that holds the choices"),as:n.optional(),validate:t.boolean().optional(),allowDryRuns:t.boolean().optional(),hints:a.optional()}).strict().optional()}).strict(),c=t.object({as:t.string().trim().min(1,"must not be empty; remove the key to use the instance name").optional(),description:t.string().optional(),allowDryRuns:t.boolean().optional()}).strict(),p=e=>t.object({hints:a.optional(),groups:t.record(t.string(),c.nullable(),{required_error:`is required: the recipe groups of the type go under "groups", keyed by the instance name of a "${e}" component`})}).strict(),m=t.object({description:t.string().optional(),as:n.optional()}).strict(),d=`is required: declare provider (${e.join(", ")}), model (${o.join(", ")}) and reasoning (${i.join(", ")})`,u="must be a positive whole number of input tokens; remove the key to use the default of the server",b=t.object({provider:r(e),model:r(o),reasoning:r(i),maxThreadSize:t.number({invalid_type_error:u}).int(u).positive(u).optional()},{required_error:d,invalid_type_error:d}).strict();export const rawAssistantSchema=t.object({entities:t.record(t.string(),t.record(t.string(),s.nullable())).optional(),deletable:t.record(t.string(),t.object({}).strict().nullable()).optional(),writable:t.record(t.string(),t.record(t.string(),l.nullable())).optional(),childRecipes:t.record(t.string(),p("childEntityRecipes")).optional(),replaceRecipes:t.record(t.string(),p("replaceEntityRecipes")).optional(),actions:t.record(t.string(),m.nullable()).optional(),instructions:t.string().trim().min(1,"must not be empty; remove the key when there are no instructions").optional(),ai:b}).strict();
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as s}from"../../../../errors/index.js";import{Components as n,UserComponents as r}from"../../components/index.js";import{Expressions as o}from"../../expressions/index.js";import{Invariants as i}from"../../invariants/index.js";import{ConfigurationSchema as a,Defaults as m,ModelVersion as l,Presets as p}from"../../model/index.js";import{Relations as d}from"../../relations/index.js";import{ResolvedVersions as f}from"../resolved-versions.js";import{AdminPages as S}from"./admin-pages.js";import{AdminStates as v}from"./states.js";export const AdminSpec=(g,x)=>{let{rawModel:u,rawPresets:I,rawExpressions:N,rawInvariants:T,rawRelations:_,rawDefaults:c,migrationFiles:j,rawComponents:A,rawAdminPages:C,dataSpec:E,phxDefinitions:M,evalExpressionParser:h,label:L,requireMigrationFiles:y}=g;if(0===Object.keys(u).length)return void x.at(L).error(t.MISSING_MODEL,s.MISSING_MODEL(L));u.latest||x.at(L).error(t.MISSING_LATEST,s.MISSING_LATEST(L));let G=new Map;for(let[e,t]of Object.entries(u)){let s=l(e,t,M,x.at(L,e));s&&G.set(s.versionKey,s)}if(x.hasErrors)return;let O=f(G,j,x,{requireMigrationFiles:y});if(!O)return;let D=O.versionedModels.find(e=>e.isLatest)?.modelVersion;if(!D)return;let V=O.latestVersion,P=a(D,V),b=d(_,D,x),w=i({rawInvariants:T,rawExpressions:N,rawRelations:_,rawComponents:A},D,x),F=p(I,D,b,x),k=S(C,{latestModel:D,parsingContext:x.at(L,"$adminPages")},E);if(!k)return;let K=r(A,{allNames:D.allNames,resolvedShapes:D.resolvedShapes,parsingContext:x}),$=m(c,D,x.at(L,"defaults")),q=o({rawExpressions:N,inferredExpressions:[...b.expressions,...w.expressions,...K.expressions]},{latestModel:D,aliases:D.aliases,entityTypes:D.entityTypes,evalExpressionParser:h,parsingContext:x}),z=n({userComponents:K.components,generatedComponents:[...b.components,...k.components],invariantComponents:w.components},{aliases:D.aliases,parsingContext:x});if(void 0!==$&&void 0!==q&&void 0!==z)return e({latestModel:D,schemaVersion:V,resolvedVersions:O,components:z,configurationSchema:P,presets:F,expressions:q,invariants:w,defaults:$,states:v(((n,r,o)=>{if(0===r.length)return n;let i=1===n.navigationStates.length&&"Default"===n.navigationStates[0]?[]:n.navigationStates,a=i.filter(e=>r.includes(e));return a.length>0&&o.error(t.ADMIN_PAGES_NAV_STATE_CONFLICT,s.ADMIN_PAGES_NAV_STATE_CONFLICT(a)),e({...n,navigationStates:[...i,...r]})})(g.rawStates,k.navigationStates,x),x),adminPages:k})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as s}from"../../../../errors/index.js";import{Components as n,UserComponents as r}from"../../components/index.js";import{Expressions as o}from"../../expressions/index.js";import{Invariants as i}from"../../invariants/index.js";import{ConfigurationSchema as a,Defaults as m,ModelVersion as l,Presets as p}from"../../model/index.js";import{Relations as d}from"../../relations/index.js";import{ResolvedVersions as f}from"../resolved-versions.js";import{AdminPages as S}from"./admin-pages.js";import{AdminStates as v}from"./states.js";export const AdminSpec=(g,x)=>{let{rawModel:u,rawPresets:I,rawExpressions:N,rawInvariants:T,rawRelations:_,rawDefaults:c,migrationFiles:j,rawComponents:A,rawAdminPages:C,dataSpec:E,phxDefinitions:M,evalExpressionParser:h,label:L,requireMigrationFiles:y}=g;if(0===Object.keys(u).length)return void x.at(L).error(t.MISSING_MODEL,s.MISSING_MODEL(L));u.latest||x.at(L).error(t.MISSING_LATEST,s.MISSING_LATEST(L));let G=new Map;for(let[e,t]of Object.entries(u)){let s=l(e,t,M,x.at(L,e));s&&G.set(s.versionKey,s)}if(x.hasErrors)return;let O=f(G,j,x,{requireMigrationFiles:y});if(!O)return;let D=O.versionedModels.find(e=>e.isLatest)?.modelVersion;if(!D)return;let V=O.latestVersion,P=a(D,V),b=d(_,D,M,x),w=i({rawInvariants:T,rawExpressions:N,rawRelations:_,rawComponents:A},D,x),F=p(I,D,b,x),k=S(C,{latestModel:D,parsingContext:x.at(L,"$adminPages")},E);if(!k)return;let K=r(A,{allNames:D.allNames,resolvedShapes:D.resolvedShapes,parsingContext:x}),$=m(c,D,x.at(L,"defaults")),q=o({rawExpressions:N,inferredExpressions:[...b.expressions,...w.expressions,...K.expressions]},{latestModel:D,aliases:D.aliases,entityTypes:D.entityTypes,evalExpressionParser:h,parsingContext:x}),z=n({userComponents:K.components,generatedComponents:[...b.components,...k.components],invariantComponents:w.components},{aliases:D.aliases,parsingContext:x});if(void 0!==$&&void 0!==q&&void 0!==z)return e({latestModel:D,schemaVersion:V,resolvedVersions:O,components:z,configurationSchema:P,presets:F,expressions:q,invariants:w,defaults:$,states:v(((n,r,o)=>{if(0===r.length)return n;let i=1===n.navigationStates.length&&"Default"===n.navigationStates[0]?[]:n.navigationStates,a=i.filter(e=>r.includes(e));return a.length>0&&o.error(t.ADMIN_PAGES_NAV_STATE_CONFLICT,s.ADMIN_PAGES_NAV_STATE_CONFLICT(a)),e({...n,navigationStates:[...i,...r]})})(g.rawStates,k.navigationStates,x),x),adminPages:k})};
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as s,diagnosticMessages as t}from"../../../../errors/index.js";import{Components as o,UserComponents as r}from"../../components/index.js";import{Expressions as i}from"../../expressions/index.js";import{Invariants as n}from"../../invariants/index.js";import{ConfigurationSchema as a,DataSchemas as m,Defaults as p,ModelVersion as l,Presets as d}from"../../model/index.js";import{Relations as f}from"../../relations/index.js";import{Actions as x,AssistantServerSettings as S,AssistantSpec as v,Theme as c,Transformers as j,Ui as u}from"../../sections/index.js";import{ResolvedVersions as g}from"../resolved-versions.js";import{ConfiguratorStates as C}from"./states.js";export const ConfiguratorSpec=(I,M)=>{let{rawModel:h,rawPresets:y,rawExpressions:E,rawActions:N,rawInvariants:T,rawRelations:L,rawDefaults:G,dataSchemas:O,dataSpec:_,appMetadata:b,rawTheme:w,rawUi:A,rawTransformers:D,rawAssistant:V,migrationFiles:k,transformerFiles:K,rawComponents:q,phxDefinitions:z,evalExpressionParser:B,label:F}=I;if(0===Object.keys(h).length)return void M.at(F).error(s.MISSING_MODEL,t.MISSING_MODEL(F));h.latest||M.at(F).error(s.MISSING_LATEST,t.MISSING_LATEST(F));let H=new Map;for(let[e,s]of Object.entries(h)){let t=l(e,s,z,M.at(F,e));t&&H.set(t.versionKey,t)}if(M.hasErrors)return;let J=g(H,k,M);if(!J)return;let P=J.versionedModels.find(e=>e.isLatest)?.modelVersion;if(!P)return;let Q=J.latestVersion,R=a(P,Q),U=f(L,P,M),W=n({rawInvariants:T,rawExpressions:E,rawRelations:L,rawComponents:q},P,M),X=d(y,P,U,M),Y=r(q,{allNames:P.allNames,resolvedShapes:P.resolvedShapes,parsingContext:M}),Z=p(G,P,M.at(F,"defaults")),$=j(D,K,M),ee=i({rawExpressions:E,inferredExpressions:[...U.expressions,...W.expressions,...Y.expressions]},{latestModel:P,aliases:P.aliases,entityTypes:P.entityTypes,evalExpressionParser:B,parsingContext:M}),es=o({userComponents:Y.components,generatedComponents:U.components,invariantComponents:W.components},{aliases:P.aliases,parsingContext:M}),et=m({merged:O,dataSpec:_,appMetadata:b,phxDefinitions:z,parsingContext:M}),eo=C(I.rawStates,M.at("states")),er=x(N,{latestModel:P,phxDefinitions:z},M.at("actions"));if(void 0!==Z&&void 0!==ee&&void 0!==er&&void 0!==es&&void 0!==et)return e({latestModel:P,schemaVersion:Q,dataSchemas:et,resolvedVersions:J,components:es,configurationSchema:R,presets:X,expressions:ee,actions:er,invariants:W,defaults:Z,states:eo,theme:c(w),ui:u(A),transformers:$,assistant:v(V,{model:P,states:eo,phxDefinitions:z,expressions:ee,components:es,actions:er},M),assistantServerSettings:S(V)})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as s,diagnosticMessages as t}from"../../../../errors/index.js";import{Components as o,UserComponents as r}from"../../components/index.js";import{Expressions as i}from"../../expressions/index.js";import{Invariants as n}from"../../invariants/index.js";import{ConfigurationSchema as a,DataSchemas as m,Defaults as p,ModelVersion as l,Presets as d}from"../../model/index.js";import{Relations as f}from"../../relations/index.js";import{Actions as x,AssistantServerSettings as S,AssistantSpec as v,Theme as c,Transformers as j,Ui as u}from"../../sections/index.js";import{ResolvedVersions as g}from"../resolved-versions.js";import{ConfiguratorStates as C}from"./states.js";export const ConfiguratorSpec=(I,M)=>{let{rawModel:h,rawPresets:y,rawExpressions:E,rawActions:N,rawInvariants:T,rawRelations:L,rawDefaults:G,dataSchemas:O,dataSpec:_,appMetadata:b,rawTheme:w,rawUi:A,rawTransformers:D,rawAssistant:V,migrationFiles:k,transformerFiles:K,rawComponents:q,phxDefinitions:z,evalExpressionParser:B,label:F}=I;if(0===Object.keys(h).length)return void M.at(F).error(s.MISSING_MODEL,t.MISSING_MODEL(F));h.latest||M.at(F).error(s.MISSING_LATEST,t.MISSING_LATEST(F));let H=new Map;for(let[e,s]of Object.entries(h)){let t=l(e,s,z,M.at(F,e));t&&H.set(t.versionKey,t)}if(M.hasErrors)return;let J=g(H,k,M);if(!J)return;let P=J.versionedModels.find(e=>e.isLatest)?.modelVersion;if(!P)return;let Q=J.latestVersion,R=a(P,Q),U=f(L,P,z,M),W=n({rawInvariants:T,rawExpressions:E,rawRelations:L,rawComponents:q},P,M),X=d(y,P,U,M),Y=r(q,{allNames:P.allNames,resolvedShapes:P.resolvedShapes,parsingContext:M}),Z=p(G,P,M.at(F,"defaults")),$=j(D,K,M),ee=i({rawExpressions:E,inferredExpressions:[...U.expressions,...W.expressions,...Y.expressions]},{latestModel:P,aliases:P.aliases,entityTypes:P.entityTypes,evalExpressionParser:B,parsingContext:M}),es=o({userComponents:Y.components,generatedComponents:U.components,invariantComponents:W.components},{aliases:P.aliases,parsingContext:M}),et=m({merged:O,dataSpec:_,appMetadata:b,phxDefinitions:z,parsingContext:M}),eo=C(I.rawStates,M.at("states")),er=x(N,{latestModel:P,phxDefinitions:z},M.at("actions"));if(void 0!==Z&&void 0!==ee&&void 0!==er&&void 0!==es&&void 0!==et)return e({latestModel:P,schemaVersion:Q,dataSchemas:et,resolvedVersions:J,components:es,configurationSchema:R,presets:X,expressions:ee,actions:er,invariants:W,defaults:Z,states:eo,theme:c(w),ui:u(A),transformers:$,assistant:v(V,{model:P,states:eo,phxDefinitions:z,expressions:ee,components:es,actions:er},M),assistantServerSettings:S(V)})};
@@ -7,8 +7,8 @@ import { ShapePropertyName } from './names/shape-property-name.js';
7
7
  /**
8
8
  * A map of shape property names to their default values inside a single entity block.
9
9
  * Raw YAML values — markers intact — keyed by a validated {@link ShapePropertyName}.
10
- * Codegen emits these as-is via `stringifyEnhancedJsonValue`; runtime consumers
11
- * (`RecipeFactoryBuilder`) consume the generated `createRecipe` factory.
10
+ * Codegen emits these as-is via `stringifyEnhancedJsonValue`; at run time
11
+ * `createRecipeFactory` makes the generated `createRecipe` factory from them.
12
12
  */
13
13
  export type DefaultEntries = Readonly<Record<ShapePropertyName, EnhancedJsonValue>>;
14
14
  /**
@@ -19,6 +19,11 @@ export type DefaultEntries = Readonly<Record<ShapePropertyName, EnhancedJsonValu
19
19
  * flattened here to concrete entity entries so downstream codegen only serialises
20
20
  * a runtime-ready per-entity map.
21
21
  *
22
+ * A source key may state part of a shape, but the flattened entry of a concrete
23
+ * entity type states every property of its shape: `createRecipeFactory` validates
24
+ * each entry as a whole entity when the generated module loads. An entity type
25
+ * with no entry has no defaults and is not checked.
26
+ *
22
27
  * Values are raw `EnhancedJsonValue` so codegen can emit them via
23
28
  * `stringifyEnhancedJsonValue` with `$msg` markers preserved.
24
29
  *
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{CONSTANT_CAPS as t,resolveEnhancedJsonValue as r}from"../../../core/index.js";import{DiagnosticCode as o,diagnosticMessages as i}from"../../../errors/index.js";import{ShapePropertyName as n}from"./names/shape-property-name.js";let s=(e,t,r,n,s)=>{for(let l of r.validatePartialShape(t).errors){let t=l.instancePath?l.instancePath:"(root)",r=l.instancePath.split("/").filter(Boolean)[0]??"";n.error(o.DEFAULTS_SCHEMA_VIOLATION,i[o.DEFAULTS_SCHEMA_VIOLATION](e,r,t,l.message,s))}};export const Defaults=(l,a,f)=>{let E=a.allNames,T=[...E].map(String),N=new Map,S=new Map;for(let e of a.entitySchemas)N.set(e.entityType,new Set(Object.keys(e.shapeProperties))),S.set(e.entityType,e);let _={};for(let[e,O]of Object.entries(l)){let l=f.at(e);if(!E.has(e)){f.error(o.DEFAULTS_UNKNOWN_ENTITY_KEY,i[o.DEFAULTS_UNKNOWN_ENTITY_KEY](e,T));continue}let p=a.aliases.get(e),c=void 0!==p,g={};for(let[t,r]of Object.entries(O)){let s=n(t,l);if(s){if(c){let t=[];for(let e of p){let r=N.get(e);r&&r.has(s)||t.push(String(e))}if(t.length>0){let r=p[0],n=r?[...N.get(r)??[]]:[];f.error(o.DEFAULTS_UNKNOWN_PROPERTY,i[o.DEFAULTS_UNKNOWN_PROPERTY](e,s,n,t));continue}}else{let t=N.get(e);if(!t||!t.has(s)){let r=t?[...t]:[];f.error(o.DEFAULTS_UNKNOWN_PROPERTY,i[o.DEFAULTS_UNKNOWN_PROPERTY](e,s,r));continue}}g[s]=r}}if(0===Object.keys(g).length)continue;let m=r(g,void 0,t,l);if(void 0!==m){if(c)for(let t of p){let r=S.get(t);r&&s(e,m,r,l,String(t))}else{let t=S.get(e);t&&s(e,m,t,l)}for(let t of p??[e])_[String(t)]={..._[String(t)],...g}}}if(Object.keys(l).length>0&&f.warning(o.DEFAULTS_DEPRECATED,i[o.DEFAULTS_DEPRECATED]()),!f.hasErrors)return e({entries:_})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{CONSTANT_CAPS as t,resolveEnhancedJsonValue as r}from"../../../core/index.js";import{DiagnosticCode as i,diagnosticMessages as o}from"../../../errors/index.js";import{ShapePropertyName as n}from"./names/shape-property-name.js";let l=(e,t,r,n,l)=>{for(let s of r.validatePartialShape(t).errors){let t=s.instancePath?s.instancePath:"(root)",r=s.instancePath.split("/").filter(Boolean)[0]??"";n.error(i.DEFAULTS_SCHEMA_VIOLATION,o[i.DEFAULTS_SCHEMA_VIOLATION](e,r,t,s.message,l))}};export const Defaults=(s,a,f)=>{let E=a.allNames,T=[...E].map(String),S=new Map,N=new Map;for(let e of a.entitySchemas)S.set(e.entityType,new Set(Object.keys(e.shapeProperties))),N.set(e.entityType,e);let g={},O=new Map;for(let[e,_]of Object.entries(s)){let s=f.at(e);if(!E.has(e)){f.error(i.DEFAULTS_UNKNOWN_ENTITY_KEY,o[i.DEFAULTS_UNKNOWN_ENTITY_KEY](e,T));continue}let c=a.aliases.get(e),p=void 0!==c,h={};for(let[t,r]of Object.entries(_)){let l=n(t,s);if(l){if(p){let t=[];for(let e of c){let r=S.get(e);r&&r.has(l)||t.push(String(e))}if(t.length>0){let r=c[0],n=r?[...S.get(r)??[]]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,o[i.DEFAULTS_UNKNOWN_PROPERTY](e,l,n,t));continue}}else{let t=S.get(e);if(!t||!t.has(l)){let r=t?[...t]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,o[i.DEFAULTS_UNKNOWN_PROPERTY](e,l,r));continue}}h[l]=r}}if(0===Object.keys(h).length)continue;let A=r(h,void 0,t,s);if(void 0!==A){if(p)for(let t of c){let r=N.get(t);r&&l(e,A,r,s,String(t))}else{let t=N.get(e);t&&l(e,A,t,s)}for(let t of c??[e])g[String(t)]={...g[String(t)],...h},O.set(t,[...O.get(t)??[],e])}}for(let[e,t]of O){let r=g[String(e)]??{},n=(N.get(e)?.shapeSchema.required??[]).filter(e=>!Object.hasOwn(r,e));if(0===n.length)continue;let l=t.includes(String(e))?String(e):t.at(-1);f.at(l).error(i.DEFAULTS_INCOMPLETE,o[i.DEFAULTS_INCOMPLETE](String(e),n,t))}if(Object.keys(s).length>0&&f.warning(i.DEFAULTS_DEPRECATED,o[i.DEFAULTS_DEPRECATED]()),!f.hasErrors)return e({entries:g})};
@@ -0,0 +1,25 @@
1
+ import { type EnhancedJsonSchemaType, type PhoenixDefinitions } from '../../../core/index.js';
2
+ import type { ModelVersion } from '../model/index.js';
3
+ /**
4
+ * What the type of a shape field means to a relation that reads its related entities from it.
5
+ *
6
+ * - `single`: the id of one entity of `entityTypes`, or `null` when `nullable`.
7
+ * - `array`: an array of ids of entities of `entityTypes`.
8
+ * - `other`: anything else, such as a string, an id without `references`, or a mix of the above.
9
+ * - `unknown`: the schema does not say, because it states its type as TypeScript text (`tsType`)
10
+ * or combines schemas with `allOf`.
11
+ */
12
+ export type ReferenceFieldType = {
13
+ readonly kind: 'single';
14
+ readonly entityTypes: ReadonlySet<string>;
15
+ readonly nullable: boolean;
16
+ } | {
17
+ readonly kind: 'array';
18
+ readonly entityTypes: ReadonlySet<string>;
19
+ } | {
20
+ readonly kind: 'other';
21
+ } | {
22
+ readonly kind: 'unknown';
23
+ };
24
+ /** Classifies the schema of a shape field of the latest model by the reference it holds. */
25
+ export declare const referenceFieldType: (schema: EnhancedJsonSchemaType, latestModel: ModelVersion, phxDefinitions: PhoenixDefinitions) => ReferenceFieldType;
@@ -0,0 +1 @@
1
+ import{COMMON_SHORT_PREFIX as e,INTERNAL_REF_PATTERN as t,extractPhxDefName as n}from"../../../core/index.js";let r={entityTypes:new Set,hasNull:!1,arrays:[],hasOther:!1,hasUnknown:!1},s={...r,hasNull:!0},a={...r,hasOther:!0},y={...r,hasUnknown:!0},i=e=>({entityTypes:new Set(e.flatMap(e=>[...e.entityTypes])),hasNull:e.some(e=>e.hasNull),arrays:e.flatMap(e=>e.arrays),hasOther:e.some(e=>e.hasOther),hasUnknown:e.some(e=>e.hasUnknown)}),l=(o,p)=>{if(o.tsType)return y;if(o.$ref){let s,i=n(o.$ref);if(void 0!==i)return p.phxDefinitions[i]?.tsType==="DomainEntityId"&&o.references?{...r,entityTypes:new Set(((e,t)=>{for(let[n,r]of t.aliases)if(String(n)===e)return r.map(String);return[e]})(o.references,p.latestModel))}:a;let h=(s=o.$ref).startsWith(e)?s.slice(e.length):t.exec(s)?.[2];if(void 0===h)return a;let u=p.latestModel.commonTypes.get(h);return!u||p.openCommonTypes.has(h)?y:l(u.schema,{...p,openCommonTypes:new Set([...p.openCommonTypes,h])})}if(o.enum)return i(o.enum.map(e=>null===e?s:a));let h=o.anyOf??o.oneOf;if(h)return i(h.map(e=>l(e,p)));if(o.allOf)return y;let u=e=>"array"===e?(()=>{let{items:e}=o;return!e||Array.isArray(e)?a:{...r,arrays:[l(e,p)]}})():"null"===e?s:a;return"string"==typeof o.type?u(o.type):Array.isArray(o.type)?i(o.type.map(u)):a};export const referenceFieldType=(e,t,n)=>(e=>{if(e.hasUnknown||e.arrays.some(e=>e.hasUnknown))return{kind:"unknown"};if(e.hasOther)return{kind:"other"};let[t,...n]=e.arrays;if(!t)return e.entityTypes.size>0?{kind:"single",entityTypes:e.entityTypes,nullable:e.hasNull}:{kind:"other"};let r=e=>e.entityTypes.size>0&&!e.hasNull&&!e.hasOther&&0===e.arrays.length;return 0===e.entityTypes.size&&!e.hasNull&&r(t)&&n.every(e=>{let n,s;return r(e)&&(n=e.entityTypes,s=t.entityTypes,n.size===s.size&&[...n].every(e=>s.has(e)))})?{kind:"array",entityTypes:t.entityTypes}:{kind:"other"}})(l(e,{latestModel:t,phxDefinitions:n,openCommonTypes:new Set}));
@@ -0,0 +1,46 @@
1
+ import type { ReferenceFieldType } from './reference-field-type.js';
2
+ type Cardinality = '0-1' | '1-1' | '0-N' | '1-N';
3
+ /** How a field holds its reference: one id, one id or `null`, or an array of ids. */
4
+ export type ReferenceFieldShape = 'single' | 'nullableSingle' | 'array';
5
+ /**
6
+ * Why a relation cannot read its related entities from its field.
7
+ *
8
+ * - `notReference`: the field does not hold entity ids.
9
+ * - `otherEntityTypes`: the field holds ids of other entity types than the relation relates to.
10
+ * - `cardinality`: the field of a direct relation holds its ids in another shape than the
11
+ * cardinality of the relation needs.
12
+ */
13
+ export type RelationFieldMismatch = {
14
+ readonly kind: 'notReference';
15
+ } | {
16
+ readonly kind: 'otherEntityTypes';
17
+ readonly referenced: readonly string[];
18
+ } | {
19
+ readonly kind: 'cardinality';
20
+ readonly shape: ReferenceFieldShape;
21
+ readonly required: ReferenceFieldShape;
22
+ };
23
+ interface RelationReadingField {
24
+ readonly kind: 'direct' | 'indirect';
25
+ readonly cardinality: Cardinality;
26
+ }
27
+ /**
28
+ * Checks the field of a direct or indirect relation against what the relation reads from it.
29
+ *
30
+ * The field must reference exactly `relatedEntityTypes`: for a direct relation the entity types of
31
+ * its target, for an indirect relation the entity types it is declared on, because there the field
32
+ * belongs to the target and points back. A direct relation also fixes the shape of the field by
33
+ * its cardinality. An indirect relation reads every shape, since its cardinality counts the
34
+ * entities that point back and not the ids in the field.
35
+ *
36
+ * When an alias holds the field, the field can have another type in each entity type of the alias.
37
+ * The relation is accepted when the field fits in at least one of them. Requiring all of them
38
+ * would be the stricter reading, but projects whose specs type-check rely on the looser one, so
39
+ * it would reject working projects.
40
+ *
41
+ * @param fieldTypes The type of the field in each entity type that holds it.
42
+ * @returns The mismatch of the first entity type, or `undefined` when the field fits in one of
43
+ * them or its type there is unknown.
44
+ */
45
+ export declare const relationFieldMismatch: (relation: RelationReadingField, fieldTypes: readonly ReferenceFieldType[], relatedEntityTypes: readonly string[]) => RelationFieldMismatch | undefined;
46
+ export {};
@@ -0,0 +1 @@
1
+ let e={"0-1":"nullableSingle","1-1":"single","0-N":"array","1-N":"array"};export const relationFieldMismatch=(n,i,r)=>{let t=i.map(i=>((n,i,r)=>{if("unknown"===i.kind)return;if("other"===i.kind)return{kind:"notReference"};let t=i.entityTypes;if(!(t.size===new Set(r).size&&r.every(e=>t.has(e))))return{kind:"otherEntityTypes",referenced:[...t]};if("indirect"===n.kind)return;let l="array"===i.kind?"array":i.nullable?"nullableSingle":"single",a=e[n.cardinality];return l===a?void 0:{kind:"cardinality",shape:l,required:a}})(n,i,r));return t.includes(void 0)?void 0:t[0]};
@@ -1,5 +1,5 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import type { ParseContext } from '../../../core/index.js';
2
+ import type { ParseContext, PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedRelations } from '../../merge/index.js';
4
4
  import type { ComponentEntry } from '../components/index.js';
5
5
  import type { Expression } from '../expressions/index.js';
@@ -19,7 +19,8 @@ export type Relations = Branded<'Relations', {
19
19
  * Validates merged relations against the latest model, then expands into components + expressions.
20
20
  *
21
21
  * Each relation is individually constructed via `Relation()` which builds its own expression
22
- * and component entries. This factory validates cross-relation concerns (counterpart pairing,
22
+ * and component entries. This factory validates the field a direct or indirect relation reads
23
+ * against the shape that holds it, validates cross-relation concerns (counterpart pairing,
23
24
  * composition tree reachability) and aggregates the per-relation artifacts.
24
25
  */
25
- export declare const Relations: (rawRelations: MergedRelations, latestModel: ModelVersion, ctx: ParseContext) => Relations;
26
+ export declare const Relations: (rawRelations: MergedRelations, latestModel: ModelVersion, phxDefinitions: PhoenixDefinitions, ctx: ParseContext) => Relations;
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as r}from"../../../errors/index.js";import{IMPLICIT_ENTITY_FIELDS as i,RelationName as o,getResolvedShape as n}from"../model/index.js";import{Relation as f}from"./relation.js";let l=(e,t,r)=>{let i=r[t.target];if(!i)return;let o="direct"===t.kind?"indirect":"indirect"===t.kind?"direct":"allOfType";for(let[r,n]of Object.entries(i))if(n.kind===o&&n.target===e&&("allOfType"===t.kind||"allOfType"===n.kind||t.field===n.field))return{entityKey:t.target,name:r,relation:n}},T=(e,t)=>{let r=t.aliases.get(e);return r||[e]};export const Relations=(O,N,E)=>{let{allNames:I,resolvedShapes:_}=N,a=[...I].map(String),s=(e,t)=>n(_,e).fieldSchemas.has(t),d={};for(let[e,n]of Object.entries(O)){let l=E.at(e);if(!I.has(e)){l.error(t.RELATION_UNKNOWN_ENTITY_KEY,r.RELATION_UNKNOWN_ENTITY_KEY(e,a));continue}for(let[T,O]of Object.entries(n)){if(!o(T,l))continue;if(!I.has(O.target)){l.error(t.RELATION_UNKNOWN_TARGET,r.RELATION_UNKNOWN_TARGET(e,T,O.target,a));continue}if("direct"===O.kind){if(i.has(O.field)){l.error(t.RELATION_IMMUTABLE_FIELD,r.RELATION_IMMUTABLE_FIELD(e,T,O.field,e));continue}if(!s(e,O.field)){l.error(t.RELATION_UNKNOWN_FIELD_DIRECT,r.RELATION_UNKNOWN_FIELD_DIRECT(e,T,O.field));continue}}else if("indirect"===O.kind){if(i.has(O.field)){l.error(t.RELATION_IMMUTABLE_FIELD,r.RELATION_IMMUTABLE_FIELD(e,T,O.field,O.target));continue}if(!s(O.target,O.field)){l.error(t.RELATION_UNKNOWN_FIELD_INDIRECT,r.RELATION_UNKNOWN_FIELD_INDIRECT(e,T,O.field,O.target));continue}}let n=f(T,O,e,N.aliases,l);n&&(d[e]||(d[e]={}),d[e][n.name]=n)}}for(let[e,i]of Object.entries(d)){let o=E.at(e);for(let[n,f]of Object.entries(i)){if(f.target===e)continue;let i=l(e,f,d);if(!i){o.error(t.RELATION_MISSING_COUNTERPART,r.RELATION_MISSING_COUNTERPART(e,n,f.kind,f.target,"allOfType"===f.kind?void 0:f.field,f.composedOf));continue}f.composedOf&&i.relation.composedOf&&o.error(t.RELATION_COUNTERPART_COMPOSED_OF_MISMATCH,r.RELATION_COUNTERPART_COMPOSED_OF_MISMATCH(e,n,i.entityKey,i.name))}}((e,i,o)=>{let n=new Map;for(let[t,r]of Object.entries(e))for(let e of Object.values(r)){if(!e.composedOf)continue;let r=T(t,i),o=T(e.target,i);for(let e of r){let t=n.get(e);for(let r of(t||(t=new Set,n.set(e,t)),o))t.add(r)}}let f=new Set(i.rootEntityTypes),l=[...i.rootEntityTypes];for(;l.length>0;){let e=l.shift(),t=n.get(e);if(t)for(let e of t)f.has(e)||(f.add(e),l.push(e))}let O=i.rootEntityTypes.map(String);for(let e of i.entityTypes)f.has(e)||o.at(String(e)).error(t.RELATION_ENTITY_NOT_IN_COMPOSITION_TREE,r.RELATION_ENTITY_NOT_IN_COMPOSITION_TREE(String(e),O))})(d,N,E);let{components:R,expressions:c}=(e=>{let t=[],r=[];for(let i of Object.values(e))for(let e of Object.values(i))t.push(...e.components),r.push(e.expression);return{components:t,expressions:r}})(d);return e({entries:d,components:R,expressions:c})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as r}from"../../../errors/index.js";import{IMPLICIT_ENTITY_FIELDS as i,RelationName as o,getResolvedShape as E}from"../model/index.js";import{referenceFieldType as n}from"./reference-field-type.js";import{relationFieldMismatch as f}from"./relation-field-mismatch.js";import{Relation as l}from"./relation.js";let T=(e,t,r)=>{let i=r[t.target];if(!i)return;let o="direct"===t.kind?"indirect":"indirect"===t.kind?"direct":"allOfType";for(let[r,E]of Object.entries(i))if(E.kind===o&&E.target===e&&("allOfType"===t.kind||"allOfType"===E.kind||t.field===E.field))return{entityKey:t.target,name:r,relation:E}},N=(e,t)=>{let r=t.aliases.get(e);return r||[e]},a=(e,i,o)=>{let{entityKey:E,relationName:n,field:f,fieldOwner:l,related:T,relatedEntityTypes:N,cardinality:a}=i;switch(e.kind){case"notReference":o.error(t.RELATION_FIELD_NOT_REFERENCE,r.RELATION_FIELD_NOT_REFERENCE(E,n,f,l));break;case"otherEntityTypes":o.error(t.RELATION_FIELD_REFERENCES_OTHER_TYPES,r.RELATION_FIELD_REFERENCES_OTHER_TYPES(E,n,f,l,e.referenced,T,N));break;case"cardinality":o.error(t.RELATION_FIELD_CARDINALITY_MISMATCH,r.RELATION_FIELD_CARDINALITY_MISMATCH(E,n,f,a,e.shape,e.required))}};export const Relations=(O,_,I,s)=>{let{allNames:d,resolvedShapes:R}=_,c=[...d].map(String),L=(e,t)=>E(R,e).fieldSchemas.has(t),A={};for(let[e,T]of Object.entries(O)){let O=s.at(e);if(!d.has(e)){O.error(t.RELATION_UNKNOWN_ENTITY_KEY,r.RELATION_UNKNOWN_ENTITY_KEY(e,c));continue}for(let[s,p]of Object.entries(T)){if(!o(s,O))continue;if(!d.has(p.target)){O.error(t.RELATION_UNKNOWN_TARGET,r.RELATION_UNKNOWN_TARGET(e,s,p.target,c));continue}if("direct"===p.kind){if(i.has(p.field)){O.error(t.RELATION_IMMUTABLE_FIELD,r.RELATION_IMMUTABLE_FIELD(e,s,p.field,e));continue}if(!L(e,p.field)){O.error(t.RELATION_UNKNOWN_FIELD_DIRECT,r.RELATION_UNKNOWN_FIELD_DIRECT(e,s,p.field));continue}}else if("indirect"===p.kind){if(i.has(p.field)){O.error(t.RELATION_IMMUTABLE_FIELD,r.RELATION_IMMUTABLE_FIELD(e,s,p.field,p.target));continue}if(!L(p.target,p.field)){O.error(t.RELATION_UNKNOWN_FIELD_INDIRECT,r.RELATION_UNKNOWN_FIELD_INDIRECT(e,s,p.field,p.target));continue}}if("allOfType"!==p.kind){let[t,r]="direct"===p.kind?[e,p.target]:[p.target,e],i=N(r,_).map(String),o=N(t,_).flatMap(e=>{let t=E(R,e).fieldSchemas.get(p.field);return t?[n(t,_,I)]:[]}),l=f(p,o,i);l&&a(l,{entityKey:e,relationName:s,field:p.field,fieldOwner:t,related:r,relatedEntityTypes:i,cardinality:p.cardinality},O.at(s))}let T=l(s,p,e,_.aliases,O);T&&(A[e]||(A[e]={}),A[e][T.name]=T)}}for(let[e,i]of Object.entries(A)){let o=s.at(e);for(let[E,n]of Object.entries(i)){if(n.target===e)continue;let i=T(e,n,A);if(!i){o.error(t.RELATION_MISSING_COUNTERPART,r.RELATION_MISSING_COUNTERPART(e,E,n.kind,n.target,"allOfType"===n.kind?void 0:n.field,n.composedOf));continue}n.composedOf&&i.relation.composedOf&&o.error(t.RELATION_COUNTERPART_COMPOSED_OF_MISMATCH,r.RELATION_COUNTERPART_COMPOSED_OF_MISMATCH(e,E,i.entityKey,i.name))}}((e,i,o)=>{let E=new Map;for(let[t,r]of Object.entries(e))for(let e of Object.values(r)){if(!e.composedOf)continue;let r=N(t,i),o=N(e.target,i);for(let e of r){let t=E.get(e);for(let r of(t||(t=new Set,E.set(e,t)),o))t.add(r)}}let n=new Set(i.rootEntityTypes),f=[...i.rootEntityTypes];for(;f.length>0;){let e=f.shift(),t=E.get(e);if(t)for(let e of t)n.has(e)||(n.add(e),f.push(e))}let l=i.rootEntityTypes.map(String);for(let e of i.entityTypes)n.has(e)||o.at(String(e)).error(t.RELATION_ENTITY_NOT_IN_COMPOSITION_TREE,r.RELATION_ENTITY_NOT_IN_COMPOSITION_TREE(String(e),l))})(A,_,s);let{components:p,expressions:m}=(e=>{let t=[],r=[];for(let i of Object.values(e))for(let e of Object.values(i))t.push(...e.components),r.push(e.expression);return{components:t,expressions:r}})(A);return e({entries:A,components:p,expressions:m})};
@@ -1,18 +1,13 @@
1
- import { type GraphQLOutputType, GraphQLScalarType } from 'graphql';
1
+ import type { AssistantValueType } from '#package/domain';
2
2
  import { type EnhancedJsonSchemaType } from '../../../../core/index.js';
3
3
  import { type SchemaRefResolver } from '../../common/index.js';
4
- /**
5
- * Opaque scalar for values the assistant schema does not type: objects, custom TypeScript types and
6
- * loose unions. A value is plain serializable data and passes through unchanged.
7
- */
8
- export declare const GraphQLJSON: GraphQLScalarType<unknown, unknown>;
9
4
  /**
10
5
  * The GraphQL type of one whitelisted stored field or declared expression. `enumValues` lists the
11
6
  * allowed values of a string enum, which the schema exposes as `String` and names in the field
12
7
  * description.
13
8
  */
14
9
  export interface AssistantFieldType {
15
- readonly type: GraphQLOutputType;
10
+ readonly type: AssistantValueType;
16
11
  readonly enumValues?: readonly string[];
17
12
  /**
18
13
  * The schema's own description, or without one that of the common type it references, directly or
@@ -30,4 +25,4 @@ export interface AssistantFieldType {
30
25
  * `String` with their values, primitives → scalars, arrays of mappable items → lists, and everything
31
26
  * else → `JSON`. Every type, `JSON` included, is non-null unless the schema admits `null`.
32
27
  */
33
- export declare const assistantFieldType: (schema: EnhancedJsonSchemaType, resolveRef: SchemaRefResolver) => AssistantFieldType;
28
+ export declare const resolveAssistantFieldType: (schema: EnhancedJsonSchemaType, resolveRef: SchemaRefResolver) => AssistantFieldType;
@@ -1 +1 @@
1
- import{GraphQLBoolean as e,GraphQLFloat as t,GraphQLID as r,GraphQLInt as n,GraphQLList as i,GraphQLNonNull as l,GraphQLScalarType as o,GraphQLString as a,getNamedType as p}from"graphql";import{isArray as s}from"@salsita-ai/common/utils";import{extractPhxDefName as f}from"../../../../core/index.js";import{commonTypeRefName as u,isNullableSchema as d,phxDefinitionRefName as y}from"../../common/index.js";export const GraphQLJSON=new o({name:"JSON",description:"Any JSON value, returned as stored. Always plain serializable data."});let m={number:t,integer:n,string:a,boolean:e},c=new Set(["Localizable","EnhancedLocalizable","MessageDescriptor","EnhancedMessageDescriptor","MultilingualString"]),v={type:GraphQLJSON},g=({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type),h=(e,t,n)=>{let l;if(void 0!==(l=void 0===e.$ref?void 0:y(e.$ref))&&c.has(l))return{type:a,localized:!0};if(e.tsType)return v;if(e.$ref){var o=e.$ref;if("DomainEntityId"===f(o))return{type:r};let i=u(o),l=void 0===i||n.has(i)?void 0:t(o);return void 0!==i&&l?h(l,t,new Set([...n,i])):v}if(e.anyOf||e.oneOf)return((e,t,r)=>{let n=g(e).map(e=>h(e,t,r)),[i]=n;if(1===n.length&&i)return i;let l=n.flatMap(({type:e,enumValues:t})=>e===a&&t?[t]:[]);if(n.length<2||l.length!==n.length||e.anyOf&&e.oneOf)return v;let o=l.flatMap(e=>[...new Set(e)]);return{type:a,enumValues:e.oneOf?o.filter(e=>o.indexOf(e)===o.lastIndexOf(e)):[...new Set(o)]}})(e,t,n);if(e.enum){let t;return(t=e.enum.filter(e=>null!==e)).every(e=>"string"==typeof e)?{type:a,enumValues:t}:v}if(s(e.type)){let r=e.type.filter(e=>"null"!==e),[i]=r;return 1===r.length&&i?h({...e,type:i},t,n):v}if("array"===e.type){var d=e.items;if(!d||s(d))return v;let r=S(d,t,n);return p(r.type)===GraphQLJSON?v:{type:new i(r.type),enumValues:r.enumValues,localized:r.localized}}let O="string"==typeof e.type?m[e.type]:void 0;return O?{type:O}:v},S=(e,t,r)=>{let n=h(e,t,r);return{...n,type:d(e,t)?n.type:new l(n.type)}},O=e=>{let t=g(e);return e.$ref??(1===t.length?t[0]?.$ref:void 0)},w=(e,t,r)=>{let n=u(e),i=void 0===n||r.has(n)?void 0:t(e);if(void 0===n||!i)return;let l=O(i);return void 0===i.description&&l?w(l,t,new Set([...r,n])):i.description};export const assistantFieldType=(e,t)=>{let r=O(e),n=void 0===e.description&&r?w(r,t,new Set):e.description;return{...S(e,t,new Set),...void 0===n?{}:{description:n}}};
1
+ import{isArray as e}from"@salsita-ai/common/utils";import{extractPhxDefName as n}from"../../../../core/index.js";import{commonTypeRefName as t,isNullableSchema as l,phxDefinitionRefName as r}from"../../common/index.js";let i={number:{kind:"scalar",name:"Float",nonNull:!1},integer:{kind:"scalar",name:"Int",nonNull:!1},string:{kind:"scalar",name:"String",nonNull:!1},boolean:{kind:"scalar",name:"Boolean",nonNull:!1}},a={kind:"scalar",name:"String",nonNull:!1},o={kind:"scalar",name:"ID",nonNull:!1},u=new Set(["Localizable","EnhancedLocalizable","MessageDescriptor","EnhancedMessageDescriptor","MultilingualString"]),s={type:{kind:"scalar",name:"JSON",nonNull:!1}},d=({anyOf:e,oneOf:n})=>[...e??[],...n??[]].filter(e=>"null"!==e.type),f=e=>"scalar"===e.kind?"JSON"===e.name:f(e.item),p=(l,y,c)=>{let v;if(void 0!==(v=void 0===l.$ref?void 0:r(l.$ref))&&u.has(v))return{type:a,localized:!0};if(l.tsType)return s;if(l.$ref){var g=l.$ref;if("DomainEntityId"===n(g))return{type:o};let e=t(g),r=void 0===e||c.has(e)?void 0:y(g);return void 0!==e&&r?p(r,y,new Set([...c,e])):s}if(l.anyOf||l.oneOf)return((e,n,t)=>{let l=d(e).map(e=>p(e,n,t)),[r]=l;if(1===l.length&&r)return r;let i=l.flatMap(({type:e,enumValues:n})=>e===a&&n?[n]:[]);if(l.length<2||i.length!==l.length||e.anyOf&&e.oneOf)return s;let o=i.flatMap(e=>[...new Set(e)]);return{type:a,enumValues:e.oneOf?o.filter(e=>o.indexOf(e)===o.lastIndexOf(e)):[...new Set(o)]}})(l,y,c);if(l.enum){let e;return(e=l.enum.filter(e=>null!==e)).every(e=>"string"==typeof e)?{type:a,enumValues:e}:s}if(e(l.type)){let e=l.type.filter(e=>"null"!==e),[n]=e;return 1===e.length&&n?p({...l,type:n},y,c):s}if("array"===l.type){var S=l.items;if(!S||e(S))return s;let n=m(S,y,c);return f(n.type)?s:{type:{kind:"list",item:n.type,nonNull:!1},enumValues:n.enumValues,localized:n.localized}}let h="string"==typeof l.type?i[l.type]:void 0;return h?{type:h}:s},m=(e,n,t)=>{let r=p(e,n,t);return{...r,type:{...r.type,nonNull:!l(e,n)}}},y=e=>{let n=d(e);return e.$ref??(1===n.length?n[0]?.$ref:void 0)},c=(e,n,l)=>{let r=t(e),i=void 0===r||l.has(r)?void 0:n(e);if(void 0===r||!i)return;let a=y(i);return void 0===i.description&&a?c(a,n,new Set([...l,r])):i.description};export const resolveAssistantFieldType=(e,n)=>{let t=y(e),l=void 0===e.description&&t?c(t,n,new Set):e.description;return{...m(e,n,new Set),...void 0===l?{}:{description:l}}};
@@ -1,9 +1,9 @@
1
- import type { AssistantFieldOptions, AssistantFieldSource, AssistantRecipeGroup } from '#package/domain';
1
+ import { type AssistantFieldSource, type AssistantManifest, type AssistantRecipeGroup, type AssistantResolvedManifest, type AssistantStates } from '#package/domain';
2
2
  import type { ParseContext, PhoenixDefinitions } from '../../../../core/index.js';
3
3
  import { type RawAssistant } from '../../../raw-spec/index.js';
4
4
  import type { Components } from '../../components/index.js';
5
5
  import type { Expressions } from '../../expressions/index.js';
6
- import type { EntityTypeName, ModelVersion } from '../../model/index.js';
6
+ import type { ModelVersion } from '../../model/index.js';
7
7
  import type { Actions } from '../actions.js';
8
8
  /**
9
9
  * The field sources of every entity object type: GraphQL object type name → GraphQL field name →
@@ -11,28 +11,11 @@ import type { Actions } from '../actions.js';
11
11
  * a concrete type; `id` and `type` are implicit and never listed.
12
12
  */
13
13
  export type AssistantFieldSources = Readonly<Record<string, Readonly<Record<string, AssistantFieldSource>>>>;
14
- /**
15
- * The stored property each delta field of a `modify<Type>` mutation writes: entity type → delta
16
- * field name → shape property. Only entity types with at least one writable field appear, aliases
17
- * expanded to their members.
18
- */
19
- export type AssistantWritableFields = Readonly<Record<string, Readonly<Record<string, string>>>>;
20
14
  /**
21
15
  * The recipe groups of one kind per entity type, in manifest
22
16
  * order. Only entity types with at least one group appear, aliases expanded to their members.
23
17
  */
24
18
  export type AssistantRecipeGroups = Readonly<Record<string, readonly AssistantRecipeGroup[]>>;
25
- /**
26
- * The options edges `meta` exposes per entity type, which are also the choices `modify<Type>` checks
27
- * a written value against, in manifest order. Only entity types with at least one edge appear,
28
- * aliases expanded to their members.
29
- */
30
- export type AssistantFieldOptionsByType = Readonly<Record<string, readonly AssistantFieldOptions[]>>;
31
- /**
32
- * The custom mutations the manifest exposes: `Mutation` field name → the declared action it runs,
33
- * in manifest order. Empty when the manifest exposes no action.
34
- */
35
- export type AssistantActions = Readonly<Record<string, string>>;
36
19
  /**
37
20
  * The printed assistant GraphQL schema, the field sources its runtime resolvers read through, the
38
21
  * entity types `deleteEntity` may delete, the fields the `modify<Type>` mutations may write, the
@@ -40,16 +23,9 @@ export type AssistantActions = Readonly<Record<string, string>>;
40
23
  * of writable fields, aliases expanded, and the actions the custom mutations run,
41
24
  * so the runtime checks the same sets the schema describes.
42
25
  */
43
- export interface AssistantSchema {
44
- readonly sdl: string;
45
- readonly fields: AssistantFieldSources;
46
- readonly deletableTypes: readonly EntityTypeName[];
47
- readonly writableFields: AssistantWritableFields;
48
- readonly childRecipes: AssistantRecipeGroups;
49
- readonly replaceRecipes: AssistantRecipeGroups;
50
- readonly fieldOptions: AssistantFieldOptionsByType;
51
- readonly actions: AssistantActions;
52
- }
26
+ export type AssistantSchema = Required<AssistantManifest> & {
27
+ readonly resolved: AssistantResolvedManifest;
28
+ };
53
29
  /** What the assistant schema is built from, besides the manifest. */
54
30
  export interface AssistantSchemaInput {
55
31
  readonly model: ModelVersion;
@@ -63,17 +39,7 @@ export interface AssistantSchemaInput {
63
39
  /** The declared actions, which `actions` manifest entries expose as custom mutations. */
64
40
  readonly actions: Actions;
65
41
  }
66
- /** The declared UI state values: each non-empty kind becomes a `Navigation` field listing its values. */
67
- export interface AssistantStates {
68
- readonly navigationStates: readonly string[];
69
- readonly viewStates: readonly string[];
70
- readonly toolStates: readonly string[];
71
- }
72
- /**
73
- * Builds the assistant GraphQL schema from the manifest whitelist, the latest model and the
74
- * configurator states: aliases become interfaces implementing `AnyDomainEntity`, entity types become
75
- * object types implementing every alias that contains them, and `Query` exposes the root, entities,
76
- * selection and navigation entry points. Returns `undefined` after reporting diagnostics when the
77
- * manifest does not fit the model or the generated schema is not valid GraphQL.
78
- */
79
- export declare const createAssistantSchema: (manifest: RawAssistant, { model, states, phxDefinitions, expressions, components, actions }: AssistantSchemaInput, ctx: ParseContext) => AssistantSchema | undefined;
42
+ /** Resolves the whitelist against parse-time models, keeping only JSON data needed to build its schema. */
43
+ export declare const resolveAssistantManifest: (manifest: RawAssistant, { model, states, phxDefinitions, expressions, components, actions }: AssistantSchemaInput, ctx: ParseContext) => AssistantResolvedManifest | undefined;
44
+ /** Builds at parse time as well, translating GraphQL construction failures into the existing diagnostic. */
45
+ export declare const createAssistantSchema: (manifest: RawAssistant, input: AssistantSchemaInput, ctx: ParseContext) => AssistantSchema | undefined;
@@ -1 +1 @@
1
- import{GraphQLBoolean as e,GraphQLID as t,GraphQLInputObjectType as n,GraphQLInterfaceType as i,GraphQLList as r,GraphQLNonNull as o,GraphQLObjectType as s,GraphQLSchema as a,GraphQLString as p,getNullableType as l,isInputType as d,isNonNullType as c,printSchema as h,validateSchema as f}from"graphql";import{isArray as u}from"@salsita-ai/common/utils";import{DiagnosticCode as y,diagnosticMessages as m}from"../../../../errors/index.js";import{ASSISTANT_HINTS as g}from"../../../raw-spec/index.js";import{createSchemaRefResolver as S,isNullableSchema as T,phxDefinitionRefName as N}from"../../common/index.js";import{GraphQLJSON as w,assistantFieldType as A}from"./assistant-field-type.js";let E="AnyDomainEntity",I="RootEntity",_="RecipeGroup",O="Recipe",v="DryRun",b="DryRunError",$="FieldOption",R={section:"childRecipes",component:"childEntityRecipes",mutation:"addChild"},j={section:"replaceRecipes",component:"replaceEntityRecipes",mutation:"replaceEntity"},M=new Set(["id","type","meta"]),D=new Set(["Query","Mutation","Navigation",_,O,v,b,$,"JSON","String","Int","Float","Boolean","ID"]),C=(e,t)=>{if(!t||0===t.length)return e;let n=`One of: ${t.map(e=>`"${e}"`).join(", ")}.`;return e?/[.!?]$/.test(e)?`${e} ${n}`:`${e}. ${n}`:n},U=new Set(["id","type"]),P="The raw stored value: a string, a message descriptor or a multilingual object.",k=(e,t)=>Object.entries(e).find(([e])=>e===t)?.[1],L=(e,t,{model:n,components:i})=>{let r=new Set([e,...[...n.aliases].filter(([,t])=>t.includes(e)).map(([e])=>e)]);return i.filter(({componentName:e,typeOrAlias:n})=>e===t&&r.has(n)).map(({instanceName:e})=>String(e))},W=(...e)=>g.filter(t=>e.some(e=>e?.includes(t))),F=(e,t,n,i)=>{let{model:r}=n,o=new Map,s=new Map;for(let[a,{groups:p,hints:l}]of Object.entries(e)){let e=r.entityTypes.find(e=>e===a),d=e?[e]:[...r.aliases].find(([e])=>e===a)?.[1];if(!d){i.at(a).error(y.ASSISTANT_UNKNOWN_TYPE,m.ASSISTANT_UNKNOWN_TYPE(t.section,a));continue}for(let[e,r]of(d.forEach(e=>s.set(e,W(s.get(e),l))),Object.entries(p))){let s=i.at(a,"groups",e),p=`${a}.groups.${e}`,l={groupId:r?.as??e,instanceName:e,...r?.description===void 0?{}:{description:r.description},dryRuns:r?.allowDryRuns??!0};for(let i of d){let r=L(i,t.component,n),d=o.get(i)??[],c=d.find(e=>e.group.groupId===l.groupId);r.includes(e)?c?s.error(y.ASSISTANT_DUPLICATE_RECIPE_GROUP,m.ASSISTANT_DUPLICATE_RECIPE_GROUP(t,i,l.groupId,[c.entry,p])):o.set(i,[...d,{group:l,entry:p,entryCtx:s}]):s.error(y.ASSISTANT_UNKNOWN_RECIPE_GROUP,m.ASSISTANT_UNKNOWN_RECIPE_GROUP(t,a,e,i,r))}}}let a=r.entityTypes.flatMap(e=>{let t=o.get(e);return t?[{entityType:e,groups:t}]:[]});return{groups:Object.fromEntries(a.map(({entityType:e,groups:t})=>[e,t.map(({group:e})=>e)])),hints:s,metaEntries:new Map(a.flatMap(({entityType:e,groups:[t]})=>t?[[e,t.entryCtx]]:[]))}},K=e=>`${e}Meta`,G={sameForAllInstances:e=>`All ${e} instances have the same recipe groups and recipes.`,constantDuringSession:()=>"They do not change during the session."},Y={sameForAllInstances:e=>`All ${e} instances have the same options.`,constantDuringSession:()=>"The options do not change during the session."},V=(e,t,n)=>e.map(e=>` ${t[e](n)}`).join(""),x=({section:e},{groups:t,hints:n},{entityType:i,purpose:s,recipeGroup:a})=>{let p=t.filter(({dryRuns:e})=>!e).map(({groupId:e})=>e);return 0===t.length?{}:{[e]:{type:new o(new r(new o(a))),description:`The recipe groups for ${s} this ${i}: ${t.map(({groupId:e})=>e).join(", ")}. A group is listed only while the configurator offers it on the entity.${p.length>0?` Recipes of these groups cannot be dry-run: ${p.join(", ")}.`:""}${V(n,G,i)}`}}},q=({entityType:e,childRecipes:t,replaceRecipes:n,optionsEdges:i},{recipeGroup:a,fieldOption:p})=>new s({name:K(e),fields:Object.assign(x(R,t,{entityType:e,purpose:"adding children to",recipeGroup:a}),x(j,n,{entityType:e,purpose:"replacing",recipeGroup:a}),...i.map(({options:{edgeName:t,field:n,validate:i,dryRuns:s},hints:a})=>({[t]:{type:new r(new o(p)),description:`The values "${n}" of this ${e} can take, as the configurator offers them in the current state of the entity. Null when the configurator does not offer a choice on this entity. ${i?`modify${e} rejects a "${n}" value that is not in the list.`:`modify${e} does not check "${n}" against the list.`}${s?"":" Its options cannot be dry-run."}${V(a,Y,e)}`}})))}),B=e=>Object.entries(e).map(([e,t])=>`${e} (${t.map(({groupId:e})=>e).join(", ")})`),z=e=>`${e.charAt(0).toUpperCase()+e.slice(1)}Result`,H=e=>{let t=(({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type))(e);return e.$ref||1!==t.length?e:t[0]},Q=(e,t)=>{let{type:n,enumValues:i,localized:r,description:s}=A(e,t),a=l(n),p=r||!d(a)?w:a;return{type:c(n)?new o(p):p,description:r?`${C(s,i)??""} ${P}`.trim():C(s,i)}},X=(e,t)=>{let n=(e=>{let t=H(e),n=t?.type==="array"&&t.items&&!u(t.items)?H(t.items):void 0,i=n??t;if(i?.$ref!==void 0&&"$DomainEntity"===N(i.$ref))return{target:i.references??E,list:void 0!==n}})(e);if(n)return{kind:"edge",...n,nullable:T(e,t),description:e.description};let{type:i,enumValues:r,localized:s,description:a}=A(e,t);return s?{kind:"value",type:c(i)?new o(w):w,description:`${a??""} ${P}`.trim()}:{kind:"value",type:i,description:C(a,r)}},J=(e,t)=>{let{type:n,enumValues:i,localized:r,description:o}=A(e,t);return{type:{kind:"value",type:n},localized:!0===r,description:o,enumValues:i}},Z=(e,t,n,i,r)=>{let o=t.startsWith("$")?((e,t,n,i)=>{let r=((e,t,{expressions:n,entityTypes:i})=>{let r=i.find(t=>t===e);for(let i of void 0===r?[e]:n.entityExpressions.get(r)?.shapeGroups??[]){let e=[...n.expressions.get(i)?.values()??[]].find(e=>e.name===t);if(e?.declaredSchema)return{implementation:e.implementation,declaredSchema:e.declaredSchema}}})(e.name,t,n);if(!r)return void i.error(y.ASSISTANT_UNKNOWN_FIELD,m.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t));let{implementation:o}=r;if("violations"===o.kind)return void i.error(y.ASSISTANT_UNSUPPORTED_EXPRESSION,m.ASSISTANT_UNSUPPORTED_EXPRESSION(e.name,t));if("relation"===o.kind){let[{target:e,cardinality:t}]=o.params;return{type:{kind:"edge",target:e,cardinality:t},localized:!1,description:void 0}}return J(r.declaredSchema,n.resolveRef)})(e,t,i,r):((e,t,{resolveRef:n},i)=>{let r=Object.entries(e.shape.properties).find(([e])=>e===t)?.[1];return r?J(r,n):void i.error(y.ASSISTANT_UNKNOWN_FIELD,m.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t))})(e,t,i,r);if(!o)return;let s=n?.as??(t.startsWith("$")?`_${t.slice(1)}`:t);return M.has(s)?void r.error(y.ASSISTANT_RESERVED_FIELD_NAME,m.ASSISTANT_RESERVED_FIELD_NAME(e.name,t,s)):{name:s,source:t,type:o.type,localized:o.localized,description:C(n?.description??o.description,o.enumValues),describedByManifest:n?.description!==void 0,enumValues:o.enumValues,valueDescription:n?.description??o.description}},ee=(e,t,n,i,r)=>{let o=new Map,s=new Set(n);for(let i of[...t.flat(),...n]){let t=o.get(i.name);t?t.source!==i.source?r.error(y.ASSISTANT_FIELD_NAME_CONFLICT,m.ASSISTANT_FIELD_NAME_CONFLICT(e,i.name,[t.source,i.source])):s.has(i)&&i.describedByManifest&&o.set(i.name,{...t,description:i.description,describedByManifest:!0,valueDescription:i.valueDescription}):o.set(i.name,i)}return[...o.values()].map(e=>{let t=e.enumValues&&i(e.source);return t?{...e,enumValues:t,description:C(e.valueDescription,t)}:e})},et=({target:e,cardinality:t},n)=>{let i=n(e);switch(t){case"1-1":return new o(i);case"0-1":return i;case"0-N":case"1-N":return new o(new r(new o(i)))}},en=(e,n,i)=>{let r={id:{type:new o(t),description:i?`Unique id of the entity, e.g. "${i}-1".`:void 0},type:{type:new o(p),description:i?`Entity type name, e.g. "${i}".`:void 0}};for(let t of e)r[t.name]={type:"edge"===t.type.kind?et(t.type,n):t.type.type,description:t.description};return r},ei=e=>Object.fromEntries(e.map(({name:e,source:t,localized:n})=>[e,n?{source:t,localized:!0}:{source:t}]));export const createAssistantSchema=(c,{model:u,states:g,phxDefinitions:T,expressions:N,components:M,actions:G},Y)=>{let V,x,H,J=Y.errors.length,et=Y.at("entities"),er=S(u.commonTypes,T),eo=u.rootEntityTypes[0]??u.entityTypes[0];for(let e of u.resolvedShapes.keys())D.has(e)&&Y.error(y.ASSISTANT_RESERVED_TYPE_NAME,m.ASSISTANT_RESERVED_TYPE_NAME(e,[...D]));let es=((e,t,n)=>{let i=new Map;for(let r of e){let e=[];for(let[i,o]of Object.entries(r.entries)){let s=Z(r,i,o,t,n.at(r.name,i));s&&e.push(s)}i.set(r.name,e)}return i})(((e,t,n)=>{let i=[];for(let[n,r]of t.resolvedShapes){let t=e[n];t&&i.push({name:n,shape:r,entries:t})}let r=new Set(t.resolvedShapes.keys());for(let t of Object.keys(e))r.has(t)||n.at(t).error(y.ASSISTANT_UNKNOWN_TYPE,m.ASSISTANT_UNKNOWN_TYPE("entities",t));return i})(c.entities??{},u,et),{resolveRef:er,expressions:N,entityTypes:u.entityTypes},et),ea=ee(E,[],es.get(E)??[],()=>void 0,Y),ep=new Map,el=F(c.childRecipes??{},R,{model:u,components:M},Y.at(R.section)),ed=F(c.replaceRecipes??{},j,{model:u,components:M},Y.at(j.section)),ec=el.groups,eh=ed.groups,ef=new Map,eu=e=>{let[t,...n]=[...u.aliases].find(([t])=>t===e)?.[1]??[];return(t&&0===n.length?ep.get(t):void 0)??eg.get(e)??em},ey=e=>ep.get(e)??eu(e),em=new i({name:E,description:"Every domain entity.",fields:()=>en(ea,ey,eo)}),eg=new Map([[E,em]]),eS=new Map([[E,ea]]);for(let e of u.aliases.keys()){if(e===E)continue;let t=ee(e,[ea],es.get(e)??[],()=>void 0,Y);eS.set(e,t),eg.set(e,new i({name:e,interfaces:[em],fields:()=>en(t,ey)}))}let eT={};for(let e of u.entityTypes){let t=[E,...[...u.aliases].filter(([t,n])=>t!==E&&n.includes(e)).map(([e])=>e)],n=[...u.resolvedShapes].find(([t])=>t===e)?.[1],i=ee(e,t.map(e=>eS.get(e)??[]),es.get(e)??[],e=>{let t=Object.entries(n?.properties??{}).find(([t])=>t===e)?.[1];return t&&A(t,er).enumValues},Y);eT[e]=ei(i),ep.set(e,new s({name:e,interfaces:t.flatMap(e=>eg.get(e)??[]),fields:()=>{let t=ef.get(e);return{...en(i,ey),...t?{meta:{type:new o(t),description:"What the configurator offers on this entity besides its fields."}}:{}}}}))}let eN=((e,t,n)=>{let i=new Set;for(let r of Object.keys(e)){let e=t.entityTypes.find(e=>e===r),o=e?[e]:[...t.aliases].find(([e])=>e===r)?.[1];o?o.forEach(e=>i.add(e)):n.at(r).error(y.ASSISTANT_UNKNOWN_TYPE,m.ASSISTANT_UNKNOWN_TYPE("deletable",r))}return t.entityTypes.filter(e=>i.has(e))})(c.deletable??{},u,Y.at("deletable")),ew=((e,t,n)=>{let{model:i}=t,r=((e,t,n)=>{let i=new Map;for(let[r,o]of Object.entries(e)){let e=t.entityTypes.find(e=>e===r),s=e?[e]:[...t.aliases].find(([e])=>e===r)?.[1],a=[...t.resolvedShapes].find(([e])=>e===r)?.[1];if(!s||!a){n.at(r).error(y.ASSISTANT_UNKNOWN_TYPE,m.ASSISTANT_UNKNOWN_TYPE("writable",r));continue}for(let e of Object.keys(o)){let t=n.at(r,e);e.startsWith("$")||U.has(e)?t.error(y.ASSISTANT_NOT_WRITABLE,m.ASSISTANT_NOT_WRITABLE(r,e)):k(a.properties,e)?s.forEach(t=>{let n=i.get(t)??new Map;i.set(t,n.has(e)?n:n.set(e,r))}):t.error(y.ASSISTANT_UNKNOWN_FIELD,m.ASSISTANT_UNKNOWN_FIELD("writable",r,e))}}return i})(e,i,n);return i.entityTypes.flatMap(e=>{let o=[...i.resolvedShapes].find(([t])=>t===e)?.[1],s=[...r.get(e)??[]].flatMap(([i,r])=>{let s=o&&k(o.properties,i);return(s&&((e,{property:t,writableKey:n},i,{resolveRef:r,exposed:o,sources:s},a)=>{let p=Object.entries(k(s,e)??{}),c=o.get(e)?.find(({source:e})=>e===t)?.name??p.find(([,{source:e}])=>e===t)?.[0],h=void 0===c?p.find(([e])=>e===t)?.[1]:void 0;if(h)return void a.at(n,t).error(y.ASSISTANT_FIELD_NAME_CONFLICT,m.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[h.source,t],`${n}.${t}`));let{type:f,enumValues:u,localized:g,description:S}=A(i,r),T=l(f),N=c??t,E=void 0===c?C(S,u):void 0;return g?{name:N,property:t,type:w,description:E?`${E} ${P}`:P}:{name:N,property:t,type:d(T)?T:w,description:E}})(e,{property:i,writableKey:r},s,t,n))??[]});return s.length>0?[{entityType:e,fields:s}]:[]})})(c.writable??{},{model:u,resolveRef:er,exposed:es,sources:eT},Y.at("writable")),eA=((e,t,n,i)=>{let{model:r}=n,o=new Map;for(let[s,a]of Object.entries(e)){let e=r.entityTypes.find(e=>e===s),p=e?[e]:[...r.aliases].find(([e])=>e===s)?.[1]??[];for(let[e,r]of Object.entries(a)){let a=r?.options;if(!a)continue;let l=i.at(s,e,"options"),d=`${s}.${e}`;for(let i of p){let r=t.find(e=>e.entityType===i)?.fields.find(t=>t.property===e);if(!r)continue;let s=a.as??`${r.name}Options`,p=L(i,a.componentType,n),c=o.get(i)??[],h=c.find(e=>e.options.edgeName===s||e.options.field===r.name);if(p.includes(a.instanceName))if(s===R.section||s===j.section)l.error(y.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME,m.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME(d,s,r.name));else if(h)l.error(y.ASSISTANT_DUPLICATE_OPTIONS_EDGE,m.ASSISTANT_DUPLICATE_OPTIONS_EDGE(i,h.options.edgeName===s?{edgeName:s}:{field:r.name},[h.entry,d]));else{let e={field:r.name,edgeName:s,componentType:a.componentType,instanceName:a.instanceName,validate:a.validate??!0,dryRuns:a.allowDryRuns??!0};o.set(i,[...c,{options:e,hints:W(a.hints),entry:d,entryCtx:l}])}else l.error(y.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT,m.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT(d,a,i,p))}}}return o})(c.writable??{},ew,{model:u,components:M},Y.at("writable"));var eE,eI,e_,eO=[el.metaEntries,ed.metaEntries,new Map([...eA].flatMap(([e,[t]])=>t?[[e,t.entryCtx]]:[]))];for(let e of u.entityTypes){let t=eO.flatMap(t=>t.get(e)??[])[0],n=K(e);t&&[...u.resolvedShapes.keys()].some(e=>e===n)&&t.error(y.ASSISTANT_META_TYPE_NAME_CONFLICT,m.ASSISTANT_META_TYPE_NAME_CONFLICT(e,n))}let ev=(eE=()=>eu(eg.has(I)?I:E),eI=()=>eu(E),V=new s({name:b,description:"One reason a change cannot be made right now.",fields:{type:{type:new o(p),description:'Kind of the problem, or "uncaught".'},entityId:{type:t,description:"The entity the problem is on, when it is on one."},message:{type:p,description:"The problem as the configurator words it for the user."}}}),new s({name:v,description:"What using a recipe or writing an option would do, tried out on the configuration the query reads. Nothing is changed.",fields:()=>({ok:{type:new o(e),description:"Whether the change would succeed on the configuration the query reads."},root:{type:eE(),description:"The root entity of the configuration as it would be after the change; null when ok is false. Everything selected under it reads that configuration."},changedEntities:{type:new o(new r(new o(eI()))),description:"Every entity the change would add or modify, read from that configuration; empty when ok is false. An entity whose id the configuration does not have yet would be added, and its id may differ in the real mutation. An entity that is written to is listed even when it gets the values it already has."},deletedEntityIds:{type:new o(new r(new o(t))),description:"The ids of the entities the change would remove; empty when ok is false."},errors:{type:new o(new r(new o(V))),description:"Why the change cannot be made; empty when ok is true."}})})),eb={recipeGroup:(e_=[...Object.keys(ec).length>0?[R.mutation]:[],...Object.keys(eh).length>0?[j.mutation]:[]],x=e_.join(" or "),H=new s({name:O,description:"One recipe of a recipe group: something that can be added to the entity, or something the entity can be replaced with, depending on the edge the group is listed under.",fields:{key:{type:new o(p),description:`Identifies the recipe within its group; pass it to ${x} as recipeKey. Keys can change with the configuration and with the language, so read them from the listing rather than remembering them.`},name:{type:new o(p),description:"Name shown to the user."},description:{type:p},imageUrl:{type:p,description:"Thumbnail shown to the user."},dryRun:{type:ev,description:"Tries the recipe out. Each selected dry-run costs a full recalculation, so select it only on the recipes you are deciding between. Null for a group whose recipes cannot be dry-run."}}}),new s({name:_,description:"A group of recipes of an entity, as the configurator offers them to the user.",fields:{groupId:{type:new o(p),description:`Identifies the group on its entity; pass it to ${x} as recipeGroupId.`},name:{type:new o(p),description:"Name shown to the user."},description:{type:p},recipes:{type:new o(new r(new o(H)))}}})),fieldOption:new s({name:$,description:"One choice of a field, as the configurator offers it to the user.",fields:{value:{type:new o(w),description:"The value to write to the field."},name:{type:p,description:"Name shown to the user."},description:{type:p},imageUrl:{type:p,description:"Image shown to the user."},color:{type:p,description:'Color shown to the user, as "#rrggbb".'},dryRun:{type:ev,description:"Tries writing the value to the field. Each selected dry-run costs a full recalculation, so select it only on the options you are deciding between. Null for a field whose options cannot be dry-run."}}})};for(let e of u.entityTypes){let t=k(ec,e)??[],n=k(eh,e)??[],i=eA.get(e)??[];(t.length>0||n.length>0||i.length>0)&&ef.set(e,q({entityType:e,childRecipes:{groups:t,hints:el.hints.get(e)??[]},replaceRecipes:{groups:n,hints:ed.hints.get(e)??[]},optionsEdges:i},eb))}let e$=Object.fromEntries(u.entityTypes.flatMap(e=>{let t=eA.get(e);return t?[[e,t.map(({options:e})=>e)]]:[]})),eR=((e,{actions:t,resolveRef:n,builtInMutations:i,typeNames:r},o)=>{let s=[],a=[...t.values()].map(e=>String(e.name));for(let[p,l]of Object.entries(e)){let e=o.at(p),d=[...t.values()].find(e=>e.name===p);if(!d){e.error(y.ASSISTANT_UNKNOWN_ACTION,m.ASSISTANT_UNKNOWN_ACTION(p,a));continue}let c=l?.as??p,h=s.find(e=>e.fieldName===c),f=z(c);if(i.has(c)||h){e.error(y.ASSISTANT_MUTATION_NAME_CONFLICT,m.ASSISTANT_MUTATION_NAME_CONFLICT(p,c,h?`"assistant.actions.${h.actionName}" already exposes`:"the built-in mutation of that name already takes"));continue}if(r.has(f)||s.some(e=>z(e.fieldName)===f)){e.error(y.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT,m.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT(p,c,f));continue}s.push({fieldName:c,actionName:p,description:l?.description??d.description,args:Object.fromEntries(Object.entries(d.params).map(([e,{schema:t}])=>[e,Q(t,n)])),result:Object.fromEntries(Object.entries(d.result).map(([e,t])=>[e,X(t,n)]))})}return s})(c.actions??{},{actions:G,resolveRef:er,builtInMutations:new Set(["deleteEntity",R.mutation,j.mutation,...ew.map(({entityType:e})=>`modify${e}`)]),typeNames:new Set([...D,...u.resolvedShapes.keys(),...ef.keys()])},Y.at("actions"));if(Y.errors.length>J)return;let ej=((e,t)=>{let n;try{let t=e();if(n=f(t).map(e=>e.message),0===n.length)return h(t)}catch(e){n=[e instanceof Error?e.message:String(e)]}t.error(y.ASSISTANT_INVALID_SCHEMA,m.ASSISTANT_INVALID_SCHEMA(n))})(()=>{var e,i;let l;return new a({query:(e=eu(eg.has(I)?I:E),i=eu(E),l=(e=>{let t={};for(let[n,i,r]of[["navigationState","Active navigation state.",e.navigationStates],["viewState","Active view state.",e.viewStates],["toolState","Active tool state.",e.toolStates]])r.length>1&&(t[n]={type:new o(p),description:C(i,r)});if(0!==Object.keys(t).length)return new s({name:"Navigation",description:"The active UI states of the configurator.",fields:t})})(g),new s({name:"Query",fields:{root:{type:new o(e),description:"The root entity of the configuration."},entities:{type:new o(new r(i)),args:{ids:{type:new r(new o(t))}},description:`Every entity of the configuration, or, when ids are given, those entities in the same order with null for an unknown id. Ids have the form "<Type>-<number>"${eo?`, e.g. "${eo}-1"`:""}; any other id is an error.`},selectedEntity:{type:new o(i),description:"The selected entity, or the root entity when nothing is selected."},...l?{navigation:{type:new o(l)}}:{}}})),mutation:(({deletableTypes:e,writableTypes:i,childRecipes:a,replaceRecipes:l,actionFields:d,objectTypes:c,anyDomainEntity:h,targetOutputType:f})=>{let u,y;if(0!==e.length||0!==i.length||0!==Object.keys(a).length||0!==Object.keys(l).length||0!==d.length)return new s({name:"Mutation",fields:Object.assign(0===e.length?{}:{deleteEntity:{type:new o(new r(new o(t))),args:{id:{type:new o(t)}},description:`Deletes the entity with the given id, together with the entities composed into it, and returns the ids of every entity the deletion removed, the given one first. Deletable entity types: ${e.join(", ")}. Nothing can be read from removed entities afterwards, so query what you need from them before deleting.`}},0===(u=B(a)).length?{}:{addChild:{type:new o(new r(new o(h))),args:{parentId:{type:new o(t)},recipeGroupId:{type:new o(p)},recipeKey:{type:new o(p)}},description:`Adds a child to the entity with the id parentId by one recipe of one of its recipe groups. Entity types with recipe groups: ${u.join("; ")}. Read the groupId and the recipe key from "meta { childRecipes }" of the parent. Returns every entity the change added, the recipe's own first and then whatever the configurator added in response, such as a part the new child needs; the list is empty when the configurator removed them again.`}},0===(y=B(l)).length?{}:{replaceEntity:{type:new o(new r(new o(h))),args:{entityId:{type:new o(t)},recipeGroupId:{type:new o(p)},recipeKey:{type:new o(p)}},description:`Replaces the entity with the id entityId by one recipe of one of its replace recipe groups. Entity types with replace recipe groups: ${y.join("; ")}. Read the groupId and the recipe key from "meta { replaceRecipes }" of the entity. The replacement is a new entity with a new id: the id passed in no longer exists afterwards, and the replacement has the field values of its recipe, not those of the entity it replaces. Returns every entity the change added, the replacement first and then whatever the configurator added in response, such as a part the replacement needs; the list is empty when the configurator removed them again.`}},...i.flatMap(e=>{let i=c.get(e.entityType);return i?[(({entityType:e,fields:i},r)=>{let s=Object.fromEntries(i.map(({name:e,type:t,description:n})=>[e,{type:t,description:n}]));return{[`modify${e}`]:{type:r,args:{id:{type:new o(t)},delta:{type:new o(new n({name:`${e}Delta`,fields:s}))}},description:`Changes writable fields of the one ${e} with the given id: ${i.map(({name:e})=>e).join(", ")}. The delta sets only the fields it names and needs at least one; values are in stored units, as the field descriptions say. Returns the entity as it is after the change, including what the configurator adjusted in response, or null when the change caused the entity to be removed.`}}})(e,i)]:[]}),Object.fromEntries(d.map(e=>[e.fieldName,{type:new o(new s({name:z(e.fieldName),description:`What ${e.fieldName} returns, read from the configuration after the change.`,fields:()=>Object.fromEntries(Object.entries(e.result).map(([e,t])=>[e,{type:"edge"===t.kind?(({target:e,list:t,nullable:n},i)=>{let s=t?new r(new o(i(e))):i(e);return n?s:new o(s)})(t,f):t.type,description:t.description}]))})),args:e.args,description:e.description}])))})})({deletableTypes:eN,writableTypes:ew,childRecipes:ec,replaceRecipes:eh,actionFields:eR,objectTypes:ep,anyDomainEntity:eu(E),targetOutputType:ey}),types:[...eg.values(),...ep.values()]})},Y);return void 0===ej?void 0:{sdl:ej,fields:eT,deletableTypes:eN,writableFields:Object.fromEntries(ew.map(({entityType:e,fields:t})=>[e,Object.fromEntries(t.map(({name:e,property:t})=>[e,t]))])),childRecipes:ec,replaceRecipes:eh,fieldOptions:e$,actions:Object.fromEntries(eR.map(({fieldName:e,actionName:t})=>[e,t]))}};
1
+ import{isArray as e}from"@salsita-ai/common/utils";import{buildAssistantManifest as t}from"#package/domain";import{DiagnosticCode as r,diagnosticMessages as i}from"../../../../errors/index.js";import{ASSISTANT_HINTS as n}from"../../../raw-spec/index.js";import{createSchemaRefResolver as s,isNullableSchema as o,phxDefinitionRefName as a}from"../../common/index.js";import{resolveAssistantFieldType as l}from"./assistant-field-type.js";let p="AnyDomainEntity",S={section:"childRecipes",component:"childEntityRecipes",mutation:"addChild"},N={section:"replaceRecipes",component:"replaceEntityRecipes",mutation:"replaceEntity"},T=new Set(["id","type","meta"]),d=new Set(["Query","Mutation","Navigation","RecipeGroup","Recipe","DryRun","DryRunError","FieldOption","JSON","String","Int","Float","Boolean","ID"]),c=(e,t)=>{if(!t||0===t.length)return e;let r=`One of: ${t.map(e=>`"${e}"`).join(", ")}.`;return e?/[.!?]$/.test(e)?`${e} ${r}`:`${e}. ${r}`:r},f=new Set(["id","type"]),m="A string, a message descriptor or a multilingual object; passed without translation.",A=(e,t)=>Object.entries(e).find(([e])=>e===t)?.[1],u=(e,t,{model:r,components:i})=>{let n=new Set([e,...[...r.aliases].filter(([,t])=>t.includes(e)).map(([e])=>e)]);return i.filter(({componentName:e,typeOrAlias:r})=>e===t&&n.has(r)).map(({instanceName:e})=>String(e))},_=(...e)=>n.filter(t=>e.some(e=>e?.includes(t))),E=(e,t,n,s)=>{let{model:o}=n,a=new Map,l=new Map;for(let[p,{groups:S,hints:N}]of Object.entries(e)){let e=o.entityTypes.find(e=>e===p),T=e?[e]:[...o.aliases].find(([e])=>e===p)?.[1];if(!T){s.at(p).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE(t.section,p));continue}for(let[e,o]of(T.forEach(e=>l.set(e,_(l.get(e),N))),Object.entries(S))){let l=s.at(p,"groups",e),S=`${p}.groups.${e}`,N={groupId:o?.as??e,instanceName:e,...o?.description===void 0?{}:{description:o.description},dryRuns:o?.allowDryRuns??!0};for(let s of T){let o=u(s,t.component,n),T=a.get(s)??[],d=T.find(e=>e.group.groupId===N.groupId);o.includes(e)?d?l.error(r.ASSISTANT_DUPLICATE_RECIPE_GROUP,i.ASSISTANT_DUPLICATE_RECIPE_GROUP(t,s,N.groupId,[d.entry,S])):a.set(s,[...T,{group:N,entry:S,entryCtx:l}]):l.error(r.ASSISTANT_UNKNOWN_RECIPE_GROUP,i.ASSISTANT_UNKNOWN_RECIPE_GROUP(t,p,e,s,o))}}}let p=o.entityTypes.flatMap(e=>{let t=a.get(e);return t?[{entityType:e,groups:t}]:[]});return{groups:Object.fromEntries(p.map(({entityType:e,groups:t})=>[e,t.map(({group:e})=>e)])),hints:l,metaEntries:new Map(p.flatMap(({entityType:e,groups:[t]})=>t?[[e,t.entryCtx]]:[]))}},I=e=>`${e}Meta`,O=e=>`${e.charAt(0).toUpperCase()+e.slice(1)}Result`,y=e=>{let t=(({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type))(e);return e.$ref||1!==t.length?e:t[0]},h=(e,t)=>{let{type:r,enumValues:i,localized:n,description:s}=l(e,t),o={...r,nonNull:!1},a=n?`${c(s,i)??""} ${m}`.trim():c(s,i);return{type:{...n?{kind:"scalar",name:"JSON",nonNull:!1}:o,nonNull:r.nonNull},...void 0===a?{}:{description:a}}},g=(t,r)=>{let i=(t=>{let r=y(t),i=r?.type==="array"&&r.items&&!e(r.items)?y(r.items):void 0,n=i??r;if(n?.$ref!==void 0&&"$DomainEntity"===a(n.$ref))return{target:n.references??p,list:void 0!==i}})(t);if(i)return{kind:"edge",...i,nullable:o(t,r),...void 0===t.description?{}:{description:t.description}};let{type:n,enumValues:s,localized:S,description:N}=l(t,r),T=c(N,s);return S?{kind:"value",type:{kind:"scalar",name:"JSON",nonNull:n.nonNull},description:`${N??""} ${m}`.trim()}:{kind:"value",type:n,...void 0===T?{}:{description:T}}},v=(e,t)=>{let{type:r,enumValues:i,localized:n,description:s}=l(e,t);return{type:{kind:"value",type:r},localized:!0===n,description:s,enumValues:i}},R=(e,t,n,s,o)=>{let a=t.startsWith("$")?((e,t,n,s)=>{let o=((e,t,{expressions:r,entityTypes:i})=>{let n=i.find(t=>t===e);for(let i of void 0===n?[e]:r.entityExpressions.get(n)?.shapeGroups??[]){let e=[...r.expressions.get(i)?.values()??[]].find(e=>e.name===t);if(e?.declaredSchema)return{implementation:e.implementation,declaredSchema:e.declaredSchema}}})(e.name,t,n);if(!o)return void s.error(r.ASSISTANT_UNKNOWN_FIELD,i.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t));let{implementation:a}=o;if("violations"===a.kind)return void s.error(r.ASSISTANT_UNSUPPORTED_EXPRESSION,i.ASSISTANT_UNSUPPORTED_EXPRESSION(e.name,t));if("relation"===a.kind){let[{target:e,cardinality:t}]=a.params;return{type:{kind:"edge",target:e,cardinality:t},localized:!1,description:void 0}}return v(o.declaredSchema,n.resolveRef)})(e,t,s,o):((e,t,{resolveRef:n},s)=>{let o=Object.entries(e.shape.properties).find(([e])=>e===t)?.[1];return o?v(o,n):void s.error(r.ASSISTANT_UNKNOWN_FIELD,i.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t))})(e,t,s,o);if(!a)return;let l=n?.as??(t.startsWith("$")?`_${t.slice(1)}`:t);return T.has(l)?void o.error(r.ASSISTANT_RESERVED_FIELD_NAME,i.ASSISTANT_RESERVED_FIELD_NAME(e.name,t,l)):{name:l,source:t,type:a.type,localized:a.localized,description:c(n?.description??a.description,a.enumValues),describedByManifest:n?.description!==void 0,enumValues:a.enumValues,valueDescription:n?.description??a.description}},M=(e,t,n,s,o)=>{let a=new Map,l=new Set(n);for(let s of[...t.flat(),...n]){let t=a.get(s.name);t?t.source!==s.source?o.error(r.ASSISTANT_FIELD_NAME_CONFLICT,i.ASSISTANT_FIELD_NAME_CONFLICT(e,s.name,[t.source,s.source])):l.has(s)&&s.describedByManifest&&a.set(s.name,{...t,description:s.description,describedByManifest:!0,valueDescription:s.valueDescription}):a.set(s.name,s)}return[...a.values()].map(e=>{let t=e.enumValues&&s(e.source);return t?{...e,enumValues:t,description:c(e.valueDescription,t)}:e})};export const resolveAssistantManifest=(e,{model:t,states:n,phxDefinitions:o,expressions:a,components:T,actions:y},v)=>{let b=v.errors.length,D=v.at("entities"),C=s(t.commonTypes,o);for(let e of t.resolvedShapes.keys())d.has(e)&&v.error(r.ASSISTANT_RESERVED_TYPE_NAME,i.ASSISTANT_RESERVED_TYPE_NAME(e,[...d]));let P=((e,t,r)=>{let i=new Map;for(let n of e){let e=[];for(let[i,s]of Object.entries(n.entries)){let o=R(n,i,s,t,r.at(n.name,i));o&&e.push(o)}i.set(n.name,e)}return i})(((e,t,n)=>{let s=[];for(let[r,i]of t.resolvedShapes){let t=e[r];t&&s.push({name:r,shape:i,entries:t})}let o=new Set(t.resolvedShapes.keys());for(let t of Object.keys(e))o.has(t)||n.at(t).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE("entities",t));return s})(e.entities??{},t,D),{resolveRef:C,expressions:a,entityTypes:t.entityTypes},D),U=M(p,[],P.get(p)??[],()=>void 0,v),j=new Map([[p,U]]);for(let e of t.aliases.keys())e!==p&&j.set(e,M(e,[U],P.get(e)??[],()=>void 0,v));for(let e of t.entityTypes){let r=[p,...[...t.aliases].filter(([t,r])=>t!==p&&r.includes(e)).map(([e])=>e)],i=[...t.resolvedShapes].find(([t])=>t===e)?.[1];j.set(e,M(e,r.map(e=>j.get(e)??[]),P.get(e)??[],e=>{let t=Object.entries(i?.properties??{}).find(([t])=>t===e)?.[1];return t&&l(t,C).enumValues},v))}let L=Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries((j.get(e)??[]).map(({name:e,source:t,localized:r})=>[e,r?{source:t,localized:!0}:{source:t}]))])),$=E(e.childRecipes??{},S,{model:t,components:T},v.at("childRecipes")),w=E(e.replaceRecipes??{},N,{model:t,components:T},v.at("replaceRecipes")),W=((e,t,n)=>{let s=new Set;for(let o of Object.keys(e)){let e=t.entityTypes.find(e=>e===o),a=e?[e]:[...t.aliases].find(([e])=>e===o)?.[1];a?a.forEach(e=>s.add(e)):n.at(o).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE("deletable",o))}return t.entityTypes.filter(e=>s.has(e))})(e.deletable??{},t,v.at("deletable")),F=((e,t,n)=>{let{model:s}=t,o=((e,t,n)=>{let s=new Map;for(let[o,a]of Object.entries(e)){let e=t.entityTypes.find(e=>e===o),l=e?[e]:[...t.aliases].find(([e])=>e===o)?.[1],p=[...t.resolvedShapes].find(([e])=>e===o)?.[1];if(!l||!p){n.at(o).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE("writable",o));continue}for(let e of Object.keys(a)){let t=n.at(o,e);e.startsWith("$")||f.has(e)?t.error(r.ASSISTANT_NOT_WRITABLE,i.ASSISTANT_NOT_WRITABLE(o,e)):A(p.properties,e)?l.forEach(t=>{let r=s.get(t)??new Map;s.set(t,r.has(e)?r:r.set(e,o))}):t.error(r.ASSISTANT_UNKNOWN_FIELD,i.ASSISTANT_UNKNOWN_FIELD("writable",o,e))}}return s})(e,s,n);return s.entityTypes.flatMap(e=>{let a=[...s.resolvedShapes].find(([t])=>t===e)?.[1],p=[...o.get(e)??[]].flatMap(([s,o])=>{let p=a&&A(a.properties,s);return(p&&((e,{property:t,writableKey:n},s,{resolveRef:o,exposed:a,sources:p},S)=>{let N=Object.entries(A(p,e)??{}),T=a.get(e)?.find(({source:e})=>e===t)?.name??N.find(([,{source:e}])=>e===t)?.[0],d=void 0===T?N.find(([e])=>e===t)?.[1]:void 0;if(d)return void S.at(n,t).error(r.ASSISTANT_FIELD_NAME_CONFLICT,i.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[d.source,t],`${n}.${t}`));let{type:f,enumValues:u,localized:_,description:E}=l(s,o),I={...f,nonNull:!1},O=T??t,y=void 0===T?c(E,u):void 0;return _?{name:O,property:t,type:{kind:"scalar",name:"JSON",nonNull:!1},description:y?`${y} ${m}`:m}:{name:O,property:t,type:I,...void 0===y?{}:{description:y}}})(e,{property:s,writableKey:o},p,t,n))??[]});return p.length>0?[{entityType:e,fields:p}]:[]})})(e.writable??{},{model:t,resolveRef:C,exposed:P,sources:L},v.at("writable")),k=((e,t,n,s)=>{let{model:o}=n,a=new Map;for(let[l,p]of Object.entries(e)){let e=o.entityTypes.find(e=>e===l),T=e?[e]:[...o.aliases].find(([e])=>e===l)?.[1]??[];for(let[e,o]of Object.entries(p)){let p=o?.options;if(!p)continue;let d=s.at(l,e,"options"),c=`${l}.${e}`;for(let s of T){let o=t.find(e=>e.entityType===s)?.fields.find(t=>t.property===e);if(!o)continue;let l=p.as??`${o.name}Options`,T=u(s,p.componentType,n),f=a.get(s)??[],m=f.find(e=>e.options.edgeName===l||e.options.field===o.name);if(T.includes(p.instanceName))if(l===S.section||l===N.section)d.error(r.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME,i.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME(c,l,o.name));else if(m)d.error(r.ASSISTANT_DUPLICATE_OPTIONS_EDGE,i.ASSISTANT_DUPLICATE_OPTIONS_EDGE(s,m.options.edgeName===l?{edgeName:l}:{field:o.name},[m.entry,c]));else{let e={field:o.name,edgeName:l,componentType:p.componentType,instanceName:p.instanceName,validate:p.validate??!0,dryRuns:p.allowDryRuns??!0};a.set(s,[...f,{options:e,hints:_(p.hints),entry:c,entryCtx:d}])}else d.error(r.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT,i.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT(c,p,s,T))}}}return a})(e.writable??{},F,{model:t,components:T},v.at("writable"));var K=[$.metaEntries,w.metaEntries,new Map([...k].flatMap(([e,[t]])=>t?[[e,t.entryCtx]]:[]))];for(let e of t.entityTypes){let n=K.flatMap(t=>t.get(e)??[])[0],s=I(e);n&&[...t.resolvedShapes.keys()].some(e=>e===s)&&n.error(r.ASSISTANT_META_TYPE_NAME_CONFLICT,i.ASSISTANT_META_TYPE_NAME_CONFLICT(e,s))}let Y=t.entityTypes.filter(e=>($.groups[e]?.length??0)>0||(w.groups[e]?.length??0)>0||(k.get(e)?.length??0)>0).map(I),V=((e,{actions:t,resolveRef:n,builtInMutations:s,typeNames:o},a)=>{let l=[],p=[...t.values()].map(e=>String(e.name));for(let[S,N]of Object.entries(e)){let e=a.at(S),T=[...t.values()].find(e=>e.name===S);if(!T){e.error(r.ASSISTANT_UNKNOWN_ACTION,i.ASSISTANT_UNKNOWN_ACTION(S,p));continue}let d=N?.as??S,c=l.find(e=>e.fieldName===d),f=O(d);if(s.has(d)||c){e.error(r.ASSISTANT_MUTATION_NAME_CONFLICT,i.ASSISTANT_MUTATION_NAME_CONFLICT(S,d,c?`"assistant.actions.${c.actionName}" already exposes`:"the built-in mutation of that name already takes"));continue}if(o.has(f)||l.some(e=>O(e.fieldName)===f)){e.error(r.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT,i.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT(S,d,f));continue}let m=N?.description??T.description;l.push({fieldName:d,actionName:S,...void 0===m?{}:{description:m},args:Object.fromEntries(Object.entries(T.params).map(([e,{schema:t}])=>[e,h(t,n)])),result:Object.fromEntries(Object.entries(T.result).map(([e,t])=>[e,g(t,n)]))})}return l})(e.actions??{},{actions:y,resolveRef:C,builtInMutations:new Set(["deleteEntity",S.mutation,N.mutation,...F.map(({entityType:e})=>`modify${e}`)]),typeNames:new Set([...d,...t.resolvedShapes.keys(),...Y])},v.at("actions"));if(!(v.errors.length>b))return{entityTypes:t.entityTypes,aliases:Object.fromEntries(t.aliases),exampleType:t.rootEntityTypes[0]??t.entityTypes[0],states:{navigationStates:n.navigationStates,viewStates:n.viewStates,toolStates:n.toolStates},deletableTypes:W,writableTypes:F,actionFields:V,childRecipes:Object.fromEntries(Object.entries($.groups).map(([e,t])=>[e,{groups:t,hints:$.hints.get(e)??[]}])),replaceRecipes:Object.fromEntries(Object.entries(w.groups).map(([e,t])=>[e,{groups:t,hints:w.hints.get(e)??[]}])),optionsEdges:Object.fromEntries([...k].map(([e,t])=>[e,t.map(({options:e,hints:t})=>({options:e,hints:t}))])),fields:Object.fromEntries([...j].map(([e,t])=>[e,t.map(e=>({name:e.name,source:e.source,localized:e.localized,type:e.type,...void 0===e.description?{}:{description:e.description}}))]))}};export const createAssistantSchema=(e,n,s)=>{let o=resolveAssistantManifest(e,n,s);if(o)try{return{...t(o),resolved:o}}catch(e){s.error(r.ASSISTANT_INVALID_SCHEMA,i.ASSISTANT_INVALID_SCHEMA([e instanceof Error?e.message:String(e)]));return}};
@@ -4,8 +4,8 @@ import type { MergedAssistant } from '../../../merge/index.js';
4
4
  /**
5
5
  * The part of the assistant manifest only the server reads: the integrator's instructions for the
6
6
  * assistant and the AI settings it runs with. It is kept beside `AssistantSpec`, never inside it,
7
- * because `AssistantSpec` is serialized into the application bundle and into hot reload, and these
8
- * must not reach the browser of a customer. Deployment registration uploads them. `null` when the
7
+ * because its resolved manifest is serialized into the application bundle and into hot reload, and these
8
+ * must not reach the browser of a customer. The generated webhook bundle carries them for server-side setup resolution. `null` when the
9
9
  * application declares no `assistant` section.
10
10
  */
11
11
  export type AssistantServerSettings = Branded<'AssistantServerSettings', {
@@ -1,27 +1,11 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
2
  import type { ParseContext } from '../../../../core/index.js';
3
3
  import type { MergedAssistant } from '../../../merge/index.js';
4
- import type { EntityTypeName } from '../../model/index.js';
5
- import { type AssistantActions, type AssistantFieldOptionsByType, type AssistantFieldSources, type AssistantRecipeGroups, type AssistantSchemaInput, type AssistantWritableFields } from './assistant-schema.js';
4
+ import { type AssistantSchema, type AssistantSchemaInput } from './assistant-schema.js';
6
5
  /**
7
- * The experimental assistant manifest with its GraphQL SDL, prepared once at parse time so the
8
- * `.phoenix` codegen, the in-browser hot-reload runtime and deployment registration all carry the
9
- * exact same schema text. `fields` maps exposed GraphQL fields back to the stored fields and
10
- * expressions the runtime resolvers read; `deletableTypes` lists the entity types `deleteEntity`
11
- * may delete; `writableFields` maps the delta fields of each `modify<Type>` mutation to the stored
12
- * properties they write; `childRecipes` and `replaceRecipes` list the recipe groups each entity type exposes; `fieldOptions` lists
13
- * the options edges of each entity type's writable fields; `actions` maps each custom `Mutation`
14
- * field to the declared action it runs. `null` when the application declares no `assistant`
15
- * section or it is invalid.
6
+ * The validated built assistant schema and its JSON-only resolved input. Parsing constructs the
7
+ * schema to retain diagnostics; code generation and hot reload carry `resolved`, while deployment
8
+ * registration consumes the built SDL and resolver metadata. Null without a valid assistant section.
16
9
  */
17
- export type AssistantSpec = Branded<'AssistantSpec', {
18
- readonly sdl: string;
19
- readonly fields: AssistantFieldSources;
20
- readonly deletableTypes: readonly EntityTypeName[];
21
- readonly writableFields: AssistantWritableFields;
22
- readonly childRecipes: AssistantRecipeGroups;
23
- readonly replaceRecipes: AssistantRecipeGroups;
24
- readonly fieldOptions: AssistantFieldOptionsByType;
25
- readonly actions: AssistantActions;
26
- }> | null;
10
+ export type AssistantSpec = Branded<'AssistantSpec', AssistantSchema> | null;
27
11
  export declare const AssistantSpec: (merged: MergedAssistant, input: AssistantSchemaInput, ctx: ParseContext) => AssistantSpec;
@@ -5,6 +5,8 @@ import { Env } from './env.js';
5
5
  /**
6
6
  * Validated infrastructure settings — env vars, ACL, resources.
7
7
  * Used by codegen for builder chain methods and env reader generation.
8
+ * No two entries of `resources` share a name: generated code and webhooks
9
+ * identify a resource by its name alone.
8
10
  * `env` is a `Env`-branded value once validated (keys conform to
9
11
  * `/^[A-Z_][A-Z0-9_]*$/`), or `undefined` when no `env:` block was declared.
10
12
  */