@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,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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=brand-compile-messaging.d.ts.map
@@ -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"}