10x-chat 0.4.3 → 0.5.7

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 (77) hide show
  1. package/dist/bin/cli.js +2 -0
  2. package/dist/bin/cli.js.map +1 -1
  3. package/dist/browser/daemon.d.ts +39 -0
  4. package/dist/browser/daemon.d.ts.map +1 -0
  5. package/dist/browser/daemon.js +114 -0
  6. package/dist/browser/daemon.js.map +1 -0
  7. package/dist/browser/index.d.ts +2 -0
  8. package/dist/browser/index.d.ts.map +1 -1
  9. package/dist/browser/index.js +2 -0
  10. package/dist/browser/index.js.map +1 -1
  11. package/dist/browser/manager.d.ts.map +1 -1
  12. package/dist/browser/manager.js +25 -12
  13. package/dist/browser/manager.js.map +1 -1
  14. package/dist/browser/tabs.d.ts +22 -0
  15. package/dist/browser/tabs.d.ts.map +1 -0
  16. package/dist/browser/tabs.js +97 -0
  17. package/dist/browser/tabs.js.map +1 -0
  18. package/dist/cli/chat.d.ts.map +1 -1
  19. package/dist/cli/chat.js +83 -42
  20. package/dist/cli/chat.js.map +1 -1
  21. package/dist/cli/login.d.ts.map +1 -1
  22. package/dist/cli/login.js +96 -3
  23. package/dist/cli/login.js.map +1 -1
  24. package/dist/cli/video.d.ts +3 -0
  25. package/dist/cli/video.d.ts.map +1 -0
  26. package/dist/cli/video.js +99 -0
  27. package/dist/cli/video.js.map +1 -0
  28. package/dist/core/files.d.ts +6 -0
  29. package/dist/core/files.d.ts.map +1 -0
  30. package/dist/core/files.js +39 -0
  31. package/dist/core/files.js.map +1 -0
  32. package/dist/core/images.d.ts +8 -0
  33. package/dist/core/images.d.ts.map +1 -0
  34. package/dist/core/images.js +79 -0
  35. package/dist/core/images.js.map +1 -0
  36. package/dist/core/index.d.ts +1 -1
  37. package/dist/core/index.d.ts.map +1 -1
  38. package/dist/core/index.js +1 -1
  39. package/dist/core/index.js.map +1 -1
  40. package/dist/core/orchestrator.d.ts +10 -0
  41. package/dist/core/orchestrator.d.ts.map +1 -1
  42. package/dist/core/orchestrator.js +19 -106
  43. package/dist/core/orchestrator.js.map +1 -1
  44. package/dist/core/polling.d.ts +30 -0
  45. package/dist/core/polling.d.ts.map +1 -0
  46. package/dist/core/polling.js +37 -0
  47. package/dist/core/polling.js.map +1 -0
  48. package/dist/core/video-orchestrator.d.ts +22 -0
  49. package/dist/core/video-orchestrator.d.ts.map +1 -0
  50. package/dist/core/video-orchestrator.js +341 -0
  51. package/dist/core/video-orchestrator.js.map +1 -0
  52. package/dist/providers/chatgpt.d.ts.map +1 -1
  53. package/dist/providers/chatgpt.js +26 -39
  54. package/dist/providers/chatgpt.js.map +1 -1
  55. package/dist/providers/claude.d.ts.map +1 -1
  56. package/dist/providers/claude.js +24 -52
  57. package/dist/providers/claude.js.map +1 -1
  58. package/dist/providers/flow.d.ts +55 -0
  59. package/dist/providers/flow.d.ts.map +1 -0
  60. package/dist/providers/flow.js +286 -0
  61. package/dist/providers/flow.js.map +1 -0
  62. package/dist/providers/gemini.d.ts.map +1 -1
  63. package/dist/providers/gemini.js +30 -54
  64. package/dist/providers/gemini.js.map +1 -1
  65. package/dist/providers/grok.d.ts.map +1 -1
  66. package/dist/providers/grok.js +23 -42
  67. package/dist/providers/grok.js.map +1 -1
  68. package/dist/providers/registry.d.ts.map +1 -1
  69. package/dist/providers/registry.js +2 -0
  70. package/dist/providers/registry.js.map +1 -1
  71. package/dist/providers/utils.d.ts +10 -0
  72. package/dist/providers/utils.d.ts.map +1 -0
  73. package/dist/providers/utils.js +28 -0
  74. package/dist/providers/utils.js.map +1 -0
  75. package/dist/types.d.ts +24 -2
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-orchestrator.js","sourceRoot":"","sources":["../../src/core/video-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,cAAc,EAAE,cAQ5B,CAAC;AAmDF,eAAO,MAAM,cAAc,EAAE,eAgL5B,CAAC"}
1
+ {"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,cAAc,EAAE,cAQ5B,CAAC;AAmDF,eAAO,MAAM,cAAc,EAAE,eAyJ5B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { fillAndSubmitPrompt } from './utils.js';
1
2
  export const CHATGPT_CONFIG = {
2
3
  name: 'chatgpt',
3
4
  displayName: 'ChatGPT',
@@ -41,8 +42,8 @@ async function dismissOverlays(page) {
41
42
  ];
42
43
  for (const selector of overlaySelectors) {
43
44
  try {
44
- const btn = await page.$(selector);
45
- if (btn && (await btn.isVisible())) {
45
+ const btn = page.locator(selector).first();
46
+ if (await btn.isVisible().catch(() => false)) {
46
47
  await btn.click();
47
48
  await page.waitForTimeout(300);
48
49
  }
@@ -56,17 +57,26 @@ export const chatgptActions = {
56
57
  async isLoggedIn(page) {
57
58
  try {
58
59
  // Wait for either composer or login indicators to appear
59
- await Promise.race([
60
- page.waitForSelector(SELECTORS.composer, { timeout: 8_000 }),
61
- page.waitForSelector(SELECTORS.loginPage, { timeout: 8_000 }),
62
- ]).catch(() => { });
60
+ await page
61
+ .locator(`${SELECTORS.composer}, ${SELECTORS.loginPage}`)
62
+ .first()
63
+ .waitFor({ state: 'visible', timeout: 8_000 })
64
+ .catch(() => { });
63
65
  // Dismiss any overlays that might be hiding the composer
64
66
  await dismissOverlays(page);
65
- const composer = await page.$(SELECTORS.composer);
66
- if (composer)
67
+ const composerVisible = await page
68
+ .locator(SELECTORS.composer)
69
+ .first()
70
+ .isVisible()
71
+ .catch(() => false);
72
+ if (composerVisible)
67
73
  return true;
68
- const loginButton = await page.$(SELECTORS.loginPage);
69
- if (loginButton)
74
+ const loginVisible = await page
75
+ .locator(SELECTORS.loginPage)
76
+ .first()
77
+ .isVisible()
78
+ .catch(() => false);
79
+ if (loginVisible)
70
80
  return false;
71
81
  return false;
72
82
  }
@@ -83,33 +93,7 @@ export const chatgptActions = {
83
93
  async submitPrompt(page, prompt) {
84
94
  // Dismiss onboarding/welcome modals that block the composer
85
95
  await dismissOverlays(page);
86
- const composer = await page.waitForSelector(SELECTORS.composer, { timeout: 15_000 });
87
- if (!composer) {
88
- throw new Error('ChatGPT composer not found. The UI may have changed. Try running with --headed to debug.');
89
- }
90
- await composer.click();
91
- await page.keyboard.press('Meta+a');
92
- await page.keyboard.press('Backspace');
93
- // Use evaluate for large text to avoid keyboard.type slowness
94
- try {
95
- await composer.fill(prompt);
96
- }
97
- catch {
98
- // contenteditable elements sometimes reject fill() — inject via JS
99
- await page.evaluate(({ sel, text }) => {
100
- const el = document.querySelector(sel);
101
- if (el) {
102
- el.innerText = text;
103
- el.dispatchEvent(new Event('input', { bubbles: true }));
104
- }
105
- }, { sel: SELECTORS.composer, text: prompt });
106
- }
107
- await page.waitForTimeout(300);
108
- const sendButton = await page.waitForSelector(SELECTORS.sendButton, { timeout: 5_000 });
109
- if (!sendButton) {
110
- throw new Error('ChatGPT send button not found. The UI may have changed.');
111
- }
112
- await sendButton.click();
96
+ await fillAndSubmitPrompt(page, SELECTORS, prompt);
113
97
  },
114
98
  async captureResponse(page, opts) {
115
99
  const { timeoutMs, onChunk } = opts;
@@ -142,8 +126,11 @@ export const chatgptActions = {
142
126
  const POLL_INTERVAL = 1000;
143
127
  while (Date.now() - startTime < timeoutMs) {
144
128
  // If stop button is visible, streaming is still in progress — reset stability
145
- const stopBtn = await page.$(SELECTORS.stopButton);
146
- const isStreaming = stopBtn ? await stopBtn.isVisible() : false;
129
+ const isStreaming = await page
130
+ .locator(SELECTORS.stopButton)
131
+ .first()
132
+ .isVisible()
133
+ .catch(() => false);
147
134
  const lastTurn = page.locator(SELECTORS.assistantTurn).last();
148
135
  const remainingMs = Math.max(timeoutMs - (Date.now() - startTime), 5_000);
149
136
  const currentText = (await lastTurn.textContent({ timeout: remainingMs }))?.trim() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,eAAO,MAAM,aAAa,EAAE,cAQ3B,CAAC;AAWF,eAAO,MAAM,aAAa,EAAE,eAgG3B,CAAC"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGrF,eAAO,MAAM,aAAa,EAAE,cAQ3B,CAAC;AAWF,eAAO,MAAM,aAAa,EAAE,eA+D3B,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { pollUntilStable } from '../core/polling.js';
2
+ import { fillAndSubmitPrompt } from './utils.js';
1
3
  export const CLAUDE_CONFIG = {
2
4
  name: 'claude',
3
5
  displayName: 'Claude',
@@ -16,9 +18,17 @@ const SELECTORS = {
16
18
  export const claudeActions = {
17
19
  async isLoggedIn(page) {
18
20
  try {
19
- await page.waitForSelector(SELECTORS.composer, { timeout: 8_000 }).catch(() => { });
20
- const composer = await page.$(SELECTORS.composer);
21
- return !!composer;
21
+ await page
22
+ .locator(SELECTORS.composer)
23
+ .first()
24
+ .waitFor({ state: 'visible', timeout: 8_000 })
25
+ .catch(() => { });
26
+ const composerVisible = await page
27
+ .locator(SELECTORS.composer)
28
+ .first()
29
+ .isVisible()
30
+ .catch(() => false);
31
+ return composerVisible;
22
32
  }
23
33
  catch {
24
34
  return false;
@@ -30,65 +40,27 @@ export const claudeActions = {
30
40
  await page.waitForTimeout(2000);
31
41
  },
32
42
  async submitPrompt(page, prompt) {
33
- const composer = await page.waitForSelector(SELECTORS.composer, { timeout: 15_000 });
34
- if (!composer) {
35
- throw new Error('Claude composer not found. The UI may have changed. Try running with --headed to debug.');
36
- }
37
- await composer.click();
38
- await page.keyboard.press('Meta+a');
39
- await page.keyboard.press('Backspace');
40
- try {
41
- await composer.fill(prompt);
42
- }
43
- catch {
44
- await page.evaluate(({ sel, text }) => {
45
- const el = document.querySelector(sel);
46
- if (el) {
47
- el.innerText = text;
48
- el.dispatchEvent(new Event('input', { bubbles: true }));
49
- }
50
- }, { sel: SELECTORS.composer, text: prompt });
51
- }
52
- await page.waitForTimeout(300);
53
- const sendButton = await page.waitForSelector(SELECTORS.sendButton, { timeout: 5_000 });
54
- if (!sendButton)
55
- throw new Error('Claude send button not found.');
56
- await sendButton.click();
43
+ await fillAndSubmitPrompt(page, SELECTORS, prompt);
57
44
  },
58
45
  async captureResponse(page, opts) {
59
46
  const { timeoutMs, onChunk } = opts;
60
47
  const startTime = Date.now();
61
48
  const existingTurns = await page.locator(SELECTORS.responseTurn).count();
62
49
  await page.locator(SELECTORS.responseTurn).nth(existingTurns).waitFor({ timeout: timeoutMs });
63
- let lastText = '';
64
- let stableCount = 0;
65
- const STABLE_THRESHOLD = 3;
66
- const POLL_INTERVAL = 1000;
67
- while (Date.now() - startTime < timeoutMs) {
68
- const lastTurn = page.locator(SELECTORS.responseTurn).last();
69
- const currentText = (await lastTurn.textContent())?.trim() ?? '';
70
- if (currentText === lastText) {
71
- stableCount++;
72
- if (stableCount >= STABLE_THRESHOLD && currentText.length > 0)
73
- break;
74
- }
75
- else {
76
- if (onChunk && currentText.length > lastText.length) {
77
- onChunk(currentText.slice(lastText.length));
78
- }
79
- lastText = currentText;
80
- stableCount = 0;
81
- }
82
- await page.waitForTimeout(POLL_INTERVAL);
83
- }
50
+ const remainingMs = Math.max(timeoutMs - (Date.now() - startTime), 5_000);
51
+ const { text, elapsed: _pollElapsed, truncated, } = await pollUntilStable(page, {
52
+ getText: async (p) => (await p.locator(SELECTORS.responseTurn).last().textContent())?.trim() ?? '',
53
+ timeoutMs: remainingMs,
54
+ onChunk,
55
+ });
84
56
  const lastTurn = page.locator(SELECTORS.responseTurn).last();
85
57
  const markdown = (await lastTurn.innerHTML()) ?? '';
86
- const elapsed = Date.now() - startTime;
58
+ const totalElapsed = Date.now() - startTime;
87
59
  return {
88
- text: lastText,
60
+ text,
89
61
  markdown,
90
- truncated: elapsed >= timeoutMs && stableCount < STABLE_THRESHOLD,
91
- thinkingTime: Math.round(elapsed / 1000),
62
+ truncated,
63
+ thinkingTime: Math.round(totalElapsed / 1000),
92
64
  };
93
65
  },
94
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/providers/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { Page } from 'playwright';
2
+ import type { ProviderActions, ProviderConfig, VideoModel } from '../types.js';
3
+ export declare const FLOW_CONFIG: ProviderConfig;
4
+ export declare const FLOW_SELECTORS: {
5
+ readonly newProject: "button:has-text(\"New project\")";
6
+ readonly goBack: "button:has-text(\"Go Back\")";
7
+ readonly composer: "div[contenteditable=\"true\"]";
8
+ readonly composerTextbox: "[role=\"textbox\"]";
9
+ readonly createButton: "button:has-text(\"arrow_forward\")";
10
+ readonly modelPill: ".sc-46973129-1";
11
+ readonly imageTab: "button[role=\"tab\"]:has-text(\"Image\")";
12
+ readonly videoTab: "button[role=\"tab\"]:has-text(\"Video\")";
13
+ readonly ingredientsTab: "button[role=\"tab\"]:has-text(\"Ingredients\")";
14
+ readonly framesTab: "button[role=\"tab\"]:has-text(\"Frames\")";
15
+ readonly landscapeBtn: "button:has-text(\"Landscape\")";
16
+ readonly portraitBtn: "button:has-text(\"Portrait\")";
17
+ readonly countX1: "button[role=\"tab\"]:has-text(\"x1\")";
18
+ readonly countX2: "button[role=\"tab\"]:has-text(\"x2\")";
19
+ readonly countX3: "button[role=\"tab\"]:has-text(\"x3\")";
20
+ readonly countX4: "button[role=\"tab\"]:has-text(\"x4\")";
21
+ readonly modelDropdown: "button:has-text(\"arrow_drop_down\")";
22
+ readonly startFrame: "text=\"Start\"";
23
+ readonly endFrame: "text=\"End\"";
24
+ readonly addMedia: "button:has-text(\"Add Media\")";
25
+ readonly uploadImage: "[role=\"menuitem\"]:has-text(\"Upload image\")";
26
+ readonly fileInput: "input[type=\"file\"][accept=\"image/*\"]";
27
+ readonly cookieAgree: "button:has-text(\"Agree\")";
28
+ readonly scenebuilder: "button:has-text(\"Scenebuilder\")";
29
+ };
30
+ /**
31
+ * Configure the model selector for video generation.
32
+ */
33
+ export declare function configureVideoMode(page: Page, opts: {
34
+ mode?: 'ingredients' | 'frames';
35
+ model?: VideoModel;
36
+ orientation?: 'landscape' | 'portrait';
37
+ count?: 1 | 2 | 3 | 4;
38
+ }): Promise<void>;
39
+ /**
40
+ * Upload keyframe images in Frames mode.
41
+ */
42
+ export declare function uploadKeyframes(page: Page, opts: {
43
+ startFrame?: string;
44
+ endFrame?: string;
45
+ }): Promise<void>;
46
+ /**
47
+ * Poll for video generation progress. Returns when all tiles show completion
48
+ * or when the timeout is reached.
49
+ */
50
+ export declare function waitForGeneration(page: Page, opts: {
51
+ timeoutMs: number;
52
+ onProgress?: (pct: number) => void;
53
+ }): Promise<void>;
54
+ export declare const flowActions: ProviderActions;
55
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/providers/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAoB,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjG,eAAO,MAAM,WAAW,EAAE,cAczB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAkDjB,CAAC;AAuBX;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACvC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,eAAO,MAAM,WAAW,EAAE,eAqFzB,CAAC"}
@@ -0,0 +1,286 @@
1
+ export const FLOW_CONFIG = {
2
+ name: 'flow',
3
+ displayName: 'Google Flow',
4
+ url: 'https://labs.google/fx/tools/flow',
5
+ loginUrl: 'https://labs.google/fx/tools/flow',
6
+ models: [
7
+ 'Veo 3.1 - Fast',
8
+ 'Veo 3.1 - Fast [Lower Priority]',
9
+ 'Veo 3.1 - Quality',
10
+ 'Veo 2 - Fast',
11
+ 'Veo 2 - Quality',
12
+ ],
13
+ defaultModel: 'Veo 3.1 - Fast',
14
+ defaultTimeoutMs: 10 * 60 * 1000, // 10 mins — video gen is slow
15
+ };
16
+ export const FLOW_SELECTORS = {
17
+ // Navigation
18
+ newProject: 'button:has-text("New project")',
19
+ goBack: 'button:has-text("Go Back")',
20
+ // Prompt composer
21
+ composer: 'div[contenteditable="true"]',
22
+ composerTextbox: '[role="textbox"]',
23
+ // Submit
24
+ createButton: 'button:has-text("arrow_forward")',
25
+ // Model selector popup — open by clicking the pill button
26
+ modelPill: '.sc-46973129-1', // the model pill component class
27
+ // Output type tabs (role="tab")
28
+ imageTab: 'button[role="tab"]:has-text("Image")',
29
+ videoTab: 'button[role="tab"]:has-text("Video")',
30
+ // Video sub-mode tabs
31
+ ingredientsTab: 'button[role="tab"]:has-text("Ingredients")',
32
+ framesTab: 'button[role="tab"]:has-text("Frames")',
33
+ // Orientation
34
+ landscapeBtn: 'button:has-text("Landscape")',
35
+ portraitBtn: 'button:has-text("Portrait")',
36
+ // Count
37
+ countX1: 'button[role="tab"]:has-text("x1")',
38
+ countX2: 'button[role="tab"]:has-text("x2")',
39
+ countX3: 'button[role="tab"]:has-text("x3")',
40
+ countX4: 'button[role="tab"]:has-text("x4")',
41
+ // Model dropdown (within popup)
42
+ modelDropdown: 'button:has-text("arrow_drop_down")',
43
+ // Frame inputs (Frames mode)
44
+ startFrame: 'text="Start"',
45
+ endFrame: 'text="End"',
46
+ // Media upload
47
+ addMedia: 'button:has-text("Add Media")',
48
+ uploadImage: '[role="menuitem"]:has-text("Upload image")',
49
+ fileInput: 'input[type="file"][accept="image/*"]',
50
+ // Cookie
51
+ cookieAgree: 'button:has-text("Agree")',
52
+ // Scenebuilder
53
+ scenebuilder: 'button:has-text("Scenebuilder")',
54
+ };
55
+ /**
56
+ * Open the model selector popup by clicking the pill button in the bottom bar.
57
+ */
58
+ async function openModelSelector(page) {
59
+ // The model pill displays current mode info (e.g. "🍌 Nano Banana", "Video 📺 x2")
60
+ const pill = page.locator(FLOW_SELECTORS.modelPill).first();
61
+ if (await pill.isVisible().catch(() => false)) {
62
+ await pill.click();
63
+ await page.waitForTimeout(1000);
64
+ return;
65
+ }
66
+ // Fallback: try clicking any button that contains the current model info
67
+ const fallback = page
68
+ .locator('button:has-text("Nano Banana"), button:has-text("Video"), button:has-text("Veo")')
69
+ .first();
70
+ if (await fallback.isVisible().catch(() => false)) {
71
+ await fallback.click();
72
+ await page.waitForTimeout(1000);
73
+ }
74
+ }
75
+ /**
76
+ * Configure the model selector for video generation.
77
+ */
78
+ export async function configureVideoMode(page, opts) {
79
+ await openModelSelector(page);
80
+ // All clicks inside the popup need { force: true } because Flow's
81
+ // overlay/backdrop (<html>) intercepts pointer events.
82
+ // 1. Switch to Video tab (Flow defaults to Image — this is critical)
83
+ const videoTab = page.locator(FLOW_SELECTORS.videoTab).first();
84
+ try {
85
+ await videoTab.waitFor({ state: 'visible', timeout: 5_000 });
86
+ await videoTab.click({ force: true });
87
+ await page.waitForTimeout(800);
88
+ }
89
+ catch {
90
+ // Popup may not have opened — retry
91
+ await openModelSelector(page);
92
+ const retry = page.locator(FLOW_SELECTORS.videoTab).first();
93
+ if (await retry.isVisible().catch(() => false)) {
94
+ await retry.click({ force: true });
95
+ await page.waitForTimeout(800);
96
+ }
97
+ else {
98
+ console.warn('⚠ Could not find Video tab — generation may default to Image mode');
99
+ }
100
+ }
101
+ // 2. Select sub-mode (Ingredients or Frames)
102
+ const mode = opts.mode ?? 'ingredients';
103
+ const modeTab = mode === 'frames'
104
+ ? page.locator(FLOW_SELECTORS.framesTab).first()
105
+ : page.locator(FLOW_SELECTORS.ingredientsTab).first();
106
+ if (await modeTab.isVisible().catch(() => false)) {
107
+ await modeTab.click({ force: true });
108
+ await page.waitForTimeout(500);
109
+ }
110
+ // 3. Set orientation
111
+ const orientation = opts.orientation ?? 'landscape';
112
+ const orientBtn = orientation === 'portrait'
113
+ ? page.locator(FLOW_SELECTORS.portraitBtn).first()
114
+ : page.locator(FLOW_SELECTORS.landscapeBtn).first();
115
+ if (await orientBtn.isVisible().catch(() => false)) {
116
+ await orientBtn.click({ force: true });
117
+ await page.waitForTimeout(300);
118
+ }
119
+ // 4. Set count
120
+ const count = opts.count ?? 1;
121
+ const countSel = {
122
+ 1: FLOW_SELECTORS.countX1,
123
+ 2: FLOW_SELECTORS.countX2,
124
+ 3: FLOW_SELECTORS.countX3,
125
+ 4: FLOW_SELECTORS.countX4,
126
+ }[count];
127
+ const countBtn = page.locator(countSel).first();
128
+ if (await countBtn.isVisible().catch(() => false)) {
129
+ await countBtn.click({ force: true });
130
+ await page.waitForTimeout(300);
131
+ }
132
+ // 5. Select model only if non-default (avoids problematic dropdown click)
133
+ if (opts.model && opts.model !== 'Veo 3.1 - Fast') {
134
+ const modelDropdown = page.locator(FLOW_SELECTORS.modelDropdown).last();
135
+ if (await modelDropdown.isVisible().catch(() => false)) {
136
+ await modelDropdown.click({ force: true });
137
+ await page.waitForTimeout(1000);
138
+ const modelOption = page.locator(`text="${opts.model}"`).first();
139
+ if (await modelOption.isVisible().catch(() => false)) {
140
+ await modelOption.click({ force: true });
141
+ await page.waitForTimeout(500);
142
+ }
143
+ }
144
+ }
145
+ // Close popup by pressing Escape
146
+ await page.keyboard.press('Escape');
147
+ await page.waitForTimeout(300);
148
+ }
149
+ /**
150
+ * Upload keyframe images in Frames mode.
151
+ */
152
+ export async function uploadKeyframes(page, opts) {
153
+ if (opts.startFrame) {
154
+ const startBox = page.locator(FLOW_SELECTORS.startFrame).first();
155
+ if (await startBox.isVisible().catch(() => false)) {
156
+ await startBox.click();
157
+ await page.waitForTimeout(500);
158
+ // The file input should become available
159
+ const fileInput = page.locator(FLOW_SELECTORS.fileInput).first();
160
+ await fileInput.setInputFiles(opts.startFrame);
161
+ await page.waitForTimeout(2000);
162
+ }
163
+ }
164
+ if (opts.endFrame) {
165
+ const endBox = page.locator(FLOW_SELECTORS.endFrame).first();
166
+ if (await endBox.isVisible().catch(() => false)) {
167
+ await endBox.click();
168
+ await page.waitForTimeout(500);
169
+ const fileInput = page.locator(FLOW_SELECTORS.fileInput).first();
170
+ await fileInput.setInputFiles(opts.endFrame);
171
+ await page.waitForTimeout(2000);
172
+ }
173
+ }
174
+ }
175
+ /**
176
+ * Poll for video generation progress. Returns when all tiles show completion
177
+ * or when the timeout is reached.
178
+ */
179
+ export async function waitForGeneration(page, opts) {
180
+ const { timeoutMs, onProgress } = opts;
181
+ const start = Date.now();
182
+ const POLL_INTERVAL = 3000;
183
+ while (Date.now() - start < timeoutMs) {
184
+ // Check for progress percentages in tiles
185
+ const progress = await page.evaluate(() => {
186
+ const tiles = document.querySelectorAll('[class*="tile"], [class*="card"], [class*="media"]');
187
+ const percents = [];
188
+ for (const tile of Array.from(tiles)) {
189
+ const text = tile.textContent ?? '';
190
+ const match = text.match(/(\d+)%/);
191
+ if (match)
192
+ percents.push(Number.parseInt(match[1], 10));
193
+ }
194
+ // Also check for video elements (generation complete)
195
+ const videos = document.querySelectorAll('video');
196
+ if (videos.length > 0)
197
+ return { done: true, percent: 100, videoCount: videos.length };
198
+ if (percents.length === 0)
199
+ return { done: false, percent: 0, videoCount: 0 };
200
+ const avg = Math.round(percents.reduce((a, b) => a + b, 0) / percents.length);
201
+ return { done: avg >= 100, percent: avg, videoCount: 0 };
202
+ });
203
+ if (onProgress)
204
+ onProgress(progress.percent);
205
+ if (progress.done || progress.videoCount > 0) {
206
+ // Wait a bit more for the UI to settle
207
+ await page.waitForTimeout(2000);
208
+ return;
209
+ }
210
+ await page.waitForTimeout(POLL_INTERVAL);
211
+ }
212
+ }
213
+ export const flowActions = {
214
+ async isLoggedIn(page) {
215
+ try {
216
+ // Wait for the studio to load
217
+ await page.waitForTimeout(3000);
218
+ // Flow requires Google account — check for profile avatar or ULTRA badge
219
+ const hasProfile = await page.evaluate(() => {
220
+ const body = document.body.textContent ?? '';
221
+ // If we see "New project" or "Create", we're logged in
222
+ return body.includes('New project') || body.includes('Create a project');
223
+ });
224
+ return hasProfile;
225
+ }
226
+ catch {
227
+ return false;
228
+ }
229
+ },
230
+ async submitPrompt(page, prompt) {
231
+ // Find the composer
232
+ const composer = page.locator(FLOW_SELECTORS.composer).first();
233
+ await composer.waitFor({ state: 'visible', timeout: 10_000 });
234
+ await composer.click();
235
+ await page.waitForTimeout(300);
236
+ // Clear any existing text and type the prompt
237
+ await page.keyboard.press('ControlOrMeta+a');
238
+ await page.keyboard.press('Backspace');
239
+ try {
240
+ await composer.fill(prompt);
241
+ }
242
+ catch {
243
+ await page.keyboard.type(prompt, { delay: 15 });
244
+ }
245
+ await page.waitForTimeout(300);
246
+ // Click the → Create button (last arrow_forward button)
247
+ const createBtn = page.locator(FLOW_SELECTORS.createButton).last();
248
+ await createBtn.waitFor({ state: 'visible', timeout: 5_000 });
249
+ await createBtn.click();
250
+ },
251
+ async captureResponse(page, opts) {
252
+ const { timeoutMs, onChunk } = opts;
253
+ const startTime = Date.now();
254
+ // Wait for generation to complete
255
+ await waitForGeneration(page, {
256
+ timeoutMs,
257
+ onProgress: (pct) => {
258
+ if (onChunk)
259
+ onChunk(`\rGenerating... ${pct}%`);
260
+ },
261
+ });
262
+ const elapsed = Date.now() - startTime;
263
+ const timedOut = elapsed >= timeoutMs;
264
+ // Extract video info from the page
265
+ const videoInfo = await page.evaluate(() => {
266
+ const videos = document.querySelectorAll('video');
267
+ const results = [];
268
+ for (const v of Array.from(videos)) {
269
+ results.push(v.src || v.querySelector('source')?.src || '');
270
+ }
271
+ return { count: videos.length, urls: results.filter(Boolean) };
272
+ });
273
+ const text = videoInfo.count > 0
274
+ ? `Generated ${videoInfo.count} video(s) successfully.`
275
+ : timedOut
276
+ ? 'Video generation timed out.'
277
+ : 'Video generation status unknown.';
278
+ return {
279
+ text,
280
+ markdown: text,
281
+ truncated: timedOut,
282
+ thinkingTime: Math.round(elapsed / 1000),
283
+ };
284
+ },
285
+ };
286
+ //# sourceMappingURL=flow.js.map