@tangle-network/browser-agent-driver 0.29.0 → 0.31.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/dist/brain/index.d.ts +15 -1
- package/dist/brain/index.d.ts.map +1 -1
- package/dist/brain/index.js +67 -5
- package/dist/brain/index.js.map +1 -1
- package/dist/cli-ack-patch.d.ts +39 -0
- package/dist/cli-ack-patch.d.ts.map +1 -0
- package/dist/cli-ack-patch.js +47 -0
- package/dist/cli-ack-patch.js.map +1 -0
- package/dist/cli-design-audit.d.ts +16 -0
- package/dist/cli-design-audit.d.ts.map +1 -1
- package/dist/cli-design-audit.js +232 -7
- package/dist/cli-design-audit.js.map +1 -1
- package/dist/cli-jobs.d.ts +13 -0
- package/dist/cli-jobs.d.ts.map +1 -0
- package/dist/cli-jobs.js +262 -0
- package/dist/cli-jobs.js.map +1 -0
- package/dist/cli-patterns.d.ts +26 -0
- package/dist/cli-patterns.d.ts.map +1 -0
- package/dist/cli-patterns.js +49 -0
- package/dist/cli-patterns.js.map +1 -0
- package/dist/cli-reports.d.ts +12 -0
- package/dist/cli-reports.d.ts.map +1 -0
- package/dist/cli-reports.js +97 -0
- package/dist/cli-reports.js.map +1 -0
- package/dist/cli-ui.d.ts.map +1 -1
- package/dist/cli-ui.js +5 -1
- package/dist/cli-ui.js.map +1 -1
- package/dist/cli.js +52 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/design/audit/attribution/aggregate.d.ts +16 -0
- package/dist/design/audit/attribution/aggregate.d.ts.map +1 -0
- package/dist/design/audit/attribution/aggregate.js +81 -0
- package/dist/design/audit/attribution/aggregate.js.map +1 -0
- package/dist/design/audit/attribution/store.d.ts +36 -0
- package/dist/design/audit/attribution/store.d.ts.map +1 -0
- package/dist/design/audit/attribution/store.js +108 -0
- package/dist/design/audit/attribution/store.js.map +1 -0
- package/dist/design/audit/attribution/types.d.ts +13 -0
- package/dist/design/audit/attribution/types.d.ts.map +1 -0
- package/dist/design/audit/attribution/types.js +10 -0
- package/dist/design/audit/attribution/types.js.map +1 -0
- package/dist/design/audit/classify-ensemble.d.ts +46 -0
- package/dist/design/audit/classify-ensemble.d.ts.map +1 -0
- package/dist/design/audit/classify-ensemble.js +207 -0
- package/dist/design/audit/classify-ensemble.js.map +1 -0
- package/dist/design/audit/ethics/check.d.ts +59 -0
- package/dist/design/audit/ethics/check.d.ts.map +1 -0
- package/dist/design/audit/ethics/check.js +137 -0
- package/dist/design/audit/ethics/check.js.map +1 -0
- package/dist/design/audit/ethics/loader.d.ts +21 -0
- package/dist/design/audit/ethics/loader.d.ts.map +1 -0
- package/dist/design/audit/ethics/loader.js +207 -0
- package/dist/design/audit/ethics/loader.js.map +1 -0
- package/dist/design/audit/ethics/rules/finance.yaml +37 -0
- package/dist/design/audit/ethics/rules/kids.yaml +37 -0
- package/dist/design/audit/ethics/rules/legal.yaml +35 -0
- package/dist/design/audit/ethics/rules/medical.yaml +36 -0
- package/dist/design/audit/evaluate.d.ts +69 -0
- package/dist/design/audit/evaluate.d.ts.map +1 -1
- package/dist/design/audit/evaluate.js +417 -55
- package/dist/design/audit/evaluate.js.map +1 -1
- package/dist/design/audit/first-principles-mode.d.ts +42 -0
- package/dist/design/audit/first-principles-mode.d.ts.map +1 -0
- package/dist/design/audit/first-principles-mode.js +77 -0
- package/dist/design/audit/first-principles-mode.js.map +1 -0
- package/dist/design/audit/modality/android.d.ts +14 -0
- package/dist/design/audit/modality/android.d.ts.map +1 -0
- package/dist/design/audit/modality/android.js +18 -0
- package/dist/design/audit/modality/android.js.map +1 -0
- package/dist/design/audit/modality/html.d.ts +22 -0
- package/dist/design/audit/modality/html.d.ts.map +1 -0
- package/dist/design/audit/modality/html.js +51 -0
- package/dist/design/audit/modality/html.js.map +1 -0
- package/dist/design/audit/modality/index.d.ts +8 -0
- package/dist/design/audit/modality/index.d.ts.map +1 -0
- package/dist/design/audit/modality/index.js +15 -0
- package/dist/design/audit/modality/index.js.map +1 -0
- package/dist/design/audit/modality/ios.d.ts +16 -0
- package/dist/design/audit/modality/ios.d.ts.map +1 -0
- package/dist/design/audit/modality/ios.js +19 -0
- package/dist/design/audit/modality/ios.js.map +1 -0
- package/dist/design/audit/modality/types.d.ts +9 -0
- package/dist/design/audit/modality/types.d.ts.map +1 -0
- package/dist/design/audit/modality/types.js +9 -0
- package/dist/design/audit/modality/types.js.map +1 -0
- package/dist/design/audit/patches/index.d.ts +8 -0
- package/dist/design/audit/patches/index.d.ts.map +1 -0
- package/dist/design/audit/patches/index.js +5 -0
- package/dist/design/audit/patches/index.js.map +1 -0
- package/dist/design/audit/patches/parse.d.ts +29 -0
- package/dist/design/audit/patches/parse.d.ts.map +1 -0
- package/dist/design/audit/patches/parse.js +153 -0
- package/dist/design/audit/patches/parse.js.map +1 -0
- package/dist/design/audit/patches/render.d.ts +20 -0
- package/dist/design/audit/patches/render.d.ts.map +1 -0
- package/dist/design/audit/patches/render.js +55 -0
- package/dist/design/audit/patches/render.js.map +1 -0
- package/dist/design/audit/patches/severity-enforcement.d.ts +23 -0
- package/dist/design/audit/patches/severity-enforcement.d.ts.map +1 -0
- package/dist/design/audit/patches/severity-enforcement.js +42 -0
- package/dist/design/audit/patches/severity-enforcement.js.map +1 -0
- package/dist/design/audit/patches/validate.d.ts +34 -0
- package/dist/design/audit/patches/validate.d.ts.map +1 -0
- package/dist/design/audit/patches/validate.js +53 -0
- package/dist/design/audit/patches/validate.js.map +1 -0
- package/dist/design/audit/patterns/match.d.ts +24 -0
- package/dist/design/audit/patterns/match.d.ts.map +1 -0
- package/dist/design/audit/patterns/match.js +48 -0
- package/dist/design/audit/patterns/match.js.map +1 -0
- package/dist/design/audit/patterns/mine.d.ts +31 -0
- package/dist/design/audit/patterns/mine.d.ts.map +1 -0
- package/dist/design/audit/patterns/mine.js +35 -0
- package/dist/design/audit/patterns/mine.js.map +1 -0
- package/dist/design/audit/patterns/store.d.ts +14 -0
- package/dist/design/audit/patterns/store.d.ts.map +1 -0
- package/dist/design/audit/patterns/store.js +53 -0
- package/dist/design/audit/patterns/store.js.map +1 -0
- package/dist/design/audit/patterns/types.d.ts +53 -0
- package/dist/design/audit/patterns/types.d.ts.map +1 -0
- package/dist/design/audit/patterns/types.js +13 -0
- package/dist/design/audit/patterns/types.js.map +1 -0
- package/dist/design/audit/pipeline.d.ts +26 -0
- package/dist/design/audit/pipeline.d.ts.map +1 -1
- package/dist/design/audit/pipeline.js +131 -4
- package/dist/design/audit/pipeline.js.map +1 -1
- package/dist/design/audit/rubric/anchor-loader.d.ts +44 -0
- package/dist/design/audit/rubric/anchor-loader.d.ts.map +1 -0
- package/dist/design/audit/rubric/anchor-loader.js +210 -0
- package/dist/design/audit/rubric/anchor-loader.js.map +1 -0
- package/dist/design/audit/rubric/anchors/blog.yaml +33 -0
- package/dist/design/audit/rubric/anchors/dashboard.yaml +35 -0
- package/dist/design/audit/rubric/anchors/docs.yaml +35 -0
- package/dist/design/audit/rubric/anchors/ecommerce.yaml +33 -0
- package/dist/design/audit/rubric/anchors/marketing.yaml +34 -0
- package/dist/design/audit/rubric/anchors/saas-app.yaml +38 -0
- package/dist/design/audit/rubric/anchors/social.yaml +33 -0
- package/dist/design/audit/rubric/anchors/tool.yaml +33 -0
- package/dist/design/audit/rubric/anchors/utility.yaml +33 -0
- package/dist/design/audit/rubric/fragments/audience-clinician.md +42 -0
- package/dist/design/audit/rubric/fragments/audience-developer.md +40 -0
- package/dist/design/audit/rubric/fragments/audience-kids.md +35 -0
- package/dist/design/audit/rubric/fragments/audience-vulnerability-minor-facing.md +37 -0
- package/dist/design/audit/rubric/fragments/first-principles.md +65 -0
- package/dist/design/audit/rubric/fragments/modality-mobile.md +39 -0
- package/dist/design/audit/rubric/fragments/modality-tablet.md +35 -0
- package/dist/design/audit/rubric/fragments/regulatory-coppa.md +32 -0
- package/dist/design/audit/rubric/fragments/regulatory-gdpr.md +33 -0
- package/dist/design/audit/rubric/fragments/regulatory-hipaa.md +36 -0
- package/dist/design/audit/rubric/fragments/universal-product-intent.md +48 -0
- package/dist/design/audit/rubric/loader.d.ts +26 -6
- package/dist/design/audit/rubric/loader.d.ts.map +1 -1
- package/dist/design/audit/rubric/loader.js +77 -27
- package/dist/design/audit/rubric/loader.js.map +1 -1
- package/dist/design/audit/rubric/rollup-weights.d.ts +25 -0
- package/dist/design/audit/rubric/rollup-weights.d.ts.map +1 -0
- package/dist/design/audit/rubric/rollup-weights.js +51 -0
- package/dist/design/audit/rubric/rollup-weights.js.map +1 -0
- package/dist/design/audit/types.d.ts +28 -0
- package/dist/design/audit/types.d.ts.map +1 -1
- package/dist/design/audit/v2/build-result.d.ts +47 -0
- package/dist/design/audit/v2/build-result.d.ts.map +1 -0
- package/dist/design/audit/v2/build-result.js +163 -0
- package/dist/design/audit/v2/build-result.js.map +1 -0
- package/dist/design/audit/v2/score.d.ts +49 -0
- package/dist/design/audit/v2/score.d.ts.map +1 -0
- package/dist/design/audit/v2/score.js +211 -0
- package/dist/design/audit/v2/score.js.map +1 -0
- package/dist/design/audit/v2/types.d.ts +431 -0
- package/dist/design/audit/v2/types.d.ts.map +1 -0
- package/dist/design/audit/v2/types.js +26 -0
- package/dist/design/audit/v2/types.js.map +1 -0
- package/dist/discover/index.d.ts +16 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +25 -0
- package/dist/discover/index.js.map +1 -0
- package/dist/discover/wayback.d.ts +49 -0
- package/dist/discover/wayback.d.ts.map +1 -0
- package/dist/discover/wayback.js +123 -0
- package/dist/discover/wayback.js.map +1 -0
- package/dist/jobs/anti-bot.d.ts +19 -0
- package/dist/jobs/anti-bot.d.ts.map +1 -0
- package/dist/jobs/anti-bot.js +64 -0
- package/dist/jobs/anti-bot.js.map +1 -0
- package/dist/jobs/cost-estimate.d.ts +12 -0
- package/dist/jobs/cost-estimate.d.ts.map +1 -0
- package/dist/jobs/cost-estimate.js +21 -0
- package/dist/jobs/cost-estimate.js.map +1 -0
- package/dist/jobs/cost-history.d.ts +19 -0
- package/dist/jobs/cost-history.d.ts.map +1 -0
- package/dist/jobs/cost-history.js +42 -0
- package/dist/jobs/cost-history.js.map +1 -0
- package/dist/jobs/index.d.ts +31 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +37 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/orchestrator.d.ts +42 -0
- package/dist/jobs/orchestrator.d.ts.map +1 -0
- package/dist/jobs/orchestrator.js +282 -0
- package/dist/jobs/orchestrator.js.map +1 -0
- package/dist/jobs/queue.d.ts +45 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +114 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/retry.d.ts +36 -0
- package/dist/jobs/retry.d.ts.map +1 -0
- package/dist/jobs/retry.js +77 -0
- package/dist/jobs/retry.js.map +1 -0
- package/dist/jobs/store.d.ts +31 -0
- package/dist/jobs/store.d.ts.map +1 -0
- package/dist/jobs/store.js +92 -0
- package/dist/jobs/store.js.map +1 -0
- package/dist/jobs/types.d.ts +106 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +13 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/provider-defaults.d.ts +1 -1
- package/dist/provider-defaults.d.ts.map +1 -1
- package/dist/provider-defaults.js +8 -0
- package/dist/provider-defaults.js.map +1 -1
- package/dist/reports/aggregate.d.ts +38 -0
- package/dist/reports/aggregate.d.ts.map +1 -0
- package/dist/reports/aggregate.js +145 -0
- package/dist/reports/aggregate.js.map +1 -0
- package/dist/reports/index.d.ts +21 -0
- package/dist/reports/index.d.ts.map +1 -0
- package/dist/reports/index.js +15 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/narrate.d.ts +19 -0
- package/dist/reports/narrate.d.ts.map +1 -0
- package/dist/reports/narrate.js +40 -0
- package/dist/reports/narrate.js.map +1 -0
- package/dist/reports/templates.d.ts +43 -0
- package/dist/reports/templates.d.ts.map +1 -0
- package/dist/reports/templates.js +200 -0
- package/dist/reports/templates.js.map +1 -0
- package/dist/reports/tokens.d.ts +77 -0
- package/dist/reports/tokens.d.ts.map +1 -0
- package/dist/reports/tokens.js +88 -0
- package/dist/reports/tokens.js.map +1 -0
- package/dist/reports/tools.d.ts +76 -0
- package/dist/reports/tools.d.ts.map +1 -0
- package/dist/reports/tools.js +205 -0
- package/dist/reports/tools.js.map +1 -0
- package/dist/reports/types.d.ts +51 -0
- package/dist/reports/types.d.ts.map +1 -0
- package/dist/reports/types.js +9 -0
- package/dist/reports/types.js.map +1 -0
- package/dist/supervisor/critic.d.ts +1 -1
- package/dist/supervisor/critic.d.ts.map +1 -1
- package/dist/supervisor/critic.js +50 -5
- package/dist/supervisor/critic.js.map +1 -1
- package/dist/telemetry/client.d.ts +42 -0
- package/dist/telemetry/client.d.ts.map +1 -0
- package/dist/telemetry/client.js +203 -0
- package/dist/telemetry/client.js.map +1 -0
- package/dist/telemetry/hash.d.ts +4 -0
- package/dist/telemetry/hash.d.ts.map +1 -0
- package/dist/telemetry/hash.js +7 -0
- package/dist/telemetry/hash.js.map +1 -0
- package/dist/telemetry/index.d.ts +6 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +5 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/schema.d.ts +85 -0
- package/dist/telemetry/schema.d.ts.map +1 -0
- package/dist/telemetry/schema.js +13 -0
- package/dist/telemetry/schema.js.map +1 -0
- package/dist/telemetry/sink.d.ts +46 -0
- package/dist/telemetry/sink.d.ts.map +1 -0
- package/dist/telemetry/sink.js +97 -0
- package/dist/telemetry/sink.js.map +1 -0
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -1
|
@@ -124,41 +124,59 @@ export function loadFragments(dir = BUILTIN_FRAGMENTS_DIR) {
|
|
|
124
124
|
.map(f => parseFragment(path.join(dir, f)));
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
|
-
* Predicate evaluator. Returns true if the fragment applies to the classification
|
|
127
|
+
* Predicate evaluator. Returns true if the fragment applies to the classification
|
|
128
|
+
* or the optional Layer 6 context (audience / modality / regulatoryContext /
|
|
129
|
+
* audienceVulnerability hints).
|
|
128
130
|
*
|
|
129
131
|
* Universal fragments always apply.
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* fragment's allowed set.
|
|
132
|
+
* Predicate groups are OR-combined at the group level: a fragment fires if ANY
|
|
133
|
+
* one of its predicate groups matches. Within a group, list membership is used
|
|
134
|
+
* (the classification/context value must appear in the fragment's allowed set).
|
|
135
|
+
*
|
|
136
|
+
* Layer 6 predicates are additive: they can cause a fragment to fire even when
|
|
137
|
+
* no type/domain predicate matches, enabling composition across independent
|
|
138
|
+
* predicate dimensions.
|
|
133
139
|
*/
|
|
134
|
-
export function fragmentApplies(fragment, classification) {
|
|
140
|
+
export function fragmentApplies(fragment, classification, ctx) {
|
|
135
141
|
const w = fragment.appliesWhen;
|
|
136
142
|
if (w.universal)
|
|
137
143
|
return true;
|
|
138
|
-
|
|
139
|
-
|
|
144
|
+
// --- Layer 1 classification predicates (AND-combined when all set) ---
|
|
145
|
+
const classificationPredicateSet = !!w.type?.length || !!w.domain?.length || !!w.maturity?.length || !!w.designSystem?.length;
|
|
146
|
+
if (classificationPredicateSet) {
|
|
147
|
+
if (w.type?.length && !w.type.includes(classification.type))
|
|
140
148
|
return false;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
149
|
+
if (w.domain?.length) {
|
|
150
|
+
const domainMatch = w.domain.some(d => classification.domain.toLowerCase().includes(d.toLowerCase()));
|
|
151
|
+
if (!domainMatch)
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if (w.maturity?.length && !w.maturity.includes(classification.maturity))
|
|
145
155
|
return false;
|
|
146
|
-
|
|
147
|
-
if (w.maturity && w.maturity.length > 0) {
|
|
148
|
-
if (!w.maturity.includes(classification.maturity))
|
|
156
|
+
if (w.designSystem?.length && !w.designSystem.includes(classification.designSystem))
|
|
149
157
|
return false;
|
|
158
|
+
return true;
|
|
150
159
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
160
|
+
// --- Layer 6 context predicates (any overlap fires the fragment) ---
|
|
161
|
+
if (ctx) {
|
|
162
|
+
if (w.audience?.length && ctx.audience?.length) {
|
|
163
|
+
if (w.audience.some(a => ctx.audience.includes(a)))
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
if (w.modality?.length && ctx.modality?.length) {
|
|
167
|
+
if (w.modality.some(m => ctx.modality.includes(m)))
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (w.regulatoryContext?.length && ctx.regulatoryContext?.length) {
|
|
171
|
+
if (w.regulatoryContext.some(r => ctx.regulatoryContext.includes(r)))
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
if (w.audienceVulnerability?.length && ctx.audienceVulnerability?.length) {
|
|
175
|
+
if (w.audienceVulnerability.some(av => ctx.audienceVulnerability.includes(av)))
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
154
178
|
}
|
|
155
|
-
|
|
156
|
-
// If NO predicates were set and not universal, don't apply (be conservative).
|
|
157
|
-
const hasPredicate = !!w.type?.length ||
|
|
158
|
-
!!w.domain?.length ||
|
|
159
|
-
!!w.maturity?.length ||
|
|
160
|
-
!!w.designSystem?.length;
|
|
161
|
-
return hasPredicate;
|
|
179
|
+
return false;
|
|
162
180
|
}
|
|
163
181
|
/**
|
|
164
182
|
* Compose a rubric from a classification.
|
|
@@ -166,14 +184,15 @@ export function fragmentApplies(fragment, classification) {
|
|
|
166
184
|
* @param classification - the page classification
|
|
167
185
|
* @param fragments - all loaded fragments (defaults to builtin)
|
|
168
186
|
* @param userFragmentsDir - optional path to user-supplied fragments
|
|
187
|
+
* @param ctx - optional Layer 6 context for audience/modality/regulatory predicates
|
|
169
188
|
*/
|
|
170
|
-
export function composeRubric(classification, fragments, userFragmentsDir) {
|
|
189
|
+
export function composeRubric(classification, fragments, userFragmentsDir, ctx) {
|
|
171
190
|
const all = [
|
|
172
191
|
...(fragments ?? loadFragments(BUILTIN_FRAGMENTS_DIR)),
|
|
173
192
|
...(userFragmentsDir ? loadFragments(userFragmentsDir) : []),
|
|
174
193
|
];
|
|
175
194
|
const matched = all
|
|
176
|
-
.filter(f => fragmentApplies(f, classification))
|
|
195
|
+
.filter(f => fragmentApplies(f, classification, ctx))
|
|
177
196
|
.sort((a, b) => WEIGHT_ORDER[a.weight] - WEIGHT_ORDER[b.weight]);
|
|
178
197
|
const body = matched
|
|
179
198
|
.map(f => `## ${f.title}\n\n${f.body}`)
|
|
@@ -198,10 +217,14 @@ export function composeRubric(classification, fragments, userFragmentsDir) {
|
|
|
198
217
|
*/
|
|
199
218
|
export function composeRubricFromProfile(profile, fragmentsOverride) {
|
|
200
219
|
const all = fragmentsOverride ?? loadFragments(BUILTIN_FRAGMENTS_DIR);
|
|
220
|
+
const normalizedProfile = profile.toLowerCase();
|
|
221
|
+
const profileFragmentIds = profileToFragmentIds(normalizedProfile);
|
|
201
222
|
const wanted = new Set([
|
|
202
|
-
|
|
223
|
+
...profileFragmentIds,
|
|
203
224
|
'universal-foundation',
|
|
225
|
+
'universal-product-intent',
|
|
204
226
|
'universal-calibration',
|
|
227
|
+
'universal-effort-anchor',
|
|
205
228
|
]);
|
|
206
229
|
const matched = all
|
|
207
230
|
.filter(f => wanted.has(f.id))
|
|
@@ -213,4 +236,31 @@ export function composeRubricFromProfile(profile, fragmentsOverride) {
|
|
|
213
236
|
const dimensions = Array.from(new Set(matched.map(f => f.dimension).filter((d) => Boolean(d))));
|
|
214
237
|
return { fragments: matched, body, calibration, dimensions };
|
|
215
238
|
}
|
|
239
|
+
function profileToFragmentIds(profile) {
|
|
240
|
+
switch (profile) {
|
|
241
|
+
case 'saas':
|
|
242
|
+
case 'app':
|
|
243
|
+
case 'dashboard':
|
|
244
|
+
return ['type-saas-app'];
|
|
245
|
+
case 'defi':
|
|
246
|
+
case 'crypto':
|
|
247
|
+
case 'web3':
|
|
248
|
+
return ['type-saas-app', 'domain-crypto'];
|
|
249
|
+
case 'devtools':
|
|
250
|
+
case 'developer':
|
|
251
|
+
case 'dev':
|
|
252
|
+
return ['type-saas-app', 'domain-devtools'];
|
|
253
|
+
case 'ai':
|
|
254
|
+
case 'ml':
|
|
255
|
+
case 'llm':
|
|
256
|
+
return ['type-saas-app', 'domain-ai'];
|
|
257
|
+
case 'fintech':
|
|
258
|
+
case 'finance':
|
|
259
|
+
return ['type-saas-app', 'domain-fintech'];
|
|
260
|
+
case 'general':
|
|
261
|
+
return [];
|
|
262
|
+
default:
|
|
263
|
+
return [`type-${profile}`];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
216
266
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/design/audit/rubric/loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/design/audit/rubric/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rollup weights — Layer 1 of the world-class design-audit architecture.
|
|
3
|
+
*
|
|
4
|
+
* Per-page-type weights for combining the 5 dimension scores into a single
|
|
5
|
+
* rollup. Marketing surfaces emphasize visual + content; saas-app surfaces
|
|
6
|
+
* emphasize product_intent + workflow; docs lean on content_ia. The weights
|
|
7
|
+
* are evolvable via the GEPA target `pareto-rollup-weights`.
|
|
8
|
+
*
|
|
9
|
+
* Invariant: every weight set sums to 1.0 within 1e-6.
|
|
10
|
+
*/
|
|
11
|
+
import type { Dimension } from '../v2/types.js';
|
|
12
|
+
import type { PageType } from '../types.js';
|
|
13
|
+
export type RollupWeightKey = PageType | 'default';
|
|
14
|
+
export declare const ROLLUP_WEIGHTS: Record<RollupWeightKey, Record<Dimension, number>>;
|
|
15
|
+
/**
|
|
16
|
+
* Look up rollup weights for a page type, falling back to `default` when the
|
|
17
|
+
* type isn't in the table (forward-compat for new types).
|
|
18
|
+
*/
|
|
19
|
+
export declare function rollupWeightsFor(type: PageType | undefined): Record<Dimension, number>;
|
|
20
|
+
/**
|
|
21
|
+
* Render a human-readable formula for the audit report, e.g.
|
|
22
|
+
* "saas-app: product_intent*0.35 + workflow*0.30 + visual_craft*0.15 + trust_clarity*0.10 + content_ia*0.10"
|
|
23
|
+
*/
|
|
24
|
+
export declare function rollupFormula(type: PageType | undefined, weights: Record<Dimension, number>): string;
|
|
25
|
+
//# sourceMappingURL=rollup-weights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup-weights.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/rubric/rollup-weights.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAA;AA0BlD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAsB,CAAA;AAEpG;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAGtF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,MAAM,CAIpG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rollup weights — Layer 1 of the world-class design-audit architecture.
|
|
3
|
+
*
|
|
4
|
+
* Per-page-type weights for combining the 5 dimension scores into a single
|
|
5
|
+
* rollup. Marketing surfaces emphasize visual + content; saas-app surfaces
|
|
6
|
+
* emphasize product_intent + workflow; docs lean on content_ia. The weights
|
|
7
|
+
* are evolvable via the GEPA target `pareto-rollup-weights`.
|
|
8
|
+
*
|
|
9
|
+
* Invariant: every weight set sums to 1.0 within 1e-6.
|
|
10
|
+
*/
|
|
11
|
+
const ROLLUP_WEIGHTS_RAW = {
|
|
12
|
+
marketing: { product_intent: 0.30, visual_craft: 0.30, content_ia: 0.25, trust_clarity: 0.10, workflow: 0.05 },
|
|
13
|
+
'saas-app': { product_intent: 0.35, workflow: 0.30, visual_craft: 0.15, trust_clarity: 0.10, content_ia: 0.10 },
|
|
14
|
+
dashboard: { product_intent: 0.30, workflow: 0.30, content_ia: 0.20, visual_craft: 0.15, trust_clarity: 0.05 },
|
|
15
|
+
docs: { content_ia: 0.45, workflow: 0.25, product_intent: 0.15, visual_craft: 0.15, trust_clarity: 0.0 },
|
|
16
|
+
ecommerce: { trust_clarity: 0.35, product_intent: 0.30, workflow: 0.20, visual_craft: 0.10, content_ia: 0.05 },
|
|
17
|
+
social: { product_intent: 0.30, workflow: 0.30, content_ia: 0.20, visual_craft: 0.15, trust_clarity: 0.05 },
|
|
18
|
+
tool: { workflow: 0.40, product_intent: 0.30, content_ia: 0.15, visual_craft: 0.10, trust_clarity: 0.05 },
|
|
19
|
+
blog: { content_ia: 0.50, visual_craft: 0.25, product_intent: 0.15, workflow: 0.10, trust_clarity: 0.0 },
|
|
20
|
+
utility: { workflow: 0.45, product_intent: 0.25, content_ia: 0.20, visual_craft: 0.10, trust_clarity: 0.0 },
|
|
21
|
+
unknown: { product_intent: 0.30, workflow: 0.25, visual_craft: 0.20, content_ia: 0.15, trust_clarity: 0.10 },
|
|
22
|
+
default: { product_intent: 0.30, workflow: 0.25, visual_craft: 0.20, content_ia: 0.15, trust_clarity: 0.10 },
|
|
23
|
+
};
|
|
24
|
+
const WEIGHT_SUM_TOLERANCE = 1e-6;
|
|
25
|
+
// Validate at module load — fail fast if a weight set drifts.
|
|
26
|
+
for (const [type, weights] of Object.entries(ROLLUP_WEIGHTS_RAW)) {
|
|
27
|
+
const sum = Object.values(weights).reduce((acc, n) => acc + n, 0);
|
|
28
|
+
if (Math.abs(sum - 1) > WEIGHT_SUM_TOLERANCE) {
|
|
29
|
+
throw new Error(`rollup weights for ${type} sum to ${sum}, expected 1.0 ± ${WEIGHT_SUM_TOLERANCE}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export const ROLLUP_WEIGHTS = ROLLUP_WEIGHTS_RAW;
|
|
33
|
+
/**
|
|
34
|
+
* Look up rollup weights for a page type, falling back to `default` when the
|
|
35
|
+
* type isn't in the table (forward-compat for new types).
|
|
36
|
+
*/
|
|
37
|
+
export function rollupWeightsFor(type) {
|
|
38
|
+
if (type && type in ROLLUP_WEIGHTS)
|
|
39
|
+
return ROLLUP_WEIGHTS[type];
|
|
40
|
+
return ROLLUP_WEIGHTS.default;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Render a human-readable formula for the audit report, e.g.
|
|
44
|
+
* "saas-app: product_intent*0.35 + workflow*0.30 + visual_craft*0.15 + trust_clarity*0.10 + content_ia*0.10"
|
|
45
|
+
*/
|
|
46
|
+
export function rollupFormula(type, weights) {
|
|
47
|
+
const entries = Object.entries(weights).sort(([, a], [, b]) => b - a);
|
|
48
|
+
const body = entries.map(([dim, w]) => `${dim}*${w.toFixed(2)}`).join(' + ');
|
|
49
|
+
return `${type ?? 'default'}: ${body}`;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=rollup-weights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup-weights.js","sourceRoot":"","sources":["../../../../src/design/audit/rubric/rollup-weights.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* Each stage is a pure transformation; the orchestrator (`pipeline.ts`) wires them.
|
|
6
6
|
*/
|
|
7
7
|
import type { DesignFinding, DesignSystemScore } from '../../types.js';
|
|
8
|
+
import type { EthicsViolation } from './v2/types.js';
|
|
8
9
|
export type { DesignFinding, DesignSystemScore } from '../../types.js';
|
|
10
|
+
export type { EthicsViolation } from './v2/types.js';
|
|
9
11
|
/**
|
|
10
12
|
* Page classification — produced by a single cheap LLM call before any scoring.
|
|
11
13
|
* Drives rubric composition and measurement strategy.
|
|
@@ -161,6 +163,32 @@ export interface PageAuditResult {
|
|
|
161
163
|
designSystemScore?: DesignSystemScore;
|
|
162
164
|
screenshotPath?: string;
|
|
163
165
|
tokensUsed?: number;
|
|
166
|
+
/**
|
|
167
|
+
* Layer 7 — domain ethics violations. When non-empty, `score` is capped by
|
|
168
|
+
* the lowest `rollupCap` across violations until the underlying issue is
|
|
169
|
+
* remediated. Empty when --skip-ethics is set or when no rule fires.
|
|
170
|
+
*/
|
|
171
|
+
ethicsViolations?: EthicsViolation[];
|
|
172
|
+
/**
|
|
173
|
+
* The pre-cap score (Layer 7). Set when `ethicsViolations` is non-empty so
|
|
174
|
+
* tooling can show "would have scored X, capped at Y" without losing
|
|
175
|
+
* the LLM's original assessment.
|
|
176
|
+
*/
|
|
177
|
+
preEthicsScore?: number;
|
|
178
|
+
/**
|
|
179
|
+
* Layer 1 — v2 multi-dim audit result. Emitted alongside the v1 fields for
|
|
180
|
+
* one release as a backwards-compat bridge. Consumers should migrate to
|
|
181
|
+
* `auditResultV2` and treat the v1 surface as deprecated.
|
|
182
|
+
*
|
|
183
|
+
* Typed as `unknown` here to avoid pulling v2/types.ts into v1 consumers.
|
|
184
|
+
* The concrete shape is `import('./v2/types.js').AuditResult_v2`.
|
|
185
|
+
*/
|
|
186
|
+
auditResultV2?: unknown;
|
|
187
|
+
/**
|
|
188
|
+
* Layer 1 — ensemble classification (URL + DOM + LLM). When set, the
|
|
189
|
+
* pipeline used `--audit-passes auto` (the new default).
|
|
190
|
+
*/
|
|
191
|
+
ensembleClassification?: unknown;
|
|
164
192
|
error?: string;
|
|
165
193
|
}
|
|
166
194
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/design/audit/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/design/audit/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2 AuditResult builder.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing v1 PageAuditResult with multi-dim scoring + ensemble
|
|
5
|
+
* classification + rollup. Layer 1 emits BOTH schemas in `report.json` so
|
|
6
|
+
* downstream consumers can migrate at their own pace (one-release deprecation
|
|
7
|
+
* window per the RFC).
|
|
8
|
+
*/
|
|
9
|
+
import type { Brain } from '../../../brain/index.js';
|
|
10
|
+
import type { PageState } from '../../../types.js';
|
|
11
|
+
import type { PageAuditResult, ComposedRubric, MeasurementBundle } from '../types.js';
|
|
12
|
+
import { type AuditResult_v2, type DesignFinding, type Dimension, type DimensionScore, type EnsembleClassification } from './types.js';
|
|
13
|
+
import { renderAnchor, type CalibrationAnchor } from '../rubric/anchor-loader.js';
|
|
14
|
+
export interface BuildV2ResultInput {
|
|
15
|
+
brain: Brain;
|
|
16
|
+
state: PageState;
|
|
17
|
+
pageRef: string;
|
|
18
|
+
ensemble: EnsembleClassification;
|
|
19
|
+
rubric: ComposedRubric;
|
|
20
|
+
measurements: MeasurementBundle;
|
|
21
|
+
v1Result: PageAuditResult;
|
|
22
|
+
anchor?: CalibrationAnchor;
|
|
23
|
+
/** Reuse the pipeline runId so envelopes correlate. */
|
|
24
|
+
runId?: string;
|
|
25
|
+
/** Optional override (e.g. test fixtures). When set, skip the LLM call. */
|
|
26
|
+
precomputedScores?: Record<Dimension, DimensionScore>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Produce a complete `AuditResult_v2`. When `precomputedScores` is set we
|
|
30
|
+
* skip the v2 LLM call entirely (used by deterministic tests + the
|
|
31
|
+
* `--audit-passes auto` legacy fallback path).
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildAuditResultV2(input: BuildV2ResultInput): Promise<AuditResult_v2>;
|
|
34
|
+
declare function renderMeasurementSummary(measurements: MeasurementBundle): string;
|
|
35
|
+
declare function adaptFindings(v1Findings: PageAuditResult['findings']): DesignFinding[];
|
|
36
|
+
declare function mapCategoryToDimension(category: string): Dimension;
|
|
37
|
+
declare function computeTopFixes(findings: DesignFinding[]): DesignFinding[];
|
|
38
|
+
declare function synthesizeScoresFromV1(v1: PageAuditResult): Record<Dimension, DimensionScore>;
|
|
39
|
+
export declare const V2_INTERNALS: {
|
|
40
|
+
renderMeasurementSummary: typeof renderMeasurementSummary;
|
|
41
|
+
adaptFindings: typeof adaptFindings;
|
|
42
|
+
mapCategoryToDimension: typeof mapCategoryToDimension;
|
|
43
|
+
computeTopFixes: typeof computeTopFixes;
|
|
44
|
+
synthesizeScoresFromV1: typeof synthesizeScoresFromV1;
|
|
45
|
+
};
|
|
46
|
+
export { renderAnchor };
|
|
47
|
+
//# sourceMappingURL=build-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-result.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/v2/build-result.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAG5B,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEjF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,sBAAsB,CAAA;IAChC,MAAM,EAAE,cAAc,CAAA;IACtB,YAAY,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;CACtD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyD3F;AAED,iBAAS,wBAAwB,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,CAOzE;AAED,iBAAS,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,aAAa,EAAE,CAe/E;AAED,iBAAS,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAe3D;AAQD,iBAAS,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAMnE;AAWD,iBAAS,sBAAsB,CAAC,EAAE,EAAE,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAgBtF;AAMD,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAA;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2 AuditResult builder.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing v1 PageAuditResult with multi-dim scoring + ensemble
|
|
5
|
+
* classification + rollup. Layer 1 emits BOTH schemas in `report.json` so
|
|
6
|
+
* downstream consumers can migrate at their own pace (one-release deprecation
|
|
7
|
+
* window per the RFC).
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID, createHash } from 'node:crypto';
|
|
10
|
+
import { DIMENSIONS, } from './types.js';
|
|
11
|
+
import { buildEvalPromptV2, computeRollup, parseAuditResponseV2, } from './score.js';
|
|
12
|
+
import { renderAnchor } from '../rubric/anchor-loader.js';
|
|
13
|
+
/**
|
|
14
|
+
* Produce a complete `AuditResult_v2`. When `precomputedScores` is set we
|
|
15
|
+
* skip the v2 LLM call entirely (used by deterministic tests + the
|
|
16
|
+
* `--audit-passes auto` legacy fallback path).
|
|
17
|
+
*/
|
|
18
|
+
export async function buildAuditResultV2(input) {
|
|
19
|
+
const { brain, state, pageRef, ensemble, rubric, measurements, v1Result, anchor, runId } = input;
|
|
20
|
+
const measurementSummary = renderMeasurementSummary(measurements);
|
|
21
|
+
const prompt = buildEvalPromptV2({
|
|
22
|
+
pageType: ensemble.type,
|
|
23
|
+
rubricBody: rubric.body,
|
|
24
|
+
anchor,
|
|
25
|
+
measurementSummary,
|
|
26
|
+
intent: ensemble.intent,
|
|
27
|
+
});
|
|
28
|
+
let scores;
|
|
29
|
+
let llmTokens = 0;
|
|
30
|
+
if (input.precomputedScores) {
|
|
31
|
+
scores = input.precomputedScores;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
try {
|
|
35
|
+
const llm = await brain.auditDesign(state, 'Multi-dimensional audit (v2)', [], prompt);
|
|
36
|
+
llmTokens = llm.tokensUsed ?? 0;
|
|
37
|
+
const parsed = parseAuditResponseV2(llm.raw);
|
|
38
|
+
scores = parsed.scores;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Fall back: synthesize per-dim scores from the v1 result. Conservative —
|
|
42
|
+
// every dim gets the v1 score, range +/- 1, confidence 'low'.
|
|
43
|
+
scores = synthesizeScoresFromV1(v1Result);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const rollup = computeRollup(scores, ensemble.type);
|
|
47
|
+
const findings = adaptFindings(v1Result.findings);
|
|
48
|
+
const topFixes = computeTopFixes(findings).slice(0, 5).map((f) => f.id);
|
|
49
|
+
const promptHash = sha1(prompt);
|
|
50
|
+
const rubricHash = sha1(rubric.body);
|
|
51
|
+
const totalTokens = (v1Result.tokensUsed ?? 0) + llmTokens;
|
|
52
|
+
return {
|
|
53
|
+
schemaVersion: 2,
|
|
54
|
+
runId: runId ?? randomUUID(),
|
|
55
|
+
pageRef,
|
|
56
|
+
classification: ensemble,
|
|
57
|
+
scores,
|
|
58
|
+
rollup,
|
|
59
|
+
findings,
|
|
60
|
+
topFixes,
|
|
61
|
+
measurements,
|
|
62
|
+
ethicsViolations: [],
|
|
63
|
+
matchedPatterns: [],
|
|
64
|
+
modality: 'html',
|
|
65
|
+
evaluatedAt: new Date().toISOString(),
|
|
66
|
+
promptHash,
|
|
67
|
+
rubricHash,
|
|
68
|
+
tokensUsed: totalTokens > 0 ? totalTokens : undefined,
|
|
69
|
+
passes: ['v2-multidim'],
|
|
70
|
+
...(v1Result.error ? { error: v1Result.error } : {}),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function renderMeasurementSummary(measurements) {
|
|
74
|
+
const aaFails = measurements.contrast.aaFailures.length;
|
|
75
|
+
const a11y = measurements.a11y.violations.length;
|
|
76
|
+
return [
|
|
77
|
+
`contrast AA failures: ${aaFails} of ${measurements.contrast.totalChecked} text elements`,
|
|
78
|
+
`axe violations: ${a11y}${a11y > 0 ? ` (top: ${measurements.a11y.violations.slice(0, 3).map((v) => `${v.id}/${v.impact}`).join(', ')})` : ''}`,
|
|
79
|
+
].join('\n');
|
|
80
|
+
}
|
|
81
|
+
function adaptFindings(v1Findings) {
|
|
82
|
+
return v1Findings.map((f, idx) => {
|
|
83
|
+
const id = `finding-${idx + 1}-${sha1(`${f.category}|${f.description}`).slice(0, 8)}`;
|
|
84
|
+
const dimension = mapCategoryToDimension(f.category);
|
|
85
|
+
const kind = inferKind(f);
|
|
86
|
+
return {
|
|
87
|
+
...f,
|
|
88
|
+
id,
|
|
89
|
+
dimension,
|
|
90
|
+
kind,
|
|
91
|
+
// Layer 2 supplies real Patches; Layer 1 emits an empty array so the
|
|
92
|
+
// schema is satisfied without fabricating diffs.
|
|
93
|
+
patches: [],
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function mapCategoryToDimension(category) {
|
|
98
|
+
switch (category) {
|
|
99
|
+
case 'visual-bug':
|
|
100
|
+
case 'spacing':
|
|
101
|
+
case 'typography':
|
|
102
|
+
case 'alignment':
|
|
103
|
+
case 'layout':
|
|
104
|
+
return 'visual_craft';
|
|
105
|
+
case 'contrast':
|
|
106
|
+
case 'accessibility':
|
|
107
|
+
return 'visual_craft';
|
|
108
|
+
case 'ux':
|
|
109
|
+
default:
|
|
110
|
+
return 'product_intent';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function inferKind(f) {
|
|
114
|
+
if (f.category === 'contrast' || f.category === 'accessibility')
|
|
115
|
+
return 'measurement';
|
|
116
|
+
if (f.category === 'ux')
|
|
117
|
+
return 'job';
|
|
118
|
+
return 'polish';
|
|
119
|
+
}
|
|
120
|
+
function computeTopFixes(findings) {
|
|
121
|
+
return [...findings].sort((a, b) => {
|
|
122
|
+
const aScore = (a.impact ?? 0) * blastWeight(a.blast);
|
|
123
|
+
const bScore = (b.impact ?? 0) * blastWeight(b.blast);
|
|
124
|
+
return bScore - aScore;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function blastWeight(blast) {
|
|
128
|
+
switch (blast) {
|
|
129
|
+
case 'system': return 4;
|
|
130
|
+
case 'component': return 3;
|
|
131
|
+
case 'section': return 2;
|
|
132
|
+
default: return 1;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function synthesizeScoresFromV1(v1) {
|
|
136
|
+
const fallback = Math.max(1, Math.min(10, Math.round(v1.score)));
|
|
137
|
+
const out = {};
|
|
138
|
+
for (const dim of DIMENSIONS) {
|
|
139
|
+
out[dim] = {
|
|
140
|
+
score: fallback,
|
|
141
|
+
range: [
|
|
142
|
+
Math.max(1, fallback - 1),
|
|
143
|
+
Math.min(10, fallback + 1),
|
|
144
|
+
],
|
|
145
|
+
confidence: 'low',
|
|
146
|
+
summary: 'Synthesized from v1 score (v2 LLM call unavailable).',
|
|
147
|
+
primaryFindings: [],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
function sha1(s) {
|
|
153
|
+
return createHash('sha1').update(s).digest('hex');
|
|
154
|
+
}
|
|
155
|
+
export const V2_INTERNALS = {
|
|
156
|
+
renderMeasurementSummary,
|
|
157
|
+
adaptFindings,
|
|
158
|
+
mapCategoryToDimension,
|
|
159
|
+
computeTopFixes,
|
|
160
|
+
synthesizeScoresFromV1,
|
|
161
|
+
};
|
|
162
|
+
export { renderAnchor };
|
|
163
|
+
//# sourceMappingURL=build-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-result.js","sourceRoot":"","sources":["../../../../src/design/audit/v2/build-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer 1 multi-dim scoring — prompt builder, parser, and rollup.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions. No I/O, no Brain dependency. The pipeline supplies the
|
|
5
|
+
* inputs (classification, rubric, anchor, measurements) and persists the
|
|
6
|
+
* resulting `Record<Dimension, DimensionScore> + RollupScore`.
|
|
7
|
+
*/
|
|
8
|
+
import { type Dimension, type DimensionScore, type RollupScore } from './types.js';
|
|
9
|
+
import type { PageType } from '../types.js';
|
|
10
|
+
import type { CalibrationAnchor } from '../rubric/anchor-loader.js';
|
|
11
|
+
export interface BuildV2PromptInput {
|
|
12
|
+
pageType: PageType;
|
|
13
|
+
rubricBody: string;
|
|
14
|
+
anchor?: CalibrationAnchor;
|
|
15
|
+
/** Concise text summary of deterministic measurements (axe, contrast). */
|
|
16
|
+
measurementSummary: string;
|
|
17
|
+
/** Optional auditor framing override. */
|
|
18
|
+
systemOpener?: string;
|
|
19
|
+
/** Page intent line surfaced from classification. */
|
|
20
|
+
intent?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build the v2 evaluation prompt. Demands per-dim DimensionScore output with
|
|
24
|
+
* range + confidence. Does NOT request the rollup — the rollup is computed
|
|
25
|
+
* deterministically from the per-dim scores using rollup-weights.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildEvalPromptV2(input: BuildV2PromptInput): string;
|
|
28
|
+
export interface ParsedDimensionScores {
|
|
29
|
+
scores: Record<Dimension, DimensionScore>;
|
|
30
|
+
summary: string;
|
|
31
|
+
strengths: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parse the v2 LLM response. Throws when scores are missing, ranges violate
|
|
35
|
+
* `range[0] <= score <= range[1]`, or score is outside 1..10. The pipeline
|
|
36
|
+
* catches the throw and falls back to v1 mean-of-passes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseAuditResponseV2(raw: string): ParsedDimensionScores;
|
|
39
|
+
/**
|
|
40
|
+
* Compute the rollup from per-dimension scores using per-page-type weights.
|
|
41
|
+
* Conservative confidence rule: rollup confidence = lowest dim confidence.
|
|
42
|
+
*/
|
|
43
|
+
export declare function computeRollup(scores: Record<Dimension, DimensionScore>, pageType: PageType): RollupScore;
|
|
44
|
+
/**
|
|
45
|
+
* Aggregate per-dim scores from N independent passes (mean). Used when the
|
|
46
|
+
* audit runs deep mode and we want one DimensionScore per dimension.
|
|
47
|
+
*/
|
|
48
|
+
export declare function mergeDimensionScoresAcrossPasses(perPass: Array<Record<Dimension, DimensionScore>>): Record<Dimension, DimensionScore>;
|
|
49
|
+
//# sourceMappingURL=score.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/v2/score.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAKnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,0EAA0E;IAC1E,kBAAkB,EAAE,MAAM,CAAA;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAKD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CA6CnE;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CA4BvE;AAoCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAgCxG;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,GAChD,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CA6BnC"}
|