@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,525 @@
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
+ // ---------------------------------------------------------------------------
6
+ // Params
7
+ // ---------------------------------------------------------------------------
8
+ const paramsShape = {
9
+ mode: z
10
+ .enum(["generate", "view", "edit"])
11
+ .default("generate")
12
+ .describe("'generate' creates messaging variants for every persona × stage; 'view' returns the matrix as a grid; 'edit' updates a specific variant by ID"),
13
+ variant_id: z
14
+ .string()
15
+ .optional()
16
+ .describe("ID of the variant to edit (required for mode='edit', e.g. MV-001)"),
17
+ answers: z
18
+ .string()
19
+ .optional()
20
+ .describe("JSON string with variant fields to update: core_message, tone_shift, proof_points, status (for mode='edit')"),
21
+ };
22
+ const ParamsSchema = z.object(paramsShape);
23
+ // ---------------------------------------------------------------------------
24
+ // Variant ID generator
25
+ // ---------------------------------------------------------------------------
26
+ function variantId(n) {
27
+ return `MV-${String(n).padStart(3, "0")}`;
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // Message synthesis — the core intelligence of this tool
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Synthesize a meaningful, adapted core_message for a specific persona × stage.
34
+ *
35
+ * This is NOT template fill-in. The function uses:
36
+ * - persona.core_tension to frame the message around the person's pain
37
+ * - stage.buyer_mindset to set the cognitive angle
38
+ * - stage.content_goal to orient the call-to-action weight
39
+ * - persona.narrative_emphasis to weight which brand story elements surface
40
+ * - perspective.worldview (if available) to ground the argument
41
+ */
42
+ function synthesizeCoreMessage(persona, stage, perspective) {
43
+ const personaLabel = persona.name || persona.role_tag;
44
+ const tensionPhrase = persona.core_tension;
45
+ const mindset = stage.buyer_mindset;
46
+ const goal = stage.content_goal;
47
+ const narrativeAngle = persona.narrative_emphasis.primary;
48
+ // Build the adapted message — branch on stage.id for reliable matching
49
+ const parts = [];
50
+ if (stage.id === "first-touch") {
51
+ // Provocative, tension-as-hook — earn the click, interrupt the scroll
52
+ parts.push(`${personaLabel} feels this acutely: ${tensionPhrase}.`);
53
+ if (perspective) {
54
+ parts.push(`The angle here is ${perspective.worldview} — reframed for someone whose mindset is: ${mindset}.`);
55
+ }
56
+ else {
57
+ parts.push(`At this stage, their mindset is: ${mindset}.`);
58
+ }
59
+ parts.push(`Content goal: ${goal}. Lead with ${narrativeAngle} to earn attention.`);
60
+ }
61
+ else if (stage.id === "context-and-meaning") {
62
+ // Educational, framework-oriented — give them a lens, not a pitch
63
+ parts.push(`${personaLabel} is past awareness and looking for a framework. Their tension: ${tensionPhrase}.`);
64
+ if (perspective) {
65
+ parts.push(`Introduce ${perspective.worldview} as the lens — help them see the problem differently. Their mindset: ${mindset}.`);
66
+ }
67
+ else {
68
+ parts.push(`Help them reframe the problem. Their mindset: ${mindset}.`);
69
+ }
70
+ parts.push(`Content goal: ${goal}. Build depth through ${narrativeAngle} — teach, don't sell.`);
71
+ }
72
+ else if (stage.id === "validation-and-proof") {
73
+ // Evidence-heavy, concrete outcomes, social proof
74
+ parts.push(`For ${personaLabel}, the core tension is: ${tensionPhrase}.`);
75
+ if (perspective) {
76
+ parts.push(`At this stage they need proof that ${perspective.resolution}. Their mindset: ${mindset}.`);
77
+ }
78
+ else {
79
+ parts.push(`At this stage they need proof. Their mindset: ${mindset}.`);
80
+ }
81
+ parts.push(`Content goal: ${goal}. Emphasize ${narrativeAngle} with evidence.`);
82
+ }
83
+ else if (stage.id === "decision-support") {
84
+ // Direct, action-oriented — remove friction, arm the champion
85
+ parts.push(`${personaLabel} is ready to decide. Their original tension — ${tensionPhrase} — needs a resolution they can defend to stakeholders.`);
86
+ if (perspective) {
87
+ parts.push(`Position: ${perspective.positioning}. Their mindset: ${mindset}.`);
88
+ }
89
+ else {
90
+ parts.push(`Their mindset: ${mindset}.`);
91
+ }
92
+ parts.push(`Content goal: ${goal}. Use ${narrativeAngle} to close the loop.`);
93
+ }
94
+ else {
95
+ // Generic fallback for custom stages
96
+ parts.push(`For ${personaLabel} (${persona.seniority}), the driving tension is: ${tensionPhrase}.`);
97
+ if (perspective) {
98
+ parts.push(`Ground the message in: ${perspective.worldview}. Their mindset at this stage: ${mindset}.`);
99
+ }
100
+ else {
101
+ parts.push(`Their mindset at this stage: ${mindset}.`);
102
+ }
103
+ parts.push(`Content goal: ${goal}. Narrative emphasis: ${narrativeAngle}.`);
104
+ }
105
+ return parts.join(" ");
106
+ }
107
+ /**
108
+ * Derive tone_shift for a variant from stage + persona context.
109
+ */
110
+ function deriveToneShift(persona, stage) {
111
+ const baseTone = stage.tone_shift;
112
+ const seniority = persona.seniority;
113
+ // Modulate tone based on seniority
114
+ if (seniority === "C-Suite" || seniority === "VP") {
115
+ return `${baseTone} — calibrated for executive audience: concise, strategic, ROI-forward`;
116
+ }
117
+ if (seniority === "Director" || seniority === "Manager") {
118
+ return `${baseTone} — calibrated for operational leadership: practical, outcome-oriented`;
119
+ }
120
+ if (seniority === "IC") {
121
+ return `${baseTone} — calibrated for practitioner audience: specific, technique-oriented`;
122
+ }
123
+ return baseTone;
124
+ }
125
+ /**
126
+ * Extract proof_points guidance from claims_policy.
127
+ */
128
+ function deriveProofPoints(stage) {
129
+ const points = [];
130
+ const policy = stage.claims_policy;
131
+ if (policy.preferred_salience) {
132
+ const salience = Array.isArray(policy.preferred_salience)
133
+ ? policy.preferred_salience.join(", ")
134
+ : policy.preferred_salience;
135
+ points.push(`Preferred claim salience: ${salience}`);
136
+ }
137
+ if (policy.max_per_piece !== null && policy.max_per_piece !== undefined) {
138
+ points.push(`Max claims per piece: ${policy.max_per_piece}`);
139
+ }
140
+ if (policy.min_confidence !== undefined) {
141
+ points.push(`Min confidence threshold: ${policy.min_confidence}`);
142
+ }
143
+ if (points.length === 0) {
144
+ points.push("Follow stage-appropriate proof density");
145
+ }
146
+ return points;
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Generate mode
150
+ // ---------------------------------------------------------------------------
151
+ async function handleGenerate(brandDir) {
152
+ // Read strategy.yaml — required
153
+ let strategy;
154
+ try {
155
+ strategy = await brandDir.readStrategy();
156
+ }
157
+ catch {
158
+ return buildResponse({
159
+ what_happened: "No strategy.yaml found",
160
+ next_steps: [
161
+ "Run brand_build_strategy first to create personas and journey stages",
162
+ "The messaging matrix requires both personas and journey_stages to exist",
163
+ ],
164
+ data: { error: ERROR_CODES.NO_STRATEGY },
165
+ });
166
+ }
167
+ // Validate required data
168
+ if (!strategy.personas || strategy.personas.length === 0) {
169
+ return buildResponse({
170
+ what_happened: "strategy.yaml has no personas",
171
+ next_steps: [
172
+ "Run brand_build_strategy to define personas first",
173
+ "The messaging matrix generates one variant per persona × journey stage",
174
+ ],
175
+ data: { error: ERROR_CODES.NO_PERSONAS },
176
+ });
177
+ }
178
+ if (!strategy.journey_stages || strategy.journey_stages.length === 0) {
179
+ return buildResponse({
180
+ what_happened: "strategy.yaml has no journey_stages",
181
+ next_steps: [
182
+ "Run brand_build_strategy to define journey stages first",
183
+ "The messaging matrix generates one variant per persona × journey stage",
184
+ ],
185
+ data: { error: ERROR_CODES.NO_JOURNEY_STAGES },
186
+ });
187
+ }
188
+ // Read messaging.yaml — optional (degrades gracefully)
189
+ let perspective = null;
190
+ let voiceContext = null;
191
+ if (await brandDir.hasMessaging()) {
192
+ try {
193
+ const messaging = await brandDir.readMessaging();
194
+ if (messaging.perspective) {
195
+ perspective = {
196
+ worldview: messaging.perspective.worldview,
197
+ tension: messaging.perspective.tension,
198
+ resolution: messaging.perspective.resolution,
199
+ positioning: messaging.perspective.positioning,
200
+ };
201
+ }
202
+ if (messaging.voice) {
203
+ voiceContext = messaging.voice.tone.descriptors.join(", ");
204
+ }
205
+ }
206
+ catch {
207
+ // Degrade gracefully — messages will still be persona/stage adapted
208
+ }
209
+ }
210
+ // Generate variants
211
+ const personas = strategy.personas.filter((p) => p.status === "Active" || p.status === "Hypothesis");
212
+ const stages = strategy.journey_stages;
213
+ const variants = [];
214
+ let counter = 1;
215
+ for (const persona of personas) {
216
+ for (const stage of stages) {
217
+ const id = variantId(counter++);
218
+ const core_message = synthesizeCoreMessage(persona, stage, perspective);
219
+ const tone_shift = deriveToneShift(persona, stage);
220
+ const proof_points = deriveProofPoints(stage);
221
+ const source_element = perspective
222
+ ? `perspective.worldview: "${perspective.worldview}"`
223
+ : "No perspective available — message derived from persona + stage only";
224
+ variants.push({
225
+ id,
226
+ persona: persona.id,
227
+ journey_stage: stage.id,
228
+ status: "Draft",
229
+ core_message,
230
+ tone_shift,
231
+ proof_points,
232
+ source_element,
233
+ });
234
+ }
235
+ }
236
+ // Write to strategy.yaml
237
+ strategy.messaging_matrix = variants;
238
+ await brandDir.writeStrategy(strategy);
239
+ // Build summary grid for the response
240
+ const grid = {};
241
+ for (const v of variants) {
242
+ if (!grid[v.journey_stage])
243
+ grid[v.journey_stage] = {};
244
+ grid[v.journey_stage][v.persona] = v.id;
245
+ }
246
+ const personaCount = personas.length;
247
+ const stageCount = stages.length;
248
+ const variantCount = variants.length;
249
+ const warnings = [];
250
+ if (!perspective) {
251
+ warnings.push("No messaging.yaml perspective found — messages are adapted by persona + stage but not grounded in brand worldview. Complete Session 3 (brand_compile_messaging) for deeper message coherence.");
252
+ }
253
+ return buildResponse({
254
+ what_happened: `Generated ${variantCount} messaging variants (${personaCount} personas × ${stageCount} stages) and saved to strategy.yaml messaging_matrix`,
255
+ next_steps: [
256
+ `I've generated ${variantCount} message variants — one for each persona at each journey stage. These are drafts. Want to review and refine any of them?`,
257
+ "Use mode='view' to see the full matrix as a grid",
258
+ "Use mode='edit' with a variant_id to refine individual messages",
259
+ "Change variant status from 'Draft' to 'Active' when approved",
260
+ ],
261
+ data: {
262
+ personas_used: personas.map((p) => ({ id: p.id, name: p.name })),
263
+ stages_used: stages.map((s) => ({ id: s.id, name: s.name })),
264
+ variants_generated: variantCount,
265
+ matrix_grid: grid,
266
+ voice_grounded: !!perspective,
267
+ ...(warnings.length > 0 ? { warnings } : {}),
268
+ conversation_guide: { instruction: `Present the generated matrix as a grid. Say: 'I've generated ${variantCount} message variants — one for each persona at each journey stage. These are drafts. Want to review and refine any of them?' If they say yes, show variants one at a time and let them edit.` },
269
+ },
270
+ });
271
+ }
272
+ // ---------------------------------------------------------------------------
273
+ // View mode
274
+ // ---------------------------------------------------------------------------
275
+ async function handleView(brandDir) {
276
+ let strategy;
277
+ try {
278
+ strategy = await brandDir.readStrategy();
279
+ }
280
+ catch {
281
+ return buildResponse({
282
+ what_happened: "No strategy.yaml found",
283
+ next_steps: ["Run brand_build_matrix mode='generate' to create the matrix first"],
284
+ data: { error: ERROR_CODES.NO_STRATEGY },
285
+ });
286
+ }
287
+ if (!strategy.messaging_matrix || strategy.messaging_matrix.length === 0) {
288
+ return buildResponse({
289
+ what_happened: "Messaging matrix is empty",
290
+ next_steps: ["Run brand_build_matrix mode='generate' to populate it"],
291
+ data: { error: ERROR_CODES.EMPTY_MATRIX },
292
+ });
293
+ }
294
+ // Build lookups for display names
295
+ const personaNames = {};
296
+ for (const p of strategy.personas) {
297
+ personaNames[p.id] = p.name;
298
+ }
299
+ const stageNames = {};
300
+ for (const s of strategy.journey_stages) {
301
+ stageNames[s.id] = s.name;
302
+ }
303
+ // Organize into a grid: stages (rows) × personas (columns)
304
+ const stageIds = strategy.journey_stages.map((s) => s.id);
305
+ const personaIds = strategy.personas.map((p) => p.id);
306
+ // Build variant lookup
307
+ const variantLookup = {};
308
+ for (const v of strategy.messaging_matrix) {
309
+ const key = `${v.journey_stage}::${v.persona}`;
310
+ variantLookup[key] = v;
311
+ }
312
+ // Build grid data
313
+ const gridRows = [];
314
+ for (const stageId of stageIds) {
315
+ const row = {
316
+ stage: stageNames[stageId] || stageId,
317
+ stage_id: stageId,
318
+ };
319
+ const cells = {};
320
+ for (const personaId of personaIds) {
321
+ const key = `${stageId}::${personaId}`;
322
+ const v = variantLookup[key];
323
+ if (v) {
324
+ cells[personaNames[personaId] || personaId] = {
325
+ id: v.id,
326
+ status: v.status,
327
+ core_message_preview: v.core_message.length > 120
328
+ ? v.core_message.substring(0, 120) + "..."
329
+ : v.core_message,
330
+ tone_shift: v.tone_shift,
331
+ };
332
+ }
333
+ else {
334
+ cells[personaNames[personaId] || personaId] = null;
335
+ }
336
+ }
337
+ row.personas = cells;
338
+ gridRows.push(row);
339
+ }
340
+ // Status summary
341
+ const statusCounts = { Draft: 0, Active: 0, Retired: 0 };
342
+ for (const v of strategy.messaging_matrix) {
343
+ statusCounts[v.status] = (statusCounts[v.status] || 0) + 1;
344
+ }
345
+ return buildResponse({
346
+ what_happened: `Messaging matrix: ${strategy.messaging_matrix.length} variants across ${stageIds.length} stages × ${personaIds.length} personas`,
347
+ next_steps: [
348
+ "Review each cell — variants in Draft status need approval",
349
+ "Use mode='edit' with variant_id to refine a specific message",
350
+ "Change status to 'Active' when a variant is approved",
351
+ ],
352
+ data: {
353
+ total_variants: strategy.messaging_matrix.length,
354
+ status_summary: statusCounts,
355
+ persona_columns: personaIds.map((id) => ({ id, name: personaNames[id] || id })),
356
+ stage_rows: stageIds.map((id) => ({ id, name: stageNames[id] || id })),
357
+ grid: gridRows,
358
+ },
359
+ });
360
+ }
361
+ // ---------------------------------------------------------------------------
362
+ // Edit mode
363
+ // ---------------------------------------------------------------------------
364
+ async function handleEdit(brandDir, variantId, answersRaw) {
365
+ let answers;
366
+ try {
367
+ answers = JSON.parse(answersRaw);
368
+ }
369
+ catch {
370
+ return buildResponse({
371
+ what_happened: "Failed to parse answers — invalid JSON",
372
+ next_steps: ["Provide answers as a valid JSON string with keys: core_message, tone_shift, proof_points, status"],
373
+ data: { error: ERROR_CODES.INVALID_JSON },
374
+ });
375
+ }
376
+ let strategy;
377
+ try {
378
+ strategy = await brandDir.readStrategy();
379
+ }
380
+ catch {
381
+ return buildResponse({
382
+ what_happened: "No strategy.yaml found",
383
+ next_steps: ["Run brand_build_matrix mode='generate' first"],
384
+ data: { error: ERROR_CODES.NO_STRATEGY },
385
+ });
386
+ }
387
+ // Find the variant
388
+ const idx = strategy.messaging_matrix.findIndex((v) => v.id === variantId);
389
+ if (idx === -1) {
390
+ const availableIds = strategy.messaging_matrix.map((v) => v.id);
391
+ return buildResponse({
392
+ what_happened: `Variant "${variantId}" not found in messaging_matrix`,
393
+ next_steps: [
394
+ "Check the variant ID and try again",
395
+ `Available IDs: ${availableIds.join(", ")}`,
396
+ ],
397
+ data: { error: ERROR_CODES.VARIANT_NOT_FOUND, available_ids: availableIds },
398
+ });
399
+ }
400
+ const variant = strategy.messaging_matrix[idx];
401
+ const changes = [];
402
+ // Apply updates
403
+ if (answers.core_message !== undefined) {
404
+ variant.core_message = String(answers.core_message);
405
+ changes.push("Updated core_message");
406
+ }
407
+ if (answers.tone_shift !== undefined) {
408
+ variant.tone_shift = String(answers.tone_shift);
409
+ changes.push("Updated tone_shift");
410
+ }
411
+ if (answers.proof_points !== undefined) {
412
+ if (Array.isArray(answers.proof_points)) {
413
+ variant.proof_points = answers.proof_points.map((p) => String(p));
414
+ }
415
+ else if (typeof answers.proof_points === "string") {
416
+ variant.proof_points = answers.proof_points
417
+ .split(/[;\n]+/)
418
+ .map((s) => s.trim())
419
+ .filter((s) => s.length > 0);
420
+ }
421
+ changes.push("Updated proof_points");
422
+ }
423
+ if (answers.supporting_claims !== undefined) {
424
+ if (Array.isArray(answers.supporting_claims)) {
425
+ variant.supporting_claims = answers.supporting_claims.map((c) => String(c));
426
+ }
427
+ changes.push("Updated supporting_claims");
428
+ }
429
+ if (answers.status !== undefined) {
430
+ const newStatus = String(answers.status);
431
+ if (newStatus === "Active" || newStatus === "Draft" || newStatus === "Retired") {
432
+ const oldStatus = variant.status;
433
+ variant.status = newStatus;
434
+ changes.push(`Status changed: ${oldStatus} → ${newStatus}`);
435
+ }
436
+ }
437
+ if (changes.length === 0) {
438
+ return buildResponse({
439
+ what_happened: `No recognized fields to update for ${variantId}`,
440
+ next_steps: [
441
+ "Provide at least one of: core_message, tone_shift, proof_points, supporting_claims, status",
442
+ ],
443
+ data: { error: ERROR_CODES.NO_CHANGES, variant_id: variantId },
444
+ });
445
+ }
446
+ // Write back
447
+ strategy.messaging_matrix[idx] = variant;
448
+ await brandDir.writeStrategy(strategy);
449
+ // Get persona/stage names for context
450
+ const personaName = strategy.personas.find((p) => p.id === variant.persona)?.name || variant.persona;
451
+ const stageName = strategy.journey_stages.find((s) => s.id === variant.journey_stage)?.name || variant.journey_stage;
452
+ return buildResponse({
453
+ what_happened: `Updated variant ${variantId} (${personaName} × ${stageName})`,
454
+ next_steps: [
455
+ "Use mode='view' to see the updated matrix",
456
+ variant.status === "Active"
457
+ ? "This variant is now Active — it will be used in content generation"
458
+ : "Set status to 'Active' when you're satisfied with this variant",
459
+ ],
460
+ data: {
461
+ variant_id: variantId,
462
+ persona: variant.persona,
463
+ persona_name: personaName,
464
+ journey_stage: variant.journey_stage,
465
+ stage_name: stageName,
466
+ changes,
467
+ current_state: {
468
+ status: variant.status,
469
+ core_message: variant.core_message,
470
+ tone_shift: variant.tone_shift,
471
+ proof_points: variant.proof_points,
472
+ },
473
+ },
474
+ });
475
+ }
476
+ // ---------------------------------------------------------------------------
477
+ // Main handler
478
+ // ---------------------------------------------------------------------------
479
+ async function handler(input) {
480
+ const brandDir = new BrandDir(process.cwd());
481
+ if (!(await brandDir.exists())) {
482
+ return buildResponse({
483
+ what_happened: "No .brand/ directory found",
484
+ next_steps: ["Run brand_start first to create a brand system"],
485
+ data: { error: ERROR_CODES.NOT_INITIALIZED },
486
+ });
487
+ }
488
+ switch (input.mode) {
489
+ case "generate":
490
+ return handleGenerate(brandDir);
491
+ case "view":
492
+ return handleView(brandDir);
493
+ case "edit": {
494
+ if (!input.variant_id) {
495
+ return buildResponse({
496
+ what_happened: "Missing required parameter: variant_id",
497
+ next_steps: ["Provide variant_id (e.g. MV-001) to identify which variant to edit"],
498
+ data: { error: ERROR_CODES.MISSING_VARIANT_ID },
499
+ });
500
+ }
501
+ if (!input.answers) {
502
+ return buildResponse({
503
+ what_happened: "Missing required parameter: answers",
504
+ next_steps: [
505
+ "Provide answers as a JSON string with fields to update: core_message, tone_shift, proof_points, status",
506
+ ],
507
+ data: { error: ERROR_CODES.MISSING_ANSWERS },
508
+ });
509
+ }
510
+ return handleEdit(brandDir, input.variant_id, input.answers);
511
+ }
512
+ }
513
+ }
514
+ // ---------------------------------------------------------------------------
515
+ // Tool registration
516
+ // ---------------------------------------------------------------------------
517
+ export function register(server) {
518
+ server.tool("brand_build_matrix", "Generate persona x journey stage messaging variants — adapted core messages for every audience at every buying stage. Mode 'generate' creates variants using persona tensions, stage mindsets, and brand perspective. Mode 'view' shows the matrix as a grid. Mode 'edit' refines a specific variant by ID. Requires personas and journey stages in strategy.yaml. Returns variant grid with status tracking (Draft/Active/Retired).", paramsShape, async (args) => {
519
+ const parsed = safeParseParams(ParamsSchema, args);
520
+ if (!parsed.success)
521
+ return parsed.response;
522
+ return handler(parsed.data);
523
+ });
524
+ }
525
+ //# sourceMappingURL=brand-build-matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-build-matrix.js","sourceRoot":"","sources":["../../src/tools/brand-build-matrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=brand-build-personas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-build-personas.d.ts","sourceRoot":"","sources":["../../src/tools/brand-build-personas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAifzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,QAWzC"}