@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,110 @@
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
+ /** Both slot orders are judged per repetition to neutralise position bias. */
25
+ const SLOT_ORDERS_PER_REP = 2;
26
+ /** Unique unordered pairs over `n` items: C(n, 2). */
27
+ function pairCount(n) {
28
+ if (!Number.isFinite(n) || n < 2)
29
+ return 0;
30
+ const k = Math.floor(n);
31
+ return (k * (k - 1)) / 2;
32
+ }
33
+ function nonNegInt(n) {
34
+ if (!Number.isFinite(n) || n <= 0)
35
+ return 0;
36
+ return Math.floor(n);
37
+ }
38
+ /**
39
+ * Plan the judge budget for one engine run.
40
+ *
41
+ * Preference order (richest → leanest), stopping at the first plan that fits
42
+ * `budget.maxJudgeCalls`:
43
+ * 1. full per-`Dimension` quality leg at the configured `judgeReps`,
44
+ * 2. overall-only quality leg at `judgeReps`, then walking reps down to 1.
45
+ * Dimensions are dropped before reps because a dimension-scoped leg is opt-in,
46
+ * whereas repetitions buy debiasing on every comparison. If even the leanest
47
+ * plan overflows (a pathologically small `maxJudgeCalls`), the pairs themselves
48
+ * are capped — direction pairs first (winner selection is the core artifact),
49
+ * then the overall quality pairs — so the returned plan never exceeds budget.
50
+ */
51
+ export function planJudgeBudget(directionCount, k, budget, dimensions) {
52
+ const maxCalls = nonNegInt(budget.maxJudgeCalls);
53
+ const directionPairs = pairCount(directionCount);
54
+ const kk = nonNegInt(k);
55
+ const requestedDims = nonNegInt(dimensions ?? 0);
56
+ const repsFull = Math.max(1, nonNegInt(budget.judgeReps) || 1);
57
+ const qualityPairsFor = (qDims) => (qDims > 0 ? kk * qDims : kk);
58
+ const callsFor = (qDims, reps) => (directionPairs + qualityPairsFor(qDims)) * SLOT_ORDERS_PER_REP * reps;
59
+ // Candidate plans in strict preference order.
60
+ const candidates = [];
61
+ if (requestedDims > 0)
62
+ candidates.push({ qDims: requestedDims, reps: repsFull });
63
+ for (let reps = repsFull; reps >= 1; reps--)
64
+ candidates.push({ qDims: 0, reps });
65
+ for (const c of candidates) {
66
+ if (callsFor(c.qDims, c.reps) <= maxCalls) {
67
+ return {
68
+ directionPairs,
69
+ qualityPairs: qualityPairsFor(c.qDims),
70
+ reps: c.reps,
71
+ qualityDimensions: c.qDims,
72
+ };
73
+ }
74
+ }
75
+ // Nothing fits even at reps=1, overall-only: cap the pairs to whatever the
76
+ // budget allows, prioritising the direction (winner-selection) leg.
77
+ const affordablePairs = Math.floor(maxCalls / SLOT_ORDERS_PER_REP);
78
+ const cappedDirectionPairs = Math.min(directionPairs, affordablePairs);
79
+ const cappedQualityPairs = Math.min(kk, affordablePairs - cappedDirectionPairs);
80
+ return {
81
+ directionPairs: cappedDirectionPairs,
82
+ qualityPairs: cappedQualityPairs,
83
+ reps: 1,
84
+ qualityDimensions: 0,
85
+ };
86
+ }
87
+ /**
88
+ * Map `fn` over `items` with at most `n` calls in flight at once, preserving
89
+ * input order in the output. The first rejection propagates (in-flight siblings
90
+ * are not cancelled, mirroring `Promise.all`). A non-positive / non-finite `n`
91
+ * is treated as 1; concurrency never exceeds `items.length`.
92
+ */
93
+ export async function mapWithConcurrency(items, n, fn) {
94
+ const results = new Array(items.length);
95
+ if (items.length === 0)
96
+ return results;
97
+ const limit = Math.max(1, Math.min(nonNegInt(n) || 1, items.length));
98
+ let next = 0;
99
+ async function worker() {
100
+ for (;;) {
101
+ const i = next++;
102
+ if (i >= items.length)
103
+ return;
104
+ results[i] = await fn(items[i], i);
105
+ }
106
+ }
107
+ await Promise.all(Array.from({ length: limit }, () => worker()));
108
+ return results;
109
+ }
110
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The single reference-grounded sequencer — ORCH, no domain logic of its own.
3
+ *
4
+ * `runRedesignCore` threads one page through the locked data flow (ARCHITECTURE
5
+ * §2): extract DNA → embed → retrieve → guard → generate → judge (absolute
6
+ * quality + relative direction legs) → rank → score → assemble artifact →
7
+ * project findings. EVERY decision is delegated to a pure core (`guard`,
8
+ * `budget`, `score-core`, `artifact/*`, `judge/*`, `dna/*`) or an injected
9
+ * boundary on `deps`; this file only orders the stages and shapes the inputs
10
+ * each stage already expects. It imports NO concrete IO/LLM adapter — those are
11
+ * supplied by `engine/wiring` at the composition root and arrive as the narrow
12
+ * `ReferenceEngineDeps` interfaces.
13
+ *
14
+ * Fail-closed, never fake-success:
15
+ * - the `guard` aborts (throws its reason) when there is nothing to ground
16
+ * against, so an ungrounded run can never masquerade as reference-grounded;
17
+ * - a generator that yields zero directions throws rather than emitting an
18
+ * empty artifact;
19
+ * - `buildRedesignArtifact` throws on fabricated provenance.
20
+ *
21
+ * Acquire-once: the core retrieves against the pre-loaded `input.corpus` and
22
+ * NEVER calls `store.load()` — loading the corpus once per run is the
23
+ * entrypoint's job (it protects the ±0.5 reproducibility gate across pages/reps).
24
+ */
25
+ import type { ReferenceEngineDeps, RedesignCoreInput, RedesignRunResult } from '../contracts.js';
26
+ /**
27
+ * Run one page through the reference-grounded engine. Pure-ish: every impure
28
+ * boundary (browser extract, embed, LLM generate/judge, corpus disk) is reached
29
+ * only through the injected `deps`, so the whole sequencer unit-tests with fakes.
30
+ */
31
+ export declare function runRedesignCore(deps: ReferenceEngineDeps, input: RedesignCoreInput): Promise<RedesignRunResult>;
32
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAclB,MAAM,iBAAiB,CAAA;AA0BxB;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAoI5B"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * The single reference-grounded sequencer — ORCH, no domain logic of its own.
3
+ *
4
+ * `runRedesignCore` threads one page through the locked data flow (ARCHITECTURE
5
+ * §2): extract DNA → embed → retrieve → guard → generate → judge (absolute
6
+ * quality + relative direction legs) → rank → score → assemble artifact →
7
+ * project findings. EVERY decision is delegated to a pure core (`guard`,
8
+ * `budget`, `score-core`, `artifact/*`, `judge/*`, `dna/*`) or an injected
9
+ * boundary on `deps`; this file only orders the stages and shapes the inputs
10
+ * each stage already expects. It imports NO concrete IO/LLM adapter — those are
11
+ * supplied by `engine/wiring` at the composition root and arrive as the narrow
12
+ * `ReferenceEngineDeps` interfaces.
13
+ *
14
+ * Fail-closed, never fake-success:
15
+ * - the `guard` aborts (throws its reason) when there is nothing to ground
16
+ * against, so an ungrounded run can never masquerade as reference-grounded;
17
+ * - a generator that yields zero directions throws rather than emitting an
18
+ * empty artifact;
19
+ * - `buildRedesignArtifact` throws on fabricated provenance.
20
+ *
21
+ * Acquire-once: the core retrieves against the pre-loaded `input.corpus` and
22
+ * NEVER calls `store.load()` — loading the corpus once per run is the
23
+ * entrypoint's job (it protects the ±0.5 reproducibility gate across pages/reps).
24
+ */
25
+ import { summarizeDNA } from '../dna/derive.js';
26
+ import { aestheticDescriptor, structuralFeatures } from '../dna/descriptor.js';
27
+ import { dnaDelta } from '../dna/delta.js';
28
+ import { DEFAULT_RETRIEVE_WEIGHTS } from '../config.js';
29
+ import { DIMENSIONS } from '../../score-types.js';
30
+ import { planJudgeBudget, mapWithConcurrency } from './budget.js';
31
+ import { decideProceed } from './guard.js';
32
+ import { deriveHeadlineScore, toDimensionScores, toDesignSystemScore } from './score-core.js';
33
+ import { assessPageQuality } from '../judge/quality.js';
34
+ import { judgePair } from '../judge/pairwise.js';
35
+ import { buildRedesignArtifact } from '../artifact/build.js';
36
+ import { directionToFindings } from '../artifact/to-findings.js';
37
+ // Stable id + seed rating for the synthetic exemplar minted from an operator
38
+ // `--reference`. The reference "stands in for (or augments) corpus retrieval"
39
+ // (contracts `ReferenceContext`): wrapping it as a `RetrievalResult` lets the
40
+ // generator ground in it, the absolute quality leg compare against it, and the
41
+ // artifact cite it — through the SAME shapes the corpus path already uses, so no
42
+ // stage needs a reference-only code branch. `1500` mirrors the corpus seed elo
43
+ // (corpus/build.SEED_ELO) without importing that L2 adapter into the core.
44
+ const REFERENCE_EXEMPLAR_ID = 'reference';
45
+ const REFERENCE_SEED_ELO = 1500;
46
+ // Budget for the direction subject's spec dump fed to the judge.
47
+ const DIRECTION_SUMMARY_MAX_CHARS = 1200;
48
+ /**
49
+ * Run one page through the reference-grounded engine. Pure-ish: every impure
50
+ * boundary (browser extract, embed, LLM generate/judge, corpus disk) is reached
51
+ * only through the injected `deps`, so the whole sequencer unit-tests with fakes.
52
+ */
53
+ export async function runRedesignCore(deps, input) {
54
+ const { config } = input;
55
+ // Token accounting: both LLM legs report their cost. The judge boundary
56
+ // surfaces `RawVerdict.tokensUsed` per comparison — wrap it once so every
57
+ // debias / quality call funnels into one counter. `RedesignGenerator.generate`
58
+ // surfaces the summed generation tokens (folded in below). Adding the two
59
+ // yields a COMPLETE `tokensUsed` (generation + judging), never a judge-only
60
+ // undercount.
61
+ let judgeTokens = 0;
62
+ const judge = {
63
+ id: deps.judge.id,
64
+ async compare(judgeInput) {
65
+ const verdict = await deps.judge.compare(judgeInput);
66
+ judgeTokens += verdict.tokensUsed ?? 0;
67
+ return verdict;
68
+ },
69
+ };
70
+ // 1. Page → DesignDNA (folds in the already-gathered measurement signals).
71
+ const { dna } = await deps.extractor.extract({ url: input.url, measurements: input.measurements });
72
+ // 2. DNA → authoritative aesthetic vector (embedded ONCE) + structural vector.
73
+ const vectors = await deps.embedder.embed([aestheticDescriptor(dna)]);
74
+ const aestheticVector = vectors[0] ?? [];
75
+ const query = {
76
+ pageType: input.classification.type,
77
+ jobToBeDone: input.classification.intent,
78
+ aestheticVector,
79
+ structuralVector: structuralFeatures(dna),
80
+ };
81
+ // 3. Retrieve k nearest exemplars; an operator reference is prepended as an
82
+ // always-included grounding signal that augments the corpus hits.
83
+ const corpusHits = deps.matcher.retrieve(query, input.corpus, DEFAULT_RETRIEVE_WEIGHTS).slice(0, config.k);
84
+ const hits = config.reference
85
+ ? [referenceHit(config.reference, input.classification), ...corpusHits]
86
+ : corpusHits;
87
+ // 4. Fail-closed gate: nothing to ground against ⇒ abort with the reason.
88
+ const decision = decideProceed({
89
+ corpusSize: input.corpus.length,
90
+ retrieved: hits.length,
91
+ ...(config.reference ? { reference: config.reference } : {}),
92
+ });
93
+ if (!decision.ok)
94
+ throw new Error(decision.reason);
95
+ // 5. Generate the grounded redesign directions (concurrent inside the adapter).
96
+ const ctx = {
97
+ url: input.url,
98
+ classification: input.classification,
99
+ dna,
100
+ measurements: input.measurements,
101
+ };
102
+ const { directions, tokensUsed: generationTokens } = await deps.generator.generate(ctx, hits, {
103
+ count: config.directionCount,
104
+ });
105
+ if (directions.length === 0) {
106
+ throw new Error('reference engine: generator produced no redesign directions (all generation calls failed); ' +
107
+ 'refusing to emit an empty reference-grounded artifact');
108
+ }
109
+ // Plan both judging legs from the ACTUAL direction count + retrieved exemplars.
110
+ const plan = planJudgeBudget(directions.length, hits.length, config.budget, DIMENSIONS.length);
111
+ const dimensions = plan.qualityDimensions > 0 ? DIMENSIONS.slice(0, plan.qualityDimensions) : [];
112
+ // 6. Judge legs run with overlap: the absolute quality leg (page vs exemplars)
113
+ // and the relative direction-ranking leg are independent.
114
+ const pageSubject = {
115
+ id: 'page',
116
+ dnaSummary: summarizeDNA(dna),
117
+ ...(input.screenshotPath ? { screenshotPath: input.screenshotPath } : {}),
118
+ };
119
+ const exemplarSubjects = hits.map((hit) => exemplarSubject(hit, (e) => deps.store.resolveScreenshot(e)));
120
+ // Bound the quality leg to the exemplar count the budget actually paid for
121
+ // (qualityPairs already folds in the per-dimension expansion).
122
+ const qualityExemplarCount = Math.floor(plan.qualityPairs / Math.max(1, plan.qualityDimensions));
123
+ const qualityExemplars = exemplarSubjects.slice(0, Math.max(0, qualityExemplarCount));
124
+ const [quality, verdicts] = await Promise.all([
125
+ assessPageQuality(judge, pageSubject, qualityExemplars, dimensions.length > 0 ? { dimensions } : {}),
126
+ judgeDirectionLeg(judge, directions, plan.directionPairs, plan.reps, config.budget.concurrency, config.reference),
127
+ ]);
128
+ // Complete cost: judge tokens funnelled through the wrapped boundary above plus
129
+ // the generation tokens the generator summed. Both surfaces (artifact + result)
130
+ // report this total so neither undercounts to judge-only.
131
+ const tokensUsed = judgeTokens + generationTokens;
132
+ // 7. Roll the relative verdicts up into a winner.
133
+ const ranking = deps.ranker.rank(directions.map((d) => d.id), verdicts);
134
+ // 8. Single scoring authority: every surface derives from `quality`.
135
+ const headlineScore = deriveHeadlineScore(quality, input.measurements);
136
+ const dimensionScores = toDimensionScores(quality);
137
+ const designSystemScore = toDesignSystemScore(quality);
138
+ // 9. Assemble the rich artifact (winner first) + project the v1 findings.
139
+ const referenceId = config.reference ? REFERENCE_EXEMPLAR_ID : undefined;
140
+ const artifact = buildRedesignArtifact({
141
+ url: input.url,
142
+ directions,
143
+ ranking,
144
+ retrieval: hits,
145
+ verdicts,
146
+ tokensUsed,
147
+ ...(referenceId ? { referenceId } : {}),
148
+ });
149
+ const winner = artifact.directions[0];
150
+ if (!winner)
151
+ throw new Error('reference engine: ranking produced no winning direction');
152
+ const gapTarget = resolveGapTarget(config.reference, winner, hits, dna);
153
+ const findings = directionToFindings(winner, dnaDelta(dna, gapTarget), input.measurements, dna, hits);
154
+ return {
155
+ artifact,
156
+ quality,
157
+ headlineScore,
158
+ dimensionScores,
159
+ designSystemScore,
160
+ findings,
161
+ classification: input.classification,
162
+ measurements: input.measurements,
163
+ tokensUsed,
164
+ };
165
+ }
166
+ /**
167
+ * The relative leg: judge unique direction pairs (bounded by the budget plan)
168
+ * against the named reference, position-debiased, run with bounded concurrency.
169
+ */
170
+ async function judgeDirectionLeg(judge, directions, maxPairs, reps, concurrency, reference) {
171
+ const subjects = directions.map(directionSubject);
172
+ const pairs = [];
173
+ for (let i = 0; i < directions.length; i++) {
174
+ for (let j = i + 1; j < directions.length; j++)
175
+ pairs.push([i, j]);
176
+ }
177
+ const planned = pairs.slice(0, Math.max(0, maxPairs));
178
+ return mapWithConcurrency(planned, concurrency, ([i, j]) => judgePair(judge, {
179
+ a: subjects[i],
180
+ b: subjects[j],
181
+ ...(reference ? { reference } : {}),
182
+ }, reps));
183
+ }
184
+ /**
185
+ * A retrieved exemplar as a judge subject (DNA spec dump, optional screenshot).
186
+ * The corpus stores `screenshotPath` RELATIVE to the corpus dir, so it is resolved
187
+ * to an absolute path through the store before reaching a vision judge that reads
188
+ * it off disk; the reference hit's already-absolute path passes through unchanged.
189
+ * Byte-neutral for the text judge, which never reads the field.
190
+ */
191
+ function exemplarSubject(hit, resolveScreenshot) {
192
+ const screenshotPath = resolveScreenshot(hit.exemplar);
193
+ return {
194
+ id: hit.exemplar.id,
195
+ dnaSummary: summarizeDNA(hit.exemplar.dna),
196
+ ...(screenshotPath ? { screenshotPath } : {}),
197
+ };
198
+ }
199
+ /**
200
+ * A generated direction as a judge subject: evocative headline + spec dump. NO
201
+ * `screenshotPath` — directions are unrendered specs, so the direction-ranking
202
+ * leg stays text-only (a vision judge falls back to text here). Future lever:
203
+ * render each direction to a screenshot to make this leg vision-judgeable too.
204
+ */
205
+ function directionSubject(direction) {
206
+ return {
207
+ id: direction.id,
208
+ directionSummary: `${direction.name} — ${direction.rationale}`,
209
+ dnaSummary: summarizeDirectionSpec(direction),
210
+ };
211
+ }
212
+ /**
213
+ * A compact, budget-bounded summary of a direction's PROPOSED systems for the
214
+ * judge. Renders the spec (type/colour/motion/hierarchy) the direction defines —
215
+ * NOT an extracted DNA, which a not-yet-built redesign has none of.
216
+ */
217
+ function summarizeDirectionSpec(d) {
218
+ const t = d.typeSystem;
219
+ const c = d.colorSystem;
220
+ const m = d.motionSpec;
221
+ const lines = [
222
+ `type: families ${t.families.join(' ') || 'system'}; scale ${t.scalePx.join('/') || 'n/a'}px; ratio ~${t.ratio}×`,
223
+ `colour: primary ${c.primary}${c.accent ? `, accent ${c.accent}` : ''}, background ${c.background}, neutrals ${c.neutrals.join(' ') || 'n/a'}`,
224
+ `motion: ${m.durationsMs.join('/') || 'none'}ms ${m.easings.join(' ') || 'no-easing'}${m.cues.length ? `; ${m.cues.join('; ')}` : ''}`,
225
+ `hierarchy: ${d.hierarchy.join(' → ') || 'n/a'}`,
226
+ ];
227
+ const body = lines.join('\n');
228
+ return body.length > DIRECTION_SUMMARY_MAX_CHARS ? `${body.slice(0, DIRECTION_SUMMARY_MAX_CHARS - 1)}…` : body;
229
+ }
230
+ /**
231
+ * The DNA the winner is measured AGAINST when minting the gap findings. Prefers
232
+ * the explicit operator reference, then the winner's first grounding exemplar,
233
+ * then the top retrieved exemplar, and finally the page itself (a zero delta) so
234
+ * a finding set is always produced rather than a crash.
235
+ */
236
+ function resolveGapTarget(reference, winner, hits, current) {
237
+ if (reference)
238
+ return reference.dna;
239
+ const groundedId = winner.groundedInExemplarIds[0];
240
+ const grounded = groundedId ? hits.find((h) => h.exemplar.id === groundedId) : undefined;
241
+ return grounded?.exemplar.dna ?? hits[0]?.exemplar.dna ?? current;
242
+ }
243
+ /**
244
+ * Wrap an operator reference as a synthetic `RetrievalResult` so it flows through
245
+ * the same generate / judge / artifact stages as a corpus exemplar.
246
+ */
247
+ function referenceHit(reference, classification) {
248
+ const exemplar = {
249
+ id: REFERENCE_EXEMPLAR_ID,
250
+ source: 'manual',
251
+ url: reference.dna.url,
252
+ pageType: classification.type,
253
+ jobToBeDone: classification.intent,
254
+ dna: reference.dna,
255
+ screenshotPath: reference.screenshotPath ?? '',
256
+ aestheticVector: [],
257
+ eloRating: REFERENCE_SEED_ELO,
258
+ };
259
+ return { exemplar, score: 1, reasons: [`operator reference (${reference.kind})`] };
260
+ }
261
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Fail-closed proceed/abort guard — the PURE gate that keeps the engine from
3
+ * shipping a default-looking run mislabelled as reference-grounded.
4
+ *
5
+ * A reference-grounded run is only meaningful when it has something concrete to
6
+ * ground against: at least one retrieved exemplar, OR an operator-supplied
7
+ * `--reference`. With neither, `decideProceed` returns an explicit abort reason
8
+ * instead of letting the engine emit an ungrounded artifact that pretends to be
9
+ * reference-grounded. There is no fabricated success path here — an absent
10
+ * signal is treated as a blocker, never silently as "passed".
11
+ *
12
+ * Pure and deterministic: no IO, no LLM, no clock.
13
+ */
14
+ import type { ReferenceContext } from '../contracts.js';
15
+ /** Inputs to the proceed decision. All counts are post-retrieval. */
16
+ export interface GuardInput {
17
+ /** Number of exemplars loaded into the in-memory corpus for this run. */
18
+ corpusSize: number;
19
+ /** Number of exemplars the matcher actually retrieved for this page. */
20
+ retrieved: number;
21
+ /** Operator-supplied reference, resolved once; stands in for the corpus. */
22
+ reference?: ReferenceContext;
23
+ }
24
+ /**
25
+ * Discriminated result: proceed, or abort with a human-readable reason. The
26
+ * reason is surfaced to the operator and recorded — never swallowed.
27
+ */
28
+ export type ProceedDecision = {
29
+ ok: true;
30
+ } | {
31
+ ok: false;
32
+ reason: string;
33
+ };
34
+ /**
35
+ * Decide whether a reference-grounded run may proceed.
36
+ *
37
+ * An operator reference short-circuits to `ok` (it is itself the grounding
38
+ * target, so an empty corpus is fine). Otherwise both a non-empty corpus AND a
39
+ * non-empty retrieval are required; either being empty is a terminal blocker
40
+ * with a distinct reason so the operator knows which precondition failed.
41
+ */
42
+ export declare function decideProceed(input: GuardInput): ProceedDecision;
43
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAO1E;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAoBhE"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Fail-closed proceed/abort guard — the PURE gate that keeps the engine from
3
+ * shipping a default-looking run mislabelled as reference-grounded.
4
+ *
5
+ * A reference-grounded run is only meaningful when it has something concrete to
6
+ * ground against: at least one retrieved exemplar, OR an operator-supplied
7
+ * `--reference`. With neither, `decideProceed` returns an explicit abort reason
8
+ * instead of letting the engine emit an ungrounded artifact that pretends to be
9
+ * reference-grounded. There is no fabricated success path here — an absent
10
+ * signal is treated as a blocker, never silently as "passed".
11
+ *
12
+ * Pure and deterministic: no IO, no LLM, no clock.
13
+ */
14
+ /** A finite, strictly-positive count. Non-finite / negative ⇒ treated as zero. */
15
+ function positive(n) {
16
+ return Number.isFinite(n) && n > 0;
17
+ }
18
+ /**
19
+ * Decide whether a reference-grounded run may proceed.
20
+ *
21
+ * An operator reference short-circuits to `ok` (it is itself the grounding
22
+ * target, so an empty corpus is fine). Otherwise both a non-empty corpus AND a
23
+ * non-empty retrieval are required; either being empty is a terminal blocker
24
+ * with a distinct reason so the operator knows which precondition failed.
25
+ */
26
+ export function decideProceed(input) {
27
+ if (input.reference)
28
+ return { ok: true };
29
+ if (!positive(input.corpusSize)) {
30
+ return {
31
+ ok: false,
32
+ reason: 'reference-grounded run requires a non-empty exemplar corpus or a --reference; the corpus is empty',
33
+ };
34
+ }
35
+ if (!positive(input.retrieved)) {
36
+ return {
37
+ ok: false,
38
+ reason: 'reference-grounded run retrieved 0 exemplars for this page type and no --reference was supplied; nothing to ground against',
39
+ };
40
+ }
41
+ return { ok: true };
42
+ }
43
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoBH,kFAAkF;AAClF,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAExC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,mGAAmG;SACtG,CAAA;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,4HAA4H;SAC/H,CAAA;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Scoring core — the SINGLE scoring authority for the reference-grounded engine.
3
+ *
4
+ * Everything the pipeline scores derives from ONE `QualityAssessment` (the
5
+ * absolute leg: the page-under-audit's win-rate vs the retrieved world-class
6
+ * exemplars). This module turns that one assessment into three honest surfaces,
7
+ * eliminating the double-scoring the v1 path risked:
8
+ *
9
+ * - `deriveHeadlineScore` → the 0-10 headline, monotonic in `overallWinRate`,
10
+ * capped when deterministic measurements flag blocking issues (you cannot be
11
+ * world-class with critical a11y/contrast failures).
12
+ * - `toDimensionScores` → the rich 5-`Dimension` `Record<Dimension, DimensionScore>`
13
+ * that IS stage-8's `precomputedScores` hook. Each dimension is scored ONLY
14
+ * from a genuinely judge-resolved per-dimension win-rate; a dimension with no
15
+ * signal is filled at `confidence:'low'` with an explicit "not assessed"
16
+ * summary — never the overall number stamped across dimensions.
17
+ * - `toDesignSystemScore` → the flat 8-axis `DesignSystemScore` back-compat
18
+ * field, an HONESTLY coarse projection of `overallWinRate` (not a second
19
+ * per-axis authority).
20
+ *
21
+ * Pure and deterministic: no IO, no LLM, no clock. Notably does NOT borrow
22
+ * `conservativeScore` — there are no per-pass page scores in this mode, so
23
+ * importing it would be scoring fiction.
24
+ */
25
+ import type { QualityAssessment, MeasurementBundle, Dimension, DimensionScore, DesignSystemScore } from '../contracts.js';
26
+ /**
27
+ * Derive the 0-10 headline from the absolute win-rate, capped when measurements
28
+ * flag blocking issues. Monotonic non-decreasing in `overallWinRate`: a higher
29
+ * win-rate never yields a lower headline.
30
+ */
31
+ export declare function deriveHeadlineScore(quality: QualityAssessment, measurements: MeasurementBundle): number;
32
+ /**
33
+ * Map the per-`Dimension` win-rates onto the rich `Record<Dimension, DimensionScore>`
34
+ * stage-8 consumes as `precomputedScores`. Every one of the 5 dimensions is
35
+ * present. Dimensions with a real per-dimension win-rate are scored from it
36
+ * (win-rate → score, comparison count → range + confidence); dimensions with no
37
+ * win-rate are filled as explicit, low-confidence placeholders so the absence of
38
+ * a dimension-scoped leg is honest rather than fabricated.
39
+ */
40
+ export declare function toDimensionScores(quality: QualityAssessment): Record<Dimension, DimensionScore>;
41
+ /**
42
+ * Project `overallWinRate` onto the flat 8-axis `DesignSystemScore` back-compat
43
+ * field. Every axis carries the same overall-derived 1-10 number — this is an
44
+ * honest coarse projection, NOT a second per-axis scoring authority (the judge
45
+ * resolves the 5 product dimensions, not these 8 design-system axes).
46
+ */
47
+ export declare function toDesignSystemScore(quality: QualityAssessment): DesignSystemScore;
48
+ //# sourceMappingURL=score-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-core.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/engine/score-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,iBAAiB,EAClB,MAAM,iBAAiB,CAAA;AA8BxB;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,iBAAiB,GAC9B,MAAM,CAMR;AAyCD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAWnC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CAYjF"}