cbrowser 20.2.2 → 21.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/analysis/accessibility-empathy.d.ts +29 -1
- package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
- package/dist/analysis/accessibility-empathy.js +69 -35
- package/dist/analysis/accessibility-empathy.js.map +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +11 -7
- package/dist/browser.js.map +1 -1
- package/dist/cif-score.d.ts +56 -5
- package/dist/cif-score.d.ts.map +1 -1
- package/dist/cif-score.js +595 -346
- package/dist/cif-score.js.map +1 -1
- package/dist/cli.js +10 -8
- package/dist/cli.js.map +1 -1
- package/dist/cognitive/default-traits.d.ts +14 -0
- package/dist/cognitive/default-traits.d.ts.map +1 -0
- package/dist/cognitive/default-traits.js +36 -0
- package/dist/cognitive/default-traits.js.map +1 -0
- package/dist/cognitive/emotions.d.ts.map +1 -1
- package/dist/cognitive/emotions.js +104 -174
- package/dist/cognitive/emotions.js.map +1 -1
- package/dist/cognitive/index.d.ts +28 -0
- package/dist/cognitive/index.d.ts.map +1 -1
- package/dist/cognitive/index.js +353 -287
- package/dist/cognitive/index.js.map +1 -1
- package/dist/cognitive/temporal.d.ts +0 -24
- package/dist/cognitive/temporal.d.ts.map +1 -1
- package/dist/cognitive/temporal.js +45 -35
- package/dist/cognitive/temporal.js.map +1 -1
- package/dist/data/ctc-reference-v2-2026-10-24.d.ts +16 -0
- package/dist/data/ctc-reference-v2-2026-10-24.d.ts.map +1 -0
- package/dist/data/ctc-reference-v2-2026-10-24.js +1004 -0
- package/dist/data/ctc-reference-v2-2026-10-24.js.map +1 -0
- package/dist/ideal-profiles-gap.d.ts +1 -0
- package/dist/ideal-profiles-gap.d.ts.map +1 -1
- package/dist/ideal-profiles-gap.js +9 -1
- package/dist/ideal-profiles-gap.js.map +1 -1
- package/dist/ideal-profiles.d.ts +8 -0
- package/dist/ideal-profiles.d.ts.map +1 -1
- package/dist/ideal-profiles.js +28 -24
- package/dist/ideal-profiles.js.map +1 -1
- package/dist/mcp-server-remote.d.ts.map +1 -1
- package/dist/mcp-server-remote.js +7 -8
- package/dist/mcp-server-remote.js.map +1 -1
- package/dist/mcp-tools/account-personas.d.ts.map +1 -1
- package/dist/mcp-tools/account-personas.js +3 -1
- package/dist/mcp-tools/account-personas.js.map +1 -1
- package/dist/mcp-tools/base/answer-provenance.d.ts +28 -0
- package/dist/mcp-tools/base/answer-provenance.d.ts.map +1 -0
- package/dist/mcp-tools/base/answer-provenance.js +32 -0
- package/dist/mcp-tools/base/answer-provenance.js.map +1 -0
- package/dist/mcp-tools/base/audit-tools.d.ts +0 -3
- package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/audit-tools.js +152 -84
- package/dist/mcp-tools/base/audit-tools.js.map +1 -1
- package/dist/mcp-tools/base/capture-tools.js +1 -1
- package/dist/mcp-tools/base/capture-tools.js.map +1 -1
- package/dist/mcp-tools/base/chain-values.d.ts +38 -0
- package/dist/mcp-tools/base/chain-values.d.ts.map +1 -0
- package/dist/mcp-tools/base/chain-values.js +85 -0
- package/dist/mcp-tools/base/chain-values.js.map +1 -0
- package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/cognitive-tools.js +126 -120
- package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
- package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/gif-tools.js +23 -5
- package/dist/mcp-tools/base/gif-tools.js.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.js +229 -172
- package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
- package/dist/mcp-tools/base/site-familiarity.d.ts +31 -0
- package/dist/mcp-tools/base/site-familiarity.d.ts.map +1 -0
- package/dist/mcp-tools/base/site-familiarity.js +30 -0
- package/dist/mcp-tools/base/site-familiarity.js.map +1 -0
- package/dist/mcp-tools/base/site-knowledge-tools.js +1 -1
- package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
- package/dist/mcp-tools/base/story-narrative.d.ts +50 -0
- package/dist/mcp-tools/base/story-narrative.d.ts.map +1 -0
- package/dist/mcp-tools/base/story-narrative.js +88 -0
- package/dist/mcp-tools/base/story-narrative.js.map +1 -0
- package/dist/mcp-tools/base/values-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/values-tools.js +19 -5
- package/dist/mcp-tools/base/values-tools.js.map +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.d.ts +5 -5
- package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.js +38 -11
- package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
- package/dist/mcp-tools/persona-creation-tools.js +6 -6
- package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
- package/dist/mcp-tools/persona-lifecycle-tools.d.ts.map +1 -1
- package/dist/mcp-tools/persona-lifecycle-tools.js +5 -1
- package/dist/mcp-tools/persona-lifecycle-tools.js.map +1 -1
- package/dist/mcp-tools/tier-gate.js +1 -1
- package/dist/mcp-tools/tool-result-saver.d.ts +7 -0
- package/dist/mcp-tools/tool-result-saver.d.ts.map +1 -1
- package/dist/mcp-tools/tool-result-saver.js +11 -0
- package/dist/mcp-tools/tool-result-saver.js.map +1 -1
- package/dist/mcp-tools/trait-provenance.d.ts +109 -0
- package/dist/mcp-tools/trait-provenance.d.ts.map +1 -0
- package/dist/mcp-tools/trait-provenance.js +187 -0
- package/dist/mcp-tools/trait-provenance.js.map +1 -0
- package/dist/mcp-tools/ui-resources.d.ts +6 -7
- package/dist/mcp-tools/ui-resources.d.ts.map +1 -1
- package/dist/mcp-tools/ui-resources.js +162 -12
- package/dist/mcp-tools/ui-resources.js.map +1 -1
- package/dist/mcp-tools/widget-kit.d.ts +129 -3
- package/dist/mcp-tools/widget-kit.d.ts.map +1 -1
- package/dist/mcp-tools/widget-kit.js +507 -28
- package/dist/mcp-tools/widget-kit.js.map +1 -1
- package/dist/performance/metrics.d.ts.map +1 -1
- package/dist/performance/metrics.js +4 -1
- package/dist/performance/metrics.js.map +1 -1
- package/dist/persona-questionnaire.js +1 -1
- package/dist/persona-questionnaire.js.map +1 -1
- package/dist/personas.d.ts.map +1 -1
- package/dist/personas.js +133 -82
- package/dist/personas.js.map +1 -1
- package/dist/recording/engine.d.ts.map +1 -1
- package/dist/recording/engine.js +5 -2
- package/dist/recording/engine.js.map +1 -1
- package/dist/recording/saliency-overlay.d.ts +8 -3
- package/dist/recording/saliency-overlay.d.ts.map +1 -1
- package/dist/recording/saliency-overlay.js +14 -5
- package/dist/recording/saliency-overlay.js.map +1 -1
- package/dist/recording/types.js +1 -1
- package/dist/testing/nl-test-suite.d.ts.map +1 -1
- package/dist/testing/nl-test-suite.js +2 -1
- package/dist/testing/nl-test-suite.js.map +1 -1
- package/dist/trait-reference.d.ts +19 -2
- package/dist/trait-reference.d.ts.map +1 -1
- package/dist/trait-reference.js +19 -2
- package/dist/trait-reference.js.map +1 -1
- package/dist/types.d.ts +32 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +62 -52
- package/dist/types.js.map +1 -1
- package/dist/values/persona-completeness.js +1 -1
- package/dist/values/persona-completeness.js.map +1 -1
- package/dist/visual/ab-comparison.d.ts.map +1 -1
- package/dist/visual/ab-comparison.js +4 -1
- package/dist/visual/ab-comparison.js.map +1 -1
- package/dist/visual/attention-quality.d.ts +1 -1
- package/dist/visual/attention-quality.js +1 -1
- package/dist/visual/attention-transport.d.ts +74 -10
- package/dist/visual/attention-transport.d.ts.map +1 -1
- package/dist/visual/attention-transport.js +353 -193
- package/dist/visual/attention-transport.js.map +1 -1
- package/dist/visual/cognitive-models.d.ts +77 -55
- package/dist/visual/cognitive-models.d.ts.map +1 -1
- package/dist/visual/cognitive-models.js +231 -104
- package/dist/visual/cognitive-models.js.map +1 -1
- package/dist/visual/cognitive-transport-chain.d.ts +328 -30
- package/dist/visual/cognitive-transport-chain.d.ts.map +1 -1
- package/dist/visual/cognitive-transport-chain.js +576 -353
- package/dist/visual/cognitive-transport-chain.js.map +1 -1
- package/dist/visual/cognitive-transport.d.ts +446 -13
- package/dist/visual/cognitive-transport.d.ts.map +1 -1
- package/dist/visual/cognitive-transport.js +1085 -245
- package/dist/visual/cognitive-transport.js.map +1 -1
- package/dist/visual/cross-browser.d.ts.map +1 -1
- package/dist/visual/cross-browser.js +8 -6
- package/dist/visual/cross-browser.js.map +1 -1
- package/dist/visual/ctc-bands.d.ts +91 -0
- package/dist/visual/ctc-bands.d.ts.map +1 -0
- package/dist/visual/ctc-bands.js +117 -0
- package/dist/visual/ctc-bands.js.map +1 -0
- package/dist/visual/ctc-reference.d.ts +287 -0
- package/dist/visual/ctc-reference.d.ts.map +1 -0
- package/dist/visual/ctc-reference.js +376 -0
- package/dist/visual/ctc-reference.js.map +1 -0
- package/dist/visual/demand-laws.d.ts +145 -0
- package/dist/visual/demand-laws.d.ts.map +1 -0
- package/dist/visual/demand-laws.js +220 -0
- package/dist/visual/demand-laws.js.map +1 -0
- package/dist/visual/distance-metrics.d.ts +23 -1
- package/dist/visual/distance-metrics.d.ts.map +1 -1
- package/dist/visual/distance-metrics.js +49 -18
- package/dist/visual/distance-metrics.js.map +1 -1
- package/dist/visual/dro-bound.d.ts +220 -0
- package/dist/visual/dro-bound.d.ts.map +1 -0
- package/dist/visual/dro-bound.js +341 -0
- package/dist/visual/dro-bound.js.map +1 -0
- package/dist/visual/exact-w1.d.ts +60 -0
- package/dist/visual/exact-w1.d.ts.map +1 -0
- package/dist/visual/exact-w1.js +247 -0
- package/dist/visual/exact-w1.js.map +1 -0
- package/dist/visual/human-input.d.ts.map +1 -1
- package/dist/visual/human-input.js +45 -41
- package/dist/visual/human-input.js.map +1 -1
- package/dist/visual/index.d.ts +2 -0
- package/dist/visual/index.d.ts.map +1 -1
- package/dist/visual/index.js +2 -0
- package/dist/visual/index.js.map +1 -1
- package/dist/visual/law-times-report.d.ts +49 -0
- package/dist/visual/law-times-report.d.ts.map +1 -0
- package/dist/visual/law-times-report.js +38 -0
- package/dist/visual/law-times-report.js.map +1 -0
- package/dist/visual/model-provenance.d.ts +151 -0
- package/dist/visual/model-provenance.d.ts.map +1 -0
- package/dist/visual/model-provenance.js +334 -0
- package/dist/visual/model-provenance.js.map +1 -0
- package/dist/visual/normal-cdf.d.ts +14 -0
- package/dist/visual/normal-cdf.d.ts.map +1 -0
- package/dist/visual/normal-cdf.js +26 -0
- package/dist/visual/normal-cdf.js.map +1 -0
- package/dist/visual/perceptual-transport.d.ts +28 -4
- package/dist/visual/perceptual-transport.d.ts.map +1 -1
- package/dist/visual/perceptual-transport.js +66 -32
- package/dist/visual/perceptual-transport.js.map +1 -1
- package/dist/visual/provenance/attention.d.ts +55 -0
- package/dist/visual/provenance/attention.d.ts.map +1 -0
- package/dist/visual/provenance/attention.js +188 -0
- package/dist/visual/provenance/attention.js.map +1 -0
- package/dist/visual/provenance/chain.d.ts +41 -0
- package/dist/visual/provenance/chain.d.ts.map +1 -0
- package/dist/visual/provenance/chain.js +66 -0
- package/dist/visual/provenance/chain.js.map +1 -0
- package/dist/visual/provenance/cif.d.ts +42 -0
- package/dist/visual/provenance/cif.d.ts.map +1 -0
- package/dist/visual/provenance/cif.js +116 -0
- package/dist/visual/provenance/cif.js.map +1 -0
- package/dist/visual/provenance/ctc-reference.d.ts +36 -0
- package/dist/visual/provenance/ctc-reference.d.ts.map +1 -0
- package/dist/visual/provenance/ctc-reference.js +96 -0
- package/dist/visual/provenance/ctc-reference.js.map +1 -0
- package/dist/visual/provenance/distance.d.ts +10 -0
- package/dist/visual/provenance/distance.d.ts.map +1 -0
- package/dist/visual/provenance/distance.js +72 -0
- package/dist/visual/provenance/distance.js.map +1 -0
- package/dist/visual/provenance/dro.d.ts +10 -0
- package/dist/visual/provenance/dro.d.ts.map +1 -0
- package/dist/visual/provenance/dro.js +2 -0
- package/dist/visual/provenance/dro.js.map +1 -0
- package/dist/visual/provenance/emotion.d.ts +26 -0
- package/dist/visual/provenance/emotion.d.ts.map +1 -0
- package/dist/visual/provenance/emotion.js +99 -0
- package/dist/visual/provenance/emotion.js.map +1 -0
- package/dist/visual/provenance/human-input.d.ts +19 -0
- package/dist/visual/provenance/human-input.d.ts.map +1 -0
- package/dist/visual/provenance/human-input.js +84 -0
- package/dist/visual/provenance/human-input.js.map +1 -0
- package/dist/visual/provenance/journey-group.d.ts +15 -0
- package/dist/visual/provenance/journey-group.d.ts.map +1 -0
- package/dist/visual/provenance/journey-group.js +15 -0
- package/dist/visual/provenance/journey-group.js.map +1 -0
- package/dist/visual/provenance/journey-mcp.d.ts +24 -0
- package/dist/visual/provenance/journey-mcp.d.ts.map +1 -0
- package/dist/visual/provenance/journey-mcp.js +54 -0
- package/dist/visual/provenance/journey-mcp.js.map +1 -0
- package/dist/visual/provenance/journey.d.ts +34 -0
- package/dist/visual/provenance/journey.d.ts.map +1 -0
- package/dist/visual/provenance/journey.js +184 -0
- package/dist/visual/provenance/journey.js.map +1 -0
- package/dist/visual/provenance/laws.d.ts +38 -0
- package/dist/visual/provenance/laws.d.ts.map +1 -0
- package/dist/visual/provenance/laws.js +40 -0
- package/dist/visual/provenance/laws.js.map +1 -0
- package/dist/visual/provenance/page-metrics.d.ts +42 -0
- package/dist/visual/provenance/page-metrics.d.ts.map +1 -0
- package/dist/visual/provenance/page-metrics.js +79 -0
- package/dist/visual/provenance/page-metrics.js.map +1 -0
- package/dist/visual/provenance/perceptual.d.ts +63 -0
- package/dist/visual/provenance/perceptual.d.ts.map +1 -0
- package/dist/visual/provenance/perceptual.js +115 -0
- package/dist/visual/provenance/perceptual.js.map +1 -0
- package/dist/visual/provenance/persona-rates.d.ts +84 -0
- package/dist/visual/provenance/persona-rates.d.ts.map +1 -0
- package/dist/visual/provenance/persona-rates.js +112 -0
- package/dist/visual/provenance/persona-rates.js.map +1 -0
- package/dist/visual/provenance/personas.d.ts +122 -0
- package/dist/visual/provenance/personas.d.ts.map +1 -0
- package/dist/visual/provenance/personas.js +298 -0
- package/dist/visual/provenance/personas.js.map +1 -0
- package/dist/visual/provenance/profiles.d.ts +39 -0
- package/dist/visual/provenance/profiles.d.ts.map +1 -0
- package/dist/visual/provenance/profiles.js +37 -0
- package/dist/visual/provenance/profiles.js.map +1 -0
- package/dist/visual/provenance/temporal.d.ts +21 -0
- package/dist/visual/provenance/temporal.d.ts.map +1 -0
- package/dist/visual/provenance/temporal.js +56 -0
- package/dist/visual/provenance/temporal.js.map +1 -0
- package/dist/visual/provenance/visual-distance.d.ts +22 -0
- package/dist/visual/provenance/visual-distance.d.ts.map +1 -0
- package/dist/visual/provenance/visual-distance.js +30 -0
- package/dist/visual/provenance/visual-distance.js.map +1 -0
- package/dist/visual/regression.d.ts.map +1 -1
- package/dist/visual/regression.js +14 -9
- package/dist/visual/regression.js.map +1 -1
- package/dist/visual/responsive.d.ts.map +1 -1
- package/dist/visual/responsive.js +4 -1
- package/dist/visual/responsive.js.map +1 -1
- package/dist/visual/scope-prose.js +2 -2
- package/dist/visual/scope-prose.js.map +1 -1
- package/dist/visual/seeded-random.d.ts +16 -0
- package/dist/visual/seeded-random.d.ts.map +1 -0
- package/dist/visual/seeded-random.js +25 -0
- package/dist/visual/seeded-random.js.map +1 -0
- package/dist/visual/stored-accessibility-traits.d.ts +27 -0
- package/dist/visual/stored-accessibility-traits.d.ts.map +1 -0
- package/dist/visual/stored-accessibility-traits.js +35 -0
- package/dist/visual/stored-accessibility-traits.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Treats persona cognitive profiles as probability measures in Wasserstein space.
|
|
5
5
|
* Provides mathematically grounded operations:
|
|
6
6
|
*
|
|
7
|
-
* - Cognitive distance: W₁(personaA, personaB) —
|
|
7
|
+
* - Cognitive distance: generalized W₁(personaA, personaB) — trait shape AND level
|
|
8
8
|
* - Barycenter: consensus cognitive profile from multiple personas
|
|
9
9
|
* - Geodesic interpolation: principled persona blending preserving trait coupling
|
|
10
10
|
* - Adversarial generation: worst-case persona via distributionally robust optimization
|
|
@@ -40,13 +40,21 @@ export interface OTCognitiveProfile {
|
|
|
40
40
|
covariance: Float64Array[];
|
|
41
41
|
}
|
|
42
42
|
export interface CognitiveDistance {
|
|
43
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Generalized Wasserstein-1 distance between the two trait measures (shape
|
|
45
|
+
* AND level; see cognitiveDistance). In [0, distance.slackCost].
|
|
46
|
+
*/
|
|
44
47
|
w1: number;
|
|
45
|
-
/** Wasserstein-2 distance (Bures-Wasserstein for Gaussians) */
|
|
48
|
+
/** Wasserstein-2 distance (Bures-Wasserstein for Gaussians), on the simplex: shape only */
|
|
46
49
|
w2: number;
|
|
47
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Per-trait contribution to `w1`, plus one non-trait key, OVERALL_LEVEL_KEY
|
|
52
|
+
* ("overallLevel"): the slack bin's half of the cost of creating or destroying
|
|
53
|
+
* trait mass, exactly 0.5 * slackCost * |mean trait level A - mean trait
|
|
54
|
+
* level B|. The values sum to `w1`.
|
|
55
|
+
*/
|
|
48
56
|
traitContributions: Record<string, number>;
|
|
49
|
-
/** Sliced Wasserstein
|
|
57
|
+
/** Sliced Wasserstein-1 over uniform directions, exact (closed form), on the simplex: shape only */
|
|
50
58
|
sliced: number;
|
|
51
59
|
}
|
|
52
60
|
export interface CognitiveBarycenter {
|
|
@@ -86,6 +94,28 @@ export interface AdversarialPersona {
|
|
|
86
94
|
}
|
|
87
95
|
export declare const COGNITIVE_TRAITS: readonly ["patience", "riskTolerance", "comprehension", "persistence", "resilience", "selfEfficacy", "emotionalContagion", "attributionStyle", "satisficing", "anchoringBias", "timeHorizon", "fearOfMissingOut", "interruptRecovery", "metacognitivePlanning", "proceduralFluency", "transferLearning", "informationForaging", "changeBlindness", "mentalModelFlexibility", "trustCalibration", "socialProofSensitivity", "authoritySensitivity", "workingMemory", "readingTendency", "curiosity", "siteFamiliarity", "readingCapacity", "motorCapacity", "sustainedAttention"];
|
|
88
96
|
export type CognitiveTrait = typeof COGNITIVE_TRAITS[number];
|
|
97
|
+
/** The 29 x 29 trait ground-cost matrix, exposed for tests (a copy). */
|
|
98
|
+
export declare function traitGroundCostMatrix(): number[][];
|
|
99
|
+
/**
|
|
100
|
+
* Key of the slack bin's share in `CognitiveDistance.traitContributions`. Not a
|
|
101
|
+
* trait: it is the part of the distance spent creating or destroying trait mass,
|
|
102
|
+
* i.e. the difference in overall level between the two profiles.
|
|
103
|
+
*/
|
|
104
|
+
export declare const OVERALL_LEVEL_KEY = "overallLevel";
|
|
105
|
+
/** The generalized (trait + slack bin) cost matrix, exposed for tests (a copy). */
|
|
106
|
+
export declare function traitGeneralizedCostMatrix(): number[][];
|
|
107
|
+
/**
|
|
108
|
+
* A profile's trait measure for the generalized distance: d + 1 masses that sum
|
|
109
|
+
* to 1. Trait i carries t_i / d (t_i clamped to the schema range [0, 1], missing
|
|
110
|
+
* traits at distance.missingTraitDefault); the last entry is the slack bin,
|
|
111
|
+
* 1 - sum_i t_i / d, which holds the mass the traits do not.
|
|
112
|
+
*
|
|
113
|
+
* Unlike traitsToDistribution nothing is renormalised, so the absolute level
|
|
114
|
+
* survives: all traits 0.2 puts 0.2 on the traits and 0.8 in the slack bin, all
|
|
115
|
+
* traits 0.8 puts 0.8 and 0.2. No floor is applied either, because the solver
|
|
116
|
+
* accepts zero atoms (distance.simplexFloor belongs to the simplex encoding).
|
|
117
|
+
*/
|
|
118
|
+
export declare function traitsToLevelMeasure(traits: Record<string, number>): Float64Array;
|
|
89
119
|
/**
|
|
90
120
|
* Normalize trait values to a probability measure (simplex).
|
|
91
121
|
* This is the fundamental operation: traits → distribution.
|
|
@@ -99,6 +129,96 @@ export declare function distributionToTraits(dist: Float64Array, traitScale?: nu
|
|
|
99
129
|
* Build a OTCognitiveProfile from raw trait values.
|
|
100
130
|
*/
|
|
101
131
|
export declare function buildOTCognitiveProfile(name: string, traits: Record<string, number>): OTCognitiveProfile;
|
|
132
|
+
/**
|
|
133
|
+
* E|<x, theta>| / ||x|| for theta uniform on the unit sphere in `d`
|
|
134
|
+
* dimensions: Gamma(d/2) / (sqrt(pi) * Gamma((d + 1)/2)). The sliced
|
|
135
|
+
* Wasserstein-1 distance between two points is this times their Euclidean
|
|
136
|
+
* distance. Built from c_1 = 1, c_2 = 2/pi and c_(d+2) = c_d * d/(d + 1), so
|
|
137
|
+
* no gamma function is needed; for odd d it is a product of rationals.
|
|
138
|
+
* Exported for tests of the formula.
|
|
139
|
+
*/
|
|
140
|
+
export declare function sphereMeanAbsProjection(d: number): number;
|
|
141
|
+
/**
|
|
142
|
+
* Distance between two cognitive profiles.
|
|
143
|
+
*
|
|
144
|
+
* `w1` is the exact GENERALIZED Wasserstein-1 distance between the two trait
|
|
145
|
+
* vectors (Piccoli & Rossi 2014, "Generalized Wasserstein distance and its
|
|
146
|
+
* application to transport equations with source"; the unbalanced-OT form with
|
|
147
|
+
* a per-unit cost for creating or destroying mass). Each profile is the measure
|
|
148
|
+
* that puts t_i / 29 on trait i, so its total mass is its mean trait level and
|
|
149
|
+
* is NOT normalised away. The distance is the cheapest way to turn one measure
|
|
150
|
+
* into the other when moving a unit of mass from trait i to trait j costs
|
|
151
|
+
* d(trait_i, trait_j) (traitGroundDistance) and creating or destroying a unit
|
|
152
|
+
* costs c = distance.slackCost (0.4, a registered hypothesis).
|
|
153
|
+
*
|
|
154
|
+
* It is computed by the standard slack-bin reduction (traitsToLevelMeasure):
|
|
155
|
+
* each measure gets one extra bin holding 1 - its trait mass, so both sum to 1,
|
|
156
|
+
* the slack bin is at cost c from every trait and 0 from itself, and the exact
|
|
157
|
+
* balanced W1 is solved on the 30 bins by min-cost flow (successive shortest
|
|
158
|
+
* paths; see exact-w1.ts). Mass sent from a trait to the other side's slack bin
|
|
159
|
+
* is destroyed, mass sent from the slack bin to a trait is created. The
|
|
160
|
+
* reduction equals the Piccoli-Rossi distance (with a = c, b = 1) whenever
|
|
161
|
+
* 2c >= the largest ground cost (0.8): a plan that both destroys at i and
|
|
162
|
+
* creates at j can then be replaced by transporting i -> j at no greater cost,
|
|
163
|
+
* so some optimum only destroys (or only creates) |mass_A - mass_B|, which the
|
|
164
|
+
* slack bins always have room for since both trait masses are at most 1. The
|
|
165
|
+
* same condition makes the 30-bin cost a metric, so `w1` is a metric on trait
|
|
166
|
+
* vectors: 0 exactly when the 29 values agree (after the [0, 1] clamp and the
|
|
167
|
+
* missing-trait default). tests/cognitive-distance-w1.test.ts checks the
|
|
168
|
+
* reduction against the Piccoli-Rossi LP solved by an independent simplex.
|
|
169
|
+
*
|
|
170
|
+
* Bounds, with mean_i over the 29 traits:
|
|
171
|
+
* c * |mean_i t_A,i - mean_i t_B,i| <= w1 <= c * mean_i |t_A,i - t_B,i| <= c.
|
|
172
|
+
* The lower bound is the mass imbalance, which can only be created or
|
|
173
|
+
* destroyed; the upper bound routes every difference through the slack bin.
|
|
174
|
+
* Proportional profiles are no longer at distance 0: all traits 0.2 versus all
|
|
175
|
+
* traits 0.8 is exactly 0.6 * c = 0.24 (both bounds meet). History: until
|
|
176
|
+
* 2026-10-21 this field was a weighted L1 that was not optimal transport (see
|
|
177
|
+
* exact-w1.ts); its exact replacement, shipped the same day, normalised both
|
|
178
|
+
* profiles to the simplex, and that pair was at 0 on every metric.
|
|
179
|
+
*
|
|
180
|
+
* `w1` is also positively homogeneous in the trait difference: moving every
|
|
181
|
+
* trait of A toward B by the same fraction scales the distance by that
|
|
182
|
+
* fraction (Kantorovich-Rubinstein: W1 under a metric cost depends only on the
|
|
183
|
+
* signed difference of the measures). So pushing a persona's traits further
|
|
184
|
+
* from another's never brings it closer.
|
|
185
|
+
*
|
|
186
|
+
* `w2` and `sliced` are UNCHANGED and still computed on the simplex
|
|
187
|
+
* (traitsToDistribution), so they remain shape-only: proportional profiles are
|
|
188
|
+
* at 0 on both.
|
|
189
|
+
*
|
|
190
|
+
* `traitContributions[t]` is the cost attributed to trait t under the optimal
|
|
191
|
+
* plan: half the cost of mass shipped OUT of t plus half the cost of mass
|
|
192
|
+
* shipped INTO t, i.e. 0.5 * (sum_j P[t][j] C(t,j) + sum_i P[i][t] C(i,t)) over
|
|
193
|
+
* all 30 bins. The slack bin's share is reported under OVERALL_LEVEL_KEY: half
|
|
194
|
+
* of every creation or destruction is charged to the trait it happened at and
|
|
195
|
+
* half to the overall level. Each unit of cost is split between the two
|
|
196
|
+
* endpoints it connects, so the contributions sum to `w1` exactly and are
|
|
197
|
+
* symmetric in the two profiles (swapping A and B transposes P and leaves every
|
|
198
|
+
* contribution unchanged). Mass that stays put (P[t][t]) costs 0 and
|
|
199
|
+
* contributes nothing.
|
|
200
|
+
*
|
|
201
|
+
* The optimal plan is often not unique (ties are common under a three-level
|
|
202
|
+
* cost), and one tie matters for the attribution: destroying a unit at trait i
|
|
203
|
+
* and creating one at trait j costs 2c = 0.8, exactly what moving it i -> j
|
|
204
|
+
* costs between unrelated domains. Left to the solver, a pure shape difference
|
|
205
|
+
* can be booked as a level difference: with exactW1's earlier end-node rule
|
|
206
|
+
* (same optimal costs) 211 of the 300 roster pairs did, by up to 0.017. The
|
|
207
|
+
* current solver happens not to (0 of 300 roster pairs, 0 of 21,000 random
|
|
208
|
+
* pairs, 2026-10-21), but nothing guarantees which tied plan it returns, so
|
|
209
|
+
* the plan is UNCROSSED after solving: wherever it both destroys at i and
|
|
210
|
+
* creates at j, that mass is routed i -> j directly, which costs
|
|
211
|
+
* C(i, j) <= 2c, so the plan stays optimal. With the old end-node rule put
|
|
212
|
+
* back, uncrossing alone brings all 300 pairs back to the identity below.
|
|
213
|
+
* The uncrossed plan creates or destroys exactly |mass_A - mass_B|, which makes
|
|
214
|
+
* the attribution unique where it matters:
|
|
215
|
+
* overallLevel = 0.5 * c * |mean_i t_A,i - mean_i t_B,i|,
|
|
216
|
+
* half of what the level difference forces (the other half is charged to the
|
|
217
|
+
* traits where the mass is created or destroyed). Remaining ties among trait
|
|
218
|
+
* pairs are settled by solving the pair in a canonical order, so the
|
|
219
|
+
* attribution is deterministic and the same for (A, B) and (B, A). `w1` itself
|
|
220
|
+
* is unique.
|
|
221
|
+
*/
|
|
102
222
|
export declare function cognitiveDistance(profileA: OTCognitiveProfile, profileB: OTCognitiveProfile): CognitiveDistance;
|
|
103
223
|
/**
|
|
104
224
|
* Compute the Wasserstein barycenter of multiple cognitive profiles.
|
|
@@ -152,7 +272,6 @@ export declare function generateAdversarialPersonas(knownPersonas: OTCognitivePr
|
|
|
152
272
|
*
|
|
153
273
|
* The expectation distribution is derived from the persona's traits:
|
|
154
274
|
* - High patience → expects slower information delivery (wider temporal spread)
|
|
155
|
-
* - High comprehension → expects denser information
|
|
156
275
|
* - attention / motor / text read the three BRIDGED capacities
|
|
157
276
|
* (sustainedAttention, motorCapacity, readingCapacity), so a caller must run
|
|
158
277
|
* bridgeCapacityTraits (visual/cognitive-models.ts) before building the
|
|
@@ -187,8 +306,9 @@ export declare function estimateCognitiveLoad(persona: OTCognitiveProfile, pageM
|
|
|
187
306
|
};
|
|
188
307
|
/**
|
|
189
308
|
* Given a set of personas, find the N most different ones for maximum
|
|
190
|
-
* test coverage. Uses greedy farthest-point sampling
|
|
191
|
-
*
|
|
309
|
+
* test coverage. Uses greedy farthest-point sampling under the generalized W1
|
|
310
|
+
* of cognitiveDistance (so a difference in overall level counts as well as one
|
|
311
|
+
* in profile shape), seeded with the two farthest-apart profiles.
|
|
192
312
|
*
|
|
193
313
|
* The seed used to be `profiles[0]` — whichever persona happened to be first in
|
|
194
314
|
* the caller's array. Farthest-point traversal is seed-sensitive, so the same
|
|
@@ -282,9 +402,11 @@ export declare function measurePageGeometry(page: any, maxScreens?: number): Pro
|
|
|
282
402
|
* Returns one metrics object per screen, in document order.
|
|
283
403
|
*/
|
|
284
404
|
export declare function extractPerScreenMetrics(page: any, maxScreens?: number, geometry?: PageGeometry): Promise<Array<Awaited<ReturnType<typeof extractPageMetrics>>>>;
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
405
|
+
/**
|
|
406
|
+
* What extractPageMetrics returns: the PageMetrics the chain reads, plus the
|
|
407
|
+
* fields reported beside them.
|
|
408
|
+
*/
|
|
409
|
+
export interface ExtractedPageMetrics {
|
|
288
410
|
informationDensity: number;
|
|
289
411
|
visualComplexity: number;
|
|
290
412
|
interactiveElementCount: number;
|
|
@@ -304,10 +426,321 @@ geometry?: PageGeometry): Promise<{
|
|
|
304
426
|
/** Uncapped choice count, so the cap below is visible rather than silent. */
|
|
305
427
|
choiceCountRaw: number;
|
|
306
428
|
choiceCountCapped: boolean;
|
|
307
|
-
|
|
429
|
+
/**
|
|
430
|
+
* Stage B: seconds of work for the reference user, from published laws
|
|
431
|
+
* (demand-laws.ts). The chain turns each into a demand against one time
|
|
432
|
+
* budget (computeDemandDistribution). See lawSecondsOf for what each covers.
|
|
433
|
+
*/
|
|
434
|
+
pointingSeconds: number;
|
|
435
|
+
choosingSeconds: number;
|
|
436
|
+
readingSeconds: number;
|
|
437
|
+
procedureSeconds: number;
|
|
438
|
+
/**
|
|
439
|
+
* Stage C: the same choices by Hick-Hyman, the expert limit of the menu
|
|
440
|
+
* model (Cockburn, Gutwin & Greenberg 2007) whose novice limit is
|
|
441
|
+
* choosingSeconds. cognitiveLoad's demand reads (1 - e) choosingSeconds +
|
|
442
|
+
* e choosingSecondsExpert, e the run's siteFamiliarity.
|
|
443
|
+
*/
|
|
444
|
+
choosingSecondsExpert: number;
|
|
445
|
+
/** Diagnostics beside the law times; no demand reads them. */
|
|
446
|
+
lawDiagnostics: LawDiagnostics;
|
|
447
|
+
}
|
|
448
|
+
/** What lawSecondsOf measured besides the law times. */
|
|
449
|
+
export interface LawDiagnostics {
|
|
450
|
+
/** Mean Fitts index of difficulty over the stored targets, bits. */
|
|
451
|
+
meanFittsID: number;
|
|
452
|
+
/** Targets acquired (interactiveElements, uncapped). */
|
|
453
|
+
targets: number;
|
|
454
|
+
/** Entry steps the KLM time charges an M for. */
|
|
455
|
+
entrySteps: number;
|
|
456
|
+
/** Choice groups resolved, uncapped, plus the ungrouped links as one more when there are any. */
|
|
457
|
+
choiceGroups: number;
|
|
458
|
+
/** Links in no choice group, which form one more choice set. */
|
|
459
|
+
ungroupedLinks: number;
|
|
460
|
+
/**
|
|
461
|
+
* How ungroupedLinks was counted: `groupedLinks` (format 2: links -
|
|
462
|
+
* groupedLinks, each link once) or `navGroupSizes` (format 1: links minus the
|
|
463
|
+
* stored nav groups' sizes, where a link in nested groups may count twice).
|
|
464
|
+
*/
|
|
465
|
+
ungroupedLinksFrom: "groupedLinks" | "navGroupSizes";
|
|
466
|
+
/**
|
|
467
|
+
* Menu labels read once each: the grouped links whose drawn text holds a
|
|
468
|
+
* letter or digit (groupedLinksWithText); an icon-only link has nothing to
|
|
469
|
+
* read. 0 for format 1, which has no in-group prose.
|
|
470
|
+
*/
|
|
471
|
+
labels: number;
|
|
472
|
+
/** The part of readingSeconds that is the labels' first read (law.reading.labelFirstRead per label). */
|
|
473
|
+
labelSeconds: number;
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* A page as measured, before any normaliser: the counts every PageMetrics
|
|
477
|
+
* field is computed from, and the geometry a demand model needs beyond them
|
|
478
|
+
* (interactive targets, choice groups, text blocks). Plain numbers, strings
|
|
479
|
+
* and arrays, so it serialises as JSON and round-trips exactly.
|
|
480
|
+
*
|
|
481
|
+
* WHY IT EXISTS. extractPageMetrics used to count and normalise in one pass
|
|
482
|
+
* inside the page, so the only thing a caller could keep was the normalised
|
|
483
|
+
* 0-1 metric. The CTC reference set stored exactly that, and a registered
|
|
484
|
+
* normaliser (a midpoint, a weight, a cap) could not move the curve built from
|
|
485
|
+
* it: every stored page had the old value baked in. Now measurePageRaw counts,
|
|
486
|
+
* deriveMetrics normalises, and extractPageMetrics is the two in sequence,
|
|
487
|
+
* returning what it always returned (tests/page-metrics-golden.test.ts).
|
|
488
|
+
*
|
|
489
|
+
* WHICH CONSTANTS ARE APPLIED WHERE. The ids in PAGE_METRICS_MEASURE_IDS
|
|
490
|
+
* (provenance/page-metrics.ts) decide what is counted at all, so they are
|
|
491
|
+
* applied while measuring and a stored record cannot be re-derived under
|
|
492
|
+
* another value: the lazy-load walk, the colour sample, the prose length
|
|
493
|
+
* filter, script detection, and this record's own storage bounds. Every other
|
|
494
|
+
* pageMetrics constant is applied by deriveMetrics, the word, run and
|
|
495
|
+
* sentence-length thresholds included: they read the length histograms below
|
|
496
|
+
* rather than counts already cut at one threshold.
|
|
497
|
+
*
|
|
498
|
+
* FORMAT 2 (RAW_PAGE_FORMAT). Four things format 1 measured wrongly or not
|
|
499
|
+
* at all, fixed where they are measured because a stored record cannot be
|
|
500
|
+
* corrected later:
|
|
501
|
+
* - Prose counted once. Format 1 took every element matching the prose
|
|
502
|
+
* selector, so a p inside an li, an li inside a td or a p inside a
|
|
503
|
+
* blockquote was counted once per matching ancestor (a nested menu many
|
|
504
|
+
* times over). Format 2 counts the outermost matching element only, so
|
|
505
|
+
* `text`, `textBlocks` and `prose` hold each visible character once.
|
|
506
|
+
* Format 1's count survives as `proseNested`, three totals measured on
|
|
507
|
+
* the same DOM, for comparison; nothing derives from it.
|
|
508
|
+
* - A language picker is not the page's language. The key-element script
|
|
509
|
+
* rule read the first nav, and www.w3.org's first nav lists its Japanese
|
|
510
|
+
* and Chinese editions, so the page read as CJK. Text declared to be in
|
|
511
|
+
* another language (lang, or a link's hreflang) is no longer key-element
|
|
512
|
+
* text, and a nav that is a language picker is not "the nav".
|
|
513
|
+
* - Menu labels apart from the prose (proseInNav): the prose that sits in
|
|
514
|
+
* a nav or composite group, which the choosing law already reads.
|
|
515
|
+
* - A choice in one group only, with whole nav totals. Format 1 counted a
|
|
516
|
+
* nav's links, then a menubar inside it, then its submenus, so one link
|
|
517
|
+
* sat in up to three groups, and its nav sizes stopped at the stored
|
|
518
|
+
* list's 64 groups. Format 2 gives each choice to the outermost group
|
|
519
|
+
* that offers it and stores navGroupCount, navLinks and groupedLinks
|
|
520
|
+
* uncapped; format 1's group totals survive as `choiceNested`.
|
|
521
|
+
* deriveMetrics reads groupedLinks (the links in no group, for the choosing
|
|
522
|
+
* law) and none of the other new fields. It still accepts a format-1 record
|
|
523
|
+
* (RawPageMeasurementV1), which derives as format 2 does except choosing,
|
|
524
|
+
* whose ungrouped links come from the stored nav sizes, so the two can be
|
|
525
|
+
* compared.
|
|
526
|
+
*/
|
|
527
|
+
export interface RawPageMeasurement {
|
|
528
|
+
/** Version of this record's layout: RAW_PAGE_FORMAT. */
|
|
529
|
+
format: 2;
|
|
530
|
+
scope: MetricScope;
|
|
531
|
+
/** window.innerWidth, CSS px. */
|
|
532
|
+
viewportWidth: number;
|
|
533
|
+
/** From the shared PageGeometry. */
|
|
534
|
+
viewportHeight: number;
|
|
535
|
+
documentHeight: number;
|
|
536
|
+
pageScreens: number;
|
|
537
|
+
/** window.scrollY when measured. Boxes are in document coordinates; subtract it for viewport ones. */
|
|
538
|
+
scrollY: number;
|
|
539
|
+
/** Summed trimmed innerText length of every text element in scope (nested elements count their text again). */
|
|
540
|
+
textChars: number;
|
|
541
|
+
/** Elements matching the interactive selector, in scope. */
|
|
542
|
+
interactiveElements: number;
|
|
543
|
+
/** a[href] in scope. */
|
|
544
|
+
links: number;
|
|
545
|
+
/** option elements inside the selects in scope. */
|
|
546
|
+
selectOptions: number;
|
|
547
|
+
/** Elements in scope with a running CSS animation. */
|
|
548
|
+
runningAnimations: number;
|
|
549
|
+
/** [autoplay] elements in scope. */
|
|
550
|
+
autoplayElements: number;
|
|
551
|
+
/** An element whose class names a carousel, slider or swiper, anywhere in the document. */
|
|
552
|
+
carousel: boolean;
|
|
553
|
+
/** Breadcrumb links, anywhere in the document. */
|
|
554
|
+
breadcrumbLinks: number;
|
|
555
|
+
/** Distinct colours among the body and the first visual.colourSample visible elements. */
|
|
556
|
+
colours: number;
|
|
557
|
+
/** Laid-out elements in scope. */
|
|
558
|
+
visibleElements: number;
|
|
559
|
+
/** img, svg and role=img elements in scope. */
|
|
560
|
+
images: number;
|
|
561
|
+
/** The visible prose, each character once, tokenised for its script. */
|
|
562
|
+
text: RawText;
|
|
563
|
+
/**
|
|
564
|
+
* The visible prose's totals, uncapped: trimmed characters and
|
|
565
|
+
* whitespace-separated words over the outermost prose elements (the
|
|
566
|
+
* textBlocks, all of them). `textBlockCount` is their number.
|
|
567
|
+
*/
|
|
568
|
+
prose: {
|
|
569
|
+
chars: number;
|
|
570
|
+
words: number;
|
|
571
|
+
};
|
|
572
|
+
/**
|
|
573
|
+
* The part of `prose` inside a nav or ARIA composite group in scope (the
|
|
574
|
+
* groups choiceGroups counts, each choice once): menu labels, which the
|
|
575
|
+
* choosing law already reads as choices. A block a group holds counts
|
|
576
|
+
* whole; a block that holds groups (a layout td around a nav) counts their
|
|
577
|
+
* text. chars and words as `prose` counts them; letters, abjadWords and
|
|
578
|
+
* cjkChars in the reading law's units, tokenised as `text` is, so
|
|
579
|
+
* prose minus proseInNav is the prose outside every group.
|
|
580
|
+
*/
|
|
581
|
+
proseInNav: {
|
|
582
|
+
chars: number;
|
|
583
|
+
words: number;
|
|
584
|
+
letters: number;
|
|
585
|
+
abjadWords: number;
|
|
586
|
+
cjkChars: number;
|
|
587
|
+
};
|
|
588
|
+
/**
|
|
589
|
+
* The same totals as format 1 counted them: every element matching the
|
|
590
|
+
* prose selector, nested ones again (elements, characters, words). For
|
|
591
|
+
* comparison only; nothing derives from it.
|
|
592
|
+
*/
|
|
593
|
+
proseNested: {
|
|
594
|
+
elements: number;
|
|
595
|
+
chars: number;
|
|
596
|
+
words: number;
|
|
597
|
+
};
|
|
598
|
+
/** Element kinds, indexed by `boxes` and `choiceGroups`: tag, `:type` for inputs, `[role]` when set. */
|
|
599
|
+
kinds: string[];
|
|
600
|
+
/**
|
|
601
|
+
* The interactive elements in scope, five numbers each: kind index, x, y,
|
|
602
|
+
* width, height (CSS px, document coordinates, rounded). The first
|
|
603
|
+
* pageMetrics.raw.maxBoxes in document order; interactiveElements is the
|
|
604
|
+
* uncapped count.
|
|
605
|
+
*/
|
|
606
|
+
boxes: number[];
|
|
607
|
+
/**
|
|
608
|
+
* Choice groups in scope, two numbers each: kind index and size. A nav's
|
|
609
|
+
* visible links, a select's options, a named radio or checkbox group (an
|
|
610
|
+
* unnamed one is a group of one), a menu, listbox, tablist or radiogroup's
|
|
611
|
+
* visible items. The first pageMetrics.raw.maxChoiceGroups, navs first,
|
|
612
|
+
* then selects, toggles and the ARIA composites, each in document order.
|
|
613
|
+
*
|
|
614
|
+
* Each choice is in one group only: the outermost nav or composite that
|
|
615
|
+
* offers it (an item and the link inside it are one choice). A menubar
|
|
616
|
+
* inside a nav, its submenus, or a nav inside a navigation region keep only
|
|
617
|
+
* what no outer group took, and are no group when that is nothing.
|
|
618
|
+
*/
|
|
619
|
+
choiceGroups: number[];
|
|
620
|
+
/** Every group, uncapped: the length choiceGroups would have without its bound. */
|
|
621
|
+
choiceGroupCount: number;
|
|
622
|
+
/** Nav groups (nav, role=navigation) left with at least one link of their own, uncapped. */
|
|
623
|
+
navGroupCount: number;
|
|
624
|
+
/** The links those nav groups hold, each once, uncapped: the sum of every nav size, stored or not. */
|
|
625
|
+
navLinks: number;
|
|
626
|
+
/** Visible links inside any choice group (nav or composite), each once, uncapped; `links - groupedLinks` are in none. */
|
|
627
|
+
groupedLinks: number;
|
|
628
|
+
/**
|
|
629
|
+
* Of groupedLinks, those whose drawn text holds at least one letter or
|
|
630
|
+
* digit (any script: a Latin letter, an abjad word, a CJK character, a page
|
|
631
|
+
* number), uncapped. Text a sighted user does not see is left out:
|
|
632
|
+
* aria-label, title and alt, an svg title, and text hidden, transparent,
|
|
633
|
+
* sub-pixel or clipped away inside the link (a visually-hidden span).
|
|
634
|
+
* groupedLinks minus this is the icon-only grouped links.
|
|
635
|
+
*/
|
|
636
|
+
groupedLinksWithText: number;
|
|
637
|
+
/**
|
|
638
|
+
* The group totals as format 1 counted them: every nav, select, toggle and
|
|
639
|
+
* composite group with a choice, nested groups counting their choices again.
|
|
640
|
+
* For comparison only; nothing derives from it.
|
|
641
|
+
*/
|
|
642
|
+
choiceNested: {
|
|
643
|
+
groups: number;
|
|
644
|
+
items: number;
|
|
645
|
+
};
|
|
646
|
+
/**
|
|
647
|
+
* The prose elements the readability metrics read, eight numbers each:
|
|
648
|
+
* characters, whitespace-separated words, CJK characters, sentences
|
|
649
|
+
* (non-empty fragments between . ! ? and their CJK and Arabic forms), font
|
|
650
|
+
* size px, line height px (0 when `normal`), width and height px. Sizes to
|
|
651
|
+
* half a pixel, boxes rounded. The first pageMetrics.raw.maxTextBlocks.
|
|
652
|
+
*
|
|
653
|
+
* A block is an OUTERMOST prose element: one that matches the prose
|
|
654
|
+
* selector, is laid out in scope and longer than prose.lengthAbove, and has
|
|
655
|
+
* no such element above it. Its text includes everything nested inside it,
|
|
656
|
+
* so its font size and box are the outer element's. At viewport scope an
|
|
657
|
+
* outer element that is partly on screen brings all of its text, as every
|
|
658
|
+
* element-level count here does.
|
|
659
|
+
*/
|
|
660
|
+
textBlocks: number[];
|
|
661
|
+
textBlockCount: number;
|
|
662
|
+
}
|
|
663
|
+
/** The layout measurePageRaw writes, and the only one the CTC reference loads. */
|
|
664
|
+
export declare const RAW_PAGE_FORMAT = 2;
|
|
665
|
+
/**
|
|
666
|
+
* A format-1 record (2026-10-22): nested prose counted per element, the
|
|
667
|
+
* first-nav script rule, nested choice groups counted again, no prose or nav
|
|
668
|
+
* totals. deriveMetrics still derives it,
|
|
669
|
+
* exactly as it did then, so format-1 data can be compared with format 2.
|
|
670
|
+
*/
|
|
671
|
+
export type RawPageMeasurementV1 = Omit<RawPageMeasurement, "format" | "prose" | "proseNested" | "proseInNav" | "navGroupCount" | "navLinks" | "groupedLinks" | "groupedLinksWithText" | "choiceNested"> & {
|
|
672
|
+
format: 1;
|
|
673
|
+
};
|
|
674
|
+
/** The visible prose of a RawPageMeasurement, as length histograms rather than threshold counts. */
|
|
675
|
+
export interface RawText {
|
|
676
|
+
script: 'alphabetic' | 'cjk' | 'abjad';
|
|
677
|
+
/**
|
|
678
|
+
* [length, count] pairs, exact. alphabetic: every word, letters only.
|
|
679
|
+
* abjad: the words with no abjad letter. cjk: the words starting with a
|
|
680
|
+
* Latin letter, as written.
|
|
681
|
+
*/
|
|
682
|
+
wordLengths: Array<[number, number]>;
|
|
683
|
+
/** abjad only: the abjad words, [length, count] pairs, exact. */
|
|
684
|
+
abjadWordLengths: Array<[number, number]>;
|
|
685
|
+
/** cjk only: CJK characters in the prose. */
|
|
686
|
+
cjkChars: number;
|
|
687
|
+
/** cjk only: maximal runs of CJK characters, [length, count]; lengths at or above lengthBins share that bin. */
|
|
688
|
+
cjkRunLengths: Array<[number, number]>;
|
|
689
|
+
/** Distinct words (cjk: distinct CJK bigrams plus Latin words). */
|
|
690
|
+
uniqueWords: number;
|
|
691
|
+
/** The script's sentence split, [trimmed length, count]; lengths at or above lengthBins share that bin. */
|
|
692
|
+
fragmentLengths: Array<[number, number]>;
|
|
693
|
+
/** pageMetrics.raw.lengthBins when measured: a threshold must sit below it to be re-derived. */
|
|
694
|
+
lengthBins: number;
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* Measure the page: counts and geometry, no normaliser (RawPageMeasurement).
|
|
698
|
+
* The scope decides which elements count; at full_page the page is walked
|
|
699
|
+
* first so lazy content exists to be counted.
|
|
700
|
+
*/
|
|
701
|
+
export declare function measurePageRaw(page: any, scope?: MetricScope,
|
|
702
|
+
/** Geometry already measured by the caller, so both derivations share one read. */
|
|
703
|
+
geometry?: PageGeometry): Promise<RawPageMeasurement>;
|
|
704
|
+
/**
|
|
705
|
+
* Stage B's four law times for a raw page measurement, in seconds for the
|
|
706
|
+
* reference user, with what they rest on. Everything in scope, once
|
|
707
|
+
* (research/stage-b-design.md, decision 1):
|
|
708
|
+
*
|
|
709
|
+
* pointing every interactive box acquired once: Fitts, SMALLER-OF width,
|
|
710
|
+
* from the centre of the screen it is seen on; the stored boxes'
|
|
711
|
+
* sum scaled to interactiveElements when the box list is capped.
|
|
712
|
+
* choosing every choice group resolved once by novice linear search
|
|
713
|
+
* (Cockburn et al. 2007); a checkbox group is one yes/no per box;
|
|
714
|
+
* links in no group form one more set. Groups beyond the stored
|
|
715
|
+
* ones are scaled to choiceGroupCount. choosingSecondsExpert is
|
|
716
|
+
* the same groups by Hick-Hyman, the menu model's expert limit
|
|
717
|
+
* (Stage C: cognitiveLoad's demand interpolates the two by the
|
|
718
|
+
* run's siteFamiliarity, Cockburn et al.'s Eq. 4).
|
|
719
|
+
* reading the prose outside every group read once at Brysbaert's rate
|
|
720
|
+
* (letters of the alphabetic words, abjad words, CJK
|
|
721
|
+
* characters; format 2 counts each character once), plus a
|
|
722
|
+
* first read per menu label: law.reading.labelFirstRead per
|
|
723
|
+
* grouped link with visible text (an icon-only link has nothing
|
|
724
|
+
* to read), which the novice search above leaves out
|
|
725
|
+
* (Cockburn et al. fitted it without that one-off cost). Format
|
|
726
|
+
* 1 has no in-group prose, so it reads all of its prose and
|
|
727
|
+
* charges no label.
|
|
728
|
+
* procedure KLM's M per entry step: an entry field (ENTRY_INPUT_TYPES,
|
|
729
|
+
* textarea, select) or a radio or checkbox group.
|
|
730
|
+
*/
|
|
731
|
+
export declare function lawSecondsOf(raw: RawPageMeasurement | RawPageMeasurementV1): Pick<ExtractedPageMetrics, "pointingSeconds" | "choosingSeconds" | "choosingSecondsExpert" | "readingSeconds" | "procedureSeconds" | "lawDiagnostics">;
|
|
732
|
+
export declare function deriveMetrics(raw: RawPageMeasurement | RawPageMeasurementV1): ExtractedPageMetrics;
|
|
733
|
+
/**
|
|
734
|
+
* Page metrics of a live page: measurePageRaw, then deriveMetrics. Callers
|
|
735
|
+
* that keep the measurement (the CTC reference crawl) call the two halves.
|
|
736
|
+
*/
|
|
737
|
+
export declare function extractPageMetrics(page: any, scope?: MetricScope,
|
|
738
|
+
/** Geometry already measured by the caller, so both derivations share one read. */
|
|
739
|
+
geometry?: PageGeometry): Promise<ExtractedPageMetrics>;
|
|
308
740
|
/**
|
|
309
741
|
* Compute the full pairwise distance matrix between personas.
|
|
310
|
-
* Returns a symmetric matrix where entry [i][j] =
|
|
742
|
+
* Returns a symmetric matrix where entry [i][j] = cognitiveDistance(persona_i,
|
|
743
|
+
* persona_j).w1, the generalized W₁ (shape and level; see cognitiveDistance).
|
|
311
744
|
*/
|
|
312
745
|
export declare function cognitiveDistanceMatrix(profiles: OTCognitiveProfile[]): {
|
|
313
746
|
matrix: number[][];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cognitive-transport.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"cognitive-transport.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-transport.ts"],"names":[],"mappings":"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"}
|