@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.
- package/README.md +515 -0
- package/bin/brandsystem-mcp.mjs +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/brand-dir.d.ts +56 -0
- package/dist/lib/brand-dir.d.ts.map +1 -0
- package/dist/lib/brand-dir.js +270 -0
- package/dist/lib/brand-dir.js.map +1 -0
- package/dist/lib/color-namer.d.ts +28 -0
- package/dist/lib/color-namer.d.ts.map +1 -0
- package/dist/lib/color-namer.js +155 -0
- package/dist/lib/color-namer.js.map +1 -0
- package/dist/lib/confidence.d.ts +19 -0
- package/dist/lib/confidence.d.ts.map +1 -0
- package/dist/lib/confidence.js +66 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/content-scorer.d.ts +38 -0
- package/dist/lib/content-scorer.d.ts.map +1 -0
- package/dist/lib/content-scorer.js +571 -0
- package/dist/lib/content-scorer.js.map +1 -0
- package/dist/lib/css-parser.d.ts +45 -0
- package/dist/lib/css-parser.d.ts.map +1 -0
- package/dist/lib/css-parser.js +330 -0
- package/dist/lib/css-parser.js.map +1 -0
- package/dist/lib/dtcg-compiler.d.ts +7 -0
- package/dist/lib/dtcg-compiler.d.ts.map +1 -0
- package/dist/lib/dtcg-compiler.js +89 -0
- package/dist/lib/dtcg-compiler.js.map +1 -0
- package/dist/lib/interaction-policy-compiler.d.ts +40 -0
- package/dist/lib/interaction-policy-compiler.d.ts.map +1 -0
- package/dist/lib/interaction-policy-compiler.js +60 -0
- package/dist/lib/interaction-policy-compiler.js.map +1 -0
- package/dist/lib/logo-extractor.d.ts +49 -0
- package/dist/lib/logo-extractor.d.ts.map +1 -0
- package/dist/lib/logo-extractor.js +384 -0
- package/dist/lib/logo-extractor.js.map +1 -0
- package/dist/lib/report-html.d.ts +20 -0
- package/dist/lib/report-html.d.ts.map +1 -0
- package/dist/lib/report-html.js +938 -0
- package/dist/lib/report-html.js.map +1 -0
- package/dist/lib/response.d.ts +20 -0
- package/dist/lib/response.d.ts.map +1 -0
- package/dist/lib/response.js +54 -0
- package/dist/lib/response.js.map +1 -0
- package/dist/lib/runtime-compiler.d.ts +60 -0
- package/dist/lib/runtime-compiler.d.ts.map +1 -0
- package/dist/lib/runtime-compiler.js +96 -0
- package/dist/lib/runtime-compiler.js.map +1 -0
- package/dist/lib/svg-resolver.d.ts +21 -0
- package/dist/lib/svg-resolver.d.ts.map +1 -0
- package/dist/lib/svg-resolver.js +115 -0
- package/dist/lib/svg-resolver.js.map +1 -0
- package/dist/lib/url-validator.d.ts +11 -0
- package/dist/lib/url-validator.d.ts.map +1 -0
- package/dist/lib/url-validator.js +93 -0
- package/dist/lib/url-validator.js.map +1 -0
- package/dist/lib/version.d.ts +2 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +19 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/vim-generator.d.ts +13 -0
- package/dist/lib/vim-generator.d.ts.map +1 -0
- package/dist/lib/vim-generator.js +718 -0
- package/dist/lib/vim-generator.js.map +1 -0
- package/dist/resources/brand-resources.d.ts +4 -0
- package/dist/resources/brand-resources.d.ts.map +1 -0
- package/dist/resources/brand-resources.js +34 -0
- package/dist/resources/brand-resources.js.map +1 -0
- package/dist/schemas/brand-config.d.ts +28 -0
- package/dist/schemas/brand-config.d.ts.map +1 -0
- package/dist/schemas/brand-config.js +11 -0
- package/dist/schemas/brand-config.js.map +1 -0
- package/dist/schemas/brand-runtime.d.ts +251 -0
- package/dist/schemas/brand-runtime.d.ts.map +1 -0
- package/dist/schemas/brand-runtime.js +54 -0
- package/dist/schemas/brand-runtime.js.map +1 -0
- package/dist/schemas/core-identity.d.ts +302 -0
- package/dist/schemas/core-identity.d.ts.map +1 -0
- package/dist/schemas/core-identity.js +51 -0
- package/dist/schemas/core-identity.js.map +1 -0
- package/dist/schemas/index.d.ts +11 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +11 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/interaction-policy.d.ts +150 -0
- package/dist/schemas/interaction-policy.d.ts.map +1 -0
- package/dist/schemas/interaction-policy.js +34 -0
- package/dist/schemas/interaction-policy.js.map +1 -0
- package/dist/schemas/messaging.d.ts +776 -0
- package/dist/schemas/messaging.d.ts.map +1 -0
- package/dist/schemas/messaging.js +68 -0
- package/dist/schemas/messaging.js.map +1 -0
- package/dist/schemas/needs-clarification.d.ts +62 -0
- package/dist/schemas/needs-clarification.d.ts.map +1 -0
- package/dist/schemas/needs-clarification.js +13 -0
- package/dist/schemas/needs-clarification.js.map +1 -0
- package/dist/schemas/strategy.d.ts +537 -0
- package/dist/schemas/strategy.d.ts.map +1 -0
- package/dist/schemas/strategy.js +71 -0
- package/dist/schemas/strategy.js.map +1 -0
- package/dist/schemas/tokens.d.ts +35 -0
- package/dist/schemas/tokens.d.ts.map +1 -0
- package/dist/schemas/tokens.js +15 -0
- package/dist/schemas/tokens.js.map +1 -0
- package/dist/schemas/visual-identity.d.ts +224 -0
- package/dist/schemas/visual-identity.d.ts.map +1 -0
- package/dist/schemas/visual-identity.js +42 -0
- package/dist/schemas/visual-identity.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +75 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/brand-audit-content.d.ts +3 -0
- package/dist/tools/brand-audit-content.d.ts.map +1 -0
- package/dist/tools/brand-audit-content.js +116 -0
- package/dist/tools/brand-audit-content.js.map +1 -0
- package/dist/tools/brand-audit-drift.d.ts +3 -0
- package/dist/tools/brand-audit-drift.d.ts.map +1 -0
- package/dist/tools/brand-audit-drift.js +301 -0
- package/dist/tools/brand-audit-drift.js.map +1 -0
- package/dist/tools/brand-audit.d.ts +3 -0
- package/dist/tools/brand-audit.d.ts.map +1 -0
- package/dist/tools/brand-audit.js +129 -0
- package/dist/tools/brand-audit.js.map +1 -0
- package/dist/tools/brand-build-journey.d.ts +3 -0
- package/dist/tools/brand-build-journey.d.ts.map +1 -0
- package/dist/tools/brand-build-journey.js +312 -0
- package/dist/tools/brand-build-journey.js.map +1 -0
- package/dist/tools/brand-build-matrix.d.ts +3 -0
- package/dist/tools/brand-build-matrix.d.ts.map +1 -0
- package/dist/tools/brand-build-matrix.js +525 -0
- package/dist/tools/brand-build-matrix.js.map +1 -0
- package/dist/tools/brand-build-personas.d.ts +3 -0
- package/dist/tools/brand-build-personas.d.ts.map +1 -0
- package/dist/tools/brand-build-personas.js +436 -0
- package/dist/tools/brand-build-personas.js.map +1 -0
- package/dist/tools/brand-build-themes.d.ts +3 -0
- package/dist/tools/brand-build-themes.d.ts.map +1 -0
- package/dist/tools/brand-build-themes.js +476 -0
- package/dist/tools/brand-build-themes.js.map +1 -0
- package/dist/tools/brand-check-compliance.d.ts +3 -0
- package/dist/tools/brand-check-compliance.d.ts.map +1 -0
- package/dist/tools/brand-check-compliance.js +243 -0
- package/dist/tools/brand-check-compliance.js.map +1 -0
- package/dist/tools/brand-clarify.d.ts +21 -0
- package/dist/tools/brand-clarify.d.ts.map +1 -0
- package/dist/tools/brand-clarify.js +497 -0
- package/dist/tools/brand-clarify.js.map +1 -0
- package/dist/tools/brand-compile-messaging.d.ts +3 -0
- package/dist/tools/brand-compile-messaging.d.ts.map +1 -0
- package/dist/tools/brand-compile-messaging.js +759 -0
- package/dist/tools/brand-compile-messaging.js.map +1 -0
- package/dist/tools/brand-compile.d.ts +3 -0
- package/dist/tools/brand-compile.d.ts.map +1 -0
- package/dist/tools/brand-compile.js +182 -0
- package/dist/tools/brand-compile.js.map +1 -0
- package/dist/tools/brand-deepen-identity.d.ts +3 -0
- package/dist/tools/brand-deepen-identity.d.ts.map +1 -0
- package/dist/tools/brand-deepen-identity.js +483 -0
- package/dist/tools/brand-deepen-identity.js.map +1 -0
- package/dist/tools/brand-export.d.ts +17 -0
- package/dist/tools/brand-export.d.ts.map +1 -0
- package/dist/tools/brand-export.js +730 -0
- package/dist/tools/brand-export.js.map +1 -0
- package/dist/tools/brand-extract-figma.d.ts +3 -0
- package/dist/tools/brand-extract-figma.d.ts.map +1 -0
- package/dist/tools/brand-extract-figma.js +174 -0
- package/dist/tools/brand-extract-figma.js.map +1 -0
- package/dist/tools/brand-extract-messaging.d.ts +3 -0
- package/dist/tools/brand-extract-messaging.d.ts.map +1 -0
- package/dist/tools/brand-extract-messaging.js +620 -0
- package/dist/tools/brand-extract-messaging.js.map +1 -0
- package/dist/tools/brand-extract-web.d.ts +3 -0
- package/dist/tools/brand-extract-web.d.ts.map +1 -0
- package/dist/tools/brand-extract-web.js +477 -0
- package/dist/tools/brand-extract-web.js.map +1 -0
- package/dist/tools/brand-feedback.d.ts +3 -0
- package/dist/tools/brand-feedback.d.ts.map +1 -0
- package/dist/tools/brand-feedback.js +366 -0
- package/dist/tools/brand-feedback.js.map +1 -0
- package/dist/tools/brand-ingest-assets.d.ts +3 -0
- package/dist/tools/brand-ingest-assets.d.ts.map +1 -0
- package/dist/tools/brand-ingest-assets.js +233 -0
- package/dist/tools/brand-ingest-assets.js.map +1 -0
- package/dist/tools/brand-init.d.ts +3 -0
- package/dist/tools/brand-init.d.ts.map +1 -0
- package/dist/tools/brand-init.js +66 -0
- package/dist/tools/brand-init.js.map +1 -0
- package/dist/tools/brand-preflight.d.ts +3 -0
- package/dist/tools/brand-preflight.d.ts.map +1 -0
- package/dist/tools/brand-preflight.js +608 -0
- package/dist/tools/brand-preflight.js.map +1 -0
- package/dist/tools/brand-report.d.ts +3 -0
- package/dist/tools/brand-report.d.ts.map +1 -0
- package/dist/tools/brand-report.js +154 -0
- package/dist/tools/brand-report.js.map +1 -0
- package/dist/tools/brand-runtime.d.ts +3 -0
- package/dist/tools/brand-runtime.d.ts.map +1 -0
- package/dist/tools/brand-runtime.js +37 -0
- package/dist/tools/brand-runtime.js.map +1 -0
- package/dist/tools/brand-set-logo.d.ts +3 -0
- package/dist/tools/brand-set-logo.d.ts.map +1 -0
- package/dist/tools/brand-set-logo.js +170 -0
- package/dist/tools/brand-set-logo.js.map +1 -0
- package/dist/tools/brand-start.d.ts +3 -0
- package/dist/tools/brand-start.d.ts.map +1 -0
- package/dist/tools/brand-start.js +686 -0
- package/dist/tools/brand-start.js.map +1 -0
- package/dist/tools/brand-status.d.ts +3 -0
- package/dist/tools/brand-status.d.ts.map +1 -0
- package/dist/tools/brand-status.js +175 -0
- package/dist/tools/brand-status.js.map +1 -0
- package/dist/tools/brand-write.d.ts +3 -0
- package/dist/tools/brand-write.d.ts.map +1 -0
- package/dist/tools/brand-write.js +442 -0
- package/dist/tools/brand-write.js.map +1 -0
- package/dist/types/index.d.ts +331 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +52 -0
- package/dist/types/index.js.map +1 -0
- 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 @@
|
|
|
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"}
|