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.
- 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 +83 -42
- 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/files.d.ts +6 -0
- package/dist/core/files.d.ts.map +1 -0
- package/dist/core/files.js +39 -0
- package/dist/core/files.js.map +1 -0
- package/dist/core/images.d.ts +8 -0
- package/dist/core/images.d.ts.map +1 -0
- package/dist/core/images.js +79 -0
- package/dist/core/images.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 +19 -106
- 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 +341 -0
- package/dist/core/video-orchestrator.js.map +1 -0
- package/dist/providers/chatgpt.d.ts.map +1 -1
- package/dist/providers/chatgpt.js +26 -39
- package/dist/providers/chatgpt.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +24 -52
- 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 +286 -0
- package/dist/providers/flow.js.map +1 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +30 -54
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/grok.d.ts.map +1 -1
- package/dist/providers/grok.js +23 -42
- 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/providers/utils.d.ts +10 -0
- package/dist/providers/utils.d.ts.map +1 -0
- package/dist/providers/utils.js +28 -0
- package/dist/providers/utils.js.map +1 -0
- package/dist/types.d.ts +24 -2
- package/dist/types.d.ts.map +1 -1
- 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;
|
|
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 =
|
|
45
|
-
if (
|
|
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
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
66
|
-
|
|
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
|
|
69
|
-
|
|
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
|
-
|
|
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
|
|
146
|
-
|
|
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":"AAQA,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,SAAS;IACtB,GAAG,EAAE,qBAAqB;IAC1B,QAAQ,EAAE,gCAAgC;IAC1C,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IAC7D,YAAY,EAAE,QAAQ;IACtB,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;CAChC,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,QAAQ,EACN,2FAA2F;IAC7F,UAAU,EACR,wFAAwF;IAC1F,UAAU,EAAE,qCAAqC;IACjD,aAAa,EAAE,wCAAwC;IACvD,SAAS,EAAE,uDAAuD;IAClE,oEAAoE;IACpE,SAAS,EAAE,4DAA4D;CAC/D,CAAC;AAEX;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,IAAU;IACvC,MAAM,gBAAgB,GAAG;QACvB,wCAAwC;QACxC,2CAA2C;QAC3C,2CAA2C;QAC3C,2CAA2C;QAC3C,6CAA6C;QAC7C,2CAA2C;QAC3C,iCAAiC;QACjC,yBAAyB;QACzB,mCAAmC;QACnC,iCAAiC;QACjC,4CAA4C;QAC5C,iBAAiB;QACjB,6CAA6C;QAC7C,+BAA+B;QAC/B,2BAA2B;QAC3B,oCAAoC;KACrC,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,
|
|
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":"
|
|
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"}
|
package/dist/providers/claude.js
CHANGED
|
@@ -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
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
58
|
+
const totalElapsed = Date.now() - startTime;
|
|
87
59
|
return {
|
|
88
|
-
text
|
|
60
|
+
text,
|
|
89
61
|
markdown,
|
|
90
|
-
truncated
|
|
91
|
-
thinkingTime: Math.round(
|
|
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":"
|
|
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
|