@tangle-network/browser-agent-driver 0.10.0 → 0.12.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 (97) hide show
  1. package/dist/brain/index.d.ts +3 -0
  2. package/dist/brain/index.d.ts.map +1 -1
  3. package/dist/brain/index.js +103 -11
  4. package/dist/brain/index.js.map +1 -1
  5. package/dist/browser-launch.d.ts +3 -0
  6. package/dist/browser-launch.d.ts.map +1 -1
  7. package/dist/browser-launch.js +12 -2
  8. package/dist/browser-launch.js.map +1 -1
  9. package/dist/cli-auth.d.ts +19 -0
  10. package/dist/cli-auth.d.ts.map +1 -0
  11. package/dist/cli-auth.js +195 -0
  12. package/dist/cli-auth.js.map +1 -0
  13. package/dist/cli-design-audit.d.ts +8 -0
  14. package/dist/cli-design-audit.d.ts.map +1 -1
  15. package/dist/cli-design-audit.js +858 -31
  16. package/dist/cli-design-audit.js.map +1 -1
  17. package/dist/cli-showcase.d.ts +28 -0
  18. package/dist/cli-showcase.d.ts.map +1 -0
  19. package/dist/cli-showcase.js +131 -0
  20. package/dist/cli-showcase.js.map +1 -0
  21. package/dist/cli-ui.d.ts.map +1 -1
  22. package/dist/cli-ui.js +41 -2
  23. package/dist/cli-ui.js.map +1 -1
  24. package/dist/cli.js +418 -211
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config.d.ts +4 -0
  27. package/dist/config.d.ts.map +1 -1
  28. package/dist/config.js +2 -1
  29. package/dist/config.js.map +1 -1
  30. package/dist/design/compare.d.ts +9 -0
  31. package/dist/design/compare.d.ts.map +1 -0
  32. package/dist/design/compare.js +339 -0
  33. package/dist/design/compare.js.map +1 -0
  34. package/dist/design/index.d.ts +6 -0
  35. package/dist/design/index.d.ts.map +1 -0
  36. package/dist/design/index.js +5 -0
  37. package/dist/design/index.js.map +1 -0
  38. package/dist/design/page-interaction.d.ts +24 -0
  39. package/dist/design/page-interaction.d.ts.map +1 -0
  40. package/dist/design/page-interaction.js +244 -0
  41. package/dist/design/page-interaction.js.map +1 -0
  42. package/dist/design/rip.d.ts +9 -0
  43. package/dist/design/rip.d.ts.map +1 -0
  44. package/dist/design/rip.js +362 -0
  45. package/dist/design/rip.js.map +1 -0
  46. package/dist/design/types.d.ts +126 -0
  47. package/dist/design/types.d.ts.map +1 -0
  48. package/dist/design/types.js +3 -0
  49. package/dist/design/types.js.map +1 -0
  50. package/dist/drivers/playwright.d.ts +1 -0
  51. package/dist/drivers/playwright.d.ts.map +1 -1
  52. package/dist/drivers/playwright.js +21 -5
  53. package/dist/drivers/playwright.js.map +1 -1
  54. package/dist/drivers/types.d.ts +8 -0
  55. package/dist/drivers/types.d.ts.map +1 -1
  56. package/dist/index.d.ts +5 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +4 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/runner/effect-verification.d.ts +12 -0
  61. package/dist/runner/effect-verification.d.ts.map +1 -0
  62. package/dist/runner/effect-verification.js +169 -0
  63. package/dist/runner/effect-verification.js.map +1 -0
  64. package/dist/runner/index.d.ts +1 -0
  65. package/dist/runner/index.d.ts.map +1 -1
  66. package/dist/runner/index.js +2 -0
  67. package/dist/runner/index.js.map +1 -1
  68. package/dist/runner/runner.d.ts.map +1 -1
  69. package/dist/runner/runner.js +34 -57
  70. package/dist/runner/runner.js.map +1 -1
  71. package/dist/runner.d.ts +1 -1
  72. package/dist/runner.d.ts.map +1 -1
  73. package/dist/runner.js +2 -0
  74. package/dist/runner.js.map +1 -1
  75. package/dist/showcase/annotate.d.ts +28 -0
  76. package/dist/showcase/annotate.d.ts.map +1 -0
  77. package/dist/showcase/annotate.js +95 -0
  78. package/dist/showcase/annotate.js.map +1 -0
  79. package/dist/showcase/assemble.d.ts +31 -0
  80. package/dist/showcase/assemble.d.ts.map +1 -0
  81. package/dist/showcase/assemble.js +107 -0
  82. package/dist/showcase/assemble.js.map +1 -0
  83. package/dist/showcase/demo-player.d.ts +53 -0
  84. package/dist/showcase/demo-player.d.ts.map +1 -0
  85. package/dist/showcase/demo-player.js +325 -0
  86. package/dist/showcase/demo-player.js.map +1 -0
  87. package/dist/showcase/index.d.ts +21 -0
  88. package/dist/showcase/index.d.ts.map +1 -0
  89. package/dist/showcase/index.js +289 -0
  90. package/dist/showcase/index.js.map +1 -0
  91. package/dist/showcase/types.d.ts +111 -0
  92. package/dist/showcase/types.d.ts.map +1 -0
  93. package/dist/showcase/types.js +3 -0
  94. package/dist/showcase/types.js.map +1 -0
  95. package/dist/types.d.ts +69 -0
  96. package/dist/types.d.ts.map +1 -1
  97. package/package.json +13 -1
@@ -0,0 +1,195 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import readline from 'node:readline/promises';
4
+ import { stdin, stdout } from 'node:process';
5
+ import chalk from 'chalk';
6
+ const DEFAULT_PATH = '.auth/storage-state.json';
7
+ function resolve(input) {
8
+ return path.resolve(input || process.env.AI_TANGLE_STORAGE_STATE_PATH || DEFAULT_PATH);
9
+ }
10
+ function validate(filePath) {
11
+ const resolved = path.resolve(filePath);
12
+ if (!fs.existsSync(resolved)) {
13
+ throw new Error(`Storage state file not found: ${resolved}`);
14
+ }
15
+ let parsed;
16
+ try {
17
+ parsed = JSON.parse(fs.readFileSync(resolved, 'utf-8'));
18
+ }
19
+ catch {
20
+ throw new Error(`Storage state is not valid JSON: ${resolved}`);
21
+ }
22
+ const obj = parsed;
23
+ if (!Array.isArray(obj?.cookies) || !Array.isArray(obj?.origins)) {
24
+ throw new Error(`Storage state must contain cookies[] and origins[]: ${resolved}`);
25
+ }
26
+ const cookies = obj.cookies;
27
+ const origins = obj.origins;
28
+ return {
29
+ path: resolved,
30
+ parsed: obj,
31
+ cookieCount: cookies.length,
32
+ originCount: origins.length,
33
+ originNames: origins
34
+ .map((e) => String(e?.origin || '').trim())
35
+ .filter(Boolean),
36
+ };
37
+ }
38
+ export async function handleAuthSave(opts) {
39
+ const url = opts.url || 'https://ai.tangle.tools';
40
+ const outPath = resolve(opts.output);
41
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
42
+ // Dynamic import — playwright is a peer dep
43
+ const { chromium } = await import('playwright');
44
+ const browser = await chromium.launch({ headless: false });
45
+ const context = await browser.newContext({ viewport: { width: 1440, height: 900 } });
46
+ const page = await context.newPage();
47
+ console.log(`${chalk.cyan('Opening:')} ${url}`);
48
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 120_000 });
49
+ console.log('');
50
+ console.log('Log in manually in the opened browser window.');
51
+ console.log(`When done, press ${chalk.bold('Enter')} here to save storage state.`);
52
+ console.log(`Output: ${chalk.dim(outPath)}`);
53
+ const rl = readline.createInterface({ input: stdin, output: stdout });
54
+ await rl.question('Press Enter after login is complete... ');
55
+ rl.close();
56
+ await context.storageState({ path: outPath });
57
+ await browser.close();
58
+ console.log(`${chalk.green('✓')} Saved storage state: ${outPath}`);
59
+ console.log(`${chalk.dim('Verify:')} bad auth check ${outPath}`);
60
+ console.log(`${chalk.dim('Use:')} bad run --storage-state ${outPath} --goal "..." --url "..."`);
61
+ }
62
+ function parseFillArg(raw) {
63
+ // "selector=value" or "name:field=value" (shorthand for [name="field"])
64
+ const eqIdx = raw.indexOf('=');
65
+ if (eqIdx === -1)
66
+ throw new Error(`Invalid --fill format: "${raw}". Expected "selector=value" or "name:field=value".`);
67
+ const left = raw.slice(0, eqIdx).trim();
68
+ const value = raw.slice(eqIdx + 1);
69
+ // Shorthand: "email=foo" → input[name="email"], input[type="email"], or #email
70
+ const selector = left.includes('[') || left.includes('#') || left.includes('.')
71
+ ? left
72
+ : `input[name="${left}"], input[type="${left}"], textarea[name="${left}"], #${left}`;
73
+ return { selector, value };
74
+ }
75
+ function parseCookieArg(raw, url) {
76
+ // "name=value" — domain inferred from --url
77
+ const eqIdx = raw.indexOf('=');
78
+ if (eqIdx === -1)
79
+ throw new Error(`Invalid --cookie format: "${raw}". Expected "name=value".`);
80
+ const domain = new URL(url).hostname;
81
+ return {
82
+ name: raw.slice(0, eqIdx),
83
+ value: raw.slice(eqIdx + 1),
84
+ domain,
85
+ path: '/',
86
+ };
87
+ }
88
+ export async function handleAuthLogin(opts) {
89
+ const url = opts.url;
90
+ if (!url) {
91
+ throw new Error('--url is required for auth login');
92
+ }
93
+ const outPath = resolve(opts.output);
94
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
95
+ const headless = opts.headless ?? true;
96
+ const waitTimeout = opts.waitTimeout ?? 30_000;
97
+ const fills = (opts.fill || []).map(parseFillArg);
98
+ const cookies = (opts.cookie || []).map((c) => parseCookieArg(c, url));
99
+ if (fills.length === 0 && cookies.length === 0) {
100
+ throw new Error('auth login requires --fill and/or --cookie. Use "auth save" for interactive login.');
101
+ }
102
+ const { chromium } = await import('playwright');
103
+ const browser = await chromium.launch({ headless });
104
+ const context = await browser.newContext({ viewport: { width: 1440, height: 900 } });
105
+ const page = await context.newPage();
106
+ try {
107
+ // Inject cookies before navigation if provided
108
+ if (cookies.length > 0) {
109
+ console.log(`${chalk.cyan('Injecting')} ${cookies.length} cookie(s)`);
110
+ await context.addCookies(cookies.map((c) => ({
111
+ name: c.name,
112
+ value: c.value,
113
+ domain: c.domain,
114
+ path: c.path,
115
+ })));
116
+ }
117
+ console.log(`${chalk.cyan('Navigating:')} ${url}`);
118
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60_000 });
119
+ // Fill form fields
120
+ for (const { selector, value } of fills) {
121
+ const el = page.locator(selector).first();
122
+ await el.waitFor({ state: 'visible', timeout: 10_000 });
123
+ await el.fill(value);
124
+ console.log(`${chalk.dim('Filled:')} ${selector.length > 60 ? selector.slice(0, 57) + '...' : selector}`);
125
+ }
126
+ // Submit: press Enter on the last filled field, or click a submit button
127
+ if (fills.length > 0) {
128
+ const submitBtn = page.locator('button[type="submit"], input[type="submit"]').first();
129
+ const hasSubmit = await submitBtn.isVisible().catch(() => false);
130
+ if (hasSubmit) {
131
+ await submitBtn.click();
132
+ console.log(`${chalk.dim('Clicked:')} submit button`);
133
+ }
134
+ else {
135
+ await page.keyboard.press('Enter');
136
+ console.log(`${chalk.dim('Pressed:')} Enter`);
137
+ }
138
+ }
139
+ // Wait for success signal
140
+ if (opts.waitFor) {
141
+ const wf = opts.waitFor;
142
+ if (wf.startsWith('url:')) {
143
+ // Wait for URL pattern: "url:*/dashboard*"
144
+ const pattern = wf.slice(4);
145
+ console.log(`${chalk.dim('Waiting for URL:')} ${pattern}`);
146
+ await page.waitForURL(pattern, { timeout: waitTimeout });
147
+ }
148
+ else {
149
+ // Wait for selector
150
+ console.log(`${chalk.dim('Waiting for:')} ${wf}`);
151
+ await page.waitForSelector(wf, { state: 'visible', timeout: waitTimeout });
152
+ }
153
+ }
154
+ else {
155
+ // Default: wait for navigation to settle
156
+ console.log(`${chalk.dim('Waiting for navigation to settle...')}`);
157
+ await page.waitForLoadState('networkidle', { timeout: waitTimeout }).catch(() => {
158
+ // networkidle can be flaky — fall back to just waiting a bit
159
+ });
160
+ // Give SPAs time to redirect after auth
161
+ await page.waitForTimeout(2_000);
162
+ }
163
+ await context.storageState({ path: outPath });
164
+ const state = validate(outPath);
165
+ console.log(`${chalk.green('✓')} Saved storage state: ${outPath}`);
166
+ console.log(` cookies: ${state.cookieCount}, origins: ${state.originCount}`);
167
+ console.log(` final URL: ${page.url()}`);
168
+ }
169
+ finally {
170
+ await browser.close();
171
+ }
172
+ }
173
+ export async function handleAuthCheck(opts) {
174
+ const target = resolve(opts.path);
175
+ const state = validate(target);
176
+ const expectedOrigin = opts.origin || '';
177
+ console.log(`${chalk.cyan('Storage state:')} ${state.path}`);
178
+ console.log(` cookies: ${state.cookieCount}`);
179
+ console.log(` origins: ${state.originCount}`);
180
+ for (const origin of state.originNames.slice(0, 10)) {
181
+ console.log(` origin: ${origin}`);
182
+ }
183
+ if (expectedOrigin) {
184
+ const found = state.originNames.some((o) => o.includes(expectedOrigin));
185
+ if (!found) {
186
+ console.error(`${chalk.red('✗')} Expected origin not found: ${expectedOrigin}`);
187
+ process.exit(1);
188
+ }
189
+ console.log(`${chalk.green('✓')} Origin matched: ${expectedOrigin}`);
190
+ }
191
+ else {
192
+ console.log(`${chalk.green('✓')} Valid`);
193
+ }
194
+ }
195
+ //# sourceMappingURL=cli-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-auth.js","sourceRoot":"","sources":["../src/cli-auth.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,14 @@ export interface DesignAuditOptions {
18
18
  debug?: boolean;
19
19
  viewport?: string;
20
20
  extractTokens?: boolean;
21
+ /** Evolve mode: true/css for CSS injection, or agent name (claude-code, codex, opencode) for agent dispatch */
22
+ evolve?: string | boolean;
23
+ /** Max fix-reaudit cycles (default: 3) */
24
+ evolveRounds?: number;
25
+ /** Run 3x and report score variance for reproducibility testing */
26
+ reproducibility?: boolean;
27
+ /** Project directory the agent should edit (defaults to cwd) */
28
+ projectDir?: string;
21
29
  }
22
30
  export declare function runDesignAudit(opts: DesignAuditOptions): Promise<void>;
23
31
  export interface ExtractDesignTokensOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-design-audit.d.ts","sourceRoot":"","sources":["../src/cli-design-audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAA4B,YAAY,EAAkL,MAAM,YAAY,CAAA;AA2PxP,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G5E;AAksBD,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACjK;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoLrG"}
1
+ {"version":3,"file":"cli-design-audit.d.ts","sourceRoot":"","sources":["../src/cli-design-audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAA4B,YAAY,EAA8L,MAAM,YAAY,CAAA;AA8XpQ,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,+GAA+G;IAC/G,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACzB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mEAAmE;IACnE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+K5E;AAyxCD,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACjK;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsRrG"}