@brad-frost-web/eddie-brain 0.32.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 (239) hide show
  1. package/README.md +109 -0
  2. package/dist/analyze/drift-detector.d.ts +30 -0
  3. package/dist/analyze/drift-detector.d.ts.map +1 -0
  4. package/dist/analyze/drift-detector.js +310 -0
  5. package/dist/analyze/drift-detector.js.map +1 -0
  6. package/dist/analyze/health-scorer.d.ts +71 -0
  7. package/dist/analyze/health-scorer.d.ts.map +1 -0
  8. package/dist/analyze/health-scorer.js +420 -0
  9. package/dist/analyze/health-scorer.js.map +1 -0
  10. package/dist/analyze/index.d.ts +11 -0
  11. package/dist/analyze/index.d.ts.map +1 -0
  12. package/dist/analyze/index.js +11 -0
  13. package/dist/analyze/index.js.map +1 -0
  14. package/dist/analyze/naming-validator.d.ts +99 -0
  15. package/dist/analyze/naming-validator.d.ts.map +1 -0
  16. package/dist/analyze/naming-validator.js +430 -0
  17. package/dist/analyze/naming-validator.js.map +1 -0
  18. package/dist/analyze/slot-contract-validator.d.ts +68 -0
  19. package/dist/analyze/slot-contract-validator.d.ts.map +1 -0
  20. package/dist/analyze/slot-contract-validator.js +232 -0
  21. package/dist/analyze/slot-contract-validator.js.map +1 -0
  22. package/dist/analyze/token-validator.d.ts +62 -0
  23. package/dist/analyze/token-validator.d.ts.map +1 -0
  24. package/dist/analyze/token-validator.js +348 -0
  25. package/dist/analyze/token-validator.js.map +1 -0
  26. package/dist/cli/brain.d.ts +12 -0
  27. package/dist/cli/brain.d.ts.map +1 -0
  28. package/dist/cli/brain.js +641 -0
  29. package/dist/cli/brain.js.map +1 -0
  30. package/dist/cli/formatters/json.d.ts +15 -0
  31. package/dist/cli/formatters/json.d.ts.map +1 -0
  32. package/dist/cli/formatters/json.js +18 -0
  33. package/dist/cli/formatters/json.js.map +1 -0
  34. package/dist/cli/formatters/terminal.d.ts +19 -0
  35. package/dist/cli/formatters/terminal.d.ts.map +1 -0
  36. package/dist/cli/formatters/terminal.js +125 -0
  37. package/dist/cli/formatters/terminal.js.map +1 -0
  38. package/dist/cli/index.d.ts +7 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +7 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/data/governance-rules.json +94 -0
  43. package/dist/governance/audit-log.d.ts +17 -0
  44. package/dist/governance/audit-log.d.ts.map +1 -0
  45. package/dist/governance/audit-log.js +44 -0
  46. package/dist/governance/audit-log.js.map +1 -0
  47. package/dist/governance/index.d.ts +8 -0
  48. package/dist/governance/index.d.ts.map +1 -0
  49. package/dist/governance/index.js +8 -0
  50. package/dist/governance/index.js.map +1 -0
  51. package/dist/governance/permissions.d.ts +26 -0
  52. package/dist/governance/permissions.d.ts.map +1 -0
  53. package/dist/governance/permissions.js +75 -0
  54. package/dist/governance/permissions.js.map +1 -0
  55. package/dist/governance/rules-engine.d.ts +24 -0
  56. package/dist/governance/rules-engine.d.ts.map +1 -0
  57. package/dist/governance/rules-engine.js +111 -0
  58. package/dist/governance/rules-engine.js.map +1 -0
  59. package/dist/governance/trust-manager.d.ts +34 -0
  60. package/dist/governance/trust-manager.d.ts.map +1 -0
  61. package/dist/governance/trust-manager.js +148 -0
  62. package/dist/governance/trust-manager.js.map +1 -0
  63. package/dist/index.d.ts +23 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +28 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/knowledge-graph/component-index.d.ts +320 -0
  68. package/dist/knowledge-graph/component-index.d.ts.map +1 -0
  69. package/dist/knowledge-graph/component-index.js +1033 -0
  70. package/dist/knowledge-graph/component-index.js.map +1 -0
  71. package/dist/knowledge-graph/index.d.ts +134 -0
  72. package/dist/knowledge-graph/index.d.ts.map +1 -0
  73. package/dist/knowledge-graph/index.js +249 -0
  74. package/dist/knowledge-graph/index.js.map +1 -0
  75. package/dist/knowledge-graph/learning-history.d.ts +77 -0
  76. package/dist/knowledge-graph/learning-history.d.ts.map +1 -0
  77. package/dist/knowledge-graph/learning-history.js +187 -0
  78. package/dist/knowledge-graph/learning-history.js.map +1 -0
  79. package/dist/knowledge-graph/relationship-map.d.ts +55 -0
  80. package/dist/knowledge-graph/relationship-map.d.ts.map +1 -0
  81. package/dist/knowledge-graph/relationship-map.js +238 -0
  82. package/dist/knowledge-graph/relationship-map.js.map +1 -0
  83. package/dist/knowledge-graph/token-taxonomy.d.ts +127 -0
  84. package/dist/knowledge-graph/token-taxonomy.d.ts.map +1 -0
  85. package/dist/knowledge-graph/token-taxonomy.js +357 -0
  86. package/dist/knowledge-graph/token-taxonomy.js.map +1 -0
  87. package/dist/loop/fix-agent.d.ts +55 -0
  88. package/dist/loop/fix-agent.d.ts.map +1 -0
  89. package/dist/loop/fix-agent.js +344 -0
  90. package/dist/loop/fix-agent.js.map +1 -0
  91. package/dist/loop/index.d.ts +8 -0
  92. package/dist/loop/index.d.ts.map +1 -0
  93. package/dist/loop/index.js +8 -0
  94. package/dist/loop/index.js.map +1 -0
  95. package/dist/loop/issue-fetcher.d.ts +51 -0
  96. package/dist/loop/issue-fetcher.d.ts.map +1 -0
  97. package/dist/loop/issue-fetcher.js +188 -0
  98. package/dist/loop/issue-fetcher.js.map +1 -0
  99. package/dist/loop/observer.d.ts +42 -0
  100. package/dist/loop/observer.d.ts.map +1 -0
  101. package/dist/loop/observer.js +220 -0
  102. package/dist/loop/observer.js.map +1 -0
  103. package/dist/loop/pacer.d.ts +44 -0
  104. package/dist/loop/pacer.d.ts.map +1 -0
  105. package/dist/loop/pacer.js +90 -0
  106. package/dist/loop/pacer.js.map +1 -0
  107. package/dist/loop/reporter.d.ts +9 -0
  108. package/dist/loop/reporter.d.ts.map +1 -0
  109. package/dist/loop/reporter.js +119 -0
  110. package/dist/loop/reporter.js.map +1 -0
  111. package/dist/loop/runner.d.ts +57 -0
  112. package/dist/loop/runner.d.ts.map +1 -0
  113. package/dist/loop/runner.js +390 -0
  114. package/dist/loop/runner.js.map +1 -0
  115. package/dist/loop/types.d.ts +151 -0
  116. package/dist/loop/types.d.ts.map +1 -0
  117. package/dist/loop/types.js +22 -0
  118. package/dist/loop/types.js.map +1 -0
  119. package/dist/mcp/index.d.ts +7 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +7 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/server.d.ts +12 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +618 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/pipeline/agent-runner.d.ts +34 -0
  128. package/dist/pipeline/agent-runner.d.ts.map +1 -0
  129. package/dist/pipeline/agent-runner.js +323 -0
  130. package/dist/pipeline/agent-runner.js.map +1 -0
  131. package/dist/pipeline/agents/accessibility-auditor.d.ts +10 -0
  132. package/dist/pipeline/agents/accessibility-auditor.d.ts.map +1 -0
  133. package/dist/pipeline/agents/accessibility-auditor.js +69 -0
  134. package/dist/pipeline/agents/accessibility-auditor.js.map +1 -0
  135. package/dist/pipeline/agents/code-reviewer.d.ts +10 -0
  136. package/dist/pipeline/agents/code-reviewer.d.ts.map +1 -0
  137. package/dist/pipeline/agents/code-reviewer.js +75 -0
  138. package/dist/pipeline/agents/code-reviewer.js.map +1 -0
  139. package/dist/pipeline/agents/code-writer.d.ts +10 -0
  140. package/dist/pipeline/agents/code-writer.d.ts.map +1 -0
  141. package/dist/pipeline/agents/code-writer.js +103 -0
  142. package/dist/pipeline/agents/code-writer.js.map +1 -0
  143. package/dist/pipeline/agents/component-architect.d.ts +13 -0
  144. package/dist/pipeline/agents/component-architect.d.ts.map +1 -0
  145. package/dist/pipeline/agents/component-architect.js +81 -0
  146. package/dist/pipeline/agents/component-architect.js.map +1 -0
  147. package/dist/pipeline/agents/index.d.ts +16 -0
  148. package/dist/pipeline/agents/index.d.ts.map +1 -0
  149. package/dist/pipeline/agents/index.js +24 -0
  150. package/dist/pipeline/agents/index.js.map +1 -0
  151. package/dist/pipeline/agents/library-researcher.d.ts +12 -0
  152. package/dist/pipeline/agents/library-researcher.d.ts.map +1 -0
  153. package/dist/pipeline/agents/library-researcher.js +85 -0
  154. package/dist/pipeline/agents/library-researcher.js.map +1 -0
  155. package/dist/pipeline/agents/quality-gate.d.ts +9 -0
  156. package/dist/pipeline/agents/quality-gate.d.ts.map +1 -0
  157. package/dist/pipeline/agents/quality-gate.js +71 -0
  158. package/dist/pipeline/agents/quality-gate.js.map +1 -0
  159. package/dist/pipeline/agents/spec-analyst.d.ts +10 -0
  160. package/dist/pipeline/agents/spec-analyst.d.ts.map +1 -0
  161. package/dist/pipeline/agents/spec-analyst.js +72 -0
  162. package/dist/pipeline/agents/spec-analyst.js.map +1 -0
  163. package/dist/pipeline/agents/story-author.d.ts +9 -0
  164. package/dist/pipeline/agents/story-author.d.ts.map +1 -0
  165. package/dist/pipeline/agents/story-author.js +65 -0
  166. package/dist/pipeline/agents/story-author.js.map +1 -0
  167. package/dist/pipeline/artifact-store.d.ts +27 -0
  168. package/dist/pipeline/artifact-store.d.ts.map +1 -0
  169. package/dist/pipeline/artifact-store.js +77 -0
  170. package/dist/pipeline/artifact-store.js.map +1 -0
  171. package/dist/pipeline/conversational-gate.d.ts +26 -0
  172. package/dist/pipeline/conversational-gate.d.ts.map +1 -0
  173. package/dist/pipeline/conversational-gate.js +122 -0
  174. package/dist/pipeline/conversational-gate.js.map +1 -0
  175. package/dist/pipeline/index.d.ts +14 -0
  176. package/dist/pipeline/index.d.ts.map +1 -0
  177. package/dist/pipeline/index.js +17 -0
  178. package/dist/pipeline/index.js.map +1 -0
  179. package/dist/pipeline/iteration-tracker.d.ts +29 -0
  180. package/dist/pipeline/iteration-tracker.d.ts.map +1 -0
  181. package/dist/pipeline/iteration-tracker.js +102 -0
  182. package/dist/pipeline/iteration-tracker.js.map +1 -0
  183. package/dist/pipeline/learning-bridge.d.ts +37 -0
  184. package/dist/pipeline/learning-bridge.d.ts.map +1 -0
  185. package/dist/pipeline/learning-bridge.js +118 -0
  186. package/dist/pipeline/learning-bridge.js.map +1 -0
  187. package/dist/pipeline/orchestrator.d.ts +45 -0
  188. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  189. package/dist/pipeline/orchestrator.js +473 -0
  190. package/dist/pipeline/orchestrator.js.map +1 -0
  191. package/dist/pipeline/templates/architecture.d.ts +27 -0
  192. package/dist/pipeline/templates/architecture.d.ts.map +1 -0
  193. package/dist/pipeline/templates/architecture.js +111 -0
  194. package/dist/pipeline/templates/architecture.js.map +1 -0
  195. package/dist/pipeline/templates/brief.d.ts +22 -0
  196. package/dist/pipeline/templates/brief.d.ts.map +1 -0
  197. package/dist/pipeline/templates/brief.js +121 -0
  198. package/dist/pipeline/templates/brief.js.map +1 -0
  199. package/dist/pipeline/templates/component-rules.d.ts +25 -0
  200. package/dist/pipeline/templates/component-rules.d.ts.map +1 -0
  201. package/dist/pipeline/templates/component-rules.js +93 -0
  202. package/dist/pipeline/templates/component-rules.js.map +1 -0
  203. package/dist/pipeline/templates/index.d.ts +9 -0
  204. package/dist/pipeline/templates/index.d.ts.map +1 -0
  205. package/dist/pipeline/templates/index.js +7 -0
  206. package/dist/pipeline/templates/index.js.map +1 -0
  207. package/dist/pipeline/tool-handler.d.ts +25 -0
  208. package/dist/pipeline/tool-handler.d.ts.map +1 -0
  209. package/dist/pipeline/tool-handler.js +392 -0
  210. package/dist/pipeline/tool-handler.js.map +1 -0
  211. package/dist/pipeline/types.d.ts +146 -0
  212. package/dist/pipeline/types.d.ts.map +1 -0
  213. package/dist/pipeline/types.js +27 -0
  214. package/dist/pipeline/types.js.map +1 -0
  215. package/dist/plan/action-types.d.ts +31 -0
  216. package/dist/plan/action-types.d.ts.map +1 -0
  217. package/dist/plan/action-types.js +83 -0
  218. package/dist/plan/action-types.js.map +1 -0
  219. package/dist/plan/decision-engine.d.ts +57 -0
  220. package/dist/plan/decision-engine.d.ts.map +1 -0
  221. package/dist/plan/decision-engine.js +162 -0
  222. package/dist/plan/decision-engine.js.map +1 -0
  223. package/dist/plan/index.d.ts +6 -0
  224. package/dist/plan/index.d.ts.map +1 -0
  225. package/dist/plan/index.js +6 -0
  226. package/dist/plan/index.js.map +1 -0
  227. package/dist/types.d.ts +351 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +26 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/utils/anthropic.d.ts +15 -0
  232. package/dist/utils/anthropic.d.ts.map +1 -0
  233. package/dist/utils/anthropic.js +40 -0
  234. package/dist/utils/anthropic.js.map +1 -0
  235. package/dist/utils/id.d.ts +8 -0
  236. package/dist/utils/id.d.ts.map +1 -0
  237. package/dist/utils/id.js +14 -0
  238. package/dist/utils/id.js.map +1 -0
  239. package/package.json +80 -0
@@ -0,0 +1,357 @@
1
+ /**
2
+ * TokenTaxonomy — Organize and classify design tokens
3
+ *
4
+ * Parses token files and classifies tokens by tier (definition/usage/component),
5
+ * category (color/spacing/typography), and theme.
6
+ */
7
+ import fg from 'fast-glob';
8
+ const { globSync } = fg;
9
+ import { readFileSync } from 'fs';
10
+ import { join } from 'path';
11
+ export class TokenTaxonomy {
12
+ tokens = new Map();
13
+ /**
14
+ * Build the token taxonomy by scanning token files.
15
+ *
16
+ * Two-pass build:
17
+ * 1. Walk the source JSON files in `tier-{1-definitions,2-usage,3-components}/`
18
+ * directories to build an authoritative `tokenName → tier` map. The file
19
+ * path is the source of truth for tier; relying on CSS-variable name
20
+ * heuristics mis-classifies tier-2 blocks like `animation` and `viz`
21
+ * because their first segment after `--ed-theme-` isn't a stock CSS
22
+ * category name (#680).
23
+ * 2. Parse the compiled tokens.css per theme for the actual values,
24
+ * looking up the tier in the map produced by pass 1.
25
+ *
26
+ * Tokens that exist in the compiled CSS but not in any source JSON
27
+ * (deprecated/leftover) fall through to the legacy name-heuristic
28
+ * classifier so we never emit an empty tier — but in practice every
29
+ * compiled token traces back to a JSON definition.
30
+ */
31
+ async build(rootDir) {
32
+ this.tokens.clear();
33
+ const tokenDir = join(rootDir, 'packages', 'eddie-design-tokens');
34
+ const tierMap = this.buildTierMap(tokenDir);
35
+ const cssFiles = globSync('*/build/css/tokens.css', {
36
+ cwd: tokenDir,
37
+ });
38
+ for (const file of cssFiles) {
39
+ const themeName = file.split('/')[0];
40
+ const filePath = join(tokenDir, file);
41
+ try {
42
+ await this.parseTokenFile(filePath, themeName, tierMap);
43
+ }
44
+ catch (err) {
45
+ // Silently skip unparseable files
46
+ }
47
+ }
48
+ }
49
+ /**
50
+ * Build the authoritative `tokenName → tier` map by walking source JSON.
51
+ *
52
+ * Looks under any theme directory (`bfw`, `bfw-dark`, `altitude`, etc.)
53
+ * for these conventional subdirectories:
54
+ * - `tier-1-definitions/*.json` → tier "definition"
55
+ * - `tier-2-usage/*.json` → tier "usage"
56
+ * - `tier-3-components/*.json` → tier "component"
57
+ *
58
+ * Each leaf node (object with a non-object `value`) becomes a CSS variable
59
+ * name derived from the path: `--ed-<dot.path.dashed>` for tier 1, and
60
+ * `--ed-theme-<dot.path.dashed>` for tiers 2 and 3. The tier-1 vs theme
61
+ * prefix split mirrors how Style Dictionary emits the compiled CSS.
62
+ *
63
+ * Earliest tier wins on collision (in practice tokens don't appear in
64
+ * multiple tiers; this just keeps the result deterministic).
65
+ */
66
+ buildTierMap(tokenDir) {
67
+ const map = new Map();
68
+ const tiers = [
69
+ ['*/tier-1-definitions/*.json', 'definition'],
70
+ ['*/tier-2-usage/*.json', 'usage'],
71
+ ['*/tier-3-components/*.json', 'component'],
72
+ ];
73
+ for (const [pattern, tier] of tiers) {
74
+ const isTier1 = tier === 'definition';
75
+ const files = globSync(pattern, { cwd: tokenDir });
76
+ for (const relPath of files) {
77
+ try {
78
+ const json = JSON.parse(readFileSync(join(tokenDir, relPath), 'utf-8'));
79
+ for (const cssVarName of this.collectCssVarNames(json, isTier1)) {
80
+ if (!map.has(cssVarName))
81
+ map.set(cssVarName, tier);
82
+ }
83
+ }
84
+ catch {
85
+ // Skip unparseable JSON
86
+ }
87
+ }
88
+ }
89
+ return map;
90
+ }
91
+ /**
92
+ * Walk a Style-Dictionary-style JSON tree and yield the CSS variable name
93
+ * for each leaf (object with a non-object `value` property). Non-leaf
94
+ * objects recurse; primitive/array values are ignored.
95
+ */
96
+ collectCssVarNames(json, isTier1, path = []) {
97
+ if (typeof json !== 'object' || json === null)
98
+ return [];
99
+ const obj = json;
100
+ if ('value' in obj && (typeof obj.value !== 'object' || obj.value === null)) {
101
+ const segments = path.join('-').toLowerCase().replace(/[^a-z0-9-]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
102
+ if (!segments)
103
+ return [];
104
+ const prefix = isTier1 ? '--ed-' : '--ed-theme-';
105
+ return [prefix + segments];
106
+ }
107
+ const out = [];
108
+ for (const [k, v] of Object.entries(obj)) {
109
+ out.push(...this.collectCssVarNames(v, isTier1, [...path, k]));
110
+ }
111
+ return out;
112
+ }
113
+ /**
114
+ * Parse a tokens.css file and extract all tokens
115
+ */
116
+ async parseTokenFile(filePath, themeName, tierMap) {
117
+ const content = readFileSync(filePath, 'utf-8');
118
+ // Match all CSS custom properties: --ed-*: value;
119
+ const tokenRegex = /(--ed[^:]+):\s*([^;]+);/g;
120
+ let match;
121
+ while ((match = tokenRegex.exec(content)) !== null) {
122
+ const name = match[1].trim();
123
+ const value = match[2].trim();
124
+ const tier = tierMap.get(name) ?? this.classifyTier(name);
125
+ const category = this.classifyCategory(name);
126
+ const intent = this.extractIntent(name);
127
+ const references = this.extractReferences(name, value);
128
+ const subcategory = this.deriveSubcategory(name, category);
129
+ const validProperties = this.deriveValidProperties(subcategory);
130
+ const key = `${name}:${themeName}`;
131
+ if (!this.tokens.has(key)) {
132
+ this.tokens.set(key, {
133
+ name,
134
+ tier,
135
+ category,
136
+ value,
137
+ references,
138
+ intent,
139
+ usedBy: [],
140
+ theme: themeName,
141
+ deprecated: false,
142
+ subcategory,
143
+ validProperties,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ /**
149
+ * Derive the color subcategory ("background" | "content" | "border") from
150
+ * a token name. The convention is that the segment immediately after
151
+ * `color-` in the name is the subcategory:
152
+ * --ed-theme-color-background-default → "background"
153
+ * --ed-theme-color-content-default → "content"
154
+ * --ed-theme-color-border-subtle → "border"
155
+ * Returns undefined for non-color tokens, definition-tier color tokens
156
+ * (no subcategory in name), and any color-token shape we don't recognize.
157
+ */
158
+ deriveSubcategory(name, category) {
159
+ if (category !== 'color')
160
+ return undefined;
161
+ const m = name.match(/--ed-(?:theme-)?color-(background|content|border)-/);
162
+ if (!m)
163
+ return undefined;
164
+ return m[1];
165
+ }
166
+ /**
167
+ * Derive the CSS properties this token is valid to apply to.
168
+ * Only meaningful for color tokens with a known subcategory; other tokens
169
+ * return undefined (no `validProperties` field on output).
170
+ */
171
+ deriveValidProperties(subcategory) {
172
+ switch (subcategory) {
173
+ case 'background':
174
+ return ['background', 'background-color'];
175
+ case 'content':
176
+ return ['color', 'fill'];
177
+ case 'border':
178
+ return ['border-color'];
179
+ default:
180
+ return undefined;
181
+ }
182
+ }
183
+ /**
184
+ * Classify a token as tier 1 (definition), tier 2 (usage), or tier 3 (component)
185
+ *
186
+ * Tier 1: --ed-{category}-{name} (e.g., --ed-color-brand-blue)
187
+ * Tier 2: --ed-theme-{category}-{semantic} (e.g., --ed-theme-color-background-default)
188
+ * Tier 3: --ed-theme-{component}-{property} (e.g., --ed-theme-button-background)
189
+ */
190
+ classifyTier(name) {
191
+ if (name.includes('--ed-theme-')) {
192
+ // Tier 2 or 3
193
+ const parts = name.split('-');
194
+ // Check if it looks like a component token
195
+ // e.g., --ed-theme-button-background (has component-specific name)
196
+ const knownCategories = ['color', 'spacing', 'typography', 'border', 'shadow', 'motion', 'breakpoint', 'z-index', 'opacity'];
197
+ const hasKnownCategory = parts.some((p) => knownCategories.includes(p));
198
+ if (!hasKnownCategory && parts.length > 4) {
199
+ // Likely a component token
200
+ return 'component';
201
+ }
202
+ return 'usage';
203
+ }
204
+ return 'definition';
205
+ }
206
+ /**
207
+ * Classify a token by category
208
+ */
209
+ classifyCategory(name) {
210
+ const lowerName = name.toLowerCase();
211
+ if (lowerName.includes('color'))
212
+ return 'color';
213
+ if (lowerName.includes('space') || lowerName.includes('gap') || lowerName.includes('padding') || lowerName.includes('margin'))
214
+ return 'spacing';
215
+ if (lowerName.includes('font') ||
216
+ lowerName.includes('text') ||
217
+ lowerName.includes('letter') ||
218
+ lowerName.includes('line-height'))
219
+ return 'typography';
220
+ if (lowerName.includes('border'))
221
+ return 'border';
222
+ if (lowerName.includes('shadow'))
223
+ return 'shadow';
224
+ if (lowerName.includes('transition') || lowerName.includes('animation') || lowerName.includes('duration'))
225
+ return 'motion';
226
+ if (lowerName.includes('breakpoint') || lowerName.includes('viewport'))
227
+ return 'breakpoint';
228
+ if (lowerName.includes('z-index') || lowerName.includes('zindex'))
229
+ return 'z-index';
230
+ if (lowerName.includes('opacity'))
231
+ return 'opacity';
232
+ return 'color'; // Default to color
233
+ }
234
+ /**
235
+ * Extract intent from token name
236
+ */
237
+ extractIntent(name) {
238
+ // Remove prefixes and convert to readable form
239
+ const parts = name
240
+ .replace('--ed-', '')
241
+ .replace('--ed-theme-', '')
242
+ .split('-');
243
+ // Skip the first 1-2 parts (category names)
244
+ const intentParts = parts.slice(2);
245
+ if (intentParts.length === 0) {
246
+ return parts.join(' ');
247
+ }
248
+ return intentParts.join(' ');
249
+ }
250
+ /**
251
+ * Extract what token this one references (if any)
252
+ */
253
+ extractReferences(name, value) {
254
+ // If the value is itself a CSS variable, track it
255
+ const refMatch = value.match(/var\((--ed[^)]+)\)/);
256
+ if (refMatch) {
257
+ return refMatch[1];
258
+ }
259
+ return undefined;
260
+ }
261
+ /**
262
+ * Get a token by name
263
+ */
264
+ getToken(name) {
265
+ // Try exact match first
266
+ for (const [, entry] of this.tokens) {
267
+ if (entry.name === name) {
268
+ return entry;
269
+ }
270
+ }
271
+ return undefined;
272
+ }
273
+ /**
274
+ * Get all tokens
275
+ */
276
+ getAll() {
277
+ const seen = new Set();
278
+ const result = [];
279
+ for (const entry of this.tokens.values()) {
280
+ if (!seen.has(entry.name)) {
281
+ result.push(entry);
282
+ seen.add(entry.name);
283
+ }
284
+ }
285
+ return result;
286
+ }
287
+ /**
288
+ * Get tokens by tier
289
+ */
290
+ getByTier(tier) {
291
+ const seen = new Set();
292
+ const result = [];
293
+ for (const entry of this.tokens.values()) {
294
+ if (entry.tier === tier && !seen.has(entry.name)) {
295
+ result.push(entry);
296
+ seen.add(entry.name);
297
+ }
298
+ }
299
+ return result;
300
+ }
301
+ /**
302
+ * Get tokens by category
303
+ */
304
+ getByCategory(category) {
305
+ const seen = new Set();
306
+ const result = [];
307
+ for (const entry of this.tokens.values()) {
308
+ if (entry.category === category && !seen.has(entry.name)) {
309
+ result.push(entry);
310
+ seen.add(entry.name);
311
+ }
312
+ }
313
+ return result;
314
+ }
315
+ /**
316
+ * Get tokens by theme
317
+ */
318
+ getByTheme(theme) {
319
+ return Array.from(this.tokens.values()).filter((entry) => entry.theme === theme);
320
+ }
321
+ /**
322
+ * Get available themes
323
+ */
324
+ getThemes() {
325
+ const themes = new Set();
326
+ for (const entry of this.tokens.values()) {
327
+ themes.add(entry.theme);
328
+ }
329
+ return Array.from(themes).sort();
330
+ }
331
+ /**
332
+ * Serialize to JSON
333
+ */
334
+ toJSON() {
335
+ const obj = {};
336
+ const seen = new Set();
337
+ for (const entry of this.tokens.values()) {
338
+ const key = `${entry.name}:${entry.theme}`;
339
+ if (!seen.has(key)) {
340
+ obj[key] = entry;
341
+ seen.add(key);
342
+ }
343
+ }
344
+ return obj;
345
+ }
346
+ /**
347
+ * Deserialize from JSON
348
+ */
349
+ static fromJSON(obj) {
350
+ const taxonomy = new TokenTaxonomy();
351
+ for (const [key, entry] of Object.entries(obj)) {
352
+ taxonomy.tokens.set(key, entry);
353
+ }
354
+ return taxonomy;
355
+ }
356
+ }
357
+ //# sourceMappingURL=token-taxonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-taxonomy.js","sourceRoot":"","sources":["../../src/knowledge-graph/token-taxonomy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * FixAgent — Lightweight single-call violation fixer.
3
+ *
4
+ * Makes one Anthropic API call with the file content, violation details,
5
+ * and available tokens. Validates the fix, retries once if needed.
6
+ * Much cheaper than the full 8-agent pipeline (~20K tokens vs ~160K).
7
+ */
8
+ import type { KnowledgeGraph } from '../knowledge-graph/index.js';
9
+ import type { ViolationIssue, FixAttempt } from './types.js';
10
+ import type { Pacer } from './pacer.js';
11
+ export declare class FixAgent {
12
+ private apiKey;
13
+ private model;
14
+ private rootDir;
15
+ private knowledgeGraph;
16
+ private pacer;
17
+ private client;
18
+ private tokenValidator;
19
+ private namingValidator;
20
+ private guidelinesCache;
21
+ constructor(apiKey: string, model: string, rootDir: string, knowledgeGraph: KnowledgeGraph, pacer: Pacer);
22
+ /**
23
+ * Attempt to fix a single violation issue.
24
+ */
25
+ fix(issue: ViolationIssue): Promise<FixAttempt>;
26
+ /**
27
+ * Build the system prompt for the fix-agent.
28
+ */
29
+ private buildSystemPrompt;
30
+ /**
31
+ * Build the user message with the file content and violation details.
32
+ */
33
+ private buildUserMessage;
34
+ /**
35
+ * Extract code from the API response.
36
+ */
37
+ private extractCode;
38
+ /**
39
+ * Validate content by writing to a temp file and running validators.
40
+ */
41
+ private validateContent;
42
+ /**
43
+ * Check that the fix is minimal — doesn't touch too many lines beyond the violation site.
44
+ */
45
+ private isMinimalChange;
46
+ /**
47
+ * Get relevant token names for the violations in this issue.
48
+ */
49
+ private getRelevantTokens;
50
+ /**
51
+ * Load and cache code guidelines.
52
+ */
53
+ private getGuidelines;
54
+ }
55
+ //# sourceMappingURL=fix-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-agent.d.ts","sourceRoot":"","sources":["../../src/loop/fix-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAKxC,qBAAa,QAAQ;IAOjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IAVf,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAuB;gBAGpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK;IAOtB;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IA+JrD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;YACW,eAAe;IA4B7B;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,OAAO,CAAC,aAAa;CActB"}