@tangle-network/browser-agent-driver 0.30.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/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 +12 -0
- package/dist/cli-design-audit.d.ts.map +1 -1
- package/dist/cli-design-audit.js +88 -0
- 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.js +29 -1
- package/dist/cli.js.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.map +1 -1
- package/dist/design/audit/evaluate.js +4 -1
- 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 +12 -0
- package/dist/design/audit/pipeline.d.ts.map +1 -1
- package/dist/design/audit/pipeline.js +65 -3
- 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/loader.d.ts +26 -6
- package/dist/design/audit/rubric/loader.d.ts.map +1 -1
- package/dist/design/audit/rubric/loader.js +45 -26
- 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/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/package.json +2 -1
|
@@ -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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
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 { DIMENSIONS, } from './types.js';
|
|
9
|
+
import { rollupFormula, rollupWeightsFor } from '../rubric/rollup-weights.js';
|
|
10
|
+
import { renderAnchor } from '../rubric/anchor-loader.js';
|
|
11
|
+
const VALID_CONFIDENCE = ['high', 'medium', 'low'];
|
|
12
|
+
const DEFAULT_OPENER = 'You are a principal product-design auditor. Score this page on five universal dimensions independently, with explicit ranges and confidence. The downstream system aggregates these into a page-type-aware rollup.';
|
|
13
|
+
/**
|
|
14
|
+
* Build the v2 evaluation prompt. Demands per-dim DimensionScore output with
|
|
15
|
+
* range + confidence. Does NOT request the rollup — the rollup is computed
|
|
16
|
+
* deterministically from the per-dim scores using rollup-weights.
|
|
17
|
+
*/
|
|
18
|
+
export function buildEvalPromptV2(input) {
|
|
19
|
+
const opener = input.systemOpener ?? DEFAULT_OPENER;
|
|
20
|
+
const anchorBlock = input.anchor ? renderAnchor(input.anchor) : '';
|
|
21
|
+
const intentLine = input.intent ? `\nPAGE INTENT (from classifier): ${input.intent}` : '';
|
|
22
|
+
return `${opener}
|
|
23
|
+
|
|
24
|
+
You are auditing a page that has been pre-classified as type=${input.pageType}. Contrast and accessibility measurements have already been counted deterministically — do NOT re-evaluate them. They will be merged with your output.${intentLine}
|
|
25
|
+
|
|
26
|
+
DIMENSIONS — score each one 1-10 (integer) with an explicit uncertainty range and confidence:
|
|
27
|
+
|
|
28
|
+
product_intent — Does the page make its audience, purpose, primary action, and product state obvious within 5 seconds? Empty/loading/error states designed?
|
|
29
|
+
visual_craft — Is the visual system intentional? Typography ramp, spacing rhythm, color tokens, component coherence, polish details. Decorative-but-shallow output is a defect.
|
|
30
|
+
trust_clarity — Are commitments (money, identity, deploy, share, irreversible actions) accompanied by the right trust details (price, fees, permissions, undo path, provenance)?
|
|
31
|
+
workflow — Can a user complete the end-to-end job? State transitions, recovery from failure, action hierarchy match the operational verbs of the system.
|
|
32
|
+
content_ia — Is the copy plain and useful? Are labels and IA tuned to the audience's tasks? Meta-copy that explains the UI is a defect.
|
|
33
|
+
|
|
34
|
+
DETERMINISTIC MEASUREMENTS (do not duplicate):
|
|
35
|
+
${input.measurementSummary}
|
|
36
|
+
|
|
37
|
+
${anchorBlock ? anchorBlock + '\n\n' : ''}EVALUATION RUBRIC:
|
|
38
|
+
${input.rubricBody}
|
|
39
|
+
|
|
40
|
+
OUTPUT REQUIREMENTS:
|
|
41
|
+
- Every dimension MUST have an integer score 1-10.
|
|
42
|
+
- Every dimension MUST have a range [low, high] with low <= score <= high. Range width encodes your uncertainty.
|
|
43
|
+
- Every dimension MUST have confidence in {"high","medium","low"}.
|
|
44
|
+
- Summary is one sentence grounded in observable evidence.
|
|
45
|
+
- primaryFindings is a list of finding ids that drive the score (may be empty if you produce no findings).
|
|
46
|
+
|
|
47
|
+
RESPOND WITH ONLY a JSON object:
|
|
48
|
+
{
|
|
49
|
+
"scores": {
|
|
50
|
+
"product_intent": { "score": 6, "range": [5, 7], "confidence": "medium", "summary": "Hero is clear but action hierarchy is diffuse.", "primaryFindings": [] },
|
|
51
|
+
"visual_craft": { "score": 7, "range": [6, 8], "confidence": "high", "summary": "Spacing rhythm is intentional but type ramp drifts in cards.", "primaryFindings": [] },
|
|
52
|
+
"trust_clarity": { "score": 5, "range": [4, 6], "confidence": "medium", "summary": "Fees disclosed but only at the final step.", "primaryFindings": [] },
|
|
53
|
+
"workflow": { "score": 6, "range": [5, 7], "confidence": "medium", "summary": "Empty state directs the user but error recovery is implicit.", "primaryFindings": [] },
|
|
54
|
+
"content_ia": { "score": 7, "range": [6, 8], "confidence": "high", "summary": "Copy is plain and audience-tuned.", "primaryFindings": [] }
|
|
55
|
+
},
|
|
56
|
+
"summary": "One-sentence overall assessment.",
|
|
57
|
+
"strengths": ["..."],
|
|
58
|
+
"findings": []
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Score 1-10. Most production apps score 5-7. Only world-class deserves 8+. Be honest.`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse the v2 LLM response. Throws when scores are missing, ranges violate
|
|
65
|
+
* `range[0] <= score <= range[1]`, or score is outside 1..10. The pipeline
|
|
66
|
+
* catches the throw and falls back to v1 mean-of-passes.
|
|
67
|
+
*/
|
|
68
|
+
export function parseAuditResponseV2(raw) {
|
|
69
|
+
const parsed = extractJsonObject(raw);
|
|
70
|
+
if (!parsed)
|
|
71
|
+
throw new Error('v2 parser: no JSON object in response');
|
|
72
|
+
const rawScores = parsed.scores;
|
|
73
|
+
if (!rawScores || typeof rawScores !== 'object') {
|
|
74
|
+
throw new Error('v2 parser: missing scores object');
|
|
75
|
+
}
|
|
76
|
+
const scoreMap = rawScores;
|
|
77
|
+
const out = {};
|
|
78
|
+
for (const dim of DIMENSIONS) {
|
|
79
|
+
const dimRaw = scoreMap[dim];
|
|
80
|
+
if (!dimRaw || typeof dimRaw !== 'object') {
|
|
81
|
+
throw new Error(`v2 parser: dimension ${dim} missing`);
|
|
82
|
+
}
|
|
83
|
+
out[dim] = parseDimensionScore(dim, dimRaw);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
scores: out,
|
|
87
|
+
summary: typeof parsed.summary === 'string' ? parsed.summary : '',
|
|
88
|
+
strengths: Array.isArray(parsed.strengths)
|
|
89
|
+
? (parsed.strengths.filter((s) => typeof s === 'string'))
|
|
90
|
+
: [],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function parseDimensionScore(dim, raw) {
|
|
94
|
+
const score = raw.score;
|
|
95
|
+
if (typeof score !== 'number' || !Number.isFinite(score)) {
|
|
96
|
+
throw new Error(`v2 parser: ${dim}.score must be a number`);
|
|
97
|
+
}
|
|
98
|
+
const integerScore = Math.round(score);
|
|
99
|
+
if (integerScore < 1 || integerScore > 10) {
|
|
100
|
+
throw new Error(`v2 parser: ${dim}.score=${integerScore} outside 1..10`);
|
|
101
|
+
}
|
|
102
|
+
const range = raw.range;
|
|
103
|
+
if (!Array.isArray(range) || range.length !== 2 || typeof range[0] !== 'number' || typeof range[1] !== 'number') {
|
|
104
|
+
throw new Error(`v2 parser: ${dim}.range must be [number, number]`);
|
|
105
|
+
}
|
|
106
|
+
const [low, high] = range;
|
|
107
|
+
if (low > high) {
|
|
108
|
+
throw new Error(`v2 parser: ${dim}.range=[${low},${high}] inverted`);
|
|
109
|
+
}
|
|
110
|
+
if (integerScore < low || integerScore > high) {
|
|
111
|
+
throw new Error(`v2 parser: ${dim}.score=${integerScore} outside range [${low},${high}]`);
|
|
112
|
+
}
|
|
113
|
+
if (low < 1 || high > 10) {
|
|
114
|
+
throw new Error(`v2 parser: ${dim}.range=[${low},${high}] outside 1..10`);
|
|
115
|
+
}
|
|
116
|
+
const confidenceRaw = String(raw.confidence ?? '').toLowerCase();
|
|
117
|
+
const confidence = VALID_CONFIDENCE.includes(confidenceRaw)
|
|
118
|
+
? confidenceRaw
|
|
119
|
+
: 'medium';
|
|
120
|
+
const summary = typeof raw.summary === 'string' ? raw.summary : '';
|
|
121
|
+
const primaryFindings = Array.isArray(raw.primaryFindings)
|
|
122
|
+
? raw.primaryFindings.filter((s) => typeof s === 'string')
|
|
123
|
+
: [];
|
|
124
|
+
return { score: integerScore, range: [low, high], confidence, summary, primaryFindings };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Compute the rollup from per-dimension scores using per-page-type weights.
|
|
128
|
+
* Conservative confidence rule: rollup confidence = lowest dim confidence.
|
|
129
|
+
*/
|
|
130
|
+
export function computeRollup(scores, pageType) {
|
|
131
|
+
const weights = rollupWeightsFor(pageType);
|
|
132
|
+
let weighted = 0;
|
|
133
|
+
let lowSum = 0;
|
|
134
|
+
let highSum = 0;
|
|
135
|
+
for (const dim of DIMENSIONS) {
|
|
136
|
+
const dimScore = scores[dim];
|
|
137
|
+
const w = weights[dim];
|
|
138
|
+
weighted += dimScore.score * w;
|
|
139
|
+
lowSum += dimScore.range[0] * w;
|
|
140
|
+
highSum += dimScore.range[1] * w;
|
|
141
|
+
}
|
|
142
|
+
const score = Math.round(weighted * 10) / 10;
|
|
143
|
+
const range = [
|
|
144
|
+
Math.round(lowSum * 10) / 10,
|
|
145
|
+
Math.round(highSum * 10) / 10,
|
|
146
|
+
];
|
|
147
|
+
const confidences = DIMENSIONS.map((d) => scores[d].confidence);
|
|
148
|
+
const confidence = confidences.includes('low')
|
|
149
|
+
? 'low'
|
|
150
|
+
: confidences.includes('medium')
|
|
151
|
+
? 'medium'
|
|
152
|
+
: 'high';
|
|
153
|
+
return {
|
|
154
|
+
score,
|
|
155
|
+
range,
|
|
156
|
+
confidence,
|
|
157
|
+
rule: rollupFormula(pageType, weights),
|
|
158
|
+
weights,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Aggregate per-dim scores from N independent passes (mean). Used when the
|
|
163
|
+
* audit runs deep mode and we want one DimensionScore per dimension.
|
|
164
|
+
*/
|
|
165
|
+
export function mergeDimensionScoresAcrossPasses(perPass) {
|
|
166
|
+
if (perPass.length === 0) {
|
|
167
|
+
throw new Error('mergeDimensionScoresAcrossPasses: empty input');
|
|
168
|
+
}
|
|
169
|
+
if (perPass.length === 1)
|
|
170
|
+
return perPass[0];
|
|
171
|
+
const out = {};
|
|
172
|
+
for (const dim of DIMENSIONS) {
|
|
173
|
+
const samples = perPass.map((p) => p[dim]);
|
|
174
|
+
const meanScore = samples.reduce((a, s) => a + s.score, 0) / samples.length;
|
|
175
|
+
const meanLow = samples.reduce((a, s) => a + s.range[0], 0) / samples.length;
|
|
176
|
+
const meanHigh = samples.reduce((a, s) => a + s.range[1], 0) / samples.length;
|
|
177
|
+
const conf = samples.map((s) => s.confidence);
|
|
178
|
+
const confidence = conf.includes('low') ? 'low' : conf.includes('medium') ? 'medium' : 'high';
|
|
179
|
+
const allFindings = samples.flatMap((s) => s.primaryFindings);
|
|
180
|
+
const primaryFindings = Array.from(new Set(allFindings)).slice(0, 3);
|
|
181
|
+
const summary = samples.find((s) => s.summary)?.summary ?? '';
|
|
182
|
+
out[dim] = {
|
|
183
|
+
score: Math.round(meanScore),
|
|
184
|
+
range: [
|
|
185
|
+
Math.max(1, Math.floor(meanLow)),
|
|
186
|
+
Math.min(10, Math.ceil(meanHigh)),
|
|
187
|
+
],
|
|
188
|
+
confidence,
|
|
189
|
+
summary,
|
|
190
|
+
primaryFindings,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
function extractJsonObject(raw) {
|
|
196
|
+
try {
|
|
197
|
+
let text = raw.trim();
|
|
198
|
+
if (text.startsWith('```')) {
|
|
199
|
+
text = text.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
|
200
|
+
}
|
|
201
|
+
const start = text.indexOf('{');
|
|
202
|
+
const end = text.lastIndexOf('}');
|
|
203
|
+
if (start < 0 || end <= start)
|
|
204
|
+
return null;
|
|
205
|
+
return JSON.parse(text.slice(start, end + 1));
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=score.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../../../src/design/audit/v2/score.ts"],"names":[],"mappings":"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"}
|