@designcrowd/library.brand-page 5.17.6 → 5.17.7

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 (172) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-BI2KuOEF.js → CreatedOnBrandCrowd-de-de-BUQFMhZb.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BYLJCjLJ.js → CreatedOnBrandCrowd-en-us-QS-5r4XI.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-Y_D6cuGE.js → CreatedOnBrandCrowd-es-es-CP2iH-n0.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CqCBRjYh.js → CreatedOnBrandCrowd-fr-ca-qfD4NmQZ.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CqCBRjYh.js → CreatedOnBrandCrowd-fr-fr-qfD4NmQZ.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Bt0YF6DA.js → CreatedOnBrandCrowd-pt-br-CfmaB7zE.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Bt0YF6DA.js → CreatedOnBrandCrowd-pt-pt-CfmaB7zE.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-CEk8FBEG.js → CreatedOnDcom-de-de-BxSUWfGN.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DWw4Tm2L.js → CreatedOnDcom-en-us-CSeUdR6v.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-DpG-8o98.js → CreatedOnDcom-es-es-g7rCfAtP.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-CEla7RmR.js → CreatedOnDcom-fr-ca-Bh_BTb-O.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DRXeVTlV.js → CreatedOnDcom-fr-fr-Clgd_Ujm.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-Bzu_phZc.js → CreatedOnDcom-pt-br-Dlgk0myX.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DWax8Er7.js → CreatedOnDcom-pt-pt-B14APfrn.js} +1 -1
  15. package/lib/src/brand-page/models/brand-page-context.model.d.ts +2 -1
  16. package/lib/src/brand-page/models/brand-page-context.model.js +5 -0
  17. package/lib/src/brand-page/models/index.d.ts +1 -0
  18. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +62 -2
  19. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +1 -0
  20. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +60 -2
  21. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +30 -1
  22. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +60 -2
  23. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +60 -2
  24. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +60 -2
  25. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +60 -2
  26. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +60 -2
  27. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +60 -2
  28. package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.js +3 -1
  29. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -1
  30. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +6 -6
  31. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.d.ts +2 -0
  32. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +258 -0
  33. package/lib/src/brand-page-maker/constants/sidebar-constant.d.ts +1 -0
  34. package/lib/src/brand-page-maker/constants/sidebar-constant.js +8 -0
  35. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +16 -0
  36. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.js +14 -0
  37. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +62 -3
  38. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +2 -0
  39. package/lib/src/brand-page-maker/stores/index.d.ts +1 -0
  40. package/lib/src/brand-page-maker/stores/index.js +1 -0
  41. package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.d.ts +2 -0
  42. package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.js +9 -0
  43. package/lib/src/clients/ai-assistant-client.d.ts +8 -0
  44. package/lib/src/clients/ai-assistant-client.js +11 -1
  45. package/lib/src/composables/useSnapshot.js +33 -0
  46. package/lib/src/css/library.brand-page-brandCrowd.min.css +19 -6
  47. package/lib/src/css/library.brand-page-brandPage.min.css +19 -6
  48. package/lib/src/css/library.brand-page-designCom.min.css +19 -6
  49. package/lib/src/css/library.brand-page-preview.min.css +19 -6
  50. package/lib/src/index.d.ts +1 -0
  51. package/lib/src/index.mjs +42 -41
  52. package/lib/src/{lib-DODSa6QK.js → lib-pOkCQP0J.js} +28820 -26841
  53. package/lib/src/lib.js +1 -0
  54. package/lib/src/metadata-builder/ai-metadata-executor.d.ts +1 -1
  55. package/lib/src/metadata-builder/ai-metadata-executor.js +68 -7
  56. package/lib/src/metadata-builder/builders/add-page-builder.d.ts +14 -0
  57. package/lib/src/metadata-builder/builders/add-page-builder.js +66 -0
  58. package/lib/src/metadata-builder/builders/remove-page-builder.d.ts +13 -0
  59. package/lib/src/metadata-builder/builders/remove-page-builder.js +50 -0
  60. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.d.ts +6 -0
  61. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +17 -0
  62. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.d.ts +6 -0
  63. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +25 -0
  64. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.d.ts +40 -0
  65. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.js +108 -0
  66. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.d.ts +6 -0
  67. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.js +16 -0
  68. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.d.ts +6 -0
  69. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +27 -0
  70. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.d.ts +13 -0
  71. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.js +37 -0
  72. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.d.ts +6 -0
  73. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.js +16 -0
  74. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.d.ts +6 -0
  75. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +76 -0
  76. package/lib/src/metadata-builder/builders/section-builders/image-section-builder.d.ts +6 -0
  77. package/lib/src/metadata-builder/builders/section-builders/image-section-builder.js +16 -0
  78. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.d.ts +6 -0
  79. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +158 -0
  80. package/lib/src/metadata-builder/builders/section-builders/index.d.ts +17 -0
  81. package/lib/src/metadata-builder/builders/section-builders/index.js +17 -0
  82. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.d.ts +6 -0
  83. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +17 -0
  84. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.d.ts +6 -0
  85. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +16 -0
  86. package/lib/src/metadata-builder/builders/section-builders/move-section-builder.d.ts +15 -0
  87. package/lib/src/metadata-builder/builders/section-builders/move-section-builder.js +62 -0
  88. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.d.ts +6 -0
  89. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +16 -0
  90. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.d.ts +6 -0
  91. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +162 -0
  92. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.d.ts +6 -0
  93. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +50 -0
  94. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.d.ts +6 -0
  95. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +133 -0
  96. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.d.ts +6 -0
  97. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +154 -0
  98. package/lib/src/metadata-builder/builders/section-content-factory.d.ts +3 -0
  99. package/lib/src/metadata-builder/builders/section-content-factory.js +13 -0
  100. package/lib/src/metadata-builder/builders/section-field-maps.d.ts +12 -0
  101. package/lib/src/metadata-builder/builders/section-field-maps.js +180 -0
  102. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +11 -0
  103. package/lib/src/metadata-builder/builders/section-field-utils.js +109 -0
  104. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +6 -0
  105. package/lib/src/metadata-builder/helpers/rte.helpers.js +16 -1
  106. package/lib/src/metadata-builder/metadata-executor.js +71 -1
  107. package/lib/src/metadata-builder/models.d.ts +54 -0
  108. package/lib/src/metadata-builder/models.js +58 -0
  109. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +51 -3
  110. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +110 -13
  111. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +285 -0
  112. package/lib/src/metadata-builder/parsers/section-tool-arguments.js +7 -0
  113. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +60 -2
  114. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +60 -2
  115. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +60 -2
  116. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +60 -2
  117. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +90 -3
  118. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +61 -2
  119. package/lib/src/shared/side-bar/components/SideBar.mixin.js +6 -0
  120. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +60 -2
  121. package/lib/src/utils/minify-brand-page-metadata.d.ts +22 -0
  122. package/lib/src/utils/minify-brand-page-metadata.js +344 -0
  123. package/package.json +1 -1
  124. package/src/brand-page/models/brand-page-context.model.ts +12 -3
  125. package/src/brand-page/models/index.ts +1 -0
  126. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +80 -0
  127. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +4 -0
  128. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +9 -2
  129. package/src/brand-page-maker/composables/ai-chat/useAiChat.ts +4 -1
  130. package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +6 -6
  131. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +363 -0
  132. package/src/brand-page-maker/constants/sidebar-constant.ts +8 -0
  133. package/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.ts +19 -0
  134. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +3 -1
  135. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +4 -0
  136. package/src/brand-page-maker/stores/index.ts +1 -0
  137. package/src/brand-page-maker/stores/snapshot/snapshot-store.ts +12 -0
  138. package/src/clients/ai-assistant-client.ts +17 -1
  139. package/src/composables/useSnapshot.ts +47 -0
  140. package/src/lib.ts +4 -0
  141. package/src/metadata-builder/ai-metadata-executor.ts +116 -26
  142. package/src/metadata-builder/builders/add-page-builder.ts +98 -0
  143. package/src/metadata-builder/builders/remove-page-builder.ts +83 -0
  144. package/src/metadata-builder/builders/section-builders/about-section-builder.ts +28 -0
  145. package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +45 -0
  146. package/src/metadata-builder/builders/section-builders/base-section-builder.ts +160 -0
  147. package/src/metadata-builder/builders/section-builders/button-section-builder.ts +24 -0
  148. package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +43 -0
  149. package/src/metadata-builder/builders/section-builders/delete-section-builder.ts +63 -0
  150. package/src/metadata-builder/builders/section-builders/divider-section-builder.ts +27 -0
  151. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +111 -0
  152. package/src/metadata-builder/builders/section-builders/image-section-builder.ts +24 -0
  153. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +223 -0
  154. package/src/metadata-builder/builders/section-builders/index.ts +21 -0
  155. package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +29 -0
  156. package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +27 -0
  157. package/src/metadata-builder/builders/section-builders/move-section-builder.ts +100 -0
  158. package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +27 -0
  159. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +231 -0
  160. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +79 -0
  161. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +194 -0
  162. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +234 -0
  163. package/src/metadata-builder/builders/section-content-factory.ts +20 -0
  164. package/src/metadata-builder/builders/section-field-maps.ts +235 -0
  165. package/src/metadata-builder/builders/section-field-utils.ts +157 -0
  166. package/src/metadata-builder/helpers/rte.helpers.ts +23 -1
  167. package/src/metadata-builder/metadata-executor.ts +96 -4
  168. package/src/metadata-builder/models.ts +62 -0
  169. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +141 -17
  170. package/src/metadata-builder/parsers/section-tool-arguments.ts +417 -0
  171. package/src/shared/side-bar/components/SideBar.mixin.ts +10 -0
  172. package/src/utils/minify-brand-page-metadata.ts +407 -0
@@ -10,6 +10,26 @@ import {
10
10
  } from './models';
11
11
  import { UpdateContentTextBuilder } from './builders/update-content-text-builder';
12
12
  import { UpdateContentTextStyleBuilder } from './builders/update-content-text-style-builder';
13
+ import {
14
+ BannerSectionBuilder,
15
+ AboutSectionBuilder,
16
+ ContactFormBuilder,
17
+ DividerSectionBuilder,
18
+ TextSectionBuilder,
19
+ TestimonialSectionBuilder,
20
+ ImagesSectionBuilder,
21
+ ShapesSectionBuilder,
22
+ SocialLinksBuilder,
23
+ ImageGalleryBuilder,
24
+ ProfileSectionBuilder,
25
+ MailingListSectionBuilder,
26
+ ImageSectionBuilder,
27
+ ButtonSectionBuilder,
28
+ DeleteSectionBuilder,
29
+ MoveSectionBuilder,
30
+ } from './builders/section-builders';
31
+ import { AddPageBuilder } from './builders/add-page-builder';
32
+ import { RemovePageBuilder } from './builders/remove-page-builder';
13
33
  import type { Logger } from './logger';
14
34
 
15
35
  type BuilderConstructor = new (
@@ -21,6 +41,68 @@ type BuilderConstructor = new (
21
41
  const getBuilderRegistry = (): Record<BuilderType, BuilderConstructor> => ({
22
42
  [BUILDER_TYPES.UPDATE_CONTENT_TEXT]: UpdateContentTextBuilder,
23
43
  [BUILDER_TYPES.UPDATE_CONTENT_TEXT_STYLE]: UpdateContentTextStyleBuilder,
44
+
45
+ // Section builders (create)
46
+ [BUILDER_TYPES.CREATE_BANNER_SECTION]: BannerSectionBuilder,
47
+ [BUILDER_TYPES.CREATE_ABOUT_SECTION]: AboutSectionBuilder,
48
+ [BUILDER_TYPES.CREATE_CONTACT_FORM]: ContactFormBuilder,
49
+ [BUILDER_TYPES.CREATE_DIVIDER_SECTION]: DividerSectionBuilder,
50
+ [BUILDER_TYPES.CREATE_TEXT]: TextSectionBuilder,
51
+ [BUILDER_TYPES.CREATE_TESTIMONIAL_SECTION]: TestimonialSectionBuilder,
52
+ [BUILDER_TYPES.CREATE_IMAGES_SECTION]: ImagesSectionBuilder,
53
+ [BUILDER_TYPES.CREATE_SHAPES_SECTION]: ShapesSectionBuilder,
54
+ [BUILDER_TYPES.CREATE_SOCIAL_LINKS]: SocialLinksBuilder,
55
+ [BUILDER_TYPES.CREATE_IMAGE_GALLERY]: ImageGalleryBuilder,
56
+ [BUILDER_TYPES.CREATE_PROFILE]: ProfileSectionBuilder,
57
+ [BUILDER_TYPES.CREATE_MAILING_LIST]: MailingListSectionBuilder,
58
+ [BUILDER_TYPES.CREATE_IMAGE]: ImageSectionBuilder,
59
+ [BUILDER_TYPES.CREATE_GENERAL_LINK]: ButtonSectionBuilder,
60
+ [BUILDER_TYPES.CREATE_WEBSITE]: ButtonSectionBuilder,
61
+ [BUILDER_TYPES.CREATE_EMAIL]: ButtonSectionBuilder,
62
+ [BUILDER_TYPES.CREATE_PHONE]: ButtonSectionBuilder,
63
+ [BUILDER_TYPES.CREATE_FACEBOOK]: ButtonSectionBuilder,
64
+ [BUILDER_TYPES.CREATE_X]: ButtonSectionBuilder,
65
+ [BUILDER_TYPES.CREATE_INSTAGRAM]: ButtonSectionBuilder,
66
+ [BUILDER_TYPES.CREATE_YOUTUBE]: ButtonSectionBuilder,
67
+ [BUILDER_TYPES.CREATE_LINKEDIN]: ButtonSectionBuilder,
68
+ [BUILDER_TYPES.CREATE_PINTEREST]: ButtonSectionBuilder,
69
+ [BUILDER_TYPES.CREATE_TWITCH]: ButtonSectionBuilder,
70
+ [BUILDER_TYPES.CREATE_TIKTOK]: ButtonSectionBuilder,
71
+
72
+ // Section builders (update)
73
+ [BUILDER_TYPES.UPDATE_BANNER_SECTION]: BannerSectionBuilder,
74
+ [BUILDER_TYPES.UPDATE_ABOUT_SECTION]: AboutSectionBuilder,
75
+ [BUILDER_TYPES.UPDATE_CONTACT_FORM]: ContactFormBuilder,
76
+ [BUILDER_TYPES.UPDATE_DIVIDER_SECTION]: DividerSectionBuilder,
77
+ [BUILDER_TYPES.UPDATE_TEXT]: TextSectionBuilder,
78
+ [BUILDER_TYPES.UPDATE_TESTIMONIAL_SECTION]: TestimonialSectionBuilder,
79
+ [BUILDER_TYPES.UPDATE_IMAGES_SECTION]: ImagesSectionBuilder,
80
+ [BUILDER_TYPES.UPDATE_SHAPES_SECTION]: ShapesSectionBuilder,
81
+ [BUILDER_TYPES.UPDATE_SOCIAL_LINKS]: SocialLinksBuilder,
82
+ [BUILDER_TYPES.UPDATE_IMAGE_GALLERY]: ImageGalleryBuilder,
83
+ [BUILDER_TYPES.UPDATE_PROFILE]: ProfileSectionBuilder,
84
+ [BUILDER_TYPES.UPDATE_MAILING_LIST]: MailingListSectionBuilder,
85
+ [BUILDER_TYPES.UPDATE_IMAGE]: ImageSectionBuilder,
86
+ [BUILDER_TYPES.UPDATE_GENERAL_LINK]: ButtonSectionBuilder,
87
+ [BUILDER_TYPES.UPDATE_WEBSITE]: ButtonSectionBuilder,
88
+ [BUILDER_TYPES.UPDATE_EMAIL]: ButtonSectionBuilder,
89
+ [BUILDER_TYPES.UPDATE_PHONE]: ButtonSectionBuilder,
90
+ [BUILDER_TYPES.UPDATE_FACEBOOK]: ButtonSectionBuilder,
91
+ [BUILDER_TYPES.UPDATE_X]: ButtonSectionBuilder,
92
+ [BUILDER_TYPES.UPDATE_INSTAGRAM]: ButtonSectionBuilder,
93
+ [BUILDER_TYPES.UPDATE_YOUTUBE]: ButtonSectionBuilder,
94
+ [BUILDER_TYPES.UPDATE_LINKEDIN]: ButtonSectionBuilder,
95
+ [BUILDER_TYPES.UPDATE_PINTEREST]: ButtonSectionBuilder,
96
+ [BUILDER_TYPES.UPDATE_TWITCH]: ButtonSectionBuilder,
97
+ [BUILDER_TYPES.UPDATE_TIKTOK]: ButtonSectionBuilder,
98
+
99
+ // Section-level operations
100
+ [BUILDER_TYPES.DELETE_SECTION]: DeleteSectionBuilder,
101
+ [BUILDER_TYPES.MOVE_SECTION]: MoveSectionBuilder,
102
+
103
+ // Page-level operations
104
+ [BUILDER_TYPES.ADD_PAGE]: AddPageBuilder,
105
+ [BUILDER_TYPES.REMOVE_PAGE]: RemovePageBuilder,
24
106
  });
25
107
 
26
108
  let builderRegistry: Record<BuilderType, BuilderConstructor> | null = null;
@@ -28,7 +110,7 @@ let builderRegistry: Record<BuilderType, BuilderConstructor> | null = null;
28
110
  const resolveBuilder = (
29
111
  request: MetadataBuilderRequest,
30
112
  logger?: Logger,
31
- ): BaseMetadataBuilder => {
113
+ ): BaseMetadataBuilder | null => {
32
114
  if (!builderRegistry) {
33
115
  builderRegistry = getBuilderRegistry();
34
116
  }
@@ -36,9 +118,9 @@ const resolveBuilder = (
36
118
  const BuilderClass = builderRegistry[request.type];
37
119
 
38
120
  if (!BuilderClass) {
39
- throw new Error(
40
- `No builder registered for request type: "${request.type}"`,
41
- );
121
+ console.error(`No builder registered for request type: "${request.type}"`);
122
+
123
+ return null;
42
124
  }
43
125
 
44
126
  return new BuilderClass(request, logger);
@@ -57,6 +139,16 @@ export class MetadataExecutor {
57
139
  for (const request of requests) {
58
140
  const builder = resolveBuilder(request, logger);
59
141
 
142
+ if (!builder) {
143
+ results.push({
144
+ request,
145
+ model,
146
+ errors: [`No builder found for request type: "${request.type}"`],
147
+ });
148
+
149
+ continue;
150
+ }
151
+
60
152
  const result = await builder.buildAsync(model);
61
153
 
62
154
  results.push(result);
@@ -4,6 +4,68 @@ import type { Logger } from './logger';
4
4
  export const BUILDER_TYPES = {
5
5
  UPDATE_CONTENT_TEXT: 'update-content-text',
6
6
  UPDATE_CONTENT_TEXT_STYLE: 'update-content-text-style',
7
+
8
+ // Per-section builder types (create)
9
+ CREATE_BANNER_SECTION: 'create-banner-section',
10
+ CREATE_ABOUT_SECTION: 'create-about-section',
11
+ CREATE_CONTACT_FORM: 'create-contact-form',
12
+ CREATE_DIVIDER_SECTION: 'create-divider-section',
13
+ CREATE_TEXT: 'create-text',
14
+ CREATE_TESTIMONIAL_SECTION: 'create-testimonial-section',
15
+ CREATE_IMAGES_SECTION: 'create-images-section',
16
+ CREATE_SHAPES_SECTION: 'create-shapes-section',
17
+ CREATE_SOCIAL_LINKS: 'create-social-links',
18
+ CREATE_IMAGE_GALLERY: 'create-image-gallery',
19
+ CREATE_PROFILE: 'create-profile',
20
+ CREATE_MAILING_LIST: 'create-mailing-list',
21
+ CREATE_IMAGE: 'create-image',
22
+ CREATE_GENERAL_LINK: 'create-general-link',
23
+ CREATE_WEBSITE: 'create-website',
24
+ CREATE_EMAIL: 'create-email',
25
+ CREATE_PHONE: 'create-phone',
26
+ CREATE_FACEBOOK: 'create-facebook',
27
+ CREATE_X: 'create-x',
28
+ CREATE_INSTAGRAM: 'create-instagram',
29
+ CREATE_YOUTUBE: 'create-youtube',
30
+ CREATE_LINKEDIN: 'create-linkedin',
31
+ CREATE_PINTEREST: 'create-pinterest',
32
+ CREATE_TWITCH: 'create-twitch',
33
+ CREATE_TIKTOK: 'create-tiktok',
34
+
35
+ // Per-section builder types (update)
36
+ UPDATE_BANNER_SECTION: 'update-banner-section',
37
+ UPDATE_ABOUT_SECTION: 'update-about-section',
38
+ UPDATE_CONTACT_FORM: 'update-contact-form',
39
+ UPDATE_DIVIDER_SECTION: 'update-divider-section',
40
+ UPDATE_TEXT: 'update-text',
41
+ UPDATE_TESTIMONIAL_SECTION: 'update-testimonial-section',
42
+ UPDATE_IMAGES_SECTION: 'update-images-section',
43
+ UPDATE_SHAPES_SECTION: 'update-shapes-section',
44
+ UPDATE_SOCIAL_LINKS: 'update-social-links',
45
+ UPDATE_IMAGE_GALLERY: 'update-image-gallery',
46
+ UPDATE_PROFILE: 'update-profile',
47
+ UPDATE_MAILING_LIST: 'update-mailing-list',
48
+ UPDATE_IMAGE: 'update-image',
49
+ UPDATE_GENERAL_LINK: 'update-general-link',
50
+ UPDATE_WEBSITE: 'update-website',
51
+ UPDATE_EMAIL: 'update-email',
52
+ UPDATE_PHONE: 'update-phone',
53
+ UPDATE_FACEBOOK: 'update-facebook',
54
+ UPDATE_X: 'update-x',
55
+ UPDATE_INSTAGRAM: 'update-instagram',
56
+ UPDATE_YOUTUBE: 'update-youtube',
57
+ UPDATE_LINKEDIN: 'update-linkedin',
58
+ UPDATE_PINTEREST: 'update-pinterest',
59
+ UPDATE_TWITCH: 'update-twitch',
60
+ UPDATE_TIKTOK: 'update-tiktok',
61
+
62
+ // Section-level operations
63
+ DELETE_SECTION: 'delete-section',
64
+ MOVE_SECTION: 'move-section',
65
+
66
+ // Page-level operations
67
+ ADD_PAGE: 'add-page',
68
+ REMOVE_PAGE: 'remove-page',
7
69
  } as const;
8
70
 
9
71
  export type BuilderType = (typeof BUILDER_TYPES)[keyof typeof BUILDER_TYPES];
@@ -1,19 +1,61 @@
1
1
  import type { AiAssistantToolCall } from '../../clients/ai-assistant-client';
2
+ import type { SectionType } from './section-tool-arguments';
2
3
 
3
- // Tool names
4
+ // Tool names — must match the function names generated by the AI pipeline.
5
+ // Text element tools use camelCase names.
6
+ // Section tools follow the pattern: build_{sectionType}_section
7
+ // where sectionType matches the ContentType value (e.g. 'banner-section', 'profile').
8
+ // The mode ('create' | 'update') is a field in the tool arguments, not the tool name.
4
9
  export const AI_ASSISTANT_TOOL_NAMES = {
10
+ // Text element agent tools
5
11
  UPDATE_TEXT: 'updateText',
6
12
  UPDATE_STYLE: 'updateStyle',
13
+
14
+ // Website builder agent tools — unified build
15
+ BUILD_PROFILE_SECTION: 'build_profile_section',
16
+ BUILD_TEXT_SECTION: 'build_text_section',
17
+ BUILD_IMAGE_SECTION: 'build_image_section',
18
+ BUILD_IMAGE_GALLERY_SECTION: 'build_image-gallery_section',
19
+ BUILD_GENERAL_LINK_SECTION: 'build_general-link_section',
20
+ BUILD_WEBSITE_SECTION: 'build_website_section',
21
+ BUILD_EMAIL_SECTION: 'build_email_section',
22
+ BUILD_PHONE_SECTION: 'build_phone_section',
23
+ BUILD_FACEBOOK_SECTION: 'build_facebook_section',
24
+ BUILD_X_SECTION: 'build_x_section',
25
+ BUILD_INSTAGRAM_SECTION: 'build_instagram_section',
26
+ BUILD_YOUTUBE_SECTION: 'build_youtube_section',
27
+ BUILD_LINKEDIN_SECTION: 'build_linkedin_section',
28
+ BUILD_PINTEREST_SECTION: 'build_pinterest_section',
29
+ BUILD_TWITCH_SECTION: 'build_twitch_section',
30
+ BUILD_TIKTOK_SECTION: 'build_tiktok_section',
31
+ BUILD_SOCIAL_LINKS_SECTION: 'build_social-links_section',
32
+ BUILD_MAILING_LIST_SECTION: 'build_mailing-list_section',
33
+ BUILD_CONTACT_FORM_SECTION: 'build_contact-form_section',
34
+ BUILD_BANNER_SECTION: 'build_banner_section',
35
+ BUILD_ABOUT_SECTION: 'build_about_section',
36
+ BUILD_IMAGES_SECTION: 'build_images_section',
37
+ BUILD_SHAPES_SECTION: 'build_shapes_section',
38
+ BUILD_TESTIMONIAL_SECTION: 'build_testimonial_section',
39
+ BUILD_DIVIDER_SECTION: 'build_divider_section',
40
+
41
+ // Section-level operation tools
42
+ DELETE_SECTION: 'delete_section',
43
+ MOVE_SECTION: 'move_section',
44
+
45
+ // Page-level operation tools
46
+ ADD_PAGE: 'add_page',
47
+ REMOVE_PAGE: 'remove_page',
7
48
  } as const;
8
49
 
9
50
  export type AiAssistantToolName =
10
51
  (typeof AI_ASSISTANT_TOOL_NAMES)[keyof typeof AI_ASSISTANT_TOOL_NAMES];
11
52
 
12
- // Parsed tool call arguments after JSON.parse
53
+ // Unified parsed tool call — covers both text element and section tool calls.
54
+ // The `function` name is the primary identity and routing mechanism.
13
55
  export interface ParsedToolCall {
14
56
  toolId: string;
15
- function: AiAssistantToolName;
16
- arguments: UpdateTextToolArguments | UpdateStyleToolArguments;
57
+ function: string;
58
+ arguments: Record<string, unknown>;
17
59
  usage_type?: 'free' | 'paid';
18
60
  }
19
61
 
@@ -39,23 +81,105 @@ export interface UpdateStyleToolArguments extends BaseArguments {
39
81
  };
40
82
  }
41
83
 
42
- const parseToolCall = (toolCall: AiAssistantToolCall): ParsedToolCall => {
43
- return {
44
- toolId: toolCall.toolId,
45
- function: toolCall.function as AiAssistantToolName,
46
- arguments: JSON.parse(toolCall.arguments),
47
- usage_type: toolCall.usage_type,
48
- };
84
+ // Maps each section tool name to its SectionType.
85
+ // Mode is now determined from the tool arguments, not the tool name.
86
+ export const SECTION_TOOL_MAP: Record<string, { sectionType: SectionType }> = {
87
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_PROFILE_SECTION]: { sectionType: 'profile' },
88
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_TEXT_SECTION]: { sectionType: 'text' },
89
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_IMAGE_SECTION]: { sectionType: 'image' },
90
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_IMAGE_GALLERY_SECTION]: {
91
+ sectionType: 'image-gallery',
92
+ },
93
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_GENERAL_LINK_SECTION]: {
94
+ sectionType: 'general-link',
95
+ },
96
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_WEBSITE_SECTION]: { sectionType: 'website' },
97
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_EMAIL_SECTION]: { sectionType: 'email' },
98
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_PHONE_SECTION]: { sectionType: 'phone' },
99
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_FACEBOOK_SECTION]: { sectionType: 'facebook' },
100
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_X_SECTION]: { sectionType: 'x' },
101
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_INSTAGRAM_SECTION]: {
102
+ sectionType: 'instagram',
103
+ },
104
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_YOUTUBE_SECTION]: { sectionType: 'youtube' },
105
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_LINKEDIN_SECTION]: { sectionType: 'linkedin' },
106
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_PINTEREST_SECTION]: {
107
+ sectionType: 'pinterest',
108
+ },
109
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_TWITCH_SECTION]: { sectionType: 'twitch' },
110
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_TIKTOK_SECTION]: { sectionType: 'tiktok' },
111
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_SOCIAL_LINKS_SECTION]: {
112
+ sectionType: 'social-links',
113
+ },
114
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_MAILING_LIST_SECTION]: {
115
+ sectionType: 'mailing-list',
116
+ },
117
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_CONTACT_FORM_SECTION]: {
118
+ sectionType: 'contact-form',
119
+ },
120
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_BANNER_SECTION]: {
121
+ sectionType: 'banner-section',
122
+ },
123
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_ABOUT_SECTION]: {
124
+ sectionType: 'about-section',
125
+ },
126
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_IMAGES_SECTION]: {
127
+ sectionType: 'images-section',
128
+ },
129
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_SHAPES_SECTION]: {
130
+ sectionType: 'shapes-section',
131
+ },
132
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_TESTIMONIAL_SECTION]: {
133
+ sectionType: 'testimonial-section',
134
+ },
135
+ [AI_ASSISTANT_TOOL_NAMES.BUILD_DIVIDER_SECTION]: {
136
+ sectionType: 'divider-section',
137
+ },
49
138
  };
50
139
 
51
- export const parseAiToolcall = (
52
- aiToolcallResponse: AiAssistantToolCall[],
140
+ export interface DeleteSectionArguments {
141
+ content_id: string;
142
+ }
143
+
144
+ export interface MoveSectionArguments {
145
+ content_id: string;
146
+ position: number;
147
+ target_page_id?: string;
148
+ }
149
+
150
+ export interface AddPageArguments {
151
+ page_id: string;
152
+ page_name: string;
153
+ }
154
+
155
+ export interface RemovePageArguments {
156
+ page_id: string;
157
+ }
158
+
159
+ export const parseToolCalls = (
160
+ toolCalls: AiAssistantToolCall[],
53
161
  ): ParsedToolCall[] => {
54
- if (!aiToolcallResponse || aiToolcallResponse.length === 0) {
162
+ if (!toolCalls || toolCalls.length === 0) {
55
163
  return [];
56
164
  }
57
165
 
58
- return aiToolcallResponse.map((toolCall) => {
59
- return parseToolCall(toolCall);
60
- });
166
+ return toolCalls
167
+ .map((toolCall): ParsedToolCall | null => {
168
+ try {
169
+ return {
170
+ toolId: toolCall.toolId,
171
+ function: toolCall.function,
172
+ arguments: JSON.parse(toolCall.arguments) as Record<string, unknown>,
173
+ usage_type: toolCall.usage_type,
174
+ };
175
+ } catch (error) {
176
+ console.warn(
177
+ `[parseToolCalls] Failed to parse arguments for ${toolCall.function} (${toolCall.toolId}):`,
178
+ error,
179
+ );
180
+
181
+ return null;
182
+ }
183
+ })
184
+ .filter((tc): tc is ParsedToolCall => tc !== null);
61
185
  };