@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,202 @@
1
+ /**
2
+ * Snapshot budgeting: dedup repeated element runs, cap total size while
3
+ * preserving interactive + content lines, and compact the first-turn snapshot.
4
+ *
5
+ * Pure functions over snapshot text — no Brain state.
6
+ */
7
+ import { AriaSnapshotHelper } from '../drivers/snapshot.js';
8
+ /**
9
+ * Collapse consecutive runs of similar elements (same indent + role, names
10
+ * differing only by a trailing number/short suffix) into a single representative
11
+ * line with a count. Reduces token cost on pages with long pagination, nav
12
+ * lists, or repeated product cards.
13
+ *
14
+ * Skips dialog/alertdialog (agent must see each one) and groups < 3 items.
15
+ */
16
+ function deduplicateSnapshot(snapshot) {
17
+ const lines = snapshot.split('\n');
18
+ const out = [];
19
+ // Extract (indent, role) from a snapshot line. Returns null for non-element lines.
20
+ const parseLine = (line) => {
21
+ const m = line.match(/^(\s*-\s+)(\w+)\s+"([^"]*)"\s*\[ref=(\w+)\]/);
22
+ if (!m)
23
+ return null;
24
+ return { indent: m[1], role: m[2], name: m[3], ref: m[4], full: line };
25
+ };
26
+ // Strip trailing numbers/ordinals to get a "name stem" for grouping.
27
+ // "Page 1" and "Page 20" → "Page ", "Item #3" and "Item #42" → "Item #"
28
+ const nameStem = (name) => name.replace(/\d+/g, '#');
29
+ // Structural fingerprint for a block of lines (element + its children).
30
+ // Used for card-level dedup: two hotel cards have different names but the
31
+ // same structure (listitem > link + img + text + text + button).
32
+ const structuralFingerprint = (startIdx, baseIndent) => {
33
+ const roles = [];
34
+ let j = startIdx;
35
+ while (j < lines.length) {
36
+ const p = parseLine(lines[j]);
37
+ if (!p) {
38
+ j++;
39
+ continue;
40
+ }
41
+ // Stop when we hit an element at the same or shallower indent (sibling or parent)
42
+ if (j > startIdx && p.indent.length <= baseIndent.length)
43
+ break;
44
+ roles.push(p.role);
45
+ j++;
46
+ }
47
+ return { fp: roles.join(','), endIdx: j };
48
+ };
49
+ let i = 0;
50
+ while (i < lines.length) {
51
+ const parsed = parseLine(lines[i]);
52
+ // Non-element line or dialog/alertdialog — emit as-is
53
+ if (!parsed || /\b(?:dialog|alertdialog)\b/i.test(parsed.role)) {
54
+ out.push(lines[i]);
55
+ i++;
56
+ continue;
57
+ }
58
+ // Try block-level dedup first: look for consecutive sibling blocks
59
+ // with the same structural fingerprint (same child-role sequence).
60
+ // This catches card patterns like Booking hotel results, Allrecipes cards.
61
+ if (/\b(?:listitem|article|group|region)\b/i.test(parsed.role)) {
62
+ const { fp: firstFp, endIdx: firstEnd } = structuralFingerprint(i, parsed.indent);
63
+ if (firstEnd > i + 2 && firstFp.includes(',')) { // non-trivial block
64
+ const blocks = [
65
+ { start: i, end: firstEnd, firstLine: lines[i] },
66
+ ];
67
+ let scanIdx = firstEnd;
68
+ while (scanIdx < lines.length) {
69
+ const nextParsed = parseLine(lines[scanIdx]);
70
+ if (!nextParsed || nextParsed.indent !== parsed.indent || nextParsed.role !== parsed.role)
71
+ break;
72
+ const { fp: nextFp, endIdx: nextEnd } = structuralFingerprint(scanIdx, nextParsed.indent);
73
+ if (nextFp !== firstFp)
74
+ break;
75
+ blocks.push({ start: scanIdx, end: nextEnd, firstLine: lines[scanIdx] });
76
+ scanIdx = nextEnd;
77
+ }
78
+ if (blocks.length >= 3) {
79
+ // Emit first 2 blocks fully, summarize the rest
80
+ for (let b = 0; b < Math.min(2, blocks.length); b++) {
81
+ for (let k = blocks[b].start; k < blocks[b].end; k++) {
82
+ out.push(lines[k]);
83
+ }
84
+ }
85
+ const remaining = blocks.length - 2;
86
+ out.push(`${parsed.indent}... [${remaining} more similar ${parsed.role} blocks with same structure]`);
87
+ i = blocks[blocks.length - 1].end;
88
+ continue;
89
+ }
90
+ }
91
+ }
92
+ // Line-level dedup: consecutive runs of same (indent, role, name stem)
93
+ const group = [parsed];
94
+ const stem = nameStem(parsed.name);
95
+ let j = i + 1;
96
+ while (j < lines.length) {
97
+ const next = parseLine(lines[j]);
98
+ if (!next ||
99
+ next.indent !== parsed.indent ||
100
+ next.role !== parsed.role ||
101
+ nameStem(next.name) !== stem)
102
+ break;
103
+ group.push(next);
104
+ j++;
105
+ }
106
+ if (group.length < 3) {
107
+ // Not enough to dedup — emit originals
108
+ for (const g of group)
109
+ out.push(g.full);
110
+ }
111
+ else {
112
+ // Emit first element with a summary of the rest
113
+ const last = group[group.length - 1];
114
+ out.push(`${parsed.full} (+${group.length - 1} similar: "${group[1].name}"\u2026"${last.name}")`);
115
+ }
116
+ i = j;
117
+ }
118
+ return out.join('\n');
119
+ }
120
+ /**
121
+ * Cap snapshot size to control token cost on large pages.
122
+ * Keeps the full snapshot when it fits within budget; otherwise preserves:
123
+ * 1. Interactive elements with refs (buttons, inputs, links — for action targets)
124
+ * 2. Content lines: term/definition/code/pre/paragraph (for extraction tasks
125
+ * like MDN, Python docs, W3C spec where the value the agent needs lives in
126
+ * a `<dl>/<code>/<pre>` block, not in an interactive element)
127
+ *
128
+ * New-page callers use a larger default budget; same-page callers can pass a
129
+ * tighter budget after the model has already seen the full snapshot once.
130
+ */
131
+ export function budgetSnapshot(snapshot, maxChars = 24_000) {
132
+ // Skip dedup on small snapshots — not enough repetition to justify the O(n) scan
133
+ if (snapshot.length > 6_000) {
134
+ snapshot = deduplicateSnapshot(snapshot);
135
+ }
136
+ if (snapshot.length <= maxChars)
137
+ return snapshot;
138
+ // First pass: separate keep-set (interactive + content lines) from decorative.
139
+ // Content roles (term, definition, code, pre, paragraph) carry text the LLM
140
+ // needs for extraction tasks. They have no [ref=] but the text is the data.
141
+ const lines = snapshot.split('\n');
142
+ const interactive = [];
143
+ const content = [];
144
+ const decorative = [];
145
+ for (const line of lines) {
146
+ if (/\b(?:button|link|textbox|combobox|menuitem|checkbox|radio|select|heading|dialog|alertdialog)\b/i.test(line) && /\[ref=/.test(line)) {
147
+ interactive.push(line);
148
+ }
149
+ else if (/^\s*-\s+(?:term|definition|code|pre|paragraph)\b/i.test(line)) {
150
+ content.push(line);
151
+ }
152
+ else {
153
+ decorative.push(line);
154
+ }
155
+ }
156
+ // If interactive + content fits, use both with a truncation note
157
+ const keepSet = interactive.concat(content);
158
+ const keepText = keepSet.join('\n');
159
+ if (keepText.length <= maxChars) {
160
+ return keepText + `\n... [${decorative.length} decorative elements omitted for brevity]`;
161
+ }
162
+ // Second pass: when interactive + content still exceed budget, prioritize:
163
+ // 1. inputs (searchbox/textbox/combobox) — essential for form tasks
164
+ // 2. headings + dialogs — structural navigation
165
+ // 3. content lines (term/definition/code/pre) — extraction data
166
+ // 4. bulk links/buttons — main content
167
+ const priority = [];
168
+ const bulk = [];
169
+ for (const line of interactive) {
170
+ if (/\b(?:searchbox|textbox|combobox|heading|dialog|alertdialog)\b/i.test(line)) {
171
+ priority.push(line);
172
+ }
173
+ else {
174
+ bulk.push(line);
175
+ }
176
+ }
177
+ // Content lines come right after priority interactive (they're the extraction
178
+ // data) and before bulk links/buttons.
179
+ const priorityWithContent = priority.concat(content);
180
+ const priorityText = priorityWithContent.join('\n');
181
+ const remaining = maxChars - priorityText.length - 80; // reserve space for note
182
+ if (remaining > 0) {
183
+ const bulkText = bulk.join('\n');
184
+ const trimmedBulk = bulkText.slice(0, remaining);
185
+ const bulkKept = trimmedBulk.lastIndexOf('\n') > 0
186
+ ? trimmedBulk.slice(0, trimmedBulk.lastIndexOf('\n'))
187
+ : trimmedBulk;
188
+ return priorityText + '\n' + bulkKept +
189
+ `\n... [${interactive.length - priority.length - bulkKept.split('\n').length} interactive + ${decorative.length} decorative elements omitted]`;
190
+ }
191
+ // Hard cap: take the first maxChars of the full snapshot
192
+ return snapshot.slice(0, maxChars) + '\n... [snapshot truncated — large page]';
193
+ }
194
+ export function compactFirstTurnSnapshot(snapshot) {
195
+ const compact = AriaSnapshotHelper.formatCompact(snapshot);
196
+ const basis = compact.length > 0 ? compact : snapshot;
197
+ const maxChars = 4000;
198
+ if (basis.length <= maxChars)
199
+ return basis;
200
+ return `${basis.slice(0, maxChars)}\n... [snapshot truncated for first-turn fast path]`;
201
+ }
202
+ //# sourceMappingURL=snapshot-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-budget.js","sourceRoot":"","sources":["../../src/brain/snapshot-budget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,GAAG,GAAa,EAAE,CAAA;IAExB,mFAAmF;IACnF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACxE,CAAC,CAAA;IAED,qEAAqE;IACrE,wEAAwE;IACxE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CACxC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE3B,wEAAwE;IACxE,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAkC,EAAE;QACrG,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,CAAC,GAAG,QAAQ,CAAA;QAChB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAQ;YAAC,CAAC;YACzB,kFAAkF;YAClF,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM;gBAAE,MAAK;YAC/D,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC,EAAE,CAAA;QACL,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IAC3C,CAAC,CAAA;IAED,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAElC,sDAAsD;QACtD,IAAI,CAAC,MAAM,IAAI,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC,EAAE,CAAA;YACH,SAAQ;QACV,CAAC;QAED,mEAAmE;QACnE,mEAAmE;QACnE,2EAA2E;QAC3E,IAAI,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACjF,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,oBAAoB;gBACnE,MAAM,MAAM,GAA6D;oBACvE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;iBACjD,CAAA;gBACD,IAAI,OAAO,GAAG,QAAQ,CAAA;gBACtB,OAAO,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;oBAC5C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;wBAAE,MAAK;oBAChG,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;oBACzF,IAAI,MAAM,KAAK,OAAO;wBAAE,MAAK;oBAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;oBACxE,OAAO,GAAG,OAAO,CAAA;gBACnB,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,gDAAgD;oBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBACpD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;4BACrD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;wBACpB,CAAC;oBACH,CAAC;oBACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;oBACnC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,QAAQ,SAAS,iBAAiB,MAAM,CAAC,IAAI,8BAA8B,CAAC,CAAA;oBACrG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;oBACjC,SAAQ;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,MAAM,KAAK,GAAgD,CAAC,MAAM,CAAC,CAAA;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAChC,IACE,CAAC,IAAI;gBACL,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBAC7B,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI;gBAC5B,MAAK;YACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChB,CAAC,EAAE,CAAA;QACL,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,uCAAuC;YACvC,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACpC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QACnG,CAAC;QACD,CAAC,GAAG,CAAC,CAAA;IACP,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAQ,GAAG,MAAM;IAChE,iFAAiF;IACjF,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC5B,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAEjD,+EAA+E;IAC/E,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,iGAAiG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,mDAAmD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAChC,OAAO,QAAQ,GAAG,UAAU,UAAU,CAAC,MAAM,2CAA2C,CAAC;IAC3F,CAAC;IAED,2EAA2E;IAC3E,oEAAoE;IACpE,gDAAgD;IAChD,gEAAgE;IAChE,uCAAuC;IACvC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,gEAAgE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,uCAAuC;IACvC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,yBAAyB;IAChF,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAChD,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACrD,CAAC,CAAC,WAAW,CAAC;QAChB,OAAO,YAAY,GAAG,IAAI,GAAG,QAAQ;YACnC,UAAU,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,kBAAkB,UAAU,CAAC,MAAM,+BAA+B,CAAC;IACnJ,CAAC;IAED,yDAAyD;IACzD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,yCAAyC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC;IACtB,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,qDAAqD,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Dynamic system-prompt assembly for the Brain decision engine: conditional
3
+ * rule-group injection (search / data-extraction / heavy-page), user + domain
4
+ * + macro rule appends, and the Anthropic cache_control split used by
5
+ * `decide()`.
6
+ *
7
+ * Extracted from brain/index.ts via the delegate + host-interface pattern.
8
+ * `buildSystemForDecide` keeps a thin delegator on Brain; the other three
9
+ * helpers moved wholesale. Bodies are verbatim — same ordering, thresholds,
10
+ * and byte-stable cached-prefix placement. State is read through
11
+ * {@link BrainSystemPromptHost}, which Brain `implements`.
12
+ */
13
+ import type { SystemModelMessage } from 'ai';
14
+ import type { PageState } from '../types.js';
15
+ /**
16
+ * The slice of Brain state the system-prompt assembly reads. Brain declares
17
+ * `implements BrainSystemPromptHost`, so tsc proves this surface is complete.
18
+ * All members are public on Brain by construction.
19
+ */
20
+ export interface BrainSystemPromptHost {
21
+ systemPrompt: string;
22
+ extensionRules?: {
23
+ global?: string;
24
+ search?: string;
25
+ dataExtraction?: string;
26
+ heavy?: string;
27
+ };
28
+ extensionDomainRules?: Record<string, {
29
+ extraRules?: string;
30
+ }>;
31
+ macroPromptBlock: string;
32
+ }
33
+ /**
34
+ * Build the system prompt dynamically, injecting conditional rule groups
35
+ * based on goal text, page snapshot content, and turn number.
36
+ * Saves ~800 tokens per turn on simple navigation tasks.
37
+ */
38
+ export declare function buildSystemPromptImpl(self: BrainSystemPromptHost, goal: string, state: PageState, turn: number): string;
39
+ /**
40
+ * Same as buildSystemPrompt but returns the parts so the caller can decide
41
+ * how to send them. For Anthropic, decide() ships them as a SystemModelMessage[]
42
+ * with cache_control on the stable CORE_RULES prefix; other providers join.
43
+ *
44
+ * The first slot is ALWAYS CORE_RULES (or the user's custom override) so the
45
+ * cache breakpoint placement is deterministic. Extension-supplied rules are
46
+ * appended AFTER REASONING_SUFFIX so the cached prefix stays byte-stable
47
+ * across turns.
48
+ */
49
+ export declare function composeSystemPromptPartsImpl(self: BrainSystemPromptHost, goal: string, state: PageState, turn: number): string[];
50
+ /**
51
+ * Find the per-domain extra rules whose domain key matches the URL host.
52
+ * Multiple matches are concatenated in registration order.
53
+ */
54
+ export declare function matchDomainRulesImpl(self: BrainSystemPromptHost, url: string): string | undefined;
55
+ /**
56
+ * Build the system prompt for `decide()` in the form best suited to the
57
+ * active provider:
58
+ * - Anthropic: a SystemModelMessage[] with `cache_control: ephemeral`
59
+ * on the CORE_RULES slot. Subsequent turns get a cache hit on the
60
+ * ~1500-token prefix (90% cheaper input + faster TTFT).
61
+ * - Everything else: a single concatenated string (current behavior).
62
+ *
63
+ * Custom system prompts (set via config) are passed verbatim — caching
64
+ * is opt-in via the default prompt path only.
65
+ */
66
+ export declare function buildSystemForDecideImpl(self: BrainSystemPromptHost, goal: string, state: PageState, turn: number, providerName: 'openai' | 'anthropic' | 'google' | 'cli-bridge' | 'codex-cli' | 'claude-code' | 'sandbox-backend' | 'zai-coding-plan'): string | SystemModelMessage[];
67
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/brain/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAY7C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/F,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvH;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0ChI;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAejG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,iBAAiB,GAAG,iBAAiB,GACnI,MAAM,GAAG,kBAAkB,EAAE,CAmB/B"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Dynamic system-prompt assembly for the Brain decision engine: conditional
3
+ * rule-group injection (search / data-extraction / heavy-page), user + domain
4
+ * + macro rule appends, and the Anthropic cache_control split used by
5
+ * `decide()`.
6
+ *
7
+ * Extracted from brain/index.ts via the delegate + host-interface pattern.
8
+ * `buildSystemForDecide` keeps a thin delegator on Brain; the other three
9
+ * helpers moved wholesale. Bodies are verbatim — same ordering, thresholds,
10
+ * and byte-stable cached-prefix placement. State is read through
11
+ * {@link BrainSystemPromptHost}, which Brain `implements`.
12
+ */
13
+ import { CORE_RULES, SEARCH_RULES, DATA_EXTRACTION_RULES, HEAVY_PAGE_RULES, REASONING_SUFFIX, SYSTEM_PROMPT, DATA_EXTRACTION_PATTERN, SEARCH_SNAPSHOT_PATTERN, } from './prompts.js';
14
+ /**
15
+ * Build the system prompt dynamically, injecting conditional rule groups
16
+ * based on goal text, page snapshot content, and turn number.
17
+ * Saves ~800 tokens per turn on simple navigation tasks.
18
+ */
19
+ export function buildSystemPromptImpl(self, goal, state, turn) {
20
+ return composeSystemPromptPartsImpl(self, goal, state, turn).join('');
21
+ }
22
+ /**
23
+ * Same as buildSystemPrompt but returns the parts so the caller can decide
24
+ * how to send them. For Anthropic, decide() ships them as a SystemModelMessage[]
25
+ * with cache_control on the stable CORE_RULES prefix; other providers join.
26
+ *
27
+ * The first slot is ALWAYS CORE_RULES (or the user's custom override) so the
28
+ * cache breakpoint placement is deterministic. Extension-supplied rules are
29
+ * appended AFTER REASONING_SUFFIX so the cached prefix stays byte-stable
30
+ * across turns.
31
+ */
32
+ export function composeSystemPromptPartsImpl(self, goal, state, turn) {
33
+ if (self.systemPrompt !== SYSTEM_PROMPT)
34
+ return [self.systemPrompt];
35
+ const parts = [CORE_RULES];
36
+ const snapshotSample = state.snapshot.length > 4000 ? state.snapshot.slice(0, 4000) : state.snapshot;
37
+ if (SEARCH_SNAPSHOT_PATTERN.test(snapshotSample) || /\/search\b/i.test(state.url)) {
38
+ parts.push(SEARCH_RULES);
39
+ if (self.extensionRules?.search) {
40
+ parts.push(`\n\nUSER RULES (search):\n${self.extensionRules.search}`);
41
+ }
42
+ }
43
+ if (DATA_EXTRACTION_PATTERN.test(goal)) {
44
+ parts.push(DATA_EXTRACTION_RULES);
45
+ if (self.extensionRules?.dataExtraction) {
46
+ parts.push(`\n\nUSER RULES (data extraction):\n${self.extensionRules.dataExtraction}`);
47
+ }
48
+ }
49
+ if (state.snapshot.length > 10_000 || turn > 10) {
50
+ parts.push(HEAVY_PAGE_RULES);
51
+ if (self.extensionRules?.heavy) {
52
+ parts.push(`\n\nUSER RULES (heavy page):\n${self.extensionRules.heavy}`);
53
+ }
54
+ }
55
+ parts.push(REASONING_SUFFIX);
56
+ // Global user rules + matching per-domain rules. Both are appended AFTER
57
+ // REASONING_SUFFIX so they don't pollute the byte-stable cached prefix.
58
+ if (self.extensionRules?.global) {
59
+ parts.push(`\n\nUSER RULES (global):\n${self.extensionRules.global}`);
60
+ }
61
+ if (self.extensionDomainRules) {
62
+ const domainRules = matchDomainRulesImpl(self, state.url);
63
+ if (domainRules) {
64
+ parts.push(`\n\nUSER RULES (domain match):\n${domainRules}`);
65
+ }
66
+ }
67
+ // Macros live AFTER the cached prefix so registering new macros
68
+ // doesn't bust the Anthropic cache.
69
+ if (self.macroPromptBlock) {
70
+ parts.push(`\n\n${self.macroPromptBlock}`);
71
+ }
72
+ return parts;
73
+ }
74
+ /**
75
+ * Find the per-domain extra rules whose domain key matches the URL host.
76
+ * Multiple matches are concatenated in registration order.
77
+ */
78
+ export function matchDomainRulesImpl(self, url) {
79
+ if (!self.extensionDomainRules)
80
+ return undefined;
81
+ let host;
82
+ try {
83
+ host = new URL(url).hostname;
84
+ }
85
+ catch {
86
+ return undefined;
87
+ }
88
+ const matches = [];
89
+ for (const [domain, rules] of Object.entries(self.extensionDomainRules)) {
90
+ if (host.includes(domain) && rules.extraRules) {
91
+ matches.push(rules.extraRules);
92
+ }
93
+ }
94
+ return matches.length > 0 ? matches.join('\n\n') : undefined;
95
+ }
96
+ /**
97
+ * Build the system prompt for `decide()` in the form best suited to the
98
+ * active provider:
99
+ * - Anthropic: a SystemModelMessage[] with `cache_control: ephemeral`
100
+ * on the CORE_RULES slot. Subsequent turns get a cache hit on the
101
+ * ~1500-token prefix (90% cheaper input + faster TTFT).
102
+ * - Everything else: a single concatenated string (current behavior).
103
+ *
104
+ * Custom system prompts (set via config) are passed verbatim — caching
105
+ * is opt-in via the default prompt path only.
106
+ */
107
+ export function buildSystemForDecideImpl(self, goal, state, turn, providerName) {
108
+ const parts = composeSystemPromptPartsImpl(self, goal, state, turn);
109
+ if (providerName !== 'anthropic' || self.systemPrompt !== SYSTEM_PROMPT || parts.length === 0) {
110
+ return parts.join('');
111
+ }
112
+ // Anthropic path: first slot is CORE_RULES (cached), remaining parts ship
113
+ // as a separate uncached system message so the prefix stays byte-stable
114
+ // across turns and the cache hits.
115
+ const corePart = {
116
+ role: 'system',
117
+ content: parts[0],
118
+ providerOptions: {
119
+ anthropic: {
120
+ cacheControl: { type: 'ephemeral' },
121
+ },
122
+ },
123
+ };
124
+ if (parts.length === 1)
125
+ return [corePart];
126
+ return [corePart, { role: 'system', content: parts.slice(1).join('') }];
127
+ }
128
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/brain/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Design-audit task for the Brain decision engine: uses vision to analyze
3
+ * layout, typography, spacing, contrast, and UX, returning structured findings
4
+ * with categories, severities, and optional ROI / patch passthrough.
5
+ *
6
+ * Extracted from brain/index.ts via the delegate + host-interface pattern.
7
+ * Brain.auditDesign keeps a thin delegator; the body lives here verbatim and
8
+ * reads Brain state through {@link BrainDesignAuditHost}, which Brain
9
+ * `implements` so tsc proves the host surface is complete.
10
+ */
11
+ import type { ModelMessage, SystemModelMessage } from 'ai';
12
+ import type { PageState, DesignFinding } from '../../types.js';
13
+ import type { UserContent } from '../types.js';
14
+ import type { ModelSelection, GenerateResult } from '../model-client.js';
15
+ /**
16
+ * The slice of Brain state `auditDesign` reads. All members are public on Brain
17
+ * by construction; `implements BrainDesignAuditHost` makes a missing/mistyped
18
+ * member a compile error.
19
+ */
20
+ export interface BrainDesignAuditHost {
21
+ debug: boolean;
22
+ buildUserContent(text: string, screenshot?: string, forceVision?: boolean): UserContent;
23
+ generate(system: string | SystemModelMessage[], messages: ModelMessage[], selection?: ModelSelection, maxOutputTokens?: number): Promise<GenerateResult>;
24
+ }
25
+ export declare function auditDesignImpl(self: BrainDesignAuditHost, state: PageState, goal: string, checkpoints: string[], systemPrompt?: string): Promise<{
26
+ score: number;
27
+ findings: DesignFinding[];
28
+ raw: string;
29
+ tokensUsed?: number;
30
+ designSystemScore?: Record<string, unknown>;
31
+ parseError?: string;
32
+ }>;
33
+ //# sourceMappingURL=design-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-audit.d.ts","sourceRoot":"","sources":["../../../src/brain/tasks/design-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACxF,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE,EACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,SAAS,CAAC,EAAE,cAAc,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoG3J"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Design-audit task for the Brain decision engine: uses vision to analyze
3
+ * layout, typography, spacing, contrast, and UX, returning structured findings
4
+ * with categories, severities, and optional ROI / patch passthrough.
5
+ *
6
+ * Extracted from brain/index.ts via the delegate + host-interface pattern.
7
+ * Brain.auditDesign keeps a thin delegator; the body lives here verbatim and
8
+ * reads Brain state through {@link BrainDesignAuditHost}, which Brain
9
+ * `implements` so tsc proves the host surface is complete.
10
+ */
11
+ import { DESIGN_AUDIT_PROMPT } from '../prompts.js';
12
+ export async function auditDesignImpl(self, state, goal, checkpoints, systemPrompt) {
13
+ const textContent = `GOAL: ${goal}
14
+
15
+ CHECKPOINTS to verify:
16
+ ${checkpoints.map((c, i) => `${i + 1}. ${c}`).join('\n')}
17
+
18
+ CURRENT PAGE:
19
+ URL: ${state.url}
20
+ Title: ${state.title}
21
+
22
+ ELEMENTS:
23
+ ${state.snapshot}
24
+
25
+ Audit this page for design quality, UX issues, and visual bugs.`;
26
+ const userContent = self.buildUserContent(textContent, state.screenshot, true);
27
+ const result = await self.generate(systemPrompt ?? DESIGN_AUDIT_PROMPT, [{ role: 'user', content: userContent }], undefined, 8000);
28
+ const raw = result.text;
29
+ const tokensUsed = result.tokensUsed;
30
+ if (self.debug) {
31
+ console.log('[Brain] Design audit:', raw.slice(0, 300));
32
+ }
33
+ try {
34
+ let text = raw.trim();
35
+ if (text.startsWith('```')) {
36
+ text = text.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
37
+ }
38
+ // Extract JSON object if surrounded by non-JSON text or truncated
39
+ let parsed;
40
+ try {
41
+ parsed = JSON.parse(text);
42
+ }
43
+ catch {
44
+ const start = text.indexOf('{');
45
+ const end = text.lastIndexOf('}');
46
+ if (start >= 0 && end > start) {
47
+ parsed = JSON.parse(text.slice(start, end + 1));
48
+ }
49
+ else {
50
+ throw new Error('No JSON object found');
51
+ }
52
+ }
53
+ const VALID_CATEGORIES = new Set(['visual-bug', 'layout', 'contrast', 'alignment', 'spacing', 'typography', 'accessibility', 'ux']);
54
+ const VALID_SEVERITIES = new Set(['critical', 'major', 'minor']);
55
+ const VALID_BLAST = new Set(['page', 'section', 'component', 'system']);
56
+ const clampScore = (n) => typeof n === 'number' ? Math.max(1, Math.min(10, n)) : undefined;
57
+ const findings = Array.isArray(parsed.findings)
58
+ ? parsed.findings.map((f) => ({
59
+ category: (VALID_CATEGORIES.has(f.category) ? f.category : 'ux'),
60
+ severity: (VALID_SEVERITIES.has(f.severity) ? f.severity : 'minor'),
61
+ description: String(f.description ?? ''),
62
+ location: String(f.location ?? ''),
63
+ suggestion: String(f.suggestion ?? ''),
64
+ ...(f.cssSelector ? { cssSelector: String(f.cssSelector) } : {}),
65
+ ...(f.cssFix ? { cssFix: String(f.cssFix) } : {}),
66
+ // Optional ROI fields.
67
+ ...(clampScore(f.impact) !== undefined ? { impact: clampScore(f.impact) } : {}),
68
+ ...(clampScore(f.effort) !== undefined ? { effort: clampScore(f.effort) } : {}),
69
+ ...(VALID_BLAST.has(f.blast)
70
+ ? { blast: f.blast }
71
+ : {}),
72
+ // Layer 2 — preserve raw patches array (untyped passthrough). The
73
+ // parsePatches/validatePatch pipeline in build-result.ts converts
74
+ // these into typed, validated Patch objects.
75
+ ...(Array.isArray(f.patches) ? { rawPatches: f.patches } : {}),
76
+ }))
77
+ : [];
78
+ const designSystemScore = parsed.designSystemScore && typeof parsed.designSystemScore === 'object'
79
+ ? parsed.designSystemScore
80
+ : undefined;
81
+ const rawScore = typeof parsed.score === 'number' ? parsed.score : 5;
82
+ return {
83
+ score: Math.max(1, Math.min(10, rawScore)),
84
+ findings,
85
+ raw,
86
+ tokensUsed,
87
+ designSystemScore,
88
+ };
89
+ }
90
+ catch (err) {
91
+ return {
92
+ score: 5,
93
+ findings: [],
94
+ raw,
95
+ tokensUsed,
96
+ parseError: err instanceof Error ? err.message : String(err),
97
+ };
98
+ }
99
+ }
100
+ //# sourceMappingURL=design-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-audit.js","sourceRoot":"","sources":["../../../src/brain/tasks/design-audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Quality-evaluation task for the Brain decision engine: asks the LLM to rate
3
+ * the visual quality, design, and professional polish of the current page.
4
+ *
5
+ * Extracted from brain/index.ts via the delegate + host-interface pattern.
6
+ * Brain.evaluate keeps a thin delegator; the body lives here verbatim and reads
7
+ * Brain state through {@link BrainEvaluateHost}, which Brain `implements` so tsc
8
+ * proves the host surface is complete.
9
+ */
10
+ import type { ModelMessage, SystemModelMessage } from 'ai';
11
+ import type { PageState } from '../../types.js';
12
+ import type { QualityEvaluation, UserContent } from '../types.js';
13
+ import type { ModelSelection, GenerateResult } from '../model-client.js';
14
+ /**
15
+ * The slice of Brain state `evaluate` reads. All members are public on Brain by
16
+ * construction; `implements BrainEvaluateHost` makes a missing/mistyped member a
17
+ * compile error.
18
+ */
19
+ export interface BrainEvaluateHost {
20
+ debug: boolean;
21
+ buildUserContent(text: string, screenshot?: string, forceVision?: boolean): UserContent;
22
+ generate(system: string | SystemModelMessage[], messages: ModelMessage[], selection?: ModelSelection, maxOutputTokens?: number): Promise<GenerateResult>;
23
+ }
24
+ export declare function evaluateImpl(self: BrainEvaluateHost, state: PageState, goal: string): Promise<QualityEvaluation>;
25
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/brain/tasks/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACxF,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE,EACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,SAAS,CAAC,EAAE,cAAc,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoDtH"}