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.
Files changed (302) hide show
  1. package/README.md +2 -2
  2. package/dist/analysis/accessibility-empathy.d.ts +29 -1
  3. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  4. package/dist/analysis/accessibility-empathy.js +69 -35
  5. package/dist/analysis/accessibility-empathy.js.map +1 -1
  6. package/dist/browser.d.ts.map +1 -1
  7. package/dist/browser.js +11 -7
  8. package/dist/browser.js.map +1 -1
  9. package/dist/cif-score.d.ts +56 -5
  10. package/dist/cif-score.d.ts.map +1 -1
  11. package/dist/cif-score.js +595 -346
  12. package/dist/cif-score.js.map +1 -1
  13. package/dist/cli.js +10 -8
  14. package/dist/cli.js.map +1 -1
  15. package/dist/cognitive/default-traits.d.ts +14 -0
  16. package/dist/cognitive/default-traits.d.ts.map +1 -0
  17. package/dist/cognitive/default-traits.js +36 -0
  18. package/dist/cognitive/default-traits.js.map +1 -0
  19. package/dist/cognitive/emotions.d.ts.map +1 -1
  20. package/dist/cognitive/emotions.js +104 -174
  21. package/dist/cognitive/emotions.js.map +1 -1
  22. package/dist/cognitive/index.d.ts +28 -0
  23. package/dist/cognitive/index.d.ts.map +1 -1
  24. package/dist/cognitive/index.js +353 -287
  25. package/dist/cognitive/index.js.map +1 -1
  26. package/dist/cognitive/temporal.d.ts +0 -24
  27. package/dist/cognitive/temporal.d.ts.map +1 -1
  28. package/dist/cognitive/temporal.js +45 -35
  29. package/dist/cognitive/temporal.js.map +1 -1
  30. package/dist/data/ctc-reference-v2-2026-10-24.d.ts +16 -0
  31. package/dist/data/ctc-reference-v2-2026-10-24.d.ts.map +1 -0
  32. package/dist/data/ctc-reference-v2-2026-10-24.js +1004 -0
  33. package/dist/data/ctc-reference-v2-2026-10-24.js.map +1 -0
  34. package/dist/ideal-profiles-gap.d.ts +1 -0
  35. package/dist/ideal-profiles-gap.d.ts.map +1 -1
  36. package/dist/ideal-profiles-gap.js +9 -1
  37. package/dist/ideal-profiles-gap.js.map +1 -1
  38. package/dist/ideal-profiles.d.ts +8 -0
  39. package/dist/ideal-profiles.d.ts.map +1 -1
  40. package/dist/ideal-profiles.js +28 -24
  41. package/dist/ideal-profiles.js.map +1 -1
  42. package/dist/mcp-server-remote.d.ts.map +1 -1
  43. package/dist/mcp-server-remote.js +7 -8
  44. package/dist/mcp-server-remote.js.map +1 -1
  45. package/dist/mcp-tools/account-personas.d.ts.map +1 -1
  46. package/dist/mcp-tools/account-personas.js +3 -1
  47. package/dist/mcp-tools/account-personas.js.map +1 -1
  48. package/dist/mcp-tools/base/answer-provenance.d.ts +28 -0
  49. package/dist/mcp-tools/base/answer-provenance.d.ts.map +1 -0
  50. package/dist/mcp-tools/base/answer-provenance.js +32 -0
  51. package/dist/mcp-tools/base/answer-provenance.js.map +1 -0
  52. package/dist/mcp-tools/base/audit-tools.d.ts +0 -3
  53. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  54. package/dist/mcp-tools/base/audit-tools.js +152 -84
  55. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  56. package/dist/mcp-tools/base/capture-tools.js +1 -1
  57. package/dist/mcp-tools/base/capture-tools.js.map +1 -1
  58. package/dist/mcp-tools/base/chain-values.d.ts +38 -0
  59. package/dist/mcp-tools/base/chain-values.d.ts.map +1 -0
  60. package/dist/mcp-tools/base/chain-values.js +85 -0
  61. package/dist/mcp-tools/base/chain-values.js.map +1 -0
  62. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
  63. package/dist/mcp-tools/base/cognitive-tools.js +126 -120
  64. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
  65. package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
  66. package/dist/mcp-tools/base/gif-tools.js +23 -5
  67. package/dist/mcp-tools/base/gif-tools.js.map +1 -1
  68. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
  69. package/dist/mcp-tools/base/persona-comparison-tools.js +229 -172
  70. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
  71. package/dist/mcp-tools/base/site-familiarity.d.ts +31 -0
  72. package/dist/mcp-tools/base/site-familiarity.d.ts.map +1 -0
  73. package/dist/mcp-tools/base/site-familiarity.js +30 -0
  74. package/dist/mcp-tools/base/site-familiarity.js.map +1 -0
  75. package/dist/mcp-tools/base/site-knowledge-tools.js +1 -1
  76. package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
  77. package/dist/mcp-tools/base/story-narrative.d.ts +50 -0
  78. package/dist/mcp-tools/base/story-narrative.d.ts.map +1 -0
  79. package/dist/mcp-tools/base/story-narrative.js +88 -0
  80. package/dist/mcp-tools/base/story-narrative.js.map +1 -0
  81. package/dist/mcp-tools/base/values-tools.d.ts.map +1 -1
  82. package/dist/mcp-tools/base/values-tools.js +19 -5
  83. package/dist/mcp-tools/base/values-tools.js.map +1 -1
  84. package/dist/mcp-tools/base/visual-testing-tools.d.ts +5 -5
  85. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  86. package/dist/mcp-tools/base/visual-testing-tools.js +38 -11
  87. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  88. package/dist/mcp-tools/persona-creation-tools.js +6 -6
  89. package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
  90. package/dist/mcp-tools/persona-lifecycle-tools.d.ts.map +1 -1
  91. package/dist/mcp-tools/persona-lifecycle-tools.js +5 -1
  92. package/dist/mcp-tools/persona-lifecycle-tools.js.map +1 -1
  93. package/dist/mcp-tools/tier-gate.js +1 -1
  94. package/dist/mcp-tools/tool-result-saver.d.ts +7 -0
  95. package/dist/mcp-tools/tool-result-saver.d.ts.map +1 -1
  96. package/dist/mcp-tools/tool-result-saver.js +11 -0
  97. package/dist/mcp-tools/tool-result-saver.js.map +1 -1
  98. package/dist/mcp-tools/trait-provenance.d.ts +109 -0
  99. package/dist/mcp-tools/trait-provenance.d.ts.map +1 -0
  100. package/dist/mcp-tools/trait-provenance.js +187 -0
  101. package/dist/mcp-tools/trait-provenance.js.map +1 -0
  102. package/dist/mcp-tools/ui-resources.d.ts +6 -7
  103. package/dist/mcp-tools/ui-resources.d.ts.map +1 -1
  104. package/dist/mcp-tools/ui-resources.js +162 -12
  105. package/dist/mcp-tools/ui-resources.js.map +1 -1
  106. package/dist/mcp-tools/widget-kit.d.ts +129 -3
  107. package/dist/mcp-tools/widget-kit.d.ts.map +1 -1
  108. package/dist/mcp-tools/widget-kit.js +507 -28
  109. package/dist/mcp-tools/widget-kit.js.map +1 -1
  110. package/dist/performance/metrics.d.ts.map +1 -1
  111. package/dist/performance/metrics.js +4 -1
  112. package/dist/performance/metrics.js.map +1 -1
  113. package/dist/persona-questionnaire.js +1 -1
  114. package/dist/persona-questionnaire.js.map +1 -1
  115. package/dist/personas.d.ts.map +1 -1
  116. package/dist/personas.js +133 -82
  117. package/dist/personas.js.map +1 -1
  118. package/dist/recording/engine.d.ts.map +1 -1
  119. package/dist/recording/engine.js +5 -2
  120. package/dist/recording/engine.js.map +1 -1
  121. package/dist/recording/saliency-overlay.d.ts +8 -3
  122. package/dist/recording/saliency-overlay.d.ts.map +1 -1
  123. package/dist/recording/saliency-overlay.js +14 -5
  124. package/dist/recording/saliency-overlay.js.map +1 -1
  125. package/dist/recording/types.js +1 -1
  126. package/dist/testing/nl-test-suite.d.ts.map +1 -1
  127. package/dist/testing/nl-test-suite.js +2 -1
  128. package/dist/testing/nl-test-suite.js.map +1 -1
  129. package/dist/trait-reference.d.ts +19 -2
  130. package/dist/trait-reference.d.ts.map +1 -1
  131. package/dist/trait-reference.js +19 -2
  132. package/dist/trait-reference.js.map +1 -1
  133. package/dist/types.d.ts +32 -21
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +62 -52
  136. package/dist/types.js.map +1 -1
  137. package/dist/values/persona-completeness.js +1 -1
  138. package/dist/values/persona-completeness.js.map +1 -1
  139. package/dist/visual/ab-comparison.d.ts.map +1 -1
  140. package/dist/visual/ab-comparison.js +4 -1
  141. package/dist/visual/ab-comparison.js.map +1 -1
  142. package/dist/visual/attention-quality.d.ts +1 -1
  143. package/dist/visual/attention-quality.js +1 -1
  144. package/dist/visual/attention-transport.d.ts +74 -10
  145. package/dist/visual/attention-transport.d.ts.map +1 -1
  146. package/dist/visual/attention-transport.js +353 -193
  147. package/dist/visual/attention-transport.js.map +1 -1
  148. package/dist/visual/cognitive-models.d.ts +77 -55
  149. package/dist/visual/cognitive-models.d.ts.map +1 -1
  150. package/dist/visual/cognitive-models.js +231 -104
  151. package/dist/visual/cognitive-models.js.map +1 -1
  152. package/dist/visual/cognitive-transport-chain.d.ts +328 -30
  153. package/dist/visual/cognitive-transport-chain.d.ts.map +1 -1
  154. package/dist/visual/cognitive-transport-chain.js +576 -353
  155. package/dist/visual/cognitive-transport-chain.js.map +1 -1
  156. package/dist/visual/cognitive-transport.d.ts +446 -13
  157. package/dist/visual/cognitive-transport.d.ts.map +1 -1
  158. package/dist/visual/cognitive-transport.js +1085 -245
  159. package/dist/visual/cognitive-transport.js.map +1 -1
  160. package/dist/visual/cross-browser.d.ts.map +1 -1
  161. package/dist/visual/cross-browser.js +8 -6
  162. package/dist/visual/cross-browser.js.map +1 -1
  163. package/dist/visual/ctc-bands.d.ts +91 -0
  164. package/dist/visual/ctc-bands.d.ts.map +1 -0
  165. package/dist/visual/ctc-bands.js +117 -0
  166. package/dist/visual/ctc-bands.js.map +1 -0
  167. package/dist/visual/ctc-reference.d.ts +287 -0
  168. package/dist/visual/ctc-reference.d.ts.map +1 -0
  169. package/dist/visual/ctc-reference.js +376 -0
  170. package/dist/visual/ctc-reference.js.map +1 -0
  171. package/dist/visual/demand-laws.d.ts +145 -0
  172. package/dist/visual/demand-laws.d.ts.map +1 -0
  173. package/dist/visual/demand-laws.js +220 -0
  174. package/dist/visual/demand-laws.js.map +1 -0
  175. package/dist/visual/distance-metrics.d.ts +23 -1
  176. package/dist/visual/distance-metrics.d.ts.map +1 -1
  177. package/dist/visual/distance-metrics.js +49 -18
  178. package/dist/visual/distance-metrics.js.map +1 -1
  179. package/dist/visual/dro-bound.d.ts +220 -0
  180. package/dist/visual/dro-bound.d.ts.map +1 -0
  181. package/dist/visual/dro-bound.js +341 -0
  182. package/dist/visual/dro-bound.js.map +1 -0
  183. package/dist/visual/exact-w1.d.ts +60 -0
  184. package/dist/visual/exact-w1.d.ts.map +1 -0
  185. package/dist/visual/exact-w1.js +247 -0
  186. package/dist/visual/exact-w1.js.map +1 -0
  187. package/dist/visual/human-input.d.ts.map +1 -1
  188. package/dist/visual/human-input.js +45 -41
  189. package/dist/visual/human-input.js.map +1 -1
  190. package/dist/visual/index.d.ts +2 -0
  191. package/dist/visual/index.d.ts.map +1 -1
  192. package/dist/visual/index.js +2 -0
  193. package/dist/visual/index.js.map +1 -1
  194. package/dist/visual/law-times-report.d.ts +49 -0
  195. package/dist/visual/law-times-report.d.ts.map +1 -0
  196. package/dist/visual/law-times-report.js +38 -0
  197. package/dist/visual/law-times-report.js.map +1 -0
  198. package/dist/visual/model-provenance.d.ts +151 -0
  199. package/dist/visual/model-provenance.d.ts.map +1 -0
  200. package/dist/visual/model-provenance.js +334 -0
  201. package/dist/visual/model-provenance.js.map +1 -0
  202. package/dist/visual/normal-cdf.d.ts +14 -0
  203. package/dist/visual/normal-cdf.d.ts.map +1 -0
  204. package/dist/visual/normal-cdf.js +26 -0
  205. package/dist/visual/normal-cdf.js.map +1 -0
  206. package/dist/visual/perceptual-transport.d.ts +28 -4
  207. package/dist/visual/perceptual-transport.d.ts.map +1 -1
  208. package/dist/visual/perceptual-transport.js +66 -32
  209. package/dist/visual/perceptual-transport.js.map +1 -1
  210. package/dist/visual/provenance/attention.d.ts +55 -0
  211. package/dist/visual/provenance/attention.d.ts.map +1 -0
  212. package/dist/visual/provenance/attention.js +188 -0
  213. package/dist/visual/provenance/attention.js.map +1 -0
  214. package/dist/visual/provenance/chain.d.ts +41 -0
  215. package/dist/visual/provenance/chain.d.ts.map +1 -0
  216. package/dist/visual/provenance/chain.js +66 -0
  217. package/dist/visual/provenance/chain.js.map +1 -0
  218. package/dist/visual/provenance/cif.d.ts +42 -0
  219. package/dist/visual/provenance/cif.d.ts.map +1 -0
  220. package/dist/visual/provenance/cif.js +116 -0
  221. package/dist/visual/provenance/cif.js.map +1 -0
  222. package/dist/visual/provenance/ctc-reference.d.ts +36 -0
  223. package/dist/visual/provenance/ctc-reference.d.ts.map +1 -0
  224. package/dist/visual/provenance/ctc-reference.js +96 -0
  225. package/dist/visual/provenance/ctc-reference.js.map +1 -0
  226. package/dist/visual/provenance/distance.d.ts +10 -0
  227. package/dist/visual/provenance/distance.d.ts.map +1 -0
  228. package/dist/visual/provenance/distance.js +72 -0
  229. package/dist/visual/provenance/distance.js.map +1 -0
  230. package/dist/visual/provenance/dro.d.ts +10 -0
  231. package/dist/visual/provenance/dro.d.ts.map +1 -0
  232. package/dist/visual/provenance/dro.js +2 -0
  233. package/dist/visual/provenance/dro.js.map +1 -0
  234. package/dist/visual/provenance/emotion.d.ts +26 -0
  235. package/dist/visual/provenance/emotion.d.ts.map +1 -0
  236. package/dist/visual/provenance/emotion.js +99 -0
  237. package/dist/visual/provenance/emotion.js.map +1 -0
  238. package/dist/visual/provenance/human-input.d.ts +19 -0
  239. package/dist/visual/provenance/human-input.d.ts.map +1 -0
  240. package/dist/visual/provenance/human-input.js +84 -0
  241. package/dist/visual/provenance/human-input.js.map +1 -0
  242. package/dist/visual/provenance/journey-group.d.ts +15 -0
  243. package/dist/visual/provenance/journey-group.d.ts.map +1 -0
  244. package/dist/visual/provenance/journey-group.js +15 -0
  245. package/dist/visual/provenance/journey-group.js.map +1 -0
  246. package/dist/visual/provenance/journey-mcp.d.ts +24 -0
  247. package/dist/visual/provenance/journey-mcp.d.ts.map +1 -0
  248. package/dist/visual/provenance/journey-mcp.js +54 -0
  249. package/dist/visual/provenance/journey-mcp.js.map +1 -0
  250. package/dist/visual/provenance/journey.d.ts +34 -0
  251. package/dist/visual/provenance/journey.d.ts.map +1 -0
  252. package/dist/visual/provenance/journey.js +184 -0
  253. package/dist/visual/provenance/journey.js.map +1 -0
  254. package/dist/visual/provenance/laws.d.ts +38 -0
  255. package/dist/visual/provenance/laws.d.ts.map +1 -0
  256. package/dist/visual/provenance/laws.js +40 -0
  257. package/dist/visual/provenance/laws.js.map +1 -0
  258. package/dist/visual/provenance/page-metrics.d.ts +42 -0
  259. package/dist/visual/provenance/page-metrics.d.ts.map +1 -0
  260. package/dist/visual/provenance/page-metrics.js +79 -0
  261. package/dist/visual/provenance/page-metrics.js.map +1 -0
  262. package/dist/visual/provenance/perceptual.d.ts +63 -0
  263. package/dist/visual/provenance/perceptual.d.ts.map +1 -0
  264. package/dist/visual/provenance/perceptual.js +115 -0
  265. package/dist/visual/provenance/perceptual.js.map +1 -0
  266. package/dist/visual/provenance/persona-rates.d.ts +84 -0
  267. package/dist/visual/provenance/persona-rates.d.ts.map +1 -0
  268. package/dist/visual/provenance/persona-rates.js +112 -0
  269. package/dist/visual/provenance/persona-rates.js.map +1 -0
  270. package/dist/visual/provenance/personas.d.ts +122 -0
  271. package/dist/visual/provenance/personas.d.ts.map +1 -0
  272. package/dist/visual/provenance/personas.js +298 -0
  273. package/dist/visual/provenance/personas.js.map +1 -0
  274. package/dist/visual/provenance/profiles.d.ts +39 -0
  275. package/dist/visual/provenance/profiles.d.ts.map +1 -0
  276. package/dist/visual/provenance/profiles.js +37 -0
  277. package/dist/visual/provenance/profiles.js.map +1 -0
  278. package/dist/visual/provenance/temporal.d.ts +21 -0
  279. package/dist/visual/provenance/temporal.d.ts.map +1 -0
  280. package/dist/visual/provenance/temporal.js +56 -0
  281. package/dist/visual/provenance/temporal.js.map +1 -0
  282. package/dist/visual/provenance/visual-distance.d.ts +22 -0
  283. package/dist/visual/provenance/visual-distance.d.ts.map +1 -0
  284. package/dist/visual/provenance/visual-distance.js +30 -0
  285. package/dist/visual/provenance/visual-distance.js.map +1 -0
  286. package/dist/visual/regression.d.ts.map +1 -1
  287. package/dist/visual/regression.js +14 -9
  288. package/dist/visual/regression.js.map +1 -1
  289. package/dist/visual/responsive.d.ts.map +1 -1
  290. package/dist/visual/responsive.js +4 -1
  291. package/dist/visual/responsive.js.map +1 -1
  292. package/dist/visual/scope-prose.js +2 -2
  293. package/dist/visual/scope-prose.js.map +1 -1
  294. package/dist/visual/seeded-random.d.ts +16 -0
  295. package/dist/visual/seeded-random.d.ts.map +1 -0
  296. package/dist/visual/seeded-random.js +25 -0
  297. package/dist/visual/seeded-random.js.map +1 -0
  298. package/dist/visual/stored-accessibility-traits.d.ts +27 -0
  299. package/dist/visual/stored-accessibility-traits.d.ts.map +1 -0
  300. package/dist/visual/stored-accessibility-traits.js +35 -0
  301. package/dist/visual/stored-accessibility-traits.js.map +1 -0
  302. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-w1.d.ts","sourceRoot":"","sources":["../../src/visual/exact-w1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AASH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,yFAAyF;IACzF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,eAAe,CA+IvH"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Exact Wasserstein-1 (earth mover's) distance between two discrete
3
+ * distributions over the same n points, under an arbitrary non-negative cost
4
+ * matrix.
5
+ *
6
+ * Solves the transportation problem
7
+ *
8
+ * min sum_ij C[i][j] * P[i][j]
9
+ * s.t. sum_j P[i][j] = a[i], sum_i P[i][j] = b[j], P >= 0
10
+ *
11
+ * as a min-cost flow on the bipartite graph source -> i -> j -> sink with
12
+ * successive shortest paths (Dijkstra with Johnson potentials, so reverse edges
13
+ * with negative reduced cost never break the search). Every augmentation ships
14
+ * the bottleneck mass along a shortest source-to-sink path in the residual
15
+ * graph; the plan it leaves behind is optimal by the standard SSP argument
16
+ * (each augmentation is along a shortest path, so no negative cycle is ever
17
+ * created in the residual graph).
18
+ *
19
+ * Complexity: one Dijkstra is O(V^2) on this dense graph, V = 2n + 2. The number
20
+ * of augmentations K is bounded by the number of edges whose residual capacity
21
+ * can be exhausted (each augmentation saturates a supply edge, a demand edge or
22
+ * cancels a reverse edge), so the total is O(K * n^2) with K = O(n^2) in the
23
+ * worst case. cognitiveDistance now calls it on 30 points (29 traits plus the
24
+ * slack bin of the generalized distance). Measured across all 300 roster pairs
25
+ * in the canonical order cognitiveDistance uses (2026-10-21, after the end-node
26
+ * fix below): K = 41 min, 51 median, 57 max on the 30-point problem (the
27
+ * 29-point simplex problem it replaced: 48 / 57 / 57; 54 / 72 / 161 with the
28
+ * old end-node rule), i.e. roughly 1.5n to 2n, and a 25 x 25 distance matrix
29
+ * takes ~62 ms median (research/latency/bench-ctc.ts; ~73 ms before).
30
+ * Mass is floating point, so "saturated" means residual <= EPS and the loop
31
+ * stops once every supply point or every demand point is at or below EPS.
32
+ *
33
+ * `cognitiveDistance` used to call its result "W1" while computing a weighted
34
+ * L1 sum (|a_i - b_i| times the mean ground distance of trait i), which is not
35
+ * optimal transport and does not respect the ground metric. This module is the
36
+ * exact replacement. Its oracle test (tests/cognitive-distance-w1.test.ts)
37
+ * checks it against an independent dense two-phase simplex on the same LP, and,
38
+ * with a slack bin, against the Piccoli-Rossi unbalanced LP it stands in for.
39
+ *
40
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
41
+ * @license MIT
42
+ */
43
+ /**
44
+ * Mass below this is treated as zero. Atoms can be smaller than this (the
45
+ * generalized persona measure has no floor), so termination is decided per
46
+ * point, not on the total; see the main loop.
47
+ */
48
+ const EPS = 1e-12;
49
+ /**
50
+ * Exact W1 between distributions `a` and `b` (same length n, both summing to
51
+ * the same total up to EPS) under cost matrix `cost` (n x n, non-negative).
52
+ *
53
+ * Throws if the shapes disagree or the masses differ by more than 1e-9: unequal
54
+ * mass is an unbalanced problem and W1 is undefined for it. (cognitiveDistance
55
+ * balances its measures first with a slack bin; see traitsToLevelMeasure.)
56
+ */
57
+ export function exactW1(a, b, cost) {
58
+ const n = a.length;
59
+ if (b.length !== n || cost.length !== n)
60
+ throw new Error(`exactW1: shape mismatch (a=${n}, b=${b.length}, cost=${cost.length})`);
61
+ let massA = 0, massB = 0;
62
+ for (let i = 0; i < n; i++) {
63
+ if (!(a[i] >= 0) || !(b[i] >= 0))
64
+ throw new Error(`exactW1: negative or NaN mass at index ${i}`);
65
+ massA += a[i];
66
+ massB += b[i];
67
+ }
68
+ if (Math.abs(massA - massB) > 1e-9)
69
+ throw new Error(`exactW1: unbalanced masses (${massA} vs ${massB})`);
70
+ // Residual state. Supply edges source->i carry `supply[i]` remaining; demand
71
+ // edges j->sink carry `demand[j]` remaining. Middle edges i->j have infinite
72
+ // forward capacity, and their reverse edge j->i has capacity plan[i][j].
73
+ const supply = new Float64Array(n);
74
+ const demand = new Float64Array(n);
75
+ for (let i = 0; i < n; i++) {
76
+ supply[i] = a[i];
77
+ demand[i] = b[i];
78
+ }
79
+ const plan = Array.from({ length: n }, () => new Array(n).fill(0));
80
+ // Johnson potentials for the 2n inner nodes: left (supply side) and right
81
+ // (demand side). All original costs are non-negative, so zero potentials are
82
+ // valid initially; after each Dijkstra they are updated with the distances so
83
+ // reduced costs stay non-negative.
84
+ const potL = new Float64Array(n);
85
+ const potR = new Float64Array(n);
86
+ const distL = new Float64Array(n);
87
+ const distR = new Float64Array(n);
88
+ const doneL = new Uint8Array(n);
89
+ const doneR = new Uint8Array(n);
90
+ // Predecessors: for a left node, the right node we came from (-1 = source);
91
+ // for a right node, the left node we came from.
92
+ const prevL = new Int32Array(n);
93
+ const prevR = new Int32Array(n);
94
+ let remaining = massA;
95
+ let total = 0;
96
+ let augmentations = 0;
97
+ for (;;) {
98
+ // Done once either side has nothing above EPS left at any point. The loop
99
+ // used to run while the TOTAL unshipped supply exceeded EPS, which threw
100
+ // "no augmenting path" when several atoms each below EPS added up to more
101
+ // than EPS: every one of them is treated as zero, so nothing could ship.
102
+ // Unreachable while cognitiveDistance floored every trait to 0.01; reachable
103
+ // on the generalized measure, which has no floor (fast-check found trait
104
+ // values of 1e-11 and 6e-12, 2026-10-21). What is left on the other side
105
+ // is at most the 1e-9 imbalance the entry check allows plus one sub-EPS
106
+ // crumb per point, and it changes the cost by less than that mass times the
107
+ // largest cost.
108
+ let open = false, need = false;
109
+ for (let i = 0; i < n; i++) {
110
+ if (supply[i] > EPS)
111
+ open = true;
112
+ if (demand[i] > EPS)
113
+ need = true;
114
+ }
115
+ if (!open || !need)
116
+ break;
117
+ // Dijkstra over the residual graph with reduced costs.
118
+ distL.fill(Infinity);
119
+ distR.fill(Infinity);
120
+ doneL.fill(0);
121
+ doneR.fill(0);
122
+ prevL.fill(-1);
123
+ prevR.fill(-1);
124
+ for (let i = 0; i < n; i++)
125
+ if (supply[i] > EPS)
126
+ distL[i] = 0; // source -> i, cost 0, potential 0 at source
127
+ for (;;) {
128
+ // Pick the unsettled node with the smallest tentative distance (dense O(V) scan).
129
+ let best = Infinity, side = -1, idx = -1;
130
+ for (let i = 0; i < n; i++)
131
+ if (!doneL[i] && distL[i] < best) {
132
+ best = distL[i];
133
+ side = 0;
134
+ idx = i;
135
+ }
136
+ for (let j = 0; j < n; j++)
137
+ if (!doneR[j] && distR[j] < best) {
138
+ best = distR[j];
139
+ side = 1;
140
+ idx = j;
141
+ }
142
+ if (idx < 0)
143
+ break;
144
+ if (side === 0) {
145
+ doneL[idx] = 1;
146
+ const costRow = cost[idx];
147
+ // Forward edges idx -> j (infinite capacity).
148
+ for (let j = 0; j < n; j++) {
149
+ if (doneR[j])
150
+ continue;
151
+ const nd = best + costRow[j] + potL[idx] - potR[j];
152
+ if (nd < distR[j] - EPS) {
153
+ distR[j] = nd;
154
+ prevR[j] = idx;
155
+ }
156
+ }
157
+ }
158
+ else {
159
+ doneR[idx] = 1;
160
+ // Reverse edges idx -> i exist where plan[i][idx] > EPS, with cost -C[i][idx].
161
+ for (let i = 0; i < n; i++) {
162
+ if (doneL[i] || plan[i][idx] <= EPS)
163
+ continue;
164
+ const nd = best - cost[i][idx] + potR[idx] - potL[i];
165
+ if (nd < distL[i] - EPS) {
166
+ distL[i] = nd;
167
+ prevL[i] = idx;
168
+ }
169
+ }
170
+ }
171
+ }
172
+ // Cheapest reachable demand node with remaining capacity ends the path.
173
+ // "Cheapest" by TRUE distance, distR[j] + potR[j]: distR is reduced by j's
174
+ // own potential, which differs per j after the first round. This used to
175
+ // compare distR alone. That still ends at an optimal plan when every demand
176
+ // is filled (no residual sink arc is left to form a cycle through), but
177
+ // once the loop may stop with mass left over, the end chosen here decides
178
+ // which demand goes unfilled, and the reduced comparison picked a dearer
179
+ // flow (measured 2026-10-21: 1e-11 above the true min-cost flow on an
180
+ // 11-point line with a 3.7e-11 shortfall).
181
+ let endJ = -1, endD = Infinity;
182
+ for (let j = 0; j < n; j++) {
183
+ if (demand[j] <= EPS)
184
+ continue;
185
+ const d = distR[j] + potR[j];
186
+ if (d < endD) {
187
+ endD = d;
188
+ endJ = j;
189
+ }
190
+ }
191
+ if (endJ < 0)
192
+ throw new Error(`exactW1: no augmenting path with ${remaining} mass unshipped (masses unbalanced beyond tolerance?)`);
193
+ // Walk the path back to find the bottleneck, then ship it.
194
+ let bottleneck = demand[endJ];
195
+ {
196
+ let j = endJ;
197
+ for (;;) {
198
+ const i = prevR[j];
199
+ const back = prevL[i];
200
+ if (back < 0) {
201
+ bottleneck = Math.min(bottleneck, supply[i]);
202
+ break;
203
+ }
204
+ bottleneck = Math.min(bottleneck, plan[i][back]);
205
+ j = back;
206
+ }
207
+ }
208
+ {
209
+ let j = endJ;
210
+ for (;;) {
211
+ const i = prevR[j];
212
+ plan[i][j] += bottleneck;
213
+ total += bottleneck * cost[i][j];
214
+ const back = prevL[i];
215
+ if (back < 0) {
216
+ supply[i] -= bottleneck;
217
+ break;
218
+ }
219
+ plan[i][back] -= bottleneck;
220
+ total -= bottleneck * cost[i][back];
221
+ if (plan[i][back] < EPS)
222
+ plan[i][back] = 0;
223
+ j = back;
224
+ }
225
+ demand[endJ] -= bottleneck;
226
+ }
227
+ remaining -= bottleneck;
228
+ augmentations++;
229
+ // Update potentials with the distances found (unreached nodes keep theirs).
230
+ for (let i = 0; i < n; i++)
231
+ if (distL[i] < Infinity)
232
+ potL[i] += distL[i];
233
+ for (let j = 0; j < n; j++)
234
+ if (distR[j] < Infinity)
235
+ potR[j] += distR[j];
236
+ }
237
+ // Recompute the cost from the final plan so accumulated add/subtract rounding
238
+ // in `total` cannot drift the reported number.
239
+ let exact = 0;
240
+ for (let i = 0; i < n; i++)
241
+ for (let j = 0; j < n; j++)
242
+ if (plan[i][j] > 0)
243
+ exact += plan[i][j] * cost[i][j];
244
+ void total;
245
+ return { cost: exact, plan, augmentations };
246
+ }
247
+ //# sourceMappingURL=exact-w1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-w1.js","sourceRoot":"","sources":["../../src/visual/exact-w1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH;;;;GAIG;AACH,MAAM,GAAG,GAAG,KAAK,CAAC;AAWlB;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,CAAoB,EAAE,CAAoB,EAAE,IAAkC;IACpG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,MAAM,UAAU,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACjI,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,EAAE,CAAC,CAAC;QACjG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,OAAO,KAAK,GAAG,CAAC,CAAC;IAEzG,6EAA6E;IAC7E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACnE,MAAM,IAAI,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvF,0EAA0E;IAC1E,6EAA6E;IAC7E,8EAA8E;IAC9E,mCAAmC;IACnC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,4EAA4E;IAC5E,gDAAgD;IAChD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEhC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,SAAS,CAAC;QACR,0EAA0E;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,yEAAyE;QACzE,6EAA6E;QAC7E,yEAAyE;QACzE,yEAAyE;QACzE,wEAAwE;QACxE,4EAA4E;QAC5E,gBAAgB;QAChB,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;gBAAE,IAAI,GAAG,IAAI,CAAC;YAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;gBAAE,IAAI,GAAG,IAAI,CAAC;QAAC,CAAC;QACnG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM;QAE1B,uDAAuD;QACvD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;gBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;QAE5G,SAAS,CAAC;YACR,kFAAkF;YAClF,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;oBAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAC,IAAI,GAAG,CAAC,CAAC;oBAAC,GAAG,GAAG,CAAC,CAAC;gBAAC,CAAC;YACrG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;oBAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAC,IAAI,GAAG,CAAC,CAAC;oBAAC,GAAG,GAAG,CAAC,CAAC;gBAAC,CAAC;YACrG,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM;YACnB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,8CAA8C;gBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,IAAI,KAAK,CAAC,CAAC,CAAC;wBAAE,SAAS;oBACvB,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;wBAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;oBAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACf,+EAA+E;gBAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;wBAAE,SAAS;oBAC9C,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;wBAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;oBAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,2EAA2E;QAC3E,yEAAyE;QACzE,4EAA4E;QAC5E,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,sEAAsE;QACtE,2CAA2C;QAC3C,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;gBAAE,SAAS;YAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,CAAC,CAAC;gBAAC,IAAI,GAAG,CAAC,CAAC;YAAC,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,uDAAuD,CAAC,CAAC;QAEpI,2DAA2D;QAC3D,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;YACC,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACtE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjD,CAAC,GAAG,IAAI,CAAC;YACX,CAAC;QACH,CAAC;QACD,CAAC;YACC,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;gBACzB,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACjD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;gBAC5B,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC,GAAG,IAAI,CAAC;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;QAC7B,CAAC;QACD,SAAS,IAAI,UAAU,CAAC;QACxB,aAAa,EAAE,CAAC;QAEhB,4EAA4E;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ;gBAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ;gBAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,8EAA8E;IAC9E,+CAA+C;IAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,KAAK,KAAK,CAAC;IACX,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"human-input.d.ts","sourceRoot":"","sources":["../../src/visual/human-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkDD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,WAAW,CAAC,EAAE,WAAW,EACzB,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CnC;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1E"}
1
+ {"version":3,"file":"human-input.d.ts","sourceRoot":"","sources":["../../src/visual/human-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAQvC;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4CD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,WAAW,CAAC,EAAE,WAAW,EACzB,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CnC;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1E"}
@@ -1,14 +1,14 @@
1
- const TRAIT_DEFAULT = {
2
- proceduralFluency: 0.5,
3
- motorPrecision: 0.7,
4
- patience: 0.5,
5
- readingTendency: 0.5,
6
- };
1
+ import { param } from "./model-provenance.js";
2
+ // Every duration, probability and distance below is registered, with where
3
+ // it comes from, in provenance/human-input.ts (humanInput.*) and read through
4
+ // param(). None is fitted or published.
5
+ const P = (id) => param(`humanInput.${id}`);
6
+ /** A trait the caller does not give: the journey's default, or for motor precision its own. */
7
7
  const traits = (t) => ({
8
- proceduralFluency: t?.proceduralFluency ?? TRAIT_DEFAULT.proceduralFluency,
9
- motorPrecision: t?.motorPrecision ?? TRAIT_DEFAULT.motorPrecision,
10
- patience: t?.patience ?? TRAIT_DEFAULT.patience,
11
- readingTendency: t?.readingTendency ?? TRAIT_DEFAULT.readingTendency,
8
+ proceduralFluency: t?.proceduralFluency ?? param("journey.defaultTrait"),
9
+ motorPrecision: t?.motorPrecision ?? P("defaultMotorPrecision"),
10
+ patience: t?.patience ?? param("journey.defaultTrait"),
11
+ readingTendency: t?.readingTendency ?? param("journey.defaultTrait"),
12
12
  });
13
13
  // ─── Random helpers ─────────────────────────────────────────────────────────
14
14
  /** Box-Muller sampler for Normal(mean, stddev). Truncated to [min, max]. */
@@ -49,28 +49,31 @@ function typoFor(c) {
49
49
  */
50
50
  export async function humanType(page, text, inputTraits) {
51
51
  const t = traits(inputTraits);
52
- // Faster procedural fluency → smaller mean and stddev. Range μ ≈ 90-260ms.
53
- const meanInterval = 260 - 170 * t.proceduralFluency;
54
- const stdInterval = 50 + 60 * (1 - t.proceduralFluency);
52
+ // Faster procedural fluency → smaller mean and stddev: from the slowest
53
+ // decile's mean inter-key interval at 0 to the fastest decile's at 1
54
+ // (Dhakal et al. 2018, about 481 and 122 ms).
55
+ const slow = P("type.slowIntervalMs");
56
+ const meanInterval = slow - (slow - P("type.fastIntervalMs")) * t.proceduralFluency;
57
+ const stdInterval = P("type.intervalSdMs") + P("type.intervalSdPerSlowness") * (1 - t.proceduralFluency);
55
58
  // Initial dwell — patient/thorough readers take longer to find the field
56
- await sleep(rand(300, 800) * (1 + t.readingTendency * 0.6));
59
+ await sleep(rand(P("type.focusMinMs"), P("type.focusMaxMs")) * (1 + t.readingTendency * P("type.focusReadingGain")));
57
60
  for (let i = 0; i < text.length; i++) {
58
61
  const ch = text[i];
59
62
  // Occasional thinking pause (rare, longer)
60
- if (Math.random() < 0.04) {
61
- await sleep(rand(600, 1500) * (1 + (1 - t.proceduralFluency) * 0.5));
63
+ if (Math.random() < P("type.pauseRate")) {
64
+ await sleep(rand(P("type.pauseMinMs"), P("type.pauseMaxMs")) * (1 + (1 - t.proceduralFluency) * P("type.pauseSlownessGain")));
62
65
  }
63
66
  // 5% typo+correction rate, only on letter chars
64
- if (/[a-zA-Z]/.test(ch) && Math.random() < 0.05) {
67
+ if (/[a-zA-Z]/.test(ch) && Math.random() < P("type.typoRate")) {
65
68
  const wrong = typoFor(ch);
66
69
  await page.keyboard.type(wrong, { delay: 0 });
67
- await sleep(gauss(220, 90, 80, 600)); // notice the typo
70
+ await sleep(gauss(P("type.noticeMeanMs"), P("type.noticeSdMs"), P("type.noticeMinMs"), P("type.noticeMaxMs"))); // notice the typo
68
71
  await page.keyboard.press("Backspace");
69
- await sleep(gauss(meanInterval * 0.7, stdInterval * 0.7, 30, 400));
72
+ await sleep(gauss(meanInterval * P("type.correctionShare"), stdInterval * P("type.correctionShare"), P("type.minIntervalMs"), P("type.correctionMaxMs")));
70
73
  }
71
74
  // Type the actual char
72
75
  await page.keyboard.type(ch, { delay: 0 });
73
- await sleep(gauss(meanInterval, stdInterval, 30, 800));
76
+ await sleep(gauss(meanInterval, stdInterval, P("type.minIntervalMs"), P("type.maxIntervalMs")));
74
77
  }
75
78
  }
76
79
  // ─── Clicking ───────────────────────────────────────────────────────────────
@@ -89,35 +92,36 @@ export async function humanClick(page, cx, cy, inputTraits, bbox) {
89
92
  const t = traits(inputTraits);
90
93
  // Aim spread — high motorPrecision = small spread (1-2px), low = big (6-10px).
91
94
  // Clamped so the click still lands inside the bbox we know about.
92
- const maxSpread = 8 - 6 * t.motorPrecision;
93
- const halfW = bbox ? bbox.width / 2 : 30;
94
- const halfH = bbox ? bbox.height / 2 : 12;
95
- const spreadX = Math.min(maxSpread, halfW * 0.4);
96
- const spreadY = Math.min(maxSpread, halfH * 0.4);
97
- const dx = gauss(0, spreadX, -spreadX * 2, spreadX * 2);
98
- const dy = gauss(0, spreadY, -spreadY * 2, spreadY * 2);
95
+ const maxSpread = P("click.maxSpreadPx") - P("click.precisionNarrowingPx") * t.motorPrecision;
96
+ const halfW = bbox ? bbox.width / 2 : P("click.defaultHalfWidthPx");
97
+ const halfH = bbox ? bbox.height / 2 : P("click.defaultHalfHeightPx");
98
+ const spreadX = Math.min(maxSpread, halfW * P("click.spreadShareOfHalf"));
99
+ const spreadY = Math.min(maxSpread, halfH * P("click.spreadShareOfHalf"));
100
+ const clampSd = P("clampSd");
101
+ const dx = gauss(0, spreadX, -spreadX * clampSd, spreadX * clampSd);
102
+ const dy = gauss(0, spreadY, -spreadY * clampSd, spreadY * clampSd);
99
103
  const targetX = cx + dx;
100
104
  const targetY = cy + dy;
101
105
  // Mis-click roll (only if we know the bbox so we can land just outside)
102
- const willMisclick = bbox && Math.random() < 0.02;
106
+ const willMisclick = bbox && Math.random() < P("click.misclickRate");
103
107
  if (willMisclick) {
104
108
  // Click 6-12px outside the bbox edge, in a random direction
105
109
  const angle = Math.random() * Math.PI * 2;
106
- const dist = rand(halfW + 6, halfW + 12);
110
+ const dist = rand(halfW + P("click.missMinPx"), halfW + P("click.missMaxPx"));
107
111
  const missX = cx + Math.cos(angle) * dist;
108
112
  const missY = cy + Math.sin(angle) * dist;
109
- await page.mouse.move(missX, missY, { steps: 8 });
110
- await sleep(gauss(120, 40, 60, 250));
113
+ await page.mouse.move(missX, missY, { steps: P("click.missMoveSteps") });
114
+ await sleep(gauss(P("click.missPauseMeanMs"), P("click.missPauseSdMs"), P("click.missPauseMinMs"), P("click.missPauseMaxMs")));
111
115
  await page.mouse.click(missX, missY);
112
116
  // Realize, recover
113
- await sleep(gauss(450, 120, 250, 900));
117
+ await sleep(gauss(P("click.recoverMeanMs"), P("click.recoverSdMs"), P("click.recoverMinMs"), P("click.recoverMaxMs")));
114
118
  }
115
119
  // Hover with smooth interpolation (steps=8-15) so any in-page mouse-tracker
116
120
  // sees a real movement curve, not a teleport.
117
- const moveSteps = Math.round(gauss(12, 3, 6, 24));
121
+ const moveSteps = Math.round(gauss(P("click.moveStepsMean"), P("click.moveStepsSd"), P("click.moveStepsMin"), P("click.moveStepsMax")));
118
122
  await page.mouse.move(targetX, targetY, { steps: moveSteps });
119
123
  // Pre-click dwell — the "is this what I want?" pause
120
- const dwell = gauss(180, 80, 60, 500) * (1 + t.readingTendency * 0.4);
124
+ const dwell = gauss(P("click.dwellMeanMs"), P("click.dwellSdMs"), P("click.dwellMinMs"), P("click.dwellMaxMs")) * (1 + t.readingTendency * P("click.dwellReadingGain"));
121
125
  await sleep(dwell);
122
126
  await page.mouse.click(targetX, targetY);
123
127
  return { x: targetX, y: targetY };
@@ -130,24 +134,24 @@ export async function humanClick(page, cx, cy, inputTraits, bbox) {
130
134
  export async function humanScroll(page, baseDeltaY, inputTraits) {
131
135
  const t = traits(inputTraits);
132
136
  // Vary the delta ±20% — not always exactly 400px
133
- const variance = baseDeltaY * 0.2;
134
- const delta = baseDeltaY + gauss(0, variance / 2, -variance, variance);
137
+ const variance = baseDeltaY * P("scroll.deltaVariance");
138
+ const delta = baseDeltaY + gauss(0, variance / P("clampSd"), -variance, variance);
135
139
  // 5% glance-back: scroll the opposite way 60-100px, pause, then scroll the
136
140
  // intended direction. Real readers do this when something catches their eye
137
141
  // mid-scroll. Skip for impatient personas.
138
- const willGlance = t.patience > 0.4 && Math.random() < 0.05;
142
+ const willGlance = t.patience > P("scroll.glancePatience") && Math.random() < P("scroll.glanceRate");
139
143
  if (willGlance) {
140
- const glanceBack = -Math.sign(delta) * rand(60, 100);
144
+ const glanceBack = -Math.sign(delta) * rand(P("scroll.glanceMinPx"), P("scroll.glanceMaxPx"));
141
145
  await page.evaluate(({ d }) => {
142
146
  window.scrollBy({ top: d, behavior: "smooth" });
143
147
  }, { d: glanceBack });
144
- await sleep(gauss(400, 120, 200, 900));
148
+ await sleep(gauss(P("scroll.glancePauseMeanMs"), P("scroll.glancePauseSdMs"), P("scroll.glancePauseMinMs"), P("scroll.glancePauseMaxMs")));
145
149
  }
146
150
  await page.evaluate(({ d }) => {
147
151
  window.scrollBy({ top: d, behavior: "smooth" });
148
152
  }, { d: delta });
149
153
  // Wait for the smooth scroll to settle
150
- await sleep(gauss(380, 80, 200, 700));
154
+ await sleep(gauss(P("scroll.settleMeanMs"), P("scroll.settleSdMs"), P("scroll.settleMinMs"), P("scroll.settleMaxMs")));
151
155
  return delta;
152
156
  }
153
157
  // ─── Inter-action settle ────────────────────────────────────────────────────
@@ -158,7 +162,7 @@ export async function humanScroll(page, baseDeltaY, inputTraits) {
158
162
  export async function humanSettle(inputTraits) {
159
163
  const t = traits(inputTraits);
160
164
  // Range: 200ms (impatient) → 1200ms (very patient + thorough)
161
- const ms = gauss(400 + 600 * t.patience + 200 * t.readingTendency, 180, 150, 1500);
165
+ const ms = gauss(P("settle.baseMs") + P("settle.patienceMs") * t.patience + P("settle.readingMs") * t.readingTendency, P("settle.sdMs"), P("settle.minMs"), P("settle.maxMs"));
162
166
  await sleep(ms);
163
167
  }
164
168
  //# sourceMappingURL=human-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"human-input.js","sourceRoot":"","sources":["../../src/visual/human-input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"human-input.js","sourceRoot":"","sources":["../../src/visual/human-input.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,2EAA2E;AAC3E,8EAA8E;AAC9E,wCAAwC;AACxC,MAAM,CAAC,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAiBpD,+FAA+F;AAC/F,MAAM,MAAM,GAAG,CAAC,CAAe,EAAyB,EAAE,CAAC,CAAC;IAC1D,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,IAAI,KAAK,CAAC,sBAAsB,CAAC;IACxE,cAAc,EAAE,CAAC,EAAE,cAAc,IAAI,CAAC,CAAC,uBAAuB,CAAC;IAC/D,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC,sBAAsB,CAAC;IACtD,eAAe,EAAE,CAAC,EAAE,eAAe,IAAI,KAAK,CAAC,sBAAsB,CAAC;CACrE,CAAC,CAAC;AAEH,+EAA+E;AAE/E,4EAA4E;AAC5E,SAAS,KAAK,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;IAChE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,KAAK,CAAC;QAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC;QAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAErF,oCAAoC;AACpC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAE7E,+EAA+E;AAE/E,6EAA6E;AAC7E,2DAA2D;AAC3D,MAAM,cAAc,GAA2B;IAC7C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI;IAChG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK;IAC/F,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK;CAC1E,CAAC;AAEF,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAU,EACV,IAAY,EACZ,WAAyB;IAEzB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9B,wEAAwE;IACxE,qEAAqE;IACrE,8CAA8C;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC;IACpF,MAAM,WAAW,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAEzG,yEAAyE;IACzE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAErH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnB,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAChI,CAAC;QAED,gDAAgD;QAChD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;YAClI,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,sBAAsB,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC5J,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAU,EACV,EAAU,EACV,EAAU,EACV,WAAyB,EACzB,IAAwC;IAExC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9B,+EAA+E;IAC/E,kEAAkE;IAClE,MAAM,SAAS,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;IAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;IAExB,wEAAwE;IACxE,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,CAAC;QACjB,4DAA4D;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC/H,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,mBAAmB;QACnB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzH,CAAC;IAED,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACxI,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE9D,qDAAqD;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACxK,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEzC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAU,EACV,UAAkB,EAClB,WAAyB;IAEzB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9B,iDAAiD;IACjD,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAElF,2EAA2E;IAC3E,4EAA4E;IAC5E,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACrG,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9F,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAiB,EAAE,EAAE;YAC3C,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QACtB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAC7I,CAAC;IAED,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAiB,EAAE,EAAE;QAC3C,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjB,uCAAuC;IACvC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAEvH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAyB;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,MAAM,EAAE,GAAG,KAAK,CACd,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,eAAe,EACpG,CAAC,CAAC,aAAa,CAAC,EAChB,CAAC,CAAC,cAAc,CAAC,EACjB,CAAC,CAAC,cAAc,CAAC,CAClB,CAAC;IACF,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -16,6 +16,8 @@ export * from "./distance-metrics.js";
16
16
  export * from "./perceptual-transport.js";
17
17
  export * from "./cognitive-transport.js";
18
18
  export * from "./cognitive-transport-chain.js";
19
+ export * from "./dro-bound.js";
20
+ export * from "./model-provenance.js";
19
21
  export * from "./cognitive-models.js";
20
22
  export * from "./attention-transport.js";
21
23
  export * from "./heatmap-overlay.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -16,6 +16,8 @@ export * from "./distance-metrics.js";
16
16
  export * from "./perceptual-transport.js";
17
17
  export * from "./cognitive-transport.js";
18
18
  export * from "./cognitive-transport-chain.js";
19
+ export * from "./dro-bound.js";
20
+ export * from "./model-provenance.js";
19
21
  export * from "./cognitive-models.js";
20
22
  export * from "./attention-transport.js";
21
23
  export * from "./heatmap-overlay.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visual/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,49 @@
1
+ export interface LawTimesReport {
2
+ /** The time budget each law time is a demand against, seconds (law.timeBudget). */
3
+ budgetSeconds: number;
4
+ pointing: {
5
+ seconds: number;
6
+ demand: number;
7
+ };
8
+ /**
9
+ * First-visit choosing (novice search), the decision layer's demand on every
10
+ * run. On a familiar run (siteFamiliarity e > 0) the time the cognitiveLoad
11
+ * abilities are asked, (1 - e) novice + e expert (Cockburn et al. 2007,
12
+ * Eq. 4), is reported beside it.
13
+ */
14
+ choosing: {
15
+ seconds: number;
16
+ demand: number;
17
+ expertSeconds?: number;
18
+ siteFamiliarity?: number;
19
+ familiarSeconds?: number;
20
+ familiarDemand?: number;
21
+ };
22
+ /**
23
+ * perLabelSeconds is the first read charged per menu label with visible
24
+ * text (law.reading.labelFirstRead), carried so a view states the number
25
+ * the run computed with instead of a copy of it.
26
+ */
27
+ reading: {
28
+ seconds: number;
29
+ demand: number;
30
+ perLabelSeconds: number;
31
+ };
32
+ procedure: {
33
+ seconds: number;
34
+ demand: number;
35
+ };
36
+ note: string;
37
+ }
38
+ /**
39
+ * The four law times of a measured page beside the demand each makes, for a
40
+ * tool response: seconds of work for the reference user, d = T / (T + budget).
41
+ */
42
+ export declare function lawTimesReport(m: {
43
+ pointingSeconds: number;
44
+ choosingSeconds: number;
45
+ readingSeconds: number;
46
+ procedureSeconds: number;
47
+ choosingSecondsExpert?: number;
48
+ }, siteFamiliarity?: number): LawTimesReport;
49
+ //# sourceMappingURL=law-times-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"law-times-report.d.ts","sourceRoot":"","sources":["../../src/visual/law-times-report.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnJ;;;;OAIG;IACH,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAChC,eAAe,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IACnG,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,EAAE,eAAe,GAAE,MAAU,GAAG,cAAc,CAoB9C"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The four law times of a measured page beside the demand each makes, as a
3
+ * tool response reports them (cognitive_effort's lawTimes, the site
4
+ * assessment's pageMetrics.lawTimes). Display rounding only; the laws and
5
+ * their constants are in demand-laws.ts.
6
+ *
7
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
8
+ * @license MIT
9
+ */
10
+ import { param } from "./model-provenance.js";
11
+ import { timeDemand } from "./demand-laws.js";
12
+ const round = (x, places) => Math.round(x * 10 ** places) / 10 ** places;
13
+ /**
14
+ * The four law times of a measured page beside the demand each makes, for a
15
+ * tool response: seconds of work for the reference user, d = T / (T + budget).
16
+ */
17
+ export function lawTimesReport(m, siteFamiliarity = 0) {
18
+ const one = (seconds) => ({ seconds: round(seconds, 1), demand: round(timeDemand(seconds), 3) });
19
+ const expert = m.choosingSecondsExpert;
20
+ const familiar = siteFamiliarity > 0 && typeof expert === "number";
21
+ const at = familiar ? one((1 - siteFamiliarity) * m.choosingSeconds + siteFamiliarity * expert) : undefined;
22
+ // Through param(), as the budget: the reading time above already read it, so
23
+ // the answer's provenance is unchanged, and an override reaches the words too.
24
+ const perLabel = round(param("law.reading.labelFirstRead"), 3);
25
+ return {
26
+ budgetSeconds: param("law.timeBudget"),
27
+ pointing: one(m.pointingSeconds),
28
+ choosing: {
29
+ ...one(m.choosingSeconds),
30
+ ...(typeof expert === "number" ? { expertSeconds: round(expert, 1) } : {}),
31
+ ...(at ? { siteFamiliarity, familiarSeconds: at.seconds, familiarDemand: at.demand } : {}),
32
+ },
33
+ reading: { ...one(m.readingSeconds), perLabelSeconds: perLabel },
34
+ procedure: one(m.procedureSeconds),
35
+ note: `Seconds of work this page asks of a typical first-time visitor, from published laws: pointing (Fitts, every target once), choosing (novice visual search, every choice group once; expertSeconds is the Hick-Hyman expert limit; on a run with siteFamiliarity e the cognitiveLoad abilities are asked (1 - e) novice + e expert, familiarSeconds, Cockburn et al. 2007), reading (Brysbaert's silent reading rate for all prose outside menus once, plus a first read of each menu label with visible text, ${perLabel} s, a hypothesis read off Cockburn et al. 2007) and procedure (the keystroke-level model's mental preparation per entry field). Each is a demand against one time budget, d = T / (T + budget); the budget is the median stay on a first-time page visit (Weinreich et al. 2008), a hypothesis.`,
36
+ };
37
+ }
38
+ //# sourceMappingURL=law-times-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"law-times-report.js","sourceRoot":"","sources":["../../src/visual/law-times-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAuB9C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC;AAEzF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAG9B,EAAE,kBAA0B,CAAC;IAC5B,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,CAAC,CAAC,qBAAqB,CAAC;IACvC,MAAM,QAAQ,GAAG,eAAe,GAAG,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC;IACnE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5G,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC;QACtC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;QAChC,QAAQ,EAAE;YACR,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;YACzB,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3F;QACD,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE;QAChE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAClC,IAAI,EAAE,gfAAgf,QAAQ,iSAAiS;KAChyB,CAAC;AACJ,CAAC"}