@forgespace/branding-mcp 0.31.0 → 0.55.0

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 (204) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +49 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/branding-core/generators/brand-affiliate.d.ts +4 -0
  6. package/dist/lib/branding-core/generators/brand-affiliate.d.ts.map +1 -0
  7. package/dist/lib/branding-core/generators/brand-affiliate.js +249 -0
  8. package/dist/lib/branding-core/generators/brand-affiliate.js.map +1 -0
  9. package/dist/lib/branding-core/generators/brand-analytics.d.ts +3 -0
  10. package/dist/lib/branding-core/generators/brand-analytics.d.ts.map +1 -0
  11. package/dist/lib/branding-core/generators/brand-analytics.js +208 -0
  12. package/dist/lib/branding-core/generators/brand-analytics.js.map +1 -0
  13. package/dist/lib/branding-core/generators/brand-audio.d.ts +4 -0
  14. package/dist/lib/branding-core/generators/brand-audio.d.ts.map +1 -0
  15. package/dist/lib/branding-core/generators/brand-audio.js +200 -0
  16. package/dist/lib/branding-core/generators/brand-audio.js.map +1 -0
  17. package/dist/lib/branding-core/generators/brand-b2b.d.ts +4 -0
  18. package/dist/lib/branding-core/generators/brand-b2b.d.ts.map +1 -0
  19. package/dist/lib/branding-core/generators/brand-b2b.js +236 -0
  20. package/dist/lib/branding-core/generators/brand-b2b.js.map +1 -0
  21. package/dist/lib/branding-core/generators/brand-chatbot.d.ts +4 -0
  22. package/dist/lib/branding-core/generators/brand-chatbot.d.ts.map +1 -0
  23. package/dist/lib/branding-core/generators/brand-chatbot.js +174 -0
  24. package/dist/lib/branding-core/generators/brand-chatbot.js.map +1 -0
  25. package/dist/lib/branding-core/generators/brand-community.d.ts +3 -0
  26. package/dist/lib/branding-core/generators/brand-community.d.ts.map +1 -0
  27. package/dist/lib/branding-core/generators/brand-community.js +164 -0
  28. package/dist/lib/branding-core/generators/brand-community.js.map +1 -0
  29. package/dist/lib/branding-core/generators/brand-competitive.d.ts +3 -0
  30. package/dist/lib/branding-core/generators/brand-competitive.d.ts.map +1 -0
  31. package/dist/lib/branding-core/generators/brand-competitive.js +274 -0
  32. package/dist/lib/branding-core/generators/brand-competitive.js.map +1 -0
  33. package/dist/lib/branding-core/generators/brand-crisis.d.ts +3 -0
  34. package/dist/lib/branding-core/generators/brand-crisis.d.ts.map +1 -0
  35. package/dist/lib/branding-core/generators/brand-crisis.js +256 -0
  36. package/dist/lib/branding-core/generators/brand-crisis.js.map +1 -0
  37. package/dist/lib/branding-core/generators/brand-customer.d.ts +4 -0
  38. package/dist/lib/branding-core/generators/brand-customer.d.ts.map +1 -0
  39. package/dist/lib/branding-core/generators/brand-customer.js +270 -0
  40. package/dist/lib/branding-core/generators/brand-customer.js.map +1 -0
  41. package/dist/lib/branding-core/generators/brand-ecommerce.d.ts +4 -0
  42. package/dist/lib/branding-core/generators/brand-ecommerce.d.ts.map +1 -0
  43. package/dist/lib/branding-core/generators/brand-ecommerce.js +255 -0
  44. package/dist/lib/branding-core/generators/brand-ecommerce.js.map +1 -0
  45. package/dist/lib/branding-core/generators/brand-fintech.d.ts +3 -0
  46. package/dist/lib/branding-core/generators/brand-fintech.d.ts.map +1 -0
  47. package/dist/lib/branding-core/generators/brand-fintech.js +225 -0
  48. package/dist/lib/branding-core/generators/brand-fintech.js.map +1 -0
  49. package/dist/lib/branding-core/generators/brand-globalisation.d.ts +3 -0
  50. package/dist/lib/branding-core/generators/brand-globalisation.d.ts.map +1 -0
  51. package/dist/lib/branding-core/generators/brand-globalisation.js +222 -0
  52. package/dist/lib/branding-core/generators/brand-globalisation.js.map +1 -0
  53. package/dist/lib/branding-core/generators/brand-influencer.d.ts +4 -0
  54. package/dist/lib/branding-core/generators/brand-influencer.d.ts.map +1 -0
  55. package/dist/lib/branding-core/generators/brand-influencer.js +262 -0
  56. package/dist/lib/branding-core/generators/brand-influencer.js.map +1 -0
  57. package/dist/lib/branding-core/generators/brand-innovation.d.ts +3 -0
  58. package/dist/lib/branding-core/generators/brand-innovation.d.ts.map +1 -0
  59. package/dist/lib/branding-core/generators/brand-innovation.js +229 -0
  60. package/dist/lib/branding-core/generators/brand-innovation.js.map +1 -0
  61. package/dist/lib/branding-core/generators/brand-loyalty.d.ts +4 -0
  62. package/dist/lib/branding-core/generators/brand-loyalty.d.ts.map +1 -0
  63. package/dist/lib/branding-core/generators/brand-loyalty.js +231 -0
  64. package/dist/lib/branding-core/generators/brand-loyalty.js.map +1 -0
  65. package/dist/lib/branding-core/generators/brand-marketplace.d.ts +4 -0
  66. package/dist/lib/branding-core/generators/brand-marketplace.d.ts.map +1 -0
  67. package/dist/lib/branding-core/generators/brand-marketplace.js +251 -0
  68. package/dist/lib/branding-core/generators/brand-marketplace.js.map +1 -0
  69. package/dist/lib/branding-core/generators/brand-newsletter.d.ts +4 -0
  70. package/dist/lib/branding-core/generators/brand-newsletter.d.ts.map +1 -0
  71. package/dist/lib/branding-core/generators/brand-newsletter.js +173 -0
  72. package/dist/lib/branding-core/generators/brand-newsletter.js.map +1 -0
  73. package/dist/lib/branding-core/generators/brand-podcast.d.ts +3 -0
  74. package/dist/lib/branding-core/generators/brand-podcast.d.ts.map +1 -0
  75. package/dist/lib/branding-core/generators/brand-podcast.js +217 -0
  76. package/dist/lib/branding-core/generators/brand-podcast.js.map +1 -0
  77. package/dist/lib/branding-core/generators/brand-saas.d.ts +3 -0
  78. package/dist/lib/branding-core/generators/brand-saas.d.ts.map +1 -0
  79. package/dist/lib/branding-core/generators/brand-saas.js +212 -0
  80. package/dist/lib/branding-core/generators/brand-saas.js.map +1 -0
  81. package/dist/lib/branding-core/generators/brand-seo.d.ts +4 -0
  82. package/dist/lib/branding-core/generators/brand-seo.d.ts.map +1 -0
  83. package/dist/lib/branding-core/generators/brand-seo.js +269 -0
  84. package/dist/lib/branding-core/generators/brand-seo.js.map +1 -0
  85. package/dist/lib/branding-core/generators/brand-subscription.d.ts +4 -0
  86. package/dist/lib/branding-core/generators/brand-subscription.d.ts.map +1 -0
  87. package/dist/lib/branding-core/generators/brand-subscription.js +218 -0
  88. package/dist/lib/branding-core/generators/brand-subscription.js.map +1 -0
  89. package/dist/lib/branding-core/generators/brand-training.d.ts +4 -0
  90. package/dist/lib/branding-core/generators/brand-training.d.ts.map +1 -0
  91. package/dist/lib/branding-core/generators/brand-training.js +261 -0
  92. package/dist/lib/branding-core/generators/brand-training.js.map +1 -0
  93. package/dist/lib/branding-core/generators/brand-video.d.ts +3 -0
  94. package/dist/lib/branding-core/generators/brand-video.d.ts.map +1 -0
  95. package/dist/lib/branding-core/generators/brand-video.js +228 -0
  96. package/dist/lib/branding-core/generators/brand-video.js.map +1 -0
  97. package/dist/lib/branding-core/generators/brand-webinar.d.ts +4 -0
  98. package/dist/lib/branding-core/generators/brand-webinar.d.ts.map +1 -0
  99. package/dist/lib/branding-core/generators/brand-webinar.js +165 -0
  100. package/dist/lib/branding-core/generators/brand-webinar.js.map +1 -0
  101. package/dist/lib/branding-core/index.d.ts +24 -0
  102. package/dist/lib/branding-core/index.d.ts.map +1 -1
  103. package/dist/lib/branding-core/index.js +24 -0
  104. package/dist/lib/branding-core/index.js.map +1 -1
  105. package/dist/lib/types.d.ts +391 -0
  106. package/dist/lib/types.d.ts.map +1 -1
  107. package/dist/tools/generate-brand-affiliate.d.ts +3 -0
  108. package/dist/tools/generate-brand-affiliate.d.ts.map +1 -0
  109. package/dist/tools/generate-brand-affiliate.js +14 -0
  110. package/dist/tools/generate-brand-affiliate.js.map +1 -0
  111. package/dist/tools/generate-brand-analytics.d.ts +3 -0
  112. package/dist/tools/generate-brand-analytics.d.ts.map +1 -0
  113. package/dist/tools/generate-brand-analytics.js +19 -0
  114. package/dist/tools/generate-brand-analytics.js.map +1 -0
  115. package/dist/tools/generate-brand-audio.d.ts +3 -0
  116. package/dist/tools/generate-brand-audio.d.ts.map +1 -0
  117. package/dist/tools/generate-brand-audio.js +14 -0
  118. package/dist/tools/generate-brand-audio.js.map +1 -0
  119. package/dist/tools/generate-brand-b2b.d.ts +3 -0
  120. package/dist/tools/generate-brand-b2b.d.ts.map +1 -0
  121. package/dist/tools/generate-brand-b2b.js +10 -0
  122. package/dist/tools/generate-brand-b2b.js.map +1 -0
  123. package/dist/tools/generate-brand-chatbot.d.ts +3 -0
  124. package/dist/tools/generate-brand-chatbot.d.ts.map +1 -0
  125. package/dist/tools/generate-brand-chatbot.js +10 -0
  126. package/dist/tools/generate-brand-chatbot.js.map +1 -0
  127. package/dist/tools/generate-brand-community.d.ts +3 -0
  128. package/dist/tools/generate-brand-community.d.ts.map +1 -0
  129. package/dist/tools/generate-brand-community.js +14 -0
  130. package/dist/tools/generate-brand-community.js.map +1 -0
  131. package/dist/tools/generate-brand-competitive.d.ts +3 -0
  132. package/dist/tools/generate-brand-competitive.d.ts.map +1 -0
  133. package/dist/tools/generate-brand-competitive.js +14 -0
  134. package/dist/tools/generate-brand-competitive.js.map +1 -0
  135. package/dist/tools/generate-brand-crisis.d.ts +3 -0
  136. package/dist/tools/generate-brand-crisis.d.ts.map +1 -0
  137. package/dist/tools/generate-brand-crisis.js +14 -0
  138. package/dist/tools/generate-brand-crisis.js.map +1 -0
  139. package/dist/tools/generate-brand-customer.d.ts +3 -0
  140. package/dist/tools/generate-brand-customer.d.ts.map +1 -0
  141. package/dist/tools/generate-brand-customer.js +19 -0
  142. package/dist/tools/generate-brand-customer.js.map +1 -0
  143. package/dist/tools/generate-brand-ecommerce.d.ts +3 -0
  144. package/dist/tools/generate-brand-ecommerce.d.ts.map +1 -0
  145. package/dist/tools/generate-brand-ecommerce.js +14 -0
  146. package/dist/tools/generate-brand-ecommerce.js.map +1 -0
  147. package/dist/tools/generate-brand-fintech.d.ts +3 -0
  148. package/dist/tools/generate-brand-fintech.d.ts.map +1 -0
  149. package/dist/tools/generate-brand-fintech.js +14 -0
  150. package/dist/tools/generate-brand-fintech.js.map +1 -0
  151. package/dist/tools/generate-brand-globalisation.d.ts +3 -0
  152. package/dist/tools/generate-brand-globalisation.d.ts.map +1 -0
  153. package/dist/tools/generate-brand-globalisation.js +14 -0
  154. package/dist/tools/generate-brand-globalisation.js.map +1 -0
  155. package/dist/tools/generate-brand-influencer.d.ts +3 -0
  156. package/dist/tools/generate-brand-influencer.d.ts.map +1 -0
  157. package/dist/tools/generate-brand-influencer.js +10 -0
  158. package/dist/tools/generate-brand-influencer.js.map +1 -0
  159. package/dist/tools/generate-brand-innovation.d.ts +3 -0
  160. package/dist/tools/generate-brand-innovation.d.ts.map +1 -0
  161. package/dist/tools/generate-brand-innovation.js +19 -0
  162. package/dist/tools/generate-brand-innovation.js.map +1 -0
  163. package/dist/tools/generate-brand-loyalty.d.ts +3 -0
  164. package/dist/tools/generate-brand-loyalty.d.ts.map +1 -0
  165. package/dist/tools/generate-brand-loyalty.js +14 -0
  166. package/dist/tools/generate-brand-loyalty.js.map +1 -0
  167. package/dist/tools/generate-brand-marketplace.d.ts +3 -0
  168. package/dist/tools/generate-brand-marketplace.d.ts.map +1 -0
  169. package/dist/tools/generate-brand-marketplace.js +14 -0
  170. package/dist/tools/generate-brand-marketplace.js.map +1 -0
  171. package/dist/tools/generate-brand-newsletter.d.ts +3 -0
  172. package/dist/tools/generate-brand-newsletter.d.ts.map +1 -0
  173. package/dist/tools/generate-brand-newsletter.js +14 -0
  174. package/dist/tools/generate-brand-newsletter.js.map +1 -0
  175. package/dist/tools/generate-brand-podcast.d.ts +3 -0
  176. package/dist/tools/generate-brand-podcast.d.ts.map +1 -0
  177. package/dist/tools/generate-brand-podcast.js +10 -0
  178. package/dist/tools/generate-brand-podcast.js.map +1 -0
  179. package/dist/tools/generate-brand-saas.d.ts +3 -0
  180. package/dist/tools/generate-brand-saas.d.ts.map +1 -0
  181. package/dist/tools/generate-brand-saas.js +14 -0
  182. package/dist/tools/generate-brand-saas.js.map +1 -0
  183. package/dist/tools/generate-brand-seo.d.ts +3 -0
  184. package/dist/tools/generate-brand-seo.d.ts.map +1 -0
  185. package/dist/tools/generate-brand-seo.js +14 -0
  186. package/dist/tools/generate-brand-seo.js.map +1 -0
  187. package/dist/tools/generate-brand-subscription.d.ts +3 -0
  188. package/dist/tools/generate-brand-subscription.d.ts.map +1 -0
  189. package/dist/tools/generate-brand-subscription.js +14 -0
  190. package/dist/tools/generate-brand-subscription.js.map +1 -0
  191. package/dist/tools/generate-brand-training.d.ts +3 -0
  192. package/dist/tools/generate-brand-training.d.ts.map +1 -0
  193. package/dist/tools/generate-brand-training.js +14 -0
  194. package/dist/tools/generate-brand-training.js.map +1 -0
  195. package/dist/tools/generate-brand-video.d.ts +3 -0
  196. package/dist/tools/generate-brand-video.d.ts.map +1 -0
  197. package/dist/tools/generate-brand-video.js +14 -0
  198. package/dist/tools/generate-brand-video.js.map +1 -0
  199. package/dist/tools/generate-brand-webinar.d.ts +3 -0
  200. package/dist/tools/generate-brand-webinar.d.ts.map +1 -0
  201. package/dist/tools/generate-brand-webinar.js +10 -0
  202. package/dist/tools/generate-brand-webinar.js.map +1 -0
  203. package/package.json +1 -1
  204. package/server.json +2 -2
@@ -0,0 +1,200 @@
1
+ const VALID_STYLES = new Set([
2
+ 'minimal',
3
+ 'bold',
4
+ 'elegant',
5
+ 'playful',
6
+ 'corporate',
7
+ 'tech',
8
+ 'organic',
9
+ 'retro',
10
+ ]);
11
+ const STYLE_SONIC_PERSONALITY = {
12
+ minimal: 'Clean, understated, and precise — audio that communicates without distraction.',
13
+ bold: 'Energetic, powerful, and attention-grabbing — sound that commands the room and drives action.',
14
+ elegant: 'Sophisticated, refined, and timeless — audio that evokes luxury and craftsmanship.',
15
+ playful: 'Fun, upbeat, and memorable — sound that brings joy and invites engagement.',
16
+ corporate: 'Professional, authoritative, and trustworthy — audio that inspires confidence and credibility.',
17
+ tech: 'Futuristic, precise, and innovative — sound design that feels cutting-edge and intelligent.',
18
+ organic: 'Warm, natural, and authentic — audio rooted in acoustic instruments and earthy textures.',
19
+ retro: 'Nostalgic, characterful, and expressive — sound inspired by vintage eras and analogue warmth.',
20
+ };
21
+ const STYLE_MUSICAL_DIRECTION = {
22
+ minimal: [
23
+ 'Sparse piano or acoustic guitar motifs',
24
+ 'Long reverb tails with generous silence',
25
+ 'Monophonic melodic lines — no dense chords',
26
+ 'Tempo: 70–90 BPM (contemplative)',
27
+ 'Key: C major or A minor (open, familiar)',
28
+ ],
29
+ bold: [
30
+ 'Driving drums and distorted electric guitar',
31
+ 'Brass hits for punctuation',
32
+ 'High-energy percussion builds',
33
+ 'Tempo: 120–140 BPM (anthemic)',
34
+ 'Key: E major or G major (bright, powerful)',
35
+ ],
36
+ elegant: [
37
+ 'String quartet or chamber orchestra arrangements',
38
+ 'Jazz-influenced chord voicings with 7ths and 9ths',
39
+ 'Gentle piano with subtle orchestral swells',
40
+ 'Tempo: 60–80 BPM (refined)',
41
+ 'Key: Db major or Bb major (warm, sophisticated)',
42
+ ],
43
+ playful: [
44
+ 'Ukulele, glockenspiel, and pizzicato strings',
45
+ 'Syncopated rhythms and playful staccato accents',
46
+ 'Major pentatonic melodies — easily singable',
47
+ 'Tempo: 100–120 BPM (bouncy)',
48
+ 'Key: G major or D major (bright, joyful)',
49
+ ],
50
+ corporate: [
51
+ 'Clean electric piano and light orchestral backing',
52
+ 'Subtle percussion with corporate snap-track feel',
53
+ 'Inspirational crescendo structures',
54
+ 'Tempo: 90–110 BPM (purposeful)',
55
+ 'Key: C major or F major (stable, professional)',
56
+ ],
57
+ tech: [
58
+ 'Synthesiser arpeggios and electronic textures',
59
+ 'Glitchy micro-edits and precision sound design',
60
+ 'Sub-bass foundation with high-frequency sparkle',
61
+ 'Tempo: 110–130 BPM (precise)',
62
+ 'Key: F# minor or D minor (cool, forward-looking)',
63
+ ],
64
+ organic: [
65
+ 'Acoustic guitar, handpan, and folk instruments',
66
+ 'Field recordings woven into the texture (rain, birdsong)',
67
+ 'Warm vinyl crackle and tape saturation',
68
+ 'Tempo: 75–95 BPM (grounded)',
69
+ 'Key: D major or G major (earthy, open)',
70
+ ],
71
+ retro: [
72
+ 'Rhodes electric piano and vintage synthesisers',
73
+ 'Analogue drum machines (808 or LinnDrum patterns)',
74
+ 'Wah-wah guitar and Fender bass lines',
75
+ 'Tempo: 95–115 BPM (groovy)',
76
+ 'Key: E minor or A minor (nostalgic, warm)',
77
+ ],
78
+ };
79
+ const STYLE_UI_SOUNDS = {
80
+ minimal: [
81
+ 'Notification: single soft sine-tone ping (200ms)',
82
+ 'Success: gentle two-note ascending chime',
83
+ 'Error: quiet low-pitched descending tone',
84
+ 'Click: barely-audible paper tap texture',
85
+ 'Loading complete: subtle breath-like swell',
86
+ ],
87
+ bold: [
88
+ 'Notification: bold percussive hit with reverb',
89
+ 'Success: triumphant three-note fanfare sting',
90
+ 'Error: sharp buzzer with impact',
91
+ 'Click: firm mechanical click',
92
+ 'Loading complete: energetic whoosh and pop',
93
+ ],
94
+ elegant: [
95
+ 'Notification: crystal wine-glass harmonic',
96
+ 'Success: ascending harp glissando fragment',
97
+ 'Error: muted low cello pluck',
98
+ 'Click: soft ivory-key press',
99
+ 'Loading complete: delicate orchestral sting',
100
+ ],
101
+ playful: [
102
+ 'Notification: cheerful cartoon pop',
103
+ 'Success: celebratory confetti burst with melodic ding',
104
+ 'Error: comical low "bloop" tone',
105
+ 'Click: rubber bounce sfx',
106
+ 'Loading complete: mini fanfare with sparkle',
107
+ ],
108
+ corporate: [
109
+ 'Notification: neutral two-tone chime',
110
+ 'Success: clean rising triad sting',
111
+ 'Error: muted single descending note',
112
+ 'Click: tactile keyboard press',
113
+ 'Loading complete: professional resolve chord',
114
+ ],
115
+ tech: [
116
+ 'Notification: digital blip with light reverb',
117
+ 'Success: synth arpeggio rising sequence',
118
+ 'Error: glitchy descending sweep',
119
+ 'Click: laser-precision tap',
120
+ 'Loading complete: electronic power-up sequence',
121
+ ],
122
+ organic: [
123
+ 'Notification: gentle wood-block tap',
124
+ 'Success: warm handpan note with sustain',
125
+ 'Error: soft muted thud',
126
+ 'Click: natural material (stone/wood) tap',
127
+ 'Loading complete: birdsong fragment',
128
+ ],
129
+ retro: [
130
+ 'Notification: 8-bit style beep (homage, not childish)',
131
+ 'Success: vintage game victory jingle (modern mix)',
132
+ 'Error: analogue synthesiser descending blip',
133
+ 'Click: typewriter key clack',
134
+ 'Loading complete: tape rewind and play sound',
135
+ ],
136
+ };
137
+ const STYLE_PODCAST_APPROACH = {
138
+ minimal: 'Clean, no-music interview format. Silence is editorial. High-quality mono or stereo.',
139
+ bold: 'High-energy host with bold opinions. Music stingers between segments. Short, punchy episodes.',
140
+ elegant: 'Long-form conversations with thought leaders. Acoustic ambience. Measured pacing and erudition.',
141
+ playful: 'Fun co-hosted format with games or challenges. Upbeat transitions and audience participation segments.',
142
+ corporate: 'Educational series with structured segments. Professional guests, clear takeaways per episode.',
143
+ tech: 'Deep-dive technical topics. Code walk-throughs as audio. Links to transcripts and repos in show notes.',
144
+ organic: 'Slow-podcast format. Nature soundscapes in intro/outro. Interviews recorded on-location where possible.',
145
+ retro: 'Old-school radio drama aesthetic. Vintage sound effects. Themed seasons with serialised storytelling.',
146
+ };
147
+ const STYLE_VOICEOVER_DIRECTION = {
148
+ minimal: 'Calm, neutral, unhurried. No affectation. Let the words carry the meaning without vocal performance.',
149
+ bold: 'Confident, direct, energetic. Assertive pacing. Pauses for impact. Voice that commands attention.',
150
+ elegant: 'Warm, measured, authoritative. Received or neutral accent. Perfect diction with emotional warmth.',
151
+ playful: 'Upbeat, friendly, slightly theatrical. Natural smile in the voice. Varying pitch for engagement.',
152
+ corporate: 'Professional, clear, reassuring. Trusted advisor tone. Gender-neutral where possible. No regional affectation.',
153
+ tech: 'Precise, intelligent, approachable. Understated enthusiasm for the subject matter. Not robotic.',
154
+ organic: 'Natural, unhurried, genuine. Conversational rather than announcer-style. Slight warmth and earthiness.',
155
+ retro: 'Mid-century announcer energy but modernised. Slightly theatrical without being parody. Character-driven.',
156
+ };
157
+ function buildBrandJingle(brand) {
158
+ const name = brand.name;
159
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
160
+ const musical = STYLE_MUSICAL_DIRECTION[safeStyle][0].toLowerCase();
161
+ return (`A 3–5 second audio logo for ${name}: ${musical}. ` +
162
+ `The motif should be instantly recognisable, work equally well at 3s and 15s, ` +
163
+ `and be memorable after a single hearing. ` +
164
+ `Avoid generic "corporate stings" — the sound should feel uniquely ${name}.`);
165
+ }
166
+ function buildAccessibilityNotes() {
167
+ return [
168
+ 'All audio content must have captions or full transcripts',
169
+ 'UI sounds must be optional — users can disable in settings',
170
+ 'Autoplay audio is prohibited; user-initiated only',
171
+ 'Minimum audio contrast: speech intelligibility at 60 dB SNR',
172
+ 'Provide visual alternatives for all audio alerts (badge, colour, haptic)',
173
+ 'WCAG 1.4.2: no audio plays automatically for more than 3 seconds without controls',
174
+ 'WCAG 1.4.7: background music must be at least 20 dB quieter than speech',
175
+ ];
176
+ }
177
+ function buildAudioBriefSummary(brand) {
178
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
179
+ const personality = STYLE_SONIC_PERSONALITY[safeStyle];
180
+ const music = STYLE_MUSICAL_DIRECTION[safeStyle][0];
181
+ const taglinePart = brand.tagline ? ` — "${brand.tagline}"` : '';
182
+ return (`${brand.name}${taglinePart} audio identity. ` +
183
+ `Sonic personality: ${personality.split(' — ')[0].toLowerCase()}. ` +
184
+ `Musical direction: ${music.toLowerCase()}. ` +
185
+ `Voiceover: ${STYLE_VOICEOVER_DIRECTION[safeStyle].split('.')[0].toLowerCase()}.`);
186
+ }
187
+ export function generateBrandAudio(brand) {
188
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
189
+ return {
190
+ sonicPersonality: STYLE_SONIC_PERSONALITY[safeStyle],
191
+ musicalDirection: STYLE_MUSICAL_DIRECTION[safeStyle],
192
+ uiSounds: STYLE_UI_SOUNDS[safeStyle],
193
+ brandJingleBrief: buildBrandJingle(brand),
194
+ podcastApproach: STYLE_PODCAST_APPROACH[safeStyle],
195
+ voiceoverDirection: STYLE_VOICEOVER_DIRECTION[safeStyle],
196
+ accessibilityNotes: buildAccessibilityNotes(),
197
+ audioBriefSummary: buildAudioBriefSummary(brand),
198
+ };
199
+ }
200
+ //# sourceMappingURL=brand-audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-audio.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BrandIdentity } from '../../types.js';
2
+ import type { BrandB2bOutput } from '../../types.js';
3
+ export declare function generateBrandB2b(brand: BrandIdentity): BrandB2bOutput;
4
+ //# sourceMappingURL=brand-b2b.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-b2b.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-b2b.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA2OrD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAcrE"}
@@ -0,0 +1,236 @@
1
+ const VALID_STYLES = new Set([
2
+ 'minimal',
3
+ 'bold',
4
+ 'elegant',
5
+ 'playful',
6
+ 'corporate',
7
+ 'tech',
8
+ 'organic',
9
+ 'retro',
10
+ ]);
11
+ const STYLE_SALES_APPROACH = {
12
+ minimal: 'Consultative selling with clear ROI focus and minimal sales friction',
13
+ bold: 'High-energy outbound with strong value differentiation and urgency',
14
+ elegant: 'Relationship-led enterprise sales with white-glove service positioning',
15
+ playful: 'Solution-focused sales that makes complex decisions feel approachable',
16
+ corporate: 'Process-driven enterprise sales with rigorous qualification and governance',
17
+ tech: 'Product-led growth with self-serve trials and developer-champion strategy',
18
+ organic: 'Trust-based advisory selling with values alignment as a differentiator',
19
+ retro: 'Expertise-led consultative approach with proven methodology as the hook',
20
+ };
21
+ const STYLE_ICP_TRAITS = {
22
+ minimal: [
23
+ 'Mid-market companies 50-500 employees',
24
+ 'Efficiency-focused decision makers',
25
+ 'Lean teams seeking scalable solutions',
26
+ ],
27
+ bold: [
28
+ 'Growth-stage companies under transformation',
29
+ 'Ambitious C-suite sponsors',
30
+ 'Organisations disrupting their sector',
31
+ ],
32
+ elegant: [
33
+ 'Enterprise accounts 1000+ employees',
34
+ 'C-suite and VP-level economic buyers',
35
+ 'Regulated industries requiring premium trust signals',
36
+ ],
37
+ playful: [
38
+ 'SMB and startup innovators',
39
+ 'Product and marketing teams as champions',
40
+ 'Fast-moving companies with agile procurement',
41
+ ],
42
+ corporate: [
43
+ 'Large enterprises and government organisations',
44
+ 'Procurement and legal-led buying committees',
45
+ 'Risk-averse sectors: financial services, insurance, healthcare',
46
+ ],
47
+ tech: [
48
+ 'Developer-led organisations',
49
+ 'Engineering managers and CTOs as champions',
50
+ 'SaaS companies and digital-native businesses',
51
+ ],
52
+ organic: [
53
+ 'Purpose-driven businesses and B Corps',
54
+ 'HR and ESG-led buying groups',
55
+ 'Companies with public sustainability commitments',
56
+ ],
57
+ retro: [
58
+ 'Established businesses seeking modernisation',
59
+ 'Operators who value proven track records',
60
+ 'Niche industries with specialist requirements',
61
+ ],
62
+ };
63
+ const STYLE_ABM_APPROACH = {
64
+ minimal: 'One-to-few ABM targeting clusters of similar accounts with personalised content',
65
+ bold: 'One-to-one ABM for strategic accounts with bespoke landing pages and outreach',
66
+ elegant: 'One-to-one white-glove ABM with executive gifting, personalised research, and concierge outreach',
67
+ playful: 'One-to-many ABM leveraging community signals and product-led growth loops',
68
+ corporate: 'One-to-few ABM aligned to procurement cycles with compliance-focused messaging',
69
+ tech: 'Product-led ABM with usage signals triggering sales outreach and developer nurture',
70
+ organic: 'Values-aligned ABM focusing on sustainability metrics and shared mission signals',
71
+ retro: 'Expertise-led ABM with deep-dive thought leadership targeting legacy operators',
72
+ };
73
+ const STYLE_SALES_MATERIALS = {
74
+ minimal: ['One-pager', 'ROI calculator', 'Case study PDF', 'Competitor battle card'],
75
+ bold: ['Impact deck', 'Video testimonial reel', 'ROI guarantee document', 'Live demo script'],
76
+ elegant: [
77
+ 'Executive briefing document',
78
+ 'Board-ready ROI model',
79
+ 'Reference customer roster',
80
+ 'Proposal template',
81
+ ],
82
+ playful: [
83
+ 'Interactive product tour',
84
+ 'Self-serve trial guide',
85
+ 'Slack community invite',
86
+ 'Onboarding checklist',
87
+ ],
88
+ corporate: [
89
+ 'RFP response template',
90
+ 'Security and compliance pack',
91
+ 'Implementation roadmap',
92
+ 'SLA documentation',
93
+ ],
94
+ tech: ['API documentation', 'Developer sandbox', 'Integration guide', 'Architecture diagram'],
95
+ organic: [
96
+ 'Impact report',
97
+ 'Supplier code of conduct',
98
+ 'ESG alignment statement',
99
+ 'Mission alignment deck',
100
+ ],
101
+ retro: [
102
+ 'Case study booklet',
103
+ 'Methodology white paper',
104
+ 'Client reference list',
105
+ 'Proof-of-concept proposal',
106
+ ],
107
+ };
108
+ const STYLE_BUYER_JOURNEY = {
109
+ minimal: ['Awareness via thought leadership', 'Trial or demo request', 'Proposal', 'Close'],
110
+ bold: ['Outbound sequence', 'Demo', 'Proof of concept', 'Commercial negotiation', 'Close'],
111
+ elegant: [
112
+ 'Executive introduction',
113
+ 'Discovery workshop',
114
+ 'Business case co-creation',
115
+ 'Pilot',
116
+ 'Board approval',
117
+ 'Contract',
118
+ ],
119
+ playful: ['Self-serve trial', 'Activation milestone', 'Expansion conversation', 'Close'],
120
+ corporate: [
121
+ 'RFI response',
122
+ 'RFP submission',
123
+ 'Demo and due diligence',
124
+ 'Legal and procurement review',
125
+ 'Implementation plan',
126
+ 'Contract',
127
+ ],
128
+ tech: [
129
+ 'Developer trial',
130
+ 'Integration success',
131
+ 'Team adoption',
132
+ 'Expansion and enterprise upgrade',
133
+ ],
134
+ organic: [
135
+ 'Values alignment conversation',
136
+ 'Pilot with impact metrics',
137
+ 'Stakeholder alignment',
138
+ 'Partnership agreement',
139
+ ],
140
+ retro: [
141
+ 'Thought leadership engagement',
142
+ 'Consultancy scoping',
143
+ 'Proof of concept',
144
+ 'Phased rollout',
145
+ 'Contract renewal',
146
+ ],
147
+ };
148
+ const STYLE_PARTNERSHIP_CHANNELS = {
149
+ minimal: ['Resellers', 'Referral partners', 'Technology integrations'],
150
+ bold: ['Strategic alliances', 'Co-sell partners', 'Resellers'],
151
+ elegant: ['Consulting firms', 'Systems integrators', 'Executive referral network'],
152
+ playful: ['App marketplace partners', 'Community ambassadors', 'Integration ecosystem'],
153
+ corporate: [
154
+ 'Government frameworks',
155
+ 'Approved supplier lists',
156
+ 'Systems integrators',
157
+ 'Managed service providers',
158
+ ],
159
+ tech: ['Cloud marketplace (AWS/Azure/GCP)', 'Developer ecosystem', 'SaaS integration partners'],
160
+ organic: ['Ethical business networks', 'Certification body partners', 'NGO collaborations'],
161
+ retro: ['Industry associations', 'Specialist consultants', 'Trade press partnerships'],
162
+ };
163
+ function buildSalesEnablementKit(brand, safeStyle) {
164
+ const base = STYLE_SALES_MATERIALS[safeStyle];
165
+ const extras = [];
166
+ if (brand.industry?.toLowerCase().includes('tech')) {
167
+ extras.push('Security questionnaire answers', 'SOC 2 / ISO 27001 summary');
168
+ }
169
+ if (brand.industry?.toLowerCase().includes('health')) {
170
+ extras.push('HIPAA compliance statement', 'Clinical evidence summary');
171
+ }
172
+ if (safeStyle === 'corporate' || safeStyle === 'elegant') {
173
+ extras.push('Executive briefing leave-behind', 'Stakeholder mapping template');
174
+ }
175
+ return [...base, ...extras];
176
+ }
177
+ function buildQualificationFramework(safeStyle) {
178
+ const base = {
179
+ methodology: safeStyle === 'corporate' ? 'MEDDIC' : safeStyle === 'tech' ? 'SPICED' : 'BANT',
180
+ budget: 'Confirmed budget or budget cycle identified',
181
+ authority: 'Economic buyer identified and engaged',
182
+ need: 'Business problem validated with measurable impact',
183
+ timeline: 'Decision timeline agreed within 90 days',
184
+ champion: 'Internal champion with political capital identified',
185
+ };
186
+ if (safeStyle === 'tech') {
187
+ base.technical_fit = 'API and integration requirements validated';
188
+ base.expansion_potential = 'Usage-based growth path identified';
189
+ }
190
+ if (safeStyle === 'corporate') {
191
+ base.procurement_process = 'RFP/RFQ requirements documented';
192
+ base.compliance_requirements = 'Security and legal requirements gathered';
193
+ }
194
+ return base;
195
+ }
196
+ function buildSuccessMetrics(safeStyle) {
197
+ const base = {
198
+ pipeline_coverage: '3x quarterly target',
199
+ win_rate: safeStyle === 'corporate' ? '>25%' : '>35%',
200
+ average_deal_size: 'Track vs industry benchmark',
201
+ sales_cycle_length: 'Trending down quarter-on-quarter',
202
+ logo_retention: '>90% annual logo retention',
203
+ net_revenue_retention: '>110% NRR',
204
+ };
205
+ if (safeStyle === 'tech') {
206
+ base.trial_to_paid_conversion = '>20%';
207
+ base.product_qualified_leads = 'PQL to SQL conversion >30%';
208
+ }
209
+ if (safeStyle === 'elegant' || safeStyle === 'corporate') {
210
+ base.executive_sponsor_coverage = '1 C-suite contact per strategic account';
211
+ base.qbr_completion_rate = '>80% of enterprise accounts';
212
+ }
213
+ return base;
214
+ }
215
+ function buildBriefSummary(brand, safeStyle) {
216
+ const icp = STYLE_ICP_TRAITS[safeStyle][0];
217
+ const approach = STYLE_SALES_APPROACH[safeStyle].split('.')[0];
218
+ const abm = STYLE_ABM_APPROACH[safeStyle].split(' ').slice(0, 6).join(' ');
219
+ const taglinePart = brand.tagline ? ` — "${brand.tagline}"` : '';
220
+ return `${brand.name}${taglinePart} targets ${icp}. Sales approach: ${approach}. ABM strategy: ${abm}. Channels: ${STYLE_PARTNERSHIP_CHANNELS[safeStyle].slice(0, 2).join(', ')}.`;
221
+ }
222
+ export function generateBrandB2b(brand) {
223
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
224
+ return {
225
+ salesApproach: STYLE_SALES_APPROACH[safeStyle],
226
+ idealCustomerProfile: STYLE_ICP_TRAITS[safeStyle],
227
+ abmStrategy: STYLE_ABM_APPROACH[safeStyle],
228
+ buyerJourney: STYLE_BUYER_JOURNEY[safeStyle],
229
+ salesEnablementKit: buildSalesEnablementKit(brand, safeStyle),
230
+ qualificationFramework: buildQualificationFramework(safeStyle),
231
+ partnerChannels: STYLE_PARTNERSHIP_CHANNELS[safeStyle],
232
+ successMetrics: buildSuccessMetrics(safeStyle),
233
+ b2bBriefSummary: buildBriefSummary(brand, safeStyle),
234
+ };
235
+ }
236
+ //# sourceMappingURL=brand-b2b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-b2b.js","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-b2b.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BrandIdentity } from '../../types.js';
2
+ import type { BrandChatbotOutput } from '../../types.js';
3
+ export declare function generateBrandChatbot(brand: BrandIdentity): BrandChatbotOutput;
4
+ //# sourceMappingURL=brand-chatbot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-chatbot.d.ts","sourceRoot":"","sources":["../../../../src/lib/branding-core/generators/brand-chatbot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA2KzD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,kBAAkB,CAe7E"}
@@ -0,0 +1,174 @@
1
+ const VALID_STYLES = new Set([
2
+ 'minimal',
3
+ 'bold',
4
+ 'elegant',
5
+ 'playful',
6
+ 'corporate',
7
+ 'tech',
8
+ 'organic',
9
+ 'retro',
10
+ ]);
11
+ const STYLE_PERSONA = {
12
+ minimal: 'Clean, direct helper that gives precise answers without fluff',
13
+ bold: 'Energetic, confident guide that inspires action and speaks plainly',
14
+ elegant: 'Refined, attentive concierge that anticipates needs gracefully',
15
+ playful: 'Fun, friendly companion with wit and warmth in every reply',
16
+ corporate: 'Professional, reliable advisor that builds trust through clarity',
17
+ tech: 'Knowledgeable developer advocate comfortable with technical depth',
18
+ organic: 'Authentic, caring companion aligned with nature and well-being',
19
+ retro: 'Nostalgic, characterful guide with a distinct personality and charm',
20
+ };
21
+ const STYLE_TONE = {
22
+ minimal: ['Concise', 'Neutral', 'Factual', 'Calm'],
23
+ bold: ['Confident', 'Direct', 'Motivational', 'High-energy'],
24
+ elegant: ['Warm', 'Articulate', 'Sophisticated', 'Attentive'],
25
+ playful: ['Friendly', 'Upbeat', 'Humorous', 'Encouraging'],
26
+ corporate: ['Professional', 'Trustworthy', 'Clear', 'Composed'],
27
+ tech: ['Precise', 'Knowledgeable', 'Helpful', 'Developer-friendly'],
28
+ organic: ['Warm', 'Authentic', 'Empathetic', 'Values-driven'],
29
+ retro: ['Distinctive', 'Nostalgic', 'Characterful', 'Genuine'],
30
+ };
31
+ const STYLE_GREETING = {
32
+ minimal: 'Hi. How can I help?',
33
+ bold: "Hey! Ready to help you crush it today. What's on your mind?",
34
+ elegant: 'Good day. How may I assist you today?',
35
+ playful: "Hi there! 🎉 I'm here to help — what can we tackle together?",
36
+ corporate: 'Hello. Thank you for reaching out. How can I assist you today?',
37
+ tech: "Hey! I'm here to help with any technical questions or dev queries.",
38
+ organic: 'Hi! Great to connect with you. How can I support you today?',
39
+ retro: 'Well, hello there! Great to see you. What can I do for you today?',
40
+ };
41
+ const STYLE_FALLBACK = {
42
+ minimal: "I don't have the answer to that. Can you rephrase or provide more context?",
43
+ bold: "Hmm, that one stumped me. Let's try again — can you give me more detail?",
44
+ elegant: "I'm afraid I don't have that information to hand. Could you elaborate further?",
45
+ playful: "Oops, that one's outside my expertise! Try rephrasing and I'll give it another go 🙂",
46
+ corporate: "I don't have enough information to assist with that query. Please clarify so I can help.",
47
+ tech: "That's outside my current knowledge base. Could you share more context or a code snippet?",
48
+ organic: "I want to help but I'm not sure about that one. Could you tell me a bit more?",
49
+ retro: "Well, that one has me stumped! Give me a little more to go on and I'll do my best.",
50
+ };
51
+ const STYLE_ESCALATION = {
52
+ minimal: 'Transferring to support.',
53
+ bold: "I'm passing you to our team right now — they'll get you sorted fast.",
54
+ elegant: 'Allow me to connect you with a specialist who will be delighted to assist.',
55
+ playful: 'Time to call in the experts! Handing you over now 🙌',
56
+ corporate: 'I will escalate your query to the appropriate team and ensure you receive a timely response.',
57
+ tech: "This needs a human expert. I'll connect you with our engineering support team.",
58
+ organic: 'I want you to get the best help possible — let me connect you with our team.',
59
+ retro: 'Right, time to bring in the big guns! Passing you to the team now.',
60
+ };
61
+ const STYLE_BOUNDARIES = {
62
+ minimal: [
63
+ 'Stay on-topic to product and service queries',
64
+ 'No personal opinions',
65
+ 'No speculation on pricing not in knowledge base',
66
+ 'No medical, legal, or financial advice',
67
+ ],
68
+ bold: [
69
+ "Don't overpromise on delivery timelines",
70
+ 'Stay positive but honest about limitations',
71
+ 'No competitor bashing',
72
+ 'No personal opinions on sensitive topics',
73
+ ],
74
+ elegant: [
75
+ 'Maintain a refined and courteous tone always',
76
+ 'No slang or colloquial language',
77
+ 'No discussion of pricing without verification',
78
+ 'Escalate all complaints with care and urgency',
79
+ ],
80
+ playful: [
81
+ 'Keep humour brand-appropriate and inclusive',
82
+ 'No controversial jokes or sensitive topics',
83
+ 'No false promises disguised as playfulness',
84
+ 'Escalate complex issues promptly',
85
+ ],
86
+ corporate: [
87
+ 'Adhere to compliance guidelines at all times',
88
+ 'No unauthorised disclosure of business-sensitive information',
89
+ 'No speculation on strategy or performance',
90
+ 'Escalate regulatory queries to compliance team',
91
+ ],
92
+ tech: [
93
+ 'No hallucination of API endpoints or documentation',
94
+ 'Always recommend official docs for accuracy',
95
+ 'No discussion of unreleased features',
96
+ 'Escalate security-related queries immediately',
97
+ ],
98
+ organic: [
99
+ 'No unsubstantiated health or environmental claims',
100
+ 'Cite certifications accurately',
101
+ 'No personal dietary or medical advice',
102
+ 'Respect cultural sensitivities in all responses',
103
+ ],
104
+ retro: [
105
+ 'Stay authentic and on-brand in all responses',
106
+ 'No anachronistic references that break the tone',
107
+ 'No misleading nostalgic claims',
108
+ 'Escalate complaints with genuine care',
109
+ ],
110
+ };
111
+ const STYLE_HANDOFF = {
112
+ minimal: 'When query complexity exceeds chatbot scope',
113
+ bold: 'When the user needs a real person to close a deal or resolve urgently',
114
+ elegant: 'When a personalised, high-touch experience is required',
115
+ playful: 'When the user expresses frustration or needs specialist help',
116
+ corporate: 'When regulatory, legal, or complex account issues arise',
117
+ tech: 'When debugging requires access to internal systems or account data',
118
+ organic: 'When health, dietary, or certification queries need expert input',
119
+ retro: 'When the user needs detailed account-level or bespoke support',
120
+ };
121
+ function buildIntentCategories(brand) {
122
+ const base = [
123
+ 'Product information',
124
+ 'Pricing and plans',
125
+ 'Order and delivery status',
126
+ 'Returns and refunds',
127
+ 'Account management',
128
+ 'Technical support',
129
+ 'General FAQ',
130
+ ];
131
+ const industry = brand.industry.toLowerCase();
132
+ if (industry.includes('tech') || industry.includes('software') || industry.includes('saas')) {
133
+ base.push('API and integration queries', 'Bug reports and feature requests');
134
+ }
135
+ else if (industry.includes('health') || industry.includes('wellness')) {
136
+ base.push('Product safety and ingredients', 'Usage guidance');
137
+ }
138
+ else if (industry.includes('retail') || industry.includes('fashion')) {
139
+ base.push('Size and fit guidance', 'Gift and personalisation options');
140
+ }
141
+ return base;
142
+ }
143
+ function buildAccessibilityGuidelines() {
144
+ return [
145
+ 'Use plain language: reading age 9-12 for broad audiences',
146
+ 'Provide text alternatives for any emoji or visual-only cues',
147
+ 'Ensure keyboard navigability in the chat widget',
148
+ 'Respect reduce-motion preferences in typing indicators',
149
+ 'Support screen reader-compatible chat UI markup',
150
+ 'Offer human escalation for users who cannot interact via text',
151
+ 'Comply with WCAG 2.1 AA for embedded chat interfaces',
152
+ ];
153
+ }
154
+ function buildBriefSummary(brand, safeStyle) {
155
+ const tagline = brand.tagline ? ` — "${brand.tagline}"` : '';
156
+ const tone = STYLE_TONE[safeStyle].slice(0, 2).join(' and ').toLowerCase();
157
+ return `${brand.name}${tagline} chatbot persona is ${STYLE_PERSONA[safeStyle].toLowerCase()}. The tone is ${tone}, grounded in the ${safeStyle} brand style. Escalation to human agents follows the principle: "${STYLE_HANDOFF[safeStyle].toLowerCase()}."`;
158
+ }
159
+ export function generateBrandChatbot(brand) {
160
+ const safeStyle = VALID_STYLES.has(brand.style) ? brand.style : 'minimal';
161
+ return {
162
+ chatbotPersona: STYLE_PERSONA[safeStyle],
163
+ toneAttributes: STYLE_TONE[safeStyle],
164
+ greetingMessage: STYLE_GREETING[safeStyle],
165
+ fallbackMessage: STYLE_FALLBACK[safeStyle],
166
+ escalationMessage: STYLE_ESCALATION[safeStyle],
167
+ conversationBoundaries: STYLE_BOUNDARIES[safeStyle],
168
+ humanHandoffTrigger: STYLE_HANDOFF[safeStyle],
169
+ intentCategories: buildIntentCategories(brand),
170
+ accessibilityGuidelines: buildAccessibilityGuidelines(),
171
+ chatbotBriefSummary: buildBriefSummary(brand, safeStyle),
172
+ };
173
+ }
174
+ //# sourceMappingURL=brand-chatbot.js.map