@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,497 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { BrandDir } from "../lib/brand-dir.js";
|
|
5
|
+
import { buildResponse, safeParseParams } from "../lib/response.js";
|
|
6
|
+
import { ERROR_CODES } from "../types/index.js";
|
|
7
|
+
const paramsShape = {
|
|
8
|
+
id: z.string().describe("Clarification item ID from needs-clarification.yaml (e.g. 'clarify-1')"),
|
|
9
|
+
answer: z.string().describe("The user's answer: a hex color (#ff0000), a role name (primary, secondary, accent), a font name, 'yes'/'no', or natural language ('the purple one is accent, the dark one is neutral')"),
|
|
10
|
+
};
|
|
11
|
+
const ParamsSchema = z.object(paramsShape);
|
|
12
|
+
const HEX_RE = /^#[0-9a-fA-F]{3,8}$/;
|
|
13
|
+
const VALID_ROLES = ["primary", "secondary", "accent", "neutral", "surface", "text", "action"];
|
|
14
|
+
function isValidRole(s) {
|
|
15
|
+
return VALID_ROLES.includes(s.toLowerCase());
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse a hex color string into RGB components (0-255).
|
|
19
|
+
* Supports 3, 4, 6, and 8 character hex values.
|
|
20
|
+
*/
|
|
21
|
+
function hexToRgb(hex) {
|
|
22
|
+
let h = hex.replace("#", "").toLowerCase();
|
|
23
|
+
// Expand shorthand (3 or 4 char) to 6 or 8 char
|
|
24
|
+
if (h.length === 3 || h.length === 4) {
|
|
25
|
+
h = h
|
|
26
|
+
.split("")
|
|
27
|
+
.map((c) => c + c)
|
|
28
|
+
.join("");
|
|
29
|
+
}
|
|
30
|
+
const r = parseInt(h.substring(0, 2), 16);
|
|
31
|
+
const g = parseInt(h.substring(2, 4), 16);
|
|
32
|
+
const b = parseInt(h.substring(4, 6), 16);
|
|
33
|
+
return { r, g, b };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Compute relative luminance (0 = black, 1 = white).
|
|
37
|
+
*/
|
|
38
|
+
function luminance(hex) {
|
|
39
|
+
const { r, g, b } = hexToRgb(hex);
|
|
40
|
+
return (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compute HSL saturation (0-1) from a hex color.
|
|
44
|
+
*/
|
|
45
|
+
function saturation(hex) {
|
|
46
|
+
const { r, g, b } = hexToRgb(hex);
|
|
47
|
+
const rn = r / 255;
|
|
48
|
+
const gn = g / 255;
|
|
49
|
+
const bn = b / 255;
|
|
50
|
+
const max = Math.max(rn, gn, bn);
|
|
51
|
+
const min = Math.min(rn, gn, bn);
|
|
52
|
+
if (max === min)
|
|
53
|
+
return 0;
|
|
54
|
+
const l = (max + min) / 2;
|
|
55
|
+
return l > 0.5
|
|
56
|
+
? (max - min) / (2 - max - min)
|
|
57
|
+
: (max - min) / (max + min);
|
|
58
|
+
}
|
|
59
|
+
// Scoring functions for color keyword matching: higher = better match
|
|
60
|
+
const colorKeywords = {
|
|
61
|
+
purple: (h) => {
|
|
62
|
+
const { r, g, b } = hexToRgb(h);
|
|
63
|
+
// Purple = high blue + some red, low green
|
|
64
|
+
return (r + b) / 2 - g + (b > g && r > g ? 50 : 0);
|
|
65
|
+
},
|
|
66
|
+
violet: (h) => {
|
|
67
|
+
const { r, g, b } = hexToRgb(h);
|
|
68
|
+
return (r + b) / 2 - g + (b > g && r > g ? 50 : 0);
|
|
69
|
+
},
|
|
70
|
+
blue: (h) => {
|
|
71
|
+
const { r, g, b } = hexToRgb(h);
|
|
72
|
+
return b - (r + g) / 2;
|
|
73
|
+
},
|
|
74
|
+
red: (h) => {
|
|
75
|
+
const { r, g, b } = hexToRgb(h);
|
|
76
|
+
return r - (g + b) / 2;
|
|
77
|
+
},
|
|
78
|
+
coral: (h) => {
|
|
79
|
+
const { r, g, b } = hexToRgb(h);
|
|
80
|
+
// Coral = high red, some green, low blue (warm reddish)
|
|
81
|
+
return r - b + (r > 150 && g > 50 && g < 150 ? 30 : 0);
|
|
82
|
+
},
|
|
83
|
+
orange: (h) => {
|
|
84
|
+
const { r, g, b } = hexToRgb(h);
|
|
85
|
+
// Orange = high red, medium green, low blue
|
|
86
|
+
return r + g / 2 - b * 2 + (r > 180 && g > 80 && g < 200 && b < 100 ? 50 : 0);
|
|
87
|
+
},
|
|
88
|
+
yellow: (h) => {
|
|
89
|
+
const { r, g, b } = hexToRgb(h);
|
|
90
|
+
return (r + g) / 2 - b;
|
|
91
|
+
},
|
|
92
|
+
green: (h) => {
|
|
93
|
+
const { r, g, b } = hexToRgb(h);
|
|
94
|
+
return g - (r + b) / 2;
|
|
95
|
+
},
|
|
96
|
+
teal: (h) => {
|
|
97
|
+
const { r, g, b } = hexToRgb(h);
|
|
98
|
+
return (g + b) / 2 - r;
|
|
99
|
+
},
|
|
100
|
+
cyan: (h) => {
|
|
101
|
+
const { r, g, b } = hexToRgb(h);
|
|
102
|
+
return (g + b) / 2 - r;
|
|
103
|
+
},
|
|
104
|
+
pink: (h) => {
|
|
105
|
+
const { r, g, b } = hexToRgb(h);
|
|
106
|
+
return (r + b) / 2 - g + (r > 180 ? 30 : 0);
|
|
107
|
+
},
|
|
108
|
+
magenta: (h) => {
|
|
109
|
+
const { r, g, b } = hexToRgb(h);
|
|
110
|
+
return (r + b) / 2 - g;
|
|
111
|
+
},
|
|
112
|
+
dark: (h) => {
|
|
113
|
+
return 1 - luminance(h); // darker = higher score
|
|
114
|
+
},
|
|
115
|
+
light: (h) => {
|
|
116
|
+
return luminance(h); // lighter = higher score
|
|
117
|
+
},
|
|
118
|
+
white: (h) => {
|
|
119
|
+
return luminance(h); // closest to white
|
|
120
|
+
},
|
|
121
|
+
black: (h) => {
|
|
122
|
+
return 1 - luminance(h); // closest to black
|
|
123
|
+
},
|
|
124
|
+
gray: (h) => {
|
|
125
|
+
// Low saturation = more gray
|
|
126
|
+
return 1 - saturation(h);
|
|
127
|
+
},
|
|
128
|
+
grey: (h) => {
|
|
129
|
+
return 1 - saturation(h);
|
|
130
|
+
},
|
|
131
|
+
neutral: (h) => {
|
|
132
|
+
return 1 - saturation(h);
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Find the scoring function that matches a color description.
|
|
137
|
+
* Returns the scoreFn or null if no keyword matched.
|
|
138
|
+
*/
|
|
139
|
+
function findScoringFunction(desc) {
|
|
140
|
+
const lower = desc.toLowerCase().trim();
|
|
141
|
+
for (const [keyword, scoreFn] of Object.entries(colorKeywords)) {
|
|
142
|
+
if (lower.includes(keyword)) {
|
|
143
|
+
return scoreFn;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Match a natural-language color description (e.g. "purple", "dark", "the light one")
|
|
150
|
+
* to the best-matching hex value from a list of colors.
|
|
151
|
+
* Returns the hex string of the best match, or null if no keyword matched.
|
|
152
|
+
*/
|
|
153
|
+
export function matchColorByDescription(desc, colors) {
|
|
154
|
+
const lower = desc.toLowerCase().trim();
|
|
155
|
+
// Direct hex match
|
|
156
|
+
if (/^#[0-9a-f]{3,8}$/i.test(lower))
|
|
157
|
+
return lower;
|
|
158
|
+
const scoreFn = findScoringFunction(desc);
|
|
159
|
+
if (!scoreFn)
|
|
160
|
+
return null;
|
|
161
|
+
let bestHex = null;
|
|
162
|
+
let bestScore = -Infinity;
|
|
163
|
+
for (const c of colors) {
|
|
164
|
+
const score = scoreFn(c.value);
|
|
165
|
+
if (score > bestScore) {
|
|
166
|
+
bestScore = score;
|
|
167
|
+
bestHex = c.value;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return bestHex;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Match a natural-language color description to the top N best-matching hex values.
|
|
174
|
+
* Used when the user refers to colors in the plural ("the coral/red ones are secondary").
|
|
175
|
+
* Returns up to `limit` hex strings sorted by score (best first), or empty array if no match.
|
|
176
|
+
*/
|
|
177
|
+
export function matchMultipleColorsByDescription(desc, colors, limit = 3) {
|
|
178
|
+
const lower = desc.toLowerCase().trim();
|
|
179
|
+
// Direct hex match — return as single-element array
|
|
180
|
+
if (/^#[0-9a-f]{3,8}$/i.test(lower))
|
|
181
|
+
return [lower];
|
|
182
|
+
const scoreFn = findScoringFunction(desc);
|
|
183
|
+
if (!scoreFn)
|
|
184
|
+
return [];
|
|
185
|
+
return colors
|
|
186
|
+
.map((c) => ({ hex: c.value, score: scoreFn(c.value) }))
|
|
187
|
+
.sort((a, b) => b.score - a.score)
|
|
188
|
+
.slice(0, limit)
|
|
189
|
+
.filter((s) => s.score > 0)
|
|
190
|
+
.map((s) => s.hex);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Parse role assignment strings like "#5544f2 is accent, #f44d37 is secondary"
|
|
194
|
+
* or natural language like "the purple one is accent, the dark color is neutral".
|
|
195
|
+
* Returns an array of { hex, role } pairs.
|
|
196
|
+
*/
|
|
197
|
+
function parseRoleAssignments(answer, colors = []) {
|
|
198
|
+
const assignments = [];
|
|
199
|
+
// --- Primary path: exact hex references ---
|
|
200
|
+
const hexPattern = /(#[0-9a-fA-F]{3,8})\s*(?:is|=|:|-|—)\s*(\w+)/gi;
|
|
201
|
+
let match;
|
|
202
|
+
while ((match = hexPattern.exec(answer)) !== null) {
|
|
203
|
+
const hex = match[1].toLowerCase();
|
|
204
|
+
const roleName = match[2].toLowerCase();
|
|
205
|
+
if (HEX_RE.test(hex) && isValidRole(roleName)) {
|
|
206
|
+
assignments.push({ hex, role: roleName });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (assignments.length > 0)
|
|
210
|
+
return assignments;
|
|
211
|
+
// --- Fallback: natural language color descriptions ---
|
|
212
|
+
// Split on commas, semicolons, periods, "and"
|
|
213
|
+
const segments = answer.split(/[,;.]|\band\b/i).map((s) => s.trim()).filter(Boolean);
|
|
214
|
+
for (const segment of segments) {
|
|
215
|
+
// Match patterns like "the purple one is primary", "dark color is neutral",
|
|
216
|
+
// "purple = accent", "the light one is surface",
|
|
217
|
+
// "the coral/red ones are secondary"
|
|
218
|
+
const nlPattern = /(?:the\s+)?(.+?)\s+(?:ones?\s+)?(?:is|are|=|:|-|—)\s*(\w+)/i;
|
|
219
|
+
const nlMatch = segment.match(nlPattern);
|
|
220
|
+
if (!nlMatch)
|
|
221
|
+
continue;
|
|
222
|
+
const colorDesc = nlMatch[1].trim();
|
|
223
|
+
const roleName = nlMatch[2].trim().toLowerCase();
|
|
224
|
+
if (!isValidRole(roleName))
|
|
225
|
+
continue;
|
|
226
|
+
// Detect plural indicators — assign to multiple matching colors
|
|
227
|
+
const isPlural = /\bones\b|\bcolors\b|\bboth\b|\ball\b/i.test(segment);
|
|
228
|
+
if (isPlural) {
|
|
229
|
+
const matchedHexes = matchMultipleColorsByDescription(colorDesc, colors, 3);
|
|
230
|
+
for (const hex of matchedHexes) {
|
|
231
|
+
assignments.push({ hex: hex.toLowerCase(), role: roleName });
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const matchedHex = matchColorByDescription(colorDesc, colors);
|
|
236
|
+
if (matchedHex) {
|
|
237
|
+
assignments.push({ hex: matchedHex.toLowerCase(), role: roleName });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return assignments;
|
|
242
|
+
}
|
|
243
|
+
async function handler(input) {
|
|
244
|
+
const brandDir = new BrandDir(process.cwd());
|
|
245
|
+
if (!(await brandDir.exists())) {
|
|
246
|
+
return buildResponse({
|
|
247
|
+
what_happened: "No .brand/ directory found",
|
|
248
|
+
next_steps: ["Run brand_init first"],
|
|
249
|
+
data: { error: ERROR_CODES.NOT_INITIALIZED },
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// Read clarifications
|
|
253
|
+
let clarifications;
|
|
254
|
+
try {
|
|
255
|
+
await access(join(brandDir.brandPath, "needs-clarification.yaml"));
|
|
256
|
+
clarifications = await brandDir.readClarifications();
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return buildResponse({
|
|
260
|
+
what_happened: "No needs-clarification.yaml found",
|
|
261
|
+
next_steps: ["Run brand_compile first to generate clarification items"],
|
|
262
|
+
data: { error: ERROR_CODES.NO_CLARIFICATIONS },
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
// Find the item by ID
|
|
266
|
+
const item = clarifications.items.find((i) => i.id === input.id);
|
|
267
|
+
if (!item) {
|
|
268
|
+
const validIds = clarifications.items.map((i) => `${i.id}: ${i.question}`);
|
|
269
|
+
return buildResponse({
|
|
270
|
+
what_happened: `Clarification item "${input.id}" not found`,
|
|
271
|
+
next_steps: [
|
|
272
|
+
clarifications.items.length > 0
|
|
273
|
+
? "Use one of the valid IDs listed below"
|
|
274
|
+
: "No clarification items remain — run brand_compile to check for new ones",
|
|
275
|
+
],
|
|
276
|
+
data: {
|
|
277
|
+
error: ERROR_CODES.ITEM_NOT_FOUND,
|
|
278
|
+
valid_items: validIds,
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
// Read core identity
|
|
283
|
+
const identity = await brandDir.readCoreIdentity();
|
|
284
|
+
const changes = [];
|
|
285
|
+
// Apply the answer based on the field
|
|
286
|
+
if (item.field === "colors.roles") {
|
|
287
|
+
// Bulk role assignment for unknown-role colors
|
|
288
|
+
const assignments = parseRoleAssignments(input.answer, identity.colors);
|
|
289
|
+
if (assignments.length === 0) {
|
|
290
|
+
const colorList = identity.colors.map((c) => `${c.value} (current role: ${c.role})`);
|
|
291
|
+
return buildResponse({
|
|
292
|
+
what_happened: "Could not parse role assignments from your answer",
|
|
293
|
+
next_steps: [
|
|
294
|
+
'Format: "#hex is role" or "the purple one is accent, the dark color is neutral"',
|
|
295
|
+
`Valid roles: ${VALID_ROLES.join(", ")}`,
|
|
296
|
+
`Available colors: ${colorList.join(", ")}`,
|
|
297
|
+
"If this keeps happening, run brand_feedback to report the issue.",
|
|
298
|
+
],
|
|
299
|
+
data: { error: ERROR_CODES.PARSE_FAILED, answer: input.answer },
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
for (const { hex, role } of assignments) {
|
|
303
|
+
const colorIdx = identity.colors.findIndex((c) => c.value.toLowerCase() === hex);
|
|
304
|
+
if (colorIdx !== -1) {
|
|
305
|
+
identity.colors[colorIdx].role = role;
|
|
306
|
+
identity.colors[colorIdx].confidence = "confirmed";
|
|
307
|
+
changes.push(`${hex} → role "${role}" (confirmed)`);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
changes.push(`${hex} not found in colors — skipped`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else if (item.field.startsWith("colors.")) {
|
|
315
|
+
const rolePart = item.field.replace("colors.", "");
|
|
316
|
+
const answer = input.answer.trim();
|
|
317
|
+
// Extract hex from the question text to identify which specific color this item is about
|
|
318
|
+
const hexInQuestion = item.question
|
|
319
|
+
.match(/#[0-9a-fA-F]{3,8}/)?.[0]
|
|
320
|
+
?.toLowerCase();
|
|
321
|
+
if (HEX_RE.test(answer)) {
|
|
322
|
+
// Answer is a hex value — update or add a color with this role
|
|
323
|
+
// Prefer matching by hex from question when role is "unknown"
|
|
324
|
+
let existingIdx = -1;
|
|
325
|
+
if (hexInQuestion) {
|
|
326
|
+
existingIdx = identity.colors.findIndex((c) => c.value.toLowerCase() === hexInQuestion);
|
|
327
|
+
}
|
|
328
|
+
if (existingIdx === -1) {
|
|
329
|
+
existingIdx = identity.colors.findIndex((c) => c.role === rolePart || c.value.toLowerCase() === answer.toLowerCase());
|
|
330
|
+
}
|
|
331
|
+
if (existingIdx !== -1) {
|
|
332
|
+
identity.colors[existingIdx].value = answer.toLowerCase();
|
|
333
|
+
if (isValidRole(rolePart)) {
|
|
334
|
+
identity.colors[existingIdx].role = rolePart;
|
|
335
|
+
}
|
|
336
|
+
identity.colors[existingIdx].confidence = "confirmed";
|
|
337
|
+
changes.push(`Updated color ${answer} as "${rolePart}" (confirmed)`);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
// Add new color entry
|
|
341
|
+
const newColor = {
|
|
342
|
+
name: rolePart,
|
|
343
|
+
value: answer.toLowerCase(),
|
|
344
|
+
role: isValidRole(rolePart) ? rolePart : "unknown",
|
|
345
|
+
source: "manual",
|
|
346
|
+
confidence: "confirmed",
|
|
347
|
+
};
|
|
348
|
+
identity.colors.push(newColor);
|
|
349
|
+
changes.push(`Added color ${answer} as "${rolePart}" (confirmed)`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
else if (isValidRole(answer.toLowerCase())) {
|
|
353
|
+
// Answer is a role name — find a matching color and update its role
|
|
354
|
+
// Prefer matching by hex from question to avoid grabbing the wrong "unknown" color
|
|
355
|
+
let colorIdx = -1;
|
|
356
|
+
if (hexInQuestion) {
|
|
357
|
+
colorIdx = identity.colors.findIndex((c) => c.value.toLowerCase() === hexInQuestion);
|
|
358
|
+
}
|
|
359
|
+
if (colorIdx === -1) {
|
|
360
|
+
colorIdx = identity.colors.findIndex((c) => c.role === rolePart || c.role === "unknown");
|
|
361
|
+
}
|
|
362
|
+
if (colorIdx !== -1) {
|
|
363
|
+
const oldRole = identity.colors[colorIdx].role;
|
|
364
|
+
identity.colors[colorIdx].role = answer.toLowerCase();
|
|
365
|
+
identity.colors[colorIdx].confidence = "confirmed";
|
|
366
|
+
changes.push(`Color ${identity.colors[colorIdx].value}: role "${oldRole}" → "${answer.toLowerCase()}" (confirmed)`);
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
changes.push(`No color found with role "${rolePart}" to update`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
// Freeform answer — try to confirm the existing color
|
|
374
|
+
// Prefer matching by hex from question
|
|
375
|
+
let colorIdx = -1;
|
|
376
|
+
if (hexInQuestion) {
|
|
377
|
+
colorIdx = identity.colors.findIndex((c) => c.value.toLowerCase() === hexInQuestion);
|
|
378
|
+
}
|
|
379
|
+
if (colorIdx === -1) {
|
|
380
|
+
colorIdx = identity.colors.findIndex((c) => c.role === rolePart);
|
|
381
|
+
}
|
|
382
|
+
if (colorIdx !== -1) {
|
|
383
|
+
identity.colors[colorIdx].confidence = "confirmed";
|
|
384
|
+
changes.push(`Confirmed color ${identity.colors[colorIdx].value} as "${rolePart}"`);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
changes.push(`Applied freeform answer for "${item.field}"`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
else if (item.field.startsWith("typography.") || item.field === "typography") {
|
|
392
|
+
const familyName = item.field === "typography" ? null : item.field.replace("typography.", "");
|
|
393
|
+
const answerLower = input.answer.trim().toLowerCase();
|
|
394
|
+
if (familyName) {
|
|
395
|
+
// Specific font clarification
|
|
396
|
+
const fontIdx = identity.typography.findIndex((t) => t.family.toLowerCase() === familyName.toLowerCase());
|
|
397
|
+
if (answerLower === "yes" || answerLower === "correct" || answerLower === "confirmed") {
|
|
398
|
+
// Confirm the font
|
|
399
|
+
if (fontIdx !== -1) {
|
|
400
|
+
identity.typography[fontIdx].confidence = "confirmed";
|
|
401
|
+
changes.push(`Font "${familyName}" confirmed`);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
else if (answerLower === "no" || answerLower === "remove" || answerLower === "wrong") {
|
|
405
|
+
// Remove the font
|
|
406
|
+
if (fontIdx !== -1) {
|
|
407
|
+
identity.typography.splice(fontIdx, 1);
|
|
408
|
+
changes.push(`Font "${familyName}" removed`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
// Correction — update the family name
|
|
413
|
+
if (fontIdx !== -1) {
|
|
414
|
+
const oldFamily = identity.typography[fontIdx].family;
|
|
415
|
+
identity.typography[fontIdx].family = input.answer.trim();
|
|
416
|
+
identity.typography[fontIdx].name = input.answer.trim();
|
|
417
|
+
identity.typography[fontIdx].confidence = "confirmed";
|
|
418
|
+
changes.push(`Font "${oldFamily}" → "${input.answer.trim()}" (confirmed)`);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
// Add as a new font entry
|
|
422
|
+
identity.typography.push({
|
|
423
|
+
name: input.answer.trim(),
|
|
424
|
+
family: input.answer.trim(),
|
|
425
|
+
source: "manual",
|
|
426
|
+
confidence: "confirmed",
|
|
427
|
+
});
|
|
428
|
+
changes.push(`Added font "${input.answer.trim()}" (confirmed)`);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
// Generic "no fonts detected" — add whatever the user says
|
|
434
|
+
identity.typography.push({
|
|
435
|
+
name: input.answer.trim(),
|
|
436
|
+
family: input.answer.trim(),
|
|
437
|
+
source: "manual",
|
|
438
|
+
confidence: "confirmed",
|
|
439
|
+
});
|
|
440
|
+
changes.push(`Added font "${input.answer.trim()}" (confirmed)`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
else if (item.field === "logo") {
|
|
444
|
+
// Logo clarification — just acknowledge; user needs to provide a file via extraction
|
|
445
|
+
changes.push(`Noted logo information: "${input.answer}". Use brand_extract_web or brand_extract_figma to capture the actual logo file.`);
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
// Unknown field — apply as freeform confirmation
|
|
449
|
+
changes.push(`Applied answer for field "${item.field}": ${input.answer}`);
|
|
450
|
+
}
|
|
451
|
+
// Write updated core identity
|
|
452
|
+
await brandDir.writeCoreIdentity(identity);
|
|
453
|
+
// Remove the resolved item from clarifications
|
|
454
|
+
clarifications.items = clarifications.items.filter((i) => i.id !== input.id);
|
|
455
|
+
await brandDir.writeClarifications(clarifications);
|
|
456
|
+
const remaining = clarifications.items.length;
|
|
457
|
+
const nextSteps = [];
|
|
458
|
+
let conversationGuide;
|
|
459
|
+
if (remaining > 0) {
|
|
460
|
+
const nextItem = clarifications.items[0];
|
|
461
|
+
nextSteps.push(`${remaining} clarification(s) remaining — next: brand_clarify id="${nextItem.id}" (${nextItem.question})`);
|
|
462
|
+
conversationGuide = {
|
|
463
|
+
instruction: `Immediately ask the user about the next clarification item: "${nextItem.question}" (id: ${nextItem.id}). Don't wait for them to ask.`,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
nextSteps.push("All clarifications resolved — run brand_compile to regenerate tokens with confirmed values");
|
|
468
|
+
nextSteps.push("Then run brand_report to generate the updated report");
|
|
469
|
+
conversationGuide = {
|
|
470
|
+
instruction: "All clarifications resolved. Immediately run brand_compile (don't wait for the user to ask). After compile, run brand_report. After the report, transition to Session 2 by running brand_deepen_identity.",
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
return buildResponse({
|
|
474
|
+
what_happened: `Resolved clarification "${item.id}": ${item.question}`,
|
|
475
|
+
next_steps: nextSteps,
|
|
476
|
+
data: {
|
|
477
|
+
resolved_id: item.id,
|
|
478
|
+
changes,
|
|
479
|
+
remaining_clarifications: remaining,
|
|
480
|
+
remaining_items: clarifications.items.map((i) => ({
|
|
481
|
+
id: i.id,
|
|
482
|
+
question: i.question,
|
|
483
|
+
priority: i.priority,
|
|
484
|
+
})),
|
|
485
|
+
conversation_guide: conversationGuide,
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
export function register(server) {
|
|
490
|
+
server.tool("brand_clarify", "Resolve an ambiguous brand value interactively. After brand_compile, some values need human confirmation — wrong primary color, unknown font, unassigned color roles. Pass the clarification item ID and the user's answer (hex color, role name, font name, or 'yes'/'no'). Supports natural language: 'the purple one is accent' or '#5544f2 is secondary'. Returns updated identity and remaining clarification count.", paramsShape, async (args) => {
|
|
491
|
+
const parsed = safeParseParams(ParamsSchema, args);
|
|
492
|
+
if (!parsed.success)
|
|
493
|
+
return parsed.response;
|
|
494
|
+
return handler(parsed.data);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
//# sourceMappingURL=brand-clarify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-clarify.js","sourceRoot":"","sources":["../../src/tools/brand-clarify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-compile-messaging.d.ts","sourceRoot":"","sources":["../../src/tools/brand-compile-messaging.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAm3BzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,QAWzC"}
|