10x-chat 0.7.2 → 0.7.4
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 +14 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser/manager.js +5 -7
- package/dist/browser/manager.js.map +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +113 -6
- package/dist/providers/gemini.js.map +1 -1
- package/package.json +1 -1
package/dist/bin/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { dirname, join } from 'node:path';
|
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { Command } from 'commander';
|
|
7
|
+
import { stopDaemon } from '../browser/daemon.js';
|
|
7
8
|
import { createChatCommand } from '../cli/chat.js';
|
|
8
9
|
import { createConfigCommand } from '../cli/config.js';
|
|
9
10
|
import { createLoginCommand } from '../cli/login.js';
|
|
@@ -12,6 +13,19 @@ import { createNotebookLMCommand } from '../cli/notebooklm.js';
|
|
|
12
13
|
import { createSkillCommand } from '../cli/skill.js';
|
|
13
14
|
import { createSessionCommand, createStatusCommand } from '../cli/status.js';
|
|
14
15
|
import { createVideoCommand } from '../cli/video.js';
|
|
16
|
+
// Ensure the browser daemon is stopped on unexpected exit (Ctrl+C, crash, etc.)
|
|
17
|
+
// so Chrome for Testing doesn't linger in the dock after the CLI finishes.
|
|
18
|
+
const cleanupAndExit = (code) => {
|
|
19
|
+
stopDaemon()
|
|
20
|
+
.catch(() => { })
|
|
21
|
+
.finally(() => process.exit(code));
|
|
22
|
+
};
|
|
23
|
+
process.on('SIGINT', () => cleanupAndExit(130));
|
|
24
|
+
process.on('SIGTERM', () => cleanupAndExit(143));
|
|
25
|
+
process.on('uncaughtException', (err) => {
|
|
26
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
27
|
+
cleanupAndExit(1);
|
|
28
|
+
});
|
|
15
29
|
// Read version from package.json at runtime (works for both src and dist)
|
|
16
30
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
31
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,0EAA0E;AAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,0EAA0E,CAAC;KACvF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAC9C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE3C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/manager.js
CHANGED
|
@@ -82,13 +82,11 @@ async function launchSharedBrowser(opts) {
|
|
|
82
82
|
catch {
|
|
83
83
|
// already closed
|
|
84
84
|
}
|
|
85
|
-
// Unregister tab and
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
// else: other tabs still open — leave daemon running
|
|
85
|
+
// Unregister tab and stop daemon — for single-shot CLI commands the
|
|
86
|
+
// browser should not linger after the task completes. This also handles
|
|
87
|
+
// stale tab files from crashed processes (unregisterTab cleans them).
|
|
88
|
+
await unregisterTab(tabKey);
|
|
89
|
+
await stopDaemon();
|
|
92
90
|
};
|
|
93
91
|
return { context, page, lock: null, close };
|
|
94
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/browser/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAuB,QAAQ,EAAa,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAoB,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAkCvD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAE5D,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAAmB;IACpD,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEtC,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEzD,oDAAoD;IACpD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IAEnC,IAAI,OAAuB,CAAC;IAC5B,IAAI,IAAU,CAAC;IACf,IAAI,CAAC;QACH,2CAA2C;QAC3C,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC3C,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YACtC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CAAC;QAEH,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAE/B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4BAA4B;QAC5B,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,oDAAoD;QACpD,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/browser/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAuB,QAAQ,EAAa,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAoB,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAkCvD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAE5D,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAAmB;IACpD,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEtC,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEzD,oDAAoD;IACpD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IAEnC,IAAI,OAAuB,CAAC;IAC5B,IAAI,IAAU,CAAC;IACf,IAAI,CAAC;QACH,2CAA2C;QAC3C,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC3C,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YACtC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC,CAAC;QAEH,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAE/B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4BAA4B;QAC5B,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,oDAAoD;QACpD,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QAED,oEAAoE;QACpE,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,6BAA6B,CAAC,IAAmB;IAC9D,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAElD,IAAI,OAAuB,CAAC;IAC5B,IAAI,IAAU,CAAC;IACf,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,CAAC,UAAU,EAAE;YAC3D,QAAQ;YACR,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YACtC,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QAEH,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAAC,IAAmB;IACtD,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAChD,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAElD,IAAI,OAAuB,CAAC;IAC5B,IAAI,IAAU,CAAC;IACf,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,CAAC,UAAU,EAAE;YAC3D,QAAQ;YACR,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YACtC,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QAEH,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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;AAGrB,eAAO,MAAM,aAAa,EAAE,cAQ3B,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;AAGrB,eAAO,MAAM,aAAa,EAAE,cAQ3B,CAAC;AA+FF,eAAO,MAAM,aAAa,EAAE,eA+L3B,CAAC"}
|
package/dist/providers/gemini.js
CHANGED
|
@@ -14,7 +14,85 @@ const SELECTORS = {
|
|
|
14
14
|
sendButton: 'button.send-button, button[aria-label="Send message"]',
|
|
15
15
|
/** model-response is the Angular custom element wrapping each AI turn */
|
|
16
16
|
responseTurn: 'model-response .model-response-text, model-response message-content',
|
|
17
|
+
/** Indicators that Gemini is still generating (text streaming or image generation in flight) */
|
|
18
|
+
streamingIndicators: [
|
|
19
|
+
// Stop/cancel button visible while generating
|
|
20
|
+
'button[aria-label="Stop generating"], button[aria-label="Cancel"]',
|
|
21
|
+
// Imagen / Nano Banana loading spinner or status
|
|
22
|
+
'.image-generation-loading',
|
|
23
|
+
'.loading-indicator',
|
|
24
|
+
// "Generating image" / "Loading Nano Banana" text shown during image gen
|
|
25
|
+
'model-response [class*="loading"]',
|
|
26
|
+
'model-response [class*="progress"]',
|
|
27
|
+
].join(', '),
|
|
28
|
+
/** Generated images in the response (Imagen / Nano Banana) */
|
|
29
|
+
generatedImages: [
|
|
30
|
+
'img.image.loaded',
|
|
31
|
+
'img[alt*="AI generated"]',
|
|
32
|
+
'img[alt*="Generated"]',
|
|
33
|
+
// Imagen result containers
|
|
34
|
+
'model-response img[src*="lh3.googleusercontent.com"]',
|
|
35
|
+
'model-response img[src*="encrypted"]',
|
|
36
|
+
].join(', '),
|
|
17
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Wait for Gemini image generation to complete.
|
|
40
|
+
* After text stabilizes, check if image generation is in progress and
|
|
41
|
+
* wait for images to appear and fully load (naturalWidth > 0).
|
|
42
|
+
*/
|
|
43
|
+
async function waitForImages(page, timeoutMs) {
|
|
44
|
+
const startTime = Date.now();
|
|
45
|
+
const pollInterval = 2_000;
|
|
46
|
+
// First, check if there are any signs of image generation in the last response
|
|
47
|
+
const lastTurnHtml = await page
|
|
48
|
+
.locator(SELECTORS.responseTurn)
|
|
49
|
+
.last()
|
|
50
|
+
.innerHTML()
|
|
51
|
+
.catch(() => '');
|
|
52
|
+
const lowerHtml = lastTurnHtml.toLowerCase();
|
|
53
|
+
const hasImageGenHints = lowerHtml.includes('nano banana') ||
|
|
54
|
+
lowerHtml.includes('imagen') ||
|
|
55
|
+
lowerHtml.includes('image-generation') ||
|
|
56
|
+
lowerHtml.includes('generating') ||
|
|
57
|
+
lowerHtml.includes('img');
|
|
58
|
+
if (!hasImageGenHints)
|
|
59
|
+
return;
|
|
60
|
+
// Wait for loading indicators to disappear and images to be fully loaded
|
|
61
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
62
|
+
// Check if any loading indicators are still visible
|
|
63
|
+
const stillLoading = await page
|
|
64
|
+
.locator(SELECTORS.streamingIndicators)
|
|
65
|
+
.first()
|
|
66
|
+
.isVisible()
|
|
67
|
+
.catch(() => false);
|
|
68
|
+
if (stillLoading) {
|
|
69
|
+
await page.waitForTimeout(pollInterval);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Check if images exist and are fully loaded
|
|
73
|
+
const imageState = await page.evaluate((imgSelector) => {
|
|
74
|
+
const imgs = Array.from(document.querySelectorAll(imgSelector));
|
|
75
|
+
if (imgs.length === 0)
|
|
76
|
+
return { count: 0, allLoaded: true };
|
|
77
|
+
const allLoaded = imgs.every((img) => {
|
|
78
|
+
const el = img;
|
|
79
|
+
return el.complete && el.naturalWidth > 0;
|
|
80
|
+
});
|
|
81
|
+
return { count: imgs.length, allLoaded };
|
|
82
|
+
}, SELECTORS.generatedImages);
|
|
83
|
+
if (imageState.count > 0 && imageState.allLoaded) {
|
|
84
|
+
// Images are present and fully loaded
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (imageState.count > 0 && !imageState.allLoaded) {
|
|
88
|
+
// Images exist but not yet loaded — keep waiting
|
|
89
|
+
await page.waitForTimeout(pollInterval);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// No loading indicators and no images — likely a text-only response
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
18
96
|
export const geminiActions = {
|
|
19
97
|
async isLoggedIn(page) {
|
|
20
98
|
try {
|
|
@@ -116,29 +194,58 @@ export const geminiActions = {
|
|
|
116
194
|
getText: async (p) => (await p.locator(SELECTORS.responseTurn).last().textContent())?.trim() ?? '',
|
|
117
195
|
timeoutMs: remainingMs,
|
|
118
196
|
onChunk,
|
|
197
|
+
isStreaming: async (p) => {
|
|
198
|
+
// Check if Gemini is still generating (text or images)
|
|
199
|
+
const indicatorVisible = await p
|
|
200
|
+
.locator(SELECTORS.streamingIndicators)
|
|
201
|
+
.first()
|
|
202
|
+
.isVisible()
|
|
203
|
+
.catch(() => false);
|
|
204
|
+
if (indicatorVisible)
|
|
205
|
+
return true;
|
|
206
|
+
// Also check for image-generation-specific text in the response
|
|
207
|
+
// (e.g. "Loading Nano Banana", "Generating image", "Creating image")
|
|
208
|
+
const lastTurnText = (await p.locator(SELECTORS.responseTurn).last().textContent())?.toLowerCase() ?? '';
|
|
209
|
+
if (lastTurnText.includes('loading nano banana') ||
|
|
210
|
+
lastTurnText.includes('generating image') ||
|
|
211
|
+
lastTurnText.includes('creating image') ||
|
|
212
|
+
lastTurnText.includes('loading imagen')) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
return false;
|
|
216
|
+
},
|
|
119
217
|
});
|
|
218
|
+
// Post-poll: wait for images to finish loading if image generation was triggered.
|
|
219
|
+
// Gemini image gen can take 10-30s after the text portion stabilizes.
|
|
220
|
+
const postPollRemainingMs = Math.max(timeoutMs - (Date.now() - startTime), 5_000);
|
|
221
|
+
await waitForImages(page, postPollRemainingMs);
|
|
120
222
|
const lastTurn = page.locator(SELECTORS.responseTurn).last();
|
|
121
223
|
const markdown = (await lastTurn.innerHTML()) ?? '';
|
|
122
|
-
// Extract generated images (Imagen)
|
|
123
|
-
const images = await page.evaluate(() => {
|
|
224
|
+
// Extract generated images (Imagen / Nano Banana)
|
|
225
|
+
const images = await page.evaluate((imgSelector) => {
|
|
124
226
|
const seen = new Set();
|
|
125
227
|
const results = [];
|
|
126
|
-
const imgs = Array.from(document.querySelectorAll(
|
|
228
|
+
const imgs = Array.from(document.querySelectorAll(imgSelector));
|
|
127
229
|
for (const img of imgs) {
|
|
128
230
|
const src = img.getAttribute('src') ?? '';
|
|
129
231
|
if (!src || seen.has(src))
|
|
130
232
|
continue;
|
|
233
|
+
// Skip tiny icons/avatars (likely UI elements, not generated images)
|
|
234
|
+
const w = img.naturalWidth;
|
|
235
|
+
const h = img.naturalHeight;
|
|
236
|
+
if (w > 0 && w < 64 && h > 0 && h < 64)
|
|
237
|
+
continue;
|
|
131
238
|
seen.add(src);
|
|
132
239
|
const fullSizeUrl = src.includes('=s') ? src : `${src}=s1024-rj`;
|
|
133
240
|
results.push({
|
|
134
241
|
url: fullSizeUrl,
|
|
135
242
|
alt: img.getAttribute('alt') ?? '',
|
|
136
|
-
width:
|
|
137
|
-
height:
|
|
243
|
+
width: w,
|
|
244
|
+
height: h,
|
|
138
245
|
});
|
|
139
246
|
}
|
|
140
247
|
return results;
|
|
141
|
-
});
|
|
248
|
+
}, SELECTORS.generatedImages);
|
|
142
249
|
const totalElapsed = Date.now() - startTime;
|
|
143
250
|
return {
|
|
144
251
|
text,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,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;
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
|