@salsita-ai/sdk 0.50.0-develop.b9eb39baf0 → 0.50.0-develop.bc08a38ffe

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 (1025) 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/core/components/component-filter.d.ts +53 -0
  4. package/dist/application-spec/core/components/component-filter.js +1 -0
  5. package/dist/application-spec/core/components/index.d.ts +2 -0
  6. package/dist/application-spec/core/components/index.js +1 -0
  7. package/dist/application-spec/core/components/sdk-code-ref.d.ts +9 -0
  8. package/dist/application-spec/core/components/sdk-code-ref.js +1 -0
  9. package/dist/application-spec/core/enhanced-json-value.d.ts +0 -68
  10. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  11. package/dist/application-spec/core/expressions/index.d.ts +2 -0
  12. package/dist/application-spec/core/expressions/index.js +1 -0
  13. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +11 -0
  14. package/dist/application-spec/core/expressions/sdk-expression-implementation.d.ts +24 -0
  15. package/dist/application-spec/core/expressions/sdk-expression-implementation.js +1 -0
  16. package/dist/application-spec/core/index.d.ts +2 -0
  17. package/dist/application-spec/core/index.js +1 -1
  18. package/dist/application-spec/core/json-value.d.ts +1 -1
  19. package/dist/application-spec/{core → enhanced-json}/eval-to-constant.d.ts +1 -1
  20. package/dist/application-spec/enhanced-json/index.d.ts +4 -0
  21. package/dist/application-spec/enhanced-json/index.js +1 -0
  22. package/dist/application-spec/enhanced-json/is-enhanced-json-array.d.ts +2 -0
  23. package/dist/application-spec/enhanced-json/is-enhanced-json-array.js +1 -0
  24. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.d.ts +18 -0
  25. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.js +1 -0
  26. package/dist/application-spec/enhanced-json/schema-from-value.d.ts +24 -0
  27. package/dist/application-spec/enhanced-json/schema-from-value.js +1 -0
  28. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.d.ts +14 -0
  29. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.js +1 -0
  30. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.d.ts +12 -0
  31. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.js +1 -0
  32. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.d.ts +13 -0
  33. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.js +1 -0
  34. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  35. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  36. package/dist/application-spec/errors/diagnostic-messages.d.ts +12 -0
  37. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  38. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +8 -1
  39. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  40. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +4 -4
  41. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.d.ts +4 -2
  42. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.js +1 -1
  43. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +56 -56
  44. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +1 -1
  45. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  46. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-phx-globals.js +3 -0
  47. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-relation-expressions.js +1 -1
  48. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.d.ts +6 -8
  49. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +11 -11
  50. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +1 -1
  51. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  52. package/dist/application-spec/generate-application/code/templates/domain-spec.js +12 -12
  53. package/dist/application-spec/generate-application/code/templates/domain.js +3 -3
  54. package/dist/application-spec/generate-application/code/templates/globals.js +5 -4
  55. package/dist/application-spec/generate-application/code/templates/index.d.ts +0 -7
  56. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  57. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +66 -42
  59. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +8 -2
  60. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  61. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +14 -14
  62. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +6 -8
  63. package/dist/application-spec/generate-application/code/templates/webhook-builders.js +4 -3
  64. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -2
  65. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +1 -3
  66. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +1 -3
  67. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +1 -1
  68. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  69. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +2 -1
  70. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  71. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +2 -4
  72. package/dist/application-spec/index.d.ts +1 -0
  73. package/dist/application-spec/index.js +1 -1
  74. package/dist/application-spec/parse-application-files/categorize/module-analysis.d.ts +1 -1
  75. package/dist/application-spec/parse-application-files/categorize/module-analysis.js +1 -1
  76. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +16 -3
  77. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  78. package/dist/application-spec/parse-application-files/raw-spec/raw-spec-file.js +1 -1
  79. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  80. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  81. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +1 -9
  82. package/dist/application-spec/parse-application-files/spec/components/component-entry.js +1 -1
  83. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +1 -54
  84. package/dist/application-spec/parse-application-files/spec/components/component-filter.js +1 -1
  85. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -1
  86. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  87. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +1 -28
  88. package/dist/application-spec/parse-application-files/spec/expressions/expression.js +1 -1
  89. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +1 -1
  90. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  91. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  92. package/dist/application-spec/parse-application-files/spec/expressions/index.js +1 -1
  93. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  94. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  95. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +7 -2
  96. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  97. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
  98. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
  99. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
  100. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
  101. package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
  102. package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
  103. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  104. package/dist/application-spec/parse-application-files/spec/sections/infra.d.ts +2 -0
  105. package/dist/application-spec/parse-application-files/spec/sections/infra.js +1 -1
  106. package/dist/client/authorized-client.d.ts +3 -1
  107. package/dist/client/authorized-client.js +1 -1
  108. package/dist/client/contract.d.ts +34 -0
  109. package/dist/client/contract.js +1 -1
  110. package/dist/client/index.d.ts +2 -2
  111. package/dist/client/index.js +1 -1
  112. package/dist/client/local-authorized-client.d.ts +3 -1
  113. package/dist/client/local-authorized-client.js +1 -1
  114. package/dist/client/memory-authorized-client.d.ts +3 -1
  115. package/dist/client/memory-authorized-client.js +1 -1
  116. package/dist/client/phoenix-api.d.ts +311 -2
  117. package/dist/configurator/application-runtime/extensions/create-configurator-extensions.js +1 -1
  118. package/dist/configurator/application-runtime/extensions/selectors.d.ts +3 -1
  119. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  120. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +92 -3
  121. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  122. package/dist/configurator/application-runtime/extensions/systems/drag-and-drop-system/drag-and-drop-system.d.ts +3 -3
  123. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  124. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +14 -4
  125. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  126. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.d.ts +11 -0
  127. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.js +1 -0
  128. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +1 -1
  129. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -2
  130. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  131. package/dist/configurator/common/configurator-interface.d.ts +11 -1
  132. package/dist/configurator/common/configurator-interface.js +1 -1
  133. package/dist/configurator/common/frontend-analytics.d.ts +2 -0
  134. package/dist/configurator/common/frontend-analytics.js +1 -1
  135. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
  136. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +6 -0
  137. package/dist/configurator/pages/DefaultConfiguratorLayout.js +1 -0
  138. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  139. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragHandle.d.ts +1 -1
  140. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragSceneHandle.d.ts +1 -1
  141. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicator.d.ts +1 -1
  142. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicatorInternal.d.ts +1 -1
  143. package/dist/configurator/scene/scene-entity/drag-and-drop/shared.d.ts +2 -2
  144. package/dist/configurator/scene/scene-entity/drag-and-drop/use-drag-object.d.ts +1 -1
  145. package/dist/configurator/scene/scene-entity/materials/RemoteReplacedMaterial.js +1 -1
  146. package/dist/configurator/scene/scene-entity/objects/SceneEntityObjectTextDecal.d.ts +1 -1
  147. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +2 -1
  148. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  149. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +1 -1
  150. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  151. package/dist/configurator/ui/assistant/AssistantThread.d.ts +6 -2
  152. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  153. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +13 -0
  154. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -0
  155. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.d.ts +22 -0
  156. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.js +1 -0
  157. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +27 -0
  158. package/dist/configurator/ui/assistant/entity-link/entity-link-state.js +1 -0
  159. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +5 -0
  160. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +1 -0
  161. package/dist/configurator/ui/assistant/entity-link/index.d.ts +3 -0
  162. package/dist/configurator/ui/assistant/entity-link/index.js +1 -0
  163. package/dist/configurator/ui/assistant/thread-items.d.ts +13 -2
  164. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  165. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.d.ts +1 -0
  166. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.js +1 -0
  167. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.d.ts +11 -0
  168. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.js +1 -0
  169. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.d.ts +101 -0
  170. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.js +16 -0
  171. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.d.ts +1 -0
  172. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.js +1 -0
  173. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.d.ts +4 -4
  174. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  175. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.d.ts +3 -6
  176. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.js +1 -1
  177. package/dist/configurator/ui/configurator-layout/slots/slots.d.ts +1 -0
  178. package/dist/configurator/ui/configurator-layout/slots/slots.js +1 -1
  179. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +0 -74
  180. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -20
  181. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  182. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +4 -4
  183. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  184. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +47 -0
  185. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -0
  186. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +11 -26
  187. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.js +1 -1
  188. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.d.ts +2 -2
  189. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -2
  190. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +16 -19
  191. package/dist/docs/complex-use-cases/sketching.mdx +0 -38
  192. package/dist/docs/controls/select-attribute/cardselect.mdx +9 -13
  193. package/dist/docs/dimensions/3d-scene-integration/dimension-indicators.mdx +2 -2
  194. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +1 -1
  195. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +1 -1
  196. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +1 -1
  197. package/dist/docs/drag-and-drop/drag-handle.mdx +1 -1
  198. package/dist/docs/drag-and-drop/hotspot-handle.mdx +1 -1
  199. package/dist/docs/drag-and-drop/planes.mdx +1 -1
  200. package/dist/docs/drag-and-drop/rotatable.mdx +2 -2
  201. package/dist/docs/index.json +42 -1
  202. package/dist/docs/integrations/woocommerce/local-development.mdx +1 -1
  203. package/dist/docs/layouts/custom-layout.mdx +1164 -0
  204. package/dist/docs/layouts/header/fixed.mdx +2 -2
  205. package/dist/docs/layouts/header/floating.mdx +2 -2
  206. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +380 -0
  207. package/dist/docs/layouts/sidebar-footer/basic.mdx +32 -77
  208. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
  209. package/dist/docs/other-features/side-effects.mdx +8 -11
  210. package/dist/docs/other-features/transformers.mdx +4 -0
  211. package/dist/docs/other-features/violation-messages.mdx +52 -56
  212. package/dist/docs/phoenix/application-states.mdx +9 -7
  213. package/dist/docs/phoenix/configurator-interface.mdx +184 -80
  214. package/dist/docs/phoenix/deployments.mdx +1 -1
  215. package/dist/docs/phoenix/domain-model.mdx +4 -0
  216. package/dist/docs/phoenix/expression-context.mdx +11 -3
  217. package/dist/docs/phoenix/finalization.mdx +1 -1
  218. package/dist/docs/phoenix/getting-started.mdx +1 -1
  219. package/dist/docs/phoenix/layout-slots.mdx +114 -0
  220. package/dist/docs/phoenix/phoenix-cli.mdx +48 -48
  221. package/dist/docs/phoenix/project-structure.mdx +18 -11
  222. package/dist/docs/phoenix/quickstart.mdx +2 -2
  223. package/dist/docs/phoenix/sdk-builder-workflow.mdx +8 -8
  224. package/dist/docs/phoenix/testing.mdx +140 -0
  225. package/dist/docs/phoenix/webhook-membership.mdx +10 -9
  226. package/dist/docs/phoenix/webhooks.mdx +2 -2
  227. package/dist/docs/ux-guidelines/choosing-a-control.mdx +11 -0
  228. package/dist/domain/admin-domain/__generated/enhanced-model.d.ts +1 -2
  229. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -12
  230. package/dist/domain/admin-domain/implementation/common-admin-publish.d.ts +1 -2
  231. package/dist/domain/admin-domain/index.d.ts +9 -5
  232. package/dist/domain/admin-domain/index.js +1 -1
  233. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +2 -2
  234. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  235. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  236. package/dist/domain/application/admin-page-factories.d.ts +1 -2
  237. package/dist/domain/application/application-config.d.ts +7 -26
  238. package/dist/domain/application/assistant/assistant-fields.d.ts +12 -0
  239. package/dist/domain/application/assistant/assistant-fields.js +1 -0
  240. package/dist/domain/application/assistant/assistant-manifest.d.ts +11 -1
  241. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +38 -2
  242. package/dist/domain/application/assistant/assistant-resolved-manifest.js +1 -1
  243. package/dist/domain/application/assistant/assistant-value-type.js +1 -1
  244. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +14 -0
  245. package/dist/domain/application/assistant/build-assistant-lenses.js +5 -0
  246. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  247. package/dist/domain/application/assistant/create-assistant-execution-schema.d.ts +32 -0
  248. package/dist/domain/application/assistant/create-assistant-execution-schema.js +1 -0
  249. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +1 -11
  250. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  251. package/dist/domain/application/assistant/index.d.ts +6 -1
  252. package/dist/domain/application/assistant/index.js +1 -1
  253. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +20 -0
  254. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.js +1 -0
  255. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +10 -0
  256. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -0
  257. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +48 -0
  258. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -0
  259. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +15 -0
  260. package/dist/domain/application/assistant/session-setup/create-session-assistant.js +1 -0
  261. package/dist/domain/application/assistant/session-setup/index.d.ts +4 -0
  262. package/dist/domain/application/assistant/session-setup/index.js +1 -0
  263. package/dist/domain/application/assistant-mutations.d.ts +2 -2
  264. package/dist/domain/application/assistant-mutations.js +1 -1
  265. package/dist/domain/application/assistant-recipe-groups.d.ts +2 -4
  266. package/dist/domain/application/configurator-builder.d.ts +2 -2
  267. package/dist/domain/application/configurator-builder.js +1 -1
  268. package/dist/domain/application/create-initial-published-data.d.ts +6 -7
  269. package/dist/domain/application/index.d.ts +2 -6
  270. package/dist/domain/application/index.js +1 -1
  271. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  272. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  273. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  274. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  275. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  276. package/dist/domain/application/published-data/build-legend-data.d.ts +1 -1
  277. package/dist/domain/application/published-data/format-field-type.d.ts +1 -1
  278. package/dist/domain/application/published-data/map-data-to-sheet.d.ts +1 -1
  279. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +3 -3
  280. package/dist/domain/application/published-data/map-published-data.d.ts +7 -3
  281. package/dist/domain/application/published-data/validate-sheet-data.d.ts +1 -1
  282. package/dist/domain/available-system-components.js +1 -1
  283. package/dist/domain/core/action/action-factory.d.ts +11 -0
  284. package/dist/domain/core/{action.d.ts → action/action.d.ts} +21 -17
  285. package/dist/domain/core/action/index.d.ts +2 -0
  286. package/dist/domain/core/action/index.js +1 -0
  287. package/dist/domain/{components → core/component}/component-reader-types.d.ts +1 -1
  288. package/dist/domain/{components → core/component}/debug-state-component.d.ts +1 -1
  289. package/dist/domain/core/component/debug-state-component.js +1 -0
  290. package/dist/domain/core/component/domain-component-optic.d.ts +65 -0
  291. package/dist/domain/core/component/domain-component-optic.js +16 -0
  292. package/dist/domain/{components → core/component}/drag-state-component.d.ts +1 -1
  293. package/dist/domain/core/component/drag-state-component.js +1 -0
  294. package/dist/domain/{components → core/component}/export-state-component.d.ts +1 -1
  295. package/dist/domain/core/component/export-state-component.js +1 -0
  296. package/dist/domain/{components → core/component}/fullscreen-state-component.d.ts +1 -1
  297. package/dist/domain/core/component/fullscreen-state-component.js +1 -0
  298. package/dist/domain/{components → core/component}/group-components-by-entity-id-and-name.d.ts +1 -1
  299. package/dist/domain/core/component/group-components-by-entity-id-and-name.js +1 -0
  300. package/dist/domain/{components → core/component}/hover-state-component.d.ts +1 -1
  301. package/dist/domain/core/component/hover-state-component.js +1 -0
  302. package/dist/domain/core/component/index.d.ts +18 -0
  303. package/dist/domain/core/component/index.js +1 -0
  304. package/dist/domain/{components → core/component}/legacy-filter.d.ts +4 -18
  305. package/dist/domain/{components → core/component}/navigation-state-component.d.ts +1 -1
  306. package/dist/domain/core/component/navigation-state-component.js +1 -0
  307. package/dist/domain/{components → core/component}/selection-state-component.d.ts +1 -1
  308. package/dist/domain/core/component/selection-state-component.js +1 -0
  309. package/dist/domain/{components → core/component}/system-component-builder.d.ts +1 -1
  310. package/dist/domain/core/component/system-component-builder.js +1 -0
  311. package/dist/domain/{components → core/component}/system-component-filter.d.ts +38 -18
  312. package/dist/domain/core/component/system-virtual-entity.js +1 -0
  313. package/dist/domain/{components → core/component}/tool-state-component.d.ts +1 -1
  314. package/dist/domain/core/component/tool-state-component.js +1 -0
  315. package/dist/domain/{components → core/component}/updates.d.ts +1 -1
  316. package/dist/domain/{components → core/component}/view-state-component.d.ts +1 -1
  317. package/dist/domain/core/component/view-state-component.js +1 -0
  318. package/dist/domain/{components → core/component}/viewport-state-component.d.ts +1 -1
  319. package/dist/domain/core/component/viewport-state-component.js +1 -0
  320. package/dist/domain/core/data-schema/data-cell-value.d.ts +4 -0
  321. package/dist/domain/core/data-schema/data-schema-array-field.d.ts +5 -0
  322. package/dist/domain/core/data-schema/data-schema-field-object.d.ts +4 -0
  323. package/dist/domain/core/data-schema/data-schema-field-object.js +1 -0
  324. package/dist/domain/core/data-schema/data-schema-field.d.ts +2 -0
  325. package/dist/domain/core/data-schema/data-schema-field.js +1 -0
  326. package/dist/domain/core/data-schema/data-schema-localized-field.d.ts +4 -0
  327. package/dist/domain/core/data-schema/data-schema-localized-field.js +1 -0
  328. package/dist/domain/core/data-schema/data-schema-primitive-field.d.ts +5 -0
  329. package/dist/domain/core/data-schema/data-schema-primitive-field.js +1 -0
  330. package/dist/domain/core/data-schema/data-schema.d.ts +2 -0
  331. package/dist/domain/core/data-schema/data-schema.js +1 -0
  332. package/dist/domain/core/data-schema/index.d.ts +7 -0
  333. package/dist/domain/core/data-schema/index.js +1 -0
  334. package/dist/domain/core/domain-factory.d.ts +3 -3
  335. package/dist/domain/core/domain.d.ts +3 -3
  336. package/dist/domain/core/emission/index.d.ts +8 -0
  337. package/dist/domain/core/emission/index.js +1 -0
  338. package/dist/domain/core/emission/reset-state-emission.d.ts +12 -0
  339. package/dist/domain/core/emission/reset-state-emission.js +1 -0
  340. package/dist/domain/core/emission/state-emission.d.ts +4 -0
  341. package/dist/domain/core/emission/state-emission.js +1 -0
  342. package/dist/domain/core/emission/state-update-emission.d.ts +14 -0
  343. package/dist/domain/core/emission/state-update-emission.js +1 -0
  344. package/dist/domain/core/emission/state-validation-result.d.ts +18 -0
  345. package/dist/domain/core/emission/state-validation-result.js +1 -0
  346. package/dist/domain/core/emission/transformation-log.d.ts +2 -0
  347. package/dist/domain/core/emission/transformation-log.js +1 -0
  348. package/dist/domain/core/emission/transformer-log-entry.d.ts +6 -0
  349. package/dist/domain/core/emission/transformer-log-entry.js +1 -0
  350. package/dist/domain/core/emission/transformer-log.d.ts +11 -0
  351. package/dist/domain/core/emission/transformer-log.js +1 -0
  352. package/dist/domain/core/emission/transformer-phase.d.ts +1 -0
  353. package/dist/domain/core/emission/transformer-phase.js +1 -0
  354. package/dist/domain/core/expression/aliased-expressions.d.ts +10 -0
  355. package/dist/domain/core/expression/aliased-expressions.js +1 -0
  356. package/dist/domain/core/expression/constant-expressions.d.ts +16 -0
  357. package/dist/domain/core/expression/constant-expressions.js +1 -0
  358. package/dist/domain/core/expression/custom-expression.d.ts +25 -0
  359. package/dist/domain/core/expression/custom-expression.js +1 -0
  360. package/dist/domain/core/expression/expression.d.ts +46 -0
  361. package/dist/domain/core/expression/expression.js +1 -0
  362. package/dist/domain/core/expression/index.d.ts +4 -0
  363. package/dist/domain/core/expression/index.js +1 -0
  364. package/dist/domain/core/index.d.ts +9 -4
  365. package/dist/domain/core/index.js +1 -1
  366. package/dist/domain/{invariants → core/invariant}/builtin-invariant.d.ts +2 -1
  367. package/dist/domain/core/invariant/custom-invariants.d.ts +13 -0
  368. package/dist/domain/core/invariant/custom-invariants.js +1 -0
  369. package/dist/domain/core/invariant/index.d.ts +5 -0
  370. package/dist/domain/core/invariant/index.js +1 -0
  371. package/dist/domain/core/invariant/invariants.d.ts +10 -0
  372. package/dist/domain/core/invariant/invariants.js +1 -0
  373. package/dist/domain/core/invariant/violation-component.js +1 -0
  374. package/dist/domain/{invariants → core/invariant}/violation.d.ts +52 -4
  375. package/dist/domain/core/invariant/violation.js +1 -0
  376. package/dist/domain/core/model/model.d.ts +1 -1
  377. package/dist/domain/core/recipe/index.d.ts +1 -0
  378. package/dist/domain/core/recipe/index.js +1 -0
  379. package/dist/domain/core/recipe/recipes.d.ts +23 -0
  380. package/dist/domain/core/recipe/recipes.js +1 -0
  381. package/dist/domain/core/relation/all-of-type-relation.d.ts +19 -0
  382. package/dist/domain/core/relation/all-of-type-relation.js +1 -0
  383. package/dist/domain/{relations → core/relation}/component-factories.d.ts +1 -1
  384. package/dist/domain/core/relation/component-factories.js +1 -0
  385. package/dist/domain/{relations → core/relation}/composed-of.d.ts +1 -1
  386. package/dist/domain/core/relation/composed-of.js +1 -0
  387. package/dist/domain/core/relation/direct-relation.d.ts +17 -0
  388. package/dist/domain/core/relation/index.d.ts +8 -0
  389. package/dist/domain/core/relation/index.js +1 -0
  390. package/dist/domain/core/relation/indirect-relation.d.ts +25 -0
  391. package/dist/domain/core/relation/indirect-relation.js +1 -0
  392. package/dist/domain/{relations → core/relation}/reference-component.d.ts +4 -4
  393. package/dist/domain/core/relation/reference-component.js +1 -0
  394. package/dist/domain/{relations → core/relation}/reference-field.d.ts +1 -1
  395. package/dist/domain/core/relation/reference-field.js +1 -0
  396. package/dist/domain/core/relation/relation-factory.d.ts +22 -0
  397. package/dist/domain/core/relation/relation-factory.js +1 -0
  398. package/dist/domain/core/state/id-sequence.d.ts +15 -0
  399. package/dist/domain/core/state/id-sequence.js +1 -0
  400. package/dist/domain/core/state/index.d.ts +3 -0
  401. package/dist/domain/core/state/index.js +1 -0
  402. package/dist/domain/core/{migrations.d.ts → state/migrations.d.ts} +15 -46
  403. package/dist/domain/core/state/migrations.js +1 -0
  404. package/dist/domain/core/{state.d.ts → state/state.d.ts} +2 -2
  405. package/dist/domain/domain-builder.d.ts +2 -5
  406. package/dist/domain/domain-builder.js +1 -1
  407. package/dist/domain/domain-context/action-system/action-system.d.ts +2 -2
  408. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  409. package/dist/domain/domain-context/action-system/index.d.ts +1 -0
  410. package/dist/domain/domain-context/action-system/index.js +1 -0
  411. package/dist/domain/domain-context/analytics-system/index.d.ts +2 -0
  412. package/dist/domain/domain-context/analytics-system/index.js +1 -0
  413. package/dist/domain/domain-context/create-transformer.d.ts +1 -1
  414. package/dist/domain/domain-context/dimension-system/dimension-state.js +1 -1
  415. package/dist/domain/domain-context/dimension-system/dimension-system.d.ts +3 -4
  416. package/dist/domain/domain-context/dimension-system/dimension-system.js +1 -1
  417. package/dist/domain/domain-context/dimension-system/index.d.ts +1 -0
  418. package/dist/domain/domain-context/dimension-system/index.js +1 -0
  419. package/dist/domain/domain-context/domain-context-systems.d.ts +7 -7
  420. package/dist/domain/domain-context/index.d.ts +8 -18
  421. package/dist/domain/domain-context/index.js +1 -1
  422. package/dist/domain/domain-context/navigation-system/index.d.ts +3 -0
  423. package/dist/domain/domain-context/navigation-system/index.js +1 -0
  424. package/dist/domain/domain-context/navigation-system/navigation-system.d.ts +5 -7
  425. package/dist/domain/domain-context/navigation-system/navigation-system.js +1 -1
  426. package/dist/domain/domain-context/navigation-system/navigation-updates.d.ts +1 -12
  427. package/dist/domain/domain-context/navigation-system/navigation-updates.js +1 -1
  428. package/dist/domain/domain-context/navigation-system/selection-transformers.d.ts +1 -1
  429. package/dist/domain/domain-context/recipe-system/index.d.ts +1 -0
  430. package/dist/domain/domain-context/recipe-system/index.js +1 -0
  431. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.d.ts +2 -4
  432. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.js +1 -1
  433. package/dist/domain/domain-context/relation-transformers/cascade-deletes.d.ts +2 -2
  434. package/dist/domain/domain-context/relation-transformers/cascade-deletes.js +1 -1
  435. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.d.ts +3 -3
  436. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.js +1 -1
  437. package/dist/domain/domain-context/relation-transformers/create-entity-refs.d.ts +3 -3
  438. package/dist/domain/domain-context/relation-transformers/create-entity-refs.js +2 -2
  439. package/dist/domain/domain-context/relation-transformers/index.d.ts +4 -0
  440. package/dist/domain/domain-context/relation-transformers/index.js +1 -0
  441. package/dist/domain/domain-context/relation-transformers/replace-refs.d.ts +3 -3
  442. package/dist/domain/domain-context/relation-transformers/replace-refs.js +1 -1
  443. package/dist/domain/domain-context/store-system/apply-updates.d.ts +1 -2
  444. package/dist/domain/domain-context/store-system/index.d.ts +4 -0
  445. package/dist/domain/domain-context/store-system/index.js +1 -0
  446. package/dist/domain/domain-context/store-system/next-domain-entity-id.d.ts +1 -12
  447. package/dist/domain/domain-context/store-system/reconcile-projected-entities.d.ts +1 -2
  448. package/dist/domain/domain-context/store-system/reconcile-projected-entities.js +1 -1
  449. package/dist/domain/domain-context/store-system/store-system.d.ts +2 -37
  450. package/dist/domain/domain-context/store-system/store-system.js +2 -2
  451. package/dist/domain/domain-context/store-system/system-state.d.ts +2 -2
  452. package/dist/domain/domain-context/store-system/system-state.js +1 -1
  453. package/dist/domain/domain-context/transformers/actions-builder.d.ts +1 -2
  454. package/dist/domain/domain-context/transformers/actions-builder.js +1 -1
  455. package/dist/domain/domain-context/transformers/auto-snap-transformer.d.ts +6 -9
  456. package/dist/domain/domain-context/transformers/auto-snap-transformer.js +1 -1
  457. package/dist/domain/domain-context/transformers/chain-builder.d.ts +1 -1
  458. package/dist/domain/domain-context/transformers/context.d.ts +2 -6
  459. package/dist/domain/domain-context/transformers/context.js +1 -1
  460. package/dist/domain/domain-context/transformers/entity-builder.d.ts +1 -5
  461. package/dist/domain/domain-context/transformers/entity-builder.js +1 -1
  462. package/dist/domain/domain-context/transformers/index.d.ts +1 -1
  463. package/dist/domain/domain-context/transformers/index.js +1 -1
  464. package/dist/domain/domain-context/transformers/then-builder.d.ts +1 -2
  465. package/dist/domain/domain-context/transformers/when-builder.d.ts +3 -8
  466. package/dist/domain/domain-context/transformers/when-builder.js +1 -1
  467. package/dist/domain/domain-context/undo-system.d.ts +2 -3
  468. package/dist/domain/domain-runtime/access/selectors.d.ts +9 -0
  469. package/dist/domain/domain-runtime/access/selectors.js +1 -1
  470. package/dist/domain/domain-runtime/access/types.d.ts +2 -0
  471. package/dist/domain/domain-runtime/access/types.js +1 -1
  472. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +11 -0
  473. package/dist/domain/domain-runtime/domain-context/action-context.js +1 -0
  474. package/dist/domain/domain-runtime/domain-context/component-reader.d.ts +1 -2
  475. package/dist/domain/domain-runtime/domain-context/component-reader.js +1 -1
  476. package/dist/domain/domain-runtime/domain-context/domain-context.js +1 -1
  477. package/dist/domain/domain-runtime/domain-context/expression-context.d.ts +8 -0
  478. package/dist/domain/domain-runtime/domain-context/expression-context.js +1 -0
  479. package/dist/domain/domain-runtime/domain-context/index.d.ts +3 -0
  480. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.d.ts +18 -0
  481. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.js +1 -0
  482. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +19 -24
  483. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  484. package/dist/domain/domain-runtime/domain-context/types.d.ts +4 -1
  485. package/dist/domain/domain-runtime/domain-runtime.d.ts +84 -68
  486. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +19 -0
  487. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +1 -0
  488. package/dist/domain/domain-runtime/errors/implementation-error.d.ts +46 -0
  489. package/dist/domain/domain-runtime/errors/implementation-error.js +1 -0
  490. package/dist/domain/domain-runtime/errors/implementation-errors.d.ts +13 -0
  491. package/dist/domain/domain-runtime/errors/implementation-errors.js +1 -0
  492. package/dist/domain/domain-runtime/errors/index.d.ts +4 -0
  493. package/dist/domain/domain-runtime/errors/index.js +1 -0
  494. package/dist/domain/domain-runtime/errors/to-implementation-errors.d.ts +10 -0
  495. package/dist/domain/domain-runtime/errors/to-implementation-errors.js +1 -0
  496. package/dist/domain/domain-runtime/index.d.ts +1 -0
  497. package/dist/domain/domain-runtime/index.js +1 -1
  498. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +24 -0
  499. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -0
  500. package/dist/domain/domain-runtime/spec/index.d.ts +5 -0
  501. package/dist/domain/domain-runtime/spec/index.js +1 -1
  502. package/dist/domain/domain-runtime/spec/initialize.d.ts +11 -0
  503. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  504. package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.d.ts +1 -1
  505. package/dist/domain/{application → domain-runtime/spec/module-checks}/element-registration.d.ts +2 -2
  506. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -0
  507. package/dist/domain/{application → domain-runtime/spec/module-checks}/handler-registration.d.ts +1 -1
  508. package/dist/domain/domain-runtime/spec/module-checks/handler-registration.js +1 -0
  509. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +8 -0
  510. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -0
  511. package/dist/domain/{project-modules → domain-runtime/spec/module-checks}/project-modules.d.ts +8 -17
  512. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -0
  513. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +4 -0
  514. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -0
  515. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +4 -0
  516. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.js +1 -0
  517. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +15 -0
  518. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -0
  519. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +22 -0
  520. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -0
  521. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +6 -0
  522. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -0
  523. package/dist/domain/{actions → domain-runtime/spec}/prepare-action-implementations.d.ts +1 -1
  524. package/dist/domain/domain-runtime/spec/prepare-action-implementations.js +5 -0
  525. package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.d.ts +1 -1
  526. package/dist/domain/domain-runtime/spec/selectors.d.ts +5 -6
  527. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  528. package/dist/domain/domain-runtime/spec/types.d.ts +4 -4
  529. package/dist/domain/extensions/angle-indicator.js +1 -0
  530. package/dist/domain/{system-components → extensions}/attribute-switch.d.ts +1 -1
  531. package/dist/domain/extensions/attribute-switch.js +1 -0
  532. package/dist/domain/{system-components → extensions}/autorotate-camera-component.d.ts +1 -1
  533. package/dist/domain/extensions/autorotate-camera-component.js +1 -0
  534. package/dist/domain/extensions/basic-sidebar-footer.js +1 -0
  535. package/dist/domain/extensions/camera-based-hidden-entity-object.js +1 -0
  536. package/dist/domain/extensions/camera-based-hidden-entity.js +1 -0
  537. package/dist/domain/{system-components → extensions}/canvas-config.d.ts +1 -1
  538. package/dist/domain/extensions/canvas-config.js +1 -0
  539. package/dist/domain/extensions/canvas-custom-environment.js +1 -0
  540. package/dist/domain/extensions/canvas-padding.js +1 -0
  541. package/dist/domain/extensions/canvas-preset-environment.js +1 -0
  542. package/dist/domain/{system-components → extensions}/child-entity-recipe-hierarchy.d.ts +2 -2
  543. package/dist/domain/extensions/child-entity-recipe-hierarchy.js +1 -0
  544. package/dist/domain/{system-components → extensions}/client-side-image.d.ts +2 -2
  545. package/dist/domain/extensions/client-side-image.js +1 -0
  546. package/dist/domain/extensions/color-value.js +1 -0
  547. package/dist/domain/{system-components → extensions}/common/angle-indicator-schema.d.ts +3 -3
  548. package/dist/domain/extensions/common/angle-indicator-schema.js +1 -0
  549. package/dist/domain/{system-components → extensions}/common/dimension-indicator-schema.d.ts +2 -2
  550. package/dist/domain/extensions/common/index.d.ts +4 -0
  551. package/dist/domain/extensions/common/index.js +1 -0
  552. package/dist/domain/{system-components → extensions}/custom-header.d.ts +1 -1
  553. package/dist/domain/extensions/custom-header.js +1 -0
  554. package/dist/domain/extensions/custom-price-footer.js +1 -0
  555. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.d.ts +1 -1
  556. package/dist/domain/extensions/custom-sidebar-footer.js +1 -0
  557. package/dist/domain/extensions/dimension-indicator.js +1 -0
  558. package/dist/domain/{system-components → extensions}/editable-angle-indicator.d.ts +3 -2
  559. package/dist/domain/extensions/editable-angle-indicator.js +1 -0
  560. package/dist/domain/{system-components → extensions}/editable-distance-dimension-indicator.d.ts +3 -2
  561. package/dist/domain/extensions/editable-distance-dimension-indicator.js +1 -0
  562. package/dist/domain/{system-components → extensions}/editable-offset-indicator.d.ts +3 -2
  563. package/dist/domain/extensions/editable-offset-indicator.js +1 -0
  564. package/dist/domain/{system-components → extensions}/editable-size-indicator.d.ts +2 -1
  565. package/dist/domain/extensions/editable-size-indicator.js +1 -0
  566. package/dist/domain/{system-components → extensions}/entity-header.d.ts +1 -1
  567. package/dist/domain/extensions/entity-header.js +1 -0
  568. package/dist/domain/extensions/exit-tool-mode-fab.js +1 -0
  569. package/dist/domain/extensions/finalize-action.js +1 -0
  570. package/dist/domain/extensions/finalize-component.js +1 -0
  571. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -0
  572. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -0
  573. package/dist/domain/extensions/fixed-header.js +1 -0
  574. package/dist/domain/extensions/floating-header.js +1 -0
  575. package/dist/domain/extensions/hidden-header.js +1 -0
  576. package/dist/domain/extensions/hidden-sidebar-footer.js +1 -0
  577. package/dist/domain/{system-components → extensions}/horizontal-tabs.d.ts +2 -2
  578. package/dist/domain/extensions/horizontal-tabs.js +1 -0
  579. package/dist/domain/extensions/index.d.ts +69 -0
  580. package/dist/domain/extensions/index.js +1 -0
  581. package/dist/domain/{system-components → extensions}/list-selector-dimension-indicator.d.ts +3 -2
  582. package/dist/domain/extensions/list-selector-dimension-indicator.js +1 -0
  583. package/dist/domain/extensions/multilingual-text-value.js +1 -0
  584. package/dist/domain/{system-components → extensions}/navigation-steps.d.ts +2 -2
  585. package/dist/domain/extensions/navigation-steps.js +1 -0
  586. package/dist/domain/extensions/offset-anchors.js +1 -0
  587. package/dist/domain/extensions/offset-indicator.js +1 -0
  588. package/dist/domain/extensions/offset.js +1 -0
  589. package/dist/domain/extensions/other-action.js +1 -0
  590. package/dist/domain/{system-components → extensions}/property-page.d.ts +1 -1
  591. package/dist/domain/extensions/property-page.js +1 -0
  592. package/dist/domain/extensions/read-sidebar-footer.js +1 -0
  593. package/dist/domain/{system-components → extensions}/replace-entity-recipe-hierarchy.d.ts +2 -2
  594. package/dist/domain/extensions/replace-entity-recipe-hierarchy.js +1 -0
  595. package/dist/domain/extensions/rotatable.js +1 -0
  596. package/dist/domain/{system-components → extensions}/rotation-handle.d.ts +2 -2
  597. package/dist/domain/extensions/rotation-handle.js +1 -0
  598. package/dist/domain/{system-components → extensions}/save-template-thumbnail.d.ts +2 -2
  599. package/dist/domain/extensions/save-template-thumbnail.js +1 -0
  600. package/dist/domain/{system-components → extensions}/scene-entity-add-fab.d.ts +1 -1
  601. package/dist/domain/extensions/scene-entity-add-fab.js +1 -0
  602. package/dist/domain/extensions/scene-entity-animation.js +1 -0
  603. package/dist/domain/extensions/scene-entity-control.js +1 -0
  604. package/dist/domain/{system-components → extensions}/scene-entity-delete-fab.d.ts +1 -1
  605. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -0
  606. package/dist/domain/extensions/scene-entity-floor-object.js +1 -0
  607. package/dist/domain/{system-components → extensions}/scene-entity-html-hotspot.d.ts +1 -1
  608. package/dist/domain/extensions/scene-entity-html-hotspot.js +1 -0
  609. package/dist/domain/{system-components → extensions}/scene-entity-navigation-hotspot.d.ts +1 -1
  610. package/dist/domain/extensions/scene-entity-navigation-hotspot.js +1 -0
  611. package/dist/domain/{system-components → extensions}/scene-entity-object-html-hotspot.d.ts +1 -1
  612. package/dist/domain/extensions/scene-entity-object-html-hotspot.js +1 -0
  613. package/dist/domain/{system-components → extensions}/scene-entity-select-hotspot.d.ts +1 -1
  614. package/dist/domain/extensions/scene-entity-select-hotspot.js +1 -0
  615. package/dist/domain/extensions/scene-entity-wall-object.js +1 -0
  616. package/dist/domain/extensions/selectable-component.js +1 -0
  617. package/dist/domain/extensions/sidebar-tabs.js +1 -0
  618. package/dist/domain/extensions/simple-summary.js +1 -0
  619. package/dist/domain/extensions/size.js +1 -0
  620. package/dist/domain/extensions/sketching-draw.js +1 -0
  621. package/dist/domain/{system-components → extensions}/sketching-edit.d.ts +1 -1
  622. package/dist/domain/extensions/sketching-edit.js +1 -0
  623. package/dist/domain/extensions/summary-component.js +1 -0
  624. package/dist/domain/extensions/text-value.js +1 -0
  625. package/dist/domain/extensions/tool-controls.js +1 -0
  626. package/dist/domain/{system-components → extensions}/tool-menu-fab.d.ts +1 -1
  627. package/dist/domain/extensions/tool-menu-fab.js +1 -0
  628. package/dist/domain/{system-components → extensions}/toolbar.d.ts +1 -1
  629. package/dist/domain/extensions/toolbar.js +1 -0
  630. package/dist/domain/extensions/universal-sidebar-footer.js +1 -0
  631. package/dist/domain/extensions/view-controls.js +1 -0
  632. package/dist/domain/index.d.ts +2 -33
  633. package/dist/domain/index.js +1 -1
  634. package/dist/domain/mocks/create-mock-domain-context.d.ts +1 -1
  635. package/dist/domain/mocks/create-mock-domain-runtime-services.d.ts +1 -1
  636. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +28 -19
  637. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  638. package/dist/domain/mocks/create-mock-domain.d.ts +1 -1
  639. package/dist/domain/mocks/create-mock-domain.js +1 -1
  640. package/dist/domain/mocks/create-mock-state.d.ts +2 -2
  641. package/dist/domain/mocks/create-test-application-config.d.ts +59 -0
  642. package/dist/domain/mocks/create-test-application-config.js +1 -0
  643. package/dist/domain/mocks/index.d.ts +1 -0
  644. package/dist/domain/mocks/index.js +1 -1
  645. package/dist/domain/projections/blender-projections/blender-projections.d.ts +2 -3
  646. package/dist/domain/projections/blender-projections/blender-projections.js +1 -1
  647. package/dist/domain/projections/blender-projections/camera.d.ts +2 -2
  648. package/dist/domain/projections/collision-projections.d.ts +1 -1
  649. package/dist/domain/projections/composition-projections.d.ts +1 -1
  650. package/dist/domain/projections/composition-projections.js +1 -1
  651. package/dist/domain/projections/constraint-projections.d.ts +1 -1
  652. package/dist/domain/projections/index.d.ts +1 -1
  653. package/dist/domain/projections/position-projections.d.ts +1 -1
  654. package/dist/domain/projections/projected-entities-projections.d.ts +1 -1
  655. package/dist/domain/projections/snapping-projections.d.ts +1 -1
  656. package/dist/domain/projections/validation-projections.d.ts +3 -20
  657. package/dist/domain/projections/validation-projections.js +1 -1
  658. package/dist/domain/sketching/sketching-projections.d.ts +1 -1
  659. package/dist/domain/system-components/admin-sidebar.js +1 -1
  660. package/dist/domain/system-components/angle-dimension.js +1 -1
  661. package/dist/domain/system-components/application-config.d.ts +2 -2
  662. package/dist/domain/system-components/application-config.js +1 -1
  663. package/dist/domain/system-components/attribute-selection.js +1 -1
  664. package/dist/domain/system-components/bounding-box-component.d.ts +1 -1
  665. package/dist/domain/system-components/bounding-box-component.js +1 -1
  666. package/dist/domain/system-components/bounding-sphere-component.d.ts +1 -1
  667. package/dist/domain/system-components/bounding-sphere-component.js +1 -1
  668. package/dist/domain/system-components/child-entity-recipes.d.ts +1 -1
  669. package/dist/domain/system-components/child-entity-recipes.js +1 -1
  670. package/dist/domain/system-components/child-entity-selection.d.ts +1 -2
  671. package/dist/domain/system-components/child-entity-selection.js +1 -1
  672. package/dist/domain/system-components/collision-box-geometry.d.ts +5 -3
  673. package/dist/domain/system-components/collision-box-geometry.js +1 -1
  674. package/dist/domain/system-components/collision-geometry.d.ts +5 -3
  675. package/dist/domain/system-components/collision-geometry.js +1 -1
  676. package/dist/domain/system-components/collision-point-geometry.d.ts +5 -3
  677. package/dist/domain/system-components/collision-point-geometry.js +1 -1
  678. package/dist/domain/system-components/common/index.d.ts +0 -4
  679. package/dist/domain/system-components/common/index.js +1 -1
  680. package/dist/domain/system-components/common/material-override-schema.d.ts +2 -2
  681. package/dist/domain/system-components/common/recipes.d.ts +21 -4
  682. package/dist/domain/system-components/common/recipes.js +1 -1
  683. package/dist/domain/system-components/constraint.d.ts +11 -24
  684. package/dist/domain/system-components/constraint.js +1 -1
  685. package/dist/domain/system-components/custom-scene-entity.js +1 -1
  686. package/dist/domain/system-components/detail.js +1 -1
  687. package/dist/domain/system-components/distance-dimension-select.js +1 -1
  688. package/dist/domain/system-components/distance-dimension.js +1 -1
  689. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  690. package/dist/domain/system-components/drag-handle.js +1 -1
  691. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  692. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  693. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  694. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  695. package/dist/domain/system-components/generic-dimension.js +1 -1
  696. package/dist/domain/system-components/hidden-entity.js +1 -1
  697. package/dist/domain/system-components/hotspot-drag-handle.d.ts +2 -3
  698. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  699. package/dist/domain/system-components/index.d.ts +0 -68
  700. package/dist/domain/system-components/index.js +1 -1
  701. package/dist/domain/system-components/material-override-property-transition.js +1 -1
  702. package/dist/domain/system-components/material-override-transformer.js +1 -1
  703. package/dist/domain/system-components/material-swatch.js +1 -1
  704. package/dist/domain/system-components/navigation-page.js +1 -1
  705. package/dist/domain/system-components/navigation-panel-list.js +1 -1
  706. package/dist/domain/system-components/phoenix-entity-elements/admin-data-table-sidebar.d.ts +1 -1
  707. package/dist/domain/system-components/phoenix-layout-elements/admin-connected-resource-page.d.ts +1 -1
  708. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-actions.d.ts +1 -1
  709. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-page.d.ts +1 -1
  710. package/dist/domain/system-components/pivot-point.js +1 -1
  711. package/dist/domain/system-components/price.js +1 -1
  712. package/dist/domain/system-components/projected-entities.js +1 -1
  713. package/dist/domain/system-components/replace-entity-recipes.d.ts +1 -1
  714. package/dist/domain/system-components/replace-entity-recipes.js +1 -1
  715. package/dist/domain/system-components/scene-entity-ambient-light.js +1 -1
  716. package/dist/domain/system-components/scene-entity-box-object.js +1 -1
  717. package/dist/domain/system-components/scene-entity-directional-light.js +1 -1
  718. package/dist/domain/system-components/scene-entity-local-material-override.js +1 -1
  719. package/dist/domain/system-components/scene-entity-material-override.d.ts +1 -1
  720. package/dist/domain/system-components/scene-entity-material-override.js +1 -1
  721. package/dist/domain/system-components/scene-entity-object-clip.js +1 -1
  722. package/dist/domain/system-components/scene-entity-object-decal.js +1 -1
  723. package/dist/domain/system-components/scene-entity-object-group.js +1 -1
  724. package/dist/domain/system-components/scene-entity-object-local-material-override.js +1 -1
  725. package/dist/domain/system-components/scene-entity-object-material-override.d.ts +1 -1
  726. package/dist/domain/system-components/scene-entity-object-material-override.js +1 -1
  727. package/dist/domain/system-components/scene-entity-object-properties.js +1 -1
  728. package/dist/domain/system-components/scene-entity-object-remote-material-override.js +1 -1
  729. package/dist/domain/system-components/scene-entity-object-text-decal.d.ts +1 -1
  730. package/dist/domain/system-components/scene-entity-object-text-decal.js +1 -1
  731. package/dist/domain/system-components/scene-entity-object-transformer.js +1 -1
  732. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.d.ts +1 -1
  733. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.js +1 -1
  734. package/dist/domain/system-components/scene-entity-object.js +1 -1
  735. package/dist/domain/system-components/scene-entity-point-light.js +1 -1
  736. package/dist/domain/system-components/scene-entity-properties.js +1 -1
  737. package/dist/domain/system-components/scene-entity-rect-area-light.js +1 -1
  738. package/dist/domain/system-components/scene-entity-remote-material-override.js +1 -1
  739. package/dist/domain/system-components/scene-entity-remote-object.js +1 -1
  740. package/dist/domain/system-components/scene-entity-spot-light.js +1 -1
  741. package/dist/domain/system-components/scene-entity-transimissive-material-override.d.ts +1 -1
  742. package/dist/domain/system-components/scene-entity-transimissive-material-override.js +1 -1
  743. package/dist/domain/system-components/sketching-line.js +1 -1
  744. package/dist/domain/system-components/sketching-rectangle.js +1 -1
  745. package/dist/domain/system-components/sketching.js +1 -1
  746. package/dist/domain/system-components/snap-axis.js +1 -1
  747. package/dist/domain/system-components/snap-edge.js +1 -1
  748. package/dist/domain/system-components/snap-plane.js +1 -1
  749. package/dist/domain/system-components/snap-point.js +1 -1
  750. package/dist/domain/system-components/static-orthographic-camera-component.d.ts +1 -1
  751. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  752. package/dist/domain/system-components/static-perspective-camera-component.d.ts +1 -1
  753. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  754. package/dist/domain/utils/eval-cache.d.ts +1 -1
  755. package/dist/domain/utils/map-nested-object.d.ts +1 -1
  756. package/dist/domain/utils/memo-eval.d.ts +2 -2
  757. package/dist/editor/domain-editors/use-implementation-files.d.ts +1 -2
  758. package/dist/editor/mocks/EditorMockContext.js +1 -1
  759. package/dist/i18n/locales/cs/messages.js +1 -1
  760. package/dist/i18n/locales/da/messages.js +1 -1
  761. package/dist/i18n/locales/de/messages.js +1 -1
  762. package/dist/i18n/locales/de-AT/messages.js +1 -1
  763. package/dist/i18n/locales/en/messages.js +1 -1
  764. package/dist/i18n/locales/en-AU/messages.js +1 -1
  765. package/dist/i18n/locales/en-GB/messages.js +1 -1
  766. package/dist/i18n/locales/es/messages.js +1 -1
  767. package/dist/i18n/locales/fr/messages.js +1 -1
  768. package/dist/i18n/locales/hu/messages.js +1 -1
  769. package/dist/i18n/locales/it/messages.js +1 -1
  770. package/dist/i18n/locales/nl/messages.js +1 -1
  771. package/dist/i18n/locales/pl/messages.js +1 -1
  772. package/dist/i18n/locales/pt/messages.js +1 -1
  773. package/dist/i18n/locales/ro/messages.js +1 -1
  774. package/dist/i18n/locales/sk/messages.js +1 -1
  775. package/dist/i18n/locales/tr/messages.js +1 -1
  776. package/dist/legacy/domain-cli/gen/configurator-builder.js +13 -12
  777. package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -3
  778. package/dist/legacy/domain-cli/gen/defaults.js +1 -7
  779. package/dist/legacy/domain-cli/gen/implementation.js +7 -11
  780. package/dist/legacy/domain-cli/gen/invariants.js +7 -6
  781. package/dist/legacy/domain-cli/gen/relations.js +1 -1
  782. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  783. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  784. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +81 -68
  785. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  786. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  787. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  788. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +2 -0
  789. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +17 -15
  790. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.d.ts +1 -1
  791. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.js +4 -0
  792. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  793. package/dist/phoenix/commands/deploy.js +1 -1
  794. package/dist/phoenix/commands/init.d.ts +4 -4
  795. package/dist/phoenix/commands/init.js +1 -1
  796. package/dist/phoenix/commands/prettier.js +1 -1
  797. package/dist/phoenix/scripts/build-admin.js +1 -1
  798. package/dist/phoenix/services/source-archive.d.ts +1 -0
  799. package/dist/phoenix/services/source-archive.js +1 -1
  800. package/dist/phoenix/utils/git/index.d.ts +1 -0
  801. package/dist/phoenix/utils/git/index.js +1 -0
  802. package/dist/phoenix/utils/git/is-inside-git-repository.d.ts +6 -0
  803. package/dist/phoenix/utils/git/is-inside-git-repository.js +1 -0
  804. package/dist/phoenix/utils/index.d.ts +1 -0
  805. package/dist/phoenix/utils/index.js +1 -1
  806. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +2 -0
  807. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  808. package/dist/react-sdk/application-runtime/routing/access-service.d.ts +1 -0
  809. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +53 -36
  810. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  811. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +30 -0
  812. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -0
  813. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +9 -9
  814. package/dist/react-sdk/domain-context/index.d.ts +2 -1
  815. package/dist/react-sdk/domain-context/index.js +1 -1
  816. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +6 -0
  817. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  818. package/dist/react-sdk/domain-controls/hooks/use-angle-dimension.d.ts +1 -1
  819. package/dist/ui-sdk/theme/types.d.ts +1 -1
  820. package/dist/webhook/builders/common.d.ts +5 -0
  821. package/dist/webhook/builders/webhook-builder.js +1 -1
  822. package/package.json +3 -3
  823. package/schema/domain-spec.json +1115 -209
  824. package/dist/application-spec/generate-application/code/templates/env-ci.d.ts +0 -1
  825. package/dist/application-spec/generate-application/code/templates/env-ci.js +0 -25
  826. package/dist/application-spec/generate-application/code/templates/env-example.d.ts +0 -1
  827. package/dist/application-spec/generate-application/code/templates/env-example.js +0 -90
  828. package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
  829. package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
  830. package/dist/application-spec/generate-application/code/templates/private-assets-readme.d.ts +0 -1
  831. package/dist/application-spec/generate-application/code/templates/private-assets-readme.js +0 -24
  832. package/dist/application-spec/generate-application/code/templates/public-assets-readme.d.ts +0 -1
  833. package/dist/application-spec/generate-application/code/templates/public-assets-readme.js +0 -24
  834. package/dist/application-spec/generate-application/code/templates/readme.d.ts +0 -1
  835. package/dist/application-spec/generate-application/code/templates/readme.js +0 -23
  836. package/dist/application-spec/generate-application/code/templates/skills/agents-md.d.ts +0 -1
  837. package/dist/application-spec/generate-application/code/templates/skills/agents-md.js +0 -2
  838. package/dist/domain/actions/action-factory.d.ts +0 -10
  839. package/dist/domain/actions/prepare-action-implementations.js +0 -5
  840. package/dist/domain/application/element-registration.js +0 -1
  841. package/dist/domain/application/handler-registration.js +0 -1
  842. package/dist/domain/application/resolve-imported-transformers.d.ts +0 -23
  843. package/dist/domain/application/resolve-imported-transformers.js +0 -1
  844. package/dist/domain/application/resource-builder.d.ts +0 -13
  845. package/dist/domain/application/resource-builder.js +0 -1
  846. package/dist/domain/components/debug-state-component.js +0 -1
  847. package/dist/domain/components/domain-component-optic.d.ts +0 -75
  848. package/dist/domain/components/domain-component-optic.js +0 -16
  849. package/dist/domain/components/drag-state-component.js +0 -1
  850. package/dist/domain/components/export-state-component.js +0 -1
  851. package/dist/domain/components/fullscreen-state-component.js +0 -1
  852. package/dist/domain/components/group-components-by-entity-id-and-name.js +0 -1
  853. package/dist/domain/components/hover-state-component.js +0 -1
  854. package/dist/domain/components/index.d.ts +0 -2
  855. package/dist/domain/components/index.js +0 -1
  856. package/dist/domain/components/navigation-state-component.js +0 -1
  857. package/dist/domain/components/selection-state-component.js +0 -1
  858. package/dist/domain/components/system-component-builder.js +0 -1
  859. package/dist/domain/components/system-virtual-entity.js +0 -1
  860. package/dist/domain/components/tool-state-component.js +0 -1
  861. package/dist/domain/components/view-state-component.js +0 -1
  862. package/dist/domain/components/viewport-state-component.js +0 -1
  863. package/dist/domain/core/expression.d.ts +0 -49
  864. package/dist/domain/core/migrations.js +0 -1
  865. package/dist/domain/domain-context/recipe-system/recipes.d.ts +0 -55
  866. package/dist/domain/domain-context/recipe-system/recipes.js +0 -1
  867. package/dist/domain/expressions/constant-expressions.d.ts +0 -7
  868. package/dist/domain/expressions/constant-expressions.js +0 -1
  869. package/dist/domain/expressions/custom-expression.d.ts +0 -10
  870. package/dist/domain/expressions/custom-expression.js +0 -1
  871. package/dist/domain/expressions/index.d.ts +0 -1
  872. package/dist/domain/expressions/index.js +0 -1
  873. package/dist/domain/invariants/custom-invariants.d.ts +0 -21
  874. package/dist/domain/invariants/custom-invariants.js +0 -1
  875. package/dist/domain/invariants/invariants.d.ts +0 -74
  876. package/dist/domain/invariants/invariants.js +0 -1
  877. package/dist/domain/invariants/violation-component.js +0 -1
  878. package/dist/domain/invariants/violation.js +0 -1
  879. package/dist/domain/project-modules/index.d.ts +0 -1
  880. package/dist/domain/project-modules/index.js +0 -1
  881. package/dist/domain/project-modules/project-modules.js +0 -1
  882. package/dist/domain/relations/all-of-type-relation.d.ts +0 -30
  883. package/dist/domain/relations/all-of-type-relation.js +0 -1
  884. package/dist/domain/relations/component-factories.js +0 -1
  885. package/dist/domain/relations/composed-of.js +0 -1
  886. package/dist/domain/relations/direct-relation.d.ts +0 -27
  887. package/dist/domain/relations/indirect-relation.d.ts +0 -78
  888. package/dist/domain/relations/indirect-relation.js +0 -1
  889. package/dist/domain/relations/reference-component.js +0 -1
  890. package/dist/domain/relations/relation-factory.d.ts +0 -17
  891. package/dist/domain/relations/relation-factory.js +0 -1
  892. package/dist/domain/relations/relation-implementation.d.ts +0 -5
  893. package/dist/domain/system-components/angle-indicator.js +0 -1
  894. package/dist/domain/system-components/attribute-switch.js +0 -1
  895. package/dist/domain/system-components/autorotate-camera-component.js +0 -1
  896. package/dist/domain/system-components/basic-sidebar-footer.js +0 -1
  897. package/dist/domain/system-components/camera-based-hidden-entity-object.js +0 -1
  898. package/dist/domain/system-components/camera-based-hidden-entity.js +0 -1
  899. package/dist/domain/system-components/canvas-config.js +0 -1
  900. package/dist/domain/system-components/canvas-custom-environment.js +0 -1
  901. package/dist/domain/system-components/canvas-padding.js +0 -1
  902. package/dist/domain/system-components/canvas-preset-environment.js +0 -1
  903. package/dist/domain/system-components/child-entity-recipe-hierarchy.js +0 -1
  904. package/dist/domain/system-components/client-side-image.js +0 -1
  905. package/dist/domain/system-components/color-value.js +0 -1
  906. package/dist/domain/system-components/common/angle-indicator-schema.js +0 -1
  907. package/dist/domain/system-components/custom-header.js +0 -1
  908. package/dist/domain/system-components/custom-price-footer.js +0 -1
  909. package/dist/domain/system-components/custom-sidebar-footer.js +0 -1
  910. package/dist/domain/system-components/dimension-indicator.js +0 -1
  911. package/dist/domain/system-components/editable-angle-indicator.js +0 -1
  912. package/dist/domain/system-components/editable-distance-dimension-indicator.js +0 -1
  913. package/dist/domain/system-components/editable-offset-indicator.js +0 -1
  914. package/dist/domain/system-components/editable-size-indicator.js +0 -1
  915. package/dist/domain/system-components/entity-header.js +0 -1
  916. package/dist/domain/system-components/exit-tool-mode-fab.js +0 -1
  917. package/dist/domain/system-components/finalize-action.js +0 -1
  918. package/dist/domain/system-components/finalize-component.js +0 -1
  919. package/dist/domain/system-components/fit-selection-orthographic-camera-component.js +0 -1
  920. package/dist/domain/system-components/fit-selection-perspective-camera-component.js +0 -1
  921. package/dist/domain/system-components/fixed-header.js +0 -1
  922. package/dist/domain/system-components/floating-header.js +0 -1
  923. package/dist/domain/system-components/hidden-header.js +0 -1
  924. package/dist/domain/system-components/hidden-sidebar-footer.js +0 -1
  925. package/dist/domain/system-components/horizontal-tabs.js +0 -1
  926. package/dist/domain/system-components/list-selector-dimension-indicator.js +0 -1
  927. package/dist/domain/system-components/multilingual-text-value.js +0 -1
  928. package/dist/domain/system-components/navigation-steps.js +0 -1
  929. package/dist/domain/system-components/offset-anchors.js +0 -1
  930. package/dist/domain/system-components/offset-indicator.js +0 -1
  931. package/dist/domain/system-components/offset.js +0 -1
  932. package/dist/domain/system-components/other-action.js +0 -1
  933. package/dist/domain/system-components/property-page.js +0 -1
  934. package/dist/domain/system-components/read-sidebar-footer.js +0 -1
  935. package/dist/domain/system-components/replace-entity-recipe-hierarchy.js +0 -1
  936. package/dist/domain/system-components/rotatable.js +0 -1
  937. package/dist/domain/system-components/rotation-handle.js +0 -1
  938. package/dist/domain/system-components/save-template-thumbnail.js +0 -1
  939. package/dist/domain/system-components/scene-entity-add-fab.js +0 -1
  940. package/dist/domain/system-components/scene-entity-animation.js +0 -1
  941. package/dist/domain/system-components/scene-entity-control.js +0 -1
  942. package/dist/domain/system-components/scene-entity-delete-fab.js +0 -1
  943. package/dist/domain/system-components/scene-entity-floor-object.js +0 -1
  944. package/dist/domain/system-components/scene-entity-html-hotspot.js +0 -1
  945. package/dist/domain/system-components/scene-entity-navigation-hotspot.js +0 -1
  946. package/dist/domain/system-components/scene-entity-object-html-hotspot.js +0 -1
  947. package/dist/domain/system-components/scene-entity-select-hotspot.js +0 -1
  948. package/dist/domain/system-components/scene-entity-wall-object.js +0 -1
  949. package/dist/domain/system-components/selectable-component.js +0 -1
  950. package/dist/domain/system-components/sidebar-tabs.js +0 -1
  951. package/dist/domain/system-components/simple-summary.js +0 -1
  952. package/dist/domain/system-components/size.js +0 -1
  953. package/dist/domain/system-components/sketching-draw.js +0 -1
  954. package/dist/domain/system-components/sketching-edit.js +0 -1
  955. package/dist/domain/system-components/summary-component.js +0 -1
  956. package/dist/domain/system-components/text-value.js +0 -1
  957. package/dist/domain/system-components/tool-controls.js +0 -1
  958. package/dist/domain/system-components/tool-menu-fab.js +0 -1
  959. package/dist/domain/system-components/toolbar.js +0 -1
  960. package/dist/domain/system-components/universal-sidebar-footer.js +0 -1
  961. package/dist/domain/system-components/view-controls.js +0 -1
  962. /package/dist/{domain/components/component-reader-types.js → application-spec/core/expressions/relation-expression-params.js} +0 -0
  963. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.d.ts +0 -0
  964. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.js +0 -0
  965. /package/dist/application-spec/{core → enhanced-json}/eval-to-constant.js +0 -0
  966. /package/dist/domain/{actions → core/action}/action-factory.js +0 -0
  967. /package/dist/domain/core/{action.js → action/action.js} +0 -0
  968. /package/dist/domain/core/{expression.js → component/component-reader-types.js} +0 -0
  969. /package/dist/domain/{components → core/component}/legacy-filter.js +0 -0
  970. /package/dist/domain/{components → core/component}/system-component-filter.js +0 -0
  971. /package/dist/domain/{components → core/component}/system-virtual-entity.d.ts +0 -0
  972. /package/dist/domain/{components → core/component}/updates.js +0 -0
  973. /package/dist/domain/{relations/reference-field.js → core/data-schema/data-cell-value.js} +0 -0
  974. /package/dist/domain/{relations/relation-implementation.js → core/data-schema/data-schema-array-field.js} +0 -0
  975. /package/dist/domain/{invariants → core/invariant}/builtin-invariant.js +0 -0
  976. /package/dist/domain/{invariants → core/invariant}/violation-component.d.ts +0 -0
  977. /package/dist/domain/{relations → core/relation}/direct-relation.js +0 -0
  978. /package/dist/domain/core/{state.js → state/state.js} +0 -0
  979. /package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.js +0 -0
  980. /package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.js +0 -0
  981. /package/dist/domain/{system-components → extensions}/angle-indicator.d.ts +0 -0
  982. /package/dist/domain/{system-components → extensions}/basic-sidebar-footer.d.ts +0 -0
  983. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity-object.d.ts +0 -0
  984. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity.d.ts +0 -0
  985. /package/dist/domain/{system-components → extensions}/canvas-custom-environment.d.ts +0 -0
  986. /package/dist/domain/{system-components → extensions}/canvas-padding.d.ts +0 -0
  987. /package/dist/domain/{system-components → extensions}/canvas-preset-environment.d.ts +0 -0
  988. /package/dist/domain/{system-components → extensions}/color-value.d.ts +0 -0
  989. /package/dist/domain/{system-components → extensions}/common/dimension-indicator-schema.js +0 -0
  990. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.d.ts +0 -0
  991. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.js +0 -0
  992. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.d.ts +0 -0
  993. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.js +0 -0
  994. /package/dist/domain/{system-components → extensions}/custom-price-footer.d.ts +0 -0
  995. /package/dist/domain/{system-components → extensions}/dimension-indicator.d.ts +0 -0
  996. /package/dist/domain/{system-components → extensions}/exit-tool-mode-fab.d.ts +0 -0
  997. /package/dist/domain/{system-components → extensions}/finalize-action.d.ts +0 -0
  998. /package/dist/domain/{system-components → extensions}/finalize-component.d.ts +0 -0
  999. /package/dist/domain/{system-components → extensions}/fit-selection-orthographic-camera-component.d.ts +0 -0
  1000. /package/dist/domain/{system-components → extensions}/fit-selection-perspective-camera-component.d.ts +0 -0
  1001. /package/dist/domain/{system-components → extensions}/fixed-header.d.ts +0 -0
  1002. /package/dist/domain/{system-components → extensions}/floating-header.d.ts +0 -0
  1003. /package/dist/domain/{system-components → extensions}/hidden-header.d.ts +0 -0
  1004. /package/dist/domain/{system-components → extensions}/hidden-sidebar-footer.d.ts +0 -0
  1005. /package/dist/domain/{system-components → extensions}/multilingual-text-value.d.ts +0 -0
  1006. /package/dist/domain/{system-components → extensions}/offset-anchors.d.ts +0 -0
  1007. /package/dist/domain/{system-components → extensions}/offset-indicator.d.ts +0 -0
  1008. /package/dist/domain/{system-components → extensions}/offset.d.ts +0 -0
  1009. /package/dist/domain/{system-components → extensions}/other-action.d.ts +0 -0
  1010. /package/dist/domain/{system-components → extensions}/read-sidebar-footer.d.ts +0 -0
  1011. /package/dist/domain/{system-components → extensions}/rotatable.d.ts +0 -0
  1012. /package/dist/domain/{system-components → extensions}/scene-entity-animation.d.ts +0 -0
  1013. /package/dist/domain/{system-components → extensions}/scene-entity-control.d.ts +0 -0
  1014. /package/dist/domain/{system-components → extensions}/scene-entity-floor-object.d.ts +0 -0
  1015. /package/dist/domain/{system-components → extensions}/scene-entity-wall-object.d.ts +0 -0
  1016. /package/dist/domain/{system-components → extensions}/selectable-component.d.ts +0 -0
  1017. /package/dist/domain/{system-components → extensions}/sidebar-tabs.d.ts +0 -0
  1018. /package/dist/domain/{system-components → extensions}/simple-summary.d.ts +0 -0
  1019. /package/dist/domain/{system-components → extensions}/size.d.ts +0 -0
  1020. /package/dist/domain/{system-components → extensions}/sketching-draw.d.ts +0 -0
  1021. /package/dist/domain/{system-components → extensions}/summary-component.d.ts +0 -0
  1022. /package/dist/domain/{system-components → extensions}/text-value.d.ts +0 -0
  1023. /package/dist/domain/{system-components → extensions}/tool-controls.d.ts +0 -0
  1024. /package/dist/domain/{system-components → extensions}/universal-sidebar-footer.d.ts +0 -0
  1025. /package/dist/domain/{system-components → extensions}/view-controls.d.ts +0 -0
@@ -1 +1 @@
1
- import{Branded as t}from"@salsita-ai/common/utils";import{FILTER_OR_KEY as e,READ_MARKER_KEY as r,isEnhancedJsonObject as i,isEvalMarker as s,isRawReadMarker as a}from"../../../core/index.js";export const FILTER_CRITERION_KEYS=["navigationStates","viewStates","toolStates","exportStates","modes","roles","selectedEntityIds","hoveredEntityIds","draggedEntityIds","exportedEntityIds","active","fullscreen","debug","viewports"];let o={tsType:"IdOrWithId | readonly IdOrWithId[]",import:[{module:"@salsita-ai/sdk/domain",member:"IdOrWithId"}]};export const FILTER_CRITERION_SCHEMAS={navigationStates:{type:"array",items:{type:"string"}},viewStates:{type:"array",items:{type:"string"}},toolStates:{type:"array",items:{type:"string"}},exportStates:{type:"array",items:{type:"string"}},modes:{type:"array",items:{type:"string"}},roles:{type:"array",items:{type:"string"}},selectedEntityIds:o,hoveredEntityIds:o,draggedEntityIds:o,exportedEntityIds:o,active:{type:"boolean"},fullscreen:{type:"boolean"},debug:{type:"boolean"},viewports:{type:"array",items:{type:"string"},tsType:"readonly Viewport[]",import:[{module:"@salsita-ai/sdk/domain",member:"Viewport"}]}};let n=new Set(FILTER_CRITERION_KEYS),d=t=>a(t)?{kind:"dynamic",target:t[r]}:s(t)?{kind:"eval",code:t.$eval}:{kind:"static",value:t},y=t=>{let e=t[r];if("string"==typeof e&&!Object.keys(t).some(t=>n.has(t)))return{kind:"root",target:e};let i={};for(let[e,r]of Object.entries(t))n.has(e)&&void 0!==r&&(i[e]=d(r));return{kind:"gradual",...i}};export const ComponentFilters=r=>{if(void 0===r||!i(r))return t({items:[]});let s=r[e];return Array.isArray(s)?t({items:s.filter(i).map(y)}):t({items:[y(r)]})};
1
+ import{Branded as t}from"@salsita-ai/common/utils";import{FILTER_CRITERION_KEYS as e,FILTER_OR_KEY as r,READ_MARKER_KEY as i,isEnhancedJsonObject as s,isEvalMarker as a,isRawReadMarker as o}from"../../../core/index.js";let n={tsType:"IdOrWithId | readonly IdOrWithId[]",import:[{module:"@salsita-ai/sdk/domain",member:"IdOrWithId"}]};export const FILTER_CRITERION_SCHEMAS={navigationStates:{type:"array",items:{type:"string"}},viewStates:{type:"array",items:{type:"string"}},toolStates:{type:"array",items:{type:"string"}},exportStates:{type:"array",items:{type:"string"}},modes:{type:"array",items:{type:"string"}},roles:{type:"array",items:{type:"string"}},selectedEntityIds:n,hoveredEntityIds:n,draggedEntityIds:n,exportedEntityIds:n,active:{type:"boolean"},fullscreen:{type:"boolean"},debug:{type:"boolean"},viewports:{type:"array",items:{type:"string"},tsType:"readonly Viewport[]",import:[{module:"@salsita-ai/sdk/domain",member:"Viewport"}]}};let y=new Set(e),d=t=>o(t)?{kind:"dynamic",target:t[i]}:a(t)?{kind:"eval",code:t.$eval}:{kind:"static",value:t},p=t=>{let e=t[i];if("string"==typeof e&&!Object.keys(t).some(t=>y.has(t)))return{kind:"root",target:e};let r={};for(let[e,i]of Object.entries(t))y.has(e)&&void 0!==i&&(r[e]=d(i));return{kind:"gradual",...r}};export const ComponentFilters=e=>{if(void 0===e||!s(e))return t({items:[]});let i=e[r];return Array.isArray(i)?t({items:i.filter(s).map(p)}):t({items:[p(e)]})};
@@ -1,5 +1,5 @@
1
1
  export * from './bindings/index.js';
2
- export * from './component-entry.js';
2
+ export type * from './component-entry.js';
3
3
  export * from './component-filter.js';
4
4
  export * from './component-prop-target.js';
5
5
  export * from './components.js';
@@ -1 +1 @@
1
- export*from"./bindings/index.js";export*from"./component-entry.js";export*from"./component-filter.js";export*from"./component-prop-target.js";export*from"./components.js";export*from"./sdk-component-entry.js";export*from"./user-component-entry.js";export*from"./user-components.js";
1
+ export*from"./bindings/index.js";export*from"./component-filter.js";export*from"./component-prop-target.js";export*from"./components.js";export*from"./sdk-component-entry.js";export*from"./user-component-entry.js";export*from"./user-components.js";
@@ -1,32 +1,7 @@
1
1
  import type { Branded } from '@salsita-ai/common/utils';
2
- import type { EnhancedJsonSchemaType, EnhancedJsonValue } from '../../../core/index.js';
2
+ import type { EnhancedJsonSchemaType, EnhancedJsonValue, SdkExpressionImplementation } from '../../../core/index.js';
3
3
  import type { EntityOrAliasName, ExpressionName } from '../model/index.js';
4
4
  import type { MemoEvalPlan } from './memo-eval-plan.js';
5
- /**
6
- * The relation factory's single positional param: the relation's kind, the entity type or alias it
7
- * points to and its cardinality, plus the id field for `direct` and `indirect` relations. The
8
- * assistant schema reads `target` and `cardinality` to type a relation edge.
9
- */
10
- export interface RelationExpressionParams {
11
- readonly kind: 'direct' | 'indirect' | 'allOfType';
12
- readonly target: string;
13
- readonly cardinality: '0-1' | '1-1' | '0-N' | '1-N';
14
- readonly field?: string;
15
- }
16
- /**
17
- * An expression implementation built by an SDK factory at runtime. The kind is the
18
- * semantic source of the expression, declared by the section that generated it —
19
- * codegen and runtime dispatch on it instead of inspecting factory-function names.
20
- * - `relation`: generated from a `relations:` declaration
21
- * - `violations`: generated from `invariants:` declarations (the `$violations` expression)
22
- */
23
- export type SdkExpressionImplementation = {
24
- readonly kind: 'relation';
25
- readonly params: readonly [RelationExpressionParams];
26
- } | {
27
- readonly kind: 'violations';
28
- readonly params: readonly unknown[];
29
- };
30
5
  /**
31
6
  * How an expression's runtime implementation is provided.
32
7
  * - `user`: implementation from `src/expressions/*.ts` (dynamic import)
@@ -47,8 +22,6 @@ export type ExpressionImplementation = {
47
22
  readonly value: EnhancedJsonValue;
48
23
  readonly plan: MemoEvalPlan;
49
24
  };
50
- /** Narrows to implementations that are built by an SDK expression factory at runtime. */
51
- export declare const isSdkExpressionImplementation: (implementation: ExpressionImplementation) => implementation is SdkExpressionImplementation;
52
25
  /** A single parsed expression declaration. */
53
26
  export type Expression = Branded<'Expression', {
54
27
  readonly entityKey: EntityOrAliasName;
@@ -1 +1 @@
1
- export const isSdkExpressionImplementation=i=>"relation"===i.kind||"violations"===i.kind;
1
+ export{};
@@ -2,7 +2,7 @@ import { Branded } from '@salsita-ai/common/utils';
2
2
  import { type EvalExpressionParser, type ParseContext } from '../../../core/index.js';
3
3
  import type { MergedExpressions } from '../../merge/index.js';
4
4
  import type { Aliases, EntityOrAliasName, EntityTypeName, ExpressionName, ModelVersion } from '../model/index.js';
5
- import { type Expression } from './expression.js';
5
+ import type { Expression } from './expression.js';
6
6
  import type { MemoEvalPlan } from './memo-eval-plan.js';
7
7
  export type { Expression, ExpressionImplementation } from './expression.js';
8
8
  /**
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{intersectSchemas as t}from"../../../core/index.js";import{DiagnosticCode as n,diagnosticMessages as o}from"../../../errors/index.js";import{isSdkExpressionImplementation as i}from"./expression.js";import{UserExpressions as r}from"./user-expressions.js";let s=(e,t)=>{let n=e.get(t.entityKey);n||(n=new Map,e.set(t.entityKey,n)),n.set(t.name,t)},a=(n,o)=>{let i=n.get(o.entityKey);i||(i=new Map,n.set(o.entityKey,i));let r=i.get(o.name);r?i.set(o.name,e({...r,schema:t(r.schema,o.schema),...r.declaredSchema||!o.declaredSchema?{}:{declaredSchema:o.declaredSchema}})):i.set(o.name,o)},l=e=>"relation"===e.implementation.kind?"relations":"violations"===e.implementation.kind?"invariants":"expressions";export const Expressions=(t,m)=>{let{rawExpressions:f,inferredExpressions:p}=t,{latestModel:c,aliases:d,entityTypes:y,evalExpressionParser:u,parsingContext:g}=m,x=r(f,{latestModel:c,evalExpressionParser:u,parsingContext:g});if(void 0===x)return;let S=new Map;for(let e of x)s(S,e);for(let e of p)a(S,e);let h=((e,t)=>{let n=new Map,o=e=>{let t=n.get(e.entityKey);t||(t=new Set,n.set(e.entityKey,t)),t.add(e.name)};for(let t of e)o(t);for(let e of t)i(e.implementation)&&o(e);return n})(x,p),w=new Map;for(let e of x){let{implementation:t}=e;if("value"!==t.kind||!t.constant||t.plan.usesSelf)continue;let n=w.get(e.entityKey);n||(n=new Map,w.set(e.entityKey,n)),n.set(e.name,t.plan)}let K=new Map;for(let t of y){let i=[],r=new Map,s=e=>{let s=S.get(e);if(!s||0===s.size)return;i.push(e);let a=h.get(e);for(let[i,m]of s){if(!a?.has(i))continue;let s=r.get(i);if(s){g.at(l(m),e,i).error(n.DUPLICATE_EXPRESSION,o.DUPLICATE_EXPRESSION(t,i,s,e));continue}r.set(i,e)}};for(let[e,n]of d)n.includes(t)&&s(e);s(t),K.set(t,e({shapeGroups:i}))}return e({expressions:S,entityExpressions:K,constants:w})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{intersectSchemas as t,isSdkExpressionImplementation as n}from"../../../core/index.js";import{DiagnosticCode as i,diagnosticMessages as o}from"../../../errors/index.js";import{UserExpressions as r}from"./user-expressions.js";let s=(e,t)=>{let n=e.get(t.entityKey);n||(n=new Map,e.set(t.entityKey,n)),n.set(t.name,t)},a=(n,i)=>{let o=n.get(i.entityKey);o||(o=new Map,n.set(i.entityKey,o));let r=o.get(i.name);r?o.set(i.name,e({...r,schema:t(r.schema,i.schema),...r.declaredSchema||!i.declaredSchema?{}:{declaredSchema:i.declaredSchema}})):o.set(i.name,i)},l=e=>"relation"===e.implementation.kind?"relations":"violations"===e.implementation.kind?"invariants":"expressions";export const Expressions=(t,m)=>{let{rawExpressions:f,inferredExpressions:p}=t,{latestModel:c,aliases:d,entityTypes:y,evalExpressionParser:u,parsingContext:g}=m,S=r(f,{latestModel:c,evalExpressionParser:u,parsingContext:g});if(void 0===S)return;let h=new Map;for(let e of S)s(h,e);for(let e of p)a(h,e);let w=((e,t)=>{let i=new Map,o=e=>{let t=i.get(e.entityKey);t||(t=new Set,i.set(e.entityKey,t)),t.add(e.name)};for(let t of e)o(t);for(let e of t)n(e.implementation)&&o(e);return i})(S,p),x=new Map;for(let e of S){let{implementation:t}=e;if("value"!==t.kind||!t.constant||t.plan.usesSelf)continue;let n=x.get(e.entityKey);n||(n=new Map,x.set(e.entityKey,n)),n.set(e.name,t.plan)}let K=new Map;for(let t of y){let n=[],r=new Map,s=e=>{let s=h.get(e);if(!s||0===s.size)return;n.push(e);let a=w.get(e);for(let[n,m]of s){if(!a?.has(n))continue;let s=r.get(n);if(s){g.at(l(m),e,n).error(i.DUPLICATE_EXPRESSION,o.DUPLICATE_EXPRESSION(t,n,s,e));continue}r.set(n,e)}};for(let[e,n]of d)n.includes(t)&&s(e);s(t),K.set(t,e({shapeGroups:n}))}return e({expressions:h,entityExpressions:K,constants:x})};
@@ -1,5 +1,4 @@
1
1
  export type * from './expression.js';
2
- export { isSdkExpressionImplementation } from './expression.js';
3
2
  export * from './expressions.js';
4
3
  export * from './memo-eval-plan.js';
5
4
  export * from './user-expressions.js';
@@ -1 +1 @@
1
- export{isSdkExpressionImplementation}from"./expression.js";export*from"./expressions.js";export*from"./memo-eval-plan.js";export*from"./user-expressions.js";
1
+ export*from"./expressions.js";export*from"./memo-eval-plan.js";export*from"./user-expressions.js";
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{evalCodeUsesSelf as r}from"../../../core/eval-code-uses-self.js";import{isEvalMarker as t,isMsgMarker as n}from"../../../core/index.js";import{isComponentPropTarget as o}from"../components/component-prop-target.js";let l=(e,r)=>0===r.length?e:`${e}.${r.join(".")}`,i=(r,a,u,d)=>{if(void 0===r)throw Error(`MemoEvalPlan: found undefined at ${l(u,d)}, undefined cannot be generated, remove the property or use null.`);if(t(r)){let t=((r,t,n)=>{let o=t.trim();for(let e=0;e<r.length;e++){let t=r[e];if("eval"===t.kind&&t.code===o)return e}return r.push(e({kind:"eval",code:o,label:n})),r.length-1})(a,r.$eval,u);return e({kind:"slot",depIndex:t})}if(o(r)){let t=((r,t)=>{for(let e=0;e<r.length;e++){let n=r[e];if("read"===n.kind&&n.target===t)return e}return r.push(e({kind:"read",target:t})),r.length-1})(a,r.$target);return e({kind:"slot",depIndex:t})}if(n(r))return e({kind:"msg",marker:r});if(null===r||"object"!=typeof r)return e({kind:"literal",value:r});if(Array.isArray(r))return e({kind:"array",items:r.map((e,r)=>i(e,a,u,[...d,String(r)]))});if("object"!=typeof r||null===r)throw Error(`MemoEvalPlan: found unsupported value at ${l(u,d)}, remove it or use null.`);let f=[];for(let e in r){let t=r[e];f.push([e,i(t,a,u,[...d,e])])}return e({kind:"object",entries:f})};export const MemoEvalPlan=(t,n)=>{let o=[],l=i(t,o,n,[]),a=o.some(e=>"read"===e.kind||r(e.code));return e({deps:o,template:l,usesSelf:a})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{isEvalMarker as r,isMsgMarker as t}from"../../../core/index.js";import{evalCodeUsesSelf as n}from"../../../enhanced-json/eval-code-uses-self.js";import{isComponentPropTarget as o}from"../components/component-prop-target.js";let l=(e,r)=>0===r.length?e:`${e}.${r.join(".")}`,i=(n,a,d,u)=>{if(void 0===n)throw Error(`MemoEvalPlan: found undefined at ${l(d,u)}, undefined cannot be generated, remove the property or use null.`);if(r(n)){let r=((r,t,n)=>{let o=t.trim();for(let e=0;e<r.length;e++){let t=r[e];if("eval"===t.kind&&t.code===o)return e}return r.push(e({kind:"eval",code:o,label:n})),r.length-1})(a,n.$eval,d);return e({kind:"slot",depIndex:r})}if(o(n)){let r=((r,t)=>{for(let e=0;e<r.length;e++){let n=r[e];if("read"===n.kind&&n.target===t)return e}return r.push(e({kind:"read",target:t})),r.length-1})(a,n.$target);return e({kind:"slot",depIndex:r})}if(t(n))return e({kind:"msg",marker:n});if(null===n||"object"!=typeof n)return e({kind:"literal",value:n});if(Array.isArray(n))return e({kind:"array",items:n.map((e,r)=>i(e,a,d,[...u,String(r)]))});if("object"!=typeof n||null===n)throw Error(`MemoEvalPlan: found unsupported value at ${l(d,u)}, remove it or use null.`);let s=[];for(let e in n){let r=n[e];s.push([e,i(r,a,d,[...u,e])])}return e({kind:"object",entries:s})};export const MemoEvalPlan=(r,t)=>{let o=[],l=i(r,o,t,[]),a=o.some(e=>"read"===e.kind||n(e.code));return e({deps:o,template:l,usesSelf:a})};
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{schemaFromValue as t}from"../../../core/index.js";import{DiagnosticCode as r,diagnosticMessages as s}from"../../../errors/index.js";import{ExpressionName as o}from"../model/index.js";import{MemoEvalPlan as a}from"./memo-eval-plan.js";let i=(e,r,s,o)=>{if("user"===e.kind)return{schema:e.schema,implementation:{kind:"user"}};let i=a(e.value,r),m={kind:"value",constant:e.constant,value:e.value,plan:i};if(Object.keys(e.schema).length>0)return{schema:e.schema,implementation:m};let n=t(e.value,s,o);if(void 0!==n)return{schema:n,implementation:m}};export const UserExpressions=(t,a)=>{let{latestModel:m,evalExpressionParser:n,parsingContext:l}=a,{allNames:c}=m,f=[...c].map(String),h=[];for(let[a,m]of Object.entries(t)){c.has(a)||l.error(r.EXPRESSION_UNKNOWN_ENTITY_KEY,s.EXPRESSION_UNKNOWN_ENTITY_KEY(a,f));let t=e(a);for(let[r,s]of Object.entries(m)){let m=l.at(a),c=o(r,m);if(!c)continue;let f=i(s,`${a}.${r}`,m.at(r),n);f&&h.push(e({entityKey:t,name:c,schema:f.schema,declaredSchema:f.schema,implementation:f.implementation}))}}if(!l.hasErrors)return h};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{schemaFromValue as t}from"../../../enhanced-json/index.js";import{DiagnosticCode as r,diagnosticMessages as n}from"../../../errors/index.js";import{ExpressionName as s}from"../model/index.js";import{MemoEvalPlan as a}from"./memo-eval-plan.js";let o=(e,r,n,s)=>{if("user"===e.kind)return{schema:e.schema,implementation:{kind:"user"}};let o=a(e.value,r),i={kind:"value",constant:e.constant,value:e.value,plan:o};if(Object.keys(e.schema).length>0)return{schema:e.schema,implementation:i};let m=t(e.value,n,s);if(void 0!==m)return{schema:m,implementation:i}};export const UserExpressions=(t,a)=>{let{latestModel:i,evalExpressionParser:m,parsingContext:l}=a,{allNames:c}=i,h=[...c].map(String),f=[];for(let[a,i]of Object.entries(t)){c.has(a)||l.error(r.EXPRESSION_UNKNOWN_ENTITY_KEY,n.EXPRESSION_UNKNOWN_ENTITY_KEY(a,h));let t=e(a);for(let[r,n]of Object.entries(i)){let i=l.at(a),c=s(r,i);if(!c)continue;let h=o(n,`${a}.${r}`,i.at(r),m);h&&f.push(e({entityKey:t,name:c,schema:h.schema,declaredSchema:h.schema,implementation:h.implementation}))}}if(!l.hasErrors)return f};
@@ -7,8 +7,8 @@ import { ShapePropertyName } from './names/shape-property-name.js';
7
7
  /**
8
8
  * A map of shape property names to their default values inside a single entity block.
9
9
  * Raw YAML values — markers intact — keyed by a validated {@link ShapePropertyName}.
10
- * Codegen emits these as-is via `stringifyEnhancedJsonValue`; runtime consumers
11
- * (`RecipeFactoryBuilder`) consume the generated `createRecipe` factory.
10
+ * Codegen emits these as-is via `stringifyEnhancedJsonValue`; at run time
11
+ * `createRecipeFactory` makes the generated `createRecipe` factory from them.
12
12
  */
13
13
  export type DefaultEntries = Readonly<Record<ShapePropertyName, EnhancedJsonValue>>;
14
14
  /**
@@ -19,6 +19,11 @@ export type DefaultEntries = Readonly<Record<ShapePropertyName, EnhancedJsonValu
19
19
  * flattened here to concrete entity entries so downstream codegen only serialises
20
20
  * a runtime-ready per-entity map.
21
21
  *
22
+ * A source key may state part of a shape, but the flattened entry of a concrete
23
+ * entity type states every property of its shape: `createRecipeFactory` validates
24
+ * each entry as a whole entity when the generated module loads. An entity type
25
+ * with no entry has no defaults and is not checked.
26
+ *
22
27
  * Values are raw `EnhancedJsonValue` so codegen can emit them via
23
28
  * `stringifyEnhancedJsonValue` with `$msg` markers preserved.
24
29
  *
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{CONSTANT_CAPS as t,resolveEnhancedJsonValue as r}from"../../../core/index.js";import{DiagnosticCode as o,diagnosticMessages as i}from"../../../errors/index.js";import{ShapePropertyName as n}from"./names/shape-property-name.js";let s=(e,t,r,n,s)=>{for(let l of r.validatePartialShape(t).errors){let t=l.instancePath?l.instancePath:"(root)",r=l.instancePath.split("/").filter(Boolean)[0]??"";n.error(o.DEFAULTS_SCHEMA_VIOLATION,i[o.DEFAULTS_SCHEMA_VIOLATION](e,r,t,l.message,s))}};export const Defaults=(l,a,f)=>{let E=a.allNames,T=[...E].map(String),N=new Map,S=new Map;for(let e of a.entitySchemas)N.set(e.entityType,new Set(Object.keys(e.shapeProperties))),S.set(e.entityType,e);let _={};for(let[e,O]of Object.entries(l)){let l=f.at(e);if(!E.has(e)){f.error(o.DEFAULTS_UNKNOWN_ENTITY_KEY,i[o.DEFAULTS_UNKNOWN_ENTITY_KEY](e,T));continue}let p=a.aliases.get(e),c=void 0!==p,g={};for(let[t,r]of Object.entries(O)){let s=n(t,l);if(s){if(c){let t=[];for(let e of p){let r=N.get(e);r&&r.has(s)||t.push(String(e))}if(t.length>0){let r=p[0],n=r?[...N.get(r)??[]]:[];f.error(o.DEFAULTS_UNKNOWN_PROPERTY,i[o.DEFAULTS_UNKNOWN_PROPERTY](e,s,n,t));continue}}else{let t=N.get(e);if(!t||!t.has(s)){let r=t?[...t]:[];f.error(o.DEFAULTS_UNKNOWN_PROPERTY,i[o.DEFAULTS_UNKNOWN_PROPERTY](e,s,r));continue}}g[s]=r}}if(0===Object.keys(g).length)continue;let m=r(g,void 0,t,l);if(void 0!==m){if(c)for(let t of p){let r=S.get(t);r&&s(e,m,r,l,String(t))}else{let t=S.get(e);t&&s(e,m,t,l)}for(let t of p??[e])_[String(t)]={..._[String(t)],...g}}}if(Object.keys(l).length>0&&f.warning(o.DEFAULTS_DEPRECATED,i[o.DEFAULTS_DEPRECATED]()),!f.hasErrors)return e({entries:_})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{CONSTANT_CAPS as t}from"../../../core/index.js";import{resolveEnhancedJsonValue as r}from"../../../enhanced-json/index.js";import{DiagnosticCode as i,diagnosticMessages as n}from"../../../errors/index.js";import{ShapePropertyName as o}from"./names/shape-property-name.js";let s=(e,t,r,o,s)=>{for(let l of r.validatePartialShape(t).errors){let t=l.instancePath?l.instancePath:"(root)",r=l.instancePath.split("/").filter(Boolean)[0]??"";o.error(i.DEFAULTS_SCHEMA_VIOLATION,n[i.DEFAULTS_SCHEMA_VIOLATION](e,r,t,l.message,s))}};export const Defaults=(l,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(l)){let l=f.at(e);if(!E.has(e)){f.error(i.DEFAULTS_UNKNOWN_ENTITY_KEY,n[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 s=o(t,l);if(s){if(p){let t=[];for(let e of c){let r=S.get(e);r&&r.has(s)||t.push(String(e))}if(t.length>0){let r=c[0],o=r?[...S.get(r)??[]]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,n[i.DEFAULTS_UNKNOWN_PROPERTY](e,s,o,t));continue}}else{let t=S.get(e);if(!t||!t.has(s)){let r=t?[...t]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,n[i.DEFAULTS_UNKNOWN_PROPERTY](e,s,r));continue}}h[s]=r}}if(0===Object.keys(h).length)continue;let m=r(h,void 0,t,l);if(void 0!==m){if(p)for(let t of c){let r=N.get(t);r&&s(e,m,r,l,String(t))}else{let t=N.get(e);t&&s(e,m,t,l)}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)]??{},o=(N.get(e)?.shapeSchema.required??[]).filter(e=>!Object.hasOwn(r,e));if(0===o.length)continue;let s=t.includes(String(e))?String(e):t.at(-1);f.at(s).error(i.DEFAULTS_INCOMPLETE,n[i.DEFAULTS_INCOMPLETE](String(e),o,t))}if(Object.keys(l).length>0&&f.warning(i.DEFAULTS_DEPRECATED,n[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 +1 @@
1
- import{isArray as e}from"@salsita-ai/common/utils";import{buildAssistantManifest as t}from"#package/domain";import{DiagnosticCode as r,diagnosticMessages as i}from"../../../../errors/index.js";import{ASSISTANT_HINTS as n}from"../../../raw-spec/index.js";import{createSchemaRefResolver as s,isNullableSchema as o,phxDefinitionRefName as a}from"../../common/index.js";import{resolveAssistantFieldType as l}from"./assistant-field-type.js";let p="AnyDomainEntity",S={section:"childRecipes",component:"childEntityRecipes",mutation:"addChild"},N={section:"replaceRecipes",component:"replaceEntityRecipes",mutation:"replaceEntity"},T=new Set(["id","type","meta"]),d=new Set(["Query","Mutation","Navigation","RecipeGroup","Recipe","DryRun","DryRunError","FieldOption","JSON","String","Int","Float","Boolean","ID"]),c=(e,t)=>{if(!t||0===t.length)return e;let r=`One of: ${t.map(e=>`"${e}"`).join(", ")}.`;return e?/[.!?]$/.test(e)?`${e} ${r}`:`${e}. ${r}`:r},f=new Set(["id","type"]),m="The raw stored value: a string, a message descriptor or a multilingual object.",A=(e,t)=>Object.entries(e).find(([e])=>e===t)?.[1],u=(e,t,{model:r,components:i})=>{let n=new Set([e,...[...r.aliases].filter(([,t])=>t.includes(e)).map(([e])=>e)]);return i.filter(({componentName:e,typeOrAlias:r})=>e===t&&n.has(r)).map(({instanceName:e})=>String(e))},_=(...e)=>n.filter(t=>e.some(e=>e?.includes(t))),E=(e,t,n,s)=>{let{model:o}=n,a=new Map,l=new Map;for(let[p,{groups:S,hints:N}]of Object.entries(e)){let e=o.entityTypes.find(e=>e===p),T=e?[e]:[...o.aliases].find(([e])=>e===p)?.[1];if(!T){s.at(p).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE(t.section,p));continue}for(let[e,o]of(T.forEach(e=>l.set(e,_(l.get(e),N))),Object.entries(S))){let l=s.at(p,"groups",e),S=`${p}.groups.${e}`,N={groupId:o?.as??e,instanceName:e,...o?.description===void 0?{}:{description:o.description},dryRuns:o?.allowDryRuns??!0};for(let s of T){let o=u(s,t.component,n),T=a.get(s)??[],d=T.find(e=>e.group.groupId===N.groupId);o.includes(e)?d?l.error(r.ASSISTANT_DUPLICATE_RECIPE_GROUP,i.ASSISTANT_DUPLICATE_RECIPE_GROUP(t,s,N.groupId,[d.entry,S])):a.set(s,[...T,{group:N,entry:S,entryCtx:l}]):l.error(r.ASSISTANT_UNKNOWN_RECIPE_GROUP,i.ASSISTANT_UNKNOWN_RECIPE_GROUP(t,p,e,s,o))}}}let p=o.entityTypes.flatMap(e=>{let t=a.get(e);return t?[{entityType:e,groups:t}]:[]});return{groups:Object.fromEntries(p.map(({entityType:e,groups:t})=>[e,t.map(({group:e})=>e)])),hints:l,metaEntries:new Map(p.flatMap(({entityType:e,groups:[t]})=>t?[[e,t.entryCtx]]:[]))}},I=e=>`${e}Meta`,O=e=>`${e.charAt(0).toUpperCase()+e.slice(1)}Result`,y=e=>{let t=(({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type))(e);return e.$ref||1!==t.length?e:t[0]},h=(e,t)=>{let{type:r,enumValues:i,localized:n,description:s}=l(e,t),o={...r,nonNull:!1},a=n?`${c(s,i)??""} ${m}`.trim():c(s,i);return{type:{...n?{kind:"scalar",name:"JSON",nonNull:!1}:o,nonNull:r.nonNull},...void 0===a?{}:{description:a}}},g=(t,r)=>{let i=(t=>{let r=y(t),i=r?.type==="array"&&r.items&&!e(r.items)?y(r.items):void 0,n=i??r;if(n?.$ref!==void 0&&"$DomainEntity"===a(n.$ref))return{target:n.references??p,list:void 0!==i}})(t);if(i)return{kind:"edge",...i,nullable:o(t,r),...void 0===t.description?{}:{description:t.description}};let{type:n,enumValues:s,localized:S,description:N}=l(t,r),T=c(N,s);return S?{kind:"value",type:{kind:"scalar",name:"JSON",nonNull:n.nonNull},description:`${N??""} ${m}`.trim()}:{kind:"value",type:n,...void 0===T?{}:{description:T}}},v=(e,t)=>{let{type:r,enumValues:i,localized:n,description:s}=l(e,t);return{type:{kind:"value",type:r},localized:!0===n,description:s,enumValues:i}},R=(e,t,n,s,o)=>{let a=t.startsWith("$")?((e,t,n,s)=>{let o=((e,t,{expressions:r,entityTypes:i})=>{let n=i.find(t=>t===e);for(let i of void 0===n?[e]:r.entityExpressions.get(n)?.shapeGroups??[]){let e=[...r.expressions.get(i)?.values()??[]].find(e=>e.name===t);if(e?.declaredSchema)return{implementation:e.implementation,declaredSchema:e.declaredSchema}}})(e.name,t,n);if(!o)return void s.error(r.ASSISTANT_UNKNOWN_FIELD,i.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t));let{implementation:a}=o;if("violations"===a.kind)return void s.error(r.ASSISTANT_UNSUPPORTED_EXPRESSION,i.ASSISTANT_UNSUPPORTED_EXPRESSION(e.name,t));if("relation"===a.kind){let[{target:e,cardinality:t}]=a.params;return{type:{kind:"edge",target:e,cardinality:t},localized:!1,description:void 0}}return v(o.declaredSchema,n.resolveRef)})(e,t,s,o):((e,t,{resolveRef:n},s)=>{let o=Object.entries(e.shape.properties).find(([e])=>e===t)?.[1];return o?v(o,n):void s.error(r.ASSISTANT_UNKNOWN_FIELD,i.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t))})(e,t,s,o);if(!a)return;let l=n?.as??(t.startsWith("$")?`_${t.slice(1)}`:t);return T.has(l)?void o.error(r.ASSISTANT_RESERVED_FIELD_NAME,i.ASSISTANT_RESERVED_FIELD_NAME(e.name,t,l)):{name:l,source:t,type:a.type,localized:a.localized,description:c(n?.description??a.description,a.enumValues),describedByManifest:n?.description!==void 0,enumValues:a.enumValues,valueDescription:n?.description??a.description}},M=(e,t,n,s,o)=>{let a=new Map,l=new Set(n);for(let s of[...t.flat(),...n]){let t=a.get(s.name);t?t.source!==s.source?o.error(r.ASSISTANT_FIELD_NAME_CONFLICT,i.ASSISTANT_FIELD_NAME_CONFLICT(e,s.name,[t.source,s.source])):l.has(s)&&s.describedByManifest&&a.set(s.name,{...t,description:s.description,describedByManifest:!0,valueDescription:s.valueDescription}):a.set(s.name,s)}return[...a.values()].map(e=>{let t=e.enumValues&&s(e.source);return t?{...e,enumValues:t,description:c(e.valueDescription,t)}:e})};export const resolveAssistantManifest=(e,{model:t,states:n,phxDefinitions:o,expressions:a,components:T,actions:y},v)=>{let b=v.errors.length,D=v.at("entities"),C=s(t.commonTypes,o);for(let e of t.resolvedShapes.keys())d.has(e)&&v.error(r.ASSISTANT_RESERVED_TYPE_NAME,i.ASSISTANT_RESERVED_TYPE_NAME(e,[...d]));let P=((e,t,r)=>{let i=new Map;for(let n of e){let e=[];for(let[i,s]of Object.entries(n.entries)){let o=R(n,i,s,t,r.at(n.name,i));o&&e.push(o)}i.set(n.name,e)}return i})(((e,t,n)=>{let s=[];for(let[r,i]of t.resolvedShapes){let t=e[r];t&&s.push({name:r,shape:i,entries:t})}let o=new Set(t.resolvedShapes.keys());for(let t of Object.keys(e))o.has(t)||n.at(t).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE("entities",t));return s})(e.entities??{},t,D),{resolveRef:C,expressions:a,entityTypes:t.entityTypes},D),U=M(p,[],P.get(p)??[],()=>void 0,v),j=new Map([[p,U]]);for(let e of t.aliases.keys())e!==p&&j.set(e,M(e,[U],P.get(e)??[],()=>void 0,v));for(let e of t.entityTypes){let r=[p,...[...t.aliases].filter(([t,r])=>t!==p&&r.includes(e)).map(([e])=>e)],i=[...t.resolvedShapes].find(([t])=>t===e)?.[1];j.set(e,M(e,r.map(e=>j.get(e)??[]),P.get(e)??[],e=>{let t=Object.entries(i?.properties??{}).find(([t])=>t===e)?.[1];return t&&l(t,C).enumValues},v))}let L=Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries((j.get(e)??[]).map(({name:e,source:t,localized:r})=>[e,r?{source:t,localized:!0}:{source:t}]))])),$=E(e.childRecipes??{},S,{model:t,components:T},v.at("childRecipes")),w=E(e.replaceRecipes??{},N,{model:t,components:T},v.at("replaceRecipes")),W=((e,t,n)=>{let s=new Set;for(let o of Object.keys(e)){let e=t.entityTypes.find(e=>e===o),a=e?[e]:[...t.aliases].find(([e])=>e===o)?.[1];a?a.forEach(e=>s.add(e)):n.at(o).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE("deletable",o))}return t.entityTypes.filter(e=>s.has(e))})(e.deletable??{},t,v.at("deletable")),F=((e,t,n)=>{let{model:s}=t,o=((e,t,n)=>{let s=new Map;for(let[o,a]of Object.entries(e)){let e=t.entityTypes.find(e=>e===o),l=e?[e]:[...t.aliases].find(([e])=>e===o)?.[1],p=[...t.resolvedShapes].find(([e])=>e===o)?.[1];if(!l||!p){n.at(o).error(r.ASSISTANT_UNKNOWN_TYPE,i.ASSISTANT_UNKNOWN_TYPE("writable",o));continue}for(let e of Object.keys(a)){let t=n.at(o,e);e.startsWith("$")||f.has(e)?t.error(r.ASSISTANT_NOT_WRITABLE,i.ASSISTANT_NOT_WRITABLE(o,e)):A(p.properties,e)?l.forEach(t=>{let r=s.get(t)??new Map;s.set(t,r.has(e)?r:r.set(e,o))}):t.error(r.ASSISTANT_UNKNOWN_FIELD,i.ASSISTANT_UNKNOWN_FIELD("writable",o,e))}}return s})(e,s,n);return s.entityTypes.flatMap(e=>{let a=[...s.resolvedShapes].find(([t])=>t===e)?.[1],p=[...o.get(e)??[]].flatMap(([s,o])=>{let p=a&&A(a.properties,s);return(p&&((e,{property:t,writableKey:n},s,{resolveRef:o,exposed:a,sources:p},S)=>{let N=Object.entries(A(p,e)??{}),T=a.get(e)?.find(({source:e})=>e===t)?.name??N.find(([,{source:e}])=>e===t)?.[0],d=void 0===T?N.find(([e])=>e===t)?.[1]:void 0;if(d)return void S.at(n,t).error(r.ASSISTANT_FIELD_NAME_CONFLICT,i.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[d.source,t],`${n}.${t}`));let{type:f,enumValues:u,localized:_,description:E}=l(s,o),I={...f,nonNull:!1},O=T??t,y=void 0===T?c(E,u):void 0;return _?{name:O,property:t,type:{kind:"scalar",name:"JSON",nonNull:!1},description:y?`${y} ${m}`:m}:{name:O,property:t,type:I,...void 0===y?{}:{description:y}}})(e,{property:s,writableKey:o},p,t,n))??[]});return p.length>0?[{entityType:e,fields:p}]:[]})})(e.writable??{},{model:t,resolveRef:C,exposed:P,sources:L},v.at("writable")),k=((e,t,n,s)=>{let{model:o}=n,a=new Map;for(let[l,p]of Object.entries(e)){let e=o.entityTypes.find(e=>e===l),T=e?[e]:[...o.aliases].find(([e])=>e===l)?.[1]??[];for(let[e,o]of Object.entries(p)){let p=o?.options;if(!p)continue;let d=s.at(l,e,"options"),c=`${l}.${e}`;for(let s of T){let o=t.find(e=>e.entityType===s)?.fields.find(t=>t.property===e);if(!o)continue;let l=p.as??`${o.name}Options`,T=u(s,p.componentType,n),f=a.get(s)??[],m=f.find(e=>e.options.edgeName===l||e.options.field===o.name);if(T.includes(p.instanceName))if(l===S.section||l===N.section)d.error(r.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME,i.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME(c,l,o.name));else if(m)d.error(r.ASSISTANT_DUPLICATE_OPTIONS_EDGE,i.ASSISTANT_DUPLICATE_OPTIONS_EDGE(s,m.options.edgeName===l?{edgeName:l}:{field:o.name},[m.entry,c]));else{let e={field:o.name,edgeName:l,componentType:p.componentType,instanceName:p.instanceName,validate:p.validate??!0,dryRuns:p.allowDryRuns??!0};a.set(s,[...f,{options:e,hints:_(p.hints),entry:c,entryCtx:d}])}else d.error(r.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT,i.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT(c,p,s,T))}}}return a})(e.writable??{},F,{model:t,components:T},v.at("writable"));var K=[$.metaEntries,w.metaEntries,new Map([...k].flatMap(([e,[t]])=>t?[[e,t.entryCtx]]:[]))];for(let e of t.entityTypes){let n=K.flatMap(t=>t.get(e)??[])[0],s=I(e);n&&[...t.resolvedShapes.keys()].some(e=>e===s)&&n.error(r.ASSISTANT_META_TYPE_NAME_CONFLICT,i.ASSISTANT_META_TYPE_NAME_CONFLICT(e,s))}let Y=t.entityTypes.filter(e=>($.groups[e]?.length??0)>0||(w.groups[e]?.length??0)>0||(k.get(e)?.length??0)>0).map(I),V=((e,{actions:t,resolveRef:n,builtInMutations:s,typeNames:o},a)=>{let l=[],p=[...t.values()].map(e=>String(e.name));for(let[S,N]of Object.entries(e)){let e=a.at(S),T=[...t.values()].find(e=>e.name===S);if(!T){e.error(r.ASSISTANT_UNKNOWN_ACTION,i.ASSISTANT_UNKNOWN_ACTION(S,p));continue}let d=N?.as??S,c=l.find(e=>e.fieldName===d),f=O(d);if(s.has(d)||c){e.error(r.ASSISTANT_MUTATION_NAME_CONFLICT,i.ASSISTANT_MUTATION_NAME_CONFLICT(S,d,c?`"assistant.actions.${c.actionName}" already exposes`:"the built-in mutation of that name already takes"));continue}if(o.has(f)||l.some(e=>O(e.fieldName)===f)){e.error(r.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT,i.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT(S,d,f));continue}let m=N?.description??T.description;l.push({fieldName:d,actionName:S,...void 0===m?{}:{description:m},args:Object.fromEntries(Object.entries(T.params).map(([e,{schema:t}])=>[e,h(t,n)])),result:Object.fromEntries(Object.entries(T.result).map(([e,t])=>[e,g(t,n)]))})}return l})(e.actions??{},{actions:y,resolveRef:C,builtInMutations:new Set(["deleteEntity",S.mutation,N.mutation,...F.map(({entityType:e})=>`modify${e}`)]),typeNames:new Set([...d,...t.resolvedShapes.keys(),...Y])},v.at("actions"));if(!(v.errors.length>b))return{entityTypes:t.entityTypes,aliases:Object.fromEntries(t.aliases),exampleType:t.rootEntityTypes[0]??t.entityTypes[0],states:{navigationStates:n.navigationStates,viewStates:n.viewStates,toolStates:n.toolStates},deletableTypes:W,writableTypes:F,actionFields:V,childRecipes:Object.fromEntries(Object.entries($.groups).map(([e,t])=>[e,{groups:t,hints:$.hints.get(e)??[]}])),replaceRecipes:Object.fromEntries(Object.entries(w.groups).map(([e,t])=>[e,{groups:t,hints:w.hints.get(e)??[]}])),optionsEdges:Object.fromEntries([...k].map(([e,t])=>[e,t.map(({options:e,hints:t})=>({options:e,hints:t}))])),fields:Object.fromEntries([...j].map(([e,t])=>[e,t.map(e=>({name:e.name,source:e.source,localized:e.localized,type:e.type,...void 0===e.description?{}:{description:e.description}}))]))}};export const createAssistantSchema=(e,n,s)=>{let o=resolveAssistantManifest(e,n,s);if(o)try{return{...t(o),resolved:o}}catch(e){s.error(r.ASSISTANT_INVALID_SCHEMA,i.ASSISTANT_INVALID_SCHEMA([e instanceof Error?e.message:String(e)]));return}};
1
+ import{isArray as e}from"@salsita-ai/common/utils";import{ASSISTANT_HINTS as t,AssistantFieldClashError as i,buildAssistantManifest as r,describeAssistantValues as n,mergeAssistantFields as s,resolveAssistantField as o}from"#package/domain";import{DiagnosticCode as a,diagnosticMessages as l}from"../../../../errors/index.js";import{createSchemaRefResolver as S,isNullableSchema as p,phxDefinitionRefName as N}from"../../common/index.js";import{resolveAssistantFieldType as T}from"./assistant-field-type.js";let c="AnyDomainEntity",d="RecipeGroup",f="Recipe",A="DryRun",E="FieldOption",m={section:"childRecipes",component:"childEntityRecipes",mutation:"addChild"},_={section:"replaceRecipes",component:"replaceEntityRecipes",mutation:"replaceEntity"},u=new Set(["id","type","meta"]),O=new Set(["Query","Mutation","Navigation",d,f,A,"DryRunError",E,"JSON","String","Int","Float","Boolean","ID"]),I=new Set([d,f,E,A]),y=new Set(["id","type"]),b="A string, a message descriptor or a multilingual object; passed without translation.",h=(e,t)=>Object.entries(e).find(([e])=>e===t)?.[1],g=(e,{property:t,writableKey:i},r,{resolveRef:s,exposed:o,sources:S},p)=>{let N=Object.entries(h(S,e)??{}),c=o.get(e)?.find(({source:e})=>e===t)?.name??N.find(([,{source:e}])=>e===t)?.[0],d=void 0===c?N.find(([e])=>e===t)?.[1]:void 0;if(d)return void p.at(i,t).error(a.ASSISTANT_FIELD_NAME_CONFLICT,l.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[d.source,t],`${i}.${t}`));let{type:f,enumValues:A,localized:E,description:m}=T(r,s),_={...f,nonNull:!1},u=c??t,O=void 0===c?n(m,A):void 0;return E?{name:u,property:t,type:{kind:"scalar",name:"JSON",nonNull:!1},description:O?`${O} ${b}`:b}:{name:u,property:t,type:_,...void 0===O?{}:{description:O}}},v=(e,t,{model:i,components:r})=>{let n=new Set([e,...[...i.aliases].filter(([,t])=>t.includes(e)).map(([e])=>e)]);return r.filter(({componentName:e,typeOrAlias:i})=>e===t&&n.has(i)).map(({instanceName:e})=>String(e))},R=(...e)=>t.filter(t=>e.some(e=>e?.includes(t))),j=(e,t,i,r)=>{let{model:n}=i,s=new Map,o=new Map;for(let[S,{groups:p,hints:N}]of Object.entries(e)){let e=n.entityTypes.find(e=>e===S),T=e?[e]:[...n.aliases].find(([e])=>e===S)?.[1];if(!T){r.at(S).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE(t.section,S));continue}for(let[e,n]of(T.forEach(e=>o.set(e,R(o.get(e),N))),Object.entries(p))){let o=r.at(S,"groups",e),p=`${S}.groups.${e}`,N={groupId:n?.as??e,instanceName:e,...n?.description===void 0?{}:{description:n.description},dryRuns:n?.allowDryRuns??!0};for(let r of T){let n=v(r,t.component,i),T=s.get(r)??[],c=T.find(e=>e.group.groupId===N.groupId);n.includes(e)?c?o.error(a.ASSISTANT_DUPLICATE_RECIPE_GROUP,l.ASSISTANT_DUPLICATE_RECIPE_GROUP(t,r,N.groupId,[c.entry,p])):s.set(r,[...T,{group:N,entry:p,entryCtx:o}]):o.error(a.ASSISTANT_UNKNOWN_RECIPE_GROUP,l.ASSISTANT_UNKNOWN_RECIPE_GROUP(t,S,e,r,n))}}}let S=n.entityTypes.flatMap(e=>{let t=s.get(e);return t?[{entityType:e,groups:t}]:[]});return{groups:Object.fromEntries(S.map(({entityType:e,groups:t})=>[e,t.map(({group:e})=>e)])),hints:o,metaEntries:new Map(S.flatMap(({entityType:e,groups:[t]})=>t?[[e,t.entryCtx]]:[]))}},M=e=>`${e}Meta`,D=e=>`${e.charAt(0).toUpperCase()+e.slice(1)}Result`,C=e=>{let t=(({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type))(e);return e.$ref||1!==t.length?e:t[0]},P=(e,t)=>{let{type:i,enumValues:r,localized:s,description:o}=T(e,t),a={...i,nonNull:!1},l=s?`${n(o,r)??""} ${b}`.trim():n(o,r);return{type:{...s?{kind:"scalar",name:"JSON",nonNull:!1}:a,nonNull:i.nonNull},...void 0===l?{}:{description:l}}},L=(t,i)=>{let r=(t=>{let i=C(t),r=i?.type==="array"&&i.items&&!e(i.items)?C(i.items):void 0,n=r??i;if(n?.$ref!==void 0&&"$DomainEntity"===N(n.$ref))return{target:n.references??c,list:void 0!==r}})(t);if(r)return{kind:"edge",...r,nullable:p(t,i),...void 0===t.description?{}:{description:t.description}};let{type:s,enumValues:o,localized:a,description:l}=T(t,i),S=n(l,o);return a?{kind:"value",type:{kind:"scalar",name:"JSON",nonNull:s.nonNull},description:`${l??""} ${b}`.trim()}:{kind:"value",type:s,...void 0===S?{}:{description:S}}},U=(e,t)=>{let{type:i,enumValues:r,localized:n,description:s}=T(e,t);return{type:{kind:"value",type:i},localized:!0===n,description:s,enumValues:r}},w=(e,t,i,r,s)=>{let o=t.startsWith("$")?((e,t,i,r)=>{let n=((e,t,{expressions:i,entityTypes:r})=>{let n=r.find(t=>t===e);for(let r of void 0===n?[e]:i.entityExpressions.get(n)?.shapeGroups??[]){let e=[...i.expressions.get(r)?.values()??[]].find(e=>e.name===t);if(e?.declaredSchema)return{implementation:e.implementation,declaredSchema:e.declaredSchema}}})(e.name,t,i);if(!n)return void r.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t));let{implementation:s}=n;if("violations"===s.kind)return void r.error(a.ASSISTANT_UNSUPPORTED_EXPRESSION,l.ASSISTANT_UNSUPPORTED_EXPRESSION(e.name,t));if("relation"===s.kind){let[{target:e,cardinality:t}]=s.params;return{type:{kind:"edge",target:e,cardinality:t},localized:!1,description:void 0}}return U(n.declaredSchema,i.resolveRef)})(e,t,r,s):((e,t,{resolveRef:i},r)=>{let n=Object.entries(e.shape.properties).find(([e])=>e===t)?.[1];return n?U(n,i):void r.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t))})(e,t,r,s);if(!o)return;let S=i?.as??(t.startsWith("$")?`_${t.slice(1)}`:t);return u.has(S)?void s.error(a.ASSISTANT_RESERVED_FIELD_NAME,l.ASSISTANT_RESERVED_FIELD_NAME(e.name,t,S)):{name:S,source:t,type:o.type,localized:o.localized,description:n(i?.description??o.description,o.enumValues),describedByManifest:i?.description!==void 0,enumValues:o.enumValues,valueDescription:i?.description??o.description,...i?.lenses?.length?{lenses:[...new Set(i.lenses)]}:{}}},$=(e,t,i,r,n)=>s(t,i,r,(t,i,r)=>{n.error(a.ASSISTANT_FIELD_NAME_CONFLICT,l.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[i,r]))});export const resolveAssistantManifest=(e,{model:t,states:i,phxDefinitions:r,expressions:n,components:s,actions:p},N)=>{let d=N.errors.length,f=N.at("entities"),A=S(t.commonTypes,r);for(let e of t.resolvedShapes.keys())O.has(e)&&N.error(a.ASSISTANT_RESERVED_TYPE_NAME,l.ASSISTANT_RESERVED_TYPE_NAME(e,[...O]));let E=((e,t,i)=>{let r=new Map;for(let n of e){let e=[];for(let[r,s]of Object.entries(n.entries)){let o=w(n,r,s,t,i.at(n.name,r));o&&e.push(o)}r.set(n.name,e)}return r})(((e,t,i)=>{let r=[];for(let[i,n]of t.resolvedShapes){let t=e[i];t&&r.push({name:i,shape:n,entries:t})}let n=new Set(t.resolvedShapes.keys());for(let t of Object.keys(e))n.has(t)||i.at(t).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("entities",t));return r})(e.entities??{},t,f),{resolveRef:A,expressions:n,entityTypes:t.entityTypes},f),u=$(c,[],E.get(c)??[],()=>void 0,N),C=new Map([[c,u]]);for(let e of t.aliases.keys())e!==c&&C.set(e,$(e,[u],E.get(e)??[],()=>void 0,N));for(let e of t.entityTypes){let i=[c,...[...t.aliases].filter(([t,i])=>t!==c&&i.includes(e)).map(([e])=>e)],r=[...t.resolvedShapes].find(([t])=>t===e)?.[1];C.set(e,$(e,i.map(e=>C.get(e)??[]),E.get(e)??[],e=>{let t=Object.entries(r?.properties??{}).find(([t])=>t===e)?.[1];return t&&T(t,A).enumValues},N))}let U=Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries((C.get(e)??[]).map(({name:e,source:t,localized:i})=>[e,i?{source:t,localized:!0}:{source:t}]))])),F=j(e.childRecipes??{},m,{model:t,components:s},N.at("childRecipes")),W=j(e.replaceRecipes??{},_,{model:t,components:s},N.at("replaceRecipes")),k=((e,t,i)=>{let r=new Set;for(let n of Object.keys(e)){let e=t.entityTypes.find(e=>e===n),s=e?[e]:[...t.aliases].find(([e])=>e===n)?.[1];s?s.forEach(e=>r.add(e)):i.at(n).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("deletable",n))}return t.entityTypes.filter(e=>r.has(e))})(e.deletable??{},t,N.at("deletable")),K=((e,t,i)=>{let{model:r}=t,n=((e,t,i)=>{let r=new Map;for(let[n,s]of Object.entries(e)){let e=t.entityTypes.find(e=>e===n),o=e?[e]:[...t.aliases].find(([e])=>e===n)?.[1],S=[...t.resolvedShapes].find(([e])=>e===n)?.[1];if(!o||!S){i.at(n).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("writable",n));continue}for(let e of Object.keys(s)){let t=i.at(n,e);e.startsWith("$")||y.has(e)?t.error(a.ASSISTANT_NOT_WRITABLE,l.ASSISTANT_NOT_WRITABLE(n,e)):h(S.properties,e)?o.forEach(t=>{let i=r.get(t)??new Map;r.set(t,i.has(e)?i:i.set(e,n))}):t.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("writable",n,e))}}return r})(e,r,i);return r.entityTypes.flatMap(e=>{let s=[...r.resolvedShapes].find(([t])=>t===e)?.[1],o=[...n.get(e)??[]].flatMap(([r,n])=>{let o=s&&h(s.properties,r);return(o&&g(e,{property:r,writableKey:n},o,t,i))??[]});return o.length>0?[{entityType:e,fields:o}]:[]})})(e.writable??{},{model:t,resolveRef:A,exposed:E,sources:U},N.at("writable")),V=((e,t,i,r)=>{let{model:n}=i,s=new Map;for(let[o,S]of Object.entries(e)){let e=n.entityTypes.find(e=>e===o),p=e?[e]:[...n.aliases].find(([e])=>e===o)?.[1]??[];for(let[e,n]of Object.entries(S)){let S=n?.options;if(!S)continue;let N=r.at(o,e,"options"),T=`${o}.${e}`;for(let r of p){let n=t.find(e=>e.entityType===r)?.fields.find(t=>t.property===e);if(!n)continue;let o=S.as??`${n.name}Options`,p=v(r,S.componentType,i),c=s.get(r)??[],d=c.find(e=>e.options.edgeName===o||e.options.field===n.name);if(p.includes(S.instanceName))if(o===m.section||o===_.section)N.error(a.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME,l.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME(T,o,n.name));else if(d)N.error(a.ASSISTANT_DUPLICATE_OPTIONS_EDGE,l.ASSISTANT_DUPLICATE_OPTIONS_EDGE(r,d.options.edgeName===o?{edgeName:o}:{field:n.name},[d.entry,T]));else{let e={field:n.name,edgeName:o,componentType:S.componentType,instanceName:S.instanceName,validate:S.validate??!0,dryRuns:S.allowDryRuns??!0};s.set(r,[...c,{options:e,hints:R(S.hints),entry:T,entryCtx:N}])}else N.error(a.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT,l.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT(T,S,r,p))}}}return s})(e.writable??{},K,{model:t,components:s},N.at("writable"));var Y=[F.metaEntries,W.metaEntries,new Map([...V].flatMap(([e,[t]])=>t?[[e,t.entryCtx]]:[]))];for(let e of t.entityTypes){let i=Y.flatMap(t=>t.get(e)??[])[0],r=M(e);i&&[...t.resolvedShapes.keys()].some(e=>e===r)&&i.error(a.ASSISTANT_META_TYPE_NAME_CONFLICT,l.ASSISTANT_META_TYPE_NAME_CONFLICT(e,r))}let x=t.entityTypes.filter(e=>(F.groups[e]?.length??0)>0||(W.groups[e]?.length??0)>0||(V.get(e)?.length??0)>0).map(M),G=((e,{actions:t,resolveRef:i,builtInMutations:r,typeNames:n},s)=>{let o=[],S=[...t.values()].map(e=>String(e.name));for(let[p,N]of Object.entries(e)){let e=s.at(p),T=[...t.values()].find(e=>e.name===p);if(!T){e.error(a.ASSISTANT_UNKNOWN_ACTION,l.ASSISTANT_UNKNOWN_ACTION(p,S));continue}let c=N?.as??p,d=o.find(e=>e.fieldName===c),f=D(c);if(r.has(c)||d){e.error(a.ASSISTANT_MUTATION_NAME_CONFLICT,l.ASSISTANT_MUTATION_NAME_CONFLICT(p,c,d?`"assistant.actions.${d.actionName}" already exposes`:"the built-in mutation of that name already takes"));continue}if(n.has(f)||o.some(e=>D(e.fieldName)===f)){e.error(a.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT,l.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT(p,c,f));continue}let A=N?.description??T.description;o.push({fieldName:c,actionName:p,...void 0===A?{}:{description:A},args:Object.fromEntries(Object.entries(T.params).map(([e,{schema:t}])=>[e,P(t,i)])),result:Object.fromEntries(Object.entries(T.result).map(([e,t])=>[e,L(t,i)]))})}return o})(e.actions??{},{actions:p,resolveRef:A,builtInMutations:new Set(["deleteEntity",m.mutation,_.mutation,...K.map(({entityType:e})=>`modify${e}`)]),typeNames:new Set([...O,...t.resolvedShapes.keys(),...x])},N.at("actions")),z=((e,t)=>{let i=e.lenses??{},r=new Set;for(let[n,s]of Object.entries(e.entities??{}))for(let[e,o]of Object.entries(s))for(let s of o?.lenses??[])Object.hasOwn(i,s)?r.add(s):t.at("entities",n,e,"lenses").error(a.ASSISTANT_UNKNOWN_LENS,l.ASSISTANT_UNKNOWN_LENS(`${n}.${e}`,s,Object.keys(i)));for(let e of Object.keys(i))I.has(e)?t.at("lenses",e).error(a.ASSISTANT_RESERVED_LENS_NAME,l.ASSISTANT_RESERVED_LENS_NAME(e,[...I])):r.has(e)||t.at("lenses",e).error(a.ASSISTANT_EMPTY_LENS,l.ASSISTANT_EMPTY_LENS(e));return Object.fromEntries(Object.entries(i).map(([e,{description:t,maxDepth:i}])=>[e,{description:t,maxDepth:i??1}]))})(e,N);if(N.errors.length>d)return;let B=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{hints:R(t.hints),groups:Object.entries(t.groups).map(([e,t])=>({instanceName:e,groupId:t?.as??e,...t?.description===void 0?{}:{description:t.description},dryRuns:t?.allowDryRuns??!0}))}]));return{declarations:{entities:Object.fromEntries(Object.keys(e.entities??{}).map(e=>[e,(E.get(e)??[]).map(e=>({name:e.name,source:e.source,type:e.type,localized:e.localized,describedByManifest:e.describedByManifest,...void 0===e.description?{}:{description:e.description},...void 0===e.valueDescription?{}:{valueDescription:e.valueDescription},...void 0===e.enumValues?{}:{enumValues:e.enumValues},...void 0===e.lenses?{}:{lenses:e.lenses}}))])),enumValues:Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries(Object.entries(t.resolvedShapes.get(e)?.properties??{}).flatMap(([e,t])=>{let i=T(t,A).enumValues;return i?[[e,i]]:[]}))])),deletable:Object.keys(e.deletable??{}),writable:Object.fromEntries(Object.entries(e.writable??{}).map(([e,i])=>[e,Object.fromEntries(Object.entries(i).map(([i,r])=>[i,{defaultOptionsName:r?.options?.as===void 0,members:Object.fromEntries(t.entityTypes.filter(i=>i===e||[...t.aliases].find(([t])=>t===e)?.[1].includes(i)).flatMap(r=>{let n=h(t.resolvedShapes.get(r)?.properties??{},i),s=n&&g(r,{property:i,writableKey:e},n,{model:t,resolveRef:A,exposed:new Map,sources:{}},N.at("writable")),o=V.get(r)?.find(t=>t.entry===`${e}.${i}`);return s?[[r,{field:s,...T(n,A).localized?{exposedDescription:b}:{},...o?{options:{options:o.options,hints:o.hints}}:{}}]]:[]}))}]))])),childRecipes:B(e.childRecipes??{}),replaceRecipes:B(e.replaceRecipes??{})},entityTypes:t.entityTypes,aliases:Object.fromEntries(t.aliases),exampleType:t.rootEntityTypes[0]??t.entityTypes[0],states:{navigationStates:i.navigationStates,viewStates:i.viewStates,toolStates:i.toolStates},deletableTypes:k,writableTypes:K,actionFields:G,childRecipes:Object.fromEntries(Object.entries(F.groups).map(([e,t])=>[e,{groups:t,hints:F.hints.get(e)??[]}])),replaceRecipes:Object.fromEntries(Object.entries(W.groups).map(([e,t])=>[e,{groups:t,hints:W.hints.get(e)??[]}])),optionsEdges:Object.fromEntries([...V].map(([e,t])=>[e,t.map(({options:e,hints:t})=>({options:e,hints:t}))])),fields:Object.fromEntries([...C].map(([e,t])=>[e,t.map(t=>o(t,E.get(e)??[]))])),lenses:z}};export const createAssistantSchema=(e,t,n)=>{let s=resolveAssistantManifest(e,t,n);if(s)try{return{...r(s),resolved:s}}catch(e){if(e instanceof i)return void n.at("entities").error(a.ASSISTANT_FIELD_SHAPE_CONFLICT,l.ASSISTANT_FIELD_SHAPE_CONFLICT(e.fieldName,e.exposures));n.error(a.ASSISTANT_INVALID_SCHEMA,l.ASSISTANT_INVALID_SCHEMA([e instanceof Error?e.message:String(e)]));return}};
@@ -5,6 +5,8 @@ import { Env } from './env.js';
5
5
  /**
6
6
  * Validated infrastructure settings — env vars, ACL, resources.
7
7
  * Used by codegen for builder chain methods and env reader generation.
8
+ * No two entries of `resources` share a name: generated code and webhooks
9
+ * identify a resource by its name alone.
8
10
  * `env` is a `Env`-branded value once validated (keys conform to
9
11
  * `/^[A-Z_][A-Z0-9_]*$/`), or `undefined` when no `env:` block was declared.
10
12
  */
@@ -1 +1 @@
1
- import{Branded as o}from"@salsita-ai/common/utils";import{Env as r}from"./env.js";export const Infra=(e,s)=>{let i;if(void 0===e.env||void 0!==(i=r(e.env,s)))return o({env:i,acl:e.acl,resources:e.resources,resourcesConfig:e.resourcesConfig})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as r,diagnosticMessages as o}from"../../../errors/index.js";import{Env as s}from"./env.js";export const Infra=(n,t)=>{let i;if((void 0===n.env||void 0!==(i=s(n.env,t)))&&((e,s)=>{let n=new Map,t=!0;for(let[i,a]of(e??[]).entries()){let e=n.get(a.name);if(void 0===e){n.set(a.name,i);continue}s.at("resources",String(i),"name").error(r.DUPLICATE_RESOURCE_NAME,o.DUPLICATE_RESOURCE_NAME(a.name,e,i)),t=!1}return t})(n.resources,t))return e({env:i,acl:n.acl,resources:n.resources,resourcesConfig:n.resourcesConfig})};
@@ -1,6 +1,6 @@
1
1
  import type { AccessLevel } from '@salsita-ai/contracts/api';
2
2
  import { type ChatStreamChunk } from '@salsita-ai/contracts/chat';
3
- import { type AssistantChatConnection, type AuthorizedPhoenixApiClient, type ChatToolCall, type ChatToolCallResult, type ConfigurationPayload, type ConfigurationSchema, type waitForFinalizationResultSettings } from './contract.js';
3
+ import { type AssistantChatConnection, type AssistantEarlierThread, type AssistantThreadCompaction, type AuthorizedPhoenixApiClient, type ChatToolCall, type ChatToolCallResult, type ConfigurationPayload, type ConfigurationSchema, type waitForFinalizationResultSettings } from './contract.js';
4
4
  import type { components } from './phoenix-api.js';
5
5
  export declare class AuthorizedClient<FINALIZE_DATA extends Record<string, unknown>, FINALIZE_RESULT extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>> implements AuthorizedPhoenixApiClient<FINALIZE_DATA, FINALIZE_RESULT, FRONTEND_DATA> {
6
6
  private readonly _baseUrl;
@@ -26,6 +26,8 @@ export declare class AuthorizedClient<FINALIZE_DATA extends Record<string, unkno
26
26
  getSpeechToText: (configurationId: string, blob: Blob) => Promise<string>;
27
27
  getTextToSpeech: (configurationId: string, content: string) => Promise<Blob>;
28
28
  getAssistantChatConnection: (configurationId: string) => AssistantChatConnection;
29
+ compactAssistantThread: (configurationId: string) => Promise<AssistantThreadCompaction>;
30
+ getAssistantEarlierThread: (configurationId: string, threadId: string, limit: number) => Promise<AssistantEarlierThread>;
29
31
  sendMessage: (configurationId: string, content: string, context?: Record<string, string>) => Promise<ReadableStream<ChatStreamChunk>>;
30
32
  sendToolCallResults: (configurationId: string, calls: ChatToolCall[], results: ChatToolCallResult[], agent?: string) => Promise<ReadableStream<ChatStreamChunk>>;
31
33
  generateShareLink: (configurationId: string, revisionId: string, expiration: number, access: AccessLevel, baseUrl: string | undefined) => Promise<{
@@ -1 +1 @@
1
- import{match as t}from"ts-pattern";import{InfoError as a}from"@salsita-ai/common/utils";import{isChatError as e}from"@salsita-ai/contracts/chat";import{createApiBaseClient as r}from"./base-client.js";import{InvalidAccessKeyError as i}from"./contract.js";let o=()=>new TransformStream({transform(t,a){a.enqueue(t)}}),n=async(t,a)=>{for(;;){let{done:r,value:i}=await t.read();if(r){await a.close();break}for(let t of i.split("\n").filter(t=>""!==t.trim()).map(t=>JSON.parse(t))){if(e(t))return void await a.abort(Error(t.error));await a.write(t)}}},s=(e,r)=>{let o=`${r} API request failed: ${JSON.stringify(e)}`;return t(e).with({statusCode:403,invalidAccessKey:!0},()=>new i).with({statusCode:403},()=>new a(o)).otherwise(()=>Error(o))};export class AuthorizedClient{_baseUrl;_getAccessToken;_getSessionToken;_client;constructor(t,a,e){this._baseUrl=t,this._getAccessToken=a,this._getSessionToken=e,this._client=r(this._baseUrl)}_authHeaders=async()=>{let t=this._getAccessToken(),a=await this._getSessionToken();return{"X-Access-Key":t,Authorization:`Bearer ${a}`}};getConfiguration=async t=>{let a=await this._authHeaders(),e=await this._client.GET("/configurations/{configurationId}",{params:{path:{configurationId:t}},headers:a});if(e.error)throw s(e.error,"getConfiguration");return e.data};updateConfiguration=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.PUT("/configurations/{configurationId}",{params:{path:{configurationId:t}},body:a,headers:e});if(r.error)throw s(r.error,"updateConfiguration");return r.data};finalize=async(t,a,e,r,i)=>{let o=await this._authHeaders(),n=await this._client.POST("/configurations/{configurationId}/{finalizationUuid}/finalize",{params:{path:{configurationId:t,finalizationUuid:a},query:{locale:r}},body:{finalizeData:e,frontendData:i},headers:o});if(n.error)throw s(n.error,"finalize")};waitForFinalizationToComplete=async(t,a,e)=>{let r=e?.pollingFrequency??500,i=Math.ceil((e?.pollingTimeout??3e4)/r);for(let e=0;e<i;e++){let e=await this._authHeaders(),i=await this._client.GET("/configurations/{configurationId}/{finalizationUuid}/state",{params:{path:{configurationId:t,finalizationUuid:a}},headers:e});if(i.error)throw s(i.error,"getFinalizeJobState");let o=i.data;if("completed"===o.state)return o.result[0];if("failed"===o.state)throw Error("finalization failed");if("unknown"===o.state)throw Error("finalization state is unknown");await new Promise(t=>setTimeout(t,r))}throw Error("finalization did not complete within the specified timeout")};getConfigurationRevision=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/revisions/{revisionId}",{params:{path:{configurationId:t,revisionId:a}},headers:e});if(r.error)throw s(r.error,"getConfigurationRevision");return r.data};getChatConversation=async t=>{let a=await this._authHeaders(),e=await this._client.GET("/configurations/{configurationId}/chat",{params:{path:{configurationId:t}},headers:a});if(e.error)throw s(e.error,"getChatConversation");return e.data};getSpeechToText=async(t,a)=>{let e=await this._authHeaders(),r=new FormData;r.append("voiceFile",a,"voice.wav");let i=await this._client.POST("/configurations/{configurationId}/chat/stt",{params:{path:{configurationId:t}},headers:e,body:r,bodySerializer:()=>r});if(i.error)throw s(i.error,"getSpeechToText");return i.data.text};getTextToSpeech=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.POST("/configurations/{configurationId}/chat/tts",{params:{path:{configurationId:t}},body:{content:a},headers:e,parseAs:"arrayBuffer"});if(r.error)throw s(r.error,"getTextToSpeech");return new Blob([r.data],{type:"audio/mp3"})};getAssistantChatConnection=t=>({url:new URL(`configurations/${encodeURIComponent(t)}/assistant/chat`,`${this._baseUrl}/`).toString(),headers:this._authHeaders});sendMessage=async(t,a,e)=>{let r=await this._authHeaders(),i=await this._client.POST("/configurations/{configurationId}/chat/message",{params:{path:{configurationId:t}},body:{content:a,context:e},headers:r,parseAs:"stream"});if(i.error)throw s(i.error,"sendMessage");let h=i.data?.pipeThrough(new TextDecoderStream).getReader();if(!h)throw Error("sendMessage API response did not contain a readable stream");let l=o();return n(h,l.writable.getWriter()),l.readable};sendToolCallResults=async(t,a,e,r)=>{let i=await this._authHeaders(),h=await this._client.POST("/configurations/{configurationId}/chat/tool-calls",{params:{path:{configurationId:t}},body:{agent:r,calls:a,results:e},headers:i,parseAs:"stream"});if(h.error)throw s(h.error,"sendToolCallResults");let l=h.data?.pipeThrough(new TextDecoderStream).getReader();if(!l)throw Error("sendMessage API response did not contain a readable stream");let c=o();return n(l,c.writable.getWriter()),c.readable};generateShareLink=async(t,a,e,r,i)=>{let o=await this._authHeaders(),n=await this._client.POST("/configurations/{configurationId}/share-link",{params:{path:{configurationId:t}},body:{revisionId:a,expiration:e,access:r,baseUrl:i},headers:o});if(n.error)throw s(n.error,"generateShareLink");return n.data};generateUploadLinks=async(t,a,e)=>{let r=await this._authHeaders(),i=await this._client.POST("/configurations/{configurationId}/{finalizationUuid}/image-upload-links",{params:{path:{configurationId:t,finalizationUuid:a}},body:{names:e},headers:r});if(i.error)throw s(i.error,"generateUploadLinks");return i.data.links};getConfigurationPublicUploadLink=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/resources/{key}/public/upload",{params:{path:{configurationId:t,key:a}},headers:e});if(r.error)throw s(r.error,"getConfigurationPublicUploadLink");return r.data};getConfigurationPrivateUploadLink=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/resources/{key}/private/upload",{params:{path:{configurationId:t,key:a}},headers:e});if(r.error)throw s(r.error,"getConfigurationPrivateUploadLink");return r.data};getConfigurationPrivateResourceLink=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/resources/{key}/private",{params:{path:{configurationId:t,key:a}},headers:e});if(r.error)throw s(r.error,"getConfigurationPrivateUploadLink");return r.data};cloneConfiguration=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.POST("/configurations/{configurationId}/revisions/{revisionId}/clone",{params:{path:{configurationId:t,revisionId:a}},headers:{...e,"Content-Type":null}});if(r.error)throw s(r.error,"cloneConfiguration");return r.data}}
1
+ import{match as t}from"ts-pattern";import{InfoError as a}from"@salsita-ai/common/utils";import{isChatError as e}from"@salsita-ai/contracts/chat";import{createApiBaseClient as r}from"./base-client.js";import{AssistantRequestError as i,InvalidAccessKeyError as o}from"./contract.js";let n=()=>new TransformStream({transform(t,a){a.enqueue(t)}}),s=async(t,a)=>{for(;;){let{done:r,value:i}=await t.read();if(r){await a.close();break}for(let t of i.split("\n").filter(t=>""!==t.trim()).map(t=>JSON.parse(t))){if(e(t))return void await a.abort(Error(t.error));await a.write(t)}}},h=(e,r)=>{let i=`${r} API request failed: ${JSON.stringify(e)}`;return t(e).with({statusCode:403,invalidAccessKey:!0},()=>new o).with({statusCode:403},()=>new a(i)).otherwise(()=>Error(i))};export class AuthorizedClient{_baseUrl;_getAccessToken;_getSessionToken;_client;constructor(t,a,e){this._baseUrl=t,this._getAccessToken=a,this._getSessionToken=e,this._client=r(this._baseUrl)}_authHeaders=async()=>{let t=this._getAccessToken(),a=await this._getSessionToken();return{"X-Access-Key":t,Authorization:`Bearer ${a}`}};getConfiguration=async t=>{let a=await this._authHeaders(),e=await this._client.GET("/configurations/{configurationId}",{params:{path:{configurationId:t}},headers:a});if(e.error)throw h(e.error,"getConfiguration");return e.data};updateConfiguration=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.PUT("/configurations/{configurationId}",{params:{path:{configurationId:t}},body:a,headers:e});if(r.error)throw h(r.error,"updateConfiguration");return r.data};finalize=async(t,a,e,r,i)=>{let o=await this._authHeaders(),n=await this._client.POST("/configurations/{configurationId}/{finalizationUuid}/finalize",{params:{path:{configurationId:t,finalizationUuid:a},query:{locale:r}},body:{finalizeData:e,frontendData:i},headers:o});if(n.error)throw h(n.error,"finalize")};waitForFinalizationToComplete=async(t,a,e)=>{let r=e?.pollingFrequency??500,i=Math.ceil((e?.pollingTimeout??3e4)/r);for(let e=0;e<i;e++){let e=await this._authHeaders(),i=await this._client.GET("/configurations/{configurationId}/{finalizationUuid}/state",{params:{path:{configurationId:t,finalizationUuid:a}},headers:e});if(i.error)throw h(i.error,"getFinalizeJobState");let o=i.data;if("completed"===o.state)return o.result[0];if("failed"===o.state)throw Error("finalization failed");if("unknown"===o.state)throw Error("finalization state is unknown");await new Promise(t=>setTimeout(t,r))}throw Error("finalization did not complete within the specified timeout")};getConfigurationRevision=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/revisions/{revisionId}",{params:{path:{configurationId:t,revisionId:a}},headers:e});if(r.error)throw h(r.error,"getConfigurationRevision");return r.data};getChatConversation=async t=>{let a=await this._authHeaders(),e=await this._client.GET("/configurations/{configurationId}/chat",{params:{path:{configurationId:t}},headers:a});if(e.error)throw h(e.error,"getChatConversation");return e.data};getSpeechToText=async(t,a)=>{let e=await this._authHeaders(),r=new FormData;r.append("voiceFile",a,"voice.wav");let i=await this._client.POST("/configurations/{configurationId}/chat/stt",{params:{path:{configurationId:t}},headers:e,body:r,bodySerializer:()=>r});if(i.error)throw h(i.error,"getSpeechToText");return i.data.text};getTextToSpeech=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.POST("/configurations/{configurationId}/chat/tts",{params:{path:{configurationId:t}},body:{content:a},headers:e,parseAs:"arrayBuffer"});if(r.error)throw h(r.error,"getTextToSpeech");return new Blob([r.data],{type:"audio/mp3"})};getAssistantChatConnection=t=>({url:new URL(`configurations/${encodeURIComponent(t)}/assistant/chat`,`${this._baseUrl}/`).toString(),headers:this._authHeaders});compactAssistantThread=async t=>{let a=await this._authHeaders(),e=await this._client.POST("/configurations/{configurationId}/assistant/chat/compact",{params:{path:{configurationId:t}},headers:{...a,"Content-Type":null}});if(e.error)throw new i(`compactAssistantThread API request failed: ${JSON.stringify(e.error)}`,e.response.status);return e.data};getAssistantEarlierThread=async(t,a,e)=>{let r=await this._authHeaders(),o=await this._client.GET("/configurations/{configurationId}/assistant/chat/threads/{threadId}",{params:{path:{configurationId:t,threadId:a},query:{limit:e}},headers:r});if(o.error)throw new i(`getAssistantEarlierThread API request failed: ${JSON.stringify(o.error)}`,o.response.status);let{messages:n}=o.data;return{threadId:a,messages:Array.isArray(n)?n:[],previousThreadId:o.response.headers.get("x-assistant-previous-thread")}};sendMessage=async(t,a,e)=>{let r=await this._authHeaders(),i=await this._client.POST("/configurations/{configurationId}/chat/message",{params:{path:{configurationId:t}},body:{content:a,context:e},headers:r,parseAs:"stream"});if(i.error)throw h(i.error,"sendMessage");let o=i.data?.pipeThrough(new TextDecoderStream).getReader();if(!o)throw Error("sendMessage API response did not contain a readable stream");let c=n();return s(o,c.writable.getWriter()),c.readable};sendToolCallResults=async(t,a,e,r)=>{let i=await this._authHeaders(),o=await this._client.POST("/configurations/{configurationId}/chat/tool-calls",{params:{path:{configurationId:t}},body:{agent:r,calls:a,results:e},headers:i,parseAs:"stream"});if(o.error)throw h(o.error,"sendToolCallResults");let c=o.data?.pipeThrough(new TextDecoderStream).getReader();if(!c)throw Error("sendMessage API response did not contain a readable stream");let u=n();return s(c,u.writable.getWriter()),u.readable};generateShareLink=async(t,a,e,r,i)=>{let o=await this._authHeaders(),n=await this._client.POST("/configurations/{configurationId}/share-link",{params:{path:{configurationId:t}},body:{revisionId:a,expiration:e,access:r,baseUrl:i},headers:o});if(n.error)throw h(n.error,"generateShareLink");return n.data};generateUploadLinks=async(t,a,e)=>{let r=await this._authHeaders(),i=await this._client.POST("/configurations/{configurationId}/{finalizationUuid}/image-upload-links",{params:{path:{configurationId:t,finalizationUuid:a}},body:{names:e},headers:r});if(i.error)throw h(i.error,"generateUploadLinks");return i.data.links};getConfigurationPublicUploadLink=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/resources/{key}/public/upload",{params:{path:{configurationId:t,key:a}},headers:e});if(r.error)throw h(r.error,"getConfigurationPublicUploadLink");return r.data};getConfigurationPrivateUploadLink=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/resources/{key}/private/upload",{params:{path:{configurationId:t,key:a}},headers:e});if(r.error)throw h(r.error,"getConfigurationPrivateUploadLink");return r.data};getConfigurationPrivateResourceLink=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.GET("/configurations/{configurationId}/resources/{key}/private",{params:{path:{configurationId:t,key:a}},headers:e});if(r.error)throw h(r.error,"getConfigurationPrivateUploadLink");return r.data};cloneConfiguration=async(t,a)=>{let e=await this._authHeaders(),r=await this._client.POST("/configurations/{configurationId}/revisions/{revisionId}/clone",{params:{path:{configurationId:t,revisionId:a}},headers:{...e,"Content-Type":null}});if(r.error)throw h(r.error,"cloneConfiguration");return r.data}}
@@ -1,3 +1,4 @@
1
+ import type { UIMessage } from '@tanstack/ai-client';
1
2
  import type { AccessLevel } from '@salsita-ai/contracts/api';
2
3
  import type { ChatStreamChunk } from '@salsita-ai/contracts/chat';
3
4
  import type { DomainEntity } from '#package/domain';
@@ -88,6 +89,17 @@ export interface AuthorizedPhoenixApiClient<FINALIZE_DATA extends Record<string,
88
89
  getChatConversation: (configurationId: string) => Promise<ChatConversation>;
89
90
  /** Where and how to reach the experimental assistant chat of the configuration. */
90
91
  getAssistantChatConnection: (configurationId: string) => AssistantChatConnection;
92
+ /**
93
+ * Continues the assistant thread of the configuration, which the server no longer lets this session
94
+ * continue, in a new thread that starts from a summary of it. Rejects with an
95
+ * {@link AssistantRequestError} when the server refuses.
96
+ */
97
+ compactAssistantThread: (configurationId: string) => Promise<AssistantThreadCompaction>;
98
+ /**
99
+ * Reads a closed assistant thread of the configuration that a later thread continues, at most
100
+ * `limit` of its newest messages. Rejects with an {@link AssistantRequestError} when the server refuses.
101
+ */
102
+ getAssistantEarlierThread: (configurationId: string, threadId: string, limit: number) => Promise<AssistantEarlierThread>;
91
103
  getSpeechToText: (configurationId: string, blob: Blob) => Promise<string>;
92
104
  getTextToSpeech: (configurationId: string, text: string) => Promise<Blob>;
93
105
  sendMessage: (configurationId: string, message: string, state?: Record<string, string>) => Promise<ReadableStream<ChatStreamChunk>>;
@@ -118,6 +130,28 @@ export interface AssistantChatConnection {
118
130
  */
119
131
  readonly headers: () => Promise<Record<string, string>>;
120
132
  }
133
+ /** An assistant thread that was closed, and the thread that continues it. */
134
+ export interface AssistantThreadCompaction {
135
+ /** The new thread, which the chat of the configuration now runs on. */
136
+ readonly threadId: string;
137
+ /** The closed thread the new one continues. */
138
+ readonly previousThreadId: string;
139
+ }
140
+ /** A closed assistant thread, as the panel paints it above the thread that continues it. */
141
+ export interface AssistantEarlierThread {
142
+ readonly threadId: string;
143
+ readonly messages: ReadonlyArray<UIMessage>;
144
+ /** The thread this one continues in turn; `null` when it is the first of the conversation. */
145
+ readonly previousThreadId: string | null;
146
+ }
147
+ /** A request about an assistant thread that the server answered with a failure. */
148
+ export declare class AssistantRequestError extends Error {
149
+ /** The HTTP status of the answer, which tells a refusal from an outage. */
150
+ readonly status: number;
151
+ constructor(message: string,
152
+ /** The HTTP status of the answer, which tells a refusal from an outage. */
153
+ status: number);
154
+ }
121
155
  export declare class InvalidDeploymentError extends Error {
122
156
  constructor();
123
157
  }
@@ -1 +1 @@
1
- export class InvalidDeploymentError extends Error{constructor(){super(),this.name="InvalidDeployment",this.message="The referenced deployment is invalid."}}export class InvalidAccessKeyError extends Error{constructor(){super("The access token is no longer valid because it expired or the server rejected it. Open the configuration from a fresh link."),this.name="InvalidAccessKey"}}export class ChunkNotFoundError extends Error{chunkKey;constructor(e){super(`Published chunk "${e}" not found`),this.chunkKey=e,this.name="ChunkNotFound"}}export class OAuthStaleConnectionError extends Error{constructor(){super("OAuth connection is stale"),this.name="OAuthStaleConnectionError"}}export class ConfigurationSchemaMismatchError extends Error{details;constructor(e){super("Preset data does not match the configuration schema registered on the server. Why: the preset/demo entity data was changed without re-registering the schema, or the schema drifted. Fix: re-register/redeploy the domain schema, or update the preset data to match the current schema."),this.details=e,this.name="ConfigurationSchemaMismatchError"}}export const isConfigurationSchemaMismatchError=e=>e instanceof ConfigurationSchemaMismatchError;
1
+ export class AssistantRequestError extends Error{status;constructor(e,r){super(e),this.status=r,this.name="AssistantRequestError"}}export class InvalidDeploymentError extends Error{constructor(){super(),this.name="InvalidDeployment",this.message="The referenced deployment is invalid."}}export class InvalidAccessKeyError extends Error{constructor(){super("The access token is no longer valid because it expired or the server rejected it. Open the configuration from a fresh link."),this.name="InvalidAccessKey"}}export class ChunkNotFoundError extends Error{chunkKey;constructor(e){super(`Published chunk "${e}" not found`),this.chunkKey=e,this.name="ChunkNotFound"}}export class OAuthStaleConnectionError extends Error{constructor(){super("OAuth connection is stale"),this.name="OAuthStaleConnectionError"}}export class ConfigurationSchemaMismatchError extends Error{details;constructor(e){super("Preset data does not match the configuration schema registered on the server. Why: the preset/demo entity data was changed without re-registering the schema, or the schema drifted. Fix: re-register/redeploy the domain schema, or update the preset data to match the current schema."),this.details=e,this.name="ConfigurationSchemaMismatchError"}}export const isConfigurationSchemaMismatchError=e=>e instanceof ConfigurationSchemaMismatchError;
@@ -9,5 +9,5 @@ export { MemoryAuthorizedPhoenixApiClient } from './memory-authorized-client.js'
9
9
  export { MemoryAuthenticatedClientPhoenixApiClient, memoryStorage } from './memory-authenticated-client.js';
10
10
  export { createUnsignedJWT } from './unsigned-jwt.js';
11
11
  export type { components as ApiTypes } from './phoenix-api.js';
12
- export type { ConfigurationPayload, ConfigurationSchema, ChatConfiguration, ChatConversation, ChatEmbedding, ChatMessageParam, ChatToolCallResult, Entity, UnauthenticatedPhoenixApiClient, AuthenticatedClientPhoenixApiClient, AuthorizedPhoenixApiClient, AssistantChatConnection, OAuthProvider, OAuthAccessTokenResult, GoogleOAuthConfig, ReleaseToProductionResult, SharePointSiteConfig, } from './contract.js';
13
- export { InvalidAccessKeyError, InvalidDeploymentError, ChunkNotFoundError, OAuthStaleConnectionError, ConfigurationSchemaMismatchError, isConfigurationSchemaMismatchError, } from './contract.js';
12
+ export type { ConfigurationPayload, ConfigurationSchema, ChatConfiguration, ChatConversation, ChatEmbedding, ChatMessageParam, ChatToolCallResult, Entity, UnauthenticatedPhoenixApiClient, AuthenticatedClientPhoenixApiClient, AuthorizedPhoenixApiClient, AssistantChatConnection, AssistantEarlierThread, AssistantThreadCompaction, OAuthProvider, OAuthAccessTokenResult, GoogleOAuthConfig, ReleaseToProductionResult, SharePointSiteConfig, } from './contract.js';
13
+ export { AssistantRequestError, InvalidAccessKeyError, InvalidDeploymentError, ChunkNotFoundError, OAuthStaleConnectionError, ConfigurationSchemaMismatchError, isConfigurationSchemaMismatchError, } from './contract.js';
@@ -1 +1 @@
1
- export{createApiBaseClient}from"./base-client.js";export{AuthorizedClient}from"./authorized-client.js";export{AuthenticatedClient}from"./authenticated-client.js";export{UnauthenticatedClient}from"./unauthenticated-client.js";export{LocalStorageAuthorizedPhoenixApiClient}from"./local-authorized-client.js";export{LocalStorageAuthenticatedClientPhoenixApiClient}from"./local-authenticated-client.js";export{LocalStorageUnauthenticatedPhoenixApiClient}from"./local-unauthenticated-client.js";export{MemoryAuthorizedPhoenixApiClient}from"./memory-authorized-client.js";export{MemoryAuthenticatedClientPhoenixApiClient,memoryStorage}from"./memory-authenticated-client.js";export{createUnsignedJWT}from"./unsigned-jwt.js";export{InvalidAccessKeyError,InvalidDeploymentError,ChunkNotFoundError,OAuthStaleConnectionError,ConfigurationSchemaMismatchError,isConfigurationSchemaMismatchError}from"./contract.js";
1
+ export{createApiBaseClient}from"./base-client.js";export{AuthorizedClient}from"./authorized-client.js";export{AuthenticatedClient}from"./authenticated-client.js";export{UnauthenticatedClient}from"./unauthenticated-client.js";export{LocalStorageAuthorizedPhoenixApiClient}from"./local-authorized-client.js";export{LocalStorageAuthenticatedClientPhoenixApiClient}from"./local-authenticated-client.js";export{LocalStorageUnauthenticatedPhoenixApiClient}from"./local-unauthenticated-client.js";export{MemoryAuthorizedPhoenixApiClient}from"./memory-authorized-client.js";export{MemoryAuthenticatedClientPhoenixApiClient,memoryStorage}from"./memory-authenticated-client.js";export{createUnsignedJWT}from"./unsigned-jwt.js";export{AssistantRequestError,InvalidAccessKeyError,InvalidDeploymentError,ChunkNotFoundError,OAuthStaleConnectionError,ConfigurationSchemaMismatchError,isConfigurationSchemaMismatchError}from"./contract.js";
@@ -1,5 +1,5 @@
1
1
  import type { ChatMessageContentChunk, ChatToolCalls } from '@salsita-ai/contracts/chat';
2
- import type { AssistantChatConnection, AuthorizedPhoenixApiClient, ConfigurationPayload, ConfigurationSchema } from './contract.js';
2
+ import type { AssistantChatConnection, AssistantEarlierThread, AssistantThreadCompaction, AuthorizedPhoenixApiClient, ConfigurationPayload, ConfigurationSchema } from './contract.js';
3
3
  import { LocalStorageAuthenticatedClientPhoenixApiClient } from './local-authenticated-client.js';
4
4
  /**
5
5
  * Local storage implementation for local dev, it does not check for schema changes, so you may need to create new configuration if the schema changes and
@@ -15,6 +15,8 @@ export declare class LocalStorageAuthorizedPhoenixApiClient<FINALIZE_DATA extend
15
15
  waitForFinalizationToComplete: () => Promise<FINALIZE_RESULT>;
16
16
  getConfigurationRevision: (configurationId: string, revisionId: string) => Promise<ConfigurationSchema>;
17
17
  getAssistantChatConnection: () => AssistantChatConnection;
18
+ compactAssistantThread: () => Promise<AssistantThreadCompaction>;
19
+ getAssistantEarlierThread: () => Promise<AssistantEarlierThread>;
18
20
  getChatConversation: (configurationId: string) => Promise<readonly {
19
21
  readonly augmentation?: import("./phoenix-api.js").components['schemas']['ChatMessageAugmentation'];
20
22
  readonly content?: string;
@@ -1 +1 @@
1
- import*as t from"uuid";import{ChunkType as e}from"@salsita-ai/contracts/chat";import{LocalStorageAuthenticatedClientPhoenixApiClient as o}from"./local-authenticated-client.js";let r=(t,o)=>{let r={role:"assistant",content:["I see","Yes","Definitely"][Math.round(2*Math.random())]};return localStorage.setItem(`${o}-chat`,JSON.stringify([...t,r])),Promise.resolve(new ReadableStream({start(t){t.enqueue({type:e.content,content:r.content??""}),t.close()}}))};export class LocalStorageAuthorizedPhoenixApiClient extends o{getConfigurationData=t=>{let e=JSON.parse(localStorage.getItem(t)??"[]");if(!e||0===e.length)throw Error("Configuration not found!");return e};getConfiguration=t=>{let e=this.getConfigurationData(t);return Promise.resolve(e[e.length-1])};updateConfiguration=(e,o)=>{let r=this.getConfigurationData(e),n=t.v4(),i={...o,configurationId:e,revisionId:n,modelVersion:this._modelVersion};return localStorage.setItem(e,JSON.stringify([...r,i])),Promise.resolve({revisionId:n})};finalize=()=>{throw Error("Not implemented!")};waitForFinalizationToComplete=()=>{throw Error("Not implemented!")};getConfigurationRevision=(t,e)=>{let o=this.getConfigurationData(t).find(t=>t.revisionId===e);if(!o)throw Error("Revision not found!");return Promise.resolve(o)};getAssistantChatConnection=()=>{throw Error("The assistant chat needs the Phoenix server. Run the configurator against a server deployment.")};getChatConversation=async t=>JSON.parse(localStorage.getItem(`${t}-chat`)??"[]");sendMessage=async(t,e)=>{let o=await this.getChatConversation(t);return localStorage.setItem(`${t}-chat`,JSON.stringify([...o,e])),r(o,t)};getSpeechToText=async()=>{throw Error("Not implemented!")};getTextToSpeech=async()=>{throw Error("Not implemented!")};sendToolCallResults=async t=>r(await this.getChatConversation(t),t);generateShareLink=async()=>({link:"https://yourcompany.com/configurator/link-will-not-work-it-is-dummy-link"});generateUploadLinks=async()=>{throw Error("Not implemented!")};getConfigurationPublicUploadLink=async()=>{throw Error("Not implemented!")};getConfigurationPrivateUploadLink=async()=>{throw Error("Not implemented!")};getConfigurationPrivateResourceLink=async()=>{throw Error("Not implemented!")};cloneConfiguration=async(t,e)=>{let o=localStorage.getItem(t);if(!o)throw Error("Configuration not found");let r=JSON.parse(o).find(t=>t.revisionId===e);if(!r)throw Error("Revision not found");return this.createConfiguration(r)}}
1
+ import*as t from"uuid";import{ChunkType as e}from"@salsita-ai/contracts/chat";import{LocalStorageAuthenticatedClientPhoenixApiClient as o}from"./local-authenticated-client.js";let r=(t,o)=>{let r={role:"assistant",content:["I see","Yes","Definitely"][Math.round(2*Math.random())]};return localStorage.setItem(`${o}-chat`,JSON.stringify([...t,r])),Promise.resolve(new ReadableStream({start(t){t.enqueue({type:e.content,content:r.content??""}),t.close()}}))};export class LocalStorageAuthorizedPhoenixApiClient extends o{getConfigurationData=t=>{let e=JSON.parse(localStorage.getItem(t)??"[]");if(!e||0===e.length)throw Error("Configuration not found!");return e};getConfiguration=t=>{let e=this.getConfigurationData(t);return Promise.resolve(e[e.length-1])};updateConfiguration=(e,o)=>{let r=this.getConfigurationData(e),n=t.v4(),a={...o,configurationId:e,revisionId:n,modelVersion:this._modelVersion};return localStorage.setItem(e,JSON.stringify([...r,a])),Promise.resolve({revisionId:n})};finalize=()=>{throw Error("Not implemented!")};waitForFinalizationToComplete=()=>{throw Error("Not implemented!")};getConfigurationRevision=(t,e)=>{let o=this.getConfigurationData(t).find(t=>t.revisionId===e);if(!o)throw Error("Revision not found!");return Promise.resolve(o)};getAssistantChatConnection=()=>{throw Error("The assistant chat needs the Phoenix server. Run the configurator against a server deployment.")};compactAssistantThread=async()=>{throw Error("The assistant chat needs the Phoenix server. Run the configurator against a server deployment.")};getAssistantEarlierThread=async()=>{throw Error("The assistant chat needs the Phoenix server. Run the configurator against a server deployment.")};getChatConversation=async t=>JSON.parse(localStorage.getItem(`${t}-chat`)??"[]");sendMessage=async(t,e)=>{let o=await this.getChatConversation(t);return localStorage.setItem(`${t}-chat`,JSON.stringify([...o,e])),r(o,t)};getSpeechToText=async()=>{throw Error("Not implemented!")};getTextToSpeech=async()=>{throw Error("Not implemented!")};sendToolCallResults=async t=>r(await this.getChatConversation(t),t);generateShareLink=async()=>({link:"https://yourcompany.com/configurator/link-will-not-work-it-is-dummy-link"});generateUploadLinks=async()=>{throw Error("Not implemented!")};getConfigurationPublicUploadLink=async()=>{throw Error("Not implemented!")};getConfigurationPrivateUploadLink=async()=>{throw Error("Not implemented!")};getConfigurationPrivateResourceLink=async()=>{throw Error("Not implemented!")};cloneConfiguration=async(t,e)=>{let o=localStorage.getItem(t);if(!o)throw Error("Configuration not found");let r=JSON.parse(o).find(t=>t.revisionId===e);if(!r)throw Error("Revision not found");return this.createConfiguration(r)}}
@@ -1,4 +1,4 @@
1
- import type { AssistantChatConnection, AuthorizedPhoenixApiClient, ConfigurationPayload, ConfigurationSchema } from './contract.js';
1
+ import type { AssistantChatConnection, AssistantEarlierThread, AssistantThreadCompaction, AuthorizedPhoenixApiClient, ConfigurationPayload, ConfigurationSchema } from './contract.js';
2
2
  import { MemoryAuthenticatedClientPhoenixApiClient } from './memory-authenticated-client.js';
3
3
  /**
4
4
  * Memory implementation for local dev, it does not check for schema changes, so you may need to create new configuration if the schema changes and
@@ -15,6 +15,8 @@ export declare class MemoryAuthorizedPhoenixApiClient<FINALIZE_DATA extends Reco
15
15
  getConfigurationRevision: (configurationId: string, revisionId: string) => Promise<ConfigurationSchema>;
16
16
  getChatConversation: () => Promise<never>;
17
17
  getAssistantChatConnection: () => AssistantChatConnection;
18
+ compactAssistantThread: () => Promise<AssistantThreadCompaction>;
19
+ getAssistantEarlierThread: () => Promise<AssistantEarlierThread>;
18
20
  sendMessage: () => Promise<never>;
19
21
  getSpeechToText: () => Promise<never>;
20
22
  getTextToSpeech: () => Promise<never>;