@salsita-ai/sdk 0.50.0-develop.bfba230ad7 → 0.50.0-develop.d37f5db8ff

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 (922) 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 +4 -0
  4. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  5. package/dist/application-spec/errors/diagnostic-messages.d.ts +4 -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-domain-block.js +46 -44
  25. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +1 -1
  26. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  27. package/dist/application-spec/generate-application/code/templates/domain-spec.js +4 -4
  28. package/dist/application-spec/generate-application/code/templates/domain.js +5 -5
  29. package/dist/application-spec/generate-application/code/templates/index.d.ts +0 -7
  30. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  31. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  32. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +66 -42
  33. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +1 -1
  34. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +13 -14
  35. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +6 -9
  36. package/dist/application-spec/generate-application/code/templates/webhook-builders.js +9 -4
  37. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -2
  38. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +4 -3
  39. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.js +1 -1
  40. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  41. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  42. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  43. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +5 -0
  44. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  45. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
  46. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
  47. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
  48. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
  49. package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
  50. package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
  51. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.d.ts +3 -8
  52. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.js +1 -1
  53. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +9 -43
  54. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  55. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-server-settings.d.ts +2 -2
  56. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.d.ts +5 -21
  57. package/dist/client/authorized-client.d.ts +3 -1
  58. package/dist/client/authorized-client.js +1 -1
  59. package/dist/client/contract.d.ts +34 -0
  60. package/dist/client/contract.js +1 -1
  61. package/dist/client/index.d.ts +2 -2
  62. package/dist/client/index.js +1 -1
  63. package/dist/client/local-authorized-client.d.ts +3 -1
  64. package/dist/client/local-authorized-client.js +1 -1
  65. package/dist/client/memory-authorized-client.d.ts +3 -1
  66. package/dist/client/memory-authorized-client.js +1 -1
  67. package/dist/client/phoenix-api.d.ts +271 -30
  68. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +104 -5
  69. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  70. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  71. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  72. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +1 -1
  73. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +6 -0
  74. package/dist/configurator/pages/DefaultConfiguratorLayout.js +1 -0
  75. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  76. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  77. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +2 -1
  78. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  79. package/dist/configurator/ui/assistant/AssistantThread.d.ts +6 -2
  80. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  81. package/dist/configurator/ui/assistant/thread-items.d.ts +13 -2
  82. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  83. package/dist/configurator/ui/assistant/tool-chip.d.ts +8 -1
  84. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  85. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +4 -4
  86. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  87. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +4 -4
  88. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  89. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +47 -0
  90. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -0
  91. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +11 -26
  92. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.js +1 -1
  93. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +100 -117
  94. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +18 -12
  95. package/dist/docs/complex-use-cases/sketching.mdx +0 -38
  96. package/dist/docs/controls/select-attribute/cardselect.mdx +9 -13
  97. package/dist/docs/index.json +1 -1
  98. package/dist/docs/integrations/woocommerce/local-development.mdx +1 -1
  99. package/dist/docs/layouts/custom-price.mdx +14 -16
  100. package/dist/docs/layouts/sidebar/tabs.mdx +24 -21
  101. package/dist/docs/other-features/domain-actions.mdx +1 -1
  102. package/dist/docs/other-features/side-effects.mdx +50 -45
  103. package/dist/docs/other-features/transformers.mdx +1 -1
  104. package/dist/docs/other-features/violation-messages.mdx +52 -56
  105. package/dist/docs/phoenix/admin.mdx +9 -24
  106. package/dist/docs/phoenix/configurator-interface.mdx +100 -65
  107. package/dist/docs/phoenix/deployments.mdx +1 -1
  108. package/dist/docs/phoenix/domain-model.mdx +4 -0
  109. package/dist/docs/phoenix/expression-context.mdx +11 -3
  110. package/dist/docs/phoenix/getting-started.mdx +1 -1
  111. package/dist/docs/phoenix/localization.mdx +3 -22
  112. package/dist/docs/phoenix/phoenix-cli.mdx +43 -47
  113. package/dist/docs/phoenix/project-structure.mdx +22 -10
  114. package/dist/docs/phoenix/quickstart.mdx +2 -2
  115. package/dist/docs/phoenix/sdk-builder-workflow.mdx +8 -8
  116. package/dist/docs/phoenix/webhooks.mdx +1 -1
  117. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +15 -13
  118. package/dist/docs/relations/hierarchy.mdx +13 -2
  119. package/dist/docs/ux-guidelines/choosing-a-control.mdx +11 -0
  120. package/dist/domain/admin-domain/__generated/enhanced-model.d.ts +1 -2
  121. package/dist/domain/admin-domain/__generated/model/versions/v1.d.ts +1 -1
  122. package/dist/domain/admin-domain/__generated/model/versions/v2.d.ts +1 -1
  123. package/dist/domain/admin-domain/__generated/model/versions/v3.d.ts +1 -1
  124. package/dist/domain/admin-domain/__generated/model/versions/v4.d.ts +1 -1
  125. package/dist/domain/admin-domain/__generated/model/versions/v5.d.ts +1 -1
  126. package/dist/domain/admin-domain/__generated/model/versions/v6.d.ts +2 -2
  127. package/dist/domain/admin-domain/__generated/model/versions/v6.js +1 -1
  128. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -14
  129. package/dist/domain/admin-domain/implementation/common-admin-migrations.d.ts +1 -1
  130. package/dist/domain/admin-domain/index.d.ts +9 -5
  131. package/dist/domain/admin-domain/index.js +1 -1
  132. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  133. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  134. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  135. package/dist/domain/application/admin-page-factories.d.ts +1 -2
  136. package/dist/domain/application/application-config.d.ts +24 -95
  137. package/dist/domain/application/assistant/assistant-manifest.d.ts +63 -0
  138. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +95 -0
  139. package/dist/domain/application/assistant/assistant-value-type.d.ts +9 -0
  140. package/dist/domain/application/assistant/assistant-value-type.js +1 -0
  141. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +4 -0
  142. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -0
  143. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  144. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -0
  145. package/dist/domain/application/assistant/index.d.ts +4 -0
  146. package/dist/domain/application/assistant/index.js +1 -0
  147. package/dist/domain/application/assistant-field-options.d.ts +2 -3
  148. package/dist/domain/application/assistant-mutations.d.ts +3 -5
  149. package/dist/domain/application/assistant-mutations.js +1 -1
  150. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -7
  151. package/dist/domain/application/configurator-builder.d.ts +33 -18
  152. package/dist/domain/application/configurator-builder.js +1 -1
  153. package/dist/domain/application/create-initial-published-data.d.ts +1 -2
  154. package/dist/domain/application/index.d.ts +3 -5
  155. package/dist/domain/application/index.js +1 -1
  156. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  157. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  158. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  159. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  160. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  161. package/dist/domain/application/published-data/build-legend-data.d.ts +1 -1
  162. package/dist/domain/application/published-data/create-finalize-admin-domain.d.ts +1 -2
  163. package/dist/domain/application/published-data/format-field-type.d.ts +1 -1
  164. package/dist/domain/application/published-data/map-data-to-sheet.d.ts +1 -1
  165. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +2 -2
  166. package/dist/domain/application/published-data/map-published-data.d.ts +1 -2
  167. package/dist/domain/application/published-data/validate-sheet-data.d.ts +1 -1
  168. package/dist/domain/available-system-components.js +1 -1
  169. package/dist/domain/core/action/action-factory.d.ts +11 -0
  170. package/dist/domain/core/{action.d.ts → action/action.d.ts} +22 -18
  171. package/dist/domain/core/action/index.d.ts +2 -0
  172. package/dist/domain/core/action/index.js +1 -0
  173. package/dist/domain/{components → core/component}/component-reader-types.d.ts +1 -2
  174. package/dist/domain/{components → core/component}/debug-state-component.d.ts +1 -1
  175. package/dist/domain/core/component/debug-state-component.js +1 -0
  176. package/dist/domain/core/component/domain-component-optic.d.ts +66 -0
  177. package/dist/domain/core/component/domain-component-optic.js +16 -0
  178. package/dist/domain/{components → core/component}/drag-state-component.d.ts +1 -1
  179. package/dist/domain/core/component/drag-state-component.js +1 -0
  180. package/dist/domain/{components → core/component}/export-state-component.d.ts +1 -1
  181. package/dist/domain/core/component/export-state-component.js +1 -0
  182. package/dist/domain/{components → core/component}/fullscreen-state-component.d.ts +1 -1
  183. package/dist/domain/core/component/fullscreen-state-component.js +1 -0
  184. package/dist/domain/{components → core/component}/group-components-by-entity-id-and-name.d.ts +1 -2
  185. package/dist/domain/core/component/group-components-by-entity-id-and-name.js +1 -0
  186. package/dist/domain/{components → core/component}/hover-state-component.d.ts +1 -1
  187. package/dist/domain/core/component/hover-state-component.js +1 -0
  188. package/dist/domain/core/component/index.d.ts +18 -0
  189. package/dist/domain/core/component/index.js +1 -0
  190. package/dist/domain/{components → core/component}/legacy-filter.d.ts +4 -19
  191. package/dist/domain/{components → core/component}/navigation-state-component.d.ts +1 -1
  192. package/dist/domain/core/component/navigation-state-component.js +1 -0
  193. package/dist/domain/{components → core/component}/selection-state-component.d.ts +1 -1
  194. package/dist/domain/core/component/selection-state-component.js +1 -0
  195. package/dist/domain/{components → core/component}/system-component-builder.d.ts +1 -2
  196. package/dist/domain/core/component/system-component-builder.js +1 -0
  197. package/dist/domain/{components → core/component}/system-component-filter.d.ts +25 -20
  198. package/dist/domain/core/component/system-virtual-entity.js +1 -0
  199. package/dist/domain/{components → core/component}/tool-state-component.d.ts +1 -1
  200. package/dist/domain/core/component/tool-state-component.js +1 -0
  201. package/dist/domain/{components → core/component}/updates.d.ts +1 -2
  202. package/dist/domain/{components → core/component}/view-state-component.d.ts +1 -1
  203. package/dist/domain/core/component/view-state-component.js +1 -0
  204. package/dist/domain/{components → core/component}/viewport-state-component.d.ts +1 -1
  205. package/dist/domain/core/component/viewport-state-component.js +1 -0
  206. package/dist/domain/core/data-schema/data-cell-value.d.ts +4 -0
  207. package/dist/domain/core/data-schema/data-schema-array-field.d.ts +5 -0
  208. package/dist/domain/core/data-schema/data-schema-field-object.d.ts +4 -0
  209. package/dist/domain/core/data-schema/data-schema-field.d.ts +2 -0
  210. package/dist/domain/core/data-schema/data-schema-field.js +1 -0
  211. package/dist/domain/core/data-schema/data-schema-localized-field.d.ts +4 -0
  212. package/dist/domain/core/data-schema/data-schema-localized-field.js +1 -0
  213. package/dist/domain/core/data-schema/data-schema-primitive-field.d.ts +5 -0
  214. package/dist/domain/core/data-schema/data-schema-primitive-field.js +1 -0
  215. package/dist/domain/core/data-schema/data-schema.d.ts +2 -0
  216. package/dist/domain/core/data-schema/data-schema.js +1 -0
  217. package/dist/domain/core/data-schema/index.d.ts +7 -0
  218. package/dist/domain/core/data-schema/index.js +1 -0
  219. package/dist/domain/core/decoder/create-decoder.d.ts +6 -0
  220. package/dist/domain/core/decoder/create-decoder.js +1 -0
  221. package/dist/domain/core/decoder/decoder.d.ts +6 -0
  222. package/dist/domain/core/decoder/decoder.js +1 -0
  223. package/dist/domain/core/decoder/index.d.ts +2 -0
  224. package/dist/domain/core/decoder/index.js +1 -0
  225. package/dist/domain/core/domain-factory.d.ts +4 -5
  226. package/dist/domain/core/domain-factory.js +1 -1
  227. package/dist/domain/core/domain.d.ts +4 -5
  228. package/dist/domain/core/domain.js +1 -1
  229. package/dist/domain/core/emission/index.d.ts +8 -0
  230. package/dist/domain/core/emission/index.js +1 -0
  231. package/dist/domain/core/emission/reset-state-emission.d.ts +12 -0
  232. package/dist/domain/core/emission/reset-state-emission.js +1 -0
  233. package/dist/domain/core/emission/state-emission.d.ts +4 -0
  234. package/dist/domain/core/emission/state-emission.js +1 -0
  235. package/dist/domain/core/emission/state-update-emission.d.ts +14 -0
  236. package/dist/domain/core/emission/state-update-emission.js +1 -0
  237. package/dist/domain/core/emission/state-validation-result.d.ts +18 -0
  238. package/dist/domain/core/emission/state-validation-result.js +1 -0
  239. package/dist/domain/core/emission/transformation-log.d.ts +2 -0
  240. package/dist/domain/core/emission/transformation-log.js +1 -0
  241. package/dist/domain/core/emission/transformer-log-entry.d.ts +6 -0
  242. package/dist/domain/core/emission/transformer-log-entry.js +1 -0
  243. package/dist/domain/core/emission/transformer-log.d.ts +11 -0
  244. package/dist/domain/core/emission/transformer-log.js +1 -0
  245. package/dist/domain/core/emission/transformer-phase.d.ts +1 -0
  246. package/dist/domain/core/emission/transformer-phase.js +1 -0
  247. package/dist/domain/core/expression/aliased-expressions.d.ts +10 -0
  248. package/dist/domain/core/expression/aliased-expressions.js +1 -0
  249. package/dist/domain/{expressions → core/expression}/constant-expressions.d.ts +3 -4
  250. package/dist/domain/core/expression/constant-expressions.js +1 -0
  251. package/dist/domain/core/expression/custom-expression.d.ts +25 -0
  252. package/dist/domain/core/expression/custom-expression.js +1 -0
  253. package/dist/domain/core/expression/expression.d.ts +46 -0
  254. package/dist/domain/core/expression/expression.js +1 -0
  255. package/dist/domain/core/expression/index.d.ts +4 -0
  256. package/dist/domain/core/expression/index.js +1 -0
  257. package/dist/domain/core/index.d.ts +13 -17
  258. package/dist/domain/core/index.js +1 -1
  259. package/dist/domain/{invariants → core/invariant}/builtin-invariant.d.ts +2 -2
  260. package/dist/domain/core/invariant/custom-invariants.d.ts +13 -0
  261. package/dist/domain/core/invariant/custom-invariants.js +1 -0
  262. package/dist/domain/core/invariant/index.d.ts +5 -0
  263. package/dist/domain/core/invariant/index.js +1 -0
  264. package/dist/domain/core/invariant/invariants.d.ts +10 -0
  265. package/dist/domain/core/invariant/invariants.js +1 -0
  266. package/dist/domain/core/invariant/violation-component.js +1 -0
  267. package/dist/domain/{invariants → core/invariant}/violation.d.ts +2 -2
  268. package/dist/domain/core/{component.d.ts → model/component.d.ts} +1 -1
  269. package/dist/domain/core/model/index.d.ts +6 -0
  270. package/dist/domain/core/model/index.js +1 -0
  271. package/dist/domain/core/{reflection.d.ts → model/reflection.d.ts} +1 -1
  272. package/dist/domain/core/model/reflection.js +1 -0
  273. package/dist/domain/core/recipe/index.d.ts +1 -0
  274. package/dist/domain/core/recipe/index.js +1 -0
  275. package/dist/domain/{domain-context/recipe-system → core/recipe}/recipes.d.ts +1 -3
  276. package/dist/domain/core/recipe/recipes.js +1 -0
  277. package/dist/domain/{relations → core/relation}/all-of-type-relation.d.ts +3 -4
  278. package/dist/domain/core/relation/all-of-type-relation.js +1 -0
  279. package/dist/domain/{relations → core/relation}/component-factories.d.ts +1 -2
  280. package/dist/domain/core/relation/component-factories.js +1 -0
  281. package/dist/domain/{relations → core/relation}/composed-of.d.ts +1 -1
  282. package/dist/domain/core/relation/composed-of.js +1 -0
  283. package/dist/domain/{relations → core/relation}/direct-relation.d.ts +2 -3
  284. package/dist/domain/core/relation/index.d.ts +9 -0
  285. package/dist/domain/core/relation/index.js +1 -0
  286. package/dist/domain/{relations → core/relation}/indirect-relation.d.ts +3 -4
  287. package/dist/domain/core/relation/indirect-relation.js +1 -0
  288. package/dist/domain/{relations → core/relation}/reference-component.d.ts +4 -5
  289. package/dist/domain/core/relation/reference-component.js +1 -0
  290. package/dist/domain/{relations → core/relation}/reference-field.d.ts +1 -1
  291. package/dist/domain/core/relation/reference-field.js +1 -0
  292. package/dist/domain/{relations → core/relation}/relation-factory.d.ts +2 -3
  293. package/dist/domain/{relations → core/relation}/relation-implementation.d.ts +3 -4
  294. package/dist/domain/core/relation/relation-implementation.js +1 -0
  295. package/dist/domain/core/schema/enhanced-json-schema.js +1 -0
  296. package/dist/domain/core/schema/extended-schema-validator.js +1 -0
  297. package/dist/domain/core/schema/index.d.ts +3 -0
  298. package/dist/domain/core/schema/index.js +1 -0
  299. package/dist/domain/core/schema/schema-validator.js +1 -0
  300. package/dist/domain/core/state/id-sequence.d.ts +15 -0
  301. package/dist/domain/core/state/id-sequence.js +1 -0
  302. package/dist/domain/core/state/index.d.ts +3 -0
  303. package/dist/domain/core/state/index.js +1 -0
  304. package/dist/domain/core/{migrations.d.ts → state/migrations.d.ts} +15 -47
  305. package/dist/domain/core/state/migrations.js +1 -0
  306. package/dist/domain/core/{state.d.ts → state/state.d.ts} +1 -2
  307. package/dist/domain/domain-builder.d.ts +11 -11
  308. package/dist/domain/domain-builder.js +1 -1
  309. package/dist/domain/domain-context/action-system/action-system.d.ts +2 -4
  310. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  311. package/dist/domain/domain-context/action-system/index.d.ts +1 -0
  312. package/dist/domain/domain-context/action-system/index.js +1 -0
  313. package/dist/domain/domain-context/analytics-system/index.d.ts +2 -0
  314. package/dist/domain/domain-context/analytics-system/index.js +1 -0
  315. package/dist/domain/domain-context/create-transformer.d.ts +2 -2
  316. package/dist/domain/domain-context/dimension-system/dimension-state.js +1 -1
  317. package/dist/domain/domain-context/dimension-system/dimension-system.d.ts +3 -4
  318. package/dist/domain/domain-context/dimension-system/dimension-system.js +1 -1
  319. package/dist/domain/domain-context/dimension-system/index.d.ts +1 -0
  320. package/dist/domain/domain-context/dimension-system/index.js +1 -0
  321. package/dist/domain/domain-context/domain-context-systems.d.ts +8 -10
  322. package/dist/domain/domain-context/index.d.ts +8 -18
  323. package/dist/domain/domain-context/index.js +1 -1
  324. package/dist/domain/domain-context/navigation-system/index.d.ts +3 -0
  325. package/dist/domain/domain-context/navigation-system/index.js +1 -0
  326. package/dist/domain/domain-context/navigation-system/navigation-system.d.ts +5 -8
  327. package/dist/domain/domain-context/navigation-system/navigation-system.js +1 -1
  328. package/dist/domain/domain-context/navigation-system/navigation-updates.d.ts +1 -12
  329. package/dist/domain/domain-context/navigation-system/navigation-updates.js +1 -1
  330. package/dist/domain/domain-context/navigation-system/selection-transformers.d.ts +2 -2
  331. package/dist/domain/domain-context/navigation-system/selection-transformers.js +1 -1
  332. package/dist/domain/domain-context/recipe-system/index.d.ts +1 -0
  333. package/dist/domain/domain-context/recipe-system/index.js +1 -0
  334. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.d.ts +2 -4
  335. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.js +1 -1
  336. package/dist/domain/domain-context/relation-transformers/cascade-deletes.d.ts +3 -3
  337. package/dist/domain/domain-context/relation-transformers/cascade-deletes.js +1 -1
  338. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.d.ts +3 -3
  339. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.js +1 -1
  340. package/dist/domain/domain-context/relation-transformers/create-entity-refs.d.ts +3 -3
  341. package/dist/domain/domain-context/relation-transformers/create-entity-refs.js +2 -2
  342. package/dist/domain/domain-context/relation-transformers/index.d.ts +4 -0
  343. package/dist/domain/domain-context/relation-transformers/index.js +1 -0
  344. package/dist/domain/domain-context/relation-transformers/replace-refs.d.ts +3 -3
  345. package/dist/domain/domain-context/relation-transformers/replace-refs.js +1 -1
  346. package/dist/domain/domain-context/store-system/apply-updates.d.ts +1 -3
  347. package/dist/domain/domain-context/store-system/apply-updates.js +1 -1
  348. package/dist/domain/domain-context/store-system/index.d.ts +4 -0
  349. package/dist/domain/domain-context/store-system/index.js +1 -0
  350. package/dist/domain/domain-context/store-system/next-domain-entity-id.d.ts +1 -13
  351. package/dist/domain/domain-context/store-system/next-domain-entity-id.js +1 -1
  352. package/dist/domain/domain-context/store-system/reconcile-projected-entities.d.ts +1 -2
  353. package/dist/domain/domain-context/store-system/reconcile-projected-entities.js +1 -1
  354. package/dist/domain/domain-context/store-system/store-system.d.ts +2 -39
  355. package/dist/domain/domain-context/store-system/store-system.js +2 -2
  356. package/dist/domain/domain-context/store-system/system-state.d.ts +2 -4
  357. package/dist/domain/domain-context/store-system/system-state.js +1 -1
  358. package/dist/domain/domain-context/transformers/actions-builder.d.ts +1 -2
  359. package/dist/domain/domain-context/transformers/actions-builder.js +1 -1
  360. package/dist/domain/domain-context/transformers/auto-snap-transformer.d.ts +6 -10
  361. package/dist/domain/domain-context/transformers/auto-snap-transformer.js +1 -1
  362. package/dist/domain/domain-context/transformers/chain-builder.d.ts +3 -3
  363. package/dist/domain/domain-context/transformers/context.d.ts +2 -7
  364. package/dist/domain/domain-context/transformers/context.js +1 -1
  365. package/dist/domain/domain-context/transformers/entity-builder.d.ts +1 -5
  366. package/dist/domain/domain-context/transformers/entity-builder.js +1 -1
  367. package/dist/domain/domain-context/transformers/index.d.ts +1 -1
  368. package/dist/domain/domain-context/transformers/index.js +1 -1
  369. package/dist/domain/domain-context/transformers/then-builder.d.ts +1 -2
  370. package/dist/domain/domain-context/transformers/then-builder.js +1 -1
  371. package/dist/domain/domain-context/transformers/when-builder.d.ts +3 -9
  372. package/dist/domain/domain-context/transformers/when-builder.js +1 -1
  373. package/dist/domain/domain-context/undo-system.d.ts +2 -3
  374. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +11 -0
  375. package/dist/domain/domain-runtime/domain-context/action-context.js +1 -0
  376. package/dist/domain/domain-runtime/domain-context/component-reader.d.ts +1 -4
  377. package/dist/domain/domain-runtime/domain-context/component-reader.js +1 -1
  378. package/dist/domain/domain-runtime/domain-context/domain-context.js +1 -1
  379. package/dist/domain/domain-runtime/domain-context/expression-context.d.ts +8 -0
  380. package/dist/domain/domain-runtime/domain-context/expression-context.js +1 -0
  381. package/dist/domain/domain-runtime/domain-context/index.d.ts +3 -0
  382. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.d.ts +18 -0
  383. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.js +1 -0
  384. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +6 -13
  385. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  386. package/dist/domain/domain-runtime/domain-runtime.d.ts +56 -56
  387. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +24 -0
  388. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -0
  389. package/dist/domain/domain-runtime/spec/index.d.ts +5 -0
  390. package/dist/domain/domain-runtime/spec/index.js +1 -1
  391. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  392. package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.d.ts +1 -2
  393. package/dist/domain/{application → domain-runtime/spec/module-checks}/element-registration.d.ts +6 -1
  394. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -0
  395. package/dist/domain/{application → domain-runtime/spec/module-checks}/handler-registration.d.ts +5 -0
  396. package/dist/domain/domain-runtime/spec/module-checks/handler-registration.js +1 -0
  397. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +8 -0
  398. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -0
  399. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +25 -0
  400. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -0
  401. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +4 -0
  402. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -0
  403. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +4 -0
  404. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.js +1 -0
  405. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +15 -0
  406. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -0
  407. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +22 -0
  408. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -0
  409. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +6 -0
  410. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -0
  411. package/dist/domain/{actions → domain-runtime/spec}/prepare-action-implementations.d.ts +1 -1
  412. package/dist/domain/domain-runtime/spec/prepare-action-implementations.js +5 -0
  413. package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.d.ts +1 -1
  414. package/dist/domain/domain-runtime/spec/selectors.d.ts +7 -8
  415. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  416. package/dist/domain/domain-runtime/spec/types.d.ts +6 -6
  417. package/dist/domain/{system-components → extensions}/angle-indicator.d.ts +1 -1
  418. package/dist/domain/extensions/angle-indicator.js +1 -0
  419. package/dist/domain/extensions/attribute-switch.js +1 -0
  420. package/dist/domain/{system-components → extensions}/autorotate-camera-component.d.ts +1 -1
  421. package/dist/domain/extensions/autorotate-camera-component.js +1 -0
  422. package/dist/domain/{system-components → extensions}/basic-sidebar-footer.d.ts +1 -1
  423. package/dist/domain/extensions/basic-sidebar-footer.js +1 -0
  424. package/dist/domain/extensions/camera-based-hidden-entity-object.js +1 -0
  425. package/dist/domain/extensions/camera-based-hidden-entity.js +1 -0
  426. package/dist/domain/{system-components → extensions}/canvas-config.d.ts +1 -1
  427. package/dist/domain/extensions/canvas-config.js +1 -0
  428. package/dist/domain/extensions/canvas-custom-environment.js +1 -0
  429. package/dist/domain/{system-components → extensions}/canvas-padding.d.ts +1 -1
  430. package/dist/domain/extensions/canvas-padding.js +1 -0
  431. package/dist/domain/{system-components → extensions}/canvas-preset-environment.d.ts +1 -1
  432. package/dist/domain/extensions/canvas-preset-environment.js +1 -0
  433. package/dist/domain/{system-components → extensions}/child-entity-recipe-hierarchy.d.ts +2 -2
  434. package/dist/domain/extensions/child-entity-recipe-hierarchy.js +1 -0
  435. package/dist/domain/extensions/client-side-image.js +1 -0
  436. package/dist/domain/extensions/color-value.js +1 -0
  437. package/dist/domain/{system-components → extensions}/common/angle-indicator-schema.d.ts +1 -1
  438. package/dist/domain/extensions/common/angle-indicator-schema.js +1 -0
  439. package/dist/domain/{system-components → extensions}/common/dimension-indicator-schema.d.ts +1 -1
  440. package/dist/domain/extensions/common/dimension-indicator-schema.js +1 -0
  441. package/dist/domain/extensions/common/index.d.ts +4 -0
  442. package/dist/domain/extensions/common/index.js +1 -0
  443. package/dist/domain/{system-components → extensions}/custom-header.d.ts +2 -2
  444. package/dist/domain/{system-components → extensions}/custom-header.js +1 -1
  445. package/dist/domain/extensions/custom-price-footer.js +1 -0
  446. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.d.ts +2 -2
  447. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.js +1 -1
  448. package/dist/domain/{system-components → extensions}/dimension-indicator.d.ts +1 -1
  449. package/dist/domain/extensions/dimension-indicator.js +1 -0
  450. package/dist/domain/{system-components → extensions}/editable-angle-indicator.d.ts +3 -2
  451. package/dist/domain/extensions/editable-angle-indicator.js +1 -0
  452. package/dist/domain/{system-components → extensions}/editable-distance-dimension-indicator.d.ts +3 -2
  453. package/dist/domain/extensions/editable-distance-dimension-indicator.js +1 -0
  454. package/dist/domain/{system-components → extensions}/editable-offset-indicator.d.ts +3 -2
  455. package/dist/domain/extensions/editable-offset-indicator.js +1 -0
  456. package/dist/domain/{system-components → extensions}/editable-size-indicator.d.ts +3 -2
  457. package/dist/domain/extensions/editable-size-indicator.js +1 -0
  458. package/dist/domain/{system-components → extensions}/entity-header.d.ts +1 -1
  459. package/dist/domain/extensions/entity-header.js +1 -0
  460. package/dist/domain/{system-components → extensions}/exit-tool-mode-fab.d.ts +1 -1
  461. package/dist/domain/extensions/exit-tool-mode-fab.js +1 -0
  462. package/dist/domain/{system-components → extensions}/finalize-action.d.ts +1 -1
  463. package/dist/domain/extensions/finalize-action.js +1 -0
  464. package/dist/domain/extensions/finalize-component.js +1 -0
  465. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -0
  466. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -0
  467. package/dist/domain/{system-components → extensions}/fixed-header.d.ts +1 -1
  468. package/dist/domain/extensions/fixed-header.js +1 -0
  469. package/dist/domain/{system-components → extensions}/floating-header.d.ts +1 -1
  470. package/dist/domain/extensions/floating-header.js +1 -0
  471. package/dist/domain/{system-components → extensions}/hidden-header.d.ts +1 -1
  472. package/dist/domain/extensions/hidden-header.js +1 -0
  473. package/dist/domain/{system-components → extensions}/hidden-sidebar-footer.d.ts +1 -1
  474. package/dist/domain/extensions/hidden-sidebar-footer.js +1 -0
  475. package/dist/domain/{system-components → extensions}/horizontal-tabs.d.ts +1 -1
  476. package/dist/domain/extensions/horizontal-tabs.js +1 -0
  477. package/dist/domain/extensions/index.d.ts +69 -0
  478. package/dist/domain/extensions/index.js +1 -0
  479. package/dist/domain/{system-components → extensions}/list-selector-dimension-indicator.d.ts +3 -2
  480. package/dist/domain/extensions/list-selector-dimension-indicator.js +1 -0
  481. package/dist/domain/extensions/multilingual-text-value.js +1 -0
  482. package/dist/domain/extensions/navigation-steps.js +1 -0
  483. package/dist/domain/{system-components → extensions}/offset-anchors.d.ts +1 -1
  484. package/dist/domain/extensions/offset-anchors.js +1 -0
  485. package/dist/domain/{system-components → extensions}/offset-indicator.d.ts +1 -2
  486. package/dist/domain/extensions/offset-indicator.js +1 -0
  487. package/dist/domain/{system-components → extensions}/offset.d.ts +1 -1
  488. package/dist/domain/extensions/offset.js +1 -0
  489. package/dist/domain/{system-components → extensions}/other-action.d.ts +1 -1
  490. package/dist/domain/extensions/other-action.js +1 -0
  491. package/dist/domain/{system-components → extensions}/property-page.d.ts +2 -2
  492. package/dist/domain/extensions/property-page.js +1 -0
  493. package/dist/domain/{system-components → extensions}/read-sidebar-footer.d.ts +1 -1
  494. package/dist/domain/extensions/read-sidebar-footer.js +1 -0
  495. package/dist/domain/{system-components → extensions}/replace-entity-recipe-hierarchy.d.ts +2 -2
  496. package/dist/domain/extensions/replace-entity-recipe-hierarchy.js +1 -0
  497. package/dist/domain/extensions/rotatable.js +1 -0
  498. package/dist/domain/extensions/rotation-handle.js +1 -0
  499. package/dist/domain/extensions/save-template-thumbnail.js +1 -0
  500. package/dist/domain/{system-components → extensions}/scene-entity-add-fab.d.ts +1 -1
  501. package/dist/domain/extensions/scene-entity-add-fab.js +1 -0
  502. package/dist/domain/extensions/scene-entity-animation.js +1 -0
  503. package/dist/domain/extensions/scene-entity-control.js +1 -0
  504. package/dist/domain/{system-components → extensions}/scene-entity-delete-fab.d.ts +1 -1
  505. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -0
  506. package/dist/domain/extensions/scene-entity-floor-object.js +1 -0
  507. package/dist/domain/{system-components → extensions}/scene-entity-html-hotspot.d.ts +1 -1
  508. package/dist/domain/extensions/scene-entity-html-hotspot.js +1 -0
  509. package/dist/domain/{system-components → extensions}/scene-entity-navigation-hotspot.d.ts +1 -1
  510. package/dist/domain/extensions/scene-entity-navigation-hotspot.js +1 -0
  511. package/dist/domain/{system-components → extensions}/scene-entity-object-html-hotspot.d.ts +1 -1
  512. package/dist/domain/extensions/scene-entity-object-html-hotspot.js +1 -0
  513. package/dist/domain/{system-components → extensions}/scene-entity-select-hotspot.d.ts +1 -1
  514. package/dist/domain/extensions/scene-entity-select-hotspot.js +1 -0
  515. package/dist/domain/extensions/scene-entity-wall-object.js +1 -0
  516. package/dist/domain/extensions/selectable-component.js +1 -0
  517. package/dist/domain/{system-components → extensions}/sidebar-tabs.d.ts +1 -1
  518. package/dist/domain/extensions/sidebar-tabs.js +1 -0
  519. package/dist/domain/extensions/simple-summary.js +1 -0
  520. package/dist/domain/{system-components → extensions}/size.d.ts +1 -1
  521. package/dist/domain/extensions/size.js +1 -0
  522. package/dist/domain/{system-components → extensions}/sketching-draw.d.ts +1 -1
  523. package/dist/domain/extensions/sketching-draw.js +1 -0
  524. package/dist/domain/{system-components → extensions}/sketching-edit.d.ts +2 -2
  525. package/dist/domain/extensions/sketching-edit.js +1 -0
  526. package/dist/domain/extensions/summary-component.js +1 -0
  527. package/dist/domain/extensions/text-value.js +1 -0
  528. package/dist/domain/extensions/tool-controls.js +1 -0
  529. package/dist/domain/{system-components → extensions}/tool-menu-fab.d.ts +2 -2
  530. package/dist/domain/extensions/tool-menu-fab.js +1 -0
  531. package/dist/domain/{system-components → extensions}/toolbar.d.ts +2 -2
  532. package/dist/domain/{system-components → extensions}/toolbar.js +1 -1
  533. package/dist/domain/{system-components → extensions}/universal-sidebar-footer.d.ts +1 -1
  534. package/dist/domain/extensions/universal-sidebar-footer.js +1 -0
  535. package/dist/domain/extensions/view-controls.js +1 -0
  536. package/dist/domain/index.d.ts +2 -32
  537. package/dist/domain/index.js +1 -1
  538. package/dist/domain/mocks/create-mock-domain-runtime-services.d.ts +1 -1
  539. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +13 -13
  540. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  541. package/dist/domain/projections/blender-projections/blender-projections.d.ts +2 -3
  542. package/dist/domain/projections/blender-projections/blender-projections.js +1 -1
  543. package/dist/domain/projections/blender-projections/camera.d.ts +1 -1
  544. package/dist/domain/projections/collision-projections.d.ts +1 -1
  545. package/dist/domain/projections/composition-projections.d.ts +1 -1
  546. package/dist/domain/projections/composition-projections.js +1 -1
  547. package/dist/domain/projections/constraint-projections.d.ts +1 -1
  548. package/dist/domain/projections/index.d.ts +1 -1
  549. package/dist/domain/projections/position-projections.d.ts +1 -1
  550. package/dist/domain/projections/projected-entities-projections.d.ts +2 -3
  551. package/dist/domain/projections/snap-matching.d.ts +1 -2
  552. package/dist/domain/projections/snap-utils.d.ts +1 -2
  553. package/dist/domain/projections/snapping-projections.d.ts +1 -1
  554. package/dist/domain/projections/validation-projections.d.ts +3 -20
  555. package/dist/domain/projections/validation-projections.js +1 -1
  556. package/dist/domain/sketching/sketching-projections.d.ts +1 -1
  557. package/dist/domain/system-components/admin-sidebar.d.ts +1 -1
  558. package/dist/domain/system-components/admin-sidebar.js +1 -1
  559. package/dist/domain/system-components/angle-dimension.js +1 -1
  560. package/dist/domain/system-components/application-config.d.ts +1 -1
  561. package/dist/domain/system-components/application-config.js +1 -1
  562. package/dist/domain/system-components/attribute-selection.js +1 -1
  563. package/dist/domain/system-components/bounding-box-component.d.ts +1 -1
  564. package/dist/domain/system-components/bounding-box-component.js +1 -1
  565. package/dist/domain/system-components/bounding-sphere-component.d.ts +1 -1
  566. package/dist/domain/system-components/bounding-sphere-component.js +1 -1
  567. package/dist/domain/system-components/child-entity-recipes.d.ts +1 -1
  568. package/dist/domain/system-components/child-entity-recipes.js +1 -1
  569. package/dist/domain/system-components/child-entity-selection.d.ts +1 -2
  570. package/dist/domain/system-components/child-entity-selection.js +1 -1
  571. package/dist/domain/system-components/collision-box-geometry.d.ts +1 -1
  572. package/dist/domain/system-components/collision-box-geometry.js +1 -1
  573. package/dist/domain/system-components/collision-geometries.d.ts +1 -1
  574. package/dist/domain/system-components/collision-geometry.d.ts +1 -1
  575. package/dist/domain/system-components/collision-geometry.js +1 -1
  576. package/dist/domain/system-components/collision-point-geometry.d.ts +1 -1
  577. package/dist/domain/system-components/collision-point-geometry.js +1 -1
  578. package/dist/domain/system-components/common/index.d.ts +0 -4
  579. package/dist/domain/system-components/common/index.js +1 -1
  580. package/dist/domain/system-components/common/recipes.d.ts +1 -2
  581. package/dist/domain/system-components/constraint.d.ts +1 -1
  582. package/dist/domain/system-components/constraint.js +1 -1
  583. package/dist/domain/system-components/create-blueprint.d.ts +1 -1
  584. package/dist/domain/system-components/custom-scene-entity.d.ts +1 -1
  585. package/dist/domain/system-components/custom-scene-entity.js +1 -1
  586. package/dist/domain/system-components/detail.js +1 -1
  587. package/dist/domain/system-components/distance-dimension-select.d.ts +1 -1
  588. package/dist/domain/system-components/distance-dimension-select.js +1 -1
  589. package/dist/domain/system-components/distance-dimension.d.ts +1 -1
  590. package/dist/domain/system-components/distance-dimension.js +1 -1
  591. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  592. package/dist/domain/system-components/drag-handle.js +1 -1
  593. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  594. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  595. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  596. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  597. package/dist/domain/system-components/generic-dimension.d.ts +1 -1
  598. package/dist/domain/system-components/generic-dimension.js +1 -1
  599. package/dist/domain/system-components/hidden-entity.js +1 -1
  600. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -2
  601. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  602. package/dist/domain/system-components/index.d.ts +0 -68
  603. package/dist/domain/system-components/index.js +1 -1
  604. package/dist/domain/system-components/material-override-property-transition.js +1 -1
  605. package/dist/domain/system-components/material-override-transformer.js +1 -1
  606. package/dist/domain/system-components/material-swatch.js +1 -1
  607. package/dist/domain/system-components/navigation-page.js +1 -1
  608. package/dist/domain/system-components/navigation-panel-list.js +1 -1
  609. package/dist/domain/system-components/phoenix-entity-elements/admin-data-table-sidebar.d.ts +1 -1
  610. package/dist/domain/system-components/phoenix-layout-elements/admin-connected-resource-page.d.ts +1 -1
  611. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-actions.d.ts +1 -1
  612. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-page.d.ts +1 -1
  613. package/dist/domain/system-components/pivot-point.d.ts +1 -1
  614. package/dist/domain/system-components/pivot-point.js +1 -1
  615. package/dist/domain/system-components/price.js +1 -1
  616. package/dist/domain/system-components/projected-entities.d.ts +1 -1
  617. package/dist/domain/system-components/projected-entities.js +1 -1
  618. package/dist/domain/system-components/replace-entity-recipes.d.ts +1 -1
  619. package/dist/domain/system-components/replace-entity-recipes.js +1 -1
  620. package/dist/domain/system-components/scene-entity-ambient-light.js +1 -1
  621. package/dist/domain/system-components/scene-entity-box-object.js +1 -1
  622. package/dist/domain/system-components/scene-entity-directional-light.js +1 -1
  623. package/dist/domain/system-components/scene-entity-local-material-override.js +1 -1
  624. package/dist/domain/system-components/scene-entity-material-override.js +1 -1
  625. package/dist/domain/system-components/scene-entity-object-clip.js +1 -1
  626. package/dist/domain/system-components/scene-entity-object-decal.js +1 -1
  627. package/dist/domain/system-components/scene-entity-object-group.js +1 -1
  628. package/dist/domain/system-components/scene-entity-object-local-material-override.js +1 -1
  629. package/dist/domain/system-components/scene-entity-object-material-override.js +1 -1
  630. package/dist/domain/system-components/scene-entity-object-properties.js +1 -1
  631. package/dist/domain/system-components/scene-entity-object-remote-material-override.js +1 -1
  632. package/dist/domain/system-components/scene-entity-object-text-decal.js +1 -1
  633. package/dist/domain/system-components/scene-entity-object-transformer.js +1 -1
  634. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.js +1 -1
  635. package/dist/domain/system-components/scene-entity-object.js +1 -1
  636. package/dist/domain/system-components/scene-entity-point-light.js +1 -1
  637. package/dist/domain/system-components/scene-entity-properties.js +1 -1
  638. package/dist/domain/system-components/scene-entity-rect-area-light.js +1 -1
  639. package/dist/domain/system-components/scene-entity-remote-material-override.js +1 -1
  640. package/dist/domain/system-components/scene-entity-remote-object.js +1 -1
  641. package/dist/domain/system-components/scene-entity-spot-light.js +1 -1
  642. package/dist/domain/system-components/scene-entity-transimissive-material-override.js +1 -1
  643. package/dist/domain/system-components/sketching-line.d.ts +1 -1
  644. package/dist/domain/system-components/sketching-line.js +1 -1
  645. package/dist/domain/system-components/sketching-rectangle.d.ts +1 -1
  646. package/dist/domain/system-components/sketching-rectangle.js +1 -1
  647. package/dist/domain/system-components/sketching.d.ts +1 -1
  648. package/dist/domain/system-components/sketching.js +1 -1
  649. package/dist/domain/system-components/snap-axis.d.ts +1 -1
  650. package/dist/domain/system-components/snap-axis.js +1 -1
  651. package/dist/domain/system-components/snap-edge.d.ts +1 -1
  652. package/dist/domain/system-components/snap-edge.js +1 -1
  653. package/dist/domain/system-components/snap-plane.d.ts +1 -1
  654. package/dist/domain/system-components/snap-plane.js +1 -1
  655. package/dist/domain/system-components/snap-point.d.ts +1 -1
  656. package/dist/domain/system-components/snap-point.js +1 -1
  657. package/dist/domain/system-components/static-orthographic-camera-component.d.ts +1 -1
  658. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  659. package/dist/domain/system-components/static-perspective-camera-component.d.ts +1 -1
  660. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  661. package/dist/domain/utils/eval-cache.d.ts +1 -2
  662. package/dist/domain/utils/memo-eval.d.ts +2 -4
  663. package/dist/editor/domain-editors/use-implementation-files.d.ts +7 -6
  664. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  665. package/dist/i18n/locales/cs/messages.js +1 -1
  666. package/dist/i18n/locales/da/messages.js +1 -1
  667. package/dist/i18n/locales/de/messages.js +1 -1
  668. package/dist/i18n/locales/de-AT/messages.js +1 -1
  669. package/dist/i18n/locales/en/messages.js +1 -1
  670. package/dist/i18n/locales/en-AU/messages.js +1 -1
  671. package/dist/i18n/locales/en-GB/messages.js +1 -1
  672. package/dist/i18n/locales/es/messages.js +1 -1
  673. package/dist/i18n/locales/fr/messages.js +1 -1
  674. package/dist/i18n/locales/hu/messages.js +1 -1
  675. package/dist/i18n/locales/it/messages.js +1 -1
  676. package/dist/i18n/locales/nl/messages.js +1 -1
  677. package/dist/i18n/locales/pl/messages.js +1 -1
  678. package/dist/i18n/locales/pt/messages.js +1 -1
  679. package/dist/i18n/locales/ro/messages.js +1 -1
  680. package/dist/i18n/locales/sk/messages.js +1 -1
  681. package/dist/i18n/locales/tr/messages.js +1 -1
  682. package/dist/legacy/domain-cli/gen/configurator-builder.js +21 -8
  683. package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -3
  684. package/dist/legacy/domain-cli/gen/implementation.js +7 -11
  685. package/dist/legacy/domain-cli/gen/invariants.js +7 -6
  686. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  687. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  688. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  689. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  690. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  691. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +1 -0
  692. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +17 -15
  693. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.d.ts +1 -1
  694. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.js +4 -0
  695. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -19
  696. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +15 -16
  697. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +22 -23
  698. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +15 -16
  699. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.d.ts +7 -2
  700. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.js +8 -12
  701. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.d.ts +1 -1
  702. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.js +1 -1
  703. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/webhook-builders.js +7 -7
  704. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  705. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +4 -3
  706. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  707. package/dist/phoenix/commands/init.d.ts +4 -4
  708. package/dist/phoenix/commands/init.js +1 -1
  709. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  710. package/dist/phoenix/commands/prepare-local-environment-command.js +1 -1
  711. package/dist/phoenix/commands/prettier.js +1 -1
  712. package/dist/phoenix/scripts/build-admin.js +1 -1
  713. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  714. package/dist/phoenix/services/variant-file-session.js +1 -1
  715. package/dist/phoenix/utils/git/index.d.ts +1 -0
  716. package/dist/phoenix/utils/git/index.js +1 -0
  717. package/dist/phoenix/utils/git/is-inside-git-repository.d.ts +6 -0
  718. package/dist/phoenix/utils/git/is-inside-git-repository.js +1 -0
  719. package/dist/phoenix/utils/index.d.ts +1 -0
  720. package/dist/phoenix/utils/index.js +1 -1
  721. package/dist/react-sdk/application-runtime/hooks/use-domain-application-props.d.ts +5 -2
  722. package/dist/react-sdk/application-runtime/hooks/use-spec.d.ts +1 -1
  723. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.d.ts +1 -1
  724. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  725. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +24 -24
  726. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +5 -5
  727. package/dist/ui-sdk/theme/types.d.ts +1 -1
  728. package/dist/webhook/builders/common.d.ts +8 -0
  729. package/dist/webhook/builders/webhook-builder.d.ts +1 -1
  730. package/dist/webhook/builders/webhook-builder.js +1 -1
  731. package/package.json +3 -3
  732. package/dist/application-spec/generate-application/code/templates/env-ci.d.ts +0 -1
  733. package/dist/application-spec/generate-application/code/templates/env-ci.js +0 -25
  734. package/dist/application-spec/generate-application/code/templates/env-example.d.ts +0 -1
  735. package/dist/application-spec/generate-application/code/templates/env-example.js +0 -90
  736. package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
  737. package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
  738. package/dist/application-spec/generate-application/code/templates/private-assets-readme.d.ts +0 -1
  739. package/dist/application-spec/generate-application/code/templates/private-assets-readme.js +0 -24
  740. package/dist/application-spec/generate-application/code/templates/public-assets-readme.d.ts +0 -1
  741. package/dist/application-spec/generate-application/code/templates/public-assets-readme.js +0 -24
  742. package/dist/application-spec/generate-application/code/templates/readme.d.ts +0 -1
  743. package/dist/application-spec/generate-application/code/templates/readme.js +0 -23
  744. package/dist/application-spec/generate-application/code/templates/skills/agents-md.d.ts +0 -1
  745. package/dist/application-spec/generate-application/code/templates/skills/agents-md.js +0 -2
  746. package/dist/domain/actions/action-factory.d.ts +0 -10
  747. package/dist/domain/actions/prepare-action-implementations.js +0 -5
  748. package/dist/domain/application/element-registration.js +0 -1
  749. package/dist/domain/application/handler-registration.js +0 -1
  750. package/dist/domain/application/resolve-imported-transformers.d.ts +0 -13
  751. package/dist/domain/application/resolve-imported-transformers.js +0 -1
  752. package/dist/domain/components/debug-state-component.js +0 -1
  753. package/dist/domain/components/domain-component-optic.d.ts +0 -76
  754. package/dist/domain/components/domain-component-optic.js +0 -16
  755. package/dist/domain/components/drag-state-component.js +0 -1
  756. package/dist/domain/components/export-state-component.js +0 -1
  757. package/dist/domain/components/fullscreen-state-component.js +0 -1
  758. package/dist/domain/components/group-components-by-entity-id-and-name.js +0 -1
  759. package/dist/domain/components/hover-state-component.js +0 -1
  760. package/dist/domain/components/index.d.ts +0 -2
  761. package/dist/domain/components/index.js +0 -1
  762. package/dist/domain/components/navigation-state-component.js +0 -1
  763. package/dist/domain/components/selection-state-component.js +0 -1
  764. package/dist/domain/components/system-component-builder.js +0 -1
  765. package/dist/domain/components/system-virtual-entity.js +0 -1
  766. package/dist/domain/components/tool-state-component.js +0 -1
  767. package/dist/domain/components/view-state-component.js +0 -1
  768. package/dist/domain/components/viewport-state-component.js +0 -1
  769. package/dist/domain/core/expression.d.ts +0 -50
  770. package/dist/domain/core/json-schema.js +0 -1
  771. package/dist/domain/core/migrations.js +0 -1
  772. package/dist/domain/core/reflection.js +0 -1
  773. package/dist/domain/domain-context/recipe-system/recipes.js +0 -1
  774. package/dist/domain/expressions/constant-expressions.js +0 -1
  775. package/dist/domain/expressions/custom-expression.d.ts +0 -13
  776. package/dist/domain/expressions/custom-expression.js +0 -1
  777. package/dist/domain/expressions/index.d.ts +0 -1
  778. package/dist/domain/expressions/index.js +0 -1
  779. package/dist/domain/invariants/custom-invariants.d.ts +0 -22
  780. package/dist/domain/invariants/custom-invariants.js +0 -1
  781. package/dist/domain/invariants/invariants.d.ts +0 -68
  782. package/dist/domain/invariants/invariants.js +0 -1
  783. package/dist/domain/invariants/violation-component.js +0 -1
  784. package/dist/domain/relations/all-of-type-relation.js +0 -1
  785. package/dist/domain/relations/component-factories.js +0 -1
  786. package/dist/domain/relations/composed-of.js +0 -1
  787. package/dist/domain/relations/indirect-relation.js +0 -1
  788. package/dist/domain/relations/reference-component.js +0 -1
  789. package/dist/domain/system-components/angle-indicator.js +0 -1
  790. package/dist/domain/system-components/attribute-switch.js +0 -1
  791. package/dist/domain/system-components/autorotate-camera-component.js +0 -1
  792. package/dist/domain/system-components/basic-sidebar-footer.js +0 -1
  793. package/dist/domain/system-components/camera-based-hidden-entity-object.js +0 -1
  794. package/dist/domain/system-components/camera-based-hidden-entity.js +0 -1
  795. package/dist/domain/system-components/canvas-config.js +0 -1
  796. package/dist/domain/system-components/canvas-custom-environment.js +0 -1
  797. package/dist/domain/system-components/canvas-padding.js +0 -1
  798. package/dist/domain/system-components/canvas-preset-environment.js +0 -1
  799. package/dist/domain/system-components/child-entity-recipe-hierarchy.js +0 -1
  800. package/dist/domain/system-components/client-side-image.js +0 -1
  801. package/dist/domain/system-components/color-value.js +0 -1
  802. package/dist/domain/system-components/common/angle-indicator-schema.js +0 -1
  803. package/dist/domain/system-components/common/dimension-indicator-schema.js +0 -1
  804. package/dist/domain/system-components/custom-price-footer.js +0 -1
  805. package/dist/domain/system-components/dimension-indicator.js +0 -1
  806. package/dist/domain/system-components/editable-angle-indicator.js +0 -1
  807. package/dist/domain/system-components/editable-distance-dimension-indicator.js +0 -1
  808. package/dist/domain/system-components/editable-offset-indicator.js +0 -1
  809. package/dist/domain/system-components/editable-size-indicator.js +0 -1
  810. package/dist/domain/system-components/entity-header.js +0 -1
  811. package/dist/domain/system-components/exit-tool-mode-fab.js +0 -1
  812. package/dist/domain/system-components/finalize-action.js +0 -1
  813. package/dist/domain/system-components/finalize-component.js +0 -1
  814. package/dist/domain/system-components/fit-selection-orthographic-camera-component.js +0 -1
  815. package/dist/domain/system-components/fit-selection-perspective-camera-component.js +0 -1
  816. package/dist/domain/system-components/fixed-header.js +0 -1
  817. package/dist/domain/system-components/floating-header.js +0 -1
  818. package/dist/domain/system-components/hidden-header.js +0 -1
  819. package/dist/domain/system-components/hidden-sidebar-footer.js +0 -1
  820. package/dist/domain/system-components/horizontal-tabs.js +0 -1
  821. package/dist/domain/system-components/list-selector-dimension-indicator.js +0 -1
  822. package/dist/domain/system-components/multilingual-text-value.js +0 -1
  823. package/dist/domain/system-components/navigation-steps.js +0 -1
  824. package/dist/domain/system-components/offset-anchors.js +0 -1
  825. package/dist/domain/system-components/offset-indicator.js +0 -1
  826. package/dist/domain/system-components/offset.js +0 -1
  827. package/dist/domain/system-components/other-action.js +0 -1
  828. package/dist/domain/system-components/property-page.js +0 -1
  829. package/dist/domain/system-components/read-sidebar-footer.js +0 -1
  830. package/dist/domain/system-components/replace-entity-recipe-hierarchy.js +0 -1
  831. package/dist/domain/system-components/rotatable.js +0 -1
  832. package/dist/domain/system-components/rotation-handle.js +0 -1
  833. package/dist/domain/system-components/save-template-thumbnail.js +0 -1
  834. package/dist/domain/system-components/scene-entity-add-fab.js +0 -1
  835. package/dist/domain/system-components/scene-entity-animation.js +0 -1
  836. package/dist/domain/system-components/scene-entity-control.js +0 -1
  837. package/dist/domain/system-components/scene-entity-delete-fab.js +0 -1
  838. package/dist/domain/system-components/scene-entity-floor-object.js +0 -1
  839. package/dist/domain/system-components/scene-entity-html-hotspot.js +0 -1
  840. package/dist/domain/system-components/scene-entity-navigation-hotspot.js +0 -1
  841. package/dist/domain/system-components/scene-entity-object-html-hotspot.js +0 -1
  842. package/dist/domain/system-components/scene-entity-select-hotspot.js +0 -1
  843. package/dist/domain/system-components/scene-entity-wall-object.js +0 -1
  844. package/dist/domain/system-components/selectable-component.js +0 -1
  845. package/dist/domain/system-components/sidebar-tabs.js +0 -1
  846. package/dist/domain/system-components/simple-summary.js +0 -1
  847. package/dist/domain/system-components/size.js +0 -1
  848. package/dist/domain/system-components/sketching-draw.js +0 -1
  849. package/dist/domain/system-components/sketching-edit.js +0 -1
  850. package/dist/domain/system-components/summary-component.js +0 -1
  851. package/dist/domain/system-components/text-value.js +0 -1
  852. package/dist/domain/system-components/tool-controls.js +0 -1
  853. package/dist/domain/system-components/tool-menu-fab.js +0 -1
  854. package/dist/domain/system-components/universal-sidebar-footer.js +0 -1
  855. package/dist/domain/system-components/view-controls.js +0 -1
  856. package/dist/phoenix/application-spec/generate-assistant-prompt.d.ts +0 -13
  857. package/dist/phoenix/application-spec/generate-assistant-prompt.js +0 -1
  858. /package/dist/domain/{components/component-reader-types.js → application/assistant/assistant-manifest.js} +0 -0
  859. /package/dist/domain/{core/action.js → application/assistant/assistant-resolved-manifest.js} +0 -0
  860. /package/dist/domain/{actions → core/action}/action-factory.js +0 -0
  861. /package/dist/domain/core/{enhanced-json-schema.js → action/action.js} +0 -0
  862. /package/dist/domain/core/{expression.js → component/component-reader-types.js} +0 -0
  863. /package/dist/domain/{components → core/component}/legacy-filter.js +0 -0
  864. /package/dist/domain/{components → core/component}/system-component-filter.js +0 -0
  865. /package/dist/domain/{components → core/component}/system-virtual-entity.d.ts +0 -0
  866. /package/dist/domain/{components → core/component}/updates.js +0 -0
  867. /package/dist/domain/core/{schema-validator.js → data-schema/data-cell-value.js} +0 -0
  868. /package/dist/domain/{relations/reference-field.js → core/data-schema/data-schema-array-field.js} +0 -0
  869. /package/dist/domain/{relations/relation-implementation.js → core/data-schema/data-schema-field-object.js} +0 -0
  870. /package/dist/domain/{invariants → core/invariant}/builtin-invariant.js +0 -0
  871. /package/dist/domain/{invariants → core/invariant}/violation-component.d.ts +0 -0
  872. /package/dist/domain/{invariants → core/invariant}/violation.js +0 -0
  873. /package/dist/domain/core/{alias.d.ts → model/alias.d.ts} +0 -0
  874. /package/dist/domain/core/{alias.js → model/alias.js} +0 -0
  875. /package/dist/domain/core/{common-definitions.d.ts → model/common-definitions.d.ts} +0 -0
  876. /package/dist/domain/core/{common-definitions.js → model/common-definitions.js} +0 -0
  877. /package/dist/domain/core/{component.js → model/component.js} +0 -0
  878. /package/dist/domain/core/{model.d.ts → model/model.d.ts} +0 -0
  879. /package/dist/domain/core/{model.js → model/model.js} +0 -0
  880. /package/dist/domain/core/{preset.d.ts → model/preset.d.ts} +0 -0
  881. /package/dist/domain/core/{preset.js → model/preset.js} +0 -0
  882. /package/dist/domain/{relations → core/relation}/direct-relation.js +0 -0
  883. /package/dist/domain/{relations → core/relation}/relation-factory.js +0 -0
  884. /package/dist/domain/core/{schema-validator-ajv.d.ts → schema/create-ajv-schema-validator.d.ts} +0 -0
  885. /package/dist/domain/core/{schema-validator-ajv.js → schema/create-ajv-schema-validator.js} +0 -0
  886. /package/dist/domain/core/{schema-validator-csp.d.ts → schema/create-csp-schema-validator.d.ts} +0 -0
  887. /package/dist/domain/core/{schema-validator-csp.js → schema/create-csp-schema-validator.js} +0 -0
  888. /package/dist/domain/core/{enhanced-json-schema.d.ts → schema/enhanced-json-schema.d.ts} +0 -0
  889. /package/dist/domain/core/{json-schema.d.ts → schema/extended-schema-validator.d.ts} +0 -0
  890. /package/dist/domain/core/{schema-validator.d.ts → schema/schema-validator.d.ts} +0 -0
  891. /package/dist/domain/core/{state.js → state/state.js} +0 -0
  892. /package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.js +0 -0
  893. /package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.js +0 -0
  894. /package/dist/domain/{system-components → extensions}/attribute-switch.d.ts +0 -0
  895. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity-object.d.ts +0 -0
  896. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity.d.ts +0 -0
  897. /package/dist/domain/{system-components → extensions}/canvas-custom-environment.d.ts +0 -0
  898. /package/dist/domain/{system-components → extensions}/client-side-image.d.ts +0 -0
  899. /package/dist/domain/{system-components → extensions}/color-value.d.ts +0 -0
  900. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.d.ts +0 -0
  901. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.js +0 -0
  902. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.d.ts +0 -0
  903. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.js +0 -0
  904. /package/dist/domain/{system-components → extensions}/custom-price-footer.d.ts +0 -0
  905. /package/dist/domain/{system-components → extensions}/finalize-component.d.ts +0 -0
  906. /package/dist/domain/{system-components → extensions}/fit-selection-orthographic-camera-component.d.ts +0 -0
  907. /package/dist/domain/{system-components → extensions}/fit-selection-perspective-camera-component.d.ts +0 -0
  908. /package/dist/domain/{system-components → extensions}/multilingual-text-value.d.ts +0 -0
  909. /package/dist/domain/{system-components → extensions}/navigation-steps.d.ts +0 -0
  910. /package/dist/domain/{system-components → extensions}/rotatable.d.ts +0 -0
  911. /package/dist/domain/{system-components → extensions}/rotation-handle.d.ts +0 -0
  912. /package/dist/domain/{system-components → extensions}/save-template-thumbnail.d.ts +0 -0
  913. /package/dist/domain/{system-components → extensions}/scene-entity-animation.d.ts +0 -0
  914. /package/dist/domain/{system-components → extensions}/scene-entity-control.d.ts +0 -0
  915. /package/dist/domain/{system-components → extensions}/scene-entity-floor-object.d.ts +0 -0
  916. /package/dist/domain/{system-components → extensions}/scene-entity-wall-object.d.ts +0 -0
  917. /package/dist/domain/{system-components → extensions}/selectable-component.d.ts +0 -0
  918. /package/dist/domain/{system-components → extensions}/simple-summary.d.ts +0 -0
  919. /package/dist/domain/{system-components → extensions}/summary-component.d.ts +0 -0
  920. /package/dist/domain/{system-components → extensions}/text-value.d.ts +0 -0
  921. /package/dist/domain/{system-components → extensions}/tool-controls.d.ts +0 -0
  922. /package/dist/domain/{system-components → extensions}/view-controls.d.ts +0 -0
@@ -1,15 +1,11 @@
1
1
  /**
2
2
  * Documented Phoenix SDK guidance, one Markdown section per entry.
3
3
  *
4
- * The agent guidance shipped into generated projects — the starter `AGENTS.md` and the Phoenix-owned
5
- * agent skills — is composed from these sections, so each documented fact has exactly one home and
6
- * the generated files differ only in which sections they carry.
4
+ * The agent guidance shipped into generated projects — the Phoenix-owned agent skills — is composed
5
+ * from these sections, so each documented fact has exactly one home and the generated files differ
6
+ * only in which sections they carry.
7
7
  */
8
8
  export declare const sdkGuidanceSections: {
9
- /** Opening description of what a Phoenix configurator project is. */
10
- readonly projectIntro: `## Phoenix Configurator Project
11
-
12
- Declarative 3D product configurator built with Phoenix SDK. Domain model defined in YAML, custom logic in TypeScript.`;
13
9
  /** The three everyday `phoenix` package scripts. */
14
10
  readonly buildCommands: `## Build Commands
15
11
  - \`pnpm phoenix build\` — Full production build
@@ -30,6 +26,7 @@ Declarative 3D product configurator built with Phoenix SDK. Domain model defined
30
26
  - \`src/transformers/\` — Automatic state fixers (\`phx.frontend.transformerBuilder\`)
31
27
  - \`src/components/\` — ECS system components (\`phx.domain.attachComponent.withEntity()\`)
32
28
  - \`src/elements/\` — Page-level React components (\`phx.frontend.createCustomPhoenixLayoutElement()\`)
29
+ - A layout element named \`ConfiguratorLayout\` replaces everything the built-in layout renders for a loaded configuration, the finalize page included, so prefer arranging the layout in the spec; when you register it, mount \`LayoutSlots.SharedCanvas\` (from \`@salsita-ai/sdk/configurator\`) in it, or the app loader stays on screen, and call \`useSceneSafeArea()\` (same import) with its \`containerRef\` on the element covering the whole canvas and its \`safeAreaRef\` on the region the layout's UI leaves free, so the camera frames the scene there
33
30
  - \`src/handlers/\` — Event & lifecycle handlers
34
31
  - \`src/webhooks/\` — Server-side webhook handlers (\`phx.webhooks.*Builder\`)
35
32
  - \`src/migrations/\` — Schema version migrations (v*.ts)
@@ -65,7 +62,8 @@ Declarative 3D product configurator built with Phoenix SDK. Domain model defined
65
62
  - Underscore folders (_shared/, _utils/) are NOT auto-imported`;
66
63
  /** The default-export rule of the SDK auto-import system. */
67
64
  readonly exportRules: `## Export Rules
68
- All files in src/expressions/, src/actions/, src/invariants/, src/transformers/, src/components/, src/handlers/, src/webhooks/ MUST use default exports. Can be a single item or an array. Named exports are ignored by the SDK auto-import system.`;
65
+ All files in src/expressions/, src/actions/, src/invariants/, src/transformers/, src/components/, src/handlers/, src/elements/, src/webhooks/ MUST use default exports. Can be a single item or an array. Named exports are ignored by the SDK auto-import system.
66
+ The default export must be what the folder's phx factory returns (for example \`phx.frontend.createCustomPhoenixLayoutElement()\` in src/elements/). Any other value, such as a plain React component, stops the application at start with an "Invalid default export in <file>" error. Put plain components and helpers in an underscore folder.`;
69
67
  /** Which components and handlers are bundled into the webhook. */
70
68
  readonly webhookMembership: `## Webhook Membership
71
69
  - User-authored components, admin components, and handlers are frontend-only by default.
@@ -76,8 +74,9 @@ All files in src/expressions/, src/actions/, src/invariants/, src/transformers/,
76
74
  /** Generated files a project must not edit. */
77
75
  readonly doNotEdit: `## Do Not Edit
78
76
  - \`.phoenix/\` directory — completely regenerated on each build. The one exception is \`.phoenix/variants/\`, where the \`phoenix-variants\` skill has you write option files; a rebuild keeps it
79
- - \`tsconfig.json\`, \`eslint.config.js\`, \`prettier.config.js\`, \`.prettierignore\`, \`.linguirc\`, \`.nvmrc\`
80
- - \`src/locales/\` .ts files — compiled from .po files`;
77
+ - \`tsconfig.json\`, \`eslint.config.js\`, \`prettier.config.js\`, \`.linguirc\`, \`.nvmrc\`
78
+ - \`src/locales/\` .ts files — compiled from .po files
79
+ - \`phoenix\` and \`phoenix-*\` folders under \`.claude/skills/\` and \`.agents/skills/\` — Phoenix rewrites its skills on every sync, removes anything else inside their folders and removes any other \`phoenix-*\` skill folder. To customise a skill, copy it to a folder whose name does not start with \`phoenix\``;
81
80
  /** When and how a deployed domain model gets a new version and a migration, with the recipe for replacing the starter. */
82
81
  readonly modelVersioning: `## Version the Domain Model Once It Is Deployed
83
82
  A deployed model version cannot change, because saved configurations depend on it. \`pnpm phoenix deploy\` is refused, before anything is uploaded, when the model differs from the one already deployed under the same version. The version is not written anywhere: \`model.latest\` is always the highest numbered version plus one, so a spec with only \`latest\` is v1, and \`applicationVersion\` plays no part. \`pnpm phoenix dev\` accepts every model change, so a working preview does not show that the deploy will pass.
@@ -283,10 +282,10 @@ Rendered appearance is a deliverable, not a side effect. Before presenting any p
283
282
  Inspect and report:
284
283
 
285
284
  1. Geometry. Every part rests on its support. Name where the product meets the ground and confirm its shadow and any selection indicator sit there too. Nothing floats, intersects, or protrudes. Scale and orientation are consistent between parts and match the stated dimensions. Each part is complete and present.
286
- 2. Fidelity. The result matches the client's own photographs, renders, and drawings where supplied. Name any divergence.
287
- 3. Response. Every configurable surface of every part reacts to its control, not only the parts you just changed.
288
- 4. Density. Every decision the user must make is reachable without hunting, and no single property's options dominate the surface holding them.
289
- 5. Loading. How long until a meaningful first frame, and whether anything indicates progress meanwhile.
285
+ 2. Response. Every configurable surface of every part reacts to its control, not only the parts you just changed.
286
+ 3. Loading. How long until a meaningful first frame, and whether anything indicates progress meanwhile.
287
+
288
+ This covers what follows from the change you just made, in the state you are already in. Fidelity against the client's own material, the density of the controls, and every state you did not open belong to an independent reviewer, which the \`phoenix-create-configurator\` skill's Appearance review covers.
290
289
 
291
290
  Report defects you are deferring as defects. Do not call work done, verified, or complete while any of the above is unchecked or failing: say which, and recommend fixing now or later.
292
291
 
@@ -1,13 +1,10 @@
1
- export const sdkGuidanceSections={projectIntro:`## Phoenix Configurator Project
2
-
3
- Declarative 3D product configurator built with Phoenix SDK. Domain model defined in YAML, custom logic in TypeScript.`,buildCommands:"## Build Commands\n- `pnpm phoenix build` — Full production build\n- `pnpm phoenix dev` — Development mode with hot reload\n- `pnpm phoenix sync` — Sync generated files without full build",devLogs:"## Dev Logs\n- `pnpm phoenix dev` writes all logs to `.phoenix/phoenix-dev.log`\n- Contains: spec parse errors, build errors, browser runtime errors, file watcher events\n- After making changes, always check the log for errors: `tail -50 .phoenix/phoenix-dev.log` or `grep ERROR .phoenix/phoenix-dev.log`\n- Rotated automatically at 10MB (`.log.1`, `.log.2` are older rotations)",projectStructure:"## Project Structure\n- `spec/` — Domain YAML specs (entities, relations, expressions, invariants, components, application config)\n- `src/expressions/` — Computed/derived entity properties (`phx.domain.implementCustomExpressions()`)\n- `src/actions/` — Domain operations declared under `actions:` in the spec (`phx.domain.implementActions()`), run by controls and exposed to the assistant\n- `src/invariants/` — Business rule constraints (`phx.domain.implementCustomInvariants()`)\n- `src/transformers/` — Automatic state fixers (`phx.frontend.transformerBuilder`)\n- `src/components/` — ECS system components (`phx.domain.attachComponent.withEntity()`)\n- `src/elements/` — Page-level React components (`phx.frontend.createCustomPhoenixLayoutElement()`)\n- `src/handlers/` — Event & lifecycle handlers\n- `src/webhooks/` — Server-side webhook handlers (`phx.webhooks.*Builder`)\n- `src/migrations/` — Schema version migrations (v*.ts)\n- `src/locales/` — Locale catalogs (authored .po sources; compiled .ts, do not edit)\n- `src/admin/` — Admin interface (mirrors main src/ structure)\n- `src/_shared/` — Shared utilities (NOT auto-imported, requires explicit imports)\n- `.phoenix/` — Auto-generated files (DO NOT EDIT, except the option files in `.phoenix/variants/`)\n- `public/` — Static assets (3D models, textures, images, HDRI maps, fonts)\n- `assets/` — Uploadable resources (PDF templates, email assets)",architecturePrinciples:"## Architecture Principles\n- YAML-first: 99% of configuration in spec/*.yaml, custom code is last resort\n- ECS pattern: entities (domain objects) + components (behavior/UI) + systems (SDK runtime)\n- Reactive state: immutable domain state flows through RxJS pipelines\n- Data binding: `$read` (read-only), `$write` (write-only), `$bind` (bidirectional) connect components to domain\n- memoEval: all component implementations must use memoEval for stable object references",keyPatterns:"## Key Patterns\n- Expressions = computed properties on entities (prefix: `$`), implemented per-entity in src/expressions/\n- Actions = named domain operations (`actions:` in YAML with `params` and `result` schemas), implemented in src/actions/, prepared through `actionSystem.prepareAction()` and exposed as assistant mutations through `assistant.actions`\n- Invariants = validation rules returning violations, static or dynamic\n- Transformers = auto-fixers maintaining consistency after state changes\n- Components defined in YAML with `$read`/`$bind` bindings, or custom in src/components/ using attachComponent builder\n- Webhooks = server-side finalization tasks (PDF, email, CSV, image rendering)\n- Filters = contextual component activation via navigationStates, viewStates, modes, selectedEntityIds",fileConventions:`## File Conventions
1
+ export const sdkGuidanceSections={buildCommands:"## Build Commands\n- `pnpm phoenix build` — Full production build\n- `pnpm phoenix dev` — Development mode with hot reload\n- `pnpm phoenix sync` — Sync generated files without full build",devLogs:"## Dev Logs\n- `pnpm phoenix dev` writes all logs to `.phoenix/phoenix-dev.log`\n- Contains: spec parse errors, build errors, browser runtime errors, file watcher events\n- After making changes, always check the log for errors: `tail -50 .phoenix/phoenix-dev.log` or `grep ERROR .phoenix/phoenix-dev.log`\n- Rotated automatically at 10MB (`.log.1`, `.log.2` are older rotations)",projectStructure:"## Project Structure\n- `spec/` — Domain YAML specs (entities, relations, expressions, invariants, components, application config)\n- `src/expressions/` — Computed/derived entity properties (`phx.domain.implementCustomExpressions()`)\n- `src/actions/` — Domain operations declared under `actions:` in the spec (`phx.domain.implementActions()`), run by controls and exposed to the assistant\n- `src/invariants/` — Business rule constraints (`phx.domain.implementCustomInvariants()`)\n- `src/transformers/` — Automatic state fixers (`phx.frontend.transformerBuilder`)\n- `src/components/` — ECS system components (`phx.domain.attachComponent.withEntity()`)\n- `src/elements/` — Page-level React components (`phx.frontend.createCustomPhoenixLayoutElement()`)\n - A layout element named `ConfiguratorLayout` replaces everything the built-in layout renders for a loaded configuration, the finalize page included, so prefer arranging the layout in the spec; when you register it, mount `LayoutSlots.SharedCanvas` (from `@salsita-ai/sdk/configurator`) in it, or the app loader stays on screen, and call `useSceneSafeArea()` (same import) with its `containerRef` on the element covering the whole canvas and its `safeAreaRef` on the region the layout's UI leaves free, so the camera frames the scene there\n- `src/handlers/` — Event & lifecycle handlers\n- `src/webhooks/` — Server-side webhook handlers (`phx.webhooks.*Builder`)\n- `src/migrations/` — Schema version migrations (v*.ts)\n- `src/locales/` — Locale catalogs (authored .po sources; compiled .ts, do not edit)\n- `src/admin/` — Admin interface (mirrors main src/ structure)\n- `src/_shared/` — Shared utilities (NOT auto-imported, requires explicit imports)\n- `.phoenix/` — Auto-generated files (DO NOT EDIT, except the option files in `.phoenix/variants/`)\n- `public/` — Static assets (3D models, textures, images, HDRI maps, fonts)\n- `assets/` — Uploadable resources (PDF templates, email assets)",architecturePrinciples:"## Architecture Principles\n- YAML-first: 99% of configuration in spec/*.yaml, custom code is last resort\n- ECS pattern: entities (domain objects) + components (behavior/UI) + systems (SDK runtime)\n- Reactive state: immutable domain state flows through RxJS pipelines\n- Data binding: `$read` (read-only), `$write` (write-only), `$bind` (bidirectional) connect components to domain\n- memoEval: all component implementations must use memoEval for stable object references",keyPatterns:"## Key Patterns\n- Expressions = computed properties on entities (prefix: `$`), implemented per-entity in src/expressions/\n- Actions = named domain operations (`actions:` in YAML with `params` and `result` schemas), implemented in src/actions/, prepared through `actionSystem.prepareAction()` and exposed as assistant mutations through `assistant.actions`\n- Invariants = validation rules returning violations, static or dynamic\n- Transformers = auto-fixers maintaining consistency after state changes\n- Components defined in YAML with `$read`/`$bind` bindings, or custom in src/components/ using attachComponent builder\n- Webhooks = server-side finalization tasks (PDF, email, CSV, image rendering)\n- Filters = contextual component activation via navigationStates, viewStates, modes, selectedEntityIds",fileConventions:`## File Conventions
4
2
  - Components: PascalCase (.tsx)
5
3
  - Utilities: kebab-case (.ts)
6
4
  - Expressions: entity-name.ts
7
5
  - Migrations: v*.ts (sequential)
8
6
  - Specs: kebab-case.yaml
9
- - Underscore folders (_shared/, _utils/) are NOT auto-imported`,exportRules:`## Export Rules
10
- All files in src/expressions/, src/actions/, src/invariants/, src/transformers/, src/components/, src/handlers/, src/webhooks/ MUST use default exports. Can be a single item or an array. Named exports are ignored by the SDK auto-import system.`,webhookMembership:"## Webhook Membership\n- User-authored components, admin components, and handlers are frontend-only by default.\n- A handler that registers `createMapPublishedRevisionDataHandler`, `createMapPublishedChunkedDataHandler`, `createDataRowValidatorHandler`, or `createSheetValidatorHandler` is included in the webhook automatically.\n- To include another component or handler in the webhook, put `'use webhook'` as its first statement (leading comments are allowed).\n- A webhook-included file and its runtime local-import closure must not import browser SDK entrypoints (`application`, `admin`, `configurator`, `editor`, `react`, `ui`) or style/font/image assets. Spec parsing reports the unsafe import and inclusion reason as a diagnostic.\n- Keep browser rendering in an unpinned file. Move shared server-safe logic into a separate module when both frontend and webhook code need it.",doNotEdit:"## Do Not Edit\n- `.phoenix/` directory — completely regenerated on each build. The one exception is `.phoenix/variants/`, where the `phoenix-variants` skill has you write option files; a rebuild keeps it\n- `tsconfig.json`, `eslint.config.js`, `prettier.config.js`, `.prettierignore`, `.linguirc`, `.nvmrc`\n- `src/locales/` .ts files — compiled from .po files",modelVersioning:"## Version the Domain Model Once It Is Deployed\nA deployed model version cannot change, because saved configurations depend on it. `pnpm phoenix deploy` is refused, before anything is uploaded, when the model differs from the one already deployed under the same version. The version is not written anywhere: `model.latest` is always the highest numbered version plus one, so a spec with only `latest` is v1, and `applicationVersion` plays no part. `pnpm phoenix dev` accepts every model change, so a working preview does not show that the deploy will pass.\n\nTo change a model that has been deployed as v<N>:\n1. Keep the deployed model, unchanged, as `model.v<N>` in the spec. A file of its own, such as `spec/model-v<N>.yaml`, keeps `latest` readable.\n2. Make the change in `model.latest`, which is now v<N+1>.\n3. Add `src/migrations/v<N+1>.ts` exporting `migrateToV<N+1>`. It receives the saved entities of v<N> and returns entities that are valid in v<N+1>; `ModelV<N>` and `ModelV<N+1>` are generated global namespaces.\n\nThe admin model is versioned on its own, under `src/admin/migrations/`, with its types in `AdminV<N>`.\n\n**Replacing the starter.** When the first deployment of the workspace was the starter, its `Box` model is v1 in production. When the real model replaces it, keep the starter's model as `model.v1` and define the real model in `latest`. Configurations saved from the starter are not worth converting, so the migration returns the starting state of the new model, the `initialDomainEntities` of its preset, and drops the boxes:\n```typescript\n// src/migrations/v2.ts\nimport type { Migration } from '@salsita-ai/sdk/domain'\n\nexport const migrateToV2: Migration<ModelV1.AnyDomainEntity, ModelV2.AnyDomainEntity> = () => [\n // the entities of the new model's preset\n]\n```\nAn entity of a type the new version no longer has must not stay in the returned state. An entity id starts with its type (`Box-1`), so an entity that keeps its data under a new type name needs a new id and every relation pointing at it rewritten. Read `docs/phoenix/migrations.mdx` before writing any other migration.",sdkDocumentation:'## SDK Documentation\n\nAlways search SDK docs for relevant examples before implementing Phoenix features.\n\n### Commands\n- `pnpm phoenix docs` — Full documentation index with descriptions\n- `pnpm phoenix docs -s <term>` — Search all doc content and metadata (case-insensitive)\n- `pnpm phoenix docs --dir` — Print the absolute docs directory for grep or ripgrep\n- `pnpm phoenix docs -r <path>` — Read specific doc (raw text to stdout)\n- `pnpm phoenix docs -c <category>` — List docs in a category\n- `pnpm phoenix docs -l` — List all doc paths with titles\n\n### Key Docs\n- `docs/phoenix/getting-started.mdx` — Setup, prerequisites, first project\n- `docs/phoenix/quickstart.mdx` — End-to-end tutorial building a configurator\n- `docs/phoenix/domain-model.mdx` — Entities, attributes, relations, specs\n- `docs/phoenix/components.mdx` — ECS pattern, YAML components, custom components\n- `docs/phoenix/project-structure.mdx` — Files, folders, conventions\n- `docs/phoenix/best-practices.mdx` — YAML-first, code patterns, common pitfalls\n- `docs/phoenix/state-management.mdx` — Reactive state, RxJS pipelines, data flow\n- `docs/phoenix/expression-context.mdx` — Expression API, context object, helpers\n- `docs/phoenix/webhooks.mdx` — Server-side finalization workflows\n- `docs/phoenix/finalization.mdx` — Finalization system, PDF/email/CSV generation\n- `docs/phoenix/migrations.mdx` — Schema versioning, migration files\n\n### Agent Workflow\n1. Find relevant docs by content: `pnpm phoenix docs -s \'camera\'`\n2. Read matching doc: `pnpm phoenix docs -r docs/3d-scene/cameras/transitions.mdx`\n3. Search within a doc: `pnpm phoenix docs -r <path> | grep "example"`\n4. Search titles only as a fallback: `pnpm phoenix docs -l | grep "camera"`\n5. Search generated files directly when needed: `grep -rn "camera" "$(pnpm phoenix docs --dir)"`\n6. Browse a topic area: `pnpm phoenix docs -c "Layouts"`',assetInspection:"## 3D Asset Inspection\n\nRun `pnpm phoenix inspect:assets` to discover all glTF/GLB files in `public/` and get a summary table. Use `--file <path>` for detailed single-file inspection.\n\n**When to use:** before writing YAML/code that references objectName, materialsToOverride, morphTargetInfluences, or object positioning.\n\n**What it shows per node:**\n- Name, type (Mesh/Light/Camera/Empty), children\n- Transform: `pos=`, `rot=`, `scale=` (only non-default values shown)\n- Per-node morph targets: `morphs=Width,Height`\n- Bounding box: `bounds=WxHxD` (width x height x depth in meters)\n- Origin placement: `origin=center`, `bottom-center`, `top-center`, `bottom-corner`, etc. with numerical offset\n\n**Use cases:**\n- Find exact node names for `objectName` in scene entity components\n- Find material names for `materialsToOverride`\n- Find morph target names for `morphTargetInfluences`\n- Check model dimensions (bounds) for positioning, dimension indicators, or invariants\n- Check origin placement to understand how models anchor (center vs bottom-center)\n- Use `--json` for programmatic access to all data\n\n**Flags:** `--objects`, `--materials`, `--morphs`, `--animations`, `--json`",screenshotCli:"## Screenshot CLI\n\nCapture 3D canvas screenshots from a running dev server via `pnpm phoenix screenshot`.\n\n**Prerequisites:**\n1. `phoenix dev` must be running (starts the WebSocket server on port 3020)\n2. Configurator must be open in a browser (the browser does the actual rendering)\n\n**Options:**\n- `--output, -o` — Output file path (default: `./screenshot.png`)\n- `--width, -w` — Width in pixels (default: 1920)\n- `--height` — Height in pixels (default: 1080)\n- `--format, -f` — Image format: PNG or JPEG (default: PNG)\n- `--port` — WebSocket server port (default: 3020)\n\n**Example workflow:**\n1. Start dev server: `pnpm phoenix dev`\n2. Open configurator in browser (or via Playwright MCP)\n3. Take screenshot: `pnpm phoenix screenshot -o ./render.png -w 2560 --height 1440`\n\n**Use cases:** visual regression testing, generating product images, debugging 3D renders",inspectState:"## Inspect: State\n\nGet the current editor runtime state as JSON via `pnpm phoenix inspect:state`.\n\n**Prerequisites:** same as screenshot (dev server running + browser open)\n\n**Options:**\n- `--output, -o` — Output file path (prints to stdout if omitted)\n- `--sections, -s` — Comma-separated: entities, navigation, validation (default: all)\n- `--pretty` — Pretty-print JSON (default: true)\n- `--port` — WebSocket server port (default: 3020)\n\n**Example:** `pnpm phoenix inspect:state -o ./state.json -s entities,navigation`\n\n**Lifecycle status:** Always included in response. Shows which systems are ready:\n- `domainLoaded` — domain data loaded\n- `domainContextReady` — domain context initialized (entities available)\n- `configuratorReady` — 3D configurator initialized\n- `sessionAuthenticated` — session service active\n- `editorMode` — editor mode enabled\n\n**Tips:** Use `--sections` to limit payload size. Pipe through `head`/`tail` for partial output (e.g., `pnpm phoenix inspect:state | head -50`).\n\n**Use cases:** AI agent context, debugging entity state, inspecting navigation/validation",inspectData:`## Inspect: Data
7
+ - Underscore folders (_shared/, _utils/) are NOT auto-imported`,exportRules:'## Export Rules\nAll files in src/expressions/, src/actions/, src/invariants/, src/transformers/, src/components/, src/handlers/, src/elements/, src/webhooks/ MUST use default exports. Can be a single item or an array. Named exports are ignored by the SDK auto-import system.\nThe default export must be what the folder\'s phx factory returns (for example `phx.frontend.createCustomPhoenixLayoutElement()` in src/elements/). Any other value, such as a plain React component, stops the application at start with an "Invalid default export in <file>" error. Put plain components and helpers in an underscore folder.',webhookMembership:"## Webhook Membership\n- User-authored components, admin components, and handlers are frontend-only by default.\n- A handler that registers `createMapPublishedRevisionDataHandler`, `createMapPublishedChunkedDataHandler`, `createDataRowValidatorHandler`, or `createSheetValidatorHandler` is included in the webhook automatically.\n- To include another component or handler in the webhook, put `'use webhook'` as its first statement (leading comments are allowed).\n- A webhook-included file and its runtime local-import closure must not import browser SDK entrypoints (`application`, `admin`, `configurator`, `editor`, `react`, `ui`) or style/font/image assets. Spec parsing reports the unsafe import and inclusion reason as a diagnostic.\n- Keep browser rendering in an unpinned file. Move shared server-safe logic into a separate module when both frontend and webhook code need it.",doNotEdit:"## Do Not Edit\n- `.phoenix/` directory — completely regenerated on each build. The one exception is `.phoenix/variants/`, where the `phoenix-variants` skill has you write option files; a rebuild keeps it\n- `tsconfig.json`, `eslint.config.js`, `prettier.config.js`, `.linguirc`, `.nvmrc`\n- `src/locales/` .ts files — compiled from .po files\n- `phoenix` and `phoenix-*` folders under `.claude/skills/` and `.agents/skills/` — Phoenix rewrites its skills on every sync, removes anything else inside their folders and removes any other `phoenix-*` skill folder. To customise a skill, copy it to a folder whose name does not start with `phoenix`",modelVersioning:"## Version the Domain Model Once It Is Deployed\nA deployed model version cannot change, because saved configurations depend on it. `pnpm phoenix deploy` is refused, before anything is uploaded, when the model differs from the one already deployed under the same version. The version is not written anywhere: `model.latest` is always the highest numbered version plus one, so a spec with only `latest` is v1, and `applicationVersion` plays no part. `pnpm phoenix dev` accepts every model change, so a working preview does not show that the deploy will pass.\n\nTo change a model that has been deployed as v<N>:\n1. Keep the deployed model, unchanged, as `model.v<N>` in the spec. A file of its own, such as `spec/model-v<N>.yaml`, keeps `latest` readable.\n2. Make the change in `model.latest`, which is now v<N+1>.\n3. Add `src/migrations/v<N+1>.ts` exporting `migrateToV<N+1>`. It receives the saved entities of v<N> and returns entities that are valid in v<N+1>; `ModelV<N>` and `ModelV<N+1>` are generated global namespaces.\n\nThe admin model is versioned on its own, under `src/admin/migrations/`, with its types in `AdminV<N>`.\n\n**Replacing the starter.** When the first deployment of the workspace was the starter, its `Box` model is v1 in production. When the real model replaces it, keep the starter's model as `model.v1` and define the real model in `latest`. Configurations saved from the starter are not worth converting, so the migration returns the starting state of the new model, the `initialDomainEntities` of its preset, and drops the boxes:\n```typescript\n// src/migrations/v2.ts\nimport type { Migration } from '@salsita-ai/sdk/domain'\n\nexport const migrateToV2: Migration<ModelV1.AnyDomainEntity, ModelV2.AnyDomainEntity> = () => [\n // the entities of the new model's preset\n]\n```\nAn entity of a type the new version no longer has must not stay in the returned state. An entity id starts with its type (`Box-1`), so an entity that keeps its data under a new type name needs a new id and every relation pointing at it rewritten. Read `docs/phoenix/migrations.mdx` before writing any other migration.",sdkDocumentation:'## SDK Documentation\n\nAlways search SDK docs for relevant examples before implementing Phoenix features.\n\n### Commands\n- `pnpm phoenix docs` — Full documentation index with descriptions\n- `pnpm phoenix docs -s <term>` — Search all doc content and metadata (case-insensitive)\n- `pnpm phoenix docs --dir` — Print the absolute docs directory for grep or ripgrep\n- `pnpm phoenix docs -r <path>` — Read specific doc (raw text to stdout)\n- `pnpm phoenix docs -c <category>` — List docs in a category\n- `pnpm phoenix docs -l` — List all doc paths with titles\n\n### Key Docs\n- `docs/phoenix/getting-started.mdx` — Setup, prerequisites, first project\n- `docs/phoenix/quickstart.mdx` — End-to-end tutorial building a configurator\n- `docs/phoenix/domain-model.mdx` — Entities, attributes, relations, specs\n- `docs/phoenix/components.mdx` — ECS pattern, YAML components, custom components\n- `docs/phoenix/project-structure.mdx` — Files, folders, conventions\n- `docs/phoenix/best-practices.mdx` — YAML-first, code patterns, common pitfalls\n- `docs/phoenix/state-management.mdx` — Reactive state, RxJS pipelines, data flow\n- `docs/phoenix/expression-context.mdx` — Expression API, context object, helpers\n- `docs/phoenix/webhooks.mdx` — Server-side finalization workflows\n- `docs/phoenix/finalization.mdx` — Finalization system, PDF/email/CSV generation\n- `docs/phoenix/migrations.mdx` — Schema versioning, migration files\n\n### Agent Workflow\n1. Find relevant docs by content: `pnpm phoenix docs -s \'camera\'`\n2. Read matching doc: `pnpm phoenix docs -r docs/3d-scene/cameras/transitions.mdx`\n3. Search within a doc: `pnpm phoenix docs -r <path> | grep "example"`\n4. Search titles only as a fallback: `pnpm phoenix docs -l | grep "camera"`\n5. Search generated files directly when needed: `grep -rn "camera" "$(pnpm phoenix docs --dir)"`\n6. Browse a topic area: `pnpm phoenix docs -c "Layouts"`',assetInspection:"## 3D Asset Inspection\n\nRun `pnpm phoenix inspect:assets` to discover all glTF/GLB files in `public/` and get a summary table. Use `--file <path>` for detailed single-file inspection.\n\n**When to use:** before writing YAML/code that references objectName, materialsToOverride, morphTargetInfluences, or object positioning.\n\n**What it shows per node:**\n- Name, type (Mesh/Light/Camera/Empty), children\n- Transform: `pos=`, `rot=`, `scale=` (only non-default values shown)\n- Per-node morph targets: `morphs=Width,Height`\n- Bounding box: `bounds=WxHxD` (width x height x depth in meters)\n- Origin placement: `origin=center`, `bottom-center`, `top-center`, `bottom-corner`, etc. with numerical offset\n\n**Use cases:**\n- Find exact node names for `objectName` in scene entity components\n- Find material names for `materialsToOverride`\n- Find morph target names for `morphTargetInfluences`\n- Check model dimensions (bounds) for positioning, dimension indicators, or invariants\n- Check origin placement to understand how models anchor (center vs bottom-center)\n- Use `--json` for programmatic access to all data\n\n**Flags:** `--objects`, `--materials`, `--morphs`, `--animations`, `--json`",screenshotCli:"## Screenshot CLI\n\nCapture 3D canvas screenshots from a running dev server via `pnpm phoenix screenshot`.\n\n**Prerequisites:**\n1. `phoenix dev` must be running (starts the WebSocket server on port 3020)\n2. Configurator must be open in a browser (the browser does the actual rendering)\n\n**Options:**\n- `--output, -o` — Output file path (default: `./screenshot.png`)\n- `--width, -w` — Width in pixels (default: 1920)\n- `--height` — Height in pixels (default: 1080)\n- `--format, -f` — Image format: PNG or JPEG (default: PNG)\n- `--port` — WebSocket server port (default: 3020)\n\n**Example workflow:**\n1. Start dev server: `pnpm phoenix dev`\n2. Open configurator in browser (or via Playwright MCP)\n3. Take screenshot: `pnpm phoenix screenshot -o ./render.png -w 2560 --height 1440`\n\n**Use cases:** visual regression testing, generating product images, debugging 3D renders",inspectState:"## Inspect: State\n\nGet the current editor runtime state as JSON via `pnpm phoenix inspect:state`.\n\n**Prerequisites:** same as screenshot (dev server running + browser open)\n\n**Options:**\n- `--output, -o` — Output file path (prints to stdout if omitted)\n- `--sections, -s` — Comma-separated: entities, navigation, validation (default: all)\n- `--pretty` — Pretty-print JSON (default: true)\n- `--port` — WebSocket server port (default: 3020)\n\n**Example:** `pnpm phoenix inspect:state -o ./state.json -s entities,navigation`\n\n**Lifecycle status:** Always included in response. Shows which systems are ready:\n- `domainLoaded` — domain data loaded\n- `domainContextReady` — domain context initialized (entities available)\n- `configuratorReady` — 3D configurator initialized\n- `sessionAuthenticated` — session service active\n- `editorMode` — editor mode enabled\n\n**Tips:** Use `--sections` to limit payload size. Pipe through `head`/`tail` for partial output (e.g., `pnpm phoenix inspect:state | head -50`).\n\n**Use cases:** AI agent context, debugging entity state, inspecting navigation/validation",inspectData:`## Inspect: Data
11
8
 
12
9
  Get the current editor context data as JSON via \`pnpm phoenix inspect:data\`.
13
10
 
@@ -72,10 +69,10 @@ Rendered appearance is a deliverable, not a side effect. Before presenting any p
72
69
  Inspect and report:
73
70
 
74
71
  1. Geometry. Every part rests on its support. Name where the product meets the ground and confirm its shadow and any selection indicator sit there too. Nothing floats, intersects, or protrudes. Scale and orientation are consistent between parts and match the stated dimensions. Each part is complete and present.
75
- 2. Fidelity. The result matches the client's own photographs, renders, and drawings where supplied. Name any divergence.
76
- 3. Response. Every configurable surface of every part reacts to its control, not only the parts you just changed.
77
- 4. Density. Every decision the user must make is reachable without hunting, and no single property's options dominate the surface holding them.
78
- 5. Loading. How long until a meaningful first frame, and whether anything indicates progress meanwhile.
72
+ 2. Response. Every configurable surface of every part reacts to its control, not only the parts you just changed.
73
+ 3. Loading. How long until a meaningful first frame, and whether anything indicates progress meanwhile.
74
+
75
+ This covers what follows from the change you just made, in the state you are already in. Fidelity against the client's own material, the density of the controls, and every state you did not open belong to an independent reviewer, which the \`phoenix-create-configurator\` skill's Appearance review covers.
79
76
 
80
77
  Report defects you are deferring as defects. Do not call work done, verified, or complete while any of the above is unchecked or failing: say which, and recommend fixing now or later.
81
78
 
@@ -1,13 +1,14 @@
1
- let e=e=>`webhookHandlers${e}`;export const generateApplicationSpecWebhookBuilders=(o,t)=>{let i=o.appMetadata.useClerk?` clerk: {
1
+ let t=t=>`webhookHandlers${t}`;export const generateApplicationSpecWebhookBuilders=(e,o)=>{let i=e.appMetadata.useClerk?` clerk: {
2
2
  apiKey: phx.webhooksEnv.CLERK_API_KEY,
3
3
  authorizedParties: [phx.webhooksEnv.FRONTEND_URL, phx.webhooksEnv.RESOURCES_URL],
4
4
  jwtSecret: phx.webhooksEnv.JWT_SECRET_BASE64,
5
5
  oauthClientId: phx.webhooksEnv.OAUTH_PROVIDER_CLIENT_ID,
6
6
  oauthClientSecret: phx.webhooksEnv.OAUTH_PROVIDER_CLIENT_SECRET,
7
7
  oauthProviderBaseUrl: phx.webhooksEnv.OAUTH_PROVIDER_BASE_URL,
8
- },`:"",r=t.map((o,t)=>{let i=e(t),r=o.replace(/\.tsx?$/,".js");return`import ${i} from '../${r}'`}).join("\n"),a=t.length>0,n=t.map((o,t)=>e(t)),l=a?`[${n.join(", ")}].flat()`:"[]",s=a?`
9
- .withHandlers(${l})`:"";return`// Auto-generated by application-spec pipeline. Do not edit.
8
+ },`:"",r=o.map((e,o)=>{let i=t(o),r=e.replace(/\.tsx?$/,".js");return`import ${i} from '../${r}'`}).join("\n"),n=o.length>0,s=o.map((e,o)=>`{ origin: '${e}', exports: ${t(o)} }`),a=`[${s.join(", ")}]`,l=n?`
9
+ .withHandlers(${a})`:"";return`// Auto-generated by application-spec pipeline. Do not edit.
10
10
  import { createDomainWebhook } from '@salsita-ai/sdk/webhook'
11
+ import type { DeploymentAssistant } from '@salsita-ai/sdk/contracts/assistant'
11
12
 
12
13
  import { configuratorBuilder, createI18n } from './domain.js'
13
14
  import { customComponentOptics } from './configurator-domain-code.js'
@@ -15,12 +16,14 @@ import { customAdminComponentOptics } from './admin-domain-code.js'
15
16
  ${r?`
16
17
  ${r}
17
18
  `:""}
19
+ const $assistantServerSettings: Pick<DeploymentAssistant, 'instructions' | 'ai'> | null = ${JSON.stringify(e.configurator.assistantServerSettings?{instructions:e.configurator.assistantServerSettings.instructions??void 0,ai:e.configurator.assistantServerSettings.ai}:null)}
20
+
18
21
  const webhookConfiguratorBuilder = configuratorBuilder
19
22
  .withComponentOptics(customComponentOptics)
20
23
  .withAdminComponentOptics(customAdminComponentOptics)
21
24
  .withDefaultEnvs({
22
25
  isDev: phx.webhooksEnv.IS_DEV,
23
- })${s}
26
+ })${l}
24
27
 
25
28
  export const {
26
29
  authHandlerBuilder,
@@ -33,6 +36,8 @@ export const {
33
36
  } = createDomainWebhook({
34
37
  configuratorBuilder: webhookConfiguratorBuilder,
35
38
  createI18n,
39
+ assistantServerSettings: $assistantServerSettings,
40
+ assistantStrictThreads: phx.webhooksEnv.ASSISTANT_STRICT_THREADS,
36
41
  ${i}
37
42
  })
38
43
 
@@ -1,6 +1,6 @@
1
- import{generateEnvReader as e}from"../common/env-reader.js";import{autoHeader as r}from"../common/file-headers.js";let t={IS_DEV:{type:"bool",default:!1,devDefault:!0},AWS_S3_PUBLIC_RESOURCES_BUCKET:{type:"str",required:!0},AWS_S3_RESOURCES_REGION:{type:"str",required:!0},DEPLOYMENT_RESOURCES_PATH:{type:"str",default:"deployment-resources"}},o={CLERK_API_KEY:{type:"str",required:!0},FRONTEND_URL:{type:"str",required:!0},JWT_SECRET_BASE64:{type:"str",required:!0},OAUTH_PROVIDER_CLIENT_ID:{type:"str",required:!0},OAUTH_PROVIDER_CLIENT_SECRET:{type:"str",required:!0},OAUTH_PROVIDER_BASE_URL:{type:"str",required:!0},RESOURCES_URL:{type:"str",required:!0}};export const generateApplicationSpecWebhooksConfig=i=>{let n=i.infra.env?.webhook??{},R=i.appMetadata.useClerk?o:{},{imports:E,config:p}=e({...t,...R,...n}),s=E.length>0?`import { ${E.join(", ")} } from 'envalid'
1
+ import{generateEnvReader as e}from"../common/env-reader.js";import{autoHeader as r}from"../common/file-headers.js";let t={IS_DEV:{type:"bool",default:!1,devDefault:!0},ASSISTANT_STRICT_THREADS:{type:"bool",default:!1},AWS_S3_PUBLIC_RESOURCES_BUCKET:{type:"str",required:!0},AWS_S3_RESOURCES_REGION:{type:"str",required:!0},DEPLOYMENT_RESOURCES_PATH:{type:"str",default:"deployment-resources"}},o={CLERK_API_KEY:{type:"str",required:!0},FRONTEND_URL:{type:"str",required:!0},JWT_SECRET_BASE64:{type:"str",required:!0},OAUTH_PROVIDER_CLIENT_ID:{type:"str",required:!0},OAUTH_PROVIDER_CLIENT_SECRET:{type:"str",required:!0},OAUTH_PROVIDER_BASE_URL:{type:"str",required:!0},RESOURCES_URL:{type:"str",required:!0}};export const generateApplicationSpecWebhooksConfig=i=>{let n=i.infra.env?.webhook??{},R=i.appMetadata.useClerk?o:{},{imports:E,config:p}=e({...t,...R,...n}),_=E.length>0?`import { ${E.join(", ")} } from 'envalid'
2
2
  `:"";return`${r("webhooks.config.ts","Runtime environment config for the webhook server.")}
3
- ${s}import { createEnvReader } from '@salsita-ai/sdk/common/env'
3
+ ${_}import { createEnvReader } from '@salsita-ai/sdk/common/env'
4
4
 
5
5
  const readRuntimeConfig = createEnvReader(${p})
6
6
 
@@ -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})};
@@ -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)})};
@@ -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: `RecipeFactoryBuilder` 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;