@designcrowd/library.brand-page 6.2.12 → 6.2.13

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 (55) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-BtVKllNQ.js → CreatedOnBrandCrowd-de-de-COhZYMwW.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-CX5V0v8u.js → CreatedOnBrandCrowd-en-us-De5eIVfZ.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CbA02PCL.js → CreatedOnBrandCrowd-es-es-D7Bk2q4d.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-BQAKruBF.js → CreatedOnBrandCrowd-fr-ca-BBCuO0D-.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-BQAKruBF.js → CreatedOnBrandCrowd-fr-fr-BBCuO0D-.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Yk_yzB3s.js → CreatedOnBrandCrowd-pt-br-B5MrGFq-.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Yk_yzB3s.js → CreatedOnBrandCrowd-pt-pt-B5MrGFq-.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-DJZQbPSD.js → CreatedOnDcom-de-de-CJSWCbRg.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-BJvNAa4l.js → CreatedOnDcom-en-us-OO0s0TRW.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CUwB1FRY.js → CreatedOnDcom-es-es-DQX1lZq7.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-CK54U4oh.js → CreatedOnDcom-fr-ca-C5cQ3rla.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DuUNBGrM.js → CreatedOnDcom-fr-fr-UdyUX0b_.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-BfODpFNV.js → CreatedOnDcom-pt-br-C0FiDCQG.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-Cf6u2GCg.js → CreatedOnDcom-pt-pt-CbbnZ7aN.js} +1 -1
  15. package/lib/src/brand-page/models/brand-page-context.model.d.ts +0 -2
  16. package/lib/src/brand-page/models/brand-page-context.model.js +0 -7
  17. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +0 -21
  18. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +0 -21
  19. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +0 -7
  20. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +0 -21
  21. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +0 -21
  22. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +0 -21
  23. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +0 -21
  24. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +0 -21
  25. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +0 -21
  26. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +0 -13
  27. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +2 -9
  28. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.js +0 -20
  29. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +0 -21
  30. package/lib/src/clients/ai-assistant-client.d.ts +1 -6
  31. package/lib/src/clients/ai-assistant-client.js +15 -7
  32. package/lib/src/index.mjs +1 -1
  33. package/lib/src/{lib-kGRlD3_P.js → lib-DgFekeRm.js} +19378 -19392
  34. package/lib/src/shared/background-settings/store/background-settings-store.js +3 -1
  35. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +1 -1
  36. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +1 -1
  37. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +0 -21
  38. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +0 -21
  39. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +0 -21
  40. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +0 -21
  41. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +0 -28
  42. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +1 -22
  43. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +0 -21
  44. package/package.json +1 -1
  45. package/src/brand-page/models/brand-page-context.model.test.ts +38 -0
  46. package/src/brand-page/models/brand-page-context.model.ts +0 -13
  47. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +0 -18
  48. package/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.ts +0 -30
  49. package/src/clients/ai-assistant-client.test.ts +135 -0
  50. package/src/clients/ai-assistant-client.ts +18 -12
  51. package/src/shared/background-settings/store/background-settings-store.ts +3 -1
  52. package/lib/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.d.ts +0 -10
  53. package/lib/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.js +0 -11
  54. package/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.test.ts +0 -82
  55. package/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.ts +0 -19
@@ -2,7 +2,9 @@ import { DEFAULT_MEDIA_OVERLAY_STYLE, GettyVideoMedia, PageStyles, } from '@bran
2
2
  import { BRANDPAGE_SETTINGS_MODES, } from '@brand-page-maker/stores/brandpage-maker/brandpage-maker-store';
3
3
  import { backgroundSettingsTabId } from '../models';
4
4
  import { defineStore } from 'pinia';
5
- import { useUiStore, useVideoStore } from '@brand-page-maker/stores';
5
+ // Direct paths, not the stores barrel: it sits in an import cycle with this store.
6
+ import { useUiStore } from '@brand-page-maker/stores/ui/ui-store';
7
+ import { useVideoStore } from '@brand-page-maker/stores/video/video-store';
6
8
  export const useUiBackgroundSettingsStore = defineStore('uiBackgroundSettings', {
7
9
  state: () => ({
8
10
  backgroundStyles: {
@@ -6,7 +6,7 @@ interface CategoryTab {
6
6
  label: string;
7
7
  }
8
8
  declare const _default: import("vue").DefineComponent<{}, {
9
- mode: import("vue").ComputedRef<"images" | "edit" | "add" | "focusedContentItem">;
9
+ mode: import("vue").ComputedRef<"images" | "add" | "edit" | "focusedContentItem">;
10
10
  activePageId: import("vue").ComputedRef<string>;
11
11
  activeCategoryTab: import("vue").ComputedRef<string>;
12
12
  contentSettingsSelectedItemId: import("vue").ComputedRef<string | null>;
@@ -34,7 +34,7 @@ declare const _default: import("vue").DefineComponent<{}, {
34
34
  selectedItemIndex: import("vue").ComputedRef<number | null>;
35
35
  selectedItemValue: import("vue").ComputedRef<string | null>;
36
36
  contentType: import("vue").ComputedRef<"website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section" | undefined>;
37
- mode: import("vue").ComputedRef<"images" | "edit" | "add" | "focusedContentItem">;
37
+ mode: import("vue").ComputedRef<"images" | "add" | "edit" | "focusedContentItem">;
38
38
  isAdminMaker: import("vue").ComputedRef<boolean>;
39
39
  contentSettingsStore: import("pinia").Store<"uiContentSettings", import("../../store").ContentSettingsState, {
40
40
  contentErrorCount(): number;
@@ -91,13 +91,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
91
91
  isVariation: boolean;
92
92
  isExcluded: boolean;
93
93
  } | undefined;
94
- bp_6136_v2_ai_builder?: {
95
- key: string;
96
- value: string;
97
- isControl: boolean;
98
- isVariation: boolean;
99
- isExcluded: boolean;
100
- } | undefined;
101
94
  };
102
95
  isSubsequentPublish: boolean;
103
96
  isContextualUpgradeModalVisible: boolean;
@@ -173,13 +166,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
173
166
  isVariation: boolean;
174
167
  isExcluded: boolean;
175
168
  } | undefined;
176
- bp_6136_v2_ai_builder?: {
177
- key: string;
178
- value: string;
179
- isControl: boolean;
180
- isVariation: boolean;
181
- isExcluded: boolean;
182
- } | undefined;
183
169
  };
184
170
  isSubsequentPublish: boolean;
185
171
  isContextualUpgradeModalVisible: boolean;
@@ -255,13 +241,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
255
241
  isVariation: boolean;
256
242
  isExcluded: boolean;
257
243
  } | undefined;
258
- bp_6136_v2_ai_builder?: {
259
- key: string;
260
- value: string;
261
- isControl: boolean;
262
- isVariation: boolean;
263
- isExcluded: boolean;
264
- } | undefined;
265
244
  };
266
245
  isSubsequentPublish: boolean;
267
246
  isContextualUpgradeModalVisible: boolean;
@@ -390,13 +390,6 @@ declare const _default: import("vue").DefineComponent<{}, {
390
390
  isVariation: boolean;
391
391
  isExcluded: boolean;
392
392
  } | undefined;
393
- bp_6136_v2_ai_builder?: {
394
- key: string;
395
- value: string;
396
- isControl: boolean;
397
- isVariation: boolean;
398
- isExcluded: boolean;
399
- } | undefined;
400
393
  };
401
394
  isSubsequentPublish: boolean;
402
395
  isContextualUpgradeModalVisible: boolean;
@@ -472,13 +465,6 @@ declare const _default: import("vue").DefineComponent<{}, {
472
465
  isVariation: boolean;
473
466
  isExcluded: boolean;
474
467
  } | undefined;
475
- bp_6136_v2_ai_builder?: {
476
- key: string;
477
- value: string;
478
- isControl: boolean;
479
- isVariation: boolean;
480
- isExcluded: boolean;
481
- } | undefined;
482
468
  };
483
469
  isSubsequentPublish: boolean;
484
470
  isContextualUpgradeModalVisible: boolean;
@@ -554,13 +540,6 @@ declare const _default: import("vue").DefineComponent<{}, {
554
540
  isVariation: boolean;
555
541
  isExcluded: boolean;
556
542
  } | undefined;
557
- bp_6136_v2_ai_builder?: {
558
- key: string;
559
- value: string;
560
- isControl: boolean;
561
- isVariation: boolean;
562
- isExcluded: boolean;
563
- } | undefined;
564
543
  };
565
544
  isSubsequentPublish: boolean;
566
545
  isContextualUpgradeModalVisible: boolean;
@@ -4836,13 +4836,6 @@ declare const _default: import("vue").DefineComponent<{}, {
4836
4836
  isVariation: boolean;
4837
4837
  isExcluded: boolean;
4838
4838
  } | undefined;
4839
- bp_6136_v2_ai_builder?: {
4840
- key: string;
4841
- value: string;
4842
- isControl: boolean;
4843
- isVariation: boolean;
4844
- isExcluded: boolean;
4845
- } | undefined;
4846
4839
  };
4847
4840
  isSubsequentPublish: boolean;
4848
4841
  isContextualUpgradeModalVisible: boolean;
@@ -4918,13 +4911,6 @@ declare const _default: import("vue").DefineComponent<{}, {
4918
4911
  isVariation: boolean;
4919
4912
  isExcluded: boolean;
4920
4913
  } | undefined;
4921
- bp_6136_v2_ai_builder?: {
4922
- key: string;
4923
- value: string;
4924
- isControl: boolean;
4925
- isVariation: boolean;
4926
- isExcluded: boolean;
4927
- } | undefined;
4928
4914
  };
4929
4915
  isSubsequentPublish: boolean;
4930
4916
  isContextualUpgradeModalVisible: boolean;
@@ -5000,13 +4986,6 @@ declare const _default: import("vue").DefineComponent<{}, {
5000
4986
  isVariation: boolean;
5001
4987
  isExcluded: boolean;
5002
4988
  } | undefined;
5003
- bp_6136_v2_ai_builder?: {
5004
- key: string;
5005
- value: string;
5006
- isControl: boolean;
5007
- isVariation: boolean;
5008
- isExcluded: boolean;
5009
- } | undefined;
5010
4989
  };
5011
4990
  isSubsequentPublish: boolean;
5012
4991
  isContextualUpgradeModalVisible: boolean;
@@ -4229,13 +4229,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4229
4229
  isVariation: boolean;
4230
4230
  isExcluded: boolean;
4231
4231
  } | undefined;
4232
- bp_6136_v2_ai_builder?: {
4233
- key: string;
4234
- value: string;
4235
- isControl: boolean;
4236
- isVariation: boolean;
4237
- isExcluded: boolean;
4238
- } | undefined;
4239
4232
  };
4240
4233
  isSubsequentPublish: boolean;
4241
4234
  isContextualUpgradeModalVisible: boolean;
@@ -4311,13 +4304,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4311
4304
  isVariation: boolean;
4312
4305
  isExcluded: boolean;
4313
4306
  } | undefined;
4314
- bp_6136_v2_ai_builder?: {
4315
- key: string;
4316
- value: string;
4317
- isControl: boolean;
4318
- isVariation: boolean;
4319
- isExcluded: boolean;
4320
- } | undefined;
4321
4307
  };
4322
4308
  isSubsequentPublish: boolean;
4323
4309
  isContextualUpgradeModalVisible: boolean;
@@ -4393,13 +4379,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4393
4379
  isVariation: boolean;
4394
4380
  isExcluded: boolean;
4395
4381
  } | undefined;
4396
- bp_6136_v2_ai_builder?: {
4397
- key: string;
4398
- value: string;
4399
- isControl: boolean;
4400
- isVariation: boolean;
4401
- isExcluded: boolean;
4402
- } | undefined;
4403
4382
  };
4404
4383
  isSubsequentPublish: boolean;
4405
4384
  isContextualUpgradeModalVisible: boolean;
@@ -70,13 +70,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
70
70
  isVariation: boolean;
71
71
  isExcluded: boolean;
72
72
  } | undefined;
73
- bp_6136_v2_ai_builder?: {
74
- key: string;
75
- value: string;
76
- isControl: boolean;
77
- isVariation: boolean;
78
- isExcluded: boolean;
79
- } | undefined;
80
73
  }>;
81
74
  brandPageType: import("vue").ComputedRef<"default" | "brandSite" | "brandContact">;
82
75
  isSubsequentPublish: import("vue").ComputedRef<boolean>;
@@ -297,13 +290,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
297
290
  isVariation: boolean;
298
291
  isExcluded: boolean;
299
292
  } | undefined;
300
- bp_6136_v2_ai_builder?: {
301
- key: string;
302
- value: string;
303
- isControl: boolean;
304
- isVariation: boolean;
305
- isExcluded: boolean;
306
- } | undefined;
307
293
  };
308
294
  isSubsequentPublish: boolean;
309
295
  isContextualUpgradeModalVisible: boolean;
@@ -379,13 +365,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
379
365
  isVariation: boolean;
380
366
  isExcluded: boolean;
381
367
  } | undefined;
382
- bp_6136_v2_ai_builder?: {
383
- key: string;
384
- value: string;
385
- isControl: boolean;
386
- isVariation: boolean;
387
- isExcluded: boolean;
388
- } | undefined;
389
368
  };
390
369
  isSubsequentPublish: boolean;
391
370
  isContextualUpgradeModalVisible: boolean;
@@ -461,13 +440,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
461
440
  isVariation: boolean;
462
441
  isExcluded: boolean;
463
442
  } | undefined;
464
- bp_6136_v2_ai_builder?: {
465
- key: string;
466
- value: string;
467
- isControl: boolean;
468
- isVariation: boolean;
469
- isExcluded: boolean;
470
- } | undefined;
471
443
  };
472
444
  isSubsequentPublish: boolean;
473
445
  isContextualUpgradeModalVisible: boolean;
@@ -84,13 +84,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
84
84
  isVariation: boolean;
85
85
  isExcluded: boolean;
86
86
  } | undefined;
87
- bp_6136_v2_ai_builder?: {
88
- key: string;
89
- value: string;
90
- isControl: boolean;
91
- isVariation: boolean;
92
- isExcluded: boolean;
93
- } | undefined;
94
87
  };
95
88
  isSubsequentPublish: boolean;
96
89
  isContextualUpgradeModalVisible: boolean;
@@ -166,13 +159,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
166
159
  isVariation: boolean;
167
160
  isExcluded: boolean;
168
161
  } | undefined;
169
- bp_6136_v2_ai_builder?: {
170
- key: string;
171
- value: string;
172
- isControl: boolean;
173
- isVariation: boolean;
174
- isExcluded: boolean;
175
- } | undefined;
176
162
  };
177
163
  isSubsequentPublish: boolean;
178
164
  isContextualUpgradeModalVisible: boolean;
@@ -248,13 +234,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
248
234
  isVariation: boolean;
249
235
  isExcluded: boolean;
250
236
  } | undefined;
251
- bp_6136_v2_ai_builder?: {
252
- key: string;
253
- value: string;
254
- isControl: boolean;
255
- isVariation: boolean;
256
- isExcluded: boolean;
257
- } | undefined;
258
237
  };
259
238
  isSubsequentPublish: boolean;
260
239
  isContextualUpgradeModalVisible: boolean;
@@ -381,7 +360,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
381
360
  }[]>;
382
361
  selectedTabName: import("vue").ComputedRef<string>;
383
362
  isAdminMaker: import("vue").ComputedRef<boolean>;
384
- contentSettingsMode: import("vue").ComputedRef<"images" | "edit" | "add" | "focusedContentItem">;
363
+ contentSettingsMode: import("vue").ComputedRef<"images" | "add" | "edit" | "focusedContentItem">;
385
364
  contentSettingsSelectedItemId: import("vue").ComputedRef<string | null>;
386
365
  sideBarStore: import("pinia").Store<"uiSideBar", import("../store").SideBarState, {}, {
387
366
  setBrandPageSettingsTabVisibility(payload: {
@@ -731,13 +731,6 @@ declare const _default: import("vue").DefineComponent<{}, {
731
731
  isVariation: boolean;
732
732
  isExcluded: boolean;
733
733
  } | undefined;
734
- bp_6136_v2_ai_builder?: {
735
- key: string;
736
- value: string;
737
- isControl: boolean;
738
- isVariation: boolean;
739
- isExcluded: boolean;
740
- } | undefined;
741
734
  };
742
735
  isSubsequentPublish: boolean;
743
736
  isContextualUpgradeModalVisible: boolean;
@@ -813,13 +806,6 @@ declare const _default: import("vue").DefineComponent<{}, {
813
806
  isVariation: boolean;
814
807
  isExcluded: boolean;
815
808
  } | undefined;
816
- bp_6136_v2_ai_builder?: {
817
- key: string;
818
- value: string;
819
- isControl: boolean;
820
- isVariation: boolean;
821
- isExcluded: boolean;
822
- } | undefined;
823
809
  };
824
810
  isSubsequentPublish: boolean;
825
811
  isContextualUpgradeModalVisible: boolean;
@@ -895,13 +881,6 @@ declare const _default: import("vue").DefineComponent<{}, {
895
881
  isVariation: boolean;
896
882
  isExcluded: boolean;
897
883
  } | undefined;
898
- bp_6136_v2_ai_builder?: {
899
- key: string;
900
- value: string;
901
- isControl: boolean;
902
- isVariation: boolean;
903
- isExcluded: boolean;
904
- } | undefined;
905
884
  };
906
885
  isSubsequentPublish: boolean;
907
886
  isContextualUpgradeModalVisible: boolean;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "6.2.12",
4
+ "version": "6.2.13",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -0,0 +1,38 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import {
3
+ AB_TEST_KEYS,
4
+ getAbTestResults,
5
+ type AbTest,
6
+ } from './brand-page-context.model';
7
+
8
+ // BP-6193 locked in BP-6136 (V2 AI builder): the editor no longer recognises
9
+ // this arm, whatever value bc-net sends.
10
+ describe('BP-6136 arm no longer parses', () => {
11
+ test.each(['bp-6136-variation-1', 'bp-6136-control', 'bp-6136-excluded'])(
12
+ '%s yields no AbTest entry',
13
+ (value) => {
14
+ expect(
15
+ getAbTestResults({
16
+ 'bc-bp-6136-v2-ai-builder': value,
17
+ } as unknown as AbTest),
18
+ ).toEqual({});
19
+ },
20
+ );
21
+
22
+ test('the BP-3926 key still parses when BP-6136 arrives alongside it', () => {
23
+ expect(
24
+ getAbTestResults({
25
+ [AB_TEST_KEYS.BP_3926_FREEMIUM_WATERMARK]: 'bc-bp-3926-variation-1',
26
+ 'bc-bp-6136-v2-ai-builder': 'bp-6136-variation-1',
27
+ } as unknown as AbTest),
28
+ ).toEqual({
29
+ bp_3926_freemium_watermark: {
30
+ key: AB_TEST_KEYS.BP_3926_FREEMIUM_WATERMARK,
31
+ value: 'bc-bp-3926-variation-1',
32
+ isControl: false,
33
+ isVariation: true,
34
+ isExcluded: false,
35
+ },
36
+ });
37
+ });
38
+ });
@@ -48,14 +48,10 @@ export interface AbTestResult {
48
48
 
49
49
  export const AB_TEST_KEYS = {
50
50
  BP_3926_FREEMIUM_WATERMARK: 'bc-bp-3926-freemium-cta-in-website-editor',
51
- // V1 (control) vs V2 (variation-1) AI website builder, sent by bc-net in the editor
52
- // payload at load. Key must match `Bp6136V2AiBuilderStrategy.CampaignKey`.
53
- BP_6136_V2_AI_BUILDER: 'bc-bp-6136-v2-ai-builder',
54
51
  };
55
52
 
56
53
  export interface AbTest {
57
54
  bp_3926_freemium_watermark?: AbTestResult;
58
- bp_6136_v2_ai_builder?: AbTestResult;
59
55
  }
60
56
 
61
57
  export const MEDIA_SIZES = {
@@ -136,14 +132,5 @@ export const getAbTestResults = (abtestKeyValues: AbTest): AbTest => {
136
132
  );
137
133
  }
138
134
 
139
- // AB Test - V1 vs V2 AI website builder
140
-
141
- if (abtestKeyValues[AB_TEST_KEYS.BP_6136_V2_AI_BUILDER]) {
142
- abTests.bp_6136_v2_ai_builder = getValueType(
143
- AB_TEST_KEYS.BP_6136_V2_AI_BUILDER,
144
- abtestKeyValues[AB_TEST_KEYS.BP_6136_V2_AI_BUILDER],
145
- );
146
- }
147
-
148
135
  return abTests;
149
136
  };
@@ -37,7 +37,6 @@ import { useHistoryStore } from '../../stores/history/history-store';
37
37
  import { useUndoRedoFlag } from '../useUndoRedoFlag';
38
38
  import { useBrandPageMakerUserStore } from '../../stores/user/user-store';
39
39
  import { useAiMetadataBuilder } from './useAiMetadataBuilder';
40
- import { aiBuilderAgentTypeForArm } from './ai-builder-experiment';
41
40
  import {
42
41
  pickErrorMessage,
43
42
  pickWsErrorMessage,
@@ -530,16 +529,6 @@ export function useAiWebsiteBuilderChat(): UseAiChatResult {
530
529
  ? 'premium'
531
530
  : 'free';
532
531
 
533
- if (!aiThreadStore.threadId) {
534
- // The A/B arm bc-net bucketed at editor load decides which builder owns the
535
- // new thread; the message and tool-result calls below reuse it.
536
- aiThreadStore.setAgentType(
537
- aiBuilderAgentTypeForArm(
538
- containerStore.abTests.bp_6136_v2_ai_builder,
539
- ),
540
- );
541
- }
542
-
543
532
  let buildResponse;
544
533
 
545
534
  if (!aiThreadStore.threadId) {
@@ -547,7 +536,6 @@ export function useAiWebsiteBuilderChat(): UseAiChatResult {
547
536
  message,
548
537
  websiteContext,
549
538
  websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
550
- agentType: aiThreadStore.agentType,
551
539
  userPlan,
552
540
  connectionId,
553
541
  ...buildAttributionFields(),
@@ -559,7 +547,6 @@ export function useAiWebsiteBuilderChat(): UseAiChatResult {
559
547
  message,
560
548
  websiteContext,
561
549
  websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
562
- agentType: aiThreadStore.agentType,
563
550
  userPlan,
564
551
  connectionId,
565
552
  ...buildAttributionFields(),
@@ -763,15 +750,10 @@ export function useAiWebsiteBuilderChat(): UseAiChatResult {
763
750
  retryCount,
764
751
  });
765
752
 
766
- // Tool submissions must go to the SAME agent that ran the thread
767
- // (AI QA 2026-07-05 T19: a mismatched agentType routes tool results
768
- // to a service with no state for the thread and fails the build).
769
- // The thread store holds this thread's agent (A/B arm: V1 control, V2 variation-1).
770
753
  const submitResult = await client.submitToolResultsBuildAsync(
771
754
  aiThreadStore.threadId!,
772
755
  {
773
756
  toolCalls: toolResults,
774
- agentType: aiThreadStore.agentType,
775
757
  connectionId,
776
758
  retryCount,
777
759
  userPlan,
@@ -1,9 +1,5 @@
1
1
  import { defineStore } from 'pinia';
2
2
  import { ref } from 'vue';
3
- import {
4
- AI_ASSISTANT_AGENT_TYPES,
5
- type AiAssistantAgentType,
6
- } from '../../../clients/ai-assistant-client';
7
3
 
8
4
  export const useAiWebsiteBuilderThreadStore = defineStore(
9
5
  'aiWebsiteBuilderThread',
@@ -18,14 +14,6 @@ export const useAiWebsiteBuilderThreadStore = defineStore(
18
14
  const promptText = ref<string>('');
19
15
  const stopGeneration = ref<(() => void) | null>(null);
20
16
 
21
- // Which builder this thread talks to. V1 (control) is the default, what production
22
- // runs today; the chat composable sets V2 for the variation-1 arm when a thread
23
- // starts (aiBuilderAgentTypeForArm). Every send site reads it, because tool results
24
- // must reach the agent that owns the thread (AI QA 2026-07-05 T19).
25
- const agentType = ref<AiAssistantAgentType>(
26
- AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
27
- );
28
-
29
17
  // Bumped on every reset so consumers (useAiWebsiteBuilderChat) can react
30
18
  // without watching `messages`, which would loop with its own deep watch.
31
19
  const resetToken = ref<number>(0);
@@ -47,22 +35,6 @@ export const useAiWebsiteBuilderThreadStore = defineStore(
47
35
  resetToken.value += 1;
48
36
  };
49
37
 
50
- const setAgentType = (type: AiAssistantAgentType) => {
51
- if (agentType.value === type) {
52
- return;
53
- }
54
-
55
- const hadThread = threadId.value !== null;
56
-
57
- agentType.value = type;
58
-
59
- // V1 and V2 threads are not interchangeable, so a thread already running on
60
- // the other agent is dropped. Before the first prompt there is nothing to drop.
61
- if (hadThread) {
62
- reset();
63
- }
64
- };
65
-
66
38
  return {
67
39
  threadId,
68
40
  runId,
@@ -73,8 +45,6 @@ export const useAiWebsiteBuilderThreadStore = defineStore(
73
45
  buildSectionsCompleted,
74
46
  promptText,
75
47
  stopGeneration,
76
- agentType,
77
- setAgentType,
78
48
  resetToken,
79
49
  reset,
80
50
  };
@@ -0,0 +1,135 @@
1
+ import axios from 'axios';
2
+ import { createPinia, setActivePinia } from 'pinia';
3
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
4
+ import {
5
+ getInstance,
6
+ getWebsiteCreateThreadEndpoint,
7
+ getWebsiteSendMessageEndpoint,
8
+ getWebsiteToolSubmissionEndpoint,
9
+ type WebsiteCreateThreadRequest,
10
+ type WebsiteSendMessageRequest,
11
+ type WebsiteToolSubmissionRequest,
12
+ type WebsiteCreateThreadBuildRequest,
13
+ type WebsiteSendMessageBuildRequest,
14
+ } from './ai-assistant-client';
15
+
16
+ vi.mock('axios');
17
+
18
+ const THREAD_ID = 'thread-1';
19
+
20
+ beforeEach(() => {
21
+ setActivePinia(createPinia());
22
+ vi.clearAllMocks();
23
+ vi.mocked(axios.post).mockResolvedValue({
24
+ data: { threadId: THREAD_ID, buildId: 'build-1' },
25
+ headers: {},
26
+ } as any);
27
+ });
28
+
29
+ // BP-6193: the client, not the caller, names the agent — tool results sent to a
30
+ // different agent than the one running the thread fail the build
31
+ // (ai-v2-tool-submission-routing.md).
32
+ describe('AiAssistantClient — every website call names the V2 builder', () => {
33
+ test('the three build methods post agentType: V2', async () => {
34
+ const client = getInstance();
35
+
36
+ await client.createWebsiteThreadBuildAsync({
37
+ message: 'hello',
38
+ connectionId: 'conn-1',
39
+ } as WebsiteCreateThreadBuildRequest);
40
+ await client.sendWebsiteMessageBuildAsync(THREAD_ID, {
41
+ message: 'hello',
42
+ connectionId: 'conn-1',
43
+ } as WebsiteSendMessageBuildRequest);
44
+ await client.submitToolResultsBuildAsync(THREAD_ID, {
45
+ toolCalls: [],
46
+ } as WebsiteToolSubmissionRequest);
47
+
48
+ vi.mocked(axios.post).mock.calls.forEach(([, body]) => {
49
+ expect(body).toMatchObject({ agentType: 'website_builder_v2' });
50
+ });
51
+ });
52
+
53
+ test('the three unused V1-era methods also post agentType: V2', async () => {
54
+ const client = getInstance();
55
+
56
+ await client.createWebsiteThreadAndSendMessageAsync({
57
+ message: 'hello',
58
+ } as WebsiteCreateThreadRequest);
59
+ await client.sendWebsiteMessageAsync(THREAD_ID, {
60
+ message: 'hello',
61
+ } as WebsiteSendMessageRequest);
62
+ await client.submitWebsiteToolCallOutputAsync(THREAD_ID, {
63
+ toolCalls: [],
64
+ } as WebsiteToolSubmissionRequest);
65
+
66
+ vi.mocked(axios.post).mock.calls.forEach(([, body]) => {
67
+ expect(body).toMatchObject({ agentType: 'website_builder_v2' });
68
+ });
69
+ });
70
+
71
+ test('a caller-supplied agentType cannot override V2', async () => {
72
+ const client = getInstance();
73
+
74
+ await client.createWebsiteThreadBuildAsync({
75
+ message: 'hello',
76
+ connectionId: 'conn-1',
77
+ agentType: 'website_builder',
78
+ } as never);
79
+
80
+ const [, body] = vi.mocked(axios.post).mock.calls[0];
81
+
82
+ expect(body).toMatchObject({ agentType: 'website_builder_v2' });
83
+ });
84
+
85
+ test('each method posts to its own endpoint and keeps the caller fields', async () => {
86
+ const client = getInstance();
87
+
88
+ await client.createWebsiteThreadBuildAsync({
89
+ message: 'hello',
90
+ connectionId: 'conn-1',
91
+ userPlan: 'premium',
92
+ locale: 'en-US',
93
+ } as WebsiteCreateThreadBuildRequest);
94
+ await client.sendWebsiteMessageBuildAsync(THREAD_ID, {
95
+ message: 'follow-up',
96
+ connectionId: 'conn-1',
97
+ userPlan: 'free',
98
+ locale: 'en-US',
99
+ } as WebsiteSendMessageBuildRequest);
100
+ await client.submitToolResultsBuildAsync(THREAD_ID, {
101
+ toolCalls: [{ toolId: 't1', success: 'success' }],
102
+ connectionId: 'conn-1',
103
+ retryCount: 1,
104
+ userPlan: 'free',
105
+ locale: 'en-US',
106
+ } as WebsiteToolSubmissionRequest);
107
+
108
+ const calls = vi.mocked(axios.post).mock.calls;
109
+
110
+ expect(calls[0][0]).toBe(getWebsiteCreateThreadEndpoint());
111
+ expect(calls[0][1]).toMatchObject({
112
+ message: 'hello',
113
+ connectionId: 'conn-1',
114
+ userPlan: 'premium',
115
+ locale: 'en-US',
116
+ });
117
+
118
+ expect(calls[1][0]).toBe(getWebsiteSendMessageEndpoint(THREAD_ID));
119
+ expect(calls[1][1]).toMatchObject({
120
+ message: 'follow-up',
121
+ connectionId: 'conn-1',
122
+ userPlan: 'free',
123
+ locale: 'en-US',
124
+ });
125
+
126
+ expect(calls[2][0]).toBe(getWebsiteToolSubmissionEndpoint(THREAD_ID));
127
+ expect(calls[2][1]).toMatchObject({
128
+ toolCalls: [{ toolId: 't1', success: 'success' }],
129
+ connectionId: 'conn-1',
130
+ retryCount: 1,
131
+ userPlan: 'free',
132
+ locale: 'en-US',
133
+ });
134
+ });
135
+ });