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.
- package/dist/bin/cli.js +2 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser/daemon.d.ts +39 -0
- package/dist/browser/daemon.d.ts.map +1 -0
- package/dist/browser/daemon.js +114 -0
- package/dist/browser/daemon.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +2 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/manager.d.ts.map +1 -1
- package/dist/browser/manager.js +25 -12
- package/dist/browser/manager.js.map +1 -1
- package/dist/browser/tabs.d.ts +22 -0
- package/dist/browser/tabs.d.ts.map +1 -0
- package/dist/browser/tabs.js +97 -0
- package/dist/browser/tabs.js.map +1 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +56 -21
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/login.d.ts.map +1 -1
- package/dist/cli/login.js +96 -3
- package/dist/cli/login.js.map +1 -1
- package/dist/cli/video.d.ts +3 -0
- package/dist/cli/video.d.ts.map +1 -0
- package/dist/cli/video.js +99 -0
- package/dist/cli/video.js.map +1 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/orchestrator.d.ts +10 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +23 -0
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/polling.d.ts +30 -0
- package/dist/core/polling.d.ts.map +1 -0
- package/dist/core/polling.js +37 -0
- package/dist/core/polling.js.map +1 -0
- package/dist/core/video-orchestrator.d.ts +22 -0
- package/dist/core/video-orchestrator.d.ts.map +1 -0
- package/dist/core/video-orchestrator.js +269 -0
- package/dist/core/video-orchestrator.js.map +1 -0
- package/dist/providers/chatgpt.d.ts.map +1 -1
- package/dist/providers/chatgpt.js +67 -19
- package/dist/providers/chatgpt.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +27 -36
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/flow.d.ts +55 -0
- package/dist/providers/flow.d.ts.map +1 -0
- package/dist/providers/flow.js +273 -0
- package/dist/providers/flow.js.map +1 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +33 -38
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/grok.d.ts.map +1 -1
- package/dist/providers/grok.js +23 -23
- package/dist/providers/grok.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/types.d.ts +24 -2
- package/dist/types.d.ts.map +1 -1
- 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":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,GAAG,EAAE,mCAAmC;IACxC,QAAQ,EAAE,mCAAmC;IAC7C,MAAM,EAAE;QACN,gBAAgB;QAChB,iCAAiC;QACjC,mBAAmB;QACnB,cAAc;QACd,iBAAiB;KAClB;IACD,YAAY,EAAE,gBAAgB;IAC9B,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,8BAA8B;CACjE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa;IACb,UAAU,EAAE,gCAAgC;IAC5C,MAAM,EAAE,4BAA4B;IAEpC,kBAAkB;IAClB,QAAQ,EAAE,6BAA6B;IACvC,eAAe,EAAE,kBAAkB;IAEnC,SAAS;IACT,YAAY,EAAE,kCAAkC;IAEhD,0DAA0D;IAC1D,SAAS,EAAE,gBAAgB,EAAE,iCAAiC;IAE9D,gCAAgC;IAChC,QAAQ,EAAE,sCAAsC;IAChD,QAAQ,EAAE,sCAAsC;IAEhD,sBAAsB;IACtB,cAAc,EAAE,4CAA4C;IAC5D,SAAS,EAAE,uCAAuC;IAElD,cAAc;IACd,YAAY,EAAE,8BAA8B;IAC5C,WAAW,EAAE,6BAA6B;IAE1C,QAAQ;IACR,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,mCAAmC;IAE5C,gCAAgC;IAChC,aAAa,EAAE,oCAAoC;IAEnD,6BAA6B;IAC7B,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,YAAY;IAEtB,eAAe;IACf,QAAQ,EAAE,8BAA8B;IACxC,WAAW,EAAE,4CAA4C;IACzD,SAAS,EAAE,sCAAsC;IAEjD,SAAS;IACT,WAAW,EAAE,0BAA0B;IAEvC,eAAe;IACf,YAAY,EAAE,iCAAiC;CACvC,CAAC;AAEX;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAAU;IACzC,mFAAmF;IACnF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5D,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IACD,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI;SAClB,OAAO,CAAC,kFAAkF,CAAC;SAC3F,KAAK,EAAE,CAAC;IACX,IAAI,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAU,EACV,IAKC;IAED,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE9B,kEAAkE;IAClE,uDAAuD;IAEvD,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,IAAI,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,6CAA6C;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;IACxC,MAAM,OAAO,GACX,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;QAChD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1D,IAAI,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;IACpD,MAAM,SAAS,GACb,WAAW,KAAK,UAAU;QACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAClD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,IAAI,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,eAAe;IACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG;QACf,CAAC,EAAE,cAAc,CAAC,OAAO;QACzB,CAAC,EAAE,cAAc,CAAC,OAAO;QACzB,CAAC,EAAE,cAAc,CAAC,OAAO;QACzB,CAAC,EAAE,cAAc,CAAC,OAAO;KAC1B,CAAC,KAAK,CAAC,CAAC;IACT,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,IAAI,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,0EAA0E;IAC1E,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACjE,IAAI,MAAM,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,IAAgD;IAEhD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACjE,IAAI,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,yCAAyC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;YACjE,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7D,IAAI,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;YACjE,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,IAA+D;IAE/D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,IAAI,CAAC;IAE3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;QACtC,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,oDAAoD,CAAC,CAAC;YAC9F,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,sDAAsD;YACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACtF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9E,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,UAAU;YAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC7C,uCAAuC;YACvC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEhC,yEAAyE;YACzE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC7C,uDAAuD;gBACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAU,EAAE,MAAc;QAC3C,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,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,8CAA8C;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC7C,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,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/B,wDAAwD;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,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,kCAAkC;QAClC,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAC5B,SAAS;YACT,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,IAAI,OAAO;oBAAE,OAAO,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;YAClD,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAC;QAEtC,mCAAmC;QACnC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GACR,SAAS,CAAC,KAAK,GAAG,CAAC;YACjB,CAAC,CAAC,aAAa,SAAS,CAAC,KAAK,yBAAyB;YACvD,CAAC,CAAC,QAAQ;gBACR,CAAC,CAAC,6BAA6B;gBAC/B,CAAC,CAAC,kCAAkC,CAAC;QAE3C,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;SACzC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/providers/gemini.js
CHANGED
|
@@ -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
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
26
|
-
|
|
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 =
|
|
91
|
-
|
|
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('
|
|
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 =
|
|
111
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
|
158
|
+
const totalElapsed = Date.now() - startTime;
|
|
164
159
|
return {
|
|
165
|
-
text
|
|
160
|
+
text,
|
|
166
161
|
markdown,
|
|
167
|
-
truncated
|
|
168
|
-
thinkingTime: Math.round(
|
|
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":"
|
|
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;
|
|
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"}
|
package/dist/providers/grok.js
CHANGED
|
@@ -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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
31
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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 =
|
|
49
|
-
|
|
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('
|
|
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 =
|
|
72
|
-
|
|
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":"AAQA,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,MAAM;IACnB,GAAG,EAAE,kBAAkB;IACvB,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC;IAC3C,YAAY,EAAE,QAAQ;IACtB,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;CAChC,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,8EAA8E;IAC9E,QAAQ,EAAE,uDAAuD;IACjE,UAAU,EAAE,6BAA6B;IACzC;uFACmF;IACnF,aAAa,EAAE,iBAAiB;IAChC,
|
|
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;
|
|
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;
|
|
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
|
-
*
|
|
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
|