@salsita-ai/sdk 0.50.0-develop.68d6fe1d1b → 0.50.0-develop.71209819cd

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 (806) hide show
  1. package/README.md +1 -1
  2. package/dist/admin/create-admin-pages-from-spec.d.ts +1 -1
  3. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  4. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  5. package/dist/application-spec/generate-application/code/common/project-module-list.d.ts +8 -0
  6. package/dist/application-spec/generate-application/code/common/project-module-list.js +3 -0
  7. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  8. package/dist/application-spec/generate-application/code/templates/admin-domain-code.d.ts +1 -2
  9. package/dist/application-spec/generate-application/code/templates/admin-domain-code.js +6 -14
  10. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.d.ts +1 -2
  11. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.js +4 -4
  12. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.d.ts +1 -2
  13. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.js +7 -16
  14. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.d.ts +1 -2
  15. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.js +7 -9
  16. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-assistant.d.ts +2 -2
  17. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-assistant.js +1 -1
  18. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +36 -36
  19. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +1 -1
  20. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  21. package/dist/application-spec/generate-application/code/templates/domain-spec.js +4 -4
  22. package/dist/application-spec/generate-application/code/templates/domain.js +3 -3
  23. package/dist/application-spec/generate-application/code/templates/env-example.js +4 -0
  24. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +93 -41
  25. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +1 -1
  26. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  27. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +18 -1
  28. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +17 -3
  29. package/dist/application-spec/generate-application/code/templates/webhook-builders.js +9 -4
  30. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -2
  31. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +4 -3
  32. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.js +1 -1
  33. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  34. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.d.ts +3 -8
  35. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.js +1 -1
  36. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +9 -43
  37. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  38. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-server-settings.d.ts +2 -2
  39. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.d.ts +5 -21
  40. package/dist/client/authorized-client.d.ts +3 -1
  41. package/dist/client/authorized-client.js +1 -1
  42. package/dist/client/contract.d.ts +34 -0
  43. package/dist/client/contract.js +1 -1
  44. package/dist/client/index.d.ts +2 -2
  45. package/dist/client/index.js +1 -1
  46. package/dist/client/local-authorized-client.d.ts +3 -1
  47. package/dist/client/local-authorized-client.js +1 -1
  48. package/dist/client/memory-authorized-client.d.ts +3 -1
  49. package/dist/client/memory-authorized-client.js +1 -1
  50. package/dist/client/phoenix-api.d.ts +271 -30
  51. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +104 -5
  52. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  53. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  54. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  55. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +1 -1
  56. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  57. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +2 -1
  58. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  59. package/dist/configurator/ui/assistant/AssistantThread.d.ts +6 -2
  60. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  61. package/dist/configurator/ui/assistant/thread-items.d.ts +13 -2
  62. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  63. package/dist/configurator/ui/assistant/tool-chip.d.ts +8 -1
  64. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  65. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +84 -98
  66. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +18 -12
  67. package/dist/docs/index.json +1 -1
  68. package/dist/docs/layouts/custom-price.mdx +14 -16
  69. package/dist/docs/layouts/sidebar/tabs.mdx +24 -21
  70. package/dist/docs/other-features/domain-actions.mdx +1 -1
  71. package/dist/docs/other-features/side-effects.mdx +42 -34
  72. package/dist/docs/other-features/transformers.mdx +1 -1
  73. package/dist/docs/phoenix/admin.mdx +9 -24
  74. package/dist/docs/phoenix/deployments.mdx +1 -1
  75. package/dist/docs/phoenix/expression-context.mdx +11 -3
  76. package/dist/docs/phoenix/localization.mdx +3 -22
  77. package/dist/docs/phoenix/phoenix-cli.mdx +25 -22
  78. package/dist/docs/phoenix/project-structure.mdx +6 -0
  79. package/dist/docs/phoenix/sdk-builder-workflow.mdx +10 -9
  80. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +15 -13
  81. package/dist/docs/relations/hierarchy.mdx +13 -2
  82. package/dist/docs/ux-guidelines/choosing-a-control.mdx +11 -0
  83. package/dist/domain/admin-domain/__generated/enhanced-model.d.ts +1 -2
  84. package/dist/domain/admin-domain/__generated/model/versions/v1.d.ts +1 -1
  85. package/dist/domain/admin-domain/__generated/model/versions/v2.d.ts +1 -1
  86. package/dist/domain/admin-domain/__generated/model/versions/v3.d.ts +1 -1
  87. package/dist/domain/admin-domain/__generated/model/versions/v4.d.ts +1 -1
  88. package/dist/domain/admin-domain/__generated/model/versions/v5.d.ts +1 -1
  89. package/dist/domain/admin-domain/__generated/model/versions/v6.d.ts +2 -2
  90. package/dist/domain/admin-domain/__generated/model/versions/v6.js +1 -1
  91. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +10 -13
  92. package/dist/domain/admin-domain/implementation/common-admin-migrations.d.ts +1 -1
  93. package/dist/domain/admin-domain/index.d.ts +9 -5
  94. package/dist/domain/admin-domain/index.js +1 -1
  95. package/dist/domain/application/admin-page-factories.d.ts +1 -2
  96. package/dist/domain/application/application-config.d.ts +24 -94
  97. package/dist/domain/application/assistant/assistant-manifest.d.ts +63 -0
  98. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +95 -0
  99. package/dist/domain/application/assistant/assistant-value-type.d.ts +9 -0
  100. package/dist/domain/application/assistant/assistant-value-type.js +1 -0
  101. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +4 -0
  102. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -0
  103. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  104. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -0
  105. package/dist/domain/application/assistant/index.d.ts +4 -0
  106. package/dist/domain/application/assistant/index.js +1 -0
  107. package/dist/domain/application/assistant-field-options.d.ts +2 -3
  108. package/dist/domain/application/assistant-mutations.d.ts +3 -5
  109. package/dist/domain/application/assistant-mutations.js +1 -1
  110. package/dist/domain/application/assistant-recipe-groups.d.ts +2 -6
  111. package/dist/domain/application/configurator-builder.d.ts +33 -18
  112. package/dist/domain/application/configurator-builder.js +1 -1
  113. package/dist/domain/application/element-registration.d.ts +5 -0
  114. package/dist/domain/application/element-registration.js +1 -1
  115. package/dist/domain/application/handler-registration.d.ts +5 -0
  116. package/dist/domain/application/handler-registration.js +1 -1
  117. package/dist/domain/application/index.d.ts +6 -5
  118. package/dist/domain/application/index.js +1 -1
  119. package/dist/domain/application/published-data/build-legend-data.d.ts +1 -1
  120. package/dist/domain/application/published-data/create-finalize-admin-domain.d.ts +1 -2
  121. package/dist/domain/application/published-data/format-field-type.d.ts +1 -1
  122. package/dist/domain/application/published-data/map-data-to-sheet.d.ts +1 -1
  123. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +2 -2
  124. package/dist/domain/application/published-data/map-published-data.d.ts +1 -2
  125. package/dist/domain/application/published-data/validate-sheet-data.d.ts +1 -1
  126. package/dist/domain/application/resolve-imported-transformers.d.ts +12 -2
  127. package/dist/domain/application/resolve-imported-transformers.js +1 -1
  128. package/dist/domain/available-system-components.js +1 -1
  129. package/dist/domain/core/action/action-factory.d.ts +11 -0
  130. package/dist/domain/core/{action.d.ts → action/action.d.ts} +22 -18
  131. package/dist/domain/core/action/index.d.ts +2 -0
  132. package/dist/domain/core/action/index.js +1 -0
  133. package/dist/domain/{components → core/component}/component-reader-types.d.ts +1 -2
  134. package/dist/domain/{components → core/component}/debug-state-component.d.ts +1 -1
  135. package/dist/domain/core/component/debug-state-component.js +1 -0
  136. package/dist/domain/{components → core/component}/domain-component-optic.d.ts +36 -39
  137. package/dist/domain/{components → core/component}/domain-component-optic.js +2 -2
  138. package/dist/domain/{components → core/component}/drag-state-component.d.ts +1 -1
  139. package/dist/domain/core/component/drag-state-component.js +1 -0
  140. package/dist/domain/{components → core/component}/export-state-component.d.ts +1 -1
  141. package/dist/domain/core/component/export-state-component.js +1 -0
  142. package/dist/domain/{components → core/component}/fullscreen-state-component.d.ts +1 -1
  143. package/dist/domain/core/component/fullscreen-state-component.js +1 -0
  144. package/dist/domain/{components → core/component}/group-components-by-entity-id-and-name.d.ts +1 -2
  145. package/dist/domain/core/component/group-components-by-entity-id-and-name.js +1 -0
  146. package/dist/domain/{components → core/component}/hover-state-component.d.ts +1 -1
  147. package/dist/domain/core/component/hover-state-component.js +1 -0
  148. package/dist/domain/core/component/index.d.ts +18 -0
  149. package/dist/domain/core/component/index.js +1 -0
  150. package/dist/domain/{components → core/component}/legacy-filter.d.ts +2 -2
  151. package/dist/domain/{components → core/component}/navigation-state-component.d.ts +1 -1
  152. package/dist/domain/core/component/navigation-state-component.js +1 -0
  153. package/dist/domain/{components → core/component}/selection-state-component.d.ts +1 -1
  154. package/dist/domain/core/component/selection-state-component.js +1 -0
  155. package/dist/domain/{components → core/component}/system-component-builder.d.ts +1 -2
  156. package/dist/domain/core/component/system-component-builder.js +1 -0
  157. package/dist/domain/{components → core/component}/system-component-filter.d.ts +19 -19
  158. package/dist/domain/core/component/system-virtual-entity.js +1 -0
  159. package/dist/domain/{components → core/component}/tool-state-component.d.ts +1 -1
  160. package/dist/domain/core/component/tool-state-component.js +1 -0
  161. package/dist/domain/{components → core/component}/updates.d.ts +1 -2
  162. package/dist/domain/{components → core/component}/view-state-component.d.ts +1 -1
  163. package/dist/domain/core/component/view-state-component.js +1 -0
  164. package/dist/domain/{components → core/component}/viewport-state-component.d.ts +1 -1
  165. package/dist/domain/core/component/viewport-state-component.js +1 -0
  166. package/dist/domain/core/data-schema/data-cell-value.d.ts +4 -0
  167. package/dist/domain/core/data-schema/data-schema-array-field.d.ts +5 -0
  168. package/dist/domain/core/data-schema/data-schema-field-object.d.ts +4 -0
  169. package/dist/domain/core/data-schema/data-schema-field.d.ts +2 -0
  170. package/dist/domain/core/data-schema/data-schema-field.js +1 -0
  171. package/dist/domain/core/data-schema/data-schema-localized-field.d.ts +4 -0
  172. package/dist/domain/core/data-schema/data-schema-localized-field.js +1 -0
  173. package/dist/domain/core/data-schema/data-schema-primitive-field.d.ts +5 -0
  174. package/dist/domain/core/data-schema/data-schema-primitive-field.js +1 -0
  175. package/dist/domain/core/data-schema/data-schema.d.ts +2 -0
  176. package/dist/domain/core/data-schema/data-schema.js +1 -0
  177. package/dist/domain/core/data-schema/index.d.ts +7 -0
  178. package/dist/domain/core/data-schema/index.js +1 -0
  179. package/dist/domain/core/decoder/create-decoder.d.ts +6 -0
  180. package/dist/domain/core/decoder/create-decoder.js +1 -0
  181. package/dist/domain/core/decoder/decoder.d.ts +6 -0
  182. package/dist/domain/core/decoder/decoder.js +1 -0
  183. package/dist/domain/core/decoder/index.d.ts +2 -0
  184. package/dist/domain/core/decoder/index.js +1 -0
  185. package/dist/domain/core/domain-factory.d.ts +4 -5
  186. package/dist/domain/core/domain-factory.js +1 -1
  187. package/dist/domain/core/domain.d.ts +4 -5
  188. package/dist/domain/core/domain.js +1 -1
  189. package/dist/domain/core/emission/index.d.ts +8 -0
  190. package/dist/domain/core/emission/index.js +1 -0
  191. package/dist/domain/core/emission/reset-state-emission.d.ts +12 -0
  192. package/dist/domain/core/emission/reset-state-emission.js +1 -0
  193. package/dist/domain/core/emission/state-emission.d.ts +4 -0
  194. package/dist/domain/core/emission/state-emission.js +1 -0
  195. package/dist/domain/core/emission/state-update-emission.d.ts +14 -0
  196. package/dist/domain/core/emission/state-update-emission.js +1 -0
  197. package/dist/domain/core/emission/state-validation-result.d.ts +18 -0
  198. package/dist/domain/core/emission/state-validation-result.js +1 -0
  199. package/dist/domain/core/emission/transformation-log.d.ts +2 -0
  200. package/dist/domain/core/emission/transformation-log.js +1 -0
  201. package/dist/domain/core/emission/transformer-log-entry.d.ts +6 -0
  202. package/dist/domain/core/emission/transformer-log-entry.js +1 -0
  203. package/dist/domain/core/emission/transformer-log.d.ts +11 -0
  204. package/dist/domain/core/emission/transformer-log.js +1 -0
  205. package/dist/domain/core/emission/transformer-phase.d.ts +1 -0
  206. package/dist/domain/core/emission/transformer-phase.js +1 -0
  207. package/dist/domain/core/expression/aliased-expressions.d.ts +10 -0
  208. package/dist/domain/core/expression/aliased-expressions.js +1 -0
  209. package/dist/domain/{expressions → core/expression}/constant-expressions.d.ts +2 -3
  210. package/dist/domain/core/expression/constant-expressions.js +1 -0
  211. package/dist/domain/{expressions → core/expression}/custom-expression.d.ts +9 -10
  212. package/dist/domain/core/expression/custom-expression.js +1 -0
  213. package/dist/domain/core/{expression.d.ts → expression/expression.d.ts} +17 -20
  214. package/dist/domain/core/expression/expression.js +1 -0
  215. package/dist/domain/core/expression/index.d.ts +4 -0
  216. package/dist/domain/core/expression/index.js +1 -0
  217. package/dist/domain/core/index.d.ts +13 -17
  218. package/dist/domain/core/index.js +1 -1
  219. package/dist/domain/{invariants → core/invariant}/builtin-invariant.d.ts +2 -2
  220. package/dist/domain/{invariants → core/invariant}/custom-invariants.d.ts +7 -8
  221. package/dist/domain/core/invariant/custom-invariants.js +1 -0
  222. package/dist/domain/core/invariant/index.d.ts +5 -0
  223. package/dist/domain/core/invariant/index.js +1 -0
  224. package/dist/domain/core/invariant/invariants.d.ts +13 -0
  225. package/dist/domain/core/invariant/invariants.js +1 -0
  226. package/dist/domain/core/invariant/violation-component.js +1 -0
  227. package/dist/domain/{invariants → core/invariant}/violation.d.ts +2 -2
  228. package/dist/domain/core/{component.d.ts → model/component.d.ts} +1 -1
  229. package/dist/domain/core/model/index.d.ts +6 -0
  230. package/dist/domain/core/model/index.js +1 -0
  231. package/dist/domain/core/{reflection.d.ts → model/reflection.d.ts} +1 -1
  232. package/dist/domain/core/model/reflection.js +1 -0
  233. package/dist/domain/core/recipe/index.d.ts +1 -0
  234. package/dist/domain/core/recipe/index.js +1 -0
  235. package/dist/domain/{domain-context/recipe-system → core/recipe}/recipes.d.ts +1 -3
  236. package/dist/domain/core/recipe/recipes.js +1 -0
  237. package/dist/domain/{relations → core/relation}/all-of-type-relation.d.ts +3 -4
  238. package/dist/domain/core/relation/all-of-type-relation.js +1 -0
  239. package/dist/domain/{relations → core/relation}/component-factories.d.ts +1 -2
  240. package/dist/domain/core/relation/component-factories.js +1 -0
  241. package/dist/domain/{relations → core/relation}/composed-of.d.ts +1 -1
  242. package/dist/domain/core/relation/composed-of.js +1 -0
  243. package/dist/domain/{relations → core/relation}/direct-relation.d.ts +2 -3
  244. package/dist/domain/core/relation/index.d.ts +9 -0
  245. package/dist/domain/core/relation/index.js +1 -0
  246. package/dist/domain/{relations → core/relation}/indirect-relation.d.ts +3 -4
  247. package/dist/domain/core/relation/indirect-relation.js +1 -0
  248. package/dist/domain/{relations → core/relation}/reference-component.d.ts +4 -5
  249. package/dist/domain/core/relation/reference-component.js +1 -0
  250. package/dist/domain/{relations → core/relation}/reference-field.d.ts +1 -1
  251. package/dist/domain/core/relation/reference-field.js +1 -0
  252. package/dist/domain/{relations → core/relation}/relation-factory.d.ts +2 -3
  253. package/dist/domain/{relations → core/relation}/relation-implementation.d.ts +3 -4
  254. package/dist/domain/core/relation/relation-implementation.js +1 -0
  255. package/dist/domain/core/schema/enhanced-json-schema.js +1 -0
  256. package/dist/domain/core/schema/extended-schema-validator.js +1 -0
  257. package/dist/domain/core/schema/index.d.ts +3 -0
  258. package/dist/domain/core/schema/index.js +1 -0
  259. package/dist/domain/core/schema/schema-validator.js +1 -0
  260. package/dist/domain/core/state/id-sequence.d.ts +15 -0
  261. package/dist/domain/core/state/id-sequence.js +1 -0
  262. package/dist/domain/core/state/index.d.ts +3 -0
  263. package/dist/domain/core/state/index.js +1 -0
  264. package/dist/domain/core/{migrations.d.ts → state/migrations.d.ts} +1 -2
  265. package/dist/domain/core/{state.d.ts → state/state.d.ts} +1 -2
  266. package/dist/domain/domain-builder.d.ts +11 -11
  267. package/dist/domain/domain-builder.js +1 -1
  268. package/dist/domain/domain-context/action-system/action-system.d.ts +2 -4
  269. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  270. package/dist/domain/domain-context/create-transformer.d.ts +1 -1
  271. package/dist/domain/domain-context/dimension-system/dimension-state.js +1 -1
  272. package/dist/domain/domain-context/dimension-system/dimension-system.d.ts +1 -2
  273. package/dist/domain/domain-context/domain-context-systems.d.ts +1 -3
  274. package/dist/domain/domain-context/index.d.ts +2 -3
  275. package/dist/domain/domain-context/index.js +1 -1
  276. package/dist/domain/domain-context/navigation-system/navigation-system.d.ts +3 -5
  277. package/dist/domain/domain-context/navigation-system/navigation-system.js +1 -1
  278. package/dist/domain/domain-context/navigation-system/navigation-updates.d.ts +1 -12
  279. package/dist/domain/domain-context/navigation-system/navigation-updates.js +1 -1
  280. package/dist/domain/domain-context/navigation-system/selection-transformers.d.ts +1 -1
  281. package/dist/domain/domain-context/navigation-system/selection-transformers.js +1 -1
  282. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.d.ts +1 -3
  283. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.js +1 -1
  284. package/dist/domain/domain-context/relation-transformers/cascade-deletes.d.ts +1 -1
  285. package/dist/domain/domain-context/relation-transformers/cascade-deletes.js +1 -1
  286. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.d.ts +1 -1
  287. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.js +1 -1
  288. package/dist/domain/domain-context/relation-transformers/create-entity-refs.d.ts +1 -1
  289. package/dist/domain/domain-context/relation-transformers/create-entity-refs.js +2 -2
  290. package/dist/domain/domain-context/relation-transformers/replace-refs.d.ts +1 -1
  291. package/dist/domain/domain-context/relation-transformers/replace-refs.js +1 -1
  292. package/dist/domain/domain-context/store-system/apply-updates.d.ts +1 -3
  293. package/dist/domain/domain-context/store-system/apply-updates.js +1 -1
  294. package/dist/domain/domain-context/store-system/next-domain-entity-id.d.ts +1 -13
  295. package/dist/domain/domain-context/store-system/next-domain-entity-id.js +1 -1
  296. package/dist/domain/domain-context/store-system/reconcile-projected-entities.d.ts +1 -2
  297. package/dist/domain/domain-context/store-system/reconcile-projected-entities.js +1 -1
  298. package/dist/domain/domain-context/store-system/store-system.d.ts +1 -36
  299. package/dist/domain/domain-context/store-system/store-system.js +2 -2
  300. package/dist/domain/domain-context/store-system/system-state.d.ts +1 -3
  301. package/dist/domain/domain-context/store-system/system-state.js +1 -1
  302. package/dist/domain/domain-context/transformers/actions-builder.d.ts +1 -2
  303. package/dist/domain/domain-context/transformers/actions-builder.js +1 -1
  304. package/dist/domain/domain-context/transformers/auto-snap-transformer.d.ts +1 -3
  305. package/dist/domain/domain-context/transformers/chain-builder.d.ts +2 -2
  306. package/dist/domain/domain-context/transformers/context.d.ts +1 -6
  307. package/dist/domain/domain-context/transformers/entity-builder.d.ts +1 -5
  308. package/dist/domain/domain-context/transformers/entity-builder.js +1 -1
  309. package/dist/domain/domain-context/transformers/then-builder.d.ts +1 -2
  310. package/dist/domain/domain-context/transformers/then-builder.js +1 -1
  311. package/dist/domain/domain-context/transformers/when-builder.d.ts +1 -6
  312. package/dist/domain/domain-context/transformers/when-builder.js +1 -1
  313. package/dist/domain/domain-context/undo-system.d.ts +1 -2
  314. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +11 -0
  315. package/dist/domain/domain-runtime/domain-context/action-context.js +1 -0
  316. package/dist/domain/domain-runtime/domain-context/component-reader.d.ts +1 -4
  317. package/dist/domain/domain-runtime/domain-context/component-reader.js +1 -1
  318. package/dist/domain/domain-runtime/domain-context/expression-context.d.ts +8 -0
  319. package/dist/domain/domain-runtime/domain-context/expression-context.js +1 -0
  320. package/dist/domain/domain-runtime/domain-context/index.d.ts +3 -0
  321. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.d.ts +18 -0
  322. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.js +1 -0
  323. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +3 -4
  324. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  325. package/dist/domain/domain-runtime/domain-runtime.d.ts +12 -12
  326. package/dist/domain/domain-runtime/spec/index.d.ts +8 -0
  327. package/dist/domain/domain-runtime/spec/index.js +1 -1
  328. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  329. package/dist/domain/{invariants/invariants.d.ts → domain-runtime/spec/invariant-builder.d.ts} +7 -14
  330. package/dist/domain/domain-runtime/spec/invariant-builder.js +1 -0
  331. package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.d.ts +1 -2
  332. package/dist/domain/{actions → domain-runtime/spec}/prepare-action-implementations.d.ts +1 -1
  333. package/dist/domain/domain-runtime/spec/prepare-action-implementations.js +5 -0
  334. package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.d.ts +1 -1
  335. package/dist/domain/domain-runtime/spec/resolve-action-modules.d.ts +4 -0
  336. package/dist/domain/domain-runtime/spec/resolve-action-modules.js +1 -0
  337. package/dist/domain/domain-runtime/spec/resolve-component-optic-modules.d.ts +4 -0
  338. package/dist/domain/domain-runtime/spec/resolve-component-optic-modules.js +1 -0
  339. package/dist/domain/domain-runtime/spec/resolve-expression-modules.d.ts +15 -0
  340. package/dist/domain/domain-runtime/spec/resolve-expression-modules.js +1 -0
  341. package/dist/domain/domain-runtime/spec/resolve-invariant-modules.d.ts +6 -0
  342. package/dist/domain/domain-runtime/spec/resolve-invariant-modules.js +1 -0
  343. package/dist/domain/domain-runtime/spec/selectors.d.ts +2 -2
  344. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  345. package/dist/domain/domain-runtime/spec/types.d.ts +4 -5
  346. package/dist/domain/{system-components → extensions}/angle-indicator.d.ts +1 -1
  347. package/dist/domain/extensions/angle-indicator.js +1 -0
  348. package/dist/domain/extensions/attribute-switch.js +1 -0
  349. package/dist/domain/{system-components → extensions}/autorotate-camera-component.d.ts +1 -1
  350. package/dist/domain/extensions/autorotate-camera-component.js +1 -0
  351. package/dist/domain/{system-components → extensions}/basic-sidebar-footer.d.ts +1 -1
  352. package/dist/domain/extensions/basic-sidebar-footer.js +1 -0
  353. package/dist/domain/extensions/camera-based-hidden-entity-object.js +1 -0
  354. package/dist/domain/extensions/camera-based-hidden-entity.js +1 -0
  355. package/dist/domain/{system-components → extensions}/canvas-config.d.ts +1 -1
  356. package/dist/domain/extensions/canvas-config.js +1 -0
  357. package/dist/domain/extensions/canvas-custom-environment.js +1 -0
  358. package/dist/domain/{system-components → extensions}/canvas-padding.d.ts +1 -1
  359. package/dist/domain/extensions/canvas-padding.js +1 -0
  360. package/dist/domain/{system-components → extensions}/canvas-preset-environment.d.ts +1 -1
  361. package/dist/domain/extensions/canvas-preset-environment.js +1 -0
  362. package/dist/domain/{system-components → extensions}/child-entity-recipe-hierarchy.d.ts +2 -2
  363. package/dist/domain/extensions/child-entity-recipe-hierarchy.js +1 -0
  364. package/dist/domain/extensions/client-side-image.js +1 -0
  365. package/dist/domain/extensions/color-value.js +1 -0
  366. package/dist/domain/{system-components → extensions}/common/angle-indicator-schema.d.ts +1 -1
  367. package/dist/domain/extensions/common/angle-indicator-schema.js +1 -0
  368. package/dist/domain/{system-components → extensions}/common/dimension-indicator-schema.d.ts +1 -1
  369. package/dist/domain/extensions/common/dimension-indicator-schema.js +1 -0
  370. package/dist/domain/extensions/common/index.d.ts +4 -0
  371. package/dist/domain/extensions/common/index.js +1 -0
  372. package/dist/domain/{system-components → extensions}/custom-header.d.ts +2 -2
  373. package/dist/domain/{system-components → extensions}/custom-header.js +1 -1
  374. package/dist/domain/extensions/custom-price-footer.js +1 -0
  375. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.d.ts +2 -2
  376. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.js +1 -1
  377. package/dist/domain/{system-components → extensions}/dimension-indicator.d.ts +1 -1
  378. package/dist/domain/extensions/dimension-indicator.js +1 -0
  379. package/dist/domain/{system-components → extensions}/editable-angle-indicator.d.ts +3 -2
  380. package/dist/domain/extensions/editable-angle-indicator.js +1 -0
  381. package/dist/domain/{system-components → extensions}/editable-distance-dimension-indicator.d.ts +3 -2
  382. package/dist/domain/extensions/editable-distance-dimension-indicator.js +1 -0
  383. package/dist/domain/{system-components → extensions}/editable-offset-indicator.d.ts +3 -2
  384. package/dist/domain/extensions/editable-offset-indicator.js +1 -0
  385. package/dist/domain/{system-components → extensions}/editable-size-indicator.d.ts +3 -2
  386. package/dist/domain/extensions/editable-size-indicator.js +1 -0
  387. package/dist/domain/{system-components → extensions}/entity-header.d.ts +1 -1
  388. package/dist/domain/extensions/entity-header.js +1 -0
  389. package/dist/domain/{system-components → extensions}/exit-tool-mode-fab.d.ts +1 -1
  390. package/dist/domain/extensions/exit-tool-mode-fab.js +1 -0
  391. package/dist/domain/{system-components → extensions}/finalize-action.d.ts +1 -1
  392. package/dist/domain/extensions/finalize-action.js +1 -0
  393. package/dist/domain/extensions/finalize-component.js +1 -0
  394. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -0
  395. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -0
  396. package/dist/domain/{system-components → extensions}/fixed-header.d.ts +1 -1
  397. package/dist/domain/extensions/fixed-header.js +1 -0
  398. package/dist/domain/{system-components → extensions}/floating-header.d.ts +1 -1
  399. package/dist/domain/extensions/floating-header.js +1 -0
  400. package/dist/domain/{system-components → extensions}/hidden-header.d.ts +1 -1
  401. package/dist/domain/extensions/hidden-header.js +1 -0
  402. package/dist/domain/{system-components → extensions}/hidden-sidebar-footer.d.ts +1 -1
  403. package/dist/domain/extensions/hidden-sidebar-footer.js +1 -0
  404. package/dist/domain/{system-components → extensions}/horizontal-tabs.d.ts +1 -1
  405. package/dist/domain/extensions/horizontal-tabs.js +1 -0
  406. package/dist/domain/extensions/index.d.ts +69 -0
  407. package/dist/domain/extensions/index.js +1 -0
  408. package/dist/domain/{system-components → extensions}/list-selector-dimension-indicator.d.ts +3 -2
  409. package/dist/domain/extensions/list-selector-dimension-indicator.js +1 -0
  410. package/dist/domain/extensions/multilingual-text-value.js +1 -0
  411. package/dist/domain/extensions/navigation-steps.js +1 -0
  412. package/dist/domain/{system-components → extensions}/offset-anchors.d.ts +1 -1
  413. package/dist/domain/extensions/offset-anchors.js +1 -0
  414. package/dist/domain/{system-components → extensions}/offset-indicator.d.ts +1 -2
  415. package/dist/domain/extensions/offset-indicator.js +1 -0
  416. package/dist/domain/{system-components → extensions}/offset.d.ts +1 -1
  417. package/dist/domain/extensions/offset.js +1 -0
  418. package/dist/domain/{system-components → extensions}/other-action.d.ts +1 -1
  419. package/dist/domain/extensions/other-action.js +1 -0
  420. package/dist/domain/{system-components → extensions}/property-page.d.ts +2 -2
  421. package/dist/domain/extensions/property-page.js +1 -0
  422. package/dist/domain/{system-components → extensions}/read-sidebar-footer.d.ts +1 -1
  423. package/dist/domain/extensions/read-sidebar-footer.js +1 -0
  424. package/dist/domain/{system-components → extensions}/replace-entity-recipe-hierarchy.d.ts +2 -2
  425. package/dist/domain/extensions/replace-entity-recipe-hierarchy.js +1 -0
  426. package/dist/domain/extensions/rotatable.js +1 -0
  427. package/dist/domain/extensions/rotation-handle.js +1 -0
  428. package/dist/domain/extensions/save-template-thumbnail.js +1 -0
  429. package/dist/domain/{system-components → extensions}/scene-entity-add-fab.d.ts +1 -1
  430. package/dist/domain/extensions/scene-entity-add-fab.js +1 -0
  431. package/dist/domain/extensions/scene-entity-animation.js +1 -0
  432. package/dist/domain/extensions/scene-entity-control.js +1 -0
  433. package/dist/domain/{system-components → extensions}/scene-entity-delete-fab.d.ts +1 -1
  434. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -0
  435. package/dist/domain/extensions/scene-entity-floor-object.js +1 -0
  436. package/dist/domain/{system-components → extensions}/scene-entity-html-hotspot.d.ts +1 -1
  437. package/dist/domain/extensions/scene-entity-html-hotspot.js +1 -0
  438. package/dist/domain/{system-components → extensions}/scene-entity-navigation-hotspot.d.ts +1 -1
  439. package/dist/domain/extensions/scene-entity-navigation-hotspot.js +1 -0
  440. package/dist/domain/{system-components → extensions}/scene-entity-object-html-hotspot.d.ts +1 -1
  441. package/dist/domain/extensions/scene-entity-object-html-hotspot.js +1 -0
  442. package/dist/domain/{system-components → extensions}/scene-entity-select-hotspot.d.ts +1 -1
  443. package/dist/domain/extensions/scene-entity-select-hotspot.js +1 -0
  444. package/dist/domain/extensions/scene-entity-wall-object.js +1 -0
  445. package/dist/domain/extensions/selectable-component.js +1 -0
  446. package/dist/domain/{system-components → extensions}/sidebar-tabs.d.ts +1 -1
  447. package/dist/domain/extensions/sidebar-tabs.js +1 -0
  448. package/dist/domain/extensions/simple-summary.js +1 -0
  449. package/dist/domain/{system-components → extensions}/size.d.ts +1 -1
  450. package/dist/domain/extensions/size.js +1 -0
  451. package/dist/domain/{system-components → extensions}/sketching-draw.d.ts +1 -1
  452. package/dist/domain/extensions/sketching-draw.js +1 -0
  453. package/dist/domain/{system-components → extensions}/sketching-edit.d.ts +2 -2
  454. package/dist/domain/extensions/sketching-edit.js +1 -0
  455. package/dist/domain/extensions/summary-component.js +1 -0
  456. package/dist/domain/extensions/text-value.js +1 -0
  457. package/dist/domain/extensions/tool-controls.js +1 -0
  458. package/dist/domain/{system-components → extensions}/tool-menu-fab.d.ts +2 -2
  459. package/dist/domain/extensions/tool-menu-fab.js +1 -0
  460. package/dist/domain/{system-components → extensions}/toolbar.d.ts +2 -2
  461. package/dist/domain/{system-components → extensions}/toolbar.js +1 -1
  462. package/dist/domain/{system-components → extensions}/universal-sidebar-footer.d.ts +1 -1
  463. package/dist/domain/extensions/universal-sidebar-footer.js +1 -0
  464. package/dist/domain/extensions/view-controls.js +1 -0
  465. package/dist/domain/index.d.ts +3 -32
  466. package/dist/domain/index.js +1 -1
  467. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +3 -3
  468. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  469. package/dist/domain/project-modules/index.d.ts +1 -0
  470. package/dist/domain/project-modules/index.js +1 -0
  471. package/dist/domain/project-modules/project-modules.d.ts +25 -0
  472. package/dist/domain/project-modules/project-modules.js +1 -0
  473. package/dist/domain/projections/blender-projections/blender-projections.d.ts +1 -1
  474. package/dist/domain/projections/blender-projections/blender-projections.js +1 -1
  475. package/dist/domain/projections/composition-projections.js +1 -1
  476. package/dist/domain/projections/index.d.ts +1 -1
  477. package/dist/domain/projections/projected-entities-projections.d.ts +1 -2
  478. package/dist/domain/projections/snap-matching.d.ts +1 -2
  479. package/dist/domain/projections/snap-utils.d.ts +1 -2
  480. package/dist/domain/projections/validation-projections.d.ts +1 -18
  481. package/dist/domain/projections/validation-projections.js +1 -1
  482. package/dist/domain/system-components/admin-sidebar.d.ts +1 -1
  483. package/dist/domain/system-components/admin-sidebar.js +1 -1
  484. package/dist/domain/system-components/angle-dimension.js +1 -1
  485. package/dist/domain/system-components/application-config.d.ts +1 -1
  486. package/dist/domain/system-components/application-config.js +1 -1
  487. package/dist/domain/system-components/attribute-selection.js +1 -1
  488. package/dist/domain/system-components/bounding-box-component.d.ts +1 -1
  489. package/dist/domain/system-components/bounding-box-component.js +1 -1
  490. package/dist/domain/system-components/bounding-sphere-component.d.ts +1 -1
  491. package/dist/domain/system-components/bounding-sphere-component.js +1 -1
  492. package/dist/domain/system-components/child-entity-recipes.d.ts +1 -1
  493. package/dist/domain/system-components/child-entity-recipes.js +1 -1
  494. package/dist/domain/system-components/child-entity-selection.d.ts +1 -2
  495. package/dist/domain/system-components/child-entity-selection.js +1 -1
  496. package/dist/domain/system-components/collision-box-geometry.d.ts +1 -1
  497. package/dist/domain/system-components/collision-box-geometry.js +1 -1
  498. package/dist/domain/system-components/collision-geometries.d.ts +1 -1
  499. package/dist/domain/system-components/collision-geometry.d.ts +1 -1
  500. package/dist/domain/system-components/collision-geometry.js +1 -1
  501. package/dist/domain/system-components/collision-point-geometry.d.ts +1 -1
  502. package/dist/domain/system-components/collision-point-geometry.js +1 -1
  503. package/dist/domain/system-components/common/index.d.ts +0 -4
  504. package/dist/domain/system-components/common/index.js +1 -1
  505. package/dist/domain/system-components/common/recipes.d.ts +1 -2
  506. package/dist/domain/system-components/constraint.d.ts +1 -1
  507. package/dist/domain/system-components/constraint.js +1 -1
  508. package/dist/domain/system-components/create-blueprint.d.ts +1 -1
  509. package/dist/domain/system-components/custom-scene-entity.d.ts +1 -1
  510. package/dist/domain/system-components/custom-scene-entity.js +1 -1
  511. package/dist/domain/system-components/detail.js +1 -1
  512. package/dist/domain/system-components/distance-dimension-select.d.ts +1 -1
  513. package/dist/domain/system-components/distance-dimension-select.js +1 -1
  514. package/dist/domain/system-components/distance-dimension.d.ts +1 -1
  515. package/dist/domain/system-components/distance-dimension.js +1 -1
  516. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  517. package/dist/domain/system-components/drag-handle.js +1 -1
  518. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  519. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  520. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  521. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  522. package/dist/domain/system-components/generic-dimension.d.ts +1 -1
  523. package/dist/domain/system-components/generic-dimension.js +1 -1
  524. package/dist/domain/system-components/hidden-entity.js +1 -1
  525. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -2
  526. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  527. package/dist/domain/system-components/index.d.ts +0 -68
  528. package/dist/domain/system-components/index.js +1 -1
  529. package/dist/domain/system-components/material-override-property-transition.js +1 -1
  530. package/dist/domain/system-components/material-override-transformer.js +1 -1
  531. package/dist/domain/system-components/material-swatch.js +1 -1
  532. package/dist/domain/system-components/navigation-page.js +1 -1
  533. package/dist/domain/system-components/navigation-panel-list.js +1 -1
  534. package/dist/domain/system-components/phoenix-entity-elements/admin-data-table-sidebar.d.ts +1 -1
  535. package/dist/domain/system-components/phoenix-layout-elements/admin-connected-resource-page.d.ts +1 -1
  536. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-actions.d.ts +1 -1
  537. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-page.d.ts +1 -1
  538. package/dist/domain/system-components/pivot-point.d.ts +1 -1
  539. package/dist/domain/system-components/pivot-point.js +1 -1
  540. package/dist/domain/system-components/price.js +1 -1
  541. package/dist/domain/system-components/projected-entities.d.ts +1 -1
  542. package/dist/domain/system-components/projected-entities.js +1 -1
  543. package/dist/domain/system-components/replace-entity-recipes.d.ts +1 -1
  544. package/dist/domain/system-components/replace-entity-recipes.js +1 -1
  545. package/dist/domain/system-components/scene-entity-ambient-light.js +1 -1
  546. package/dist/domain/system-components/scene-entity-box-object.js +1 -1
  547. package/dist/domain/system-components/scene-entity-directional-light.js +1 -1
  548. package/dist/domain/system-components/scene-entity-local-material-override.js +1 -1
  549. package/dist/domain/system-components/scene-entity-material-override.js +1 -1
  550. package/dist/domain/system-components/scene-entity-object-clip.js +1 -1
  551. package/dist/domain/system-components/scene-entity-object-decal.js +1 -1
  552. package/dist/domain/system-components/scene-entity-object-group.js +1 -1
  553. package/dist/domain/system-components/scene-entity-object-local-material-override.js +1 -1
  554. package/dist/domain/system-components/scene-entity-object-material-override.js +1 -1
  555. package/dist/domain/system-components/scene-entity-object-properties.js +1 -1
  556. package/dist/domain/system-components/scene-entity-object-remote-material-override.js +1 -1
  557. package/dist/domain/system-components/scene-entity-object-text-decal.js +1 -1
  558. package/dist/domain/system-components/scene-entity-object-transformer.js +1 -1
  559. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.js +1 -1
  560. package/dist/domain/system-components/scene-entity-object.js +1 -1
  561. package/dist/domain/system-components/scene-entity-point-light.js +1 -1
  562. package/dist/domain/system-components/scene-entity-properties.js +1 -1
  563. package/dist/domain/system-components/scene-entity-rect-area-light.js +1 -1
  564. package/dist/domain/system-components/scene-entity-remote-material-override.js +1 -1
  565. package/dist/domain/system-components/scene-entity-remote-object.js +1 -1
  566. package/dist/domain/system-components/scene-entity-spot-light.js +1 -1
  567. package/dist/domain/system-components/scene-entity-transimissive-material-override.js +1 -1
  568. package/dist/domain/system-components/sketching-line.d.ts +1 -1
  569. package/dist/domain/system-components/sketching-line.js +1 -1
  570. package/dist/domain/system-components/sketching-rectangle.d.ts +1 -1
  571. package/dist/domain/system-components/sketching-rectangle.js +1 -1
  572. package/dist/domain/system-components/sketching.d.ts +1 -1
  573. package/dist/domain/system-components/sketching.js +1 -1
  574. package/dist/domain/system-components/snap-axis.d.ts +1 -1
  575. package/dist/domain/system-components/snap-axis.js +1 -1
  576. package/dist/domain/system-components/snap-edge.d.ts +1 -1
  577. package/dist/domain/system-components/snap-edge.js +1 -1
  578. package/dist/domain/system-components/snap-plane.d.ts +1 -1
  579. package/dist/domain/system-components/snap-plane.js +1 -1
  580. package/dist/domain/system-components/snap-point.d.ts +1 -1
  581. package/dist/domain/system-components/snap-point.js +1 -1
  582. package/dist/domain/system-components/static-orthographic-camera-component.d.ts +1 -1
  583. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  584. package/dist/domain/system-components/static-perspective-camera-component.d.ts +1 -1
  585. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  586. package/dist/domain/utils/eval-cache.d.ts +1 -2
  587. package/dist/domain/utils/memo-eval.d.ts +2 -4
  588. package/dist/editor/domain-editors/use-implementation-files.d.ts +7 -6
  589. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  590. package/dist/i18n/locales/cs/messages.js +1 -1
  591. package/dist/i18n/locales/da/messages.js +1 -1
  592. package/dist/i18n/locales/de/messages.js +1 -1
  593. package/dist/i18n/locales/de-AT/messages.js +1 -1
  594. package/dist/i18n/locales/en/messages.js +1 -1
  595. package/dist/i18n/locales/en-AU/messages.js +1 -1
  596. package/dist/i18n/locales/en-GB/messages.js +1 -1
  597. package/dist/i18n/locales/es/messages.js +1 -1
  598. package/dist/i18n/locales/fr/messages.js +1 -1
  599. package/dist/i18n/locales/hu/messages.js +1 -1
  600. package/dist/i18n/locales/it/messages.js +1 -1
  601. package/dist/i18n/locales/nl/messages.js +1 -1
  602. package/dist/i18n/locales/pl/messages.js +1 -1
  603. package/dist/i18n/locales/pt/messages.js +1 -1
  604. package/dist/i18n/locales/ro/messages.js +1 -1
  605. package/dist/i18n/locales/sk/messages.js +1 -1
  606. package/dist/i18n/locales/tr/messages.js +1 -1
  607. package/dist/legacy/domain-cli/gen/configurator-builder.js +21 -8
  608. package/dist/legacy/domain-cli/gen/implementation.js +5 -5
  609. package/dist/legacy/domain-cli/gen/invariants.js +5 -3
  610. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  611. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  612. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.d.ts +1 -1
  613. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.js +4 -0
  614. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -19
  615. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +15 -16
  616. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +22 -23
  617. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +15 -16
  618. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.d.ts +7 -2
  619. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.js +8 -12
  620. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.d.ts +1 -1
  621. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.js +1 -1
  622. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/webhook-builders.js +7 -7
  623. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +4 -3
  624. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  625. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  626. package/dist/phoenix/commands/prepare-local-environment-command.js +1 -1
  627. package/dist/phoenix/scripts/build-admin.js +1 -1
  628. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  629. package/dist/phoenix/services/variant-file-session.js +1 -1
  630. package/dist/react-sdk/application-runtime/hooks/use-domain-application-props.d.ts +5 -2
  631. package/dist/react-sdk/application-runtime/hooks/use-spec.d.ts +1 -1
  632. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.d.ts +1 -1
  633. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  634. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +4 -4
  635. package/dist/ui-sdk/theme/types.d.ts +1 -1
  636. package/dist/webhook/builders/common.d.ts +8 -0
  637. package/dist/webhook/builders/webhook-builder.d.ts +1 -1
  638. package/dist/webhook/builders/webhook-builder.js +1 -1
  639. package/package.json +3 -3
  640. package/dist/domain/actions/action-factory.d.ts +0 -10
  641. package/dist/domain/actions/prepare-action-implementations.js +0 -5
  642. package/dist/domain/components/debug-state-component.js +0 -1
  643. package/dist/domain/components/drag-state-component.js +0 -1
  644. package/dist/domain/components/export-state-component.js +0 -1
  645. package/dist/domain/components/fullscreen-state-component.js +0 -1
  646. package/dist/domain/components/group-components-by-entity-id-and-name.js +0 -1
  647. package/dist/domain/components/hover-state-component.js +0 -1
  648. package/dist/domain/components/index.d.ts +0 -2
  649. package/dist/domain/components/index.js +0 -1
  650. package/dist/domain/components/navigation-state-component.js +0 -1
  651. package/dist/domain/components/selection-state-component.js +0 -1
  652. package/dist/domain/components/system-component-builder.js +0 -1
  653. package/dist/domain/components/system-virtual-entity.js +0 -1
  654. package/dist/domain/components/tool-state-component.js +0 -1
  655. package/dist/domain/components/view-state-component.js +0 -1
  656. package/dist/domain/components/viewport-state-component.js +0 -1
  657. package/dist/domain/core/json-schema.js +0 -1
  658. package/dist/domain/core/reflection.js +0 -1
  659. package/dist/domain/domain-context/recipe-system/recipes.js +0 -1
  660. package/dist/domain/expressions/constant-expressions.js +0 -1
  661. package/dist/domain/expressions/custom-expression.js +0 -1
  662. package/dist/domain/expressions/index.d.ts +0 -1
  663. package/dist/domain/expressions/index.js +0 -1
  664. package/dist/domain/invariants/custom-invariants.js +0 -1
  665. package/dist/domain/invariants/invariants.js +0 -1
  666. package/dist/domain/invariants/violation-component.js +0 -1
  667. package/dist/domain/relations/all-of-type-relation.js +0 -1
  668. package/dist/domain/relations/component-factories.js +0 -1
  669. package/dist/domain/relations/composed-of.js +0 -1
  670. package/dist/domain/relations/indirect-relation.js +0 -1
  671. package/dist/domain/relations/reference-component.js +0 -1
  672. package/dist/domain/system-components/angle-indicator.js +0 -1
  673. package/dist/domain/system-components/attribute-switch.js +0 -1
  674. package/dist/domain/system-components/autorotate-camera-component.js +0 -1
  675. package/dist/domain/system-components/basic-sidebar-footer.js +0 -1
  676. package/dist/domain/system-components/camera-based-hidden-entity-object.js +0 -1
  677. package/dist/domain/system-components/camera-based-hidden-entity.js +0 -1
  678. package/dist/domain/system-components/canvas-config.js +0 -1
  679. package/dist/domain/system-components/canvas-custom-environment.js +0 -1
  680. package/dist/domain/system-components/canvas-padding.js +0 -1
  681. package/dist/domain/system-components/canvas-preset-environment.js +0 -1
  682. package/dist/domain/system-components/child-entity-recipe-hierarchy.js +0 -1
  683. package/dist/domain/system-components/client-side-image.js +0 -1
  684. package/dist/domain/system-components/color-value.js +0 -1
  685. package/dist/domain/system-components/common/angle-indicator-schema.js +0 -1
  686. package/dist/domain/system-components/common/dimension-indicator-schema.js +0 -1
  687. package/dist/domain/system-components/custom-price-footer.js +0 -1
  688. package/dist/domain/system-components/dimension-indicator.js +0 -1
  689. package/dist/domain/system-components/editable-angle-indicator.js +0 -1
  690. package/dist/domain/system-components/editable-distance-dimension-indicator.js +0 -1
  691. package/dist/domain/system-components/editable-offset-indicator.js +0 -1
  692. package/dist/domain/system-components/editable-size-indicator.js +0 -1
  693. package/dist/domain/system-components/entity-header.js +0 -1
  694. package/dist/domain/system-components/exit-tool-mode-fab.js +0 -1
  695. package/dist/domain/system-components/finalize-action.js +0 -1
  696. package/dist/domain/system-components/finalize-component.js +0 -1
  697. package/dist/domain/system-components/fit-selection-orthographic-camera-component.js +0 -1
  698. package/dist/domain/system-components/fit-selection-perspective-camera-component.js +0 -1
  699. package/dist/domain/system-components/fixed-header.js +0 -1
  700. package/dist/domain/system-components/floating-header.js +0 -1
  701. package/dist/domain/system-components/hidden-header.js +0 -1
  702. package/dist/domain/system-components/hidden-sidebar-footer.js +0 -1
  703. package/dist/domain/system-components/horizontal-tabs.js +0 -1
  704. package/dist/domain/system-components/list-selector-dimension-indicator.js +0 -1
  705. package/dist/domain/system-components/multilingual-text-value.js +0 -1
  706. package/dist/domain/system-components/navigation-steps.js +0 -1
  707. package/dist/domain/system-components/offset-anchors.js +0 -1
  708. package/dist/domain/system-components/offset-indicator.js +0 -1
  709. package/dist/domain/system-components/offset.js +0 -1
  710. package/dist/domain/system-components/other-action.js +0 -1
  711. package/dist/domain/system-components/property-page.js +0 -1
  712. package/dist/domain/system-components/read-sidebar-footer.js +0 -1
  713. package/dist/domain/system-components/replace-entity-recipe-hierarchy.js +0 -1
  714. package/dist/domain/system-components/rotatable.js +0 -1
  715. package/dist/domain/system-components/rotation-handle.js +0 -1
  716. package/dist/domain/system-components/save-template-thumbnail.js +0 -1
  717. package/dist/domain/system-components/scene-entity-add-fab.js +0 -1
  718. package/dist/domain/system-components/scene-entity-animation.js +0 -1
  719. package/dist/domain/system-components/scene-entity-control.js +0 -1
  720. package/dist/domain/system-components/scene-entity-delete-fab.js +0 -1
  721. package/dist/domain/system-components/scene-entity-floor-object.js +0 -1
  722. package/dist/domain/system-components/scene-entity-html-hotspot.js +0 -1
  723. package/dist/domain/system-components/scene-entity-navigation-hotspot.js +0 -1
  724. package/dist/domain/system-components/scene-entity-object-html-hotspot.js +0 -1
  725. package/dist/domain/system-components/scene-entity-select-hotspot.js +0 -1
  726. package/dist/domain/system-components/scene-entity-wall-object.js +0 -1
  727. package/dist/domain/system-components/selectable-component.js +0 -1
  728. package/dist/domain/system-components/sidebar-tabs.js +0 -1
  729. package/dist/domain/system-components/simple-summary.js +0 -1
  730. package/dist/domain/system-components/size.js +0 -1
  731. package/dist/domain/system-components/sketching-draw.js +0 -1
  732. package/dist/domain/system-components/sketching-edit.js +0 -1
  733. package/dist/domain/system-components/summary-component.js +0 -1
  734. package/dist/domain/system-components/text-value.js +0 -1
  735. package/dist/domain/system-components/tool-controls.js +0 -1
  736. package/dist/domain/system-components/tool-menu-fab.js +0 -1
  737. package/dist/domain/system-components/universal-sidebar-footer.js +0 -1
  738. package/dist/domain/system-components/view-controls.js +0 -1
  739. package/dist/phoenix/application-spec/generate-assistant-prompt.d.ts +0 -13
  740. package/dist/phoenix/application-spec/generate-assistant-prompt.js +0 -1
  741. /package/dist/domain/{components/component-reader-types.js → application/assistant/assistant-manifest.js} +0 -0
  742. /package/dist/domain/{core/action.js → application/assistant/assistant-resolved-manifest.js} +0 -0
  743. /package/dist/domain/{actions → core/action}/action-factory.js +0 -0
  744. /package/dist/domain/core/{enhanced-json-schema.js → action/action.js} +0 -0
  745. /package/dist/domain/core/{expression.js → component/component-reader-types.js} +0 -0
  746. /package/dist/domain/{components → core/component}/legacy-filter.js +0 -0
  747. /package/dist/domain/{components → core/component}/system-component-filter.js +0 -0
  748. /package/dist/domain/{components → core/component}/system-virtual-entity.d.ts +0 -0
  749. /package/dist/domain/{components → core/component}/updates.js +0 -0
  750. /package/dist/domain/core/{schema-validator.js → data-schema/data-cell-value.js} +0 -0
  751. /package/dist/domain/{relations/reference-field.js → core/data-schema/data-schema-array-field.js} +0 -0
  752. /package/dist/domain/{relations/relation-implementation.js → core/data-schema/data-schema-field-object.js} +0 -0
  753. /package/dist/domain/{invariants → core/invariant}/builtin-invariant.js +0 -0
  754. /package/dist/domain/{invariants → core/invariant}/violation-component.d.ts +0 -0
  755. /package/dist/domain/{invariants → core/invariant}/violation.js +0 -0
  756. /package/dist/domain/core/{alias.d.ts → model/alias.d.ts} +0 -0
  757. /package/dist/domain/core/{alias.js → model/alias.js} +0 -0
  758. /package/dist/domain/core/{common-definitions.d.ts → model/common-definitions.d.ts} +0 -0
  759. /package/dist/domain/core/{common-definitions.js → model/common-definitions.js} +0 -0
  760. /package/dist/domain/core/{component.js → model/component.js} +0 -0
  761. /package/dist/domain/core/{model.d.ts → model/model.d.ts} +0 -0
  762. /package/dist/domain/core/{model.js → model/model.js} +0 -0
  763. /package/dist/domain/core/{preset.d.ts → model/preset.d.ts} +0 -0
  764. /package/dist/domain/core/{preset.js → model/preset.js} +0 -0
  765. /package/dist/domain/{relations → core/relation}/direct-relation.js +0 -0
  766. /package/dist/domain/{relations → core/relation}/relation-factory.js +0 -0
  767. /package/dist/domain/core/{schema-validator-ajv.d.ts → schema/create-ajv-schema-validator.d.ts} +0 -0
  768. /package/dist/domain/core/{schema-validator-ajv.js → schema/create-ajv-schema-validator.js} +0 -0
  769. /package/dist/domain/core/{schema-validator-csp.d.ts → schema/create-csp-schema-validator.d.ts} +0 -0
  770. /package/dist/domain/core/{schema-validator-csp.js → schema/create-csp-schema-validator.js} +0 -0
  771. /package/dist/domain/core/{enhanced-json-schema.d.ts → schema/enhanced-json-schema.d.ts} +0 -0
  772. /package/dist/domain/core/{json-schema.d.ts → schema/extended-schema-validator.d.ts} +0 -0
  773. /package/dist/domain/core/{schema-validator.d.ts → schema/schema-validator.d.ts} +0 -0
  774. /package/dist/domain/core/{migrations.js → state/migrations.js} +0 -0
  775. /package/dist/domain/core/{state.js → state/state.js} +0 -0
  776. /package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.js +0 -0
  777. /package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.js +0 -0
  778. /package/dist/domain/{system-components → extensions}/attribute-switch.d.ts +0 -0
  779. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity-object.d.ts +0 -0
  780. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity.d.ts +0 -0
  781. /package/dist/domain/{system-components → extensions}/canvas-custom-environment.d.ts +0 -0
  782. /package/dist/domain/{system-components → extensions}/client-side-image.d.ts +0 -0
  783. /package/dist/domain/{system-components → extensions}/color-value.d.ts +0 -0
  784. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.d.ts +0 -0
  785. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.js +0 -0
  786. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.d.ts +0 -0
  787. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.js +0 -0
  788. /package/dist/domain/{system-components → extensions}/custom-price-footer.d.ts +0 -0
  789. /package/dist/domain/{system-components → extensions}/finalize-component.d.ts +0 -0
  790. /package/dist/domain/{system-components → extensions}/fit-selection-orthographic-camera-component.d.ts +0 -0
  791. /package/dist/domain/{system-components → extensions}/fit-selection-perspective-camera-component.d.ts +0 -0
  792. /package/dist/domain/{system-components → extensions}/multilingual-text-value.d.ts +0 -0
  793. /package/dist/domain/{system-components → extensions}/navigation-steps.d.ts +0 -0
  794. /package/dist/domain/{system-components → extensions}/rotatable.d.ts +0 -0
  795. /package/dist/domain/{system-components → extensions}/rotation-handle.d.ts +0 -0
  796. /package/dist/domain/{system-components → extensions}/save-template-thumbnail.d.ts +0 -0
  797. /package/dist/domain/{system-components → extensions}/scene-entity-animation.d.ts +0 -0
  798. /package/dist/domain/{system-components → extensions}/scene-entity-control.d.ts +0 -0
  799. /package/dist/domain/{system-components → extensions}/scene-entity-floor-object.d.ts +0 -0
  800. /package/dist/domain/{system-components → extensions}/scene-entity-wall-object.d.ts +0 -0
  801. /package/dist/domain/{system-components → extensions}/selectable-component.d.ts +0 -0
  802. /package/dist/domain/{system-components → extensions}/simple-summary.d.ts +0 -0
  803. /package/dist/domain/{system-components → extensions}/summary-component.d.ts +0 -0
  804. /package/dist/domain/{system-components → extensions}/text-value.d.ts +0 -0
  805. /package/dist/domain/{system-components → extensions}/tool-controls.d.ts +0 -0
  806. /package/dist/domain/{system-components → extensions}/view-controls.d.ts +0 -0
@@ -1,35 +1,34 @@
1
- import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as o,generateDomainTypeImports as t,generateFlattenCall as r,generateImports as i,generateThemeCode as n,generateTransformerMap as a,generateTransformerRegistration as d,generateTransformerTypeImports as m,getImportNames as s}from"./generator-shared.js";export const getFrontendEmbeddedConfiguratorFile=($,l,f=[],c=[],p=[],u=[],g=[],h,b)=>{let C=i(f,"components"),j=r(s(f,"components")),w=i(u,"handlers"),E=r(s(u,"handlers")),F=i(g,"elements"),x=r(s(g,"elements")),A=a(c,p),B=d(p),k=n(h,b),H=p.length>0,I=m(H),O=t(H);return`// prettier-ignore-file
1
+ import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as o,generateImports as t,generateModuleEntries as r,generateModuleList as i,generateThemeCode as n,generateTransformerMap as a,generateTransformerRegistration as d,generateTransformerTypeImports as m}from"./generator-shared.js";export const getFrontendEmbeddedConfiguratorFile=(s,l,f=[],$=[],c=[],p=[],u=[],g,h)=>{let b=t(f,"components"),C=i(r(f,"components")),j=t(p,"handlers"),w=i(r(p,"handlers")),E=t(u,"elements"),F=i(r(u,"elements")),x=a($,c),A=d(c),B=n(g,h),k=m(c.length>0);return`// prettier-ignore-file
2
2
 
3
3
  ${e}
4
- ${I?`${I}
4
+ ${k?`${k}
5
5
  `:""}
6
6
  import * as interfaceFile from './configurator-interface.js'
7
7
 
8
8
  import { mountEmbeddedConfiguratorApplication } from '@salsita-ai/sdk/application'
9
9
 
10
- import { configuratorBuilder } from './domain.js'${O?`
11
- ${O}`:""}
12
- ${C?`
13
- ${C}`:""}${w?`
14
- ${w}`:""}${F?`
15
- ${F}`:""}${k.imports?`
16
- ${k.imports}`:""}${A}
10
+ import { configuratorBuilder } from './domain.js'
11
+ ${b?`
12
+ ${b}`:""}${j?`
13
+ ${j}`:""}${E?`
14
+ ${E}`:""}${B.imports?`
15
+ ${B.imports}`:""}${x}
17
16
 
18
17
  const builder = configuratorBuilder
19
18
  .withInterface(interfaceFile)
20
- .withComponentOptics(${j})
21
- .withHandlers(${E})
22
- .withElements(${x})
23
- ${o}${k.code?`
24
- ${k.code}`:""}${B}
19
+ .withComponentOptics(${C})
20
+ .withHandlers(${w})
21
+ .withElements(${F})
22
+ ${o}${B.code?`
23
+ ${B.code}`:""}${A}
25
24
 
26
25
 
27
26
  const config = builder.buildConfig()
28
27
 
29
28
  export default {
30
29
  mount: () => {
31
- mountEmbeddedConfiguratorApplication(config, '${$}', '${l}')
32
- return 'salsita-configurator-${$}-${l}'
30
+ mountEmbeddedConfiguratorApplication(config, '${s}', '${l}')
31
+ return 'salsita-configurator-${s}-${l}'
33
32
  },
34
33
  config,
35
34
  }
@@ -4,9 +4,14 @@
4
4
  */
5
5
  export declare const getImportNames: (files: readonly string[], prefix: string) => readonly string[];
6
6
  export declare const generateImports: (files: readonly string[], prefix: string) => string;
7
- export declare const generateFlattenCall: (importNames: readonly string[]) => string;
7
+ /**
8
+ * The entries of a project-module list for one category of files: each default export paired with its project
9
+ * path. The generated file passes them to the configurator builder unchecked; the SDK validates each export
10
+ * against its folder's contract and names the file when it does not match.
11
+ */
12
+ export declare const generateModuleEntries: (files: readonly string[], prefix: string) => readonly string[];
13
+ export declare const generateModuleList: (entries: readonly string[]) => string;
8
14
  export declare const generateTransformerTypeImports: (hasTransformers: boolean) => string;
9
- export declare const generateDomainTypeImports: (hasTransformers: boolean) => string;
10
15
  export declare const generateTransformerMap: (transformersFiles: readonly string[], transformers: Array<{
11
16
  name: string;
12
17
  priority?: number;
@@ -1,17 +1,13 @@
1
- import{basename as e,extname as r}from"path";export const getImportNames=(e,r)=>e.map((e,t)=>`${r}${t}`);export const generateImports=(e,r)=>{if(0===e.length)return"";let t=getImportNames(e,r);return e.map((e,r)=>{let n=`../src/${e.replace(/\.tsx?$/,"")}.js`;return`import ${t[r]} from '${n}'`}).join("\n")};export const generateFlattenCall=e=>{if(0===e.length)return"[]";let r=e.map(e=>`Array.isArray(${e}) ? ${e} : [${e}]`).join(",\n ");return 1===e.length?`Array.isArray(${e[0]}) ? ${e[0]} : [${e[0]}]`:`[
2
- ${r}
3
- ].flat()`};export const generateTransformerTypeImports=e=>e?"import type { ImportedTransformer, SpecTransformer } from '@salsita-ai/sdk/domain'":"";export const generateDomainTypeImports=e=>e?`import type { AnyDomainEntity, RootEntity } from './domain/model/index.js'
4
- import type { NavigationState, ViewState, ToolState, ExportState } from './domain/application-types.js'
5
- import type { $Map } from './domain/enhanced-model.js'`:"";export const generateTransformerMap=(t,n)=>{if(0===n.length)return"";if(0===t.length)throw Error(`Transformers specified in spec but no transformer files found in transformers/ folder. Expected transformers: ${n.map(e=>e.name).join(", ")}`);let o=getImportNames(t,"transformers"),a=[];t.forEach((e,r)=>{let t=o[r];a.push(`import ${t} from '../src/${e.replace(/\.tsx?$/,".js")}'`)});let s=`const allImportedTransformers: ReadonlyArray<ImportedTransformer<AnyDomainEntity, RootEntity, $Map, NavigationState, ViewState, ToolState, ExportState>> = [
6
- ${t.map((t,n)=>{let a=o[n],s=e(t,r(t));return` { name: '${s}', transformer: ${a} }`}).join(",\n")}
7
- ]`,m=n.map(e=>` { name: '${e.name}', priority: ${e.priority??"Infinity"} }`).join(",\n"),i=`const specTransformers: SpecTransformer[] = [
8
- ${m}
9
- ]`;return`${a.length>0?`
10
- ${a.join("\n")}`:""}
11
-
1
+ export const getImportNames=(e,r)=>e.map((e,t)=>`${r}${t}`);export const generateImports=(e,r)=>{if(0===e.length)return"";let t=getImportNames(e,r);return e.map((e,r)=>{let n=`../src/${e.replace(/\.tsx?$/,"")}.js`;return`import ${t[r]} from '${n}'`}).join("\n")};export const generateModuleEntries=(e,r)=>{let t=getImportNames(e,r);return e.map((e,r)=>`{ origin: 'src/${e}', exports: ${t[r]} }`)};export const generateModuleList=e=>0===e.length?"[]":`[
2
+ ${e.join(",\n ")}
3
+ ]`;export const generateTransformerTypeImports=e=>e?"import type { ProjectModule, SpecTransformer } from '@salsita-ai/sdk/domain'":"";export const generateTransformerMap=(e,r)=>{if(0===r.length)return"";if(0===e.length)throw Error(`Transformers specified in spec but no transformer files found in transformers/ folder. Expected transformers: ${r.map(e=>e.name).join(", ")}`);let t=getImportNames(e,"transformers"),n=[];e.forEach((e,r)=>{let o=t[r];n.push(`import ${o} from '../src/${e.replace(/\.tsx?$/,".js")}'`)});let o=`const allImportedTransformers: readonly ProjectModule[] = ${generateModuleList(generateModuleEntries(e,"transformers"))}`,s=r.map(e=>` { name: '${e.name}', priority: ${e.priority??"Infinity"} }`).join(",\n"),a=`const specTransformers: SpecTransformer[] = [
12
4
  ${s}
5
+ ]`;return`${n.length>0?`
6
+ ${n.join("\n")}`:""}
7
+
8
+ ${o}
13
9
 
14
- ${i}`};export const generateTransformerRegistration=e=>0===e.length?"":".withTransformers(allImportedTransformers, specTransformers)";export const generateThemeCode=(e,r)=>e?{imports:"import { getPhoenixThemes } from '@salsita-ai/sdk/ui'",code:` .withTheme(getPhoenixThemes().${e})`}:r?{imports:"import { createScaledPhoenixTheme } from '@salsita-ai/sdk/ui'",code:` .withTheme(createScaledPhoenixTheme(${JSON.stringify(r,null,2)}))`}:{imports:"",code:""};export const defaultEnvsCode=` .withDefaultEnvs({
10
+ ${a}`};export const generateTransformerRegistration=e=>0===e.length?"":".withTransformers(allImportedTransformers, specTransformers)";export const generateThemeCode=(e,r)=>e?{imports:"import { getPhoenixThemes } from '@salsita-ai/sdk/ui'",code:` .withTheme(getPhoenixThemes().${e})`}:r?{imports:"import { createScaledPhoenixTheme } from '@salsita-ai/sdk/ui'",code:` .withTheme(createScaledPhoenixTheme(${JSON.stringify(r,null,2)}))`}:{imports:"",code:""};export const defaultEnvsCode=` .withDefaultEnvs({
15
11
  isDev: phx.frontendEnv.IS_DEV,
16
12
  deploymentId: phx.frontendEnv.DEPLOYMENT_ID,
17
13
  datadogEnabled: phx.frontendEnv.DATADOG_ENABLED,
@@ -13,7 +13,7 @@ export { generateFrontendAdminFile } from './frontend-admin.js';
13
13
  export { generateFrontendConfiguratorFile } from './frontend-configurator.js';
14
14
  export { getFrontendEmbeddedAdminFile } from './frontend-embedded-admin.js';
15
15
  export { getFrontendEmbeddedConfiguratorFile } from './frontend-embedded-configurator.js';
16
- export { defaultEnvsCode, generateDomainTypeImports, generateFlattenCall, generateThemeCode, generateTransformerMap, generateTransformerRegistration, generateTransformerTypeImports, } from './generator-shared.js';
16
+ export { defaultEnvsCode, generateModuleEntries, generateModuleList, generateThemeCode, generateTransformerMap, generateTransformerRegistration, generateTransformerTypeImports, } from './generator-shared.js';
17
17
  export { GITIGNORE_END_MARKER, GITIGNORE_START_MARKER, gitignoreFile, mergeGitignoreContent } from './gitignore.js';
18
18
  export { claudeMdFile, cursorRulesFile, mergeClaudeMdContent, mergeCursorRulesContent, mergeMarkerContent, reviewCommandFile, SDK_END_MARKER, SDK_START_MARKER, } from './agents/index.js';
19
19
  export { globalTsFile } from './globals.js';
@@ -1 +1 @@
1
- export{adminInterfaceFile}from"./admin-interface.js";export{privateAssetsReadme,publicAssetsReadme}from"./assets-readme.js";export{configuratorInterfaceFile}from"./configurator-interface.js";export{generateIndexDomainFile}from"./domain-index.js";export{generateEditorFile}from"./editor.js";export{envCiFile}from"./env-ci.js";export{generateFrontendConfig,generateWebhookConfig}from"./env-config.js";export{envExampleFile}from"./env-example.js";export{eslintFile}from"./eslint.js";export{faviconBase64}from"./favicon.js";export{fileHeader}from"./file-header.js";export{generateFrontendAdminFile}from"./frontend-admin.js";export{generateFrontendConfiguratorFile}from"./frontend-configurator.js";export{getFrontendEmbeddedAdminFile}from"./frontend-embedded-admin.js";export{getFrontendEmbeddedConfiguratorFile}from"./frontend-embedded-configurator.js";export{defaultEnvsCode,generateDomainTypeImports,generateFlattenCall,generateThemeCode,generateTransformerMap,generateTransformerRegistration,generateTransformerTypeImports}from"./generator-shared.js";export{GITIGNORE_END_MARKER,GITIGNORE_START_MARKER,gitignoreFile,mergeGitignoreContent}from"./gitignore.js";export{claudeMdFile,cursorRulesFile,mergeClaudeMdContent,mergeCursorRulesContent,mergeMarkerContent,reviewCommandFile,SDK_END_MARKER,SDK_START_MARKER}from"./agents/index.js";export{globalTsFile}from"./globals.js";export{htmlAdminIndexFile}from"./html-admin-index.js";export{generateHtmlIndexFile}from"./html-index.js";export{generateI18nIndexFile}from"./i18n-index.js";export{getLinguiRcFile}from"./lingui-rc.js";export{generateNvmrc,generatePackageJson}from"./package-json.js";export{generatePhoenixConfigFile}from"./phoenix-config.js";export{prettierFile}from"./prettier.js";export{prettierignoreFile}from"./prettierignore.js";export{generateReadme}from"./readme.js";export{robotsTxtContent}from"./robots-txt.js";export{generateApplicationYaml,generateModelYaml}from"./spec-application.js";export{tsconfigFile}from"./tsconfig.js";export{generateWebhookBuildersFile}from"./webhook-builders.js";export{webhookImplementationFile}from"./webhook-implementation.js";export{webhookIndexFile}from"./webhook.index.js";
1
+ export{adminInterfaceFile}from"./admin-interface.js";export{privateAssetsReadme,publicAssetsReadme}from"./assets-readme.js";export{configuratorInterfaceFile}from"./configurator-interface.js";export{generateIndexDomainFile}from"./domain-index.js";export{generateEditorFile}from"./editor.js";export{envCiFile}from"./env-ci.js";export{generateFrontendConfig,generateWebhookConfig}from"./env-config.js";export{envExampleFile}from"./env-example.js";export{eslintFile}from"./eslint.js";export{faviconBase64}from"./favicon.js";export{fileHeader}from"./file-header.js";export{generateFrontendAdminFile}from"./frontend-admin.js";export{generateFrontendConfiguratorFile}from"./frontend-configurator.js";export{getFrontendEmbeddedAdminFile}from"./frontend-embedded-admin.js";export{getFrontendEmbeddedConfiguratorFile}from"./frontend-embedded-configurator.js";export{defaultEnvsCode,generateModuleEntries,generateModuleList,generateThemeCode,generateTransformerMap,generateTransformerRegistration,generateTransformerTypeImports}from"./generator-shared.js";export{GITIGNORE_END_MARKER,GITIGNORE_START_MARKER,gitignoreFile,mergeGitignoreContent}from"./gitignore.js";export{claudeMdFile,cursorRulesFile,mergeClaudeMdContent,mergeCursorRulesContent,mergeMarkerContent,reviewCommandFile,SDK_END_MARKER,SDK_START_MARKER}from"./agents/index.js";export{globalTsFile}from"./globals.js";export{htmlAdminIndexFile}from"./html-admin-index.js";export{generateHtmlIndexFile}from"./html-index.js";export{generateI18nIndexFile}from"./i18n-index.js";export{getLinguiRcFile}from"./lingui-rc.js";export{generateNvmrc,generatePackageJson}from"./package-json.js";export{generatePhoenixConfigFile}from"./phoenix-config.js";export{prettierFile}from"./prettier.js";export{prettierignoreFile}from"./prettierignore.js";export{generateReadme}from"./readme.js";export{robotsTxtContent}from"./robots-txt.js";export{generateApplicationYaml,generateModelYaml}from"./spec-application.js";export{tsconfigFile}from"./tsconfig.js";export{generateWebhookBuildersFile}from"./webhook-builders.js";export{webhookImplementationFile}from"./webhook-implementation.js";export{webhookIndexFile}from"./webhook.index.js";
@@ -1,23 +1,23 @@
1
- import{fileHeader as e}from"./file-header.js";import{generateFlattenCall as o,getImportNames as r}from"./generator-shared.js";export const generateWebhookBuildersFile=(i,t=[])=>{let a=i.useClerk?` clerk: {
1
+ import{fileHeader as e}from"./file-header.js";import{generateModuleEntries as o,generateModuleList as r,getImportNames as i}from"./generator-shared.js";export const generateWebhookBuildersFile=(a,t=[])=>{let l=a.useClerk?` clerk: {
2
2
  apiKey: phx.webhooksEnv.CLERK_API_KEY,
3
3
  authorizedParties: [phx.webhooksEnv.FRONTEND_URL, phx.webhooksEnv.RESOURCES_URL],
4
4
  jwtSecret: phx.webhooksEnv.JWT_SECRET_BASE64,
5
5
  oauthClientId: phx.webhooksEnv.OAUTH_PROVIDER_CLIENT_ID,
6
6
  oauthClientSecret: phx.webhooksEnv.OAUTH_PROVIDER_CLIENT_SECRET,
7
7
  oauthProviderBaseUrl: phx.webhooksEnv.OAUTH_PROVIDER_BASE_URL,
8
- },`:"",l=r(t,"handlers"),h=t.map((e,o)=>{let r=e.replace(/\.tsx?$/,"");return`import ${l[o]} from '../../src/${r}.js'`}).join("\n"),n=t.length>0,s=o(l),u=n?`
9
- .withHandlers(${s})`:"";return`${e}
8
+ },`:"",h=i(t,"handlers"),n=t.map((e,o)=>{let r=e.replace(/\.tsx?$/,"");return`import ${h[o]} from '../../src/${r}.js'`}).join("\n"),s=t.length>0,u=r(o(t,"handlers")),d=s?`
9
+ .withHandlers(${u})`:"";return`${e}
10
10
  import { createDomainWebhook } from '@salsita-ai/sdk/webhook'
11
11
 
12
12
  import { configuratorBuilder } from '../domain.js'
13
13
  import { createI18n } from '../i18n.js'
14
- ${h?`
15
- ${h}
14
+ ${n?`
15
+ ${n}
16
16
  `:""}
17
17
  const webhookConfiguratorBuilder = configuratorBuilder
18
18
  .withDefaultEnvs({
19
19
  isDev: phx.webhooksEnv.IS_DEV,
20
- })${u}
20
+ })${d}
21
21
 
22
22
  export const {
23
23
  authHandlerBuilder,
@@ -30,7 +30,7 @@ export const {
30
30
  } = createDomainWebhook({
31
31
  configuratorBuilder: webhookConfiguratorBuilder,
32
32
  createI18n,
33
- ${a}
33
+ ${l}
34
34
  })
35
35
 
36
36
  // @ts-ignore - Initialize the globals
@@ -17,10 +17,11 @@ interface DeploymentData {
17
17
  readonly embeddings: undefined;
18
18
  readonly chat: undefined;
19
19
  /**
20
- * What the deployment registers for the experimental assistant: the GraphQL SDL and prompt generated
21
- * from the `assistant` spec section, with its instructions and AI settings. `undefined` without one.
20
+ * Whether the deployment webhook supplies assistant setup from the resolved spec.
22
21
  */
23
- readonly assistant: DeploymentAssistant | undefined;
22
+ readonly assistant: boolean;
23
+ /** Generated locally for prepare-command diagnostics; never sent to the server. */
24
+ readonly assistantSetup: DeploymentAssistant | undefined;
24
25
  readonly assets: {
25
26
  readonly privateFilePaths: readonly string[];
26
27
  readonly publicFilePaths: readonly string[];
@@ -1,2 +1,2 @@
1
- import{RuntimeReferenceStore as e,buildPhoenixDefinitions as a,parseApplicationFiles as s}from"#package/application-spec";import{getAllPhxDefinitions as i}from"#package/domain";import{readApplicationFiles as t}from"./application-spec-file-reader.js";import{generateAssistantPrompt as o}from"./generate-assistant-prompt.js";import{readProjectAssets as r}from"./read-project-assets.js";import{swcEvalExpressionParser as p,swcModuleAnalyzer as n}from"./swc-module-analyzer.js";export const resolveApplicationSpecDeploymentData=async l=>{let{skipUpload:c,logger:m}=l,d=s({rawProjectFiles:await t({envs:{}}),phxDefinitions:a(i())},{analyzer:n,evalExpressionParser:p,referenceStore:new e,logger:m});if(!d.ok)throw Error(`Failed to parse application spec:
2
- ${d.errors.map(e=>` [${e.code}] ${e.message}`).join("\n")}`);let{configurator:h,admin:u}=d.value.applicationSpec,{configurationSchema:v}=h,f=u.configurationSchema,g=await r(),S=[],F=[],b=[],j=[];c||(S=g.privateAssetFiles,F=g.publicAssetFiles,b=g.privateAssetFilesFullPaths,j=g.publicAssetFilesFullPaths,m.debug(`Scanned assets: ${S.length} private files, ${F.length} public files`));let{appMetadata:A,infra:w}=d.value.applicationSpec,{assistant:k,assistantServerSettings:D}=h;return{schema:{...v.schema},schemaVersion:v.version,adminSchema:{...f.schema},adminSchemaVersion:f.version,applicationVersion:A.applicationVersion,publishedDataHash:h.dataSchemas.publishedDataHash,useAuthHook:A.useAuthHook,aclCanCreate:w.acl.canCreate,embeddings:void 0,chat:void 0,assistant:k&&D?{sdl:k.sdl,prompt:o(k),instructions:D.instructions??void 0,ai:D.ai}:void 0,assets:{privateFilePaths:S,publicFilePaths:F,privateFilesFullPaths:b,publicFilesFullPaths:j}}};
1
+ import{RuntimeReferenceStore as e,buildPhoenixDefinitions as a,parseApplicationFiles as s}from"#package/application-spec";import{generateAssistantPrompt as i,getAllPhxDefinitions as t}from"#package/domain";import{readApplicationFiles as o}from"./application-spec-file-reader.js";import{readProjectAssets as r}from"./read-project-assets.js";import{swcEvalExpressionParser as n,swcModuleAnalyzer as l}from"./swc-module-analyzer.js";export const resolveApplicationSpecDeploymentData=async p=>{let{skipUpload:c,logger:m}=p,u=s({rawProjectFiles:await o({envs:{}}),phxDefinitions:a(t())},{analyzer:l,evalExpressionParser:n,referenceStore:new e,logger:m});if(!u.ok)throw Error(`Failed to parse application spec:
2
+ ${u.errors.map(e=>` [${e.code}] ${e.message}`).join("\n")}`);let{configurator:d,admin:h}=u.value.applicationSpec,{configurationSchema:v}=d,f=h.configurationSchema,S=await r(),g=[],F=[],b=[],A=[];c||(g=S.privateAssetFiles,F=S.publicAssetFiles,b=S.privateAssetFilesFullPaths,A=S.publicAssetFilesFullPaths,m.debug(`Scanned assets: ${g.length} private files, ${F.length} public files`));let{appMetadata:j,infra:w}=u.value.applicationSpec,{assistant:k,assistantServerSettings:D}=d;return{schema:{...v.schema},schemaVersion:v.version,adminSchema:{...f.schema},adminSchemaVersion:f.version,applicationVersion:j.applicationVersion,publishedDataHash:d.dataSchemas.publishedDataHash,useAuthHook:j.useAuthHook,aclCanCreate:w.acl.canCreate,embeddings:void 0,chat:void 0,assistant:null!==k&&null!==D,assistantSetup:k&&D?{sdl:k.sdl,prompt:i(k),instructions:D.instructions??void 0,ai:D.ai}:void 0,assets:{privateFilePaths:g,publicFilePaths:F,privateFilesFullPaths:b,publicFilesFullPaths:A}}};
@@ -1,2 +1,2 @@
1
- import{writeFile as e}from"fs/promises";import{createApiBaseClient as a}from"#package/client";import{resolveApplicationSpecDeploymentData as r}from"../application-spec/index.js";import{formatEnvContent as t,formatEnvLine as i}from"../utils/index.js";export const runPrepareDeploymentCommand=async(s,n)=>{let{logger:o}=n;try{o.step("Preparing deployment");let{apiKey:n,projectKey:l,projectSlug:p,projectRef:c,projectSha:m,environmentSlug:d,outFile:h,skipUpload:u,overrideSchema:f,uploadLinksFile:g,serverUrl:v}=s;o.info(`Preparing deployment for project "${p}", environment "${d}"`);let b=a(v);o.debug(`Using server URL: ${v}`);let y=await r({skipUpload:u,logger:o});if(y.assistant){let{sdl:e,prompt:a,instructions:r}=y.assistant,t=a.length+e.length+(r?.length??0);o.info(`Assistant GraphQL schema:
2
- ${e}`),o.info(`Assistant prompt of this deployment (generated prompt, schema and instructions): ${t} characters`)}o.info("Preparing deployment on server...");let{data:w,error:F}=await b.POST("/environments/prepare",{body:{projectSlug:p,environmentSlug:d,applicationVersion:y.applicationVersion,projectRef:c,projectSha:m,publishedDataHash:y.publishedDataHash,useAuthHook:y.useAuthHook,overrideSchema:f,configurationSchema:{version:y.schemaVersion,schema:y.schema},adminConfigurationSchema:y.adminSchema?{schema:y.adminSchema,version:y.adminSchemaVersion}:void 0,chat:y.chat,embeddings:y.embeddings,assistant:y.assistant,acl:{canCreate:y.aclCanCreate},privateFiles:[...y.assets.privateFilePaths],publicFiles:[...y.assets.publicFilePaths]},headers:{"x-api-key":n,"x-project-key":l,"x-project-slug":p}});if(F)throw Error(`Failed to prepare deployment with server: ${F.message}`);if(!w)throw Error("No data returned from server");o.debug("Deployment prepared on server");let{baseDomain:S,isCustomDomain:P}=w,U=w.environmentVariables,k=w.privateUploadUrls,$=w.publicUploadUrls;if(!U||!k||!$)throw Error("Incomplete data returned from server");try{let a=[t(U),i("BASE_DOMAIN",String(S)),i("IS_CUSTOM_DOMAIN",String(P))].join("\n");await e(h,a+"\n"),o.debug(`Environment variables written to ${h}`)}catch(e){throw Error("Failed to write environment variables to file")}try{if(u)await e(g,JSON.stringify({privateFiles:[],publicFiles:[]},null,2)),o.debug("Upload links file cleared (upload was skipped)");else{let a={privateFiles:[...y.assets.privateFilesFullPaths].map(e=>({localPath:e,uploadUrl:k[e.replace(/^assets\/private\//,"")]})),publicFiles:[...y.assets.publicFilesFullPaths].map(e=>({localPath:e,uploadUrl:$[e.replace(/^assets\/public\//,"")]}))};await e(g,JSON.stringify(a,null,2)),o.debug(`Upload links written to ${g}`),o.info('Run "finish" command to upload files and activate the deployment')}}catch(e){throw Error("Failed to write upload links to file")}o.success("Deployment prepared successfully!")}catch(e){o.error(`Deployment preparation failed: ${e instanceof Error?e.message:String(e)}`,e),process.exit(1)}};
1
+ import{writeFile as e}from"fs/promises";import{createApiBaseClient as t}from"#package/client";import{resolveApplicationSpecDeploymentData as a}from"../application-spec/index.js";import{formatEnvContent as r,formatEnvLine as i}from"../utils/index.js";export const runPrepareDeploymentCommand=async(s,n)=>{let{logger:o}=n;try{o.step("Preparing deployment");let{apiKey:n,projectKey:l,projectSlug:p,projectRef:c,projectSha:m,environmentSlug:d,outFile:h,skipUpload:u,overrideSchema:f,uploadLinksFile:g,serverUrl:v}=s;o.info(`Preparing deployment for project "${p}", environment "${d}"`);let b=t(v);o.debug(`Using server URL: ${v}`);let y=await a({skipUpload:u,logger:o});if(y.assistantSetup){let{sdl:e,prompt:t,instructions:a}=y.assistantSetup,r=t.length+e.length+(a?.length??0);o.info(`Assistant GraphQL schema:
2
+ ${e}`),o.info(`Assistant prompt of this deployment (generated prompt, schema and instructions): ${r} characters`)}o.info("Preparing deployment on server...");let{data:w,error:S}=await b.POST("/environments/prepare",{body:{projectSlug:p,environmentSlug:d,applicationVersion:y.applicationVersion,projectRef:c,projectSha:m,publishedDataHash:y.publishedDataHash,useAuthHook:y.useAuthHook,overrideSchema:f,configurationSchema:{version:y.schemaVersion,schema:y.schema},adminConfigurationSchema:y.adminSchema?{schema:y.adminSchema,version:y.adminSchemaVersion}:void 0,chat:y.chat,embeddings:y.embeddings,...y.assistant?{assistant:!0}:{},acl:{canCreate:y.aclCanCreate},privateFiles:[...y.assets.privateFilePaths],publicFiles:[...y.assets.publicFilePaths]},headers:{"x-api-key":n,"x-project-key":l,"x-project-slug":p}});if(S)throw Error(`Failed to prepare deployment with server: ${S.message}`);if(!w)throw Error("No data returned from server");o.debug("Deployment prepared on server");let{baseDomain:F,isCustomDomain:P}=w,U=w.environmentVariables,k=w.privateUploadUrls,$=w.publicUploadUrls;if(!U||!k||!$)throw Error("Incomplete data returned from server");try{let t=[r(U),i("BASE_DOMAIN",String(F)),i("IS_CUSTOM_DOMAIN",String(P))].join("\n");await e(h,t+"\n"),o.debug(`Environment variables written to ${h}`)}catch(e){throw Error("Failed to write environment variables to file")}try{if(u)await e(g,JSON.stringify({privateFiles:[],publicFiles:[]},null,2)),o.debug("Upload links file cleared (upload was skipped)");else{let t={privateFiles:[...y.assets.privateFilesFullPaths].map(e=>({localPath:e,uploadUrl:k[e.replace(/^assets\/private\//,"")]})),publicFiles:[...y.assets.publicFilesFullPaths].map(e=>({localPath:e,uploadUrl:$[e.replace(/^assets\/public\//,"")]}))};await e(g,JSON.stringify(t,null,2)),o.debug(`Upload links written to ${g}`),o.info('Run "finish" command to upload files and activate the deployment')}}catch(e){throw Error("Failed to write upload links to file")}o.success("Deployment prepared successfully!")}catch(e){o.error(`Deployment preparation failed: ${e instanceof Error?e.message:String(e)}`,e),process.exit(1)}};
@@ -1 +1 @@
1
- import{writeFile as e}from"fs/promises";import{createApiBaseClient as r}from"#package/client";import{resolveApplicationSpecDeploymentData as t}from"../application-spec/index.js";import{formatEnvContent as i,uploadFilesWithPresignedUrls as a}from"../utils/index.js";export const prepareLocalEnvironment=async(o,s)=>{let{logger:n}=s;n.step("Preparing local environment");let{projectKey:l,projectSlug:p,outFile:c,skipUpload:d,overrideSchema:m,serverUrl:h,lambdaUrl:f,environmentSlug:v,apiKey:u}=o;n.info(`Preparing local environment for project "${p}", environment "${v}"`);let y=r(h);n.debug(`Using server URL: ${h}`);let b=await t({skipUpload:d,logger:n});n.info("Preparing a local environment and deployment on the server...");let{data:g,error:w}=await y.POST("/environments/prepare",{body:{projectSlug:p,environmentSlug:v,applicationVersion:b.applicationVersion,publishedDataHash:b.publishedDataHash,useAuthHook:b.useAuthHook,overrideSchema:m,configurationSchema:{version:b.schemaVersion,schema:b.schema},adminConfigurationSchema:b.adminSchema?{schema:b.adminSchema,version:b.adminSchemaVersion}:void 0,chat:b.chat,embeddings:b.embeddings,assistant:b.assistant,acl:{canCreate:b.aclCanCreate},privateFiles:[...b.assets.privateFilePaths],publicFiles:[...b.assets.publicFilePaths]},headers:{"x-api-key":u,"x-project-key":l,"x-project-slug":p}});if(w)throw Error(`Failed to prepare deployment with server: ${w.message}`);if(!g)throw Error("No data returned from server");n.debug("Deployment prepared on server");let E=g.environmentVariables,F=g.privateUploadUrls,P=g.publicUploadUrls,$=E?.DEPLOYMENT_ID;if(!E||!F||!P)throw Error("Incomplete data returned from server");if(!$)throw Error("No deployment ID returned from server");try{await e(c,i(E)+"\n"),n.debug(`Environment variables written to ${c}`)}catch(e){throw Error(`Failed to write environment variables to file at ${c}, please verify you have write permissions to this location.`)}if(d)n.debug("Skipping file upload");else{n.info("Uploading files to S3...");let e={privateFiles:[...b.assets.privateFilesFullPaths].map(e=>{let r=e.replace("assets/private/",""),t=F[r];if(!t)throw Error(`No upload URL provided for private file ${r}, the server did not return a presigned URL for this file, please verify the file exists in the assets/private directory.`);return{localPath:e,uploadUrl:t}}),publicFiles:[...b.assets.publicFilesFullPaths].map(e=>{let r=e.replace("assets/public/",""),t=P[r];if(!t)throw Error(`No upload URL provided for public file ${r}, the server did not return a presigned URL for this file, please verify the file exists in the assets/public directory.`);return{localPath:e,uploadUrl:t}})};await a(e,{logger:n})}n.info("Activating deployment...");let{error:U}=await y.POST("/deployments/{deploymentId}/activate",{params:{path:{deploymentId:$}},headers:{"x-project-key":l,"x-project-slug":p,"x-api-key":u},body:{lambdaUrl:f}});if(U)throw Error(`Failed to activate deployment with server: ${U.message}`);n.info(`Project: ${p}`),n.info(`Environment: ${v}`),n.info(`Deployment ID: ${$}`),n.info(`Lambda URL: ${f}`),n.success("Local environment prepared successfully!")};
1
+ import{writeFile as e}from"fs/promises";import{createApiBaseClient as r}from"#package/client";import{resolveApplicationSpecDeploymentData as t}from"../application-spec/index.js";import{formatEnvContent as i,uploadFilesWithPresignedUrls as a}from"../utils/index.js";export const prepareLocalEnvironment=async(o,s)=>{let{logger:n}=s;n.step("Preparing local environment");let{projectKey:l,projectSlug:p,outFile:c,skipUpload:d,overrideSchema:m,serverUrl:h,lambdaUrl:f,environmentSlug:v,apiKey:u}=o;n.info(`Preparing local environment for project "${p}", environment "${v}"`);let y=r(h);n.debug(`Using server URL: ${h}`);let b=await t({skipUpload:d,logger:n});n.info("Preparing a local environment and deployment on the server...");let{data:g,error:w}=await y.POST("/environments/prepare",{body:{projectSlug:p,environmentSlug:v,applicationVersion:b.applicationVersion,publishedDataHash:b.publishedDataHash,useAuthHook:b.useAuthHook,overrideSchema:m,configurationSchema:{version:b.schemaVersion,schema:b.schema},adminConfigurationSchema:b.adminSchema?{schema:b.adminSchema,version:b.adminSchemaVersion}:void 0,chat:b.chat,embeddings:b.embeddings,...b.assistant?{assistant:!0}:{},acl:{canCreate:b.aclCanCreate},privateFiles:[...b.assets.privateFilePaths],publicFiles:[...b.assets.publicFilePaths]},headers:{"x-api-key":u,"x-project-key":l,"x-project-slug":p}});if(w)throw Error(`Failed to prepare deployment with server: ${w.message}`);if(!g)throw Error("No data returned from server");n.debug("Deployment prepared on server");let E=g.environmentVariables,F=g.privateUploadUrls,P=g.publicUploadUrls,$=E?.DEPLOYMENT_ID;if(!E||!F||!P)throw Error("Incomplete data returned from server");if(!$)throw Error("No deployment ID returned from server");try{await e(c,i(E)+"\n"),n.debug(`Environment variables written to ${c}`)}catch(e){throw Error(`Failed to write environment variables to file at ${c}, please verify you have write permissions to this location.`)}if(d)n.debug("Skipping file upload");else{n.info("Uploading files to S3...");let e={privateFiles:[...b.assets.privateFilesFullPaths].map(e=>{let r=e.replace("assets/private/",""),t=F[r];if(!t)throw Error(`No upload URL provided for private file ${r}, the server did not return a presigned URL for this file, please verify the file exists in the assets/private directory.`);return{localPath:e,uploadUrl:t}}),publicFiles:[...b.assets.publicFilesFullPaths].map(e=>{let r=e.replace("assets/public/",""),t=P[r];if(!t)throw Error(`No upload URL provided for public file ${r}, the server did not return a presigned URL for this file, please verify the file exists in the assets/public directory.`);return{localPath:e,uploadUrl:t}})};await a(e,{logger:n})}n.info("Activating deployment...");let{error:U}=await y.POST("/deployments/{deploymentId}/activate",{params:{path:{deploymentId:$}},headers:{"x-project-key":l,"x-project-slug":p,"x-api-key":u},body:{lambdaUrl:f}});if(U)throw Error(`Failed to activate deployment with server: ${U.message}`);n.info(`Project: ${p}`),n.info(`Environment: ${v}`),n.info(`Deployment ID: ${$}`),n.info(`Lambda URL: ${f}`),n.success("Local environment prepared successfully!")};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node --stack-size=8192
2
- import{mkdir as e,readFile as o,rm as a,writeFile as r}from"node:fs/promises";import{dirname as t,join as i}from"node:path";import{format as s}from"prettier";import{prettierrc as n}from"@salsita-ai/common/prettier";import{buildPhoenixDefinitions as m,generateStandaloneCommonAdminFiles as c,parseCommonAdminSpec as p}from"#package/application-spec";import{getAllPhxDefinitions as l}from"#package/domain";import{swcEvalExpressionParser as d}from"../application-spec/swc-module-analyzer.js";let f=async e=>{try{return await o(e,"utf-8")}catch{return}},w=async(e,o)=>{let a=await s(o,{...n,filepath:e});await f(e)!==a&&await r(e,a)},v="./src/domain/admin-domain/__generated",h=m(l()),u=p(h,{evalExpressionParser:d});if(!u.ok)throw console.error(u.errors),Error("Common admin application spec contains errors");let j=c({enhancedModelImportPaths:{domainModel:"../../core/model.js",model:"./model/index.js",violation:"../../invariants/violation.js"},phxDefinitions:h,spec:u.value,versionImportPaths:{model:"../../../../core/model.js",reflection:"../../../../core/reflection.js"}});await e(v,{recursive:!0}),await Promise.all(j.map(async o=>{let a=i(v,o.path);await e(t(a),{recursive:!0}),await w(a,o.content)})),await a(i(v,"presets.ts"),{force:!0});
2
+ import{mkdir as e,readFile as r,rm as a,writeFile as o}from"node:fs/promises";import{dirname as i,join as t}from"node:path";import{format as n}from"prettier";import{prettierrc as s}from"@salsita-ai/common/prettier";import{buildPhoenixDefinitions as m,generateStandaloneCommonAdminFiles as c,parseCommonAdminSpec as p}from"#package/application-spec";import{getAllPhxDefinitions as l}from"#package/domain";import{swcEvalExpressionParser as d}from"../application-spec/swc-module-analyzer.js";let f=async e=>{try{return await r(e,"utf-8")}catch{return}},w=async(e,r)=>{let a=await n(r,{...s,filepath:e});await f(e)!==a&&await o(e,a)},h="./src/domain/admin-domain/__generated",u=m(l()),v=p(u,{evalExpressionParser:d});if(!v.ok)throw console.error(v.errors),Error("Common admin application spec contains errors");let j=c({enhancedModelImportPaths:{domainModel:"../../core/index.js",model:"./model/index.js",violation:"../../core/index.js"},phxDefinitions:u,spec:v.value,versionImportPaths:{model:"../../../../core/index.js",reflection:"../../../../core/index.js"}});await e(h,{recursive:!0}),await Promise.all(j.map(async r=>{let a=t(h,r.path);await e(i(a),{recursive:!0}),await w(a,r.content)})),await a(t(h,"presets.ts"),{force:!0});
@@ -1,2 +1,2 @@
1
- import{writeFile as e}from"node:fs/promises";import{createApiBaseClient as i}from"#package/client";import{resolveApplicationSpecDeploymentData as t}from"../application-spec/index.js";import{formatEnvContent as r,uploadFilesWithPresignedUrls as a}from"../utils/index.js";import{getDevelopmentCredentialHint as o,getDevelopmentHeaders as s}from"./development-credential.js";export const prepareDevelopmentEnvironment=async(n,l)=>{let{logger:p}=l,{projectSlug:d,environmentSlug:m,serverUrl:c,credential:h,outFile:v,skipUpload:f,overrideSchema:u,projectVersion:g}=n;p.step("Preparing development environment"),p.info(`Preparing development environment for project "${d}", environment "${m}"`);let E=i(c);p.debug(`Using server URL: ${c}`);let b=await t({skipUpload:f,logger:p});p.info("Preparing and activating the development deployment on the server...");let{data:P,error:$}=await E.POST("/environments/development/prepare",{body:{applicationVersion:b.applicationVersion,publishedDataHash:b.publishedDataHash,useAuthHook:b.useAuthHook,overrideSchema:u,configurationSchema:{version:b.schemaVersion,schema:b.schema},adminConfigurationSchema:b.adminSchema?{schema:b.adminSchema,version:b.adminSchemaVersion}:void 0,chat:b.chat,embeddings:b.embeddings,assistant:b.assistant,acl:{canCreate:b.aclCanCreate},privateFiles:[...b.assets.privateFilePaths],publicFiles:[...b.assets.publicFilePaths],sdkVersion:g},headers:s(h,{projectSlug:d,environmentSlug:m})});if($)throw Error(`Failed to prepare development deployment for ${d}/${m} on ${c}: ${$.message}. ${o(h,d)}`);if(!P)throw Error("No data returned from server while preparing the development deployment.");let{environmentVariables:y,privateUploadUrls:w,publicUploadUrls:F}=P;if(f)p.debug("Skipping file upload");else{p.info("Uploading files to S3...");let e={privateFiles:[...b.assets.privateFilesFullPaths].map(e=>{let i=e.replace("assets/private/",""),t=w[i];if(!t)throw Error(`No upload URL provided for private file ${i}, the server did not return a presigned URL for this file, please verify the file exists in the assets/private directory.`);return{localPath:e,uploadUrl:t}}),publicFiles:[...b.assets.publicFilesFullPaths].map(e=>{let i=e.replace("assets/public/",""),t=F[i];if(!t)throw Error(`No upload URL provided for public file ${i}, the server did not return a presigned URL for this file, please verify the file exists in the assets/public directory.`);return{localPath:e,uploadUrl:t}})};await a(e,{logger:p})}try{await e(v,`${r({...y,PHOENIX_PROJECT_SLUG:d,PHOENIX_ENVIRONMENT_SLUG:m,PHOENIX_SERVER_URL:c})}
1
+ import{writeFile as e}from"node:fs/promises";import{createApiBaseClient as i}from"#package/client";import{resolveApplicationSpecDeploymentData as t}from"../application-spec/index.js";import{formatEnvContent as r,uploadFilesWithPresignedUrls as a}from"../utils/index.js";import{getDevelopmentCredentialHint as o,getDevelopmentHeaders as s}from"./development-credential.js";export const prepareDevelopmentEnvironment=async(n,l)=>{let{logger:p}=l,{projectSlug:d,environmentSlug:m,serverUrl:c,credential:h,outFile:v,skipUpload:f,overrideSchema:u,projectVersion:g}=n;p.step("Preparing development environment"),p.info(`Preparing development environment for project "${d}", environment "${m}"`);let E=i(c);p.debug(`Using server URL: ${c}`);let b=await t({skipUpload:f,logger:p});p.info("Preparing and activating the development deployment on the server...");let{data:P,error:$}=await E.POST("/environments/development/prepare",{body:{applicationVersion:b.applicationVersion,publishedDataHash:b.publishedDataHash,useAuthHook:b.useAuthHook,overrideSchema:u,configurationSchema:{version:b.schemaVersion,schema:b.schema},adminConfigurationSchema:b.adminSchema?{schema:b.adminSchema,version:b.adminSchemaVersion}:void 0,chat:b.chat,embeddings:b.embeddings,...b.assistant?{assistant:!0}:{},acl:{canCreate:b.aclCanCreate},privateFiles:[...b.assets.privateFilePaths],publicFiles:[...b.assets.publicFilePaths],sdkVersion:g},headers:s(h,{projectSlug:d,environmentSlug:m})});if($)throw Error(`Failed to prepare development deployment for ${d}/${m} on ${c}: ${$.message}. ${o(h,d)}`);if(!P)throw Error("No data returned from server while preparing the development deployment.");let{environmentVariables:y,privateUploadUrls:w,publicUploadUrls:F}=P;if(f)p.debug("Skipping file upload");else{p.info("Uploading files to S3...");let e={privateFiles:[...b.assets.privateFilesFullPaths].map(e=>{let i=e.replace("assets/private/",""),t=w[i];if(!t)throw Error(`No upload URL provided for private file ${i}, the server did not return a presigned URL for this file, please verify the file exists in the assets/private directory.`);return{localPath:e,uploadUrl:t}}),publicFiles:[...b.assets.publicFilesFullPaths].map(e=>{let i=e.replace("assets/public/",""),t=F[i];if(!t)throw Error(`No upload URL provided for public file ${i}, the server did not return a presigned URL for this file, please verify the file exists in the assets/public directory.`);return{localPath:e,uploadUrl:t}})};await a(e,{logger:p})}try{await e(v,`${r({...y,PHOENIX_PROJECT_SLUG:d,PHOENIX_ENVIRONMENT_SLUG:m,PHOENIX_SERVER_URL:c})}
2
2
  `),p.debug(`Environment variables written to ${v}`)}catch{throw Error(`Failed to write environment variables to file at ${v}, please verify you have write permissions to this location.`)}p.info(`Project: ${d}`),p.info(`Environment: ${m}`),p.info(`Deployment ID: ${y.DEPLOYMENT_ID}`),p.success("Development environment prepared successfully!")};
@@ -1 +1 @@
1
- import{mkdir as e,readFile as t,realpath as i,rename as a,rm as r,writeFile as s}from"node:fs/promises";import{dirname as o,join as n,relative as l,resolve as p,sep as c}from"node:path";import h from"promise-queue";import{z as d}from"zod";import{RawProjectFiles as f,RuntimeReferenceStore as m,TextFile as w,buildPhoenixDefinitions as u,isTextFile as g,parseApplicationFiles as v}from"#package/application-spec";import{getAllPhxDefinitions as y}from"#package/domain";import{readApplicationFiles as b}from"../application-spec/application-spec-file-reader.js";import{generateAssistantPrompt as S}from"../application-spec/generate-assistant-prompt.js";import{swcEvalExpressionParser as F,swcModuleAnalyzer as N}from"../application-spec/swc-module-analyzer.js";let j=".phoenix/variant-recovery.json",k=d.array(d.object({fileName:d.string(),original:d.string().nullable(),applied:d.string().nullable(),previous:d.string().nullable().optional()})),E=e=>!e.includes("\\")&&!e.split("/").some(e=>".."===e||"."===e||""===e)&&(/^spec\/(?!admin\/).+\.yaml$/.test(e)||/^src\/(?:components|transformers|handlers|elements|_[^/]+)\/.+\.tsx?$/.test(e)),M=e=>`Left ${e} as it is: it was edited outside the variant comparison, so restoring the baseline would overwrite that edit. Review the file and remove what the option added to it`,$=async e=>{try{return await t(e,"utf8")}catch(e){if(e instanceof Error&&"code"in e&&"ENOENT"===e.code)return null;throw e}},C=async(t,i)=>{if(null===i)return void await r(t,{force:!0});await e(o(t),{recursive:!0});let n=`${t}.variant-${crypto.randomUUID()}`;try{await s(n,i),await a(n,t)}finally{await r(n,{force:!0})}},R=(e,t)=>{let i=v({rawProjectFiles:e,phxDefinitions:u(y())},{analyzer:N,evalExpressionParser:F,referenceStore:new m,logger:t});if(!i.ok)throw Error(`Cannot apply variant: ${i.errors.map(e=>`[${e.code}] ${e.message}`).join("\n")}`);let{configurator:a,admin:r,appMetadata:s,infra:o,dataSpec:n}=i.value.applicationSpec,l=i.value.categorizedFiles,p=new Set([...l.webhooks,...l.expressions,...l.actions,...l.invariants,...l.migrations,...l.adminMigrations,...l.adminExpressions,...l.adminInvariants,...l.handlers.filter(e=>"pinned"===e.webhookMembership||"named-handler"===e.webhookMembership),...l.components.filter(e=>"pinned"===e.webhookMembership),...l.adminComponents.filter(e=>"pinned"===e.webhookMembership)].flatMap(e=>[e.file.name,...e.deps]));return JSON.stringify({webhookFiles:e.files.filter(g).filter(e=>p.has(e.name)).sort((e,t)=>e.name.localeCompare(t.name)),appMetadata:s,infra:o,dataSpec:n,model:a.latestModel,schema:a.configurationSchema,dataSchemas:a.dataSchemas,adminModel:r.latestModel,adminSchema:r.configurationSchema,assistant:a.assistant?.sdl,assistantSettings:a.assistantServerSettings,assistantPrompt:a.assistant?S(a.assistant):null},(e,t)=>t instanceof Map?[...t.entries()]:t)};export class VariantFileSession{props;queue=new h(1,1/0);applied=new Map;baseline=new Map;contract;settled=!1;constructor(e){for(let t of(this.props=e,e.rawFiles.files))g(t)&&E(t.name)&&this.baseline.set(t.name,t.content);this.contract=R(e.rawFiles,e.logger)}static async create(e){await VariantFileSession.recover(e.projectRoot,e.logger);let t=await b({projectRoot:e.projectRoot,envs:{}});return new VariantFileSession({...e,rawFiles:t})}static async recover(e,t){let i=await $(n(e,j));if(null!==i){for(let a of k.parse(JSON.parse(i))){let i=await VariantFileSession.resolveFile(e,a.fileName),r=await $(i);if(r!==a.applied&&r!==a.original&&r!==a.previous){t.warn(M(a.fileName));continue}await C(i,a.original)}await r(n(e,j),{force:!0})}}static async resolveFile(e,t){if(!E(t))throw Error(`Cannot override ${t}: variants support frontend spec and TypeScript files only. Keep server code, dependencies, environment files and assets unchanged`);let a=await i(e),r=p(a,t),s=r;for(;;)try{let e=await i(s),r=l(a,e);if(".."===r||r.startsWith(`..${c}`))throw Error(`Cannot override ${t}: its symbolic link leaves the project`);if(e!==s)throw Error(`Cannot override ${t}: it uses a symbolic link. Variant edits require regular files so restoration preserves the original file`);break}catch(e){if(!(e instanceof Error&&"code"in e&&"ENOENT"===e.code))throw e;s=o(s)}return r}getFiles(){return[...this.baseline].map(([e,t])=>({fileName:e,content:t}))}apply(e){return this.queue.add(async()=>{if(this.settled)throw Error("This variant comparison has already ended");let t=new Map;for(let i of e){if(await VariantFileSession.resolveFile(this.props.projectRoot,i.fileName),t.has(i.fileName))throw Error(`Cannot apply variant: ${i.fileName} is specified twice`);t.set(i.fileName,i.content)}if(t.size>0){let e=this.props.rawFiles.files.filter(e=>!t.has(e.name));for(let[i,a]of t)null!==a&&e.push(w(i,a));if(R(f(e),this.props.logger)!==this.contract)throw Error("Cannot apply variant: it changes the model, schemas, data or deployment settings. Variants must need no server preparation")}await this.writeTarget(t,"refuse")})}finish(e){return this.queue.add(async()=>{this.settled||(e||await this.writeTarget(new Map,"keep"),await r(n(this.props.projectRoot,j),{force:!0}),this.settled=!0)})}async writeTarget(t,i){let a=new Set([...this.applied.keys(),...t.keys()]);if(0===a.size)return;let r=new Map;for(let e of a){let t=await VariantFileSession.resolveFile(this.props.projectRoot,e),a=this.applied.has(e)?this.applied.get(e):this.baseline.get(e)??null;if(await $(t)===a){r.set(e,t);continue}if("refuse"===i)throw Error(`Cannot switch variant: ${e} was edited outside the preview, and switching would overwrite that edit. Choose the option that is shown, or close the comparison with \`phoenix variants --close\`, which keeps the edit`);this.props.logger.warn(M(e))}let s=[...r.keys()].map(e=>({fileName:e,original:this.baseline.get(e)??null,previous:this.applied.has(e)?this.applied.get(e)??null:this.baseline.get(e)??null,applied:t.has(e)?t.get(e)??null:this.baseline.get(e)??null}));await e(n(this.props.projectRoot,".phoenix"),{recursive:!0}),await C(n(this.props.projectRoot,j),JSON.stringify(s));let o=new Map(this.applied);try{for(let e of s){let t=r.get(e.fileName);void 0!==t&&await C(t,e.applied)}}catch(e){for(let[e,t]of r)await C(t,o.has(e)?o.get(e)??null:this.baseline.get(e)??null);throw await C(n(this.props.projectRoot,j),JSON.stringify([...o].map(([e,t])=>({fileName:e,original:this.baseline.get(e)??null,applied:t})))),e}for(let[e,i]of(this.applied.clear(),t))this.applied.set(e,i);this.props.onFilesChanged(s.map(e=>({fileName:e.fileName,content:e.applied})))}}
1
+ import{mkdir as e,readFile as t,realpath as i,rename as a,rm as r,writeFile as s}from"node:fs/promises";import{dirname as o,join as n,relative as l,resolve as p,sep as c}from"node:path";import h from"promise-queue";import{z as d}from"zod";import{RawProjectFiles as f,RuntimeReferenceStore as m,TextFile as w,buildPhoenixDefinitions as u,isTextFile as g,parseApplicationFiles as v}from"#package/application-spec";import{generateAssistantPrompt as y,getAllPhxDefinitions as b}from"#package/domain";import{readApplicationFiles as S}from"../application-spec/application-spec-file-reader.js";import{swcEvalExpressionParser as F,swcModuleAnalyzer as N}from"../application-spec/swc-module-analyzer.js";let k=".phoenix/variant-recovery.json",j=d.array(d.object({fileName:d.string(),original:d.string().nullable(),applied:d.string().nullable(),previous:d.string().nullable().optional()})),E=e=>!e.includes("\\")&&!e.split("/").some(e=>".."===e||"."===e||""===e)&&(/^spec\/(?!admin\/).+\.yaml$/.test(e)||/^src\/(?:components|transformers|handlers|elements|_[^/]+)\/.+\.tsx?$/.test(e)),M=e=>`Left ${e} as it is: it was edited outside the variant comparison, so restoring the baseline would overwrite that edit. Review the file and remove what the option added to it`,$=async e=>{try{return await t(e,"utf8")}catch(e){if(e instanceof Error&&"code"in e&&"ENOENT"===e.code)return null;throw e}},C=async(t,i)=>{if(null===i)return void await r(t,{force:!0});await e(o(t),{recursive:!0});let n=`${t}.variant-${crypto.randomUUID()}`;try{await s(n,i),await a(n,t)}finally{await r(n,{force:!0})}},R=(e,t)=>{let i=v({rawProjectFiles:e,phxDefinitions:u(b())},{analyzer:N,evalExpressionParser:F,referenceStore:new m,logger:t});if(!i.ok)throw Error(`Cannot apply variant: ${i.errors.map(e=>`[${e.code}] ${e.message}`).join("\n")}`);let{configurator:a,admin:r,appMetadata:s,infra:o,dataSpec:n}=i.value.applicationSpec,l=i.value.categorizedFiles,p=new Set([...l.webhooks,...l.expressions,...l.actions,...l.invariants,...l.migrations,...l.adminMigrations,...l.adminExpressions,...l.adminInvariants,...l.handlers.filter(e=>"pinned"===e.webhookMembership||"named-handler"===e.webhookMembership),...l.components.filter(e=>"pinned"===e.webhookMembership),...l.adminComponents.filter(e=>"pinned"===e.webhookMembership)].flatMap(e=>[e.file.name,...e.deps]));return JSON.stringify({webhookFiles:e.files.filter(g).filter(e=>p.has(e.name)).sort((e,t)=>e.name.localeCompare(t.name)),appMetadata:s,infra:o,dataSpec:n,model:a.latestModel,schema:a.configurationSchema,dataSchemas:a.dataSchemas,adminModel:r.latestModel,adminSchema:r.configurationSchema,assistant:a.assistant?.sdl,assistantSettings:a.assistantServerSettings,assistantPrompt:a.assistant?y(a.assistant):null},(e,t)=>t instanceof Map?[...t.entries()]:t)};export class VariantFileSession{props;queue=new h(1,1/0);applied=new Map;baseline=new Map;contract;settled=!1;constructor(e){for(let t of(this.props=e,e.rawFiles.files))g(t)&&E(t.name)&&this.baseline.set(t.name,t.content);this.contract=R(e.rawFiles,e.logger)}static async create(e){await VariantFileSession.recover(e.projectRoot,e.logger);let t=await S({projectRoot:e.projectRoot,envs:{}});return new VariantFileSession({...e,rawFiles:t})}static async recover(e,t){let i=await $(n(e,k));if(null!==i){for(let a of j.parse(JSON.parse(i))){let i=await VariantFileSession.resolveFile(e,a.fileName),r=await $(i);if(r!==a.applied&&r!==a.original&&r!==a.previous){t.warn(M(a.fileName));continue}await C(i,a.original)}await r(n(e,k),{force:!0})}}static async resolveFile(e,t){if(!E(t))throw Error(`Cannot override ${t}: variants support frontend spec and TypeScript files only. Keep server code, dependencies, environment files and assets unchanged`);let a=await i(e),r=p(a,t),s=r;for(;;)try{let e=await i(s),r=l(a,e);if(".."===r||r.startsWith(`..${c}`))throw Error(`Cannot override ${t}: its symbolic link leaves the project`);if(e!==s)throw Error(`Cannot override ${t}: it uses a symbolic link. Variant edits require regular files so restoration preserves the original file`);break}catch(e){if(!(e instanceof Error&&"code"in e&&"ENOENT"===e.code))throw e;s=o(s)}return r}getFiles(){return[...this.baseline].map(([e,t])=>({fileName:e,content:t}))}apply(e){return this.queue.add(async()=>{if(this.settled)throw Error("This variant comparison has already ended");let t=new Map;for(let i of e){if(await VariantFileSession.resolveFile(this.props.projectRoot,i.fileName),t.has(i.fileName))throw Error(`Cannot apply variant: ${i.fileName} is specified twice`);t.set(i.fileName,i.content)}if(t.size>0){let e=this.props.rawFiles.files.filter(e=>!t.has(e.name));for(let[i,a]of t)null!==a&&e.push(w(i,a));if(R(f(e),this.props.logger)!==this.contract)throw Error("Cannot apply variant: it changes the model, schemas, data or deployment settings. Variants must need no server preparation")}await this.writeTarget(t,"refuse")})}finish(e){return this.queue.add(async()=>{this.settled||(e||await this.writeTarget(new Map,"keep"),await r(n(this.props.projectRoot,k),{force:!0}),this.settled=!0)})}async writeTarget(t,i){let a=new Set([...this.applied.keys(),...t.keys()]);if(0===a.size)return;let r=new Map;for(let e of a){let t=await VariantFileSession.resolveFile(this.props.projectRoot,e),a=this.applied.has(e)?this.applied.get(e):this.baseline.get(e)??null;if(await $(t)===a){r.set(e,t);continue}if("refuse"===i)throw Error(`Cannot switch variant: ${e} was edited outside the preview, and switching would overwrite that edit. Choose the option that is shown, or close the comparison with \`phoenix variants --close\`, which keeps the edit`);this.props.logger.warn(M(e))}let s=[...r.keys()].map(e=>({fileName:e,original:this.baseline.get(e)??null,previous:this.applied.has(e)?this.applied.get(e)??null:this.baseline.get(e)??null,applied:t.has(e)?t.get(e)??null:this.baseline.get(e)??null}));await e(n(this.props.projectRoot,".phoenix"),{recursive:!0}),await C(n(this.props.projectRoot,k),JSON.stringify(s));let o=new Map(this.applied);try{for(let e of s){let t=r.get(e.fileName);void 0!==t&&await C(t,e.applied)}}catch(e){for(let[e,t]of r)await C(t,o.has(e)?o.get(e)??null:this.baseline.get(e)??null);throw await C(n(this.props.projectRoot,k),JSON.stringify([...o].map(([e,t])=>({fileName:e,original:this.baseline.get(e)??null,applied:t})))),e}for(let[e,i]of(this.applied.clear(),t))this.applied.set(e,i);this.props.onFilesChanged(s.map(e=>({fileName:e.fileName,content:e.applied})))}}
@@ -1,8 +1,11 @@
1
- import type { AclConfig, DomainConfig, PersistenceConfig } from '#package/domain';
1
+ import type { AclConfig, AnyDomainComponentOptic, DomainConfig, PersistenceConfig } from '#package/domain';
2
2
  interface DomainApplicationProps {
3
3
  readonly deploymentId: string;
4
4
  readonly persistenceConfig: PersistenceConfig;
5
- readonly domainConfig: DomainConfig<any, any, any, any, any, any>;
5
+ /** The domain config as the runtime spec holds it: component optics already validated, never project modules. */
6
+ readonly domainConfig: Omit<DomainConfig<any, any, any, any, any, any>, 'componentOptics'> & {
7
+ readonly componentOptics: readonly AnyDomainComponentOptic[];
8
+ };
6
9
  readonly canCreate: AclConfig['canCreate'];
7
10
  readonly enableAdminRelease: boolean;
8
11
  }
@@ -1,6 +1,6 @@
1
1
  export declare const useConfiguratorSpec: () => import("../../../domain/index.js").ApplicationConfiguratorSpec;
2
2
  /** The application spec's `assistant` manifest, or nothing when the spec has no `assistant` section. */
3
- export declare const useSpecAssistant: () => import("../../../domain/index.js").AssistantManifest | null;
3
+ export declare const useSpecAssistant: () => Required<import("../../../domain/index.js").AssistantManifest> | null;
4
4
  export declare const useSpecTextLanguages: () => readonly string[];
5
5
  export declare const useSpecHandlerHashes: () => Record<string, string>;
6
6
  export declare const useSpecHandlers: () => readonly import("../../../domain/index.js").HandlerRegistration<any, any>[];
@@ -1,7 +1,7 @@
1
1
  import type { $DomainEntity, ApplicationConfig, DomainEntity, RegistrableTransformer, WebComponentOptions } from '#package/domain';
2
2
  import type { ApplicationRuntime } from '../runtime/react-runtime.js';
3
3
  import { type WebComponentApi } from '../web-component/index.js';
4
- export declare const createMockApplicationRuntime: <ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, CHAT_CONTEXT extends Record<string, unknown>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, ADMIN_ENTITIES extends DomainEntity<string>, ADMIN_ALLOWED_ROOT_ENTITIES extends ADMIN_ENTITIES, ADMIN_$MAP extends Record<ADMIN_ENTITIES['type'], $DomainEntity<ADMIN_ENTITIES>>, ADMIN_NAVIGATION_STATES extends string, ADMIN_VIEW_STATES extends string>(_cfg: ApplicationConfig<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES, CHAT_CONTEXT, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ADMIN_ENTITIES, ADMIN_ALLOWED_ROOT_ENTITIES, ADMIN_$MAP, ADMIN_NAVIGATION_STATES, ADMIN_VIEW_STATES>, mocks: {
4
+ export declare const createMockApplicationRuntime: <ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, CHAT_CONTEXT extends Record<string, unknown>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, ADMIN_ENTITIES extends DomainEntity<string>, ADMIN_ALLOWED_ROOT_ENTITIES extends ADMIN_ENTITIES, ADMIN_$MAP extends Record<ADMIN_ENTITIES['type'], $DomainEntity<ADMIN_ENTITIES>>, ADMIN_NAVIGATION_STATES extends string, ADMIN_VIEW_STATES extends string>(config: ApplicationConfig<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES, CHAT_CONTEXT, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ADMIN_ENTITIES, ADMIN_ALLOWED_ROOT_ENTITIES, ADMIN_$MAP, ADMIN_NAVIGATION_STATES, ADMIN_VIEW_STATES>, mocks: {
5
5
  frontendData: FRONTEND_DATA;
6
6
  publishedData: PUBLISHED_DATA;
7
7
  sessionData: SESSION_DATA;
@@ -1 +1 @@
1
- import{memoOnce as e}from"@salsita-ai/common/utils";import{createDomainRuntime as t,createMockDomainRuntimeServices as o,createMockSessionContext as n}from"#package/domain";import{createCommonServicesSelectors as s}from"../common-services/index.js";import{createDomainApplicationContextSelectors as i}from"../domain-application-context/index.js";import{createIntegrationActions as a,createIntegrationSelectors as r,initializeIntegration as c}from"../integration/index.js";import{createRoutingActions as m,createRoutingSelectors as d,initializeRouting as l}from"../routing/index.js";import{SessionService as p,createSessionRuntimeActions as S,createSessionRuntimeSelectors as g,initializeSessionRuntime as v}from"../session/index.js";import{createMockWebComponentApi as u}from"../web-component/index.js";export const createMockApplicationRuntime=(C,x)=>{var f;let b,y,w,A,D,k,E,I,h,j,R,T,O,L,F,{sessionData:M,mode:U,role:V}=x,z={...C,createTransformers:e=>x.transformers.map(t=>t.transformer.register(e,t.priority??1/0))},q=o(),B=(f={webComponentOptions:x.webComponentOptions??z.mount.options,webComponentApi:x.webComponentApi??u()},w=v(),A=t({config:z,services:q,getExtensionSystems:e=>F[e].getInitializableSystems()}),D=new Set,k=()=>{D.forEach(e=>{e()})},b=c({actions:E=a({setIntegration:e=>{b=e(b),k()}})}),I=r({getState:()=>({integration:b})}),h=m({setRouting:e=>{y=e(y),k()}}),y=l(),j=d({getState:()=>({...A.getState(),routing:y}),actions:h,accessActions:A.actions.access,loadedDataActions:A.actions.loadedData,domainServicesSelectors:A.selectors.domainServices,overridesSelectors:A.selectors.overrides}),R=s({getState:()=>({...A.getState(),session:w}),environmentSelectors:A.selectors.environment,specSelectors:A.selectors.spec,accessSelectors:A.selectors.access,domainServicesSelectors:A.selectors.domainServices,webComponentOptions:f.webComponentOptions,webComponentApi:f.webComponentApi,getSessionService:()=>L(),routingSelectors:j}),T=S({setSessionRuntime:e=>{w=e(w),k()}}),O=g({getState:()=>({...A.getState(),session:w}),sessionContextSelectors:A.selectors.sessionContext}),L=e(()=>new p({getLogger:()=>A.selectors.domainServices.getLogger(),getAnalyticsService:()=>A.selectors.domainServices.getAnalyticsService(),getUnauthenticatedClient:R.getUnauthenticatedClient,environmentSelectors:A.selectors.environment,sessionActions:T,setSessionContext:A.actions.sessionContext.setSessionContext,sessionSelectors:O,specSelectors:A.selectors.spec})),F={configurator:i({applicationType:"configurator",commonServicesSelectors:R,domainServicesSelectors:A.selectors.domainServices,domainContextSelectors:A.selectors.domainContext.configurator,getApplicationRuntimeExtensions:()=>[]}),admin:i({applicationType:"admin",commonServicesSelectors:R,domainServicesSelectors:A.selectors.domainServices,domainContextSelectors:A.selectors.domainContext.admin,getApplicationRuntimeExtensions:()=>[]})},{subscribe:e=>{D.add(e);let t=A.subscribe(e);return()=>{D.delete(e),t()}},getState:()=>({...A.getState(),integration:b,routing:y,session:w}),selectors:{...A.selectors,commonServices:R,integration:I,routing:j,session:O,domainApplicationContext:F},actions:{...A.actions,integration:E,routing:h,session:T}});return B.actions.sessionContext.setSessionContext(n(V,M)),B.actions.access.setConfiguratorAccessInfo({raw:"mock-access-token",viewMode:"read"===U,revisionId:void 0,configurationId:"mock"}),B.actions.domainData.setDomainData({publishedData:x.publishedData,frontendData:x.frontendData,backendData:x.backendData}),B.actions.loadedData.completeConfiguratorLoad({initialRevisionId:"mock-revision",initialEntities:x.entities,modelVersion:z.domain.domainFactory.modelVersion,rootEntityType:x.rootEntityType,schemaIdentity:z.domain.domainFactory}),B};
1
+ import{memoOnce as e}from"@salsita-ai/common/utils";import{createDomainRuntime as t,createMockDomainRuntimeServices as o,createMockSessionContext as n}from"#package/domain";import{createCommonServicesSelectors as s}from"../common-services/index.js";import{createDomainApplicationContextSelectors as i}from"../domain-application-context/index.js";import{createIntegrationActions as a,createIntegrationSelectors as r,initializeIntegration as c}from"../integration/index.js";import{createRoutingActions as m,createRoutingSelectors as d,initializeRouting as p}from"../routing/index.js";import{SessionService as l,createSessionRuntimeActions as S,createSessionRuntimeSelectors as g,initializeSessionRuntime as v}from"../session/index.js";import{createMockWebComponentApi as u}from"../web-component/index.js";export const createMockApplicationRuntime=(f,C)=>{var x;let b,y,w,A,D,k,E,I,h,j,R,T,O,L,F,{sessionData:M,mode:U,role:V}=C,z=o(),q=(x={webComponentOptions:C.webComponentOptions??f.mount.options,webComponentApi:C.webComponentApi??u()},w=v(),A=t({config:f,services:z,getExtensionSystems:e=>F[e].getInitializableSystems()}),D=new Set,k=()=>{D.forEach(e=>{e()})},b=c({actions:E=a({setIntegration:e=>{b=e(b),k()}})}),I=r({getState:()=>({integration:b})}),h=m({setRouting:e=>{y=e(y),k()}}),y=p(),j=d({getState:()=>({...A.getState(),routing:y}),actions:h,accessActions:A.actions.access,loadedDataActions:A.actions.loadedData,domainServicesSelectors:A.selectors.domainServices,overridesSelectors:A.selectors.overrides}),R=s({getState:()=>({...A.getState(),session:w}),environmentSelectors:A.selectors.environment,specSelectors:A.selectors.spec,accessSelectors:A.selectors.access,domainServicesSelectors:A.selectors.domainServices,webComponentOptions:x.webComponentOptions,webComponentApi:x.webComponentApi,getSessionService:()=>L(),routingSelectors:j}),T=S({setSessionRuntime:e=>{w=e(w),k()}}),O=g({getState:()=>({...A.getState(),session:w}),sessionContextSelectors:A.selectors.sessionContext}),L=e(()=>new l({getLogger:()=>A.selectors.domainServices.getLogger(),getAnalyticsService:()=>A.selectors.domainServices.getAnalyticsService(),getUnauthenticatedClient:R.getUnauthenticatedClient,environmentSelectors:A.selectors.environment,sessionActions:T,setSessionContext:A.actions.sessionContext.setSessionContext,sessionSelectors:O,specSelectors:A.selectors.spec})),F={configurator:i({applicationType:"configurator",commonServicesSelectors:R,domainServicesSelectors:A.selectors.domainServices,domainContextSelectors:A.selectors.domainContext.configurator,getApplicationRuntimeExtensions:()=>[]}),admin:i({applicationType:"admin",commonServicesSelectors:R,domainServicesSelectors:A.selectors.domainServices,domainContextSelectors:A.selectors.domainContext.admin,getApplicationRuntimeExtensions:()=>[]})},{subscribe:e=>{D.add(e);let t=A.subscribe(e);return()=>{D.delete(e),t()}},getState:()=>({...A.getState(),integration:b,routing:y,session:w}),selectors:{...A.selectors,commonServices:R,integration:I,routing:j,session:O,domainApplicationContext:F},actions:{...A.actions,integration:E,routing:h,session:T}}),B=q.getState().spec;return q.actions.spec.updateSpec({...B,configurator:{...B.configurator,createTransformers:e=>C.transformers.map(t=>t.transformer.register(e,t.priority??1/0))}}),q.actions.sessionContext.setSessionContext(n(V,M)),q.actions.access.setConfiguratorAccessInfo({raw:"mock-access-token",viewMode:"read"===U,revisionId:void 0,configurationId:"mock"}),q.actions.domainData.setDomainData({publishedData:C.publishedData,frontendData:C.frontendData,backendData:C.backendData}),q.actions.loadedData.completeConfiguratorLoad({initialRevisionId:"mock-revision",initialEntities:C.entities,modelVersion:f.domain.domainFactory.modelVersion,rootEntityType:C.rootEntityType,schemaIdentity:f.domain.domainFactory}),q};
@@ -67,7 +67,7 @@ export declare function createApplicationRuntimeSlices<State extends Application
67
67
  selectAdminPreset: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AnyProductPreset>;
68
68
  selectAdminModelVersion: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, number>;
69
69
  selectThemeOptions: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("@mui/material").ThemeOptions>;
70
- selectAssistant: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AssistantManifest | null>;
70
+ selectAssistant: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, Required<import("#package/domain").AssistantManifest> | null>;
71
71
  selectConfiguratorFactory: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AnyDomainFactory>;
72
72
  selectAdminFactory: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AnyDomainFactory>;
73
73
  selectConfiguratorComponentOptics: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, readonly import("#package/domain").AnyDomainComponentOptic[]>;
@@ -110,7 +110,7 @@ export declare function createApplicationRuntimeSlices<State extends Application
110
110
  getAdminPreset: () => import("#package/domain").AnyProductPreset;
111
111
  getAdminModelVersion: () => number;
112
112
  getThemeOptions: () => import("@mui/material").ThemeOptions;
113
- getAssistant: () => import("#package/domain").AssistantManifest | null;
113
+ getAssistant: () => Required<import("#package/domain").AssistantManifest> | null;
114
114
  getConfiguratorFactory: () => import("#package/domain").AnyDomainFactory;
115
115
  getAdminFactory: () => import("#package/domain").AnyDomainFactory;
116
116
  getConfiguratorComponentOptics: () => readonly import("#package/domain").AnyDomainComponentOptic[];
@@ -727,7 +727,7 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
727
727
  selectAdminPreset: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AnyProductPreset>;
728
728
  selectAdminModelVersion: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, number>;
729
729
  selectThemeOptions: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("@mui/material").ThemeOptions>;
730
- selectAssistant: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AssistantManifest | null>;
730
+ selectAssistant: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, Required<import("#package/domain").AssistantManifest> | null>;
731
731
  selectConfiguratorFactory: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AnyDomainFactory>;
732
732
  selectAdminFactory: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, import("#package/domain").AnyDomainFactory>;
733
733
  selectConfiguratorComponentOptics: import("@salsita-ai/common/utils").Selector<import("#package/domain").SpecSelectorState, readonly import("#package/domain").AnyDomainComponentOptic[]>;
@@ -770,7 +770,7 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
770
770
  getAdminPreset: () => import("#package/domain").AnyProductPreset;
771
771
  getAdminModelVersion: () => number;
772
772
  getThemeOptions: () => import("@mui/material").ThemeOptions;
773
- getAssistant: () => import("#package/domain").AssistantManifest | null;
773
+ getAssistant: () => Required<import("#package/domain").AssistantManifest> | null;
774
774
  getConfiguratorFactory: () => import("#package/domain").AnyDomainFactory;
775
775
  getAdminFactory: () => import("#package/domain").AnyDomainFactory;
776
776
  getConfiguratorComponentOptics: () => readonly import("#package/domain").AnyDomainComponentOptic[];
@@ -44,7 +44,7 @@ declare module '@mui/material/styles' {
44
44
  PhxChat: 'root';
45
45
  PhxChatFooter: 'root' | 'formLayout' | 'input';
46
46
  PhxChatMessage: 'base' | 'assistant' | 'user' | 'widget' | 'error' | 'helper';
47
- PhxAssistantPanel: 'root' | 'header' | 'title' | 'closeButton' | 'thread' | 'greeting' | 'messages' | 'userMessage' | 'assistantMessage' | 'chips' | 'activity' | 'activityIcon' | 'chip' | 'status' | 'notice' | 'newReplyButton' | 'composer' | 'inputFrame' | 'input' | 'sendButton' | 'stopButton' | 'hint';
47
+ PhxAssistantPanel: 'root' | 'header' | 'title' | 'closeButton' | 'thread' | 'greeting' | 'messages' | 'userMessage' | 'assistantMessage' | 'chips' | 'activity' | 'activityIcon' | 'chip' | 'status' | 'separator' | 'earlierButton' | 'notice' | 'newReplyButton' | 'composer' | 'inputFrame' | 'input' | 'sendButton' | 'stopButton' | 'hint';
48
48
  PhxTopNavigation: 'root' | 'stepper' | 'step';
49
49
  PhxListSelector: 'root';
50
50
  PhxListSelectorItem: 'root' | 'radio' | 'title' | 'description' | 'formControlLabel';
@@ -1,4 +1,5 @@
1
1
  import type { I18n } from '@lingui/core';
2
+ import type { DeploymentAssistant } from '@salsita-ai/contracts/assistant';
2
3
  import type { $DomainEntity, ConfiguratorBuilder, DomainEntity } from '#package/domain';
3
4
  export interface ClerkConfig {
4
5
  apiKey: string;
@@ -11,6 +12,13 @@ export interface ClerkConfig {
11
12
  }
12
13
  export interface BuilderDomainContext<ENTITIES extends DomainEntity<string> = never, ALLOWED_ROOT_ENTITIES extends ENTITIES = never, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>> = never, NAVIGATION_STATES extends string = never, VIEW_STATES extends string = never, TOOL_STATES extends string = never, EXPORT_STATES extends string = never, PUBLISHED_DATA extends Record<string, unknown> = never, SESSION_DATA extends Record<string, unknown> = never, FRONTEND_DATA extends Record<string, unknown> = never, ADMIN_ENTITIES extends DomainEntity<string> = never, ADMIN_ALLOWED_ROOT_ENTITIES extends ADMIN_ENTITIES = never, ADMIN_$MAP extends Record<ADMIN_ENTITIES['type'], $DomainEntity<ADMIN_ENTITIES>> = never, ADMIN_NAVIGATION_STATES extends string = never, ADMIN_VIEW_STATES extends string = never, FINALIZE_DATA extends Record<string, unknown> = never, PREFETCHED_FINALIZE_DATA extends Record<string, unknown> = never, FINALIZE_RESULT extends Record<string, unknown> = never, CALLBACK_DATA extends Record<string, unknown> = never, RESOURCE extends string = never> {
13
14
  configuratorBuilder: ConfiguratorBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ADMIN_ENTITIES, ADMIN_ALLOWED_ROOT_ENTITIES, ADMIN_$MAP, ADMIN_NAVIGATION_STATES, ADMIN_VIEW_STATES, FINALIZE_DATA, PREFETCHED_FINALIZE_DATA, FINALIZE_RESULT, CALLBACK_DATA, RESOURCE>;
15
+ /** Server-only settings supplied by the generated webhook bundle. */
16
+ assistantServerSettings?: Pick<DeploymentAssistant, 'instructions' | 'ai'> | null;
17
+ /**
18
+ * Asks a development environment to lock an assistant thread when the setup changes, as every
19
+ * other environment does. The generated webhook bundle sets it from `ASSISTANT_STRICT_THREADS`.
20
+ */
21
+ assistantStrictThreads?: boolean;
14
22
  createI18n: () => I18n;
15
23
  clerk?: ClerkConfig;
16
24
  }
@@ -1,4 +1,4 @@
1
- import type { $DomainEntity, DomainEntity } from '#package/domain';
1
+ import { type $DomainEntity, type DomainEntity } from '#package/domain';
2
2
  import type { FetchBackendDataHandler } from '../backend-data-handler.js';
3
3
  import { type AuthHandler, AuthHandlerBuilder } from './auth-handler-builder.js';
4
4
  import { CallbackBuilder } from './callback-builder.js';
@@ -1 +1 @@
1
- import{initConsoleLogger as e}from"@salsita-ai/common/utils";import{routeWebhookRequests as n}from"@salsita-ai/contracts/webhook";import{AdminFinalizeHandlerBuilder as o}from"./admin-finalize-handler-builder.js";import{AuthHandlerBuilder as t}from"./auth-handler-builder.js";import{CallbackBuilder as i}from"./callback-builder.js";import{ConfiguratorFinalizeHandlerBuilder as a}from"./configurator-finalize-handler-builder.js";import{DynamicResourcesFactory as r}from"./dynamic-resources-factory.js";import{PrefetchBuilder as s}from"./prefetch-builder.js";import{TaskFactory as l}from"./task-factory.js";export class WebhookBuilder{_context;_handlers;constructor(e,n){this._context=e,this._handlers=n}withAuthHook(e){return new WebhookBuilder(this._context,{...this._handlers,onAuth:e})}withConfiguratorFinalize(e){return new WebhookBuilder(this._context,{...this._handlers,...e})}withFetchBackendData(e){return new WebhookBuilder(this._context,{...this._handlers,onFetchBackendData:e})}build(){if(!this._handlers)throw Error("Can not build webhook without any handlers! It would be very dumb!");let t=e(),i=new o(this._context).build();return n({onAuth:void 0!==this._handlers.onAuth?(e,n)=>this._handlers.onAuth(e,{logger:t},n):void 0,admin:{onFinalize:(e,n)=>i(e,{logger:t},n)},configurator:{onFetchBackendData:this._handlers.onFetchBackendData?(e,n)=>this._handlers.onFetchBackendData(e,{logger:t},n):void 0,onFinalize:this._handlers.onFinalize?async(e,n)=>{let o=await this._handlers?.onFetchBackendData?.({deploymentId:e.deploymentId,frontendUrl:e.frontendUrl,frontendData:e.frontendData,sessionRole:e.sessionRole,sessionPayload:e.sessionPayload,publishedAdminRevisionPath:e.publishedAdminRevisionPath,publishedChunkUrls:e.publishedChunkUrls},{logger:t},n);return this._handlers.onFinalize({deploymentId:e.deploymentId,frontendUrl:e.frontendUrl,frontendData:e.frontendData,sessionRole:e.sessionRole,sessionPayload:e.sessionPayload,publishedAdminRevisionPath:e.publishedAdminRevisionPath,publishedChunkUrls:e.publishedChunkUrls,data:e.data,locale:e.locale,configurationId:e.configurationId,entities:e.entities,modelVersion:e.modelVersion,revisionId:e.revisionId,rootEntityType:e.rootEntityType,backendData:o?.backendData},{logger:t},n)}:void 0,onCallback:this._handlers.onCallback?(e,n)=>this._handlers.onCallback(e,{logger:t},n):void 0}},t)}}export const createDomainWebhook=e=>{let n=new t(e),o=new WebhookBuilder(e),d=new l(e),h=new r(e),u=new a(e,[]);return{authHandlerBuilder:n,webhookBuilder:o,taskFactory:d,finalizeHandlerBuilder:u,callbackBuilder:new i(e),dynamicResourcesFactory:h,prefetchBuilder:new s(e)}};
1
+ import{initConsoleLogger as t}from"@salsita-ai/common/utils";import{routeWebhookRequests as e}from"@salsita-ai/contracts/webhook";import{buildAssistantManifest as n,generateAssistantPrompt as o}from"#package/domain";import{AdminFinalizeHandlerBuilder as i}from"./admin-finalize-handler-builder.js";import{AuthHandlerBuilder as s}from"./auth-handler-builder.js";import{CallbackBuilder as a}from"./callback-builder.js";import{ConfiguratorFinalizeHandlerBuilder as r}from"./configurator-finalize-handler-builder.js";import{DynamicResourcesFactory as d}from"./dynamic-resources-factory.js";import{PrefetchBuilder as l}from"./prefetch-builder.js";import{TaskFactory as h}from"./task-factory.js";export class WebhookBuilder{_context;_handlers;constructor(t,e){this._context=t,this._handlers=e}withAuthHook(t){return new WebhookBuilder(this._context,{...this._handlers,onAuth:t})}withConfiguratorFinalize(t){return new WebhookBuilder(this._context,{...this._handlers,...t})}withFetchBackendData(t){return new WebhookBuilder(this._context,{...this._handlers,onFetchBackendData:t})}build(){if(!this._handlers&&!this._context.assistantServerSettings)throw Error("Can not build webhook without any handlers! It would be very dumb!");let s=t(),a=new i(this._context).build();return e({onAuth:this._handlers?.onAuth!==void 0?(t,e)=>this._handlers.onAuth(t,{logger:s},e):void 0,admin:{onFinalize:(t,e)=>a(t,{logger:s},e)},configurator:{onAssistantSetup:this._context.assistantServerSettings?async()=>{let t=this._context.configuratorBuilder.buildConfig().assistant;if(!t)throw Error("Assistant setup operation is not configured for this webhook!");let e=n(t),i=this._context.assistantServerSettings;return{setup:{sdl:e.sdl,prompt:o(e),...i},...this._context.assistantStrictThreads&&{threadLock:"strict"}}}:void 0,onFetchBackendData:this._handlers?.onFetchBackendData?(t,e)=>this._handlers.onFetchBackendData(t,{logger:s},e):void 0,onFinalize:this._handlers?.onFinalize?async(t,e)=>{let n=await this._handlers?.onFetchBackendData?.({deploymentId:t.deploymentId,frontendUrl:t.frontendUrl,frontendData:t.frontendData,sessionRole:t.sessionRole,sessionPayload:t.sessionPayload,publishedAdminRevisionPath:t.publishedAdminRevisionPath,publishedChunkUrls:t.publishedChunkUrls},{logger:s},e);return this._handlers.onFinalize({deploymentId:t.deploymentId,frontendUrl:t.frontendUrl,frontendData:t.frontendData,sessionRole:t.sessionRole,sessionPayload:t.sessionPayload,publishedAdminRevisionPath:t.publishedAdminRevisionPath,publishedChunkUrls:t.publishedChunkUrls,data:t.data,locale:t.locale,configurationId:t.configurationId,entities:t.entities,modelVersion:t.modelVersion,revisionId:t.revisionId,rootEntityType:t.rootEntityType,backendData:n?.backendData},{logger:s},e)}:void 0,onCallback:this._handlers?.onCallback?(t,e)=>this._handlers.onCallback(t,{logger:s},e):void 0}},s)}}export const createDomainWebhook=t=>{let e=new s(t),n=new WebhookBuilder(t),o=new h(t),i=new d(t),c=new r(t,[]);return{authHandlerBuilder:e,webhookBuilder:n,taskFactory:o,finalizeHandlerBuilder:c,callbackBuilder:new a(t),dynamicResourcesFactory:i,prefetchBuilder:new l(t)}};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salsita-ai/sdk",
3
- "version": "0.50.0-develop.68d6fe1d1b",
3
+ "version": "0.50.0-develop.71209819cd",
4
4
  "description": "TypeScript SDK and CLI for building, running, and deploying Phoenix configurator applications.",
5
5
  "keywords": [
6
6
  "salsita",
@@ -292,8 +292,8 @@
292
292
  "yaml": "2.9.0",
293
293
  "yargs": "17.7.2",
294
294
  "zod": "3.25.76",
295
- "@salsita-ai/contracts": "0.50.0-develop.68d6fe1d1b",
296
- "@salsita-ai/common": "0.50.0-develop.68d6fe1d1b"
295
+ "@salsita-ai/common": "0.50.0-develop.71209819cd",
296
+ "@salsita-ai/contracts": "0.50.0-develop.71209819cd"
297
297
  },
298
298
  "devDependencies": {
299
299
  "@clerk/clerk-react": "5.61.8",
@@ -1,10 +0,0 @@
1
- import type { ActionImplementations, ActionTypes } from '../core/action.js';
2
- import type { $DomainEntity, DomainEntity } from '../core/model.js';
3
- /**
4
- * Creates the `implementActions` factory the generated `domain-spec.ts` exposes as
5
- * `phx.domain.implementActions`. A module in `src/actions/` implements any subset of the declared
6
- * actions and gets each parameter and result typed from the spec; a name the spec does not declare
7
- * is a type error, since its implementation would have to be `never`. The generated barrel merges
8
- * the modules and checks that every declared action is implemented.
9
- */
10
- export declare const createActionFactory: <ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, ACTION_TYPES extends ActionTypes>() => <IMPLEMENTATIONS extends Partial<ActionImplementations<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES, ACTION_TYPES>>>(implementations: IMPLEMENTATIONS & Readonly<Record<Exclude<keyof IMPLEMENTATIONS, keyof ACTION_TYPES>, never>>) => IMPLEMENTATIONS;
@@ -1,5 +0,0 @@
1
- export const findActionImplementationConflicts=(e,n)=>{let t=Object.keys(n);return{missing:e.filter(e=>!t.includes(e)),extra:t.filter(n=>!e.includes(n))}};export const prepareActionImplementations=(e,n)=>{let{missing:t,extra:i}=findActionImplementationConflicts(Object.values(e).map(e=>e.name),n);if(0===t.length&&0===i.length)return n;let o=Error("Domain cannot be instantiated because there are conflicts between declared and implemented actions."+(t.length>0?`
2
-
3
- Missing actions: ${t.join(", ")}. Add each to a default export of phx.domain.implementActions({ ... }) in src/actions/.`:"")+(i.length>0?`
4
-
5
- Extra actions: ${i.join(", ")}. Declare each under "actions" in a spec file or remove its implementation.`:"")+"\n");if(t.length>0)throw o;return console.error(o),n};
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as e}from"../core/component.js";import{SystemComponentBuilder as t}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const debugStateComponent=t.component("debugState").withState({type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"],additionalProperties:!1}).withWritableKeys(["enabled"]).build();export const isDebugStateComponentSnapshot=t=>e(t,"singleton",debugStateComponent);export const isSystemDebugStateComponentSnapshot=e(o,"singleton",debugStateComponent);
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const dragStateComponent=e.component("dragState").withState({type:"object",properties:{draggedEntityId:{oneOf:[{type:"string"},{type:"null"}]}},required:["draggedEntityId"],additionalProperties:!1,tsType:"DragStateComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"DragStateComponentState"}]}).withWritableKeys(["draggedEntityId"]).build();export const isDragStateComponentSnapshot=e=>t(e,"singleton",dragStateComponent);export const isSystemDragStateComponentSnapshot=t(o,"singleton",dragStateComponent);
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const exportStateComponent=e.component("exportState").withState({type:"object",properties:{activeState:{type:"string"},exportedEntityId:{oneOf:[{type:"string"},{type:"null"}]}},required:["activeState","exportedEntityId"],additionalProperties:!1}).withWritableKeys(["activeState","exportedEntityId"]).build();export const isExportStateComponentSnapshot=e=>t(e,"singleton",exportStateComponent);export const isSystemExportStateComponentSnapshot=t(o,"singleton",exportStateComponent);
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as e}from"../core/component.js";import{SystemComponentBuilder as t}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const fullscreenStateComponent=t.component("fullscreenState").withState({type:"object",properties:{enabled:{type:"boolean"}},required:["enabled"],additionalProperties:!1}).withWritableKeys(["enabled"]).build();export const isFullscreenStateComponentSnapshot=t=>e(t,"singleton",fullscreenStateComponent);export const isSystemFullscreenStateComponentSnapshot=e(o,"singleton",fullscreenStateComponent);
@@ -1 +0,0 @@
1
- import{isArray as o,isShallowEqual as t}from"@salsita-ai/common/utils";import{areEqualComponentSnapshots as n,isEqualComponentSnapshot as e}from"../core/component.js";export const isEqualGroupedComponentSnapshots=(p,m)=>t(p,m,(t,p)=>t===p||void 0!==t&&void 0!==p&&(o(t)&&o(p)?n(t,p):!(o(t)||o(p))&&e(t,p)));export const groupComponentsByEntityIdAndName=o=>{let t=new Map;return o.forEach(o=>{let n=o.componentInstance.entityId,e=o.componentInstance.componentType.name,p=t.get(n);p||(p={},t.set(n,p));let m=p[e]??[];p[e]=m,m.push(o)}),t};
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const hoverStateComponent=e.component("hoverState").withState({type:"object",properties:{hoveredEntityId:{oneOf:[{type:"string"},{type:"null"}]}},required:["hoveredEntityId"],additionalProperties:!1,tsType:"HoverStateComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"HoverStateComponentState"}]}).withWritableKeys(["hoveredEntityId"]).build();export const isHoverStateComponentSnapshot=e=>t(e,"singleton",hoverStateComponent);export const isSystemHoverStateComponentSnapshot=t(o,"singleton",hoverStateComponent);
@@ -1,2 +0,0 @@
1
- export { SystemComponentBuilder } from './system-component-builder.js';
2
- export * from './domain-component-optic.js';
@@ -1 +0,0 @@
1
- export{SystemComponentBuilder}from"./system-component-builder.js";export*from"./domain-component-optic.js";
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as o}from"./system-component-builder.js";import{systemVirtualEntityId as e}from"./system-virtual-entity.js";export const navigationStateComponent=o.component("navigationState").withState({type:"object",properties:{activeState:{type:"string"},historyStack:{type:"array",items:{type:"string"}}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState","historyStack"]).build();export const isNavigationComponentSnapshot=o=>t(o,"singleton",navigationStateComponent);export const isSystemNavigationComponentSnapshot=t(e,"singleton",navigationStateComponent);
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const selectionStateComponent=e.component("selectionState").withState({type:"object",properties:{selectedEntityId:{type:"string"}},required:["selectedEntityId"],additionalProperties:!1,tsType:"SelectionStateComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"SelectionStateComponentState"}]}).withWritableKeys(["selectedEntityId"]).build();export const isSelectionComponentSnapshot=e=>t(e,"singleton",selectionStateComponent);export const isSystemSelectionComponentSnapshot=t(o,"singleton",selectionStateComponent);
@@ -1 +0,0 @@
1
- import e from"lodash-es/pick.js";import{getCommonPhxDefinitions as t}from"../core/index.js";import{extendedSchemaValidator as i}from"../core/json-schema.js";export class SystemComponentBuilder{name;writableKeys;jsonSchema;constructor(e,t,i){this.name=e,this.writableKeys=t,this.jsonSchema=i}static component(e){return new SystemComponentBuilder(e,[],{type:"object",properties:{},required:[],additionalProperties:!1})}withState(e){return new SystemComponentBuilder(this.name,[],e)}withWritableKeys(e){return new SystemComponentBuilder(this.name,e,this.jsonSchema)}build(){let s=t(),r={...this.jsonSchema,definitions:{...s,...this.jsonSchema.definitions}};return{name:this.name,writableKeys:this.writableKeys,schema:this.jsonSchema,validateState:i.compile(r),validateWritableState:i.compile({...r,properties:e(this.jsonSchema.properties,this.writableKeys),required:this.jsonSchema.required?.filter(e=>this.writableKeys.includes(e))})}}}
@@ -1 +0,0 @@
1
- import{createVirtualEntityId as t}from"../core/model.js";export const systemVirtualEntityId=t("system");
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as o}from"./system-component-builder.js";import{systemVirtualEntityId as e}from"./system-virtual-entity.js";export const toolStateComponent=o.component("toolState").withState({type:"object",properties:{activeState:{type:"string"}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState"]).build();export const isToolStateComponentSnapshot=o=>t(o,"singleton",toolStateComponent);export const isSystemToolStateComponentSnapshot=t(e,"singleton",toolStateComponent);
@@ -1 +0,0 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const viewStateComponent=e.component("viewState").withState({type:"object",properties:{activeState:{type:"string"}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState"]).build();export const isViewComponentSnapshot=e=>t(e,"singleton",viewStateComponent);export const isSystemViewComponentSnapshot=t(o,"singleton",viewStateComponent);