@tangle-network/browser-agent-driver 0.33.3 → 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 +6 -2
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Redesign-direction parser — a PURE core of the generative layer.
3
+ *
4
+ * `parseDirection` turns one raw model response into a typed `RedesignDirection`
5
+ * or a typed `DirectionParseError`. It is FAIL-CLOSED by construction: malformed
6
+ * JSON, a missing/ill-typed field, an ungrounded direction, or a hallucinated
7
+ * exemplar id all yield an explicit error — never a fabricated or half-built
8
+ * direction. The generator drops errored calls rather than inventing content.
9
+ *
10
+ * Hostile-input safe: the response is parsed with `JSON.parse` only (no eval),
11
+ * and the returned direction is assembled FIELD-BY-FIELD from validated values,
12
+ * so unexpected keys (including `__proto__`) never leak into the result and no
13
+ * prototype is mutated.
14
+ *
15
+ * No IO, no LLM, no browser — unit-tested on string fixtures alone.
16
+ */
17
+ const fail = (reason) => ({ ok: false, reason });
18
+ const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
19
+ const isString = (v) => typeof v === 'string';
20
+ const isFiniteNumber = (v) => typeof v === 'number' && Number.isFinite(v);
21
+ const isStringArray = (v) => Array.isArray(v) && v.every(isString);
22
+ const isNumberArray = (v) => Array.isArray(v) && v.every(isFiniteNumber);
23
+ /**
24
+ * Pull the outermost JSON object out of a model response. Tolerates a leading
25
+ * markdown fence and any prose preamble/suffix the gateway wraps around the
26
+ * object. Returns null when no object literal is present.
27
+ */
28
+ function extractJsonObject(raw) {
29
+ let text = raw.trim();
30
+ if (text.startsWith('```')) {
31
+ text = text.replace(/^```(?:json)?\s*/i, '').replace(/```\s*$/i, '').trim();
32
+ }
33
+ const first = text.indexOf('{');
34
+ const last = text.lastIndexOf('}');
35
+ if (first < 0 || last <= first)
36
+ return null;
37
+ return text.slice(first, last + 1);
38
+ }
39
+ function parseTypeSystem(raw) {
40
+ if (!isRecord(raw))
41
+ return 'typeSystem must be an object';
42
+ if (!isStringArray(raw.families) || raw.families.length === 0)
43
+ return 'typeSystem.families must be a non-empty string[]';
44
+ if (!isNumberArray(raw.scalePx) || raw.scalePx.length === 0)
45
+ return 'typeSystem.scalePx must be a non-empty number[]';
46
+ if (!isFiniteNumber(raw.ratio))
47
+ return 'typeSystem.ratio must be a number';
48
+ if (!isString(raw.rationale))
49
+ return 'typeSystem.rationale must be a string';
50
+ return { families: raw.families, scalePx: raw.scalePx, ratio: raw.ratio, rationale: raw.rationale };
51
+ }
52
+ function parseColorSystem(raw) {
53
+ if (!isRecord(raw))
54
+ return 'colorSystem must be an object';
55
+ if (!isString(raw.primary))
56
+ return 'colorSystem.primary must be a string';
57
+ if (!isStringArray(raw.neutrals))
58
+ return 'colorSystem.neutrals must be a string[]';
59
+ if (!isString(raw.background))
60
+ return 'colorSystem.background must be a string';
61
+ if (!isString(raw.rationale))
62
+ return 'colorSystem.rationale must be a string';
63
+ if (raw.accent !== undefined && !isString(raw.accent))
64
+ return 'colorSystem.accent must be a string when present';
65
+ const spec = {
66
+ primary: raw.primary,
67
+ neutrals: raw.neutrals,
68
+ background: raw.background,
69
+ rationale: raw.rationale,
70
+ };
71
+ if (isString(raw.accent))
72
+ spec.accent = raw.accent;
73
+ return spec;
74
+ }
75
+ function parseMotionSpec(raw) {
76
+ if (!isRecord(raw))
77
+ return 'motionSpec must be an object';
78
+ if (!isNumberArray(raw.durationsMs))
79
+ return 'motionSpec.durationsMs must be a number[]';
80
+ if (!isStringArray(raw.easings))
81
+ return 'motionSpec.easings must be a string[]';
82
+ if (!isStringArray(raw.cues))
83
+ return 'motionSpec.cues must be a string[]';
84
+ return { durationsMs: raw.durationsMs, easings: raw.easings, cues: raw.cues };
85
+ }
86
+ function parseCopy(raw) {
87
+ if (!Array.isArray(raw))
88
+ return 'copy must be an array';
89
+ const out = [];
90
+ for (const item of raw) {
91
+ if (!isRecord(item))
92
+ return 'each copy entry must be an object';
93
+ if (!isString(item.location))
94
+ return 'copy[].location must be a string';
95
+ if (!isString(item.after))
96
+ return 'copy[].after must be a string';
97
+ if (item.before !== undefined && !isString(item.before))
98
+ return 'copy[].before must be a string when present';
99
+ const rev = { location: item.location, after: item.after };
100
+ if (isString(item.before))
101
+ rev.before = item.before;
102
+ out.push(rev);
103
+ }
104
+ return out;
105
+ }
106
+ /**
107
+ * Ids in `d.groundedInExemplarIds` that are NOT in `allowedIds` (the retrieved
108
+ * set). Empty ⇒ the direction is grounded only in real, retrieved exemplars.
109
+ */
110
+ export function validateGrounding(d, allowedIds) {
111
+ const allowed = new Set(allowedIds);
112
+ return d.groundedInExemplarIds.filter((id) => !allowed.has(id));
113
+ }
114
+ /**
115
+ * Parse one model response into a `RedesignDirection`. Fail-closed: any defect
116
+ * returns a `DirectionParseError`, never a partial or invented direction.
117
+ */
118
+ export function parseDirection(raw, allowedIds) {
119
+ const json = extractJsonObject(raw);
120
+ if (json === null)
121
+ return fail('no JSON object found in model output');
122
+ let parsed;
123
+ try {
124
+ parsed = JSON.parse(json);
125
+ }
126
+ catch (e) {
127
+ return fail(`invalid JSON: ${e instanceof Error ? e.message : String(e)}`);
128
+ }
129
+ if (!isRecord(parsed))
130
+ return fail('parsed value is not an object');
131
+ if (!isString(parsed.id))
132
+ return fail('missing or invalid field: id');
133
+ if (!isString(parsed.name))
134
+ return fail('missing or invalid field: name');
135
+ if (!isString(parsed.rationale))
136
+ return fail('missing or invalid field: rationale');
137
+ if (!isString(parsed.asciiLayout))
138
+ return fail('missing or invalid field: asciiLayout');
139
+ if (!isStringArray(parsed.hierarchy) || parsed.hierarchy.length === 0) {
140
+ return fail('hierarchy must be a non-empty string[]');
141
+ }
142
+ if (!isStringArray(parsed.groundedInExemplarIds)) {
143
+ return fail('missing or invalid field: groundedInExemplarIds');
144
+ }
145
+ const typeSystem = parseTypeSystem(parsed.typeSystem);
146
+ if (typeof typeSystem === 'string')
147
+ return fail(typeSystem);
148
+ const colorSystem = parseColorSystem(parsed.colorSystem);
149
+ if (typeof colorSystem === 'string')
150
+ return fail(colorSystem);
151
+ const motionSpec = parseMotionSpec(parsed.motionSpec);
152
+ if (typeof motionSpec === 'string')
153
+ return fail(motionSpec);
154
+ const copy = parseCopy(parsed.copy);
155
+ if (typeof copy === 'string')
156
+ return fail(copy);
157
+ // Assemble field-by-field — never spread `parsed` — so no unexpected key
158
+ // (e.g. `__proto__`) survives into the result.
159
+ const direction = {
160
+ id: parsed.id,
161
+ name: parsed.name,
162
+ rationale: parsed.rationale,
163
+ asciiLayout: parsed.asciiLayout,
164
+ typeSystem,
165
+ colorSystem,
166
+ motionSpec,
167
+ hierarchy: parsed.hierarchy,
168
+ copy,
169
+ groundedInExemplarIds: parsed.groundedInExemplarIds,
170
+ };
171
+ if (direction.groundedInExemplarIds.length === 0) {
172
+ return fail('direction is ungrounded (empty groundedInExemplarIds)');
173
+ }
174
+ const offenders = validateGrounding(direction, allowedIds);
175
+ if (offenders.length > 0) {
176
+ return fail(`grounded in unknown exemplar ids: ${offenders.join(', ')}`);
177
+ }
178
+ return { ok: true, direction };
179
+ }
180
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/generate/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Redesign-generation prompt builder — a PURE core of the generative layer.
3
+ *
4
+ * `buildDirectionPrompt` grounds ONE retrieved world-class exemplar's identity
5
+ * (id + DNA) into a single-direction generation request for the page under
6
+ * audit. The generator (`generate/generator.ts`) fans this out — one
7
+ * `brain.complete` per exemplar — so the N named `RedesignDirection`s emerge
8
+ * from N independent, individually-grounded calls rather than one mega-prompt.
9
+ *
10
+ * It performs NO IO, NO LLM, NO browser work and is byte-stable for fixed
11
+ * inputs (no clock, no randomness), so it unit-tests on static fixtures and a
12
+ * fixed-input snapshot pins its determinism.
13
+ *
14
+ * Budget discipline: both injected DNA summaries are bounded by `maxRefChars`
15
+ * (via the deterministic `summarizeDNA`) and any operator rubric is truncated,
16
+ * so a large reference can never blow the generation token budget.
17
+ */
18
+ import type { GenerationContext, RetrievalResult } from '../contracts.js';
19
+ /** Tuning knobs for the deterministic prompt. */
20
+ export interface DirectionPromptOptions {
21
+ /**
22
+ * Max chars for EACH injected DNA summary (page-under-audit + exemplar). The
23
+ * single lever that bounds the prompt's reference payload. px/ms values inside
24
+ * the summary are preserved; only the tail is clipped.
25
+ */
26
+ maxRefChars?: number;
27
+ }
28
+ /**
29
+ * Build the `{ system, user }` pair for a single reference-grounded redesign
30
+ * direction. Deterministic: identical inputs always yield identical strings.
31
+ */
32
+ export declare function buildDirectionPrompt(ctx: GenerationContext, exemplar: RetrievalResult, opts?: DirectionPromptOptions): {
33
+ system: string;
34
+ user: string;
35
+ };
36
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/generate/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGzE,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAgGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,eAAe,EACzB,IAAI,GAAE,sBAA2B,GAChC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAqBlC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Redesign-generation prompt builder — a PURE core of the generative layer.
3
+ *
4
+ * `buildDirectionPrompt` grounds ONE retrieved world-class exemplar's identity
5
+ * (id + DNA) into a single-direction generation request for the page under
6
+ * audit. The generator (`generate/generator.ts`) fans this out — one
7
+ * `brain.complete` per exemplar — so the N named `RedesignDirection`s emerge
8
+ * from N independent, individually-grounded calls rather than one mega-prompt.
9
+ *
10
+ * It performs NO IO, NO LLM, NO browser work and is byte-stable for fixed
11
+ * inputs (no clock, no randomness), so it unit-tests on static fixtures and a
12
+ * fixed-input snapshot pins its determinism.
13
+ *
14
+ * Budget discipline: both injected DNA summaries are bounded by `maxRefChars`
15
+ * (via the deterministic `summarizeDNA`) and any operator rubric is truncated,
16
+ * so a large reference can never blow the generation token budget.
17
+ */
18
+ import { summarizeDNA } from '../dna/derive.js';
19
+ const DEFAULT_MAX_REF_CHARS = 900;
20
+ // The composed rubric body can be arbitrarily long; cap it so scoring criteria
21
+ // never dominate the generation budget. Independent of `maxRefChars` (a
22
+ // different concern: criteria vs reference identity).
23
+ const MAX_RUBRIC_CHARS = 1600;
24
+ const truncate = (s, max) => s.length > max ? `${s.slice(0, max - 1)}…` : s;
25
+ /**
26
+ * The art-director persona + output contract. A module constant so the system
27
+ * half of every generation call is byte-identical run-to-run.
28
+ */
29
+ const GENERATION_SYSTEM_PROMPT = [
30
+ 'You are a world-class art director. You translate ONE concrete, named',
31
+ 'world-class reference into a single coherent, buildable redesign direction for',
32
+ 'the page under audit — not a menu of options, one opinionated direction.',
33
+ '',
34
+ 'Hard rules:',
35
+ '- Ground every decision in the named REFERENCE EXEMPLAR below. Echo its id in',
36
+ ' `groundedInExemplarIds`. NEVER invent, guess, or cite an exemplar id you',
37
+ ' were not given.',
38
+ '- Specify concrete values: hex colors, px type sizes, ms durations, and real',
39
+ ' revised copy strings — never placeholders like "TODO" or "lorem ipsum".',
40
+ '- The ASCII layout must be a real box-drawing diagram of the proposed page',
41
+ ' structure, top to bottom.',
42
+ '- Preserve or improve the page\'s measured accessibility (contrast, a11y).',
43
+ ' Never propose a change that would regress it.',
44
+ '- If the REFERENCE EXEMPLAR\'s DNA reports scroll-driven motion (scroll',
45
+ ' reveals, sticky pinning, or parallax) and the page does not, propose concrete',
46
+ ' scroll interactions in `motionSpec.cues`, naming the specific reveal, pin, or',
47
+ ' parallax grounded in that exemplar. NEVER invent scroll motion the exemplar',
48
+ ' does not show.',
49
+ '- Output STRICT JSON only: a single object matching the OUTPUT CONTRACT, with',
50
+ ' no surrounding prose and no markdown code fences.',
51
+ ].join('\n');
52
+ function renderPageBlock(ctx, maxRefChars) {
53
+ const c = ctx.classification;
54
+ return [
55
+ 'PAGE UNDER REDESIGN',
56
+ `url: ${ctx.url}`,
57
+ `type: ${c.type} domain: ${c.domain} maturity: ${c.maturity}`,
58
+ `intent: ${c.intent}`,
59
+ 'current design DNA:',
60
+ summarizeDNA(ctx.dna, { maxChars: maxRefChars }),
61
+ ].join('\n');
62
+ }
63
+ function renderExemplarBlock(hit, maxRefChars) {
64
+ const e = hit.exemplar;
65
+ const reasons = hit.reasons.length > 0 ? hit.reasons.join('; ') : 'nearest aesthetic neighbour';
66
+ return [
67
+ 'REFERENCE EXEMPLAR (ground every choice in this one page)',
68
+ `id: ${e.id} source: ${e.source} type: ${e.pageType}`,
69
+ `url: ${e.url}`,
70
+ `job-to-be-done: ${e.jobToBeDone}`,
71
+ `why it was retrieved: ${reasons}`,
72
+ 'its design DNA:',
73
+ summarizeDNA(e.dna, { maxChars: maxRefChars }),
74
+ ].join('\n');
75
+ }
76
+ function renderConstraints(ctx) {
77
+ const m = ctx.measurements;
78
+ if (!m)
79
+ return null;
80
+ const aa = m.contrast.summary.aaPassRate;
81
+ const blocking = m.a11y.violations.filter((v) => v.impact === 'critical' || v.impact === 'serious').length;
82
+ return [
83
+ 'GROUND-TRUTH CONSTRAINTS (deterministic — do not regress)',
84
+ `current AA contrast pass rate: ${aa}; blocking a11y issues: ${blocking}.`,
85
+ 'The redesign must keep contrast at or above this rate and must not introduce',
86
+ 'new blocking accessibility issues.',
87
+ ].join('\n');
88
+ }
89
+ const OUTPUT_CONTRACT = [
90
+ 'OUTPUT CONTRACT — return STRICT JSON matching this exact shape, nothing else:',
91
+ '{',
92
+ ' "id": "short-slug",',
93
+ ' "name": "evocative direction name",',
94
+ ' "rationale": "why this direction serves the page\'s job-to-be-done",',
95
+ ' "asciiLayout": "ASCII / box-drawing diagram of the proposed page structure",',
96
+ ' "typeSystem": { "families": ["Font A"], "scalePx": [14, 18, 24, 32], "ratio": 1.25, "rationale": "..." },',
97
+ ' "colorSystem": { "primary": "#2563eb", "accent": "#f59e0b", "neutrals": ["#111827", "#6b7280"], "background": "#ffffff", "rationale": "..." },',
98
+ ' "motionSpec": { "durationsMs": [160, 240], "easings": ["ease-out"], "cues": ["where motion is applied and why — name scroll reveals / sticky pins / parallax when grounded in a scroll-rich exemplar"] },',
99
+ ' "hierarchy": ["most prominent element", "...", "least prominent element"],',
100
+ ' "copy": [{ "location": "h1", "before": "current copy", "after": "revised copy" }],',
101
+ ' "groundedInExemplarIds": ["<the reference exemplar id above>"]',
102
+ '}',
103
+ ].join('\n');
104
+ /**
105
+ * Build the `{ system, user }` pair for a single reference-grounded redesign
106
+ * direction. Deterministic: identical inputs always yield identical strings.
107
+ */
108
+ export function buildDirectionPrompt(ctx, exemplar, opts = {}) {
109
+ const maxRefChars = opts.maxRefChars ?? DEFAULT_MAX_REF_CHARS;
110
+ const sections = [
111
+ renderPageBlock(ctx, maxRefChars),
112
+ renderExemplarBlock(exemplar, maxRefChars),
113
+ ];
114
+ const constraints = renderConstraints(ctx);
115
+ if (constraints)
116
+ sections.push(constraints);
117
+ if (ctx.rubricBody && ctx.rubricBody.trim().length > 0) {
118
+ sections.push(['SCORING CRITERIA (optimise the redesign against these)', truncate(ctx.rubricBody.trim(), MAX_RUBRIC_CHARS)].join('\n'));
119
+ }
120
+ sections.push(OUTPUT_CONTRACT);
121
+ sections.push(`Produce exactly ONE redesign direction grounded in exemplar "${exemplar.exemplar.id}". Return ONLY the JSON object.`);
122
+ return { system: GENERATION_SYSTEM_PROMPT, user: sections.join('\n\n') };
123
+ }
124
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/generate/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * L5 barrel — the public surface of the reference-grounded engine.
3
+ *
4
+ * Re-exports ONLY the entrypoints, the shared contracts, and the offline
5
+ * authoring + eval helpers a consumer is meant to call. The L1-L3 internals
6
+ * (pure cores, adapters, `engine/core`, `engine/wiring`) are deliberately NOT
7
+ * re-exported here — callers reach the engine through `runReferenceRedesign`
8
+ * (rich artifact) or `evaluateReferenceGrounded` (pipeline `PageAuditResult`),
9
+ * not by importing a stage.
10
+ */
11
+ export * from './contracts.js';
12
+ export { runReferenceRedesign } from './run.js';
13
+ export type { RunReferenceRedesignOptions } from './run.js';
14
+ export { evaluateReferenceGrounded } from './pipeline/evaluate-reference.js';
15
+ export type { EvaluateReferenceInput, ReferenceEvaluation } from './pipeline/evaluate-reference.js';
16
+ export { renderArtifactMarkdown, renderRedesignDirectionsSummary, renderRedesignTarget, artifactSlug } from './artifact/render.js';
17
+ export { resolveReferenceContext } from './reference-context.js';
18
+ export type { ResolveReferenceDeps, ResolveReferenceOptions } from './reference-context.js';
19
+ export { resolveReferenceConfig, DEFAULT_REFERENCE_CONFIG, DEFAULT_RETRIEVE_WEIGHTS, } from './config.js';
20
+ export type { ReferenceConfigOverrides } from './config.js';
21
+ export type { ReferenceBrain } from './engine/wiring.js';
22
+ export { createFileCorpusStore } from './corpus/store.js';
23
+ export { buildExemplar, ingestCorpus } from './corpus/build.js';
24
+ export type { BuildExemplarOptions, ExemplarClassifier, ExemplarClassifyInput, ExemplarClassification, IngestTarget, IngestCorpusOptions, IngestResult, } from './corpus/build.js';
25
+ export { tasteAgreement, tasteMetricsFromVerdicts } from './eval/taste-core.js';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/reference/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAG3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAKnG,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGlI,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAG3F,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAG3D,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/D,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * L5 barrel — the public surface of the reference-grounded engine.
3
+ *
4
+ * Re-exports ONLY the entrypoints, the shared contracts, and the offline
5
+ * authoring + eval helpers a consumer is meant to call. The L1-L3 internals
6
+ * (pure cores, adapters, `engine/core`, `engine/wiring`) are deliberately NOT
7
+ * re-exported here — callers reach the engine through `runReferenceRedesign`
8
+ * (rich artifact) or `evaluateReferenceGrounded` (pipeline `PageAuditResult`),
9
+ * not by importing a stage.
10
+ */
11
+ // All shared types + boundary interfaces (RedesignArtifact, PageAuditResult,
12
+ // ReferenceGroundedConfig, Exemplar, TasteVerdict, …) flow from the one hub.
13
+ export * from './contracts.js';
14
+ // Rich library/CLI entry → RedesignArtifact.
15
+ export { runReferenceRedesign } from './run.js';
16
+ // Flagged STAGE-6 entry → PageAuditResult (drops into the existing pipeline).
17
+ export { evaluateReferenceGrounded } from './pipeline/evaluate-reference.js';
18
+ // Human-facing renderers for the redesign brief surfaced in the audit report:
19
+ // the full rich brief and a compact report-section projection, plus the shared
20
+ // slug used to name the brief file.
21
+ export { renderArtifactMarkdown, renderRedesignDirectionsSummary, renderRedesignTarget, artifactSlug } from './artifact/render.js';
22
+ // CLI plumbing: resolve `--reference <url|path>` into a ReferenceContext once.
23
+ export { resolveReferenceContext } from './reference-context.js';
24
+ // Config: frozen defaults + the clamped operator-override merge.
25
+ export { resolveReferenceConfig, DEFAULT_REFERENCE_CONFIG, DEFAULT_RETRIEVE_WEIGHTS, } from './config.js';
26
+ // Corpus access: the file-backed store + the offline authoring path.
27
+ export { createFileCorpusStore } from './corpus/store.js';
28
+ export { buildExemplar, ingestCorpus } from './corpus/build.js';
29
+ // Taste eval: corpus-vs-corpus agreement + generated-vs-reference metrics.
30
+ export { tasteAgreement, tasteMetricsFromVerdicts } from './eval/taste-core.js';
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/design/audit/reference/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,cAAc,gBAAgB,CAAA;AAE9B,6CAA6C;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAG/C,8EAA8E;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAG5E,8EAA8E;AAC9E,+EAA+E;AAC/E,oCAAoC;AACpC,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAElI,+EAA+E;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAGhE,iEAAiE;AACjE,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAMpB,qEAAqE;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAW/D,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Vision-image clamp — the one pre-flight a screenshot needs before a vision API
3
+ * call. PURE (Buffer in → Buffer out, no IO): the disk read lives in the
4
+ * `vision-model` adapter, this only does pixel math, so it unit-tests with
5
+ * synthesised PNGs and no model.
6
+ *
7
+ * Why it exists: corpus exemplars are FULL-PAGE captures (e.g. 1440×14739). The
8
+ * Anthropic vision API rejects any image whose longest edge exceeds 8000px with a
9
+ * 400 `invalid_request_error`, and it internally downscales anything past ~1568px
10
+ * on the long edge regardless — so an un-clamped full-page screenshot either hard-
11
+ * fails (Anthropic-family providers) or burns tokens encoding detail the model
12
+ * never sees. Clamping the longest edge to {@link VISION_MAX_EDGE_PX} both clears
13
+ * the hard limit AND matches the API's own effective resolution, at a fraction of
14
+ * the base64 size.
15
+ *
16
+ * Fail-soft by design: an image already within the limit is returned BYTE-FOR-BYTE
17
+ * unchanged (no decode/re-encode), and a buffer that is not decodable as PNG is
18
+ * passed through untouched rather than thrown — the downstream model call is the
19
+ * place a genuinely bad image surfaces, not this size guard.
20
+ */
21
+ /**
22
+ * Longest-edge ceiling, in px. 1568 is the resolution the Anthropic vision API
23
+ * downscales to internally, and is comfortably under its 8000px hard limit — so
24
+ * clamping here is lossless relative to what the model would actually see while
25
+ * cutting the encoded payload by orders of magnitude on tall captures.
26
+ */
27
+ export declare const VISION_MAX_EDGE_PX = 1568;
28
+ /**
29
+ * Downscale a PNG so its longest edge is ≤ `maxEdge`, preserving aspect ratio with
30
+ * an area-average (box) filter. Returns the ORIGINAL buffer unchanged when the
31
+ * image is already within bounds or cannot be parsed as PNG.
32
+ */
33
+ export declare function clampPngLongestEdge(buf: Buffer, maxEdge?: number): Buffer;
34
+ //# sourceMappingURL=image-clamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-clamp.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/judge/image-clamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA2B,GAAG,MAAM,CAsD7F"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Vision-image clamp — the one pre-flight a screenshot needs before a vision API
3
+ * call. PURE (Buffer in → Buffer out, no IO): the disk read lives in the
4
+ * `vision-model` adapter, this only does pixel math, so it unit-tests with
5
+ * synthesised PNGs and no model.
6
+ *
7
+ * Why it exists: corpus exemplars are FULL-PAGE captures (e.g. 1440×14739). The
8
+ * Anthropic vision API rejects any image whose longest edge exceeds 8000px with a
9
+ * 400 `invalid_request_error`, and it internally downscales anything past ~1568px
10
+ * on the long edge regardless — so an un-clamped full-page screenshot either hard-
11
+ * fails (Anthropic-family providers) or burns tokens encoding detail the model
12
+ * never sees. Clamping the longest edge to {@link VISION_MAX_EDGE_PX} both clears
13
+ * the hard limit AND matches the API's own effective resolution, at a fraction of
14
+ * the base64 size.
15
+ *
16
+ * Fail-soft by design: an image already within the limit is returned BYTE-FOR-BYTE
17
+ * unchanged (no decode/re-encode), and a buffer that is not decodable as PNG is
18
+ * passed through untouched rather than thrown — the downstream model call is the
19
+ * place a genuinely bad image surfaces, not this size guard.
20
+ */
21
+ import { PNG } from 'pngjs';
22
+ /**
23
+ * Longest-edge ceiling, in px. 1568 is the resolution the Anthropic vision API
24
+ * downscales to internally, and is comfortably under its 8000px hard limit — so
25
+ * clamping here is lossless relative to what the model would actually see while
26
+ * cutting the encoded payload by orders of magnitude on tall captures.
27
+ */
28
+ export const VISION_MAX_EDGE_PX = 1568;
29
+ /**
30
+ * Downscale a PNG so its longest edge is ≤ `maxEdge`, preserving aspect ratio with
31
+ * an area-average (box) filter. Returns the ORIGINAL buffer unchanged when the
32
+ * image is already within bounds or cannot be parsed as PNG.
33
+ */
34
+ export function clampPngLongestEdge(buf, maxEdge = VISION_MAX_EDGE_PX) {
35
+ let png;
36
+ try {
37
+ png = PNG.sync.read(buf);
38
+ }
39
+ catch {
40
+ // Not a decodable PNG — leave it to the model call to reject; this guard only
41
+ // shrinks oversized images, it does not validate them.
42
+ return buf;
43
+ }
44
+ const { width, height } = png;
45
+ const longest = Math.max(width, height);
46
+ if (longest <= maxEdge)
47
+ return buf;
48
+ const scale = maxEdge / longest;
49
+ const newW = Math.max(1, Math.round(width * scale));
50
+ const newH = Math.max(1, Math.round(height * scale));
51
+ const out = new PNG({ width: newW, height: newH });
52
+ // Each destination pixel averages the source rectangle it maps to. The
53
+ // rectangles tile the source exactly, so every source pixel is read once —
54
+ // O(source pixels), independent of the downscale factor.
55
+ const src = png.data;
56
+ const dst = out.data;
57
+ for (let y = 0; y < newH; y++) {
58
+ const sy0 = Math.floor((y * height) / newH);
59
+ const sy1 = Math.max(sy0 + 1, Math.floor(((y + 1) * height) / newH));
60
+ for (let x = 0; x < newW; x++) {
61
+ const sx0 = Math.floor((x * width) / newW);
62
+ const sx1 = Math.max(sx0 + 1, Math.floor(((x + 1) * width) / newW));
63
+ let r = 0;
64
+ let g = 0;
65
+ let b = 0;
66
+ let a = 0;
67
+ let n = 0;
68
+ for (let sy = sy0; sy < sy1; sy++) {
69
+ const rowBase = sy * width;
70
+ for (let sx = sx0; sx < sx1; sx++) {
71
+ const idx = (rowBase + sx) << 2;
72
+ r += src[idx];
73
+ g += src[idx + 1];
74
+ b += src[idx + 2];
75
+ a += src[idx + 3];
76
+ n++;
77
+ }
78
+ }
79
+ const o = (y * newW + x) << 2;
80
+ dst[o] = Math.round(r / n);
81
+ dst[o + 1] = Math.round(g / n);
82
+ dst[o + 2] = Math.round(b / n);
83
+ dst[o + 3] = Math.round(a / n);
84
+ }
85
+ }
86
+ return PNG.sync.write(out);
87
+ }
88
+ //# sourceMappingURL=image-clamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-clamp.js","sourceRoot":"","sources":["../../../../../src/design/audit/reference/judge/image-clamp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Position-swapped pairwise debias — the core that cancels slot bias.
3
+ *
4
+ * A single judge call is contaminated by position bias: models systematically
5
+ * over-prefer whichever design sits in slot A. `judgePair` neutralises it by
6
+ * running BOTH slot orders through the INJECTED `TasteJudge` (A-vs-B and
7
+ * B-vs-A) and reconciling. The model call is the only impure part and it is
8
+ * injected, so `reconcileVerdicts` — where all the debias logic lives — is fully
9
+ * pure and unit-tests with stub verdicts and zero live model.
10
+ *
11
+ * Reconciliation rule (measures taste, not slot):
12
+ * - both orders pick the SAME id ⇒ that id wins (margin = mean confidence)
13
+ * - the preferred id FLIPS with the slot ⇒ pure position bias ⇒ tie
14
+ * - only one order separates them ⇒ a low-confidence win (margin halved)
15
+ * - both orders tie ⇒ tie
16
+ *
17
+ * `swapped` re-labels the subjects (a↔b) while preserving `dimension`,
18
+ * `reference`, and `rubricBody`, so the judge sees the same comparison from the
19
+ * other side — the second call is a genuine slot swap, not a different question.
20
+ */
21
+ import type { JudgePairInput, RawVerdict, TasteJudge, TasteVerdict } from '../contracts.js';
22
+ /**
23
+ * Reconcile the two slot-order verdicts into a stable, id-keyed `TasteVerdict`.
24
+ * Pure: no IO, no model. `ab` presented a→SLOT A, b→SLOT B; `ba` presented
25
+ * b→SLOT A, a→SLOT B.
26
+ */
27
+ export declare function reconcileVerdicts(ab: RawVerdict, ba: RawVerdict, aId: string, bId: string): TasteVerdict;
28
+ /**
29
+ * Run a single comparison through both slot orders (× `reps`) and reconcile to a
30
+ * position-debiased `TasteVerdict`. The `TasteJudge` is injected, so this is the
31
+ * only impure boundary; all aggregation is deterministic.
32
+ */
33
+ export declare function judgePair(judge: TasteJudge, input: JudgePairInput, reps?: number): Promise<TasteVerdict>;
34
+ //# sourceMappingURL=pairwise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairwise.d.ts","sourceRoot":"","sources":["../../../../../src/design/audit/reference/judge/pairwise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAmB3F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,YAAY,CA+Bd;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,cAAc,EACrB,IAAI,SAAI,GACP,OAAO,CAAC,YAAY,CAAC,CAsBvB"}