@neonwatty/limner 0.1.0 → 0.1.2
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 +53 -39
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/compare-image-reference.d.ts +3 -0
- package/dist/commands/compare-image-reference.js +26 -3
- package/dist/commands/compare-image-reference.js.map +1 -1
- package/dist/commands/compare.d.ts +4 -1
- package/dist/commands/compare.js +72 -45
- package/dist/commands/compare.js.map +1 -1
- package/dist/core/agent-comparison-fingerprint.d.ts +12 -0
- package/dist/core/agent-comparison-fingerprint.js +27 -0
- package/dist/core/agent-comparison-fingerprint.js.map +1 -0
- package/dist/core/agent-comparison-pack.d.ts +30 -0
- package/dist/core/agent-comparison-pack.js +148 -0
- package/dist/core/agent-comparison-pack.js.map +1 -0
- package/dist/core/agent-comparison-profiles.d.ts +9 -0
- package/dist/core/agent-comparison-profiles.js +19 -0
- package/dist/core/agent-comparison-profiles.js.map +1 -0
- package/dist/core/agent-comparison-prompts.d.ts +22 -0
- package/dist/core/agent-comparison-prompts.js +84 -0
- package/dist/core/agent-comparison-prompts.js.map +1 -0
- package/dist/core/agent-comparison-report.d.ts +3 -0
- package/dist/core/agent-comparison-report.js +56 -0
- package/dist/core/agent-comparison-report.js.map +1 -0
- package/dist/core/agent-comparison-validation.d.ts +2 -0
- package/dist/core/agent-comparison-validation.js +8 -0
- package/dist/core/agent-comparison-validation.js.map +1 -0
- package/dist/core/playwright-capture.js +1 -1
- package/dist/core/playwright-capture.js.map +1 -1
- package/dist/core/report-writer.d.ts +7 -11
- package/dist/core/report-writer.js +21 -43
- package/dist/core/report-writer.js.map +1 -1
- package/dist/core/visual-spec-prompts.js +2 -2
- package/dist/core/visual-spec-prompts.js.map +1 -1
- package/dist/core/workspace.d.ts +1 -0
- package/dist/core/workspace.js +13 -2
- package/dist/core/workspace.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas/comparison.d.ts +349 -0
- package/dist/schemas/comparison.js +211 -0
- package/dist/schemas/comparison.js.map +1 -0
- package/dist/schemas/visual-spec.d.ts +8 -8
- package/dist/schemas/visual-spec.js +2 -2
- package/dist/schemas/visual-spec.js.map +1 -1
- package/docs/agent-workflow.md +20 -33
- package/docs/superpowers/plans/2026-06-12-agent-comparison-scores.md +209 -0
- package/package.json +2 -2
- package/skills/limner/SKILL.md +18 -21
- package/templates/target/AGENT_GUIDE.md +13 -9
- package/dist/commands/compare-image-app.d.ts +0 -12
- package/dist/commands/compare-image-app.js +0 -45
- package/dist/commands/compare-image-app.js.map +0 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const score01Schema = z.number().min(0).max(1);
|
|
3
|
+
const comparisonScoreSchema = z.object({
|
|
4
|
+
overall: score01Schema,
|
|
5
|
+
layout: score01Schema.optional(),
|
|
6
|
+
hierarchy: score01Schema.optional(),
|
|
7
|
+
typography: score01Schema.optional(),
|
|
8
|
+
color: score01Schema.optional(),
|
|
9
|
+
spacing: score01Schema.optional(),
|
|
10
|
+
structure: score01Schema.optional(),
|
|
11
|
+
semantics: score01Schema.optional(),
|
|
12
|
+
});
|
|
13
|
+
const hashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
14
|
+
const inputFingerprintSchema = z.object({
|
|
15
|
+
expectedImageSha256: hashSchema,
|
|
16
|
+
actualImageSha256: hashSchema,
|
|
17
|
+
expectedStructureSha256: hashSchema.optional(),
|
|
18
|
+
actualStructureSha256: hashSchema.optional(),
|
|
19
|
+
});
|
|
20
|
+
const evidenceSchema = z.object({
|
|
21
|
+
source: z.string().min(1),
|
|
22
|
+
observation: z.string().min(1),
|
|
23
|
+
});
|
|
24
|
+
const fixTargetSchema = z.object({
|
|
25
|
+
surface: z.enum(['mockup', 'implementation', 'unknown']),
|
|
26
|
+
region: z.string().min(1).optional(),
|
|
27
|
+
likelyFiles: z.array(z.string()).default([]),
|
|
28
|
+
selectors: z.array(z.string()).default([]),
|
|
29
|
+
});
|
|
30
|
+
const diffAreaSchema = z.object({
|
|
31
|
+
id: z.string().min(1),
|
|
32
|
+
title: z.string().min(1),
|
|
33
|
+
category: z.enum(['layout', 'hierarchy', 'typography', 'color', 'spacing', 'component-anatomy', 'copy-state', 'attention-flow', 'other']),
|
|
34
|
+
severity: z.enum(['high', 'medium', 'low']),
|
|
35
|
+
priority: z.number().int().positive(),
|
|
36
|
+
expected: z.string().min(1),
|
|
37
|
+
actual: z.string().min(1),
|
|
38
|
+
impact: z.string().min(1),
|
|
39
|
+
evidence: z.array(evidenceSchema).min(1),
|
|
40
|
+
fixTarget: fixTargetSchema.optional(),
|
|
41
|
+
recommendedChange: z.string().min(1),
|
|
42
|
+
});
|
|
43
|
+
const nextIterationSchema = z.object({
|
|
44
|
+
focus: z.string().min(1),
|
|
45
|
+
steps: z.array(z.string()),
|
|
46
|
+
avoidForNow: z.array(z.string()).default([]),
|
|
47
|
+
expectedImprovement: z.string().min(1).optional(),
|
|
48
|
+
});
|
|
49
|
+
const remarksSchema = z.object({
|
|
50
|
+
matches: z.array(z.string()),
|
|
51
|
+
uncertainties: z.array(z.string()).default([]),
|
|
52
|
+
possibleIntentionalDeviations: z.array(z.string()).default([]),
|
|
53
|
+
});
|
|
54
|
+
const systemFeedbackSchema = z.object({
|
|
55
|
+
inputQuality: z.array(z.string()),
|
|
56
|
+
missingContext: z.array(z.string()).default([]),
|
|
57
|
+
suggestedLimnerImprovements: z.array(z.string()).default([]),
|
|
58
|
+
});
|
|
59
|
+
const baseComparisonSchema = z.object({
|
|
60
|
+
summary: z.string().min(1),
|
|
61
|
+
score: comparisonScoreSchema,
|
|
62
|
+
confidence: score01Schema,
|
|
63
|
+
majorDiffAreas: z.array(diffAreaSchema),
|
|
64
|
+
matches: z.array(z.string()),
|
|
65
|
+
remarks: remarksSchema,
|
|
66
|
+
systemFeedback: systemFeedbackSchema,
|
|
67
|
+
nextIteration: nextIterationSchema,
|
|
68
|
+
rationale: z.string().min(1),
|
|
69
|
+
});
|
|
70
|
+
export const imageComparisonSchema = baseComparisonSchema.extend({
|
|
71
|
+
kind: z.literal('image-vs-image'),
|
|
72
|
+
inputs: z.object({
|
|
73
|
+
expectedImagePath: z.string().min(1),
|
|
74
|
+
actualImagePath: z.string().min(1),
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
export const structureComparisonSchema = baseComparisonSchema.extend({
|
|
78
|
+
kind: z.literal('structure-vs-structure'),
|
|
79
|
+
inputs: z.object({
|
|
80
|
+
expectedStructurePath: z.string().min(1),
|
|
81
|
+
actualStructurePath: z.string().min(1),
|
|
82
|
+
structureKind: z.enum(['visual-spec', 'dom-metrics', 'html', 'json-description']),
|
|
83
|
+
}),
|
|
84
|
+
});
|
|
85
|
+
export const agentComparisonBundleSchema = z.object({
|
|
86
|
+
version: z.literal(1),
|
|
87
|
+
generatedBy: z.literal('agent'),
|
|
88
|
+
profile: z.enum(['ideal-to-mockup', 'mockup-to-implementation']),
|
|
89
|
+
inputFingerprint: inputFingerprintSchema,
|
|
90
|
+
imageComparison: imageComparisonSchema,
|
|
91
|
+
structureComparison: structureComparisonSchema.optional(),
|
|
92
|
+
recommendation: z.object({
|
|
93
|
+
topFix: z.string().min(1).optional(),
|
|
94
|
+
why: z.string().min(1).optional(),
|
|
95
|
+
expectedScoreLift: score01Schema.optional(),
|
|
96
|
+
}).default({}),
|
|
97
|
+
});
|
|
98
|
+
export function createAgentComparisonBundleExample(mode, inputFingerprint = exampleFingerprint(mode)) {
|
|
99
|
+
const imageComparison = {
|
|
100
|
+
kind: 'image-vs-image',
|
|
101
|
+
inputs: {
|
|
102
|
+
expectedImagePath: 'targets/demo/source/ideal.png',
|
|
103
|
+
actualImagePath: 'targets/demo/captures/image-reference/reference.png',
|
|
104
|
+
},
|
|
105
|
+
summary: 'The screens preserve the same overall layout, with hierarchy and typography drift.',
|
|
106
|
+
score: { overall: 0.82, layout: 0.9, hierarchy: 0.74, typography: 0.76, color: 0.85, spacing: 0.8 },
|
|
107
|
+
confidence: 0.78,
|
|
108
|
+
majorDiffAreas: [exampleDiff('hero-heading', 'Hero heading lacks visual dominance', 'mockup')],
|
|
109
|
+
matches: ['Primary content appears in the same broad region.'],
|
|
110
|
+
remarks: {
|
|
111
|
+
matches: ['Overall single-column composition is similar.'],
|
|
112
|
+
uncertainties: ['Exact font family cannot be determined from screenshots alone.'],
|
|
113
|
+
possibleIntentionalDeviations: [],
|
|
114
|
+
},
|
|
115
|
+
systemFeedback: {
|
|
116
|
+
inputQuality: ['Both screenshots are readable and appear to use the same viewport.'],
|
|
117
|
+
missingContext: [],
|
|
118
|
+
suggestedLimnerImprovements: ['Include computed font metrics for the hero region when available.'],
|
|
119
|
+
},
|
|
120
|
+
nextIteration: {
|
|
121
|
+
focus: 'Tune the hero heading size, weight, and contrast.',
|
|
122
|
+
steps: ['Increase heading font size by one scale step.', 'Use a heavier font weight.'],
|
|
123
|
+
avoidForNow: ['Do not spend the next iteration on tiny border-radius differences.'],
|
|
124
|
+
expectedImprovement: 'This should improve hierarchy more than small spacing changes.',
|
|
125
|
+
},
|
|
126
|
+
rationale: 'The composition is close, but visual priority differs enough to warrant another iteration.',
|
|
127
|
+
};
|
|
128
|
+
if (mode === 'image-only') {
|
|
129
|
+
return { version: 1, generatedBy: 'agent', profile: 'ideal-to-mockup', inputFingerprint, imageComparison, recommendation: {} };
|
|
130
|
+
}
|
|
131
|
+
imageComparison.inputs = {
|
|
132
|
+
expectedImagePath: 'targets/demo/captures/reference-implementation/reference.png',
|
|
133
|
+
actualImagePath: 'targets/demo/captures/reference-implementation/implementation.png',
|
|
134
|
+
};
|
|
135
|
+
imageComparison.summary = 'The implementation preserves the mockup layout, with hierarchy and typography drift.';
|
|
136
|
+
imageComparison.majorDiffAreas = [exampleDiff('hero-heading', 'Hero heading lacks visual dominance', 'implementation')];
|
|
137
|
+
imageComparison.nextIteration = {
|
|
138
|
+
focus: 'Tune the implementation hero heading size, weight, and contrast.',
|
|
139
|
+
steps: ['Increase implementation heading font size by one scale step.', 'Use a heavier font weight.'],
|
|
140
|
+
avoidForNow: ['Do not spend the next iteration on tiny border-radius differences.'],
|
|
141
|
+
expectedImprovement: 'This should improve implementation hierarchy more than small spacing changes.',
|
|
142
|
+
};
|
|
143
|
+
return {
|
|
144
|
+
version: 1,
|
|
145
|
+
generatedBy: 'agent',
|
|
146
|
+
profile: 'mockup-to-implementation',
|
|
147
|
+
inputFingerprint,
|
|
148
|
+
imageComparison,
|
|
149
|
+
structureComparison: {
|
|
150
|
+
kind: 'structure-vs-structure',
|
|
151
|
+
inputs: {
|
|
152
|
+
expectedStructurePath: 'targets/demo/captures/reference-implementation/reference.png.metrics.json',
|
|
153
|
+
actualStructurePath: 'targets/demo/captures/reference-implementation/implementation.png.metrics.json',
|
|
154
|
+
structureKind: 'dom-metrics',
|
|
155
|
+
},
|
|
156
|
+
summary: 'The region structure is mostly preserved, but the heading style differs.',
|
|
157
|
+
score: { overall: 0.86, structure: 0.92, typography: 0.72, color: 0.84, semantics: 0.9 },
|
|
158
|
+
confidence: 0.82,
|
|
159
|
+
majorDiffAreas: [exampleDiff('heading-weight', 'Heading weight differs in computed metrics', 'implementation')],
|
|
160
|
+
matches: ['Both structures include the main content and CTA regions.'],
|
|
161
|
+
remarks: { matches: ['Major regions are present.'], uncertainties: [], possibleIntentionalDeviations: [] },
|
|
162
|
+
systemFeedback: { inputQuality: ['DOM metrics were available for both sides.'], missingContext: [], suggestedLimnerImprovements: [] },
|
|
163
|
+
nextIteration: { focus: 'Align implementation heading typography.', steps: ['Increase implementation heading font weight.'], avoidForNow: [] },
|
|
164
|
+
rationale: 'The structure matches well, but computed typography still diverges.',
|
|
165
|
+
},
|
|
166
|
+
recommendation: {
|
|
167
|
+
topFix: 'Tune the hero heading typography.',
|
|
168
|
+
why: 'Both visual and structural comparisons identify this as the highest-impact mismatch.',
|
|
169
|
+
expectedScoreLift: 0.06,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export function createAgentComparisonJsonSchema(mode = 'any') {
|
|
174
|
+
const schema = z.toJSONSchema(agentComparisonBundleSchema);
|
|
175
|
+
if (mode === 'image-and-structure') {
|
|
176
|
+
schema.required = [...new Set([...(schema.required ?? []), 'structureComparison'])];
|
|
177
|
+
}
|
|
178
|
+
if (mode === 'image-only') {
|
|
179
|
+
schema.not = { required: ['structureComparison'] };
|
|
180
|
+
}
|
|
181
|
+
return schema;
|
|
182
|
+
}
|
|
183
|
+
function exampleDiff(id, title, surface) {
|
|
184
|
+
return {
|
|
185
|
+
id,
|
|
186
|
+
title,
|
|
187
|
+
category: 'typography',
|
|
188
|
+
severity: 'medium',
|
|
189
|
+
priority: 1,
|
|
190
|
+
expected: 'Large, bold, visually dominant heading.',
|
|
191
|
+
actual: 'Slightly smaller heading with weaker emphasis.',
|
|
192
|
+
impact: 'The primary hierarchy is less forceful.',
|
|
193
|
+
evidence: [{ source: 'expected-image', observation: 'Heading is the strongest element in the upper content region.' }],
|
|
194
|
+
fixTarget: { surface, region: 'hero', likelyFiles: [], selectors: [] },
|
|
195
|
+
recommendedChange: 'Increase heading size and weight, then compare again.',
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function exampleFingerprint(mode) {
|
|
199
|
+
const image = {
|
|
200
|
+
expectedImageSha256: '0'.repeat(64),
|
|
201
|
+
actualImageSha256: '1'.repeat(64),
|
|
202
|
+
};
|
|
203
|
+
if (mode === 'image-only')
|
|
204
|
+
return image;
|
|
205
|
+
return {
|
|
206
|
+
...image,
|
|
207
|
+
expectedStructureSha256: '2'.repeat(64),
|
|
208
|
+
actualStructureSha256: '3'.repeat(64),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=comparison.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison.js","sourceRoot":"","sources":["../../src/schemas/comparison.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,8 +40,8 @@ export declare const visualSpecSchema: z.ZodObject<{
|
|
|
40
40
|
role: z.ZodEnum<{
|
|
41
41
|
unknown: "unknown";
|
|
42
42
|
status: "status";
|
|
43
|
-
header: "header";
|
|
44
43
|
hero: "hero";
|
|
44
|
+
header: "header";
|
|
45
45
|
content: "content";
|
|
46
46
|
panel: "panel";
|
|
47
47
|
footer: "footer";
|
|
@@ -84,8 +84,8 @@ export declare const visualSpecSchema: z.ZodObject<{
|
|
|
84
84
|
}>;
|
|
85
85
|
weight: z.ZodEnum<{
|
|
86
86
|
bold: "bold";
|
|
87
|
-
regular: "regular";
|
|
88
87
|
medium: "medium";
|
|
88
|
+
regular: "regular";
|
|
89
89
|
semibold: "semibold";
|
|
90
90
|
}>;
|
|
91
91
|
usage: z.ZodString;
|
|
@@ -132,8 +132,8 @@ export declare const visualSpecDiffSchema: z.ZodObject<{
|
|
|
132
132
|
reference: z.ZodString;
|
|
133
133
|
impact: z.ZodString;
|
|
134
134
|
severity: z.ZodEnum<{
|
|
135
|
-
medium: "medium";
|
|
136
135
|
high: "high";
|
|
136
|
+
medium: "medium";
|
|
137
137
|
low: "low";
|
|
138
138
|
}>;
|
|
139
139
|
}, z.core.$strip>>;
|
|
@@ -180,8 +180,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
|
|
|
180
180
|
role: z.ZodEnum<{
|
|
181
181
|
unknown: "unknown";
|
|
182
182
|
status: "status";
|
|
183
|
-
header: "header";
|
|
184
183
|
hero: "hero";
|
|
184
|
+
header: "header";
|
|
185
185
|
content: "content";
|
|
186
186
|
panel: "panel";
|
|
187
187
|
footer: "footer";
|
|
@@ -224,8 +224,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
|
|
|
224
224
|
}>;
|
|
225
225
|
weight: z.ZodEnum<{
|
|
226
226
|
bold: "bold";
|
|
227
|
-
regular: "regular";
|
|
228
227
|
medium: "medium";
|
|
228
|
+
regular: "regular";
|
|
229
229
|
semibold: "semibold";
|
|
230
230
|
}>;
|
|
231
231
|
usage: z.ZodString;
|
|
@@ -301,8 +301,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
|
|
|
301
301
|
role: z.ZodEnum<{
|
|
302
302
|
unknown: "unknown";
|
|
303
303
|
status: "status";
|
|
304
|
-
header: "header";
|
|
305
304
|
hero: "hero";
|
|
305
|
+
header: "header";
|
|
306
306
|
content: "content";
|
|
307
307
|
panel: "panel";
|
|
308
308
|
footer: "footer";
|
|
@@ -345,8 +345,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
|
|
|
345
345
|
}>;
|
|
346
346
|
weight: z.ZodEnum<{
|
|
347
347
|
bold: "bold";
|
|
348
|
-
regular: "regular";
|
|
349
348
|
medium: "medium";
|
|
349
|
+
regular: "regular";
|
|
350
350
|
semibold: "semibold";
|
|
351
351
|
}>;
|
|
352
352
|
usage: z.ZodString;
|
|
@@ -394,8 +394,8 @@ export declare const visualSpecBundleSchema: z.ZodObject<{
|
|
|
394
394
|
reference: z.ZodString;
|
|
395
395
|
impact: z.ZodString;
|
|
396
396
|
severity: z.ZodEnum<{
|
|
397
|
-
medium: "medium";
|
|
398
397
|
high: "high";
|
|
398
|
+
medium: "medium";
|
|
399
399
|
low: "low";
|
|
400
400
|
}>;
|
|
401
401
|
}, z.core.$strip>>;
|
|
@@ -81,9 +81,9 @@ export const visualSpecDiffSchema = z.object({
|
|
|
81
81
|
reference: z.string().min(1),
|
|
82
82
|
impact: z.string().min(1),
|
|
83
83
|
severity: z.enum(['high', 'medium', 'low']),
|
|
84
|
-
}))
|
|
84
|
+
})),
|
|
85
85
|
openQuestions: z.array(z.string()),
|
|
86
|
-
nextFixes: z.array(z.string())
|
|
86
|
+
nextFixes: z.array(z.string()),
|
|
87
87
|
});
|
|
88
88
|
export const visualSpecBundleSchema = z.object({
|
|
89
89
|
version: z.literal(1),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-spec.js","sourceRoot":"","sources":["../../src/schemas/visual-spec.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"visual-spec.js","sourceRoot":"","sources":["../../src/schemas/visual-spec.ts"],"names":[],"mappings":"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"}
|
package/docs/agent-workflow.md
CHANGED
|
@@ -2,44 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
Limner is designed for agent-in-the-loop visual fidelity work.
|
|
4
4
|
|
|
5
|
+
Prompt profiles: `ideal-to-mockup` for Phase 1, and `mockup-to-implementation` for Phase 2.
|
|
6
|
+
|
|
5
7
|
## Phase 1: Image To Reference
|
|
6
8
|
|
|
7
|
-
1. Run `
|
|
9
|
+
1. Run `limner init <image> --target <name>`.
|
|
8
10
|
2. Inspect `targets/<name>/source/`.
|
|
9
11
|
3. Edit `contract/regions.json`, `contract/tokens.json`, and `contract/acceptance.md`.
|
|
10
12
|
4. Rebuild `reference/index.html` and `reference/styles.css` as a faithful HTML facsimile.
|
|
11
|
-
5. Run `
|
|
12
|
-
6.
|
|
13
|
-
7.
|
|
14
|
-
8.
|
|
15
|
-
9.
|
|
16
|
-
10.
|
|
17
|
-
11.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
4. Inspect `captures/reference-app/dom-metrics.json`.
|
|
28
|
-
5. Record app repair steps in `reports/reference-app.md`.
|
|
29
|
-
6. Fix the app and rerun until the app matches the approved reference.
|
|
30
|
-
|
|
31
|
-
## Optional Grounding: Image To App
|
|
32
|
-
|
|
33
|
-
Use this when you need to confirm that the app URL, authentication state, and viewport are correct before building the HTML reference.
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
limn compare image-app --target <name> --url <app-url> --storage-state ./e2e/.auth/user.json
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
This is not a replacement for Phase 1. For design reconstruction work, first recreate the generated image in `reference/index.html` and compare with `image-reference`.
|
|
40
|
-
|
|
41
|
-
Capture defaults to viewport-only. Add `--full-page` only when the generated image is meant to represent the full scrollable page.
|
|
13
|
+
5. Run `limner compare image-reference --target <name>`.
|
|
14
|
+
6. Read `captures/image-reference/agent-comparison/agent-prompt.codex.md`.
|
|
15
|
+
7. Write `captures/image-reference/agent-comparison/agent-response.json`.
|
|
16
|
+
8. Rerun the same command to validate `image-comparison.json` and `comparison-summary.json`.
|
|
17
|
+
9. Optional: run `limner compare image-reference --target <name> --spec` to generate a visual spec prompt pack.
|
|
18
|
+
10. Edit `contract/visual-spec-instructions.md` for target-specific prompt guidance, or pass `--spec-instructions <path>` for a shared prompt policy.
|
|
19
|
+
11. Iterate on one scoped mockup fix at a time until the reference is approved.
|
|
20
|
+
|
|
21
|
+
## Phase 2: Reference To Implementation
|
|
22
|
+
|
|
23
|
+
1. Add implementation selectors to `contract/regions.json` using `appSelector`.
|
|
24
|
+
2. Run `limner compare reference-implementation --target <name> --url <implementation-url>`.
|
|
25
|
+
3. Read `captures/reference-implementation/agent-comparison/agent-prompt.codex.md`.
|
|
26
|
+
4. Write `captures/reference-implementation/agent-comparison/agent-response.json`.
|
|
27
|
+
5. Rerun the same command to validate `image-comparison.json`, `structure-comparison.json`, and `comparison-summary.json`.
|
|
28
|
+
6. Fix the implementation and rerun until it matches the approved reference.
|
|
42
29
|
|
|
43
30
|
## Agent Rule
|
|
44
31
|
|
|
45
|
-
Do not treat side-by-side generation as success. It is evidence. The agent
|
|
32
|
+
Do not treat side-by-side generation as success. It is evidence. The agent must write the structured comparison response and use its next-iteration guidance for one scoped fix.
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Agent Comparison Scores Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Replace Limner's current comparison behavior with agent-authored UX screenshot comparisons that drive the next implementation iteration for the two primary visual fidelity loops.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Comparison commands still capture screenshots and write reports, but their core output becomes validated agent comparison artifacts rather than artifact-only side-by-sides. New schemas model image comparisons, structure comparisons, scores, confidence, evidence, matches, diffs, remarks, system feedback, and next iteration guidance. Prompt profiles tell the agent which side is canonical and which surface should change.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** TypeScript, Commander, Zod, Playwright, Vitest.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Decisions
|
|
14
|
+
|
|
15
|
+
- Agent comparison is the only scoring path in this plan.
|
|
16
|
+
- This is a major overhaul of the existing compare modes, not an additive scoring feature.
|
|
17
|
+
- The implementation comparison naming should be `reference-implementation`.
|
|
18
|
+
- Current reports should be reshaped around agent comparison status, scores, diffs, and next iteration guidance.
|
|
19
|
+
- Limner stays model-agnostic: it prepares prompt/schema/evidence files; an external agent writes `agent-response.json`.
|
|
20
|
+
- The prompt is tailored for UX screenshot comparison, not generic image comparison.
|
|
21
|
+
- Perfect matches are valid: `diffs`, `mismatches`, and `nextFixes` may be empty.
|
|
22
|
+
- Scores are `0..1` estimates with rationale/evidence, not final pass/fail judgments.
|
|
23
|
+
- The schema prioritizes the next implementation iteration over progress tracking.
|
|
24
|
+
|
|
25
|
+
## Prompt Profiles
|
|
26
|
+
|
|
27
|
+
- `ideal-to-mockup`: expected is the ideal image, actual is the HTML mockup screenshot, editable surface is the mockup. Used by `compare image-reference`.
|
|
28
|
+
- `mockup-to-implementation`: expected is the approved HTML mockup screenshot, actual is the implementation screenshot, editable surface is the implementation. Used by `compare reference-implementation`.
|
|
29
|
+
|
|
30
|
+
## CLI Semantics
|
|
31
|
+
|
|
32
|
+
- `limner compare image-reference --target <name>` creates or validates an `ideal-to-mockup` agent pack and emits `image-comparison.json` after validation.
|
|
33
|
+
- `limner compare reference-implementation --target <name> --url <url>` creates or validates a `mockup-to-implementation` agent pack and emits image plus DOM-metrics structure comparisons after validation.
|
|
34
|
+
- `--no-agent-comparison` skips the default agent comparison pack for quick artifact-only runs.
|
|
35
|
+
|
|
36
|
+
## Replacement Scope
|
|
37
|
+
|
|
38
|
+
- Replace the current artifact-only comparison reports with agent-comparison-centered reports.
|
|
39
|
+
- Rename the implementation comparison command to `compare reference-implementation`.
|
|
40
|
+
- Rename implementation comparison capture/report folders to reference-implementation equivalents.
|
|
41
|
+
- Keep backwards compatibility only if implementation chooses to add a deprecated alias; the new docs and agent workflow should use `reference-implementation`.
|
|
42
|
+
|
|
43
|
+
## Artifacts
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
targets/<target>/captures/<mode>/
|
|
47
|
+
agent-comparison/
|
|
48
|
+
agent-prompt.md
|
|
49
|
+
agent-prompt.codex.md
|
|
50
|
+
agent-prompt.claude.md
|
|
51
|
+
agent-response.schema.json
|
|
52
|
+
agent-response.example.json
|
|
53
|
+
agent-response.json
|
|
54
|
+
image-comparison.json
|
|
55
|
+
structure-comparison.json
|
|
56
|
+
comparison-summary.json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## File Map
|
|
60
|
+
|
|
61
|
+
- Create `src/schemas/comparison.ts` and `src/schemas/comparison.test.ts`.
|
|
62
|
+
- Create `src/core/agent-comparison-profiles.ts`, `src/core/agent-comparison-prompts.ts`, `src/core/agent-comparison-pack.ts`, and `src/core/agent-comparison-pack.test.ts`.
|
|
63
|
+
- Modify `src/commands/compare-image-reference.ts`, `src/commands/compare.ts`, and `src/commands/compare.test.ts`.
|
|
64
|
+
- Modify `src/core/report-writer.ts`, `src/schemas/visual-spec.ts`, and `src/index.ts`.
|
|
65
|
+
- Modify `templates/target/AGENT_GUIDE.md`, `skills/limner/SKILL.md`, `docs/agent-workflow.md`, and `README.md`.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### Task 1: Shared Comparison Schemas
|
|
70
|
+
|
|
71
|
+
**Files:** create `src/schemas/comparison.ts`, create `src/schemas/comparison.test.ts`, modify `src/index.ts`.
|
|
72
|
+
|
|
73
|
+
- [ ] Write failing tests for image-only bundles, image-plus-structure bundles, perfect matches with empty `diffs`/`nextFixes`, and score bounds.
|
|
74
|
+
|
|
75
|
+
Use assertions shaped like:
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
expect(agentComparisonBundleSchema.parse(createAgentComparisonBundleExample('image-only')).imageComparison.kind).toBe('image-vs-image');
|
|
79
|
+
expect(agentComparisonBundleSchema.parse(createAgentComparisonBundleExample('image-and-structure')).structureComparison?.kind).toBe('structure-vs-structure');
|
|
80
|
+
example.imageComparison.diffs = [];
|
|
81
|
+
example.imageComparison.nextIteration.steps = [];
|
|
82
|
+
example.imageComparison.score.overall = 1;
|
|
83
|
+
expect(agentComparisonBundleSchema.parse(example).imageComparison.diffs).toEqual([]);
|
|
84
|
+
example.imageComparison.score.overall = 1.2;
|
|
85
|
+
expect(() => agentComparisonBundleSchema.parse(example)).toThrow();
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- [ ] Run `npm test -- src/schemas/comparison.test.ts`; expect failure because the schema module is missing.
|
|
89
|
+
- [ ] Implement `score01Schema`, `imageComparisonSchema`, `structureComparisonSchema`, `agentComparisonBundleSchema`, exported types, `createAgentComparisonBundleExample(mode)`, and `createAgentComparisonJsonSchema()`.
|
|
90
|
+
- [ ] Include these top-level comparison fields: `summary`, `score`, `confidence`, `majorDiffAreas`, `matches`, `remarks`, `systemFeedback`, `nextIteration`, and `rationale`.
|
|
91
|
+
- [ ] Each diff should include `id`, `title`, `category`, `severity`, `priority`, `expected`, `actual`, `impact`, `evidence`, optional `fixTarget`, and `recommendedChange`.
|
|
92
|
+
- [ ] `fixTarget.surface` should be `mockup`, `implementation`, or `unknown`.
|
|
93
|
+
- [ ] Export schemas, helpers, and types from `src/index.ts`.
|
|
94
|
+
- [ ] Run `npm test -- src/schemas/comparison.test.ts && npm run typecheck`; expect pass.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### Task 2: Allow Perfect Visual Spec Diffs
|
|
99
|
+
|
|
100
|
+
**Files:** modify `src/schemas/visual-spec.ts`, modify `src/commands/compare.test.ts`.
|
|
101
|
+
|
|
102
|
+
- [ ] In the existing `compareImageReference` spec validation test, set `response.diff.mismatches = []` and `response.diff.nextFixes = []`.
|
|
103
|
+
- [ ] Assert `expect(diff.mismatches).toEqual([])`.
|
|
104
|
+
- [ ] Run `npm test -- src/commands/compare.test.ts`; expect failure because current schema requires one mismatch and one next fix.
|
|
105
|
+
- [ ] Remove `.min(1)` from `visualSpecDiffSchema.mismatches` and `visualSpecDiffSchema.nextFixes`.
|
|
106
|
+
- [ ] Run `npm test -- src/commands/compare.test.ts`; expect pass.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### Task 3: Agent Comparison Pack
|
|
111
|
+
|
|
112
|
+
**Files:** create `src/core/agent-comparison-profiles.ts`, create `src/core/agent-comparison-prompts.ts`, create `src/core/agent-comparison-pack.ts`, create `src/core/agent-comparison-pack.test.ts`.
|
|
113
|
+
|
|
114
|
+
- [ ] Write tests covering missing response, prompt/schema/example creation, invalid JSON, schema-invalid JSON, valid image-only response, valid image-plus-structure response, and both prompt profiles.
|
|
115
|
+
- [ ] Run `npm test -- src/core/agent-comparison-pack.test.ts`; expect failure because implementation is missing.
|
|
116
|
+
- [ ] Implement profile metadata for `ideal-to-mockup` and `mockup-to-implementation`.
|
|
117
|
+
- [ ] Implement prompt builders that include profile name, expected role, actual role, editable surface, expected/actual image paths, optional structure paths, schema path, response path, and UX-specific comparison guidance.
|
|
118
|
+
- [ ] The prompt must tell the agent to prioritize the next implementation iteration over exhaustive critique.
|
|
119
|
+
- [ ] The prompt must ask for high-signal UX diffs: layout, hierarchy, typography, color, spacing, component anatomy, copy/state, and attention flow.
|
|
120
|
+
- [ ] Implement `writeAgentComparisonPack(input)` with this contract:
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
{
|
|
124
|
+
workspaceRoot: string;
|
|
125
|
+
captureDir: string;
|
|
126
|
+
mode: 'image-reference' | 'reference-implementation';
|
|
127
|
+
profile: 'ideal-to-mockup' | 'mockup-to-implementation';
|
|
128
|
+
imageInputs: { expectedImagePath: string; actualImagePath: string };
|
|
129
|
+
structureInputs?: {
|
|
130
|
+
expectedStructurePath: string;
|
|
131
|
+
actualStructurePath: string;
|
|
132
|
+
structureKind: 'visual-spec' | 'dom-metrics' | 'html' | 'json-description';
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
- [ ] Return prompt paths, schema/example/response paths, status, validation errors, split artifact paths, and score highlights.
|
|
138
|
+
- [ ] On valid responses, write `image-comparison.json`, optional `structure-comparison.json`, and `comparison-summary.json`.
|
|
139
|
+
- [ ] Run `npm test -- src/core/agent-comparison-pack.test.ts && npm run typecheck`; expect pass.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### Task 4: Replace Current Primary Compare Modes
|
|
144
|
+
|
|
145
|
+
**Files:** modify `src/commands/compare-image-reference.ts`, `src/commands/compare.ts`, and `src/commands/compare.test.ts`.
|
|
146
|
+
|
|
147
|
+
- [ ] Extend compare tests so `image-reference` and `reference-implementation` return `agentComparison.status === 'awaiting-agent'` by default and each report mentions `agent-response.json`.
|
|
148
|
+
- [ ] For `reference-implementation`, assert the prompt includes `Structure kind: \`dom-metrics\``.
|
|
149
|
+
- [ ] Add coverage that `compare reference-implementation` is the documented command name.
|
|
150
|
+
- [ ] If a deprecated alias is retained, assert it points to the same implementation and prints a deprecation warning.
|
|
151
|
+
- [ ] Assert prompts include the expected profile names: `ideal-to-mockup` and `mockup-to-implementation`.
|
|
152
|
+
- [ ] Run `npm test -- src/commands/compare.test.ts`; expect failure.
|
|
153
|
+
- [ ] In `image-reference`, call `writeAgentComparisonPack` with profile `ideal-to-mockup`, ideal image as expected, and reference screenshot as actual.
|
|
154
|
+
- [ ] In `reference-implementation`, call it with profile `mockup-to-implementation`, reference screenshot as expected, implementation screenshot as actual, and structure inputs pointing at `${referencePath}.metrics.json` and `${implementationPath}.metrics.json`.
|
|
155
|
+
- [ ] Respect `options.agentComparison === false`.
|
|
156
|
+
- [ ] Run `npm test -- src/commands/compare.test.ts && npm run typecheck`; expect pass.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### Task 5: CLI Flags And Reports
|
|
161
|
+
|
|
162
|
+
**Files:** modify `src/commands/compare.ts`, modify `src/core/report-writer.ts`.
|
|
163
|
+
|
|
164
|
+
- [ ] Add to `image-reference` and `reference-implementation`:
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
.option('--no-agent-comparison', 'skip the default agent comparison prompt pack')
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
- [ ] Pass `agentComparison` through to command functions.
|
|
171
|
+
- [ ] Console output should include prompt paths, schema path, response target, validation status, and validated artifact paths.
|
|
172
|
+
- [ ] Reports should include `## Agent Comparison`.
|
|
173
|
+
- [ ] Awaiting reports should show prompt paths and the next step.
|
|
174
|
+
- [ ] Invalid reports should show validation errors.
|
|
175
|
+
- [ ] Validated reports should show agent image score, optional agent structure score, next iteration focus, and artifact paths.
|
|
176
|
+
- [ ] Verify help: `image-reference` and `reference-implementation` show `--no-agent-comparison`.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### Task 6: Teach Agents The Default Workflow
|
|
181
|
+
|
|
182
|
+
**Files:** modify `templates/target/AGENT_GUIDE.md`, `skills/limner/SKILL.md`, `docs/agent-workflow.md`, and `README.md`.
|
|
183
|
+
|
|
184
|
+
- [ ] Document that `image-reference` and `reference-implementation` create an agent comparison pack by default.
|
|
185
|
+
- [ ] Document prompt profiles: `ideal-to-mockup` and `mockup-to-implementation`.
|
|
186
|
+
- [ ] Tell agents to read `captures/<mode>/agent-comparison/agent-prompt.codex.md`.
|
|
187
|
+
- [ ] Tell agents to write `captures/<mode>/agent-comparison/agent-response.json`.
|
|
188
|
+
- [ ] Tell agents to rerun the same compare command to validate output.
|
|
189
|
+
- [ ] Update README’s product promise: Limner prepares model-agnostic agent-authored UX comparison scores, but does not make final pass/fail judgments.
|
|
190
|
+
- [ ] Run `rg -n "agent comparison|agent-response.json|ideal-to-mockup|mockup-to-implementation" README.md docs/agent-workflow.md templates/target/AGENT_GUIDE.md skills/limner/SKILL.md`; expect all files to mention the workflow.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### Task 7: Full Quality Gate And Handoff
|
|
195
|
+
|
|
196
|
+
**Files:** no edits.
|
|
197
|
+
|
|
198
|
+
- [ ] Run `npm run check`; expect lint, typecheck, Vitest, build, Knip, and file-size guard pass.
|
|
199
|
+
- [ ] Smoke `npm run dev -- compare image-reference --help`; expect `--no-agent-comparison`.
|
|
200
|
+
- [ ] Smoke `npm run dev -- compare reference-implementation --help`; expect `--no-agent-comparison`.
|
|
201
|
+
- [ ] PR handoff should include failure modes, commands run/results, generated artifacts, negative cases, and remaining risks.
|
|
202
|
+
- [ ] Failure modes: agents may treat scores as pass/fail; awaiting-agent loop if response is not written; agent feedback may be too broad unless the prompt enforces a focused next iteration.
|
|
203
|
+
- [ ] Negative cases: perfect match, invalid JSON, schema-invalid JSON, and `--no-agent-comparison`.
|
|
204
|
+
|
|
205
|
+
## Self-Review
|
|
206
|
+
|
|
207
|
+
- Spec coverage: Covers the comparison overhaul, `reference-implementation` naming, two prompt profiles, image-vs-image output, structure-vs-structure output, how agents know to use it, schemas, validation, docs, and tests.
|
|
208
|
+
- Placeholder scan: No TBD/TODO language remains; each task names concrete files, behavior, commands, and expected outcomes.
|
|
209
|
+
- Type consistency: `agentComparison`, `imageComparison`, `structureComparison`, `ideal-to-mockup`, and `mockup-to-implementation` are consistent across the plan.
|