@brandsystem/mcp 0.3.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 (223) hide show
  1. package/README.md +515 -0
  2. package/bin/brandsystem-mcp.mjs +2 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +20 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/brand-dir.d.ts +56 -0
  8. package/dist/lib/brand-dir.d.ts.map +1 -0
  9. package/dist/lib/brand-dir.js +270 -0
  10. package/dist/lib/brand-dir.js.map +1 -0
  11. package/dist/lib/color-namer.d.ts +28 -0
  12. package/dist/lib/color-namer.d.ts.map +1 -0
  13. package/dist/lib/color-namer.js +155 -0
  14. package/dist/lib/color-namer.js.map +1 -0
  15. package/dist/lib/confidence.d.ts +19 -0
  16. package/dist/lib/confidence.d.ts.map +1 -0
  17. package/dist/lib/confidence.js +66 -0
  18. package/dist/lib/confidence.js.map +1 -0
  19. package/dist/lib/content-scorer.d.ts +38 -0
  20. package/dist/lib/content-scorer.d.ts.map +1 -0
  21. package/dist/lib/content-scorer.js +571 -0
  22. package/dist/lib/content-scorer.js.map +1 -0
  23. package/dist/lib/css-parser.d.ts +45 -0
  24. package/dist/lib/css-parser.d.ts.map +1 -0
  25. package/dist/lib/css-parser.js +330 -0
  26. package/dist/lib/css-parser.js.map +1 -0
  27. package/dist/lib/dtcg-compiler.d.ts +7 -0
  28. package/dist/lib/dtcg-compiler.d.ts.map +1 -0
  29. package/dist/lib/dtcg-compiler.js +89 -0
  30. package/dist/lib/dtcg-compiler.js.map +1 -0
  31. package/dist/lib/interaction-policy-compiler.d.ts +40 -0
  32. package/dist/lib/interaction-policy-compiler.d.ts.map +1 -0
  33. package/dist/lib/interaction-policy-compiler.js +60 -0
  34. package/dist/lib/interaction-policy-compiler.js.map +1 -0
  35. package/dist/lib/logo-extractor.d.ts +49 -0
  36. package/dist/lib/logo-extractor.d.ts.map +1 -0
  37. package/dist/lib/logo-extractor.js +384 -0
  38. package/dist/lib/logo-extractor.js.map +1 -0
  39. package/dist/lib/report-html.d.ts +20 -0
  40. package/dist/lib/report-html.d.ts.map +1 -0
  41. package/dist/lib/report-html.js +938 -0
  42. package/dist/lib/report-html.js.map +1 -0
  43. package/dist/lib/response.d.ts +20 -0
  44. package/dist/lib/response.d.ts.map +1 -0
  45. package/dist/lib/response.js +54 -0
  46. package/dist/lib/response.js.map +1 -0
  47. package/dist/lib/runtime-compiler.d.ts +60 -0
  48. package/dist/lib/runtime-compiler.d.ts.map +1 -0
  49. package/dist/lib/runtime-compiler.js +96 -0
  50. package/dist/lib/runtime-compiler.js.map +1 -0
  51. package/dist/lib/svg-resolver.d.ts +21 -0
  52. package/dist/lib/svg-resolver.d.ts.map +1 -0
  53. package/dist/lib/svg-resolver.js +115 -0
  54. package/dist/lib/svg-resolver.js.map +1 -0
  55. package/dist/lib/url-validator.d.ts +11 -0
  56. package/dist/lib/url-validator.d.ts.map +1 -0
  57. package/dist/lib/url-validator.js +93 -0
  58. package/dist/lib/url-validator.js.map +1 -0
  59. package/dist/lib/version.d.ts +2 -0
  60. package/dist/lib/version.d.ts.map +1 -0
  61. package/dist/lib/version.js +19 -0
  62. package/dist/lib/version.js.map +1 -0
  63. package/dist/lib/vim-generator.d.ts +13 -0
  64. package/dist/lib/vim-generator.d.ts.map +1 -0
  65. package/dist/lib/vim-generator.js +718 -0
  66. package/dist/lib/vim-generator.js.map +1 -0
  67. package/dist/resources/brand-resources.d.ts +4 -0
  68. package/dist/resources/brand-resources.d.ts.map +1 -0
  69. package/dist/resources/brand-resources.js +34 -0
  70. package/dist/resources/brand-resources.js.map +1 -0
  71. package/dist/schemas/brand-config.d.ts +28 -0
  72. package/dist/schemas/brand-config.d.ts.map +1 -0
  73. package/dist/schemas/brand-config.js +11 -0
  74. package/dist/schemas/brand-config.js.map +1 -0
  75. package/dist/schemas/brand-runtime.d.ts +251 -0
  76. package/dist/schemas/brand-runtime.d.ts.map +1 -0
  77. package/dist/schemas/brand-runtime.js +54 -0
  78. package/dist/schemas/brand-runtime.js.map +1 -0
  79. package/dist/schemas/core-identity.d.ts +302 -0
  80. package/dist/schemas/core-identity.d.ts.map +1 -0
  81. package/dist/schemas/core-identity.js +51 -0
  82. package/dist/schemas/core-identity.js.map +1 -0
  83. package/dist/schemas/index.d.ts +11 -0
  84. package/dist/schemas/index.d.ts.map +1 -0
  85. package/dist/schemas/index.js +11 -0
  86. package/dist/schemas/index.js.map +1 -0
  87. package/dist/schemas/interaction-policy.d.ts +150 -0
  88. package/dist/schemas/interaction-policy.d.ts.map +1 -0
  89. package/dist/schemas/interaction-policy.js +34 -0
  90. package/dist/schemas/interaction-policy.js.map +1 -0
  91. package/dist/schemas/messaging.d.ts +776 -0
  92. package/dist/schemas/messaging.d.ts.map +1 -0
  93. package/dist/schemas/messaging.js +68 -0
  94. package/dist/schemas/messaging.js.map +1 -0
  95. package/dist/schemas/needs-clarification.d.ts +62 -0
  96. package/dist/schemas/needs-clarification.d.ts.map +1 -0
  97. package/dist/schemas/needs-clarification.js +13 -0
  98. package/dist/schemas/needs-clarification.js.map +1 -0
  99. package/dist/schemas/strategy.d.ts +537 -0
  100. package/dist/schemas/strategy.d.ts.map +1 -0
  101. package/dist/schemas/strategy.js +71 -0
  102. package/dist/schemas/strategy.js.map +1 -0
  103. package/dist/schemas/tokens.d.ts +35 -0
  104. package/dist/schemas/tokens.d.ts.map +1 -0
  105. package/dist/schemas/tokens.js +15 -0
  106. package/dist/schemas/tokens.js.map +1 -0
  107. package/dist/schemas/visual-identity.d.ts +224 -0
  108. package/dist/schemas/visual-identity.d.ts.map +1 -0
  109. package/dist/schemas/visual-identity.js +42 -0
  110. package/dist/schemas/visual-identity.js.map +1 -0
  111. package/dist/server.d.ts +3 -0
  112. package/dist/server.d.ts.map +1 -0
  113. package/dist/server.js +75 -0
  114. package/dist/server.js.map +1 -0
  115. package/dist/tools/brand-audit-content.d.ts +3 -0
  116. package/dist/tools/brand-audit-content.d.ts.map +1 -0
  117. package/dist/tools/brand-audit-content.js +116 -0
  118. package/dist/tools/brand-audit-content.js.map +1 -0
  119. package/dist/tools/brand-audit-drift.d.ts +3 -0
  120. package/dist/tools/brand-audit-drift.d.ts.map +1 -0
  121. package/dist/tools/brand-audit-drift.js +301 -0
  122. package/dist/tools/brand-audit-drift.js.map +1 -0
  123. package/dist/tools/brand-audit.d.ts +3 -0
  124. package/dist/tools/brand-audit.d.ts.map +1 -0
  125. package/dist/tools/brand-audit.js +129 -0
  126. package/dist/tools/brand-audit.js.map +1 -0
  127. package/dist/tools/brand-build-journey.d.ts +3 -0
  128. package/dist/tools/brand-build-journey.d.ts.map +1 -0
  129. package/dist/tools/brand-build-journey.js +312 -0
  130. package/dist/tools/brand-build-journey.js.map +1 -0
  131. package/dist/tools/brand-build-matrix.d.ts +3 -0
  132. package/dist/tools/brand-build-matrix.d.ts.map +1 -0
  133. package/dist/tools/brand-build-matrix.js +525 -0
  134. package/dist/tools/brand-build-matrix.js.map +1 -0
  135. package/dist/tools/brand-build-personas.d.ts +3 -0
  136. package/dist/tools/brand-build-personas.d.ts.map +1 -0
  137. package/dist/tools/brand-build-personas.js +436 -0
  138. package/dist/tools/brand-build-personas.js.map +1 -0
  139. package/dist/tools/brand-build-themes.d.ts +3 -0
  140. package/dist/tools/brand-build-themes.d.ts.map +1 -0
  141. package/dist/tools/brand-build-themes.js +476 -0
  142. package/dist/tools/brand-build-themes.js.map +1 -0
  143. package/dist/tools/brand-check-compliance.d.ts +3 -0
  144. package/dist/tools/brand-check-compliance.d.ts.map +1 -0
  145. package/dist/tools/brand-check-compliance.js +243 -0
  146. package/dist/tools/brand-check-compliance.js.map +1 -0
  147. package/dist/tools/brand-clarify.d.ts +21 -0
  148. package/dist/tools/brand-clarify.d.ts.map +1 -0
  149. package/dist/tools/brand-clarify.js +497 -0
  150. package/dist/tools/brand-clarify.js.map +1 -0
  151. package/dist/tools/brand-compile-messaging.d.ts +3 -0
  152. package/dist/tools/brand-compile-messaging.d.ts.map +1 -0
  153. package/dist/tools/brand-compile-messaging.js +759 -0
  154. package/dist/tools/brand-compile-messaging.js.map +1 -0
  155. package/dist/tools/brand-compile.d.ts +3 -0
  156. package/dist/tools/brand-compile.d.ts.map +1 -0
  157. package/dist/tools/brand-compile.js +182 -0
  158. package/dist/tools/brand-compile.js.map +1 -0
  159. package/dist/tools/brand-deepen-identity.d.ts +3 -0
  160. package/dist/tools/brand-deepen-identity.d.ts.map +1 -0
  161. package/dist/tools/brand-deepen-identity.js +483 -0
  162. package/dist/tools/brand-deepen-identity.js.map +1 -0
  163. package/dist/tools/brand-export.d.ts +17 -0
  164. package/dist/tools/brand-export.d.ts.map +1 -0
  165. package/dist/tools/brand-export.js +730 -0
  166. package/dist/tools/brand-export.js.map +1 -0
  167. package/dist/tools/brand-extract-figma.d.ts +3 -0
  168. package/dist/tools/brand-extract-figma.d.ts.map +1 -0
  169. package/dist/tools/brand-extract-figma.js +174 -0
  170. package/dist/tools/brand-extract-figma.js.map +1 -0
  171. package/dist/tools/brand-extract-messaging.d.ts +3 -0
  172. package/dist/tools/brand-extract-messaging.d.ts.map +1 -0
  173. package/dist/tools/brand-extract-messaging.js +620 -0
  174. package/dist/tools/brand-extract-messaging.js.map +1 -0
  175. package/dist/tools/brand-extract-web.d.ts +3 -0
  176. package/dist/tools/brand-extract-web.d.ts.map +1 -0
  177. package/dist/tools/brand-extract-web.js +477 -0
  178. package/dist/tools/brand-extract-web.js.map +1 -0
  179. package/dist/tools/brand-feedback.d.ts +3 -0
  180. package/dist/tools/brand-feedback.d.ts.map +1 -0
  181. package/dist/tools/brand-feedback.js +366 -0
  182. package/dist/tools/brand-feedback.js.map +1 -0
  183. package/dist/tools/brand-ingest-assets.d.ts +3 -0
  184. package/dist/tools/brand-ingest-assets.d.ts.map +1 -0
  185. package/dist/tools/brand-ingest-assets.js +233 -0
  186. package/dist/tools/brand-ingest-assets.js.map +1 -0
  187. package/dist/tools/brand-init.d.ts +3 -0
  188. package/dist/tools/brand-init.d.ts.map +1 -0
  189. package/dist/tools/brand-init.js +66 -0
  190. package/dist/tools/brand-init.js.map +1 -0
  191. package/dist/tools/brand-preflight.d.ts +3 -0
  192. package/dist/tools/brand-preflight.d.ts.map +1 -0
  193. package/dist/tools/brand-preflight.js +608 -0
  194. package/dist/tools/brand-preflight.js.map +1 -0
  195. package/dist/tools/brand-report.d.ts +3 -0
  196. package/dist/tools/brand-report.d.ts.map +1 -0
  197. package/dist/tools/brand-report.js +154 -0
  198. package/dist/tools/brand-report.js.map +1 -0
  199. package/dist/tools/brand-runtime.d.ts +3 -0
  200. package/dist/tools/brand-runtime.d.ts.map +1 -0
  201. package/dist/tools/brand-runtime.js +37 -0
  202. package/dist/tools/brand-runtime.js.map +1 -0
  203. package/dist/tools/brand-set-logo.d.ts +3 -0
  204. package/dist/tools/brand-set-logo.d.ts.map +1 -0
  205. package/dist/tools/brand-set-logo.js +170 -0
  206. package/dist/tools/brand-set-logo.js.map +1 -0
  207. package/dist/tools/brand-start.d.ts +3 -0
  208. package/dist/tools/brand-start.d.ts.map +1 -0
  209. package/dist/tools/brand-start.js +686 -0
  210. package/dist/tools/brand-start.js.map +1 -0
  211. package/dist/tools/brand-status.d.ts +3 -0
  212. package/dist/tools/brand-status.d.ts.map +1 -0
  213. package/dist/tools/brand-status.js +175 -0
  214. package/dist/tools/brand-status.js.map +1 -0
  215. package/dist/tools/brand-write.d.ts +3 -0
  216. package/dist/tools/brand-write.d.ts.map +1 -0
  217. package/dist/tools/brand-write.js +442 -0
  218. package/dist/tools/brand-write.js.map +1 -0
  219. package/dist/types/index.d.ts +331 -0
  220. package/dist/types/index.d.ts.map +1 -0
  221. package/dist/types/index.js +52 -0
  222. package/dist/types/index.js.map +1 -0
  223. package/package.json +60 -0
@@ -0,0 +1,442 @@
1
+ import { z } from "zod";
2
+ import { BrandDir } from "../lib/brand-dir.js";
3
+ import { buildResponse, safeParseParams } from "../lib/response.js";
4
+ import { ERROR_CODES } from "../types/index.js";
5
+ const VISUAL_TYPES = [
6
+ "social-graphic",
7
+ "web-page",
8
+ "data-viz",
9
+ ];
10
+ const WRITTEN_TYPES = [
11
+ "blog-post",
12
+ "email",
13
+ "case-study",
14
+ ];
15
+ const MIXED_TYPES = [
16
+ "landing-page",
17
+ "presentation",
18
+ "general",
19
+ ];
20
+ function needsVisual(ct) {
21
+ return VISUAL_TYPES.includes(ct) || MIXED_TYPES.includes(ct);
22
+ }
23
+ function needsVoice(ct) {
24
+ return WRITTEN_TYPES.includes(ct) || MIXED_TYPES.includes(ct);
25
+ }
26
+ function buildVisualBrief(identity, visual, tokens, theme) {
27
+ // Colors with roles
28
+ const colors = identity.colors.map((c) => ({
29
+ name: c.name,
30
+ hex: c.value,
31
+ role: c.role,
32
+ }));
33
+ // Typography with usage hints
34
+ const typography = identity.typography.map((t) => ({
35
+ name: t.name,
36
+ family: t.family,
37
+ weight: t.weight,
38
+ usage: t.name.toLowerCase().includes("head")
39
+ ? "headings"
40
+ : t.name.toLowerCase().includes("body")
41
+ ? "body text"
42
+ : t.name.toLowerCase().includes("mono") ||
43
+ t.name.toLowerCase().includes("code")
44
+ ? "code / monospace"
45
+ : "general",
46
+ }));
47
+ // Logo — include inline_svg and data_uri for direct embedding
48
+ const logo = identity.logo.map((l) => ({
49
+ type: l.type,
50
+ variants: l.variants.map((v) => ({
51
+ name: v.name,
52
+ inline_svg: v.inline_svg,
53
+ data_uri: v.data_uri,
54
+ })),
55
+ }));
56
+ // Spacing
57
+ const spacing = identity.spacing
58
+ ? { base_unit: identity.spacing.base_unit, scale: identity.spacing.scale }
59
+ : null;
60
+ // Session 2 data (graceful degrade)
61
+ const composition = visual?.composition
62
+ ? {
63
+ energy: visual.composition.energy,
64
+ negative_space: visual.composition.negative_space,
65
+ grid: visual.composition.grid,
66
+ layout_preference: visual.composition.layout_preference,
67
+ }
68
+ : null;
69
+ const signature = visual?.signature
70
+ ? {
71
+ description: visual.signature.description,
72
+ elements: visual.signature.elements,
73
+ }
74
+ : null;
75
+ // Anti-patterns as hard rules
76
+ const anti_patterns = (visual?.anti_patterns || []).map((ap) => ({
77
+ rule: ap.rule,
78
+ severity: ap.severity,
79
+ }));
80
+ return {
81
+ colors,
82
+ typography,
83
+ logo,
84
+ spacing,
85
+ composition,
86
+ signature,
87
+ anti_patterns,
88
+ theme,
89
+ };
90
+ }
91
+ function buildVoiceBrief(messaging) {
92
+ if (!messaging) {
93
+ return {
94
+ tone: null,
95
+ vocabulary: null,
96
+ ai_ism_detection: null,
97
+ perspective: null,
98
+ brand_story: null,
99
+ };
100
+ }
101
+ const tone = messaging.voice
102
+ ? {
103
+ descriptors: messaging.voice.tone.descriptors,
104
+ register: messaging.voice.tone.register,
105
+ never_sounds_like: messaging.voice.tone.never_sounds_like,
106
+ sentence_patterns: messaging.voice.tone.sentence_patterns,
107
+ conventions: messaging.voice.tone.conventions,
108
+ }
109
+ : null;
110
+ const vocabulary = messaging.voice
111
+ ? {
112
+ anchor: messaging.voice.vocabulary.anchor,
113
+ never_say: messaging.voice.vocabulary.never_say,
114
+ jargon_policy: messaging.voice.vocabulary.jargon_policy,
115
+ placeholder_defaults: messaging.voice.vocabulary.placeholder_defaults,
116
+ }
117
+ : null;
118
+ const ai_ism_detection = messaging.voice
119
+ ? {
120
+ patterns: messaging.voice.ai_ism_detection.patterns,
121
+ instruction: messaging.voice.ai_ism_detection.instruction,
122
+ }
123
+ : null;
124
+ const perspective = messaging.perspective
125
+ ? { ...messaging.perspective }
126
+ : null;
127
+ const brand_story = messaging.brand_story
128
+ ? { ...messaging.brand_story }
129
+ : null;
130
+ return { tone, vocabulary, ai_ism_detection, perspective, brand_story };
131
+ }
132
+ // ---------------------------------------------------------------------------
133
+ // Main handler
134
+ // ---------------------------------------------------------------------------
135
+ async function handler(input) {
136
+ const brandDir = new BrandDir(process.cwd());
137
+ if (!(await brandDir.exists())) {
138
+ return buildResponse({
139
+ what_happened: "No .brand/ directory found",
140
+ next_steps: ["Run brand_start to create a brand system first"],
141
+ data: { error: ERROR_CODES.NOT_INITIALIZED },
142
+ });
143
+ }
144
+ // ── Read all available brand layers ──
145
+ let identity;
146
+ try {
147
+ identity = await brandDir.readCoreIdentity();
148
+ }
149
+ catch {
150
+ return buildResponse({
151
+ what_happened: "Could not read core-identity.yaml",
152
+ next_steps: [
153
+ "Run brand_extract_web to populate core identity first",
154
+ ],
155
+ data: { error: ERROR_CODES.NO_CORE_IDENTITY },
156
+ });
157
+ }
158
+ let config = {
159
+ client_name: "",
160
+ session: 1,
161
+ };
162
+ try {
163
+ const raw = await brandDir.readConfig();
164
+ config = { client_name: raw.client_name, session: raw.session };
165
+ }
166
+ catch {
167
+ // Non-critical — proceed without config
168
+ }
169
+ let visual = null;
170
+ if (await brandDir.hasVisualIdentity()) {
171
+ try {
172
+ visual = await brandDir.readVisualIdentity();
173
+ }
174
+ catch {
175
+ // Degrade gracefully
176
+ }
177
+ }
178
+ let messaging = null;
179
+ if (await brandDir.hasMessaging()) {
180
+ try {
181
+ messaging = await brandDir.readMessaging();
182
+ }
183
+ catch {
184
+ // Degrade gracefully
185
+ }
186
+ }
187
+ let tokens = null;
188
+ try {
189
+ tokens = await brandDir.readTokens();
190
+ }
191
+ catch {
192
+ // Tokens are optional
193
+ }
194
+ let strategy = null;
195
+ if (await brandDir.hasStrategy()) {
196
+ try {
197
+ strategy = await brandDir.readStrategy();
198
+ }
199
+ catch {
200
+ // Degrade gracefully
201
+ }
202
+ }
203
+ // ── Determine available layers ──
204
+ const layersAvailable = ["core_identity"];
205
+ if (visual)
206
+ layersAvailable.push("visual_identity");
207
+ if (messaging)
208
+ layersAvailable.push("messaging");
209
+ if (tokens)
210
+ layersAvailable.push("tokens");
211
+ if (strategy)
212
+ layersAvailable.push("content_strategy");
213
+ // ── Build creation brief ──
214
+ const ct = input.content_type;
215
+ const theme = input.theme || "dark";
216
+ const topic = input.topic || null;
217
+ const channel = input.channel || null;
218
+ const brief = {};
219
+ if (needsVisual(ct)) {
220
+ brief.visual = buildVisualBrief(identity, visual, tokens, theme);
221
+ }
222
+ if (needsVoice(ct)) {
223
+ brief.voice = buildVoiceBrief(messaging);
224
+ }
225
+ // For mixed types, include both
226
+ if (MIXED_TYPES.includes(ct)) {
227
+ if (!brief.visual) {
228
+ brief.visual = buildVisualBrief(identity, visual, tokens, theme);
229
+ }
230
+ if (!brief.voice) {
231
+ brief.voice = buildVoiceBrief(messaging);
232
+ }
233
+ }
234
+ // Include strategy context if Session 4 data exists
235
+ if (strategy) {
236
+ const strategyBrief = {};
237
+ // Find target persona
238
+ if (input.persona) {
239
+ const persona = strategy.personas.find((p) => p.id.toLowerCase() === input.persona.toLowerCase() ||
240
+ p.name.toLowerCase() === input.persona.toLowerCase() ||
241
+ p.role_tag.toLowerCase() === input.persona.toLowerCase());
242
+ if (persona) {
243
+ strategyBrief.persona = {
244
+ id: persona.id,
245
+ name: persona.name,
246
+ role: persona.role_tag,
247
+ core_tension: persona.core_tension,
248
+ key_objections: persona.key_objections,
249
+ narrative_emphasis: persona.narrative_emphasis,
250
+ preferred_channels: persona.preferred_channels,
251
+ };
252
+ }
253
+ }
254
+ // Find journey stage
255
+ if (input.stage) {
256
+ const stage = strategy.journey_stages.find((s) => s.id.toLowerCase() === input.stage.toLowerCase() ||
257
+ s.name.toLowerCase() === input.stage.toLowerCase());
258
+ if (stage) {
259
+ strategyBrief.journey_stage = {
260
+ id: stage.id,
261
+ name: stage.name,
262
+ buyer_mindset: stage.buyer_mindset,
263
+ content_goal: stage.content_goal,
264
+ tone_shift: stage.tone_shift,
265
+ };
266
+ }
267
+ }
268
+ // Find matching messaging variant
269
+ if (input.persona && input.stage) {
270
+ const personaMatch = strategy.personas.find((p) => p.id.toLowerCase() === input.persona.toLowerCase() ||
271
+ p.name.toLowerCase() === input.persona.toLowerCase() ||
272
+ p.role_tag.toLowerCase() === input.persona.toLowerCase());
273
+ const stageMatch = strategy.journey_stages.find((s) => s.id.toLowerCase() === input.stage.toLowerCase() ||
274
+ s.name.toLowerCase() === input.stage.toLowerCase());
275
+ if (personaMatch && stageMatch) {
276
+ const variant = strategy.messaging_matrix.find((v) => v.persona === personaMatch.id && v.journey_stage === stageMatch.id);
277
+ if (variant) {
278
+ strategyBrief.messaging_variant = {
279
+ core_message: variant.core_message,
280
+ tone_shift: variant.tone_shift,
281
+ proof_points: variant.proof_points,
282
+ };
283
+ }
284
+ }
285
+ }
286
+ // Include active themes for context
287
+ const activeThemes = strategy.themes.filter((t) => t.status === "Active");
288
+ if (activeThemes.length > 0) {
289
+ strategyBrief.active_themes = activeThemes.map((t) => ({
290
+ name: t.name,
291
+ intent: t.content_intent,
292
+ priority: t.strategic_priority,
293
+ }));
294
+ }
295
+ // If no persona/stage specified, list available options
296
+ if (!input.persona && strategy.personas.length > 0) {
297
+ strategyBrief.available_personas = strategy.personas
298
+ .filter((p) => p.status !== "Retired")
299
+ .map((p) => `${p.id}: ${p.name} (${p.role_tag})`);
300
+ }
301
+ if (!input.stage && strategy.journey_stages.length > 0) {
302
+ strategyBrief.available_stages = strategy.journey_stages.map((s) => `${s.id}: ${s.name}`);
303
+ }
304
+ brief.strategy = strategyBrief;
305
+ }
306
+ // Include tokens if available (theme-specific section if present)
307
+ if (tokens) {
308
+ const themeKey = theme === "light" ? "light" : "dark";
309
+ const themeTokens = tokens[themeKey] || null;
310
+ if (themeTokens) {
311
+ brief.theme_tokens = themeTokens;
312
+ }
313
+ }
314
+ // ── Build conversation guide ──
315
+ const contentLabel = ct.replace(/-/g, " ");
316
+ const topicClause = topic ? ` about "${topic}"` : "";
317
+ const channelClause = channel ? ` for ${channel}` : "";
318
+ const themeClause = ` using ${theme} theme`;
319
+ const instructions = [
320
+ `Generate a ${contentLabel}${topicClause}${channelClause}${themeClause}.`,
321
+ "Apply ALL brand rules from the creation brief below.",
322
+ ];
323
+ // Visual-specific instructions
324
+ if (brief.visual) {
325
+ instructions.push("Use ONLY the colors listed in the palette — no off-brand colors.");
326
+ instructions.push("Use the specified font families for headings and body text.");
327
+ if (brief.visual.logo.length > 0 &&
328
+ brief.visual.logo.some((l) => l.variants.some((v) => v.inline_svg || v.data_uri))) {
329
+ instructions.push("Embed the logo using the provided inline SVG or data URI — never approximate with styled text.");
330
+ }
331
+ if (brief.visual.anti_patterns.length > 0) {
332
+ instructions.push("HARD RULES — the anti_patterns list contains things you must NEVER do.");
333
+ }
334
+ }
335
+ // Voice-specific instructions
336
+ if (brief.voice) {
337
+ const vb = brief.voice;
338
+ if (vb.tone) {
339
+ instructions.push(`Write in a tone that is: ${vb.tone.descriptors.join(", ")}.`);
340
+ }
341
+ if (vb.vocabulary) {
342
+ instructions.push("Use anchor vocabulary (the 'use' column) instead of the 'not' alternatives.");
343
+ instructions.push("Never use words from the never_say list.");
344
+ }
345
+ if (vb.ai_ism_detection) {
346
+ instructions.push("HARD RULE: Avoid ALL patterns in ai_ism_detection. " +
347
+ vb.ai_ism_detection.instruction);
348
+ }
349
+ }
350
+ if (needsVisual(ct)) {
351
+ instructions.push("After generating, run brand_preflight to validate visual compliance.");
352
+ }
353
+ if (needsVoice(ct)) {
354
+ instructions.push("After generating, run brand_check_compliance to verify voice rules and never-say words.");
355
+ }
356
+ if (!needsVisual(ct) && !needsVoice(ct)) {
357
+ instructions.push("After generating, run brand_check_compliance to validate the output.");
358
+ }
359
+ // ── Degradation warnings ──
360
+ const warnings = [];
361
+ if (!visual && needsVisual(ct)) {
362
+ warnings.push("No visual identity data (Session 2) — composition rules, signature moves, and anti-patterns are unavailable. Run brand_deepen_identity to add them.");
363
+ }
364
+ if (!messaging && needsVoice(ct)) {
365
+ warnings.push("No messaging data (Session 3) — voice codex, vocabulary, and perspective are unavailable. Complete Session 3 to add them.");
366
+ }
367
+ if (identity.colors.length === 0) {
368
+ warnings.push("No colors in core identity — run brand_extract_web first.");
369
+ }
370
+ if (identity.typography.length === 0) {
371
+ warnings.push("No typography in core identity — run brand_extract_web first.");
372
+ }
373
+ // ── Assemble response ──
374
+ const nextSteps = [
375
+ `Generate the ${contentLabel} using the creation brief below`,
376
+ "Run brand_preflight on the output to check compliance",
377
+ ];
378
+ if (warnings.length > 0) {
379
+ nextSteps.push(...warnings.map((w) => `NOTE: ${w}`));
380
+ }
381
+ return buildResponse({
382
+ what_happened: `Loaded brand context for ${contentLabel} (${layersAvailable.join(", ")})`,
383
+ next_steps: nextSteps,
384
+ data: {
385
+ content_type: ct,
386
+ client_name: config.client_name,
387
+ brand_layers_available: layersAvailable,
388
+ creation_brief: brief,
389
+ conversation_guide: {
390
+ instruction: instructions.join(" "),
391
+ },
392
+ },
393
+ });
394
+ }
395
+ // ---------------------------------------------------------------------------
396
+ // Tool registration
397
+ // ---------------------------------------------------------------------------
398
+ const paramsShape = {
399
+ content_type: z
400
+ .enum([
401
+ "social-graphic",
402
+ "web-page",
403
+ "blog-post",
404
+ "email",
405
+ "landing-page",
406
+ "case-study",
407
+ "presentation",
408
+ "data-viz",
409
+ "general",
410
+ ])
411
+ .describe("What type of content to create. Determines which brand layers are loaded (visual, voice, or both)."),
412
+ topic: z
413
+ .string()
414
+ .optional()
415
+ .describe("What the content is about"),
416
+ channel: z
417
+ .string()
418
+ .optional()
419
+ .describe('Where it will be published (e.g., "linkedin", "twitter", "website", "email")'),
420
+ theme: z
421
+ .enum(["dark", "light"])
422
+ .default("dark")
423
+ .describe('Color theme to use — "dark" or "light" (defaults to "dark")'),
424
+ persona: z
425
+ .string()
426
+ .optional()
427
+ .describe("Target persona ID or name (e.g. 'PER-001' or 'VP Marketing'). If Session 4 data exists, adapts messaging for this audience."),
428
+ stage: z
429
+ .string()
430
+ .optional()
431
+ .describe("Buyer journey stage (e.g. 'first-touch', 'validation-and-proof'). Adapts tone and depth."),
432
+ };
433
+ const ParamsSchema = z.object(paramsShape);
434
+ export function register(server) {
435
+ server.tool("brand_write", "Generate on-brand content — load full brand context (colors, typography, logo, voice, strategy) before creating any branded output. Use when asked 'generate on-brand content', 'write something in our brand voice', 'load brand context for writing', or before creating social graphics, web pages, blog posts, emails, presentations, or data viz. Specify content_type for the right mix of visual and voice rules. Does NOT generate content itself — provides the creation brief so you can generate on-brand. Run brand_preflight on output afterward. Returns a structured creation brief with all brand layers.", paramsShape, async (args) => {
436
+ const parsed = safeParseParams(ParamsSchema, args);
437
+ if (!parsed.success)
438
+ return parsed.response;
439
+ return handler(parsed.data);
440
+ });
441
+ }
442
+ //# sourceMappingURL=brand-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-write.js","sourceRoot":"","sources":["../../src/tools/brand-write.ts"],"names":[],"mappings":"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"}