@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.
- package/README.md +109 -0
- package/dist/analyze/drift-detector.d.ts +30 -0
- package/dist/analyze/drift-detector.d.ts.map +1 -0
- package/dist/analyze/drift-detector.js +310 -0
- package/dist/analyze/drift-detector.js.map +1 -0
- package/dist/analyze/health-scorer.d.ts +71 -0
- package/dist/analyze/health-scorer.d.ts.map +1 -0
- package/dist/analyze/health-scorer.js +420 -0
- package/dist/analyze/health-scorer.js.map +1 -0
- package/dist/analyze/index.d.ts +11 -0
- package/dist/analyze/index.d.ts.map +1 -0
- package/dist/analyze/index.js +11 -0
- package/dist/analyze/index.js.map +1 -0
- package/dist/analyze/naming-validator.d.ts +99 -0
- package/dist/analyze/naming-validator.d.ts.map +1 -0
- package/dist/analyze/naming-validator.js +430 -0
- package/dist/analyze/naming-validator.js.map +1 -0
- package/dist/analyze/slot-contract-validator.d.ts +68 -0
- package/dist/analyze/slot-contract-validator.d.ts.map +1 -0
- package/dist/analyze/slot-contract-validator.js +232 -0
- package/dist/analyze/slot-contract-validator.js.map +1 -0
- package/dist/analyze/token-validator.d.ts +62 -0
- package/dist/analyze/token-validator.d.ts.map +1 -0
- package/dist/analyze/token-validator.js +348 -0
- package/dist/analyze/token-validator.js.map +1 -0
- package/dist/cli/brain.d.ts +12 -0
- package/dist/cli/brain.d.ts.map +1 -0
- package/dist/cli/brain.js +641 -0
- package/dist/cli/brain.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +15 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +18 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/terminal.d.ts +19 -0
- package/dist/cli/formatters/terminal.d.ts.map +1 -0
- package/dist/cli/formatters/terminal.js +125 -0
- package/dist/cli/formatters/terminal.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/data/governance-rules.json +94 -0
- package/dist/governance/audit-log.d.ts +17 -0
- package/dist/governance/audit-log.d.ts.map +1 -0
- package/dist/governance/audit-log.js +44 -0
- package/dist/governance/audit-log.js.map +1 -0
- package/dist/governance/index.d.ts +8 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +8 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/permissions.d.ts +26 -0
- package/dist/governance/permissions.d.ts.map +1 -0
- package/dist/governance/permissions.js +75 -0
- package/dist/governance/permissions.js.map +1 -0
- package/dist/governance/rules-engine.d.ts +24 -0
- package/dist/governance/rules-engine.d.ts.map +1 -0
- package/dist/governance/rules-engine.js +111 -0
- package/dist/governance/rules-engine.js.map +1 -0
- package/dist/governance/trust-manager.d.ts +34 -0
- package/dist/governance/trust-manager.d.ts.map +1 -0
- package/dist/governance/trust-manager.js +148 -0
- package/dist/governance/trust-manager.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-graph/component-index.d.ts +320 -0
- package/dist/knowledge-graph/component-index.d.ts.map +1 -0
- package/dist/knowledge-graph/component-index.js +1033 -0
- package/dist/knowledge-graph/component-index.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +134 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +249 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/learning-history.d.ts +77 -0
- package/dist/knowledge-graph/learning-history.d.ts.map +1 -0
- package/dist/knowledge-graph/learning-history.js +187 -0
- package/dist/knowledge-graph/learning-history.js.map +1 -0
- package/dist/knowledge-graph/relationship-map.d.ts +55 -0
- package/dist/knowledge-graph/relationship-map.d.ts.map +1 -0
- package/dist/knowledge-graph/relationship-map.js +238 -0
- package/dist/knowledge-graph/relationship-map.js.map +1 -0
- package/dist/knowledge-graph/token-taxonomy.d.ts +127 -0
- package/dist/knowledge-graph/token-taxonomy.d.ts.map +1 -0
- package/dist/knowledge-graph/token-taxonomy.js +357 -0
- package/dist/knowledge-graph/token-taxonomy.js.map +1 -0
- package/dist/loop/fix-agent.d.ts +55 -0
- package/dist/loop/fix-agent.d.ts.map +1 -0
- package/dist/loop/fix-agent.js +344 -0
- package/dist/loop/fix-agent.js.map +1 -0
- package/dist/loop/index.d.ts +8 -0
- package/dist/loop/index.d.ts.map +1 -0
- package/dist/loop/index.js +8 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/issue-fetcher.d.ts +51 -0
- package/dist/loop/issue-fetcher.d.ts.map +1 -0
- package/dist/loop/issue-fetcher.js +188 -0
- package/dist/loop/issue-fetcher.js.map +1 -0
- package/dist/loop/observer.d.ts +42 -0
- package/dist/loop/observer.d.ts.map +1 -0
- package/dist/loop/observer.js +220 -0
- package/dist/loop/observer.js.map +1 -0
- package/dist/loop/pacer.d.ts +44 -0
- package/dist/loop/pacer.d.ts.map +1 -0
- package/dist/loop/pacer.js +90 -0
- package/dist/loop/pacer.js.map +1 -0
- package/dist/loop/reporter.d.ts +9 -0
- package/dist/loop/reporter.d.ts.map +1 -0
- package/dist/loop/reporter.js +119 -0
- package/dist/loop/reporter.js.map +1 -0
- package/dist/loop/runner.d.ts +57 -0
- package/dist/loop/runner.d.ts.map +1 -0
- package/dist/loop/runner.js +390 -0
- package/dist/loop/runner.js.map +1 -0
- package/dist/loop/types.d.ts +151 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/types.js +22 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +618 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/pipeline/agent-runner.d.ts +34 -0
- package/dist/pipeline/agent-runner.d.ts.map +1 -0
- package/dist/pipeline/agent-runner.js +323 -0
- package/dist/pipeline/agent-runner.js.map +1 -0
- package/dist/pipeline/agents/accessibility-auditor.d.ts +10 -0
- package/dist/pipeline/agents/accessibility-auditor.d.ts.map +1 -0
- package/dist/pipeline/agents/accessibility-auditor.js +69 -0
- package/dist/pipeline/agents/accessibility-auditor.js.map +1 -0
- package/dist/pipeline/agents/code-reviewer.d.ts +10 -0
- package/dist/pipeline/agents/code-reviewer.d.ts.map +1 -0
- package/dist/pipeline/agents/code-reviewer.js +75 -0
- package/dist/pipeline/agents/code-reviewer.js.map +1 -0
- package/dist/pipeline/agents/code-writer.d.ts +10 -0
- package/dist/pipeline/agents/code-writer.d.ts.map +1 -0
- package/dist/pipeline/agents/code-writer.js +103 -0
- package/dist/pipeline/agents/code-writer.js.map +1 -0
- package/dist/pipeline/agents/component-architect.d.ts +13 -0
- package/dist/pipeline/agents/component-architect.d.ts.map +1 -0
- package/dist/pipeline/agents/component-architect.js +81 -0
- package/dist/pipeline/agents/component-architect.js.map +1 -0
- package/dist/pipeline/agents/index.d.ts +16 -0
- package/dist/pipeline/agents/index.d.ts.map +1 -0
- package/dist/pipeline/agents/index.js +24 -0
- package/dist/pipeline/agents/index.js.map +1 -0
- package/dist/pipeline/agents/library-researcher.d.ts +12 -0
- package/dist/pipeline/agents/library-researcher.d.ts.map +1 -0
- package/dist/pipeline/agents/library-researcher.js +85 -0
- package/dist/pipeline/agents/library-researcher.js.map +1 -0
- package/dist/pipeline/agents/quality-gate.d.ts +9 -0
- package/dist/pipeline/agents/quality-gate.d.ts.map +1 -0
- package/dist/pipeline/agents/quality-gate.js +71 -0
- package/dist/pipeline/agents/quality-gate.js.map +1 -0
- package/dist/pipeline/agents/spec-analyst.d.ts +10 -0
- package/dist/pipeline/agents/spec-analyst.d.ts.map +1 -0
- package/dist/pipeline/agents/spec-analyst.js +72 -0
- package/dist/pipeline/agents/spec-analyst.js.map +1 -0
- package/dist/pipeline/agents/story-author.d.ts +9 -0
- package/dist/pipeline/agents/story-author.d.ts.map +1 -0
- package/dist/pipeline/agents/story-author.js +65 -0
- package/dist/pipeline/agents/story-author.js.map +1 -0
- package/dist/pipeline/artifact-store.d.ts +27 -0
- package/dist/pipeline/artifact-store.d.ts.map +1 -0
- package/dist/pipeline/artifact-store.js +77 -0
- package/dist/pipeline/artifact-store.js.map +1 -0
- package/dist/pipeline/conversational-gate.d.ts +26 -0
- package/dist/pipeline/conversational-gate.d.ts.map +1 -0
- package/dist/pipeline/conversational-gate.js +122 -0
- package/dist/pipeline/conversational-gate.js.map +1 -0
- package/dist/pipeline/index.d.ts +14 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +17 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/iteration-tracker.d.ts +29 -0
- package/dist/pipeline/iteration-tracker.d.ts.map +1 -0
- package/dist/pipeline/iteration-tracker.js +102 -0
- package/dist/pipeline/iteration-tracker.js.map +1 -0
- package/dist/pipeline/learning-bridge.d.ts +37 -0
- package/dist/pipeline/learning-bridge.d.ts.map +1 -0
- package/dist/pipeline/learning-bridge.js +118 -0
- package/dist/pipeline/learning-bridge.js.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +45 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.js +473 -0
- package/dist/pipeline/orchestrator.js.map +1 -0
- package/dist/pipeline/templates/architecture.d.ts +27 -0
- package/dist/pipeline/templates/architecture.d.ts.map +1 -0
- package/dist/pipeline/templates/architecture.js +111 -0
- package/dist/pipeline/templates/architecture.js.map +1 -0
- package/dist/pipeline/templates/brief.d.ts +22 -0
- package/dist/pipeline/templates/brief.d.ts.map +1 -0
- package/dist/pipeline/templates/brief.js +121 -0
- package/dist/pipeline/templates/brief.js.map +1 -0
- package/dist/pipeline/templates/component-rules.d.ts +25 -0
- package/dist/pipeline/templates/component-rules.d.ts.map +1 -0
- package/dist/pipeline/templates/component-rules.js +93 -0
- package/dist/pipeline/templates/component-rules.js.map +1 -0
- package/dist/pipeline/templates/index.d.ts +9 -0
- package/dist/pipeline/templates/index.d.ts.map +1 -0
- package/dist/pipeline/templates/index.js +7 -0
- package/dist/pipeline/templates/index.js.map +1 -0
- package/dist/pipeline/tool-handler.d.ts +25 -0
- package/dist/pipeline/tool-handler.d.ts.map +1 -0
- package/dist/pipeline/tool-handler.js +392 -0
- package/dist/pipeline/tool-handler.js.map +1 -0
- package/dist/pipeline/types.d.ts +146 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +27 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/plan/action-types.d.ts +31 -0
- package/dist/plan/action-types.d.ts.map +1 -0
- package/dist/plan/action-types.js +83 -0
- package/dist/plan/action-types.js.map +1 -0
- package/dist/plan/decision-engine.d.ts +57 -0
- package/dist/plan/decision-engine.d.ts.map +1 -0
- package/dist/plan/decision-engine.js +162 -0
- package/dist/plan/decision-engine.js.map +1 -0
- package/dist/plan/index.d.ts +6 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +6 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/types.d.ts +351 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/anthropic.d.ts +15 -0
- package/dist/utils/anthropic.d.ts.map +1 -0
- package/dist/utils/anthropic.js +40 -0
- package/dist/utils/anthropic.js.map +1 -0
- package/dist/utils/id.d.ts +8 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +14 -0
- package/dist/utils/id.js.map +1 -0
- 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"}
|