10x-chat 0.4.2 → 0.5.6

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 (65) 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 +56 -21
  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/index.d.ts +1 -1
  29. package/dist/core/index.d.ts.map +1 -1
  30. package/dist/core/index.js +1 -1
  31. package/dist/core/index.js.map +1 -1
  32. package/dist/core/orchestrator.d.ts +10 -0
  33. package/dist/core/orchestrator.d.ts.map +1 -1
  34. package/dist/core/orchestrator.js +23 -0
  35. package/dist/core/orchestrator.js.map +1 -1
  36. package/dist/core/polling.d.ts +30 -0
  37. package/dist/core/polling.d.ts.map +1 -0
  38. package/dist/core/polling.js +37 -0
  39. package/dist/core/polling.js.map +1 -0
  40. package/dist/core/video-orchestrator.d.ts +22 -0
  41. package/dist/core/video-orchestrator.d.ts.map +1 -0
  42. package/dist/core/video-orchestrator.js +269 -0
  43. package/dist/core/video-orchestrator.js.map +1 -0
  44. package/dist/providers/chatgpt.d.ts.map +1 -1
  45. package/dist/providers/chatgpt.js +67 -19
  46. package/dist/providers/chatgpt.js.map +1 -1
  47. package/dist/providers/claude.d.ts.map +1 -1
  48. package/dist/providers/claude.js +27 -36
  49. package/dist/providers/claude.js.map +1 -1
  50. package/dist/providers/flow.d.ts +55 -0
  51. package/dist/providers/flow.d.ts.map +1 -0
  52. package/dist/providers/flow.js +273 -0
  53. package/dist/providers/flow.js.map +1 -0
  54. package/dist/providers/gemini.d.ts.map +1 -1
  55. package/dist/providers/gemini.js +33 -38
  56. package/dist/providers/gemini.js.map +1 -1
  57. package/dist/providers/grok.d.ts.map +1 -1
  58. package/dist/providers/grok.js +23 -23
  59. package/dist/providers/grok.js.map +1 -1
  60. package/dist/providers/registry.d.ts.map +1 -1
  61. package/dist/providers/registry.js +2 -0
  62. package/dist/providers/registry.js.map +1 -1
  63. package/dist/types.d.ts +24 -2
  64. package/dist/types.d.ts.map +1 -1
  65. package/package.json +3 -2
@@ -0,0 +1,273 @@
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
83
+ const videoTab = page.locator(FLOW_SELECTORS.videoTab).first();
84
+ if (await videoTab.isVisible().catch(() => false)) {
85
+ await videoTab.click({ force: true });
86
+ await page.waitForTimeout(500);
87
+ }
88
+ // 2. Select sub-mode (Ingredients or Frames)
89
+ const mode = opts.mode ?? 'ingredients';
90
+ const modeTab = mode === 'frames'
91
+ ? page.locator(FLOW_SELECTORS.framesTab).first()
92
+ : page.locator(FLOW_SELECTORS.ingredientsTab).first();
93
+ if (await modeTab.isVisible().catch(() => false)) {
94
+ await modeTab.click({ force: true });
95
+ await page.waitForTimeout(500);
96
+ }
97
+ // 3. Set orientation
98
+ const orientation = opts.orientation ?? 'landscape';
99
+ const orientBtn = orientation === 'portrait'
100
+ ? page.locator(FLOW_SELECTORS.portraitBtn).first()
101
+ : page.locator(FLOW_SELECTORS.landscapeBtn).first();
102
+ if (await orientBtn.isVisible().catch(() => false)) {
103
+ await orientBtn.click({ force: true });
104
+ await page.waitForTimeout(300);
105
+ }
106
+ // 4. Set count
107
+ const count = opts.count ?? 1;
108
+ const countSel = {
109
+ 1: FLOW_SELECTORS.countX1,
110
+ 2: FLOW_SELECTORS.countX2,
111
+ 3: FLOW_SELECTORS.countX3,
112
+ 4: FLOW_SELECTORS.countX4,
113
+ }[count];
114
+ const countBtn = page.locator(countSel).first();
115
+ if (await countBtn.isVisible().catch(() => false)) {
116
+ await countBtn.click({ force: true });
117
+ await page.waitForTimeout(300);
118
+ }
119
+ // 5. Select model only if non-default (avoids problematic dropdown click)
120
+ if (opts.model && opts.model !== 'Veo 3.1 - Fast') {
121
+ const modelDropdown = page.locator(FLOW_SELECTORS.modelDropdown).last();
122
+ if (await modelDropdown.isVisible().catch(() => false)) {
123
+ await modelDropdown.click({ force: true });
124
+ await page.waitForTimeout(1000);
125
+ const modelOption = page.locator(`text="${opts.model}"`).first();
126
+ if (await modelOption.isVisible().catch(() => false)) {
127
+ await modelOption.click({ force: true });
128
+ await page.waitForTimeout(500);
129
+ }
130
+ }
131
+ }
132
+ // Close popup by pressing Escape
133
+ await page.keyboard.press('Escape');
134
+ await page.waitForTimeout(300);
135
+ }
136
+ /**
137
+ * Upload keyframe images in Frames mode.
138
+ */
139
+ export async function uploadKeyframes(page, opts) {
140
+ if (opts.startFrame) {
141
+ const startBox = page.locator(FLOW_SELECTORS.startFrame).first();
142
+ if (await startBox.isVisible().catch(() => false)) {
143
+ await startBox.click();
144
+ await page.waitForTimeout(500);
145
+ // The file input should become available
146
+ const fileInput = page.locator(FLOW_SELECTORS.fileInput).first();
147
+ await fileInput.setInputFiles(opts.startFrame);
148
+ await page.waitForTimeout(2000);
149
+ }
150
+ }
151
+ if (opts.endFrame) {
152
+ const endBox = page.locator(FLOW_SELECTORS.endFrame).first();
153
+ if (await endBox.isVisible().catch(() => false)) {
154
+ await endBox.click();
155
+ await page.waitForTimeout(500);
156
+ const fileInput = page.locator(FLOW_SELECTORS.fileInput).first();
157
+ await fileInput.setInputFiles(opts.endFrame);
158
+ await page.waitForTimeout(2000);
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Poll for video generation progress. Returns when all tiles show completion
164
+ * or when the timeout is reached.
165
+ */
166
+ export async function waitForGeneration(page, opts) {
167
+ const { timeoutMs, onProgress } = opts;
168
+ const start = Date.now();
169
+ const POLL_INTERVAL = 3000;
170
+ while (Date.now() - start < timeoutMs) {
171
+ // Check for progress percentages in tiles
172
+ const progress = await page.evaluate(() => {
173
+ const tiles = document.querySelectorAll('[class*="tile"], [class*="card"], [class*="media"]');
174
+ const percents = [];
175
+ for (const tile of Array.from(tiles)) {
176
+ const text = tile.textContent ?? '';
177
+ const match = text.match(/(\d+)%/);
178
+ if (match)
179
+ percents.push(Number.parseInt(match[1], 10));
180
+ }
181
+ // Also check for video elements (generation complete)
182
+ const videos = document.querySelectorAll('video');
183
+ if (videos.length > 0)
184
+ return { done: true, percent: 100, videoCount: videos.length };
185
+ if (percents.length === 0)
186
+ return { done: false, percent: 0, videoCount: 0 };
187
+ const avg = Math.round(percents.reduce((a, b) => a + b, 0) / percents.length);
188
+ return { done: avg >= 100, percent: avg, videoCount: 0 };
189
+ });
190
+ if (onProgress)
191
+ onProgress(progress.percent);
192
+ if (progress.done || progress.videoCount > 0) {
193
+ // Wait a bit more for the UI to settle
194
+ await page.waitForTimeout(2000);
195
+ return;
196
+ }
197
+ await page.waitForTimeout(POLL_INTERVAL);
198
+ }
199
+ }
200
+ export const flowActions = {
201
+ async isLoggedIn(page) {
202
+ try {
203
+ // Wait for the studio to load
204
+ await page.waitForTimeout(3000);
205
+ // Flow requires Google account — check for profile avatar or ULTRA badge
206
+ const hasProfile = await page.evaluate(() => {
207
+ const body = document.body.textContent ?? '';
208
+ // If we see "New project" or "Create", we're logged in
209
+ return body.includes('New project') || body.includes('Create a project');
210
+ });
211
+ return hasProfile;
212
+ }
213
+ catch {
214
+ return false;
215
+ }
216
+ },
217
+ async submitPrompt(page, prompt) {
218
+ // Find the composer
219
+ const composer = page.locator(FLOW_SELECTORS.composer).first();
220
+ await composer.waitFor({ state: 'visible', timeout: 10_000 });
221
+ await composer.click();
222
+ await page.waitForTimeout(300);
223
+ // Clear any existing text and type the prompt
224
+ await page.keyboard.press('ControlOrMeta+a');
225
+ await page.keyboard.press('Backspace');
226
+ try {
227
+ await composer.fill(prompt);
228
+ }
229
+ catch {
230
+ await page.keyboard.type(prompt, { delay: 15 });
231
+ }
232
+ await page.waitForTimeout(300);
233
+ // Click the → Create button (last arrow_forward button)
234
+ const createBtn = page.locator(FLOW_SELECTORS.createButton).last();
235
+ await createBtn.waitFor({ state: 'visible', timeout: 5_000 });
236
+ await createBtn.click();
237
+ },
238
+ async captureResponse(page, opts) {
239
+ const { timeoutMs, onChunk } = opts;
240
+ const startTime = Date.now();
241
+ // Wait for generation to complete
242
+ await waitForGeneration(page, {
243
+ timeoutMs,
244
+ onProgress: (pct) => {
245
+ if (onChunk)
246
+ onChunk(`\rGenerating... ${pct}%`);
247
+ },
248
+ });
249
+ const elapsed = Date.now() - startTime;
250
+ const timedOut = elapsed >= timeoutMs;
251
+ // Extract video info from the page
252
+ const videoInfo = await page.evaluate(() => {
253
+ const videos = document.querySelectorAll('video');
254
+ const results = [];
255
+ for (const v of Array.from(videos)) {
256
+ results.push(v.src || v.querySelector('source')?.src || '');
257
+ }
258
+ return { count: videos.length, urls: results.filter(Boolean) };
259
+ });
260
+ const text = videoInfo.count > 0
261
+ ? `Generated ${videoInfo.count} video(s) successfully.`
262
+ : timedOut
263
+ ? 'Video generation timed out.'
264
+ : 'Video generation status unknown.';
265
+ return {
266
+ text,
267
+ markdown: text,
268
+ truncated: timedOut,
269
+ thinkingTime: Math.round(elapsed / 1000),
270
+ };
271
+ },
272
+ };
273
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/providers/flow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,aAAa,EAAE,cAQ3B,CAAC;AASF,eAAO,MAAM,aAAa,EAAE,eA4L3B,CAAC"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,aAAa,EAAE,cAQ3B,CAAC;AASF,eAAO,MAAM,aAAa,EAAE,eAuL3B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { pollUntilStable } from '../core/polling.js';
1
2
  export const GEMINI_CONFIG = {
2
3
  name: 'gemini',
3
4
  displayName: 'Gemini',
@@ -16,14 +17,26 @@ const SELECTORS = {
16
17
  export const geminiActions = {
17
18
  async isLoggedIn(page) {
18
19
  try {
19
- await page.waitForSelector(SELECTORS.composer, { timeout: 8_000 }).catch(() => { });
20
- const composer = await page.$(SELECTORS.composer);
21
- if (!composer)
20
+ await page
21
+ .locator(SELECTORS.composer)
22
+ .first()
23
+ .waitFor({ state: 'visible', timeout: 8_000 })
24
+ .catch(() => { });
25
+ const composerVisible = await page
26
+ .locator(SELECTORS.composer)
27
+ .first()
28
+ .isVisible()
29
+ .catch(() => false);
30
+ if (!composerVisible)
22
31
  return false;
23
32
  // Guest users see the composer but can't use authenticated features.
24
33
  // Require that no sign-in button is visible.
25
- const signInBtn = await page.$('.sign-in-button, a[href*="accounts.google.com"][class*=sign]');
26
- if (signInBtn)
34
+ const signInVisible = await page
35
+ .locator('.sign-in-button, a[href*="accounts.google.com"][class*=sign]')
36
+ .first()
37
+ .isVisible()
38
+ .catch(() => false);
39
+ if (signInVisible)
27
40
  return false;
28
41
  return true;
29
42
  }
@@ -87,12 +100,10 @@ export const geminiActions = {
87
100
  await page.waitForTimeout(3000);
88
101
  },
89
102
  async submitPrompt(page, prompt) {
90
- const composer = await page.waitForSelector(SELECTORS.composer, { timeout: 15_000 });
91
- if (!composer) {
92
- throw new Error('Gemini composer not found. The UI may have changed. Try running with --headed to debug.');
93
- }
103
+ const composer = page.locator(SELECTORS.composer).first();
104
+ await composer.waitFor({ state: 'visible', timeout: 15_000 });
94
105
  await composer.click();
95
- await page.keyboard.press('Meta+a');
106
+ await page.keyboard.press('ControlOrMeta+a');
96
107
  await page.keyboard.press('Backspace');
97
108
  try {
98
109
  await composer.fill(prompt);
@@ -107,9 +118,8 @@ export const geminiActions = {
107
118
  }, { sel: SELECTORS.composer, text: prompt });
108
119
  }
109
120
  await page.waitForTimeout(300);
110
- const sendButton = await page.waitForSelector(SELECTORS.sendButton, { timeout: 5_000 });
111
- if (!sendButton)
112
- throw new Error('Gemini send button not found.');
121
+ const sendButton = page.locator(SELECTORS.sendButton).first();
122
+ await sendButton.waitFor({ state: 'visible', timeout: 5_000 });
113
123
  await sendButton.click();
114
124
  },
115
125
  async captureResponse(page, opts) {
@@ -117,27 +127,12 @@ export const geminiActions = {
117
127
  const startTime = Date.now();
118
128
  const existingTurns = await page.locator(SELECTORS.responseTurn).count();
119
129
  await page.locator(SELECTORS.responseTurn).nth(existingTurns).waitFor({ timeout: timeoutMs });
120
- let lastText = '';
121
- let stableCount = 0;
122
- const STABLE_THRESHOLD = 3;
123
- const POLL_INTERVAL = 1000;
124
- while (Date.now() - startTime < timeoutMs) {
125
- const lastTurn = page.locator(SELECTORS.responseTurn).last();
126
- const currentText = (await lastTurn.textContent())?.trim() ?? '';
127
- if (currentText === lastText) {
128
- stableCount++;
129
- if (stableCount >= STABLE_THRESHOLD && currentText.length > 0)
130
- break;
131
- }
132
- else {
133
- if (onChunk && currentText.length > lastText.length) {
134
- onChunk(currentText.slice(lastText.length));
135
- }
136
- lastText = currentText;
137
- stableCount = 0;
138
- }
139
- await page.waitForTimeout(POLL_INTERVAL);
140
- }
130
+ const remainingMs = Math.max(timeoutMs - (Date.now() - startTime), 5_000);
131
+ const { text, elapsed: _pollElapsed, truncated, } = await pollUntilStable(page, {
132
+ getText: async (p) => (await p.locator(SELECTORS.responseTurn).last().textContent())?.trim() ?? '',
133
+ timeoutMs: remainingMs,
134
+ onChunk,
135
+ });
141
136
  const lastTurn = page.locator(SELECTORS.responseTurn).last();
142
137
  const markdown = (await lastTurn.innerHTML()) ?? '';
143
138
  // Extract generated images (Imagen)
@@ -160,12 +155,12 @@ export const geminiActions = {
160
155
  }
161
156
  return results;
162
157
  });
163
- const elapsed = Date.now() - startTime;
158
+ const totalElapsed = Date.now() - startTime;
164
159
  return {
165
- text: lastText,
160
+ text,
166
161
  markdown,
167
- truncated: elapsed >= timeoutMs && stableCount < STABLE_THRESHOLD,
168
- thinkingTime: Math.round(elapsed / 1000),
162
+ truncated,
163
+ thinkingTime: Math.round(totalElapsed / 1000),
169
164
  ...(images.length > 0 ? { images } : {}),
170
165
  };
171
166
  },
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,QAAQ;IACrB,GAAG,EAAE,+BAA+B;IACpC,QAAQ,EAAE,+BAA+B;IACzC,MAAM,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAC9C,YAAY,EAAE,gBAAgB;IAC9B,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;CAChC,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,QAAQ,EAAE,+EAA+E;IACzF,UAAU,EAAE,uDAAuD;IACnE,yEAAyE;IACzE,YAAY,EAAE,qEAAqE;CAC3E,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,qEAAqE;YACrE,6CAA6C;YAC7C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC,CAC5B,8DAA8D,CAC/D,CAAC;YACF,IAAI,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAU,EAAE,SAAmB;QAC/C,iFAAiF;QACjF,0BAA0B;QAC1B,mEAAmE;QACnE,mEAAmE;QACnE,kGAAkG;QAClG,4EAA4E;QAC5E,iDAAiD;QAEjD,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1D,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/B,0CAA0C;QAC1C,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC9D,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QAEF,+EAA+E;QAC/E,MAAM,SAAS,GAAG,IAAI;aACnB,OAAO,CAAC,uEAAuE,CAAC;aAChF,KAAK,EAAE,CAAC;QACX,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEhC,uFAAuF;QACvF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,iHAAiH,CAClH,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,MAAM,oBAAoB,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CACrC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CACnF,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,mDAAmD;YACnD,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,mDAAmD;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACjF,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACrD,UAAU,CAAC,KAAK,EAAE;SACnB,CAAC,CAAC;QACH,MAAM,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEtC,4BAA4B;QAC5B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAU,EAAE,MAAc;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;gBAChB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,EAAE,EAAE,CAAC;oBACN,EAAkB,CAAC,SAAS,GAAG,IAAI,CAAC;oBACrC,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,EACD,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAC1C,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClE,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,IAAU,EACV,IAA8D;QAE9D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAE9F,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,gBAAgB,GAAG,CAAC,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC;QAE3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,WAAW,GAAG,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAEjE,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC7B,WAAW,EAAE,CAAC;gBACd,IAAI,WAAW,IAAI,gBAAgB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM;YACvE,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,IAAI,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9C,CAAC;gBACD,QAAQ,GAAG,WAAW,CAAC;gBACvB,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;QAEpD,oCAAoC;QACpC,MAAM,MAAM,GAAqB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,MAAM,OAAO,GAAkE,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,QAAQ,CAAC,gBAAgB,CAAC,4CAA4C,CAAC,CACxE,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG,EAAE,WAAW;oBAChB,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;oBAClC,KAAK,EAAG,GAAwB,CAAC,YAAY;oBAC7C,MAAM,EAAG,GAAwB,CAAC,aAAa;iBAChD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ;YACR,SAAS,EAAE,OAAO,IAAI,SAAS,IAAI,WAAW,GAAG,gBAAgB;YACjE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACxC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"grok.d.ts","sourceRoot":"","sources":["../../src/providers/grok.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,WAAW,EAAE,cAQzB,CAAC;AAeF,eAAO,MAAM,WAAW,EAAE,eA+JzB,CAAC"}
1
+ {"version":3,"file":"grok.d.ts","sourceRoot":"","sources":["../../src/providers/grok.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,WAAW,EAAE,cAQzB,CAAC;AAgBF,eAAO,MAAM,WAAW,EAAE,eA6JzB,CAAC"}
@@ -14,26 +14,32 @@ const SELECTORS = {
14
14
  /** Assistant response bubbles — use .message-bubble (both user & assistant use it;
15
15
  * captureResponse counts existing turns before submission to find the new one) */
16
16
  assistantTurn: '.message-bubble',
17
- /** Login page indicators */
18
- loginPage: 'a[href*="accounts.x.com"], button:has-text("Sign in"), a:has-text("Sign in")',
17
+ /** Login page indicators — updated for current Grok UI (Feb 2026) */
18
+ loginPage: 'a[href*="x.com/i/flow/login"], a[href*="accounts.x.com"], button:has-text("Sign in"), a:has-text("Sign in"), a:has-text("Log in")',
19
19
  modelSelector: '#model-select-trigger',
20
20
  fileInput: 'input[type="file"][name="files"]',
21
21
  };
22
22
  export const grokActions = {
23
23
  async isLoggedIn(page) {
24
24
  try {
25
- await Promise.race([
26
- page.waitForSelector(SELECTORS.composer, { timeout: 8_000 }),
27
- page.waitForSelector(SELECTORS.loginPage, { timeout: 8_000 }),
28
- ]).catch(() => { });
25
+ // Wait for page to settle — either composer or login indicator will appear
26
+ await page.waitForLoadState('domcontentloaded').catch(() => { });
27
+ await page.waitForTimeout(3000);
29
28
  // Check login indicators FIRST — Grok shows a textarea even when not logged in
30
- const loginIndicator = await page.$(SELECTORS.loginPage);
31
- if (loginIndicator)
29
+ const loginVisible = await page
30
+ .locator(SELECTORS.loginPage)
31
+ .first()
32
+ .isVisible({ timeout: 5000 })
33
+ .catch(() => false);
34
+ if (loginVisible)
32
35
  return false;
33
- const composer = await page.$(SELECTORS.composer);
34
- if (composer)
35
- return true;
36
- return false;
36
+ // Then check for the composer
37
+ const composerVisible = await page
38
+ .locator(SELECTORS.composer)
39
+ .first()
40
+ .isVisible({ timeout: 5000 })
41
+ .catch(() => false);
42
+ return composerVisible;
37
43
  }
38
44
  catch {
39
45
  return false;
@@ -45,12 +51,10 @@ export const grokActions = {
45
51
  await page.waitForTimeout(2000);
46
52
  },
47
53
  async submitPrompt(page, prompt) {
48
- const composer = await page.waitForSelector(SELECTORS.composer, { timeout: 15_000 });
49
- if (!composer) {
50
- throw new Error('Grok composer not found. The UI may have changed. Try running with --headed to debug.');
51
- }
54
+ const composer = page.locator(SELECTORS.composer).first();
55
+ await composer.waitFor({ state: 'visible', timeout: 15_000 });
52
56
  await composer.click();
53
- await page.keyboard.press('Meta+a');
57
+ await page.keyboard.press('ControlOrMeta+a');
54
58
  await page.keyboard.press('Backspace');
55
59
  // Use evaluate for large text to avoid keyboard.type slowness
56
60
  try {
@@ -68,12 +72,8 @@ export const grokActions = {
68
72
  }
69
73
  await page.waitForTimeout(300);
70
74
  // Wait for submit button to become enabled
71
- const sendButton = await page.waitForSelector(`${SELECTORS.sendButton}:not([disabled])`, {
72
- timeout: 5_000,
73
- });
74
- if (!sendButton) {
75
- throw new Error('Grok send button not found or still disabled. The UI may have changed.');
76
- }
75
+ const sendButton = page.locator(`${SELECTORS.sendButton}:not([disabled])`).first();
76
+ await sendButton.waitFor({ state: 'visible', timeout: 5_000 });
77
77
  await sendButton.click();
78
78
  },
79
79
  async captureResponse(page, opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"grok.js","sourceRoot":"","sources":["../../src/providers/grok.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grok.js","sourceRoot":"","sources":["../../src/providers/grok.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe1D,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAMxD;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAElE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB1D,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAMxD;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAElE"}
@@ -1,5 +1,6 @@
1
1
  import { CHATGPT_CONFIG, chatgptActions } from './chatgpt.js';
2
2
  import { CLAUDE_CONFIG, claudeActions } from './claude.js';
3
+ import { FLOW_CONFIG, flowActions } from './flow.js';
3
4
  import { GEMINI_CONFIG, geminiActions } from './gemini.js';
4
5
  import { GROK_CONFIG, grokActions } from './grok.js';
5
6
  import { NOTEBOOKLM_CONFIG, notebooklmActions } from './notebooklm.js';
@@ -9,6 +10,7 @@ const PROVIDERS = {
9
10
  claude: { config: CLAUDE_CONFIG, actions: claudeActions },
10
11
  grok: { config: GROK_CONFIG, actions: grokActions },
11
12
  notebooklm: { config: NOTEBOOKLM_CONFIG, actions: notebooklmActions },
13
+ flow: { config: FLOW_CONFIG, actions: flowActions },
12
14
  };
13
15
  /** Get a provider by name, throws if not found. */
14
16
  export function getProvider(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,SAAS,GAAmC;IAChD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;IAC5D,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;IACnD,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE;CACtE,CAAC;AAEF,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAClD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,SAAS,GAAmC;IAChD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;IAC5D,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;IACnD,UAAU,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE;IACrE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;CACpD,CAAC;AAEF,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAClD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -2,11 +2,11 @@ import type { Page } from 'playwright';
2
2
  /**
3
3
  * Profile mode controls how browser profiles are managed:
4
4
  * - 'shared': Single profile for all providers (login once, shared cookies). Default.
5
- * Note: shared mode means only one provider session can run at a time (lock constraint).
5
+ * Multiple non-persistent sessions can run truly in parallel no locks.
6
6
  * - 'isolated': Separate profile per provider (original behavior, login per provider).
7
7
  */
8
8
  export type ProfileMode = 'shared' | 'isolated';
9
- export type ProviderName = 'chatgpt' | 'gemini' | 'claude' | 'grok' | 'notebooklm';
9
+ export type ProviderName = 'chatgpt' | 'gemini' | 'claude' | 'grok' | 'notebooklm' | 'flow';
10
10
  export interface ProviderConfig {
11
11
  name: ProviderName;
12
12
  displayName: string;
@@ -97,4 +97,26 @@ export interface ChatOptions {
97
97
  /** Override to use isolated (per-provider) profiles regardless of config. */
98
98
  isolatedProfile?: boolean;
99
99
  }
100
+ export type VideoMode = 'ingredients' | 'frames';
101
+ export type VideoModel = 'Veo 3.1 - Fast' | 'Veo 3.1 - Fast [Lower Priority]' | 'Veo 3.1 - Quality' | 'Veo 2 - Fast' | 'Veo 2 - Quality';
102
+ export type VideoOrientation = 'landscape' | 'portrait';
103
+ export interface GeneratedVideo {
104
+ /** Local file path after download. */
105
+ localPath?: string;
106
+ /** Duration in seconds, if known. */
107
+ durationSecs?: number;
108
+ }
109
+ export interface VideoOptions {
110
+ prompt: string;
111
+ mode?: VideoMode;
112
+ model?: VideoModel;
113
+ orientation?: VideoOrientation;
114
+ count?: 1 | 2 | 3 | 4;
115
+ startFrame?: string;
116
+ endFrame?: string;
117
+ headed?: boolean;
118
+ timeoutMs?: number;
119
+ saveDir?: string;
120
+ isolatedProfile?: boolean;
121
+ }
100
122
  //# sourceMappingURL=types.d.ts.map