@tangle-network/browser-agent-driver 0.33.2 → 0.34.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 (485) hide show
  1. package/README.md +42 -1
  2. package/discovery/llms.txt +27 -0
  3. package/discovery/tangle-agent.json +36 -0
  4. package/dist/brain/action-parse.d.ts +16 -0
  5. package/dist/brain/action-parse.d.ts.map +1 -0
  6. package/dist/brain/action-parse.js +191 -0
  7. package/dist/brain/action-parse.js.map +1 -0
  8. package/dist/brain/decide.d.ts +58 -0
  9. package/dist/brain/decide.d.ts.map +1 -0
  10. package/dist/brain/decide.js +418 -0
  11. package/dist/brain/decide.js.map +1 -0
  12. package/dist/brain/history-compact.d.ts +19 -0
  13. package/dist/brain/history-compact.d.ts.map +1 -0
  14. package/dist/brain/history-compact.js +153 -0
  15. package/dist/brain/history-compact.js.map +1 -0
  16. package/dist/brain/index.d.ts +78 -152
  17. package/dist/brain/index.d.ts.map +1 -1
  18. package/dist/brain/index.js +62 -2268
  19. package/dist/brain/index.js.map +1 -1
  20. package/dist/brain/model-client.d.ts +101 -0
  21. package/dist/brain/model-client.d.ts.map +1 -0
  22. package/dist/brain/model-client.js +391 -0
  23. package/dist/brain/model-client.js.map +1 -0
  24. package/dist/brain/plan.d.ts +57 -0
  25. package/dist/brain/plan.d.ts.map +1 -0
  26. package/dist/brain/plan.js +194 -0
  27. package/dist/brain/plan.js.map +1 -0
  28. package/dist/brain/prompts.d.ts +37 -0
  29. package/dist/brain/prompts.d.ts.map +1 -0
  30. package/dist/brain/prompts.js +455 -0
  31. package/dist/brain/prompts.js.map +1 -0
  32. package/dist/brain/provider-fetch.d.ts +26 -0
  33. package/dist/brain/provider-fetch.d.ts.map +1 -0
  34. package/dist/brain/provider-fetch.js +45 -0
  35. package/dist/brain/provider-fetch.js.map +1 -0
  36. package/dist/brain/snapshot-budget.d.ts +20 -0
  37. package/dist/brain/snapshot-budget.d.ts.map +1 -0
  38. package/dist/brain/snapshot-budget.js +202 -0
  39. package/dist/brain/snapshot-budget.js.map +1 -0
  40. package/dist/brain/system-prompt.d.ts +67 -0
  41. package/dist/brain/system-prompt.d.ts.map +1 -0
  42. package/dist/brain/system-prompt.js +128 -0
  43. package/dist/brain/system-prompt.js.map +1 -0
  44. package/dist/brain/tasks/design-audit.d.ts +33 -0
  45. package/dist/brain/tasks/design-audit.d.ts.map +1 -0
  46. package/dist/brain/tasks/design-audit.js +100 -0
  47. package/dist/brain/tasks/design-audit.js.map +1 -0
  48. package/dist/brain/tasks/evaluate.d.ts +25 -0
  49. package/dist/brain/tasks/evaluate.d.ts.map +1 -0
  50. package/dist/brain/tasks/evaluate.js +55 -0
  51. package/dist/brain/tasks/evaluate.js.map +1 -0
  52. package/dist/brain/tasks/goal-verification.d.ts +32 -0
  53. package/dist/brain/tasks/goal-verification.d.ts.map +1 -0
  54. package/dist/brain/tasks/goal-verification.js +68 -0
  55. package/dist/brain/tasks/goal-verification.js.map +1 -0
  56. package/dist/brain/tasks/knowledge.d.ts +26 -0
  57. package/dist/brain/tasks/knowledge.d.ts.map +1 -0
  58. package/dist/brain/tasks/knowledge.js +56 -0
  59. package/dist/brain/tasks/knowledge.js.map +1 -0
  60. package/dist/brain/tasks/link-scout.d.ts +37 -0
  61. package/dist/brain/tasks/link-scout.d.ts.map +1 -0
  62. package/dist/brain/tasks/link-scout.js +69 -0
  63. package/dist/brain/tasks/link-scout.js.map +1 -0
  64. package/dist/brain/types.d.ts +55 -0
  65. package/dist/brain/types.d.ts.map +1 -0
  66. package/dist/brain/types.js +7 -0
  67. package/dist/brain/types.js.map +1 -0
  68. package/dist/browser/stealth-init-script.d.ts +9 -0
  69. package/dist/browser/stealth-init-script.d.ts.map +1 -0
  70. package/dist/browser/stealth-init-script.js +128 -0
  71. package/dist/browser/stealth-init-script.js.map +1 -0
  72. package/dist/browser/storage-state.d.ts +29 -0
  73. package/dist/browser/storage-state.d.ts.map +1 -0
  74. package/dist/browser/storage-state.js +47 -0
  75. package/dist/browser/storage-state.js.map +1 -0
  76. package/dist/cli/args.d.ts +141 -0
  77. package/dist/cli/args.d.ts.map +1 -0
  78. package/dist/cli/args.js +167 -0
  79. package/dist/cli/args.js.map +1 -0
  80. package/dist/cli/benchmark-sync.d.ts +9 -0
  81. package/dist/cli/benchmark-sync.d.ts.map +1 -0
  82. package/dist/cli/benchmark-sync.js +43 -0
  83. package/dist/cli/benchmark-sync.js.map +1 -0
  84. package/dist/cli/build-config.d.ts +11 -0
  85. package/dist/cli/build-config.d.ts.map +1 -0
  86. package/dist/cli/build-config.js +355 -0
  87. package/dist/cli/build-config.js.map +1 -0
  88. package/dist/cli/commands/auth.d.ts +3 -0
  89. package/dist/cli/commands/auth.d.ts.map +1 -0
  90. package/dist/cli/commands/auth.js +36 -0
  91. package/dist/cli/commands/auth.js.map +1 -0
  92. package/dist/cli/commands/chrome-debug.d.ts +7 -0
  93. package/dist/cli/commands/chrome-debug.d.ts.map +1 -0
  94. package/dist/cli/commands/chrome-debug.js +11 -0
  95. package/dist/cli/commands/chrome-debug.js.map +1 -0
  96. package/dist/cli/commands/design-audit.d.ts +3 -0
  97. package/dist/cli/commands/design-audit.d.ts.map +1 -0
  98. package/dist/cli/commands/design-audit.js +68 -0
  99. package/dist/cli/commands/design-audit.js.map +1 -0
  100. package/dist/cli/commands/preview.d.ts +14 -0
  101. package/dist/cli/commands/preview.d.ts.map +1 -0
  102. package/dist/cli/commands/preview.js +31 -0
  103. package/dist/cli/commands/preview.js.map +1 -0
  104. package/dist/cli/commands/run.d.ts +3 -0
  105. package/dist/cli/commands/run.d.ts.map +1 -0
  106. package/dist/cli/commands/run.js +728 -0
  107. package/dist/cli/commands/run.js.map +1 -0
  108. package/dist/cli/commands/runs.d.ts +8 -0
  109. package/dist/cli/commands/runs.d.ts.map +1 -0
  110. package/dist/cli/commands/runs.js +35 -0
  111. package/dist/cli/commands/runs.js.map +1 -0
  112. package/dist/cli/commands/share.d.ts +10 -0
  113. package/dist/cli/commands/share.d.ts.map +1 -0
  114. package/dist/cli/commands/share.js +32 -0
  115. package/dist/cli/commands/share.js.map +1 -0
  116. package/dist/cli/commands/showcase.d.ts +17 -0
  117. package/dist/cli/commands/showcase.d.ts.map +1 -0
  118. package/dist/cli/commands/showcase.js +20 -0
  119. package/dist/cli/commands/showcase.js.map +1 -0
  120. package/dist/cli/commands/snapshot.d.ts +12 -0
  121. package/dist/cli/commands/snapshot.d.ts.map +1 -0
  122. package/dist/cli/commands/snapshot.js +24 -0
  123. package/dist/cli/commands/snapshot.js.map +1 -0
  124. package/dist/cli/commands/view.d.ts +7 -0
  125. package/dist/cli/commands/view.d.ts.map +1 -0
  126. package/dist/cli/commands/view.js +23 -0
  127. package/dist/cli/commands/view.js.map +1 -0
  128. package/dist/cli/constants.d.ts +6 -0
  129. package/dist/cli/constants.d.ts.map +1 -0
  130. package/dist/cli/constants.js +3 -0
  131. package/dist/cli/constants.js.map +1 -0
  132. package/dist/cli/version.d.ts +7 -0
  133. package/dist/cli/version.d.ts.map +1 -0
  134. package/dist/cli/version.js +16 -0
  135. package/dist/cli/version.js.map +1 -0
  136. package/dist/cli-design-audit.d.ts +44 -36
  137. package/dist/cli-design-audit.d.ts.map +1 -1
  138. package/dist/cli-design-audit.js +137 -1646
  139. package/dist/cli-design-audit.js.map +1 -1
  140. package/dist/cli-jobs.js +2 -1
  141. package/dist/cli-jobs.js.map +1 -1
  142. package/dist/cli.js +66 -1697
  143. package/dist/cli.js.map +1 -1
  144. package/dist/config.d.ts +5 -0
  145. package/dist/config.d.ts.map +1 -1
  146. package/dist/config.js +8 -0
  147. package/dist/config.js.map +1 -1
  148. package/dist/design/audit/evolve/agent.d.ts +23 -0
  149. package/dist/design/audit/evolve/agent.d.ts.map +1 -0
  150. package/dist/design/audit/evolve/agent.js +272 -0
  151. package/dist/design/audit/evolve/agent.js.map +1 -0
  152. package/dist/design/audit/evolve/css.d.ts +10 -0
  153. package/dist/design/audit/evolve/css.d.ts.map +1 -0
  154. package/dist/design/audit/evolve/css.js +206 -0
  155. package/dist/design/audit/evolve/css.js.map +1 -0
  156. package/dist/design/audit/evolve/index.d.ts +13 -0
  157. package/dist/design/audit/evolve/index.d.ts.map +1 -0
  158. package/dist/design/audit/evolve/index.js +12 -0
  159. package/dist/design/audit/evolve/index.js.map +1 -0
  160. package/dist/design/audit/evolve/report.d.ts +3 -0
  161. package/dist/design/audit/evolve/report.d.ts.map +1 -0
  162. package/dist/design/audit/evolve/report.js +45 -0
  163. package/dist/design/audit/evolve/report.js.map +1 -0
  164. package/dist/design/audit/evolve/types.d.ts +14 -0
  165. package/dist/design/audit/evolve/types.d.ts.map +1 -0
  166. package/dist/design/audit/evolve/types.js +2 -0
  167. package/dist/design/audit/evolve/types.js.map +1 -0
  168. package/dist/design/audit/pipeline.d.ts +12 -0
  169. package/dist/design/audit/pipeline.d.ts.map +1 -1
  170. package/dist/design/audit/pipeline.js +43 -27
  171. package/dist/design/audit/pipeline.js.map +1 -1
  172. package/dist/design/audit/reference/artifact/build.d.ts +33 -0
  173. package/dist/design/audit/reference/artifact/build.d.ts.map +1 -0
  174. package/dist/design/audit/reference/artifact/build.js +64 -0
  175. package/dist/design/audit/reference/artifact/build.js.map +1 -0
  176. package/dist/design/audit/reference/artifact/render.d.ts +39 -0
  177. package/dist/design/audit/reference/artifact/render.d.ts.map +1 -0
  178. package/dist/design/audit/reference/artifact/render.js +213 -0
  179. package/dist/design/audit/reference/artifact/render.js.map +1 -0
  180. package/dist/design/audit/reference/artifact/text.d.ts +11 -0
  181. package/dist/design/audit/reference/artifact/text.d.ts.map +1 -0
  182. package/dist/design/audit/reference/artifact/text.js +20 -0
  183. package/dist/design/audit/reference/artifact/text.js.map +1 -0
  184. package/dist/design/audit/reference/artifact/to-findings.d.ts +57 -0
  185. package/dist/design/audit/reference/artifact/to-findings.d.ts.map +1 -0
  186. package/dist/design/audit/reference/artifact/to-findings.js +314 -0
  187. package/dist/design/audit/reference/artifact/to-findings.js.map +1 -0
  188. package/dist/design/audit/reference/config.d.ts +50 -0
  189. package/dist/design/audit/reference/config.d.ts.map +1 -0
  190. package/dist/design/audit/reference/config.js +108 -0
  191. package/dist/design/audit/reference/config.js.map +1 -0
  192. package/dist/design/audit/reference/contracts.d.ts +1030 -0
  193. package/dist/design/audit/reference/contracts.d.ts.map +1 -0
  194. package/dist/design/audit/reference/contracts.js +28 -0
  195. package/dist/design/audit/reference/contracts.js.map +1 -0
  196. package/dist/design/audit/reference/corpus/build.d.ts +115 -0
  197. package/dist/design/audit/reference/corpus/build.d.ts.map +1 -0
  198. package/dist/design/audit/reference/corpus/build.js +152 -0
  199. package/dist/design/audit/reference/corpus/build.js.map +1 -0
  200. package/dist/design/audit/reference/corpus/schema.d.ts +33 -0
  201. package/dist/design/audit/reference/corpus/schema.d.ts.map +1 -0
  202. package/dist/design/audit/reference/corpus/schema.js +249 -0
  203. package/dist/design/audit/reference/corpus/schema.js.map +1 -0
  204. package/dist/design/audit/reference/corpus/store.d.ts +26 -0
  205. package/dist/design/audit/reference/corpus/store.d.ts.map +1 -0
  206. package/dist/design/audit/reference/corpus/store.js +104 -0
  207. package/dist/design/audit/reference/corpus/store.js.map +1 -0
  208. package/dist/design/audit/reference/dna/delta.d.ts +21 -0
  209. package/dist/design/audit/reference/dna/delta.d.ts.map +1 -0
  210. package/dist/design/audit/reference/dna/delta.js +126 -0
  211. package/dist/design/audit/reference/dna/delta.js.map +1 -0
  212. package/dist/design/audit/reference/dna/derive.d.ts +31 -0
  213. package/dist/design/audit/reference/dna/derive.d.ts.map +1 -0
  214. package/dist/design/audit/reference/dna/derive.js +381 -0
  215. package/dist/design/audit/reference/dna/derive.js.map +1 -0
  216. package/dist/design/audit/reference/dna/descriptor.d.ts +36 -0
  217. package/dist/design/audit/reference/dna/descriptor.d.ts.map +1 -0
  218. package/dist/design/audit/reference/dna/descriptor.js +209 -0
  219. package/dist/design/audit/reference/dna/descriptor.js.map +1 -0
  220. package/dist/design/audit/reference/dna/page-adapter.d.ts +17 -0
  221. package/dist/design/audit/reference/dna/page-adapter.d.ts.map +1 -0
  222. package/dist/design/audit/reference/dna/page-adapter.js +35 -0
  223. package/dist/design/audit/reference/dna/page-adapter.js.map +1 -0
  224. package/dist/design/audit/reference/dna/scroll-capture.d.ts +93 -0
  225. package/dist/design/audit/reference/dna/scroll-capture.d.ts.map +1 -0
  226. package/dist/design/audit/reference/dna/scroll-capture.js +374 -0
  227. package/dist/design/audit/reference/dna/scroll-capture.js.map +1 -0
  228. package/dist/design/audit/reference/engine/budget.d.ts +63 -0
  229. package/dist/design/audit/reference/engine/budget.d.ts.map +1 -0
  230. package/dist/design/audit/reference/engine/budget.js +110 -0
  231. package/dist/design/audit/reference/engine/budget.js.map +1 -0
  232. package/dist/design/audit/reference/engine/core.d.ts +32 -0
  233. package/dist/design/audit/reference/engine/core.d.ts.map +1 -0
  234. package/dist/design/audit/reference/engine/core.js +261 -0
  235. package/dist/design/audit/reference/engine/core.js.map +1 -0
  236. package/dist/design/audit/reference/engine/guard.d.ts +43 -0
  237. package/dist/design/audit/reference/engine/guard.d.ts.map +1 -0
  238. package/dist/design/audit/reference/engine/guard.js +43 -0
  239. package/dist/design/audit/reference/engine/guard.js.map +1 -0
  240. package/dist/design/audit/reference/engine/score-core.d.ts +48 -0
  241. package/dist/design/audit/reference/engine/score-core.d.ts.map +1 -0
  242. package/dist/design/audit/reference/engine/score-core.js +134 -0
  243. package/dist/design/audit/reference/engine/score-core.js.map +1 -0
  244. package/dist/design/audit/reference/engine/wiring.d.ts +35 -0
  245. package/dist/design/audit/reference/engine/wiring.d.ts.map +1 -0
  246. package/dist/design/audit/reference/engine/wiring.js +80 -0
  247. package/dist/design/audit/reference/engine/wiring.js.map +1 -0
  248. package/dist/design/audit/reference/eval/taste-core.d.ts +77 -0
  249. package/dist/design/audit/reference/eval/taste-core.d.ts.map +1 -0
  250. package/dist/design/audit/reference/eval/taste-core.js +95 -0
  251. package/dist/design/audit/reference/eval/taste-core.js.map +1 -0
  252. package/dist/design/audit/reference/generate/generator.d.ts +49 -0
  253. package/dist/design/audit/reference/generate/generator.d.ts.map +1 -0
  254. package/dist/design/audit/reference/generate/generator.js +94 -0
  255. package/dist/design/audit/reference/generate/generator.js.map +1 -0
  256. package/dist/design/audit/reference/generate/parse.d.ts +28 -0
  257. package/dist/design/audit/reference/generate/parse.d.ts.map +1 -0
  258. package/dist/design/audit/reference/generate/parse.js +180 -0
  259. package/dist/design/audit/reference/generate/parse.js.map +1 -0
  260. package/dist/design/audit/reference/generate/prompt.d.ts +36 -0
  261. package/dist/design/audit/reference/generate/prompt.d.ts.map +1 -0
  262. package/dist/design/audit/reference/generate/prompt.js +124 -0
  263. package/dist/design/audit/reference/generate/prompt.js.map +1 -0
  264. package/dist/design/audit/reference/index.d.ts +26 -0
  265. package/dist/design/audit/reference/index.d.ts.map +1 -0
  266. package/dist/design/audit/reference/index.js +31 -0
  267. package/dist/design/audit/reference/index.js.map +1 -0
  268. package/dist/design/audit/reference/judge/image-clamp.d.ts +34 -0
  269. package/dist/design/audit/reference/judge/image-clamp.d.ts.map +1 -0
  270. package/dist/design/audit/reference/judge/image-clamp.js +88 -0
  271. package/dist/design/audit/reference/judge/image-clamp.js.map +1 -0
  272. package/dist/design/audit/reference/judge/pairwise.d.ts +34 -0
  273. package/dist/design/audit/reference/judge/pairwise.d.ts.map +1 -0
  274. package/dist/design/audit/reference/judge/pairwise.js +105 -0
  275. package/dist/design/audit/reference/judge/pairwise.js.map +1 -0
  276. package/dist/design/audit/reference/judge/parse.d.ts +31 -0
  277. package/dist/design/audit/reference/judge/parse.d.ts.map +1 -0
  278. package/dist/design/audit/reference/judge/parse.js +113 -0
  279. package/dist/design/audit/reference/judge/parse.js.map +1 -0
  280. package/dist/design/audit/reference/judge/prompt.d.ts +38 -0
  281. package/dist/design/audit/reference/judge/prompt.d.ts.map +1 -0
  282. package/dist/design/audit/reference/judge/prompt.js +111 -0
  283. package/dist/design/audit/reference/judge/prompt.js.map +1 -0
  284. package/dist/design/audit/reference/judge/quality.d.ts +28 -0
  285. package/dist/design/audit/reference/judge/quality.d.ts.map +1 -0
  286. package/dist/design/audit/reference/judge/quality.js +62 -0
  287. package/dist/design/audit/reference/judge/quality.js.map +1 -0
  288. package/dist/design/audit/reference/judge/rank.d.ts +41 -0
  289. package/dist/design/audit/reference/judge/rank.d.ts.map +1 -0
  290. package/dist/design/audit/reference/judge/rank.js +196 -0
  291. package/dist/design/audit/reference/judge/rank.js.map +1 -0
  292. package/dist/design/audit/reference/judge/text-judge.d.ts +31 -0
  293. package/dist/design/audit/reference/judge/text-judge.d.ts.map +1 -0
  294. package/dist/design/audit/reference/judge/text-judge.js +43 -0
  295. package/dist/design/audit/reference/judge/text-judge.js.map +1 -0
  296. package/dist/design/audit/reference/judge/vision-judge.d.ts +59 -0
  297. package/dist/design/audit/reference/judge/vision-judge.d.ts.map +1 -0
  298. package/dist/design/audit/reference/judge/vision-judge.js +150 -0
  299. package/dist/design/audit/reference/judge/vision-judge.js.map +1 -0
  300. package/dist/design/audit/reference/judge/vision-model.d.ts +65 -0
  301. package/dist/design/audit/reference/judge/vision-model.d.ts.map +1 -0
  302. package/dist/design/audit/reference/judge/vision-model.js +110 -0
  303. package/dist/design/audit/reference/judge/vision-model.js.map +1 -0
  304. package/dist/design/audit/reference/pipeline/evaluate-reference.d.ts +68 -0
  305. package/dist/design/audit/reference/pipeline/evaluate-reference.d.ts.map +1 -0
  306. package/dist/design/audit/reference/pipeline/evaluate-reference.js +52 -0
  307. package/dist/design/audit/reference/pipeline/evaluate-reference.js.map +1 -0
  308. package/dist/design/audit/reference/reference-context.d.ts +31 -0
  309. package/dist/design/audit/reference/reference-context.d.ts.map +1 -0
  310. package/dist/design/audit/reference/reference-context.js +73 -0
  311. package/dist/design/audit/reference/reference-context.js.map +1 -0
  312. package/dist/design/audit/reference/retrieval/embedding-hash.d.ts +30 -0
  313. package/dist/design/audit/reference/retrieval/embedding-hash.d.ts.map +1 -0
  314. package/dist/design/audit/reference/retrieval/embedding-hash.js +87 -0
  315. package/dist/design/audit/reference/retrieval/embedding-hash.js.map +1 -0
  316. package/dist/design/audit/reference/retrieval/embedding-openai.d.ts +38 -0
  317. package/dist/design/audit/reference/retrieval/embedding-openai.d.ts.map +1 -0
  318. package/dist/design/audit/reference/retrieval/embedding-openai.js +73 -0
  319. package/dist/design/audit/reference/retrieval/embedding-openai.js.map +1 -0
  320. package/dist/design/audit/reference/retrieval/matcher.d.ts +34 -0
  321. package/dist/design/audit/reference/retrieval/matcher.d.ts.map +1 -0
  322. package/dist/design/audit/reference/retrieval/matcher.js +107 -0
  323. package/dist/design/audit/reference/retrieval/matcher.js.map +1 -0
  324. package/dist/design/audit/reference/run.d.ts +59 -0
  325. package/dist/design/audit/reference/run.d.ts.map +1 -0
  326. package/dist/design/audit/reference/run.js +99 -0
  327. package/dist/design/audit/reference/run.js.map +1 -0
  328. package/dist/design/audit/report.d.ts +35 -0
  329. package/dist/design/audit/report.d.ts.map +1 -0
  330. package/dist/design/audit/report.js +195 -0
  331. package/dist/design/audit/report.js.map +1 -0
  332. package/dist/design/audit/tokens/extract.d.ts +71 -0
  333. package/dist/design/audit/tokens/extract.d.ts.map +1 -0
  334. package/dist/design/audit/tokens/extract.js +1034 -0
  335. package/dist/design/audit/tokens/extract.js.map +1 -0
  336. package/dist/design/audit/types.d.ts +8 -0
  337. package/dist/design/audit/types.d.ts.map +1 -1
  338. package/dist/design/compare.d.ts.map +1 -1
  339. package/dist/design/compare.js +2 -6
  340. package/dist/design/compare.js.map +1 -1
  341. package/dist/design/cookie-consent.d.ts +3 -0
  342. package/dist/design/cookie-consent.d.ts.map +1 -0
  343. package/dist/design/cookie-consent.js +26 -0
  344. package/dist/design/cookie-consent.js.map +1 -0
  345. package/dist/design/viewports.d.ts +18 -0
  346. package/dist/design/viewports.d.ts.map +1 -0
  347. package/dist/design/viewports.js +10 -0
  348. package/dist/design/viewports.js.map +1 -0
  349. package/dist/index.d.ts +2 -2
  350. package/dist/index.d.ts.map +1 -1
  351. package/dist/index.js +1 -1
  352. package/dist/index.js.map +1 -1
  353. package/dist/memory/store.d.ts +19 -1
  354. package/dist/memory/store.d.ts.map +1 -1
  355. package/dist/memory/store.js +47 -0
  356. package/dist/memory/store.js.map +1 -1
  357. package/dist/provider-defaults.d.ts +18 -0
  358. package/dist/provider-defaults.d.ts.map +1 -1
  359. package/dist/provider-defaults.js +33 -0
  360. package/dist/provider-defaults.js.map +1 -1
  361. package/dist/runner/allowed-domains.d.ts +11 -0
  362. package/dist/runner/allowed-domains.d.ts.map +1 -0
  363. package/dist/runner/allowed-domains.js +14 -0
  364. package/dist/runner/allowed-domains.js.map +1 -0
  365. package/dist/runner/batch-fill.d.ts +28 -0
  366. package/dist/runner/batch-fill.d.ts.map +1 -0
  367. package/dist/runner/batch-fill.js +80 -0
  368. package/dist/runner/batch-fill.js.map +1 -0
  369. package/dist/runner/completion-policy.d.ts +26 -0
  370. package/dist/runner/completion-policy.d.ts.map +1 -0
  371. package/dist/runner/completion-policy.js +76 -0
  372. package/dist/runner/completion-policy.js.map +1 -0
  373. package/dist/runner/constants.d.ts +14 -0
  374. package/dist/runner/constants.d.ts.map +1 -0
  375. package/dist/runner/constants.js +23 -0
  376. package/dist/runner/constants.js.map +1 -0
  377. package/dist/runner/decision-screenshot.d.ts +24 -0
  378. package/dist/runner/decision-screenshot.d.ts.map +1 -0
  379. package/dist/runner/decision-screenshot.js +23 -0
  380. package/dist/runner/decision-screenshot.js.map +1 -0
  381. package/dist/runner/domain-boundary.d.ts +36 -0
  382. package/dist/runner/domain-boundary.d.ts.map +1 -0
  383. package/dist/runner/domain-boundary.js +81 -0
  384. package/dist/runner/domain-boundary.js.map +1 -0
  385. package/dist/runner/effect-verify.d.ts +28 -0
  386. package/dist/runner/effect-verify.d.ts.map +1 -0
  387. package/dist/runner/effect-verify.js +42 -0
  388. package/dist/runner/effect-verify.js.map +1 -0
  389. package/dist/runner/execute-plan.d.ts +58 -0
  390. package/dist/runner/execute-plan.d.ts.map +1 -0
  391. package/dist/runner/execute-plan.js +426 -0
  392. package/dist/runner/execute-plan.js.map +1 -0
  393. package/dist/runner/max-turns-extension.d.ts +19 -0
  394. package/dist/runner/max-turns-extension.d.ts.map +1 -0
  395. package/dist/runner/max-turns-extension.js +25 -0
  396. package/dist/runner/max-turns-extension.js.map +1 -0
  397. package/dist/runner/micro-plan.d.ts +11 -0
  398. package/dist/runner/micro-plan.d.ts.map +1 -0
  399. package/dist/runner/micro-plan.js +29 -0
  400. package/dist/runner/micro-plan.js.map +1 -0
  401. package/dist/runner/prompt-snippets.d.ts +5 -0
  402. package/dist/runner/prompt-snippets.d.ts.map +1 -0
  403. package/dist/runner/prompt-snippets.js +13 -0
  404. package/dist/runner/prompt-snippets.js.map +1 -0
  405. package/dist/runner/replay/contracts.d.ts +300 -0
  406. package/dist/runner/replay/contracts.d.ts.map +1 -0
  407. package/dist/runner/replay/contracts.js +42 -0
  408. package/dist/runner/replay/contracts.js.map +1 -0
  409. package/dist/runner/replay/controller.d.ts +27 -0
  410. package/dist/runner/replay/controller.d.ts.map +1 -0
  411. package/dist/runner/replay/controller.js +197 -0
  412. package/dist/runner/replay/controller.js.map +1 -0
  413. package/dist/runner/replay/guard.d.ts +28 -0
  414. package/dist/runner/replay/guard.d.ts.map +1 -0
  415. package/dist/runner/replay/guard.js +100 -0
  416. package/dist/runner/replay/guard.js.map +1 -0
  417. package/dist/runner/runner.d.ts +44 -51
  418. package/dist/runner/runner.d.ts.map +1 -1
  419. package/dist/runner/runner.js +155 -851
  420. package/dist/runner/runner.js.map +1 -1
  421. package/dist/runner/scout-feedback.d.ts +51 -0
  422. package/dist/runner/scout-feedback.d.ts.map +1 -0
  423. package/dist/runner/scout-feedback.js +149 -0
  424. package/dist/runner/scout-feedback.js.map +1 -0
  425. package/dist/skills/macro-loader.d.ts +1 -1
  426. package/dist/test-runner.d.ts.map +1 -1
  427. package/dist/test-runner.js +25 -0
  428. package/dist/test-runner.js.map +1 -1
  429. package/dist/types/actions.d.ts +241 -0
  430. package/dist/types/actions.d.ts.map +1 -0
  431. package/dist/types/actions.js +5 -0
  432. package/dist/types/actions.js.map +1 -0
  433. package/dist/types/config.d.ts +211 -0
  434. package/dist/types/config.d.ts.map +1 -0
  435. package/dist/types/config.js +2 -0
  436. package/dist/types/config.js.map +1 -0
  437. package/dist/types/design-audit.d.ts +92 -0
  438. package/dist/types/design-audit.d.ts.map +1 -0
  439. package/dist/types/design-audit.js +5 -0
  440. package/dist/types/design-audit.js.map +1 -0
  441. package/dist/types/design-tokens.d.ts +138 -0
  442. package/dist/types/design-tokens.d.ts.map +1 -0
  443. package/dist/types/design-tokens.js +5 -0
  444. package/dist/types/design-tokens.js.map +1 -0
  445. package/dist/types/page.d.ts +16 -0
  446. package/dist/types/page.d.ts.map +1 -0
  447. package/dist/types/page.js +2 -0
  448. package/dist/types/page.js.map +1 -0
  449. package/dist/types/plan.d.ts +50 -0
  450. package/dist/types/plan.d.ts.map +1 -0
  451. package/dist/types/plan.js +2 -0
  452. package/dist/types/plan.js.map +1 -0
  453. package/dist/types/preview.d.ts +9 -0
  454. package/dist/types/preview.d.ts.map +1 -0
  455. package/dist/types/preview.js +5 -0
  456. package/dist/types/preview.js.map +1 -0
  457. package/dist/types/result.d.ts +62 -0
  458. package/dist/types/result.d.ts.map +1 -0
  459. package/dist/types/result.js +2 -0
  460. package/dist/types/result.js.map +1 -0
  461. package/dist/types/scenario.d.ts +20 -0
  462. package/dist/types/scenario.d.ts.map +1 -0
  463. package/dist/types/scenario.js +5 -0
  464. package/dist/types/scenario.js.map +1 -0
  465. package/dist/types/test-runner.d.ts +145 -0
  466. package/dist/types/test-runner.d.ts.map +1 -0
  467. package/dist/types/test-runner.js +10 -0
  468. package/dist/types/test-runner.js.map +1 -0
  469. package/dist/types/trajectory.d.ts +38 -0
  470. package/dist/types/trajectory.d.ts.map +1 -0
  471. package/dist/types/trajectory.js +2 -0
  472. package/dist/types/trajectory.js.map +1 -0
  473. package/dist/types/turn.d.ts +50 -0
  474. package/dist/types/turn.d.ts.map +1 -0
  475. package/dist/types/turn.js +2 -0
  476. package/dist/types/turn.js.map +1 -0
  477. package/dist/types.d.ts +16 -1017
  478. package/dist/types.d.ts.map +1 -1
  479. package/dist/types.js +15 -8
  480. package/dist/types.js.map +1 -1
  481. package/dist/wallet/rpc-interception.d.ts +15 -0
  482. package/dist/wallet/rpc-interception.d.ts.map +1 -0
  483. package/dist/wallet/rpc-interception.js +95 -0
  484. package/dist/wallet/rpc-interception.js.map +1 -0
  485. package/package.json +7 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/dna/descriptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Page→DNA extraction adapter — the thin IO boundary over the pure `toDesignDNA`
3
+ * core. Implements the `DesignDnaExtractor` contract.
4
+ *
5
+ * Reuse, not reimplementation: the raw DOM walk (`extractTokensFromDOM`), the
6
+ * multi-viewport merge, colour clustering and grid detection all already live in
7
+ * `extractDesignTokens` (`design/audit/tokens/extract.ts`, a leaf). This adapter
8
+ * calls that one exported function and hands its `DesignTokens` to `toDesignDNA`
9
+ * — it owns zero extraction logic of its own.
10
+ *
11
+ * The reach into the tokens leaf is a LAZY `await import` (mirroring `compare.ts`)
12
+ * so the engine takes no static dependency on the browser-heavy extractor; the
13
+ * pure cores never touch it.
14
+ */
15
+ import type { DesignDnaExtractor } from '../contracts.js';
16
+ export declare function createPageDnaExtractor(): DesignDnaExtractor;
17
+ //# sourceMappingURL=page-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/dna/page-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAqC,MAAM,iBAAiB,CAAA;AAG5F,wBAAgB,sBAAsB,IAAI,kBAAkB,CAkB3D"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Page→DNA extraction adapter — the thin IO boundary over the pure `toDesignDNA`
3
+ * core. Implements the `DesignDnaExtractor` contract.
4
+ *
5
+ * Reuse, not reimplementation: the raw DOM walk (`extractTokensFromDOM`), the
6
+ * multi-viewport merge, colour clustering and grid detection all already live in
7
+ * `extractDesignTokens` (`design/audit/tokens/extract.ts`, a leaf). This adapter
8
+ * calls that one exported function and hands its `DesignTokens` to `toDesignDNA`
9
+ * — it owns zero extraction logic of its own.
10
+ *
11
+ * The reach into the tokens leaf is a LAZY `await import` (mirroring `compare.ts`)
12
+ * so the engine takes no static dependency on the browser-heavy extractor; the
13
+ * pure cores never touch it.
14
+ */
15
+ import { toDesignDNA } from './derive.js';
16
+ export function createPageDnaExtractor() {
17
+ return {
18
+ async extract(opts) {
19
+ const { extractDesignTokens } = await import('../../tokens/extract.js');
20
+ const { tokens, outputDir, screenshotPaths, scrollMotion } = await extractDesignTokens({
21
+ url: opts.url,
22
+ headless: opts.headless,
23
+ outputDir: opts.outputDir,
24
+ captureScrollMotion: opts.captureScrollMotion,
25
+ });
26
+ return {
27
+ dna: toDesignDNA(tokens, opts.measurements, scrollMotion),
28
+ tokens,
29
+ screenshotPaths,
30
+ outputDir,
31
+ };
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=page-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-adapter.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/dna/page-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,IAA2B;YACvC,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CAAC;gBACrF,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;aAC9C,CAAC,CAAA;YACF,OAAO;gBACL,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;gBACzD,MAAM;gBACN,eAAe;gBACf,SAAS;aACV,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Scroll-driven motion capture — the opt-in `captureScrollMotion` pass.
3
+ *
4
+ * Three concerns, deliberately split so the JUDGEMENT is pure and unit-testable
5
+ * while only the raw DOM read touches a browser:
6
+ *
7
+ * 1. `scrollSampleCollector` — the HERMETIC in-page function. It scrolls the
8
+ * live page top→bottom in N stops and, at each stop, reads a bounded set of
9
+ * elements' `getBoundingClientRect` + `getComputedStyle(opacity/transform/
10
+ * position)`. It emits raw `ScrollStepSample[]` and makes NO judgement. It
11
+ * references only browser globals + its own args (no module scope) so
12
+ * Playwright can serialise it into the page.
13
+ * 2. `detectRawScrollCapture` — the PURE detector. It folds the sampled steps
14
+ * into a `RawScrollCapture` (reveal count/kinds, sticky count, parallax
15
+ * score, heights) with NO browser, NO IO, deterministic — so it unit-tests
16
+ * on `ScrollStepSample` fixtures alone.
17
+ * 3. `foldScrollMotion` — the PURE rollup. It normalises a `RawScrollCapture`
18
+ * into the DNA-altitude `ScrollMotionDNA`, computing the derived
19
+ * `pageHeightRatio` and the `scrollDriven` verdict (the two fields the raw
20
+ * capture deliberately leaves to the fold). Unit-tests on `RawScrollCapture`
21
+ * fixtures.
22
+ *
23
+ * `createScrollCapturer` wires (1)+(2) behind the narrow `ScrollCapturePage`
24
+ * seam — it depends only on `evaluate`, never on Playwright, so it is browser-
25
+ * free and fakeable. The live token extractor (`design/audit/tokens/extract.ts`)
26
+ * hands it a real `Page`; tests hand it a fake whose `evaluate` returns canned
27
+ * samples.
28
+ *
29
+ * Honest signals: every quantity is measured. The capturer returns `undefined`
30
+ * for a page that cannot scroll (nothing to observe); a page that scrolls but
31
+ * shows little motion returns a real record that the fold marks
32
+ * `scrollDriven: false` — distinct from absence.
33
+ */
34
+ import type { RawScrollCapture, ScrollMotionDNA, ScrollCapturer } from '../contracts.js';
35
+ /**
36
+ * One element's measurement at a single scroll stop. `i` is the element's
37
+ * stable index in the captured element list, identical across every stop, so the
38
+ * detector can reconstruct each element's series.
39
+ */
40
+ export interface ElementSample {
41
+ /** Stable element index across all stops. */
42
+ i: number;
43
+ /** `getBoundingClientRect().top` in viewport CSS px. */
44
+ top: number;
45
+ /** `getBoundingClientRect().bottom` in viewport CSS px. */
46
+ bottom: number;
47
+ /** Computed `opacity`, 0–1. */
48
+ opacity: number;
49
+ /** Parsed `translateY` from the computed transform, CSS px. */
50
+ ty: number;
51
+ /** Parsed vertical scale from the computed transform (1 = none). */
52
+ scale: number;
53
+ /** Computed `position` (`static` / `sticky` / `fixed` / …). */
54
+ position: string;
55
+ }
56
+ /** One top→bottom scroll stop: the scroll geometry plus every tracked element. */
57
+ export interface ScrollStepSample {
58
+ /** `window.scrollY` at this stop. */
59
+ scrollY: number;
60
+ /** `window.innerHeight` at capture time. */
61
+ viewportHeight: number;
62
+ /** `document.scrollingElement.scrollHeight` at capture time. */
63
+ scrollHeight: number;
64
+ /** Per-element measurements at this stop. */
65
+ elements: ElementSample[];
66
+ }
67
+ /**
68
+ * Scroll the live page top→bottom in `steps` stops, sampling up to
69
+ * `maxElements` elements at each. Pure DOM read — emits raw samples, makes NO
70
+ * judgement. HERMETIC: references only its args + browser globals (no module
71
+ * scope) so it survives `Function.prototype.toString` serialisation into the
72
+ * page. Restores the original scroll position before returning.
73
+ */
74
+ export declare function scrollSampleCollector(steps: number, settleMs: number, maxElements: number): Promise<ScrollStepSample[]>;
75
+ /**
76
+ * Fold sampled scroll steps into a `RawScrollCapture`, or `undefined` when the
77
+ * page could not scroll (nothing to observe). Pure + deterministic.
78
+ */
79
+ export declare function detectRawScrollCapture(samples: ScrollStepSample[]): RawScrollCapture | undefined;
80
+ /**
81
+ * Normalise a raw scroll capture into the DNA-altitude `ScrollMotionDNA`,
82
+ * computing the derived `pageHeightRatio` and the `scrollDriven` verdict the raw
83
+ * capture leaves to the fold. Pure + deterministic.
84
+ */
85
+ export declare function foldScrollMotion(raw: RawScrollCapture): ScrollMotionDNA;
86
+ /**
87
+ * The shipped `ScrollCapturer`: drive a stepped top→bottom scroll on an already
88
+ * open, settled page and fold it to a `RawScrollCapture`. Browser-free — depends
89
+ * only on the `ScrollCapturePage.evaluate` seam — so a fake page drives it in
90
+ * unit tests. Returns `undefined` when the page cannot scroll or evaluation fails.
91
+ */
92
+ export declare function createScrollCapturer(): ScrollCapturer;
93
+ //# sourceMappingURL=scroll-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-capture.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/dna/scroll-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEf,cAAc,EAGf,MAAM,iBAAiB,CAAA;AAkDxB;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,CAAC,EAAE,MAAM,CAAA;IACT,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAA;IACX,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,EAAE,EAAE,MAAM,CAAA;IACV,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAID;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4E7B;AAoHD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,SAAS,CA2ChG;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CAavE;AA0BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAerD"}
@@ -0,0 +1,374 @@
1
+ /**
2
+ * Scroll-driven motion capture — the opt-in `captureScrollMotion` pass.
3
+ *
4
+ * Three concerns, deliberately split so the JUDGEMENT is pure and unit-testable
5
+ * while only the raw DOM read touches a browser:
6
+ *
7
+ * 1. `scrollSampleCollector` — the HERMETIC in-page function. It scrolls the
8
+ * live page top→bottom in N stops and, at each stop, reads a bounded set of
9
+ * elements' `getBoundingClientRect` + `getComputedStyle(opacity/transform/
10
+ * position)`. It emits raw `ScrollStepSample[]` and makes NO judgement. It
11
+ * references only browser globals + its own args (no module scope) so
12
+ * Playwright can serialise it into the page.
13
+ * 2. `detectRawScrollCapture` — the PURE detector. It folds the sampled steps
14
+ * into a `RawScrollCapture` (reveal count/kinds, sticky count, parallax
15
+ * score, heights) with NO browser, NO IO, deterministic — so it unit-tests
16
+ * on `ScrollStepSample` fixtures alone.
17
+ * 3. `foldScrollMotion` — the PURE rollup. It normalises a `RawScrollCapture`
18
+ * into the DNA-altitude `ScrollMotionDNA`, computing the derived
19
+ * `pageHeightRatio` and the `scrollDriven` verdict (the two fields the raw
20
+ * capture deliberately leaves to the fold). Unit-tests on `RawScrollCapture`
21
+ * fixtures.
22
+ *
23
+ * `createScrollCapturer` wires (1)+(2) behind the narrow `ScrollCapturePage`
24
+ * seam — it depends only on `evaluate`, never on Playwright, so it is browser-
25
+ * free and fakeable. The live token extractor (`design/audit/tokens/extract.ts`)
26
+ * hands it a real `Page`; tests hand it a fake whose `evaluate` returns canned
27
+ * samples.
28
+ *
29
+ * Honest signals: every quantity is measured. The capturer returns `undefined`
30
+ * for a page that cannot scroll (nothing to observe); a page that scrolls but
31
+ * shows little motion returns a real record that the fold marks
32
+ * `scrollDriven: false` — distinct from absence.
33
+ */
34
+ // ── tuning (pure, documented) ────────────────────────────────────────────────
35
+ // A page whose scrollable range is below this (CSS px) is treated as
36
+ // non-scrolling: there is nothing to observe, so the capturer returns undefined.
37
+ const MIN_SCROLL_RANGE_PX = 48;
38
+ // Opacity at/below this reads as "hidden" (reveal start); at/above HI reads as
39
+ // "shown" (reveal end).
40
+ const OPACITY_HIDDEN = 0.1;
41
+ const OPACITY_SHOWN = 0.9;
42
+ // A transform translateY of at least this (px) before settling to ~0 reads as a
43
+ // slide reveal; SETTLED is the post-settle tolerance.
44
+ const SLIDE_START_PX = 12;
45
+ const SLIDE_SETTLED_PX = 4;
46
+ // A scale this far from 1 before settling to ~1 reads as a scale-in reveal.
47
+ const SCALE_START = 0.08;
48
+ const SCALE_SETTLED = 0.03;
49
+ // An element is "below / entering" (reveal candidate start) when its viewport
50
+ // top sits at/under this fraction of the viewport, and "in view" (reveal end)
51
+ // when its top sits at/above the IN fraction.
52
+ const ENTER_FRACTION = 0.75;
53
+ const INVIEW_FRACTION = 0.85;
54
+ // A pinned element's viewport top must vary less than this (px) across the stops
55
+ // where it is pinned, while scroll advances at least PIN_MIN_SCROLL_PX.
56
+ const STICKY_TOP_VARIANCE_PX = 8;
57
+ const PIN_MIN_SCROLL_PX = 100;
58
+ // Parallax: a layer's translate rate (viewport movement ÷ scroll movement).
59
+ // 1 = rigid with content, 0 = fixed/pinned. A genuine parallax layer sits in
60
+ // the slow band (LO,HI) or moves faster than content (>FAST). The score is the
61
+ // clamped distance of that rate from rigid (1).
62
+ const PARALLAX_SLOW_LO = 0.15;
63
+ const PARALLAX_SLOW_HI = 0.85;
64
+ const PARALLAX_FAST = 1.15;
65
+ // A transform reveal (slide / scale) only counts for a layer that, once shown,
66
+ // moves RIGIDLY with the content (translate rate within ±this of 1). This is the
67
+ // exact complement of the parallax bands above, so a parallax layer can never be
68
+ // double-read as a slide. Disjoint by construction: rigid = [0.85, 1.15].
69
+ const RIGID_RATE_TOLERANCE = 0.15;
70
+ // scrollDriven rollup thresholds.
71
+ const SCROLL_DRIVEN_MIN_REVEALS = 2;
72
+ const SCROLL_DRIVEN_MIN_PARALLAX = 0.25;
73
+ const round2 = (n) => Math.round(n * 100) / 100;
74
+ const clamp01 = (n) => (n < 0 ? 0 : n > 1 ? 1 : n);
75
+ const clampInt = (n, lo, hi) => Math.max(lo, Math.min(hi, Math.round(n)));
76
+ // ── (1) in-page collector — HERMETIC, runs in the browser ────────────────────
77
+ /**
78
+ * Scroll the live page top→bottom in `steps` stops, sampling up to
79
+ * `maxElements` elements at each. Pure DOM read — emits raw samples, makes NO
80
+ * judgement. HERMETIC: references only its args + browser globals (no module
81
+ * scope) so it survives `Function.prototype.toString` serialisation into the
82
+ * page. Restores the original scroll position before returning.
83
+ */
84
+ export async function scrollSampleCollector(steps, settleMs, maxElements) {
85
+ const doc = document.scrollingElement || document.documentElement;
86
+ const viewportHeight = window.innerHeight;
87
+ const scrollHeight = doc ? doc.scrollHeight : document.body.scrollHeight;
88
+ const originalY = window.scrollY;
89
+ // Parse translateY + vertical scale out of a computed transform matrix.
90
+ const parseTransform = (t) => {
91
+ if (!t || t === 'none')
92
+ return { ty: 0, scale: 1 };
93
+ const open = t.indexOf('(');
94
+ const close = t.lastIndexOf(')');
95
+ if (open < 0 || close <= open)
96
+ return { ty: 0, scale: 1 };
97
+ const nums = t
98
+ .slice(open + 1, close)
99
+ .split(',')
100
+ .map((s) => parseFloat(s.trim()));
101
+ if (nums.length === 6)
102
+ return { ty: nums[5] || 0, scale: nums[3] || 1 };
103
+ if (nums.length === 16)
104
+ return { ty: nums[13] || 0, scale: nums[5] || 1 };
105
+ return { ty: 0, scale: 1 };
106
+ };
107
+ // Capture the tracked element list ONCE so identity (index) is stable across
108
+ // stops. Track a set SPREAD across the full document height — not the first N
109
+ // nodes in DOM order, which cluster in the header/hero and miss everything that
110
+ // reveals lower down the page (the original bug: reveal-heavy pages scored 0).
111
+ // Skip tiny nodes, then evenly subsample by document position up to maxElements.
112
+ const all = Array.from(document.body ? document.body.querySelectorAll('*') : []);
113
+ const candidates = [];
114
+ for (const el of all) {
115
+ const r = el.getBoundingClientRect();
116
+ if (r.width < 24 || r.height < 12)
117
+ continue;
118
+ candidates.push({ el, docTop: r.top + window.scrollY });
119
+ }
120
+ candidates.sort((a, b) => a.docTop - b.docTop);
121
+ let tracked;
122
+ if (candidates.length > maxElements) {
123
+ const stride = candidates.length / maxElements;
124
+ tracked = [];
125
+ for (let k = 0; k < maxElements; k++)
126
+ tracked.push(candidates[Math.floor(k * stride)].el);
127
+ }
128
+ else {
129
+ tracked = candidates.map((c) => c.el);
130
+ }
131
+ const range = Math.max(0, scrollHeight - viewportHeight);
132
+ const stops = Math.max(2, steps);
133
+ const samples = [];
134
+ for (let s = 0; s < stops; s++) {
135
+ const targetY = range * (s / (stops - 1));
136
+ window.scrollTo(0, targetY);
137
+ // Let rAF + CSS transitions / scroll handlers settle before reading.
138
+ await new Promise((resolve) => requestAnimationFrame(() => setTimeout(resolve, settleMs)));
139
+ const elements = [];
140
+ for (let i = 0; i < tracked.length; i++) {
141
+ const el = tracked[i];
142
+ const r = el.getBoundingClientRect();
143
+ const cs = getComputedStyle(el);
144
+ const { ty, scale } = parseTransform(cs.transform);
145
+ const opacity = parseFloat(cs.opacity);
146
+ elements.push({
147
+ i,
148
+ top: r.top,
149
+ bottom: r.bottom,
150
+ opacity: Number.isFinite(opacity) ? opacity : 1,
151
+ ty,
152
+ scale,
153
+ position: cs.position,
154
+ });
155
+ }
156
+ samples.push({ scrollY: window.scrollY, viewportHeight, scrollHeight, elements });
157
+ }
158
+ window.scrollTo(0, originalY);
159
+ return samples;
160
+ }
161
+ function seriesByElement(samples) {
162
+ const byEl = new Map();
163
+ for (const step of samples) {
164
+ for (const e of step.elements) {
165
+ const obs = {
166
+ scrollY: step.scrollY,
167
+ viewportHeight: step.viewportHeight,
168
+ top: e.top,
169
+ bottom: e.bottom,
170
+ opacity: e.opacity,
171
+ ty: e.ty,
172
+ scale: e.scale,
173
+ position: e.position,
174
+ };
175
+ const arr = byEl.get(e.i);
176
+ if (arr)
177
+ arr.push(obs);
178
+ else
179
+ byEl.set(e.i, [obs]);
180
+ }
181
+ }
182
+ for (const arr of byEl.values())
183
+ arr.sort((a, b) => a.scrollY - b.scrollY);
184
+ return byEl;
185
+ }
186
+ /**
187
+ * Classify one element's series as a reveal, returning its kind or null.
188
+ *
189
+ * Compares the element's HIDDEN state (strongest hidden reading while it sits
190
+ * below / entering the viewport) against its SHOWN state (most-settled reading
191
+ * once it has scrolled into view), aggregating EXTREMES across every sampled stop
192
+ * rather than trusting a single frame. A stop can easily land mid-transition (the
193
+ * per-stop settle window is shorter than a typical 300–600ms reveal), so a
194
+ * first-match "after" frame routinely catches an in-flight opacity/transform and
195
+ * misses a real reveal; the extreme over all shown frames does not.
196
+ */
197
+ function classifyReveal(series) {
198
+ if (series.length < 2)
199
+ return null;
200
+ const vh = series[0].viewportHeight;
201
+ // "entering": frames where the element sits below / at the bottom edge of the
202
+ // viewport — its hidden start zone. "later": frames at a DEEPER scroll where it
203
+ // has risen above the in-view line. A reveal completes and then STAYS settled
204
+ // (the element does not re-hide as it scrolls off the top), so the shown
205
+ // reading is NOT gated on the element still being on-screen — gating it on
206
+ // `bottom >= 0` would miss reveals whose final settled frame is the one where
207
+ // the element has just scrolled past the viewport top.
208
+ const entering = series.filter((o) => o.top >= vh * ENTER_FRACTION);
209
+ if (entering.length === 0)
210
+ return null;
211
+ const firstEnterY = Math.min(...entering.map((o) => o.scrollY));
212
+ const later = series.filter((o) => o.scrollY > firstEnterY && o.top < vh * INVIEW_FRACTION);
213
+ if (later.length === 0)
214
+ return null;
215
+ const hiddenOpacity = Math.min(...entering.map((o) => o.opacity));
216
+ const shownOpacity = Math.max(...later.map((o) => o.opacity));
217
+ if (hiddenOpacity <= OPACITY_HIDDEN && shownOpacity >= OPACITY_SHOWN)
218
+ return 'fade';
219
+ // Slide / scale only count for a layer that, once shown, moves rigidly with the
220
+ // content; a parallax layer keeps translating at a non-rigid rate and must not
221
+ // be mis-read as a slide.
222
+ const laterRate = translateRate(later);
223
+ const rigidWhenShown = laterRate !== null && Math.abs(laterRate - 1) <= RIGID_RATE_TOLERANCE;
224
+ if (rigidWhenShown) {
225
+ const enterTy = entering.reduce((m, o) => (Math.abs(o.ty) > Math.abs(m) ? o.ty : m), 0);
226
+ const shownTy = Math.min(...later.map((o) => Math.abs(o.ty)));
227
+ if (Math.abs(enterTy) >= SLIDE_START_PX && shownTy <= SLIDE_SETTLED_PX) {
228
+ return enterTy > 0 ? 'slide-up' : 'slide-down';
229
+ }
230
+ const enterScale = entering.reduce((m, o) => (Math.abs(o.scale - 1) > Math.abs(m - 1) ? o.scale : m), 1);
231
+ const shownScale = Math.min(...later.map((o) => Math.abs(o.scale - 1)));
232
+ if (Math.abs(enterScale - 1) >= SCALE_START && shownScale <= SCALE_SETTLED)
233
+ return 'scale-in';
234
+ }
235
+ return null;
236
+ }
237
+ /** True when an element stayed pinned (sticky/fixed, ~constant top) while scrolled. */
238
+ function isPinned(series) {
239
+ const pinned = series.filter((o) => o.position === 'sticky' || o.position === 'fixed');
240
+ if (pinned.length < 2)
241
+ return false;
242
+ const tops = pinned.map((o) => o.top);
243
+ const topRange = Math.max(...tops) - Math.min(...tops);
244
+ const scrollSpan = pinned[pinned.length - 1].scrollY - pinned[0].scrollY;
245
+ // Pinned only counts while the element is actually within the viewport band.
246
+ const inView = pinned.some((o) => o.top >= -STICKY_TOP_VARIANCE_PX && o.top <= o.viewportHeight);
247
+ return inView && topRange <= STICKY_TOP_VARIANCE_PX && scrollSpan >= PIN_MIN_SCROLL_PX;
248
+ }
249
+ /** Median translate rate of an element vs scroll, or null when it never moved with scroll. */
250
+ function translateRate(series) {
251
+ const rates = [];
252
+ for (let k = 1; k < series.length; k++) {
253
+ const prev = series[k - 1];
254
+ const cur = series[k];
255
+ const dScroll = cur.scrollY - prev.scrollY;
256
+ if (dScroll <= 0)
257
+ continue;
258
+ // Rigid content moves up by dScroll in viewport coords (top decreases by dScroll).
259
+ rates.push((prev.top - cur.top) / dScroll);
260
+ }
261
+ if (rates.length === 0)
262
+ return null;
263
+ rates.sort((a, b) => a - b);
264
+ const mid = Math.floor(rates.length / 2);
265
+ return rates.length % 2 ? rates[mid] : (rates[mid - 1] + rates[mid]) / 2;
266
+ }
267
+ /**
268
+ * Fold sampled scroll steps into a `RawScrollCapture`, or `undefined` when the
269
+ * page could not scroll (nothing to observe). Pure + deterministic.
270
+ */
271
+ export function detectRawScrollCapture(samples) {
272
+ if (samples.length < 2)
273
+ return undefined;
274
+ const viewportHeightPx = samples[0].viewportHeight;
275
+ const scrollHeightPx = Math.max(...samples.map((s) => s.scrollHeight));
276
+ if (viewportHeightPx <= 0)
277
+ return undefined;
278
+ if (scrollHeightPx - viewportHeightPx < MIN_SCROLL_RANGE_PX)
279
+ return undefined;
280
+ const byEl = seriesByElement(samples);
281
+ let revealCount = 0;
282
+ const kinds = new Set();
283
+ let stickyCount = 0;
284
+ let parallax = 0;
285
+ for (const series of byEl.values()) {
286
+ const pinned = isPinned(series);
287
+ if (pinned)
288
+ stickyCount++;
289
+ const kind = classifyReveal(series);
290
+ if (kind) {
291
+ revealCount++;
292
+ kinds.add(kind);
293
+ }
294
+ if (!pinned) {
295
+ const rate = translateRate(series);
296
+ if (rate !== null) {
297
+ const isSlow = rate > PARALLAX_SLOW_LO && rate < PARALLAX_SLOW_HI;
298
+ const isFast = rate > PARALLAX_FAST;
299
+ if (isSlow || isFast)
300
+ parallax = Math.max(parallax, clamp01(Math.abs(rate - 1)));
301
+ }
302
+ }
303
+ }
304
+ const reveals = { count: revealCount, kinds: [...kinds].sort() };
305
+ return {
306
+ scrollHeightPx,
307
+ viewportHeightPx,
308
+ steps: samples.length,
309
+ reveals,
310
+ stickyCount,
311
+ parallax: round2(parallax),
312
+ };
313
+ }
314
+ // ── (3) pure rollup — RawScrollCapture → ScrollMotionDNA ──────────────────────
315
+ /**
316
+ * Normalise a raw scroll capture into the DNA-altitude `ScrollMotionDNA`,
317
+ * computing the derived `pageHeightRatio` and the `scrollDriven` verdict the raw
318
+ * capture leaves to the fold. Pure + deterministic.
319
+ */
320
+ export function foldScrollMotion(raw) {
321
+ const pageHeightRatio = raw.viewportHeightPx > 0 ? round2(raw.scrollHeightPx / raw.viewportHeightPx) : 0;
322
+ const scrollDriven = raw.reveals.count >= SCROLL_DRIVEN_MIN_REVEALS ||
323
+ raw.stickyCount >= 1 ||
324
+ raw.parallax >= SCROLL_DRIVEN_MIN_PARALLAX;
325
+ return {
326
+ pageHeightRatio,
327
+ reveals: { count: raw.reveals.count, kinds: [...raw.reveals.kinds] },
328
+ stickyCount: raw.stickyCount,
329
+ parallax: raw.parallax,
330
+ scrollDriven,
331
+ };
332
+ }
333
+ // ── live harness behind the narrow seam ──────────────────────────────────────
334
+ const DEFAULT_STEPS = 12;
335
+ const DEFAULT_SETTLE_MS = 160;
336
+ const MAX_TRACKED_ELEMENTS = 900;
337
+ /**
338
+ * Build a no-arg page function that runs `scrollSampleCollector` with the
339
+ * resolved tunables baked in as literals. The locked `ScrollCapturePage.evaluate`
340
+ * seam is no-arg, and a serialised closure cannot carry config, so the values are
341
+ * inlined into the function source. `Function` runs only in Node to mint the
342
+ * wrapper; Playwright serialises and runs it in the page (CDP eval — not subject
343
+ * to page CSP).
344
+ */
345
+ function buildPageCollector(steps, settleMs, maxElements) {
346
+ const src = scrollSampleCollector.toString();
347
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
348
+ return new Function(`return (${src})(${steps}, ${settleMs}, ${maxElements})`);
349
+ }
350
+ /**
351
+ * The shipped `ScrollCapturer`: drive a stepped top→bottom scroll on an already
352
+ * open, settled page and fold it to a `RawScrollCapture`. Browser-free — depends
353
+ * only on the `ScrollCapturePage.evaluate` seam — so a fake page drives it in
354
+ * unit tests. Returns `undefined` when the page cannot scroll or evaluation fails.
355
+ */
356
+ export function createScrollCapturer() {
357
+ return {
358
+ async capture(page, opts = {}) {
359
+ const steps = clampInt(opts.steps ?? DEFAULT_STEPS, 3, 24);
360
+ const settleMs = clampInt(opts.settleMs ?? DEFAULT_SETTLE_MS, 0, 1000);
361
+ let samples;
362
+ try {
363
+ samples = await page.evaluate(buildPageCollector(steps, settleMs, MAX_TRACKED_ELEMENTS));
364
+ }
365
+ catch {
366
+ return undefined;
367
+ }
368
+ if (!Array.isArray(samples) || samples.length === 0)
369
+ return undefined;
370
+ return detectRawScrollCapture(samples);
371
+ },
372
+ };
373
+ }
374
+ //# sourceMappingURL=scroll-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-capture.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/dna/scroll-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Engine budget accounting — the PURE home for all concurrency + judge-cost math.
3
+ *
4
+ * `planJudgeBudget` decides how many pairwise comparisons each leg can afford
5
+ * under an `EngineBudget`, and `mapWithConcurrency` runs independent async work
6
+ * with a bounded in-flight pool. Both are deterministic and IO/LLM-free so the
7
+ * orchestrator and the adapters stay thin — no module re-derives "how many calls
8
+ * can we afford" or hand-rolls a worker pool.
9
+ *
10
+ * Cost model (the single invariant every consumer relies on): one pairwise
11
+ * comparison is judged in BOTH slot orders (A/B then B/A) to debias position, so
12
+ * each comparison costs `2` judge calls per repetition. The total judge calls a
13
+ * plan implies is therefore:
14
+ *
15
+ * (directionPairs + qualityPairs) × 2 × reps ≤ budget.maxJudgeCalls
16
+ *
17
+ * `qualityPairs` folds in the per-`Dimension` expansion of the absolute quality
18
+ * leg: judging each of the `k` exemplars across `qualityDimensions` dimensions is
19
+ * `k × qualityDimensions` comparisons (or `k` overall-only comparisons when no
20
+ * dimension budget is affordable). When the full dimension set doesn't fit, the
21
+ * plan drops `qualityDimensions` to 0 — an honest overall-only leg — rather than
22
+ * fabricating per-dimension win-rates the budget never paid for.
23
+ */
24
+ import type { EngineBudget } from '../contracts.js';
25
+ /**
26
+ * A resolved judging plan. Every count is what the engine will actually issue,
27
+ * already bounded by `budget.maxJudgeCalls`.
28
+ */
29
+ export interface JudgeBudgetPlan {
30
+ /** Distinct direction-vs-direction pairs to judge (relative ranking leg). */
31
+ directionPairs: number;
32
+ /** Page-vs-exemplar comparisons to judge (absolute quality leg). */
33
+ qualityPairs: number;
34
+ /** Repetitions per comparison (each rep = both slot orders). */
35
+ reps: number;
36
+ /**
37
+ * Number of product dimensions the quality leg can afford to judge per-dim.
38
+ * 0 ⇒ overall-only (no per-`Dimension` win-rates are produced).
39
+ */
40
+ qualityDimensions: number;
41
+ }
42
+ /**
43
+ * Plan the judge budget for one engine run.
44
+ *
45
+ * Preference order (richest → leanest), stopping at the first plan that fits
46
+ * `budget.maxJudgeCalls`:
47
+ * 1. full per-`Dimension` quality leg at the configured `judgeReps`,
48
+ * 2. overall-only quality leg at `judgeReps`, then walking reps down to 1.
49
+ * Dimensions are dropped before reps because a dimension-scoped leg is opt-in,
50
+ * whereas repetitions buy debiasing on every comparison. If even the leanest
51
+ * plan overflows (a pathologically small `maxJudgeCalls`), the pairs themselves
52
+ * are capped — direction pairs first (winner selection is the core artifact),
53
+ * then the overall quality pairs — so the returned plan never exceeds budget.
54
+ */
55
+ export declare function planJudgeBudget(directionCount: number, k: number, budget: EngineBudget, dimensions?: number): JudgeBudgetPlan;
56
+ /**
57
+ * Map `fn` over `items` with at most `n` calls in flight at once, preserving
58
+ * input order in the output. The first rejection propagates (in-flight siblings
59
+ * are not cancelled, mirroring `Promise.all`). A non-positive / non-finite `n`
60
+ * is treated as 1; concurrency never exceeds `items.length`.
61
+ */
62
+ export declare function mapWithConcurrency<T, R>(items: T[], n: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
63
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAKnD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAA;IACtB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,eAAe,CAsCjB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,CAAC,EAAE,EACV,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd"}