10x-chat 0.7.3 → 0.8.0
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/README.md +37 -0
- package/dist/bin/cli.js +18 -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/cli/image.d.ts +3 -0
- package/dist/cli/image.d.ts.map +1 -0
- package/dist/cli/image.js +76 -0
- package/dist/cli/image.js.map +1 -0
- package/dist/cli/research.d.ts +3 -0
- package/dist/cli/research.d.ts.map +1 -0
- package/dist/cli/research.js +70 -0
- package/dist/cli/research.js.map +1 -0
- package/dist/core/image-orchestrator.d.ts +10 -0
- package/dist/core/image-orchestrator.d.ts.map +1 -0
- package/dist/core/image-orchestrator.js +237 -0
- package/dist/core/image-orchestrator.js.map +1 -0
- package/dist/core/research-orchestrator.d.ts +12 -0
- package/dist/core/research-orchestrator.d.ts.map +1 -0
- package/dist/core/research-orchestrator.js +260 -0
- package/dist/core/research-orchestrator.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -71,6 +71,43 @@ npx 10x-chat@latest chat -p "Long task" --timeout 600000 --headed # 10min timeo
|
|
|
71
71
|
| `--headed` | Show browser window during chat |
|
|
72
72
|
| `--timeout <ms>` | Response timeout in milliseconds (default: 300000) |
|
|
73
73
|
|
|
74
|
+
### `image`
|
|
75
|
+
|
|
76
|
+
Generate images via ChatGPT (DALL-E) or Gemini (Imagen) with non-blocking polling.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx 10x-chat@latest image -p "A fox astronaut in space, digital art" --provider chatgpt
|
|
80
|
+
npx 10x-chat@latest image -p "Watercolor landscape" --provider gemini --save-dir ./images
|
|
81
|
+
npx 10x-chat@latest image -p "Logo design" --headed --timeout 120000
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Flag | Description |
|
|
85
|
+
|------|-------------|
|
|
86
|
+
| `-p, --prompt <text>` | **(required)** The image generation prompt |
|
|
87
|
+
| `--provider <name>` | Provider: `chatgpt`, `gemini` (default: chatgpt) |
|
|
88
|
+
| `--headed` | Show browser window |
|
|
89
|
+
| `--timeout <ms>` | Generation timeout (default: 120000) |
|
|
90
|
+
| `--save-dir <dir>` | Directory to save generated images |
|
|
91
|
+
|
|
92
|
+
### `research`
|
|
93
|
+
|
|
94
|
+
Deep research via ChatGPT, Gemini, or Perplexity with non-blocking progress polling. Designed for long-running research tasks (5-10+ minutes).
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx 10x-chat@latest research -p "Latest breakthroughs in quantum computing" --provider gemini
|
|
98
|
+
npx 10x-chat@latest research -p "Market analysis of EVs" --provider chatgpt --timeout 600000
|
|
99
|
+
npx 10x-chat@latest research -p "Compare React vs Vue in 2026" --provider perplexity --save-dir ./reports
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
| Flag | Description |
|
|
103
|
+
|------|-------------|
|
|
104
|
+
| `-p, --prompt <text>` | **(required)** The research query |
|
|
105
|
+
| `--provider <name>` | Provider: `chatgpt`, `gemini`, `perplexity` (default: gemini) |
|
|
106
|
+
| `--headed` | Show browser window |
|
|
107
|
+
| `--timeout <ms>` | Total timeout (default: 600000 / 10 min) |
|
|
108
|
+
| `--poll-interval <ms>` | Progress check interval (default: 5000) |
|
|
109
|
+
| `--save-dir <dir>` | Directory to save the research report |
|
|
110
|
+
|
|
74
111
|
### `status`
|
|
75
112
|
|
|
76
113
|
List recent chat sessions.
|
package/dist/bin/cli.js
CHANGED
|
@@ -4,14 +4,30 @@ 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';
|
|
10
|
+
import { createImageCommand } from '../cli/image.js';
|
|
9
11
|
import { createLoginCommand } from '../cli/login.js';
|
|
10
12
|
import { createMigrateCommand } from '../cli/migrate.js';
|
|
11
13
|
import { createNotebookLMCommand } from '../cli/notebooklm.js';
|
|
14
|
+
import { createResearchCommand } from '../cli/research.js';
|
|
12
15
|
import { createSkillCommand } from '../cli/skill.js';
|
|
13
16
|
import { createSessionCommand, createStatusCommand } from '../cli/status.js';
|
|
14
17
|
import { createVideoCommand } from '../cli/video.js';
|
|
18
|
+
// Ensure the browser daemon is stopped on unexpected exit (Ctrl+C, crash, etc.)
|
|
19
|
+
// so Chrome for Testing doesn't linger in the dock after the CLI finishes.
|
|
20
|
+
const cleanupAndExit = (code) => {
|
|
21
|
+
stopDaemon()
|
|
22
|
+
.catch(() => { })
|
|
23
|
+
.finally(() => process.exit(code));
|
|
24
|
+
};
|
|
25
|
+
process.on('SIGINT', () => cleanupAndExit(130));
|
|
26
|
+
process.on('SIGTERM', () => cleanupAndExit(143));
|
|
27
|
+
process.on('uncaughtException', (err) => {
|
|
28
|
+
console.error(chalk.red(err instanceof Error ? err.message : String(err)));
|
|
29
|
+
cleanupAndExit(1);
|
|
30
|
+
});
|
|
15
31
|
// Read version from package.json at runtime (works for both src and dist)
|
|
16
32
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
33
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
|
|
@@ -22,6 +38,8 @@ program
|
|
|
22
38
|
.version(pkg.version);
|
|
23
39
|
program.addCommand(createLoginCommand());
|
|
24
40
|
program.addCommand(createChatCommand());
|
|
41
|
+
program.addCommand(createImageCommand());
|
|
42
|
+
program.addCommand(createResearchCommand());
|
|
25
43
|
program.addCommand(createVideoCommand());
|
|
26
44
|
program.addCommand(createStatusCommand());
|
|
27
45
|
program.addCommand(createSessionCommand());
|
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":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/cli/image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,kBAAkB,IAAI,OAAO,CAkD5C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { runImageGen } from '../core/image-orchestrator.js';
|
|
4
|
+
import { isValidProvider } from '../providers/index.js';
|
|
5
|
+
const IMAGE_PROVIDERS = ['chatgpt', 'gemini'];
|
|
6
|
+
export function createImageCommand() {
|
|
7
|
+
const cmd = new Command('image')
|
|
8
|
+
.description('Generate images via ChatGPT (DALL-E) or Gemini (Imagen) with browser automation')
|
|
9
|
+
.requiredOption('-p, --prompt <text>', 'The image generation prompt')
|
|
10
|
+
.option('--provider <name>', `Provider (${IMAGE_PROVIDERS.join(', ')})`, 'chatgpt')
|
|
11
|
+
.option('--headed', 'Show browser window')
|
|
12
|
+
.option('--timeout <ms>', 'Generation timeout in milliseconds', '120000')
|
|
13
|
+
.option('--save-dir <dir>', 'Directory to save generated images')
|
|
14
|
+
.option('--isolated-profile', 'Use per-provider browser profiles')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
const provider = options.provider ?? 'chatgpt';
|
|
17
|
+
if (!isValidProvider(provider)) {
|
|
18
|
+
console.error(chalk.red(`Unknown provider: ${provider}`));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
if (!IMAGE_PROVIDERS.includes(provider)) {
|
|
22
|
+
console.error(chalk.red(`Provider "${provider}" does not support image generation. Use: ${IMAGE_PROVIDERS.join(', ')}`));
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const timeoutMs = (() => {
|
|
26
|
+
const t = Number.parseInt(options.timeout, 10);
|
|
27
|
+
return Number.isFinite(t) && t > 0 ? t : 120_000;
|
|
28
|
+
})();
|
|
29
|
+
try {
|
|
30
|
+
console.log(chalk.bold.blue('🖼 Image Generation\n'));
|
|
31
|
+
const result = await runImageGen({
|
|
32
|
+
prompt: options.prompt,
|
|
33
|
+
provider: provider,
|
|
34
|
+
headed: options.headed,
|
|
35
|
+
timeoutMs,
|
|
36
|
+
saveDir: options.saveDir,
|
|
37
|
+
isolatedProfile: options.isolatedProfile,
|
|
38
|
+
});
|
|
39
|
+
renderImageResult(result);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
43
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return cmd;
|
|
48
|
+
}
|
|
49
|
+
function renderImageResult(result) {
|
|
50
|
+
console.log('');
|
|
51
|
+
if (result.images.length > 0) {
|
|
52
|
+
console.log(chalk.bold.green(`--- ${result.images.length} Image(s) Generated ---\n`));
|
|
53
|
+
for (const img of result.images) {
|
|
54
|
+
if (img.localPath) {
|
|
55
|
+
console.log(chalk.green(` 🖼 ${img.localPath}`));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log(chalk.dim(` 🔗 ${img.url?.slice(0, 100)}`));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(chalk.yellow('No images were generated.'));
|
|
64
|
+
}
|
|
65
|
+
if (result.text) {
|
|
66
|
+
console.log(chalk.dim(`\n${result.text}`));
|
|
67
|
+
}
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(chalk.dim(`Session: ${result.sessionId}`));
|
|
70
|
+
console.log(chalk.dim(`Provider: ${result.provider}`));
|
|
71
|
+
console.log(chalk.dim(`Duration: ${Math.round(result.durationMs / 1000)}s`));
|
|
72
|
+
if (result.truncated) {
|
|
73
|
+
console.log(chalk.yellow('⚠ Generation may be incomplete (timeout reached)'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/cli/image.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,IAAI,OAAO,CA2D/C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { runResearch } from '../core/research-orchestrator.js';
|
|
4
|
+
import { isValidProvider } from '../providers/index.js';
|
|
5
|
+
const RESEARCH_PROVIDERS = ['chatgpt', 'gemini', 'perplexity'];
|
|
6
|
+
export function createResearchCommand() {
|
|
7
|
+
const cmd = new Command('research')
|
|
8
|
+
.description('Deep research via ChatGPT, Gemini, or Perplexity — non-blocking with progress polling')
|
|
9
|
+
.requiredOption('-p, --prompt <text>', 'The research query')
|
|
10
|
+
.option('--provider <name>', `Provider (${RESEARCH_PROVIDERS.join(', ')})`, 'gemini')
|
|
11
|
+
.option('--headed', 'Show browser window')
|
|
12
|
+
.option('--timeout <ms>', 'Total timeout in milliseconds', '600000')
|
|
13
|
+
.option('--poll-interval <ms>', 'Progress check interval in milliseconds', '5000')
|
|
14
|
+
.option('--save-dir <dir>', 'Directory to save the research report')
|
|
15
|
+
.option('--isolated-profile', 'Use per-provider browser profiles')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
const provider = options.provider ?? 'gemini';
|
|
18
|
+
if (!isValidProvider(provider)) {
|
|
19
|
+
console.error(chalk.red(`Unknown provider: ${provider}`));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
if (!RESEARCH_PROVIDERS.includes(provider)) {
|
|
23
|
+
console.error(chalk.red(`Provider "${provider}" does not support deep research. Use: ${RESEARCH_PROVIDERS.join(', ')}`));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const timeoutMs = (() => {
|
|
27
|
+
const t = Number.parseInt(options.timeout, 10);
|
|
28
|
+
return Number.isFinite(t) && t > 0 ? t : 600_000;
|
|
29
|
+
})();
|
|
30
|
+
const pollIntervalMs = (() => {
|
|
31
|
+
const t = Number.parseInt(options.pollInterval, 10);
|
|
32
|
+
return Number.isFinite(t) && t > 0 ? t : 5_000;
|
|
33
|
+
})();
|
|
34
|
+
try {
|
|
35
|
+
console.log(chalk.bold.blue('🔬 Deep Research\n'));
|
|
36
|
+
const result = await runResearch({
|
|
37
|
+
prompt: options.prompt,
|
|
38
|
+
provider: provider,
|
|
39
|
+
headed: options.headed,
|
|
40
|
+
timeoutMs,
|
|
41
|
+
pollIntervalMs,
|
|
42
|
+
saveDir: options.saveDir,
|
|
43
|
+
isolatedProfile: options.isolatedProfile,
|
|
44
|
+
});
|
|
45
|
+
renderResearchResult(result);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
49
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return cmd;
|
|
54
|
+
}
|
|
55
|
+
function renderResearchResult(result) {
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log(chalk.bold.green('--- Research Report ---\n'));
|
|
58
|
+
console.log(result.report);
|
|
59
|
+
console.log('');
|
|
60
|
+
if (result.savedPath) {
|
|
61
|
+
console.log(chalk.green(`📄 Saved: ${result.savedPath}`));
|
|
62
|
+
}
|
|
63
|
+
console.log(chalk.dim(`Session: ${result.sessionId}`));
|
|
64
|
+
console.log(chalk.dim(`Provider: ${result.provider}`));
|
|
65
|
+
console.log(chalk.dim(`Duration: ${Math.round(result.durationMs / 1000)}s`));
|
|
66
|
+
if (result.truncated) {
|
|
67
|
+
console.log(chalk.yellow('⚠ Report may be incomplete (timeout reached)'));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/cli/research.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ImageGenOptions, ImageGenResult } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run image generation:
|
|
4
|
+
* 1. Launch browser → navigate to provider
|
|
5
|
+
* 2. Submit the image prompt
|
|
6
|
+
* 3. Poll for generation progress (non-blocking)
|
|
7
|
+
* 4. Extract and download generated images
|
|
8
|
+
*/
|
|
9
|
+
export declare function runImageGen(options: ImageGenOptions): Promise<ImageGenResult>;
|
|
10
|
+
//# sourceMappingURL=image-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/image-orchestrator.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAkB,eAAe,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAgJjG;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAyHnF"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { launchBrowser } from '../browser/index.js';
|
|
3
|
+
import { resolveHeadlessMode } from '../browser/mode.js';
|
|
4
|
+
import { loadConfig } from '../config.js';
|
|
5
|
+
import { getProvider } from '../providers/index.js';
|
|
6
|
+
import { createSession, saveBundle, saveResponse, updateSession } from '../session/index.js';
|
|
7
|
+
import { downloadImages } from './images.js';
|
|
8
|
+
const chatgptImageGen = {
|
|
9
|
+
async isGenerating(page) {
|
|
10
|
+
// ChatGPT shows a stop button while DALL-E is generating
|
|
11
|
+
const stopBtn = await page
|
|
12
|
+
.locator('button[aria-label="Stop streaming"]')
|
|
13
|
+
.first()
|
|
14
|
+
.isVisible()
|
|
15
|
+
.catch(() => false);
|
|
16
|
+
if (stopBtn)
|
|
17
|
+
return true;
|
|
18
|
+
// Also check for "Creating image..." text in the last assistant turn
|
|
19
|
+
const lastTurn = page.locator('[data-message-author-role="assistant"]').last();
|
|
20
|
+
const text = (await lastTurn.textContent().catch(() => ''))?.toLowerCase() ?? '';
|
|
21
|
+
return text.includes('creating') || text.includes('generating');
|
|
22
|
+
},
|
|
23
|
+
async extractImages(page) {
|
|
24
|
+
return page.evaluate(() => {
|
|
25
|
+
const seen = new Set();
|
|
26
|
+
const results = [];
|
|
27
|
+
// DALL-E generated images
|
|
28
|
+
const imgs = Array.from(document.querySelectorAll('img[alt="Generated image"], img[alt*="DALL"], img[data-testid*="image"]'));
|
|
29
|
+
for (const img of imgs) {
|
|
30
|
+
const src = img.getAttribute('src') ?? '';
|
|
31
|
+
const idMatch = src.match(/[?&]id=([^&]+)/);
|
|
32
|
+
const key = idMatch ? idMatch[1] : src;
|
|
33
|
+
if (!key || seen.has(key))
|
|
34
|
+
continue;
|
|
35
|
+
const w = img.naturalWidth;
|
|
36
|
+
const h = img.naturalHeight;
|
|
37
|
+
if (w > 0 && w < 64 && h > 0 && h < 64)
|
|
38
|
+
continue;
|
|
39
|
+
seen.add(key);
|
|
40
|
+
results.push({
|
|
41
|
+
url: src,
|
|
42
|
+
alt: img.getAttribute('alt') ?? '',
|
|
43
|
+
width: w,
|
|
44
|
+
height: h,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
async extractText(page) {
|
|
51
|
+
const lastTurn = page.locator('[data-message-author-role="assistant"]').last();
|
|
52
|
+
return (await lastTurn.textContent().catch(() => ''))?.trim() ?? '';
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const geminiImageGen = {
|
|
56
|
+
async isGenerating(page) {
|
|
57
|
+
// Check for Gemini image generation indicators
|
|
58
|
+
const indicators = [
|
|
59
|
+
'button[aria-label="Stop generating"]',
|
|
60
|
+
'button[aria-label="Cancel"]',
|
|
61
|
+
'.image-generation-loading',
|
|
62
|
+
'.loading-indicator',
|
|
63
|
+
'model-response [class*="loading"]',
|
|
64
|
+
'model-response [class*="progress"]',
|
|
65
|
+
];
|
|
66
|
+
for (const sel of indicators) {
|
|
67
|
+
const visible = await page
|
|
68
|
+
.locator(sel)
|
|
69
|
+
.first()
|
|
70
|
+
.isVisible()
|
|
71
|
+
.catch(() => false);
|
|
72
|
+
if (visible)
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
// Check for "Loading Nano Banana" or "Generating image" text
|
|
76
|
+
const lastTurn = page
|
|
77
|
+
.locator('model-response .model-response-text, model-response message-content')
|
|
78
|
+
.last();
|
|
79
|
+
const text = (await lastTurn.textContent().catch(() => ''))?.toLowerCase() ?? '';
|
|
80
|
+
return (text.includes('loading nano banana') ||
|
|
81
|
+
text.includes('generating image') ||
|
|
82
|
+
text.includes('creating image') ||
|
|
83
|
+
text.includes('loading imagen'));
|
|
84
|
+
},
|
|
85
|
+
async extractImages(page) {
|
|
86
|
+
return page.evaluate(() => {
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
const results = [];
|
|
89
|
+
const selectors = [
|
|
90
|
+
'img.image.loaded',
|
|
91
|
+
'img[alt*="AI generated"]',
|
|
92
|
+
'img[alt*="Generated"]',
|
|
93
|
+
'model-response img[src*="lh3.googleusercontent.com"]',
|
|
94
|
+
'model-response img[src*="encrypted"]',
|
|
95
|
+
];
|
|
96
|
+
const imgs = Array.from(document.querySelectorAll(selectors.join(', ')));
|
|
97
|
+
for (const img of imgs) {
|
|
98
|
+
const src = img.getAttribute('src') ?? '';
|
|
99
|
+
if (!src || seen.has(src))
|
|
100
|
+
continue;
|
|
101
|
+
const w = img.naturalWidth;
|
|
102
|
+
const h = img.naturalHeight;
|
|
103
|
+
if (w > 0 && w < 64 && h > 0 && h < 64)
|
|
104
|
+
continue;
|
|
105
|
+
seen.add(src);
|
|
106
|
+
const fullSizeUrl = src.includes('=s') ? src : `${src}=s1024-rj`;
|
|
107
|
+
results.push({
|
|
108
|
+
url: fullSizeUrl,
|
|
109
|
+
alt: img.getAttribute('alt') ?? '',
|
|
110
|
+
width: w,
|
|
111
|
+
height: h,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
async extractText(page) {
|
|
118
|
+
const lastTurn = page
|
|
119
|
+
.locator('model-response .model-response-text, model-response message-content')
|
|
120
|
+
.last();
|
|
121
|
+
return (await lastTurn.textContent().catch(() => ''))?.trim() ?? '';
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
const IMAGE_GEN_CONFIGS = {
|
|
125
|
+
chatgpt: chatgptImageGen,
|
|
126
|
+
gemini: geminiImageGen,
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Run image generation:
|
|
130
|
+
* 1. Launch browser → navigate to provider
|
|
131
|
+
* 2. Submit the image prompt
|
|
132
|
+
* 3. Poll for generation progress (non-blocking)
|
|
133
|
+
* 4. Extract and download generated images
|
|
134
|
+
*/
|
|
135
|
+
export async function runImageGen(options) {
|
|
136
|
+
const config = await loadConfig();
|
|
137
|
+
const providerName = options.provider ?? 'chatgpt';
|
|
138
|
+
const provider = getProvider(providerName);
|
|
139
|
+
const imageGenConfig = IMAGE_GEN_CONFIGS[providerName];
|
|
140
|
+
if (!imageGenConfig) {
|
|
141
|
+
throw new Error(`Provider "${providerName}" does not support image generation. Use: chatgpt, gemini`);
|
|
142
|
+
}
|
|
143
|
+
const timeoutMs = options.timeoutMs ?? 120_000;
|
|
144
|
+
const headless = resolveHeadlessMode(providerName, config.headless, options.headed === true);
|
|
145
|
+
const profileMode = options.isolatedProfile ? 'isolated' : config.profileMode;
|
|
146
|
+
const session = await createSession(providerName, options.prompt);
|
|
147
|
+
await saveBundle(session.id, options.prompt);
|
|
148
|
+
console.log(chalk.dim(`Session: ${session.id}`));
|
|
149
|
+
console.log(chalk.blue(`Provider: ${provider.config.displayName}`));
|
|
150
|
+
console.log(chalk.dim(`Timeout: ${Math.round(timeoutMs / 1000)}s\n`));
|
|
151
|
+
let browser;
|
|
152
|
+
try {
|
|
153
|
+
await updateSession(session.id, { status: 'running' });
|
|
154
|
+
browser = await launchBrowser({
|
|
155
|
+
provider: providerName,
|
|
156
|
+
headless,
|
|
157
|
+
url: provider.config.url,
|
|
158
|
+
profileMode,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
await updateSession(session.id, { status: 'failed' });
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
const startTime = Date.now();
|
|
166
|
+
try {
|
|
167
|
+
// Check login
|
|
168
|
+
const loggedIn = await provider.actions.isLoggedIn(browser.page);
|
|
169
|
+
if (!loggedIn) {
|
|
170
|
+
throw new Error(`Not logged in to ${provider.config.displayName}. Run: 10x-chat login ${providerName}`);
|
|
171
|
+
}
|
|
172
|
+
// Submit the image generation prompt
|
|
173
|
+
console.log(chalk.dim('Submitting image prompt...'));
|
|
174
|
+
await provider.actions.submitPrompt(browser.page, options.prompt);
|
|
175
|
+
// Poll for image generation with progress updates
|
|
176
|
+
console.log(chalk.dim('Generating image(s)...\n'));
|
|
177
|
+
const pollInterval = 3_000;
|
|
178
|
+
let lastLogTime = Date.now();
|
|
179
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
180
|
+
const generating = await imageGenConfig.isGenerating(browser.page);
|
|
181
|
+
// Log periodic progress
|
|
182
|
+
if (Date.now() - lastLogTime > 10_000) {
|
|
183
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
184
|
+
console.log(chalk.dim(` [${elapsed}s] Still generating...`));
|
|
185
|
+
lastLogTime = Date.now();
|
|
186
|
+
}
|
|
187
|
+
if (!generating) {
|
|
188
|
+
// Double-check: wait one more interval to be sure
|
|
189
|
+
await browser.page.waitForTimeout(pollInterval);
|
|
190
|
+
const stillGenerating = await imageGenConfig.isGenerating(browser.page);
|
|
191
|
+
if (!stillGenerating)
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
await browser.page.waitForTimeout(pollInterval);
|
|
195
|
+
}
|
|
196
|
+
// Wait for images to fully load
|
|
197
|
+
await browser.page.waitForTimeout(2_000);
|
|
198
|
+
// Extract images
|
|
199
|
+
const images = await imageGenConfig.extractImages(browser.page);
|
|
200
|
+
const text = await imageGenConfig.extractText(browser.page);
|
|
201
|
+
console.log(chalk.green(`\n✓ Found ${images.length} image(s)`));
|
|
202
|
+
// Download images
|
|
203
|
+
let savedImages = images;
|
|
204
|
+
if (images.length > 0) {
|
|
205
|
+
console.log(chalk.dim('Downloading images...'));
|
|
206
|
+
savedImages = await downloadImages(browser.page, images, session.id, options.saveDir);
|
|
207
|
+
}
|
|
208
|
+
const durationMs = Date.now() - startTime;
|
|
209
|
+
const truncated = durationMs >= timeoutMs;
|
|
210
|
+
await saveResponse(session.id, text);
|
|
211
|
+
await updateSession(session.id, {
|
|
212
|
+
status: truncated ? 'timeout' : 'completed',
|
|
213
|
+
durationMs,
|
|
214
|
+
});
|
|
215
|
+
return {
|
|
216
|
+
sessionId: session.id,
|
|
217
|
+
provider: providerName,
|
|
218
|
+
images: savedImages,
|
|
219
|
+
text,
|
|
220
|
+
truncated,
|
|
221
|
+
durationMs,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
const durationMs = Date.now() - startTime;
|
|
226
|
+
const isTimeout = error instanceof Error && error.message.toLowerCase().includes('timeout');
|
|
227
|
+
await updateSession(session.id, {
|
|
228
|
+
status: isTimeout ? 'timeout' : 'failed',
|
|
229
|
+
durationMs,
|
|
230
|
+
});
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
await browser.close();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=image-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-orchestrator.js","sourceRoot":"","sources":["../../src/core/image-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ResearchOptions, ResearchResult } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run a deep research session:
|
|
4
|
+
* 1. Launch browser → navigate to provider
|
|
5
|
+
* 2. Activate deep research mode
|
|
6
|
+
* 3. Submit the research query
|
|
7
|
+
* 4. Poll for progress (non-blocking style with status updates)
|
|
8
|
+
* 5. Wait for completion
|
|
9
|
+
* 6. Extract and save the report
|
|
10
|
+
*/
|
|
11
|
+
export declare function runResearch(options: ResearchOptions): Promise<ResearchResult>;
|
|
12
|
+
//# sourceMappingURL=research-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/research-orchestrator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAgB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA6JjF;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAkInF"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { launchBrowser } from '../browser/index.js';
|
|
6
|
+
import { resolveHeadlessMode } from '../browser/mode.js';
|
|
7
|
+
import { loadConfig } from '../config.js';
|
|
8
|
+
import { getProvider } from '../providers/index.js';
|
|
9
|
+
import { createSession, saveBundle, saveResponse, updateSession } from '../session/index.js';
|
|
10
|
+
const geminiResearch = {
|
|
11
|
+
async activateResearch(page) {
|
|
12
|
+
// Gemini Deep Research: click the "Deep Research" chip/button
|
|
13
|
+
// It may appear as a button or in a menu depending on the model
|
|
14
|
+
const deepResearchBtn = page
|
|
15
|
+
.locator('button:has-text("Deep Research"), [aria-label*="Deep Research"], button:has-text("Research")')
|
|
16
|
+
.first();
|
|
17
|
+
const visible = await deepResearchBtn.isVisible().catch(() => false);
|
|
18
|
+
if (visible) {
|
|
19
|
+
await deepResearchBtn.click();
|
|
20
|
+
await page.waitForTimeout(1000);
|
|
21
|
+
}
|
|
22
|
+
// If not visible, Gemini may auto-route to deep research based on prompt
|
|
23
|
+
},
|
|
24
|
+
progressSelector: '.research-progress, .thinking-indicator, model-response [class*="progress"]',
|
|
25
|
+
async getProgress(page) {
|
|
26
|
+
const el = page
|
|
27
|
+
.locator('.research-progress, .thinking-indicator, model-response [class*="progress"]')
|
|
28
|
+
.first();
|
|
29
|
+
return (await el.textContent().catch(() => '')) ?? '';
|
|
30
|
+
},
|
|
31
|
+
async isResearching(page) {
|
|
32
|
+
// Check for active research indicators
|
|
33
|
+
const indicators = [
|
|
34
|
+
'.research-progress',
|
|
35
|
+
'.thinking-indicator',
|
|
36
|
+
'button[aria-label="Stop generating"]',
|
|
37
|
+
'button[aria-label="Cancel"]',
|
|
38
|
+
'model-response [class*="loading"]',
|
|
39
|
+
'model-response [class*="progress"]',
|
|
40
|
+
];
|
|
41
|
+
for (const sel of indicators) {
|
|
42
|
+
const visible = await page
|
|
43
|
+
.locator(sel)
|
|
44
|
+
.first()
|
|
45
|
+
.isVisible()
|
|
46
|
+
.catch(() => false);
|
|
47
|
+
if (visible)
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
},
|
|
52
|
+
async getReport(page) {
|
|
53
|
+
const responseTurn = page
|
|
54
|
+
.locator('model-response .model-response-text, model-response message-content')
|
|
55
|
+
.last();
|
|
56
|
+
return (await responseTurn.textContent().catch(() => ''))?.trim() ?? '';
|
|
57
|
+
},
|
|
58
|
+
async getReportHtml(page) {
|
|
59
|
+
const responseTurn = page
|
|
60
|
+
.locator('model-response .model-response-text, model-response message-content')
|
|
61
|
+
.last();
|
|
62
|
+
return (await responseTurn.innerHTML().catch(() => '')) ?? '';
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
const chatgptResearch = {
|
|
66
|
+
async activateResearch(page) {
|
|
67
|
+
// ChatGPT deep research: look for "Deep Research" or "Research" button/toggle
|
|
68
|
+
// Usually appears as a mode toggle or in the model picker
|
|
69
|
+
const researchBtn = page
|
|
70
|
+
.locator('button:has-text("Deep research"), [data-testid*="research"], button:has-text("Research")')
|
|
71
|
+
.first();
|
|
72
|
+
const visible = await researchBtn.isVisible().catch(() => false);
|
|
73
|
+
if (visible) {
|
|
74
|
+
await researchBtn.click();
|
|
75
|
+
await page.waitForTimeout(1000);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
progressSelector: '[data-message-author-role="assistant"]',
|
|
79
|
+
async getProgress(page) {
|
|
80
|
+
const lastTurn = page.locator('[data-message-author-role="assistant"]').last();
|
|
81
|
+
const text = (await lastTurn.textContent().catch(() => ''))?.trim() ?? '';
|
|
82
|
+
// Extract just the progress part (first few lines)
|
|
83
|
+
return text.split('\n').slice(0, 3).join(' ').slice(0, 200);
|
|
84
|
+
},
|
|
85
|
+
async isResearching(page) {
|
|
86
|
+
const stopBtn = page.locator('button[aria-label="Stop streaming"]').first();
|
|
87
|
+
return stopBtn.isVisible().catch(() => false);
|
|
88
|
+
},
|
|
89
|
+
async getReport(page) {
|
|
90
|
+
const lastTurn = page.locator('[data-message-author-role="assistant"]').last();
|
|
91
|
+
return (await lastTurn.textContent().catch(() => ''))?.trim() ?? '';
|
|
92
|
+
},
|
|
93
|
+
async getReportHtml(page) {
|
|
94
|
+
const lastTurn = page.locator('[data-message-author-role="assistant"]').last();
|
|
95
|
+
return (await lastTurn.innerHTML().catch(() => '')) ?? '';
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
const perplexityResearch = {
|
|
99
|
+
async activateResearch(page) {
|
|
100
|
+
// Perplexity: toggle "Pro Search" or "Deep Research" if available
|
|
101
|
+
const proBtn = page
|
|
102
|
+
.locator('button:has-text("Pro"), button:has-text("Deep"), [aria-label*="Pro Search"]')
|
|
103
|
+
.first();
|
|
104
|
+
const visible = await proBtn.isVisible().catch(() => false);
|
|
105
|
+
if (visible) {
|
|
106
|
+
await proBtn.click();
|
|
107
|
+
await page.waitForTimeout(500);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
progressSelector: '.prose',
|
|
111
|
+
async getProgress(page) {
|
|
112
|
+
const prose = page.locator('.prose').first();
|
|
113
|
+
const text = (await prose.textContent().catch(() => ''))?.trim() ?? '';
|
|
114
|
+
return text.slice(0, 200);
|
|
115
|
+
},
|
|
116
|
+
async isResearching(page) {
|
|
117
|
+
// Perplexity shows a pulsing indicator or "Searching..." text while working
|
|
118
|
+
const searching = await page
|
|
119
|
+
.locator('[class*="searching"], [class*="loading"], [class*="animate-pulse"]')
|
|
120
|
+
.first()
|
|
121
|
+
.isVisible()
|
|
122
|
+
.catch(() => false);
|
|
123
|
+
return searching;
|
|
124
|
+
},
|
|
125
|
+
async getReport(page) {
|
|
126
|
+
const prose = page.locator('.prose').first();
|
|
127
|
+
return (await prose.textContent().catch(() => ''))?.trim() ?? '';
|
|
128
|
+
},
|
|
129
|
+
async getReportHtml(page) {
|
|
130
|
+
const prose = page.locator('.prose').first();
|
|
131
|
+
return (await prose.innerHTML().catch(() => '')) ?? '';
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
const RESEARCH_CONFIGS = {
|
|
135
|
+
gemini: geminiResearch,
|
|
136
|
+
chatgpt: chatgptResearch,
|
|
137
|
+
perplexity: perplexityResearch,
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Run a deep research session:
|
|
141
|
+
* 1. Launch browser → navigate to provider
|
|
142
|
+
* 2. Activate deep research mode
|
|
143
|
+
* 3. Submit the research query
|
|
144
|
+
* 4. Poll for progress (non-blocking style with status updates)
|
|
145
|
+
* 5. Wait for completion
|
|
146
|
+
* 6. Extract and save the report
|
|
147
|
+
*/
|
|
148
|
+
export async function runResearch(options) {
|
|
149
|
+
const config = await loadConfig();
|
|
150
|
+
const providerName = options.provider ?? 'gemini';
|
|
151
|
+
const provider = getProvider(providerName);
|
|
152
|
+
const researchConfig = RESEARCH_CONFIGS[providerName];
|
|
153
|
+
if (!researchConfig) {
|
|
154
|
+
throw new Error(`Provider "${providerName}" does not support deep research. Use: gemini, chatgpt, perplexity`);
|
|
155
|
+
}
|
|
156
|
+
const timeoutMs = options.timeoutMs ?? 600_000; // 10 minutes default
|
|
157
|
+
const pollIntervalMs = options.pollIntervalMs ?? 5_000;
|
|
158
|
+
const headless = resolveHeadlessMode(providerName, config.headless, options.headed === true);
|
|
159
|
+
const profileMode = options.isolatedProfile ? 'isolated' : config.profileMode;
|
|
160
|
+
// Create session
|
|
161
|
+
const session = await createSession(providerName, options.prompt);
|
|
162
|
+
await saveBundle(session.id, options.prompt);
|
|
163
|
+
console.log(chalk.dim(`Session: ${session.id}`));
|
|
164
|
+
console.log(chalk.blue(`Provider: ${provider.config.displayName}`));
|
|
165
|
+
console.log(chalk.dim(`Timeout: ${Math.round(timeoutMs / 1000)}s`));
|
|
166
|
+
console.log(chalk.dim(`Poll interval: ${Math.round(pollIntervalMs / 1000)}s\n`));
|
|
167
|
+
let browser;
|
|
168
|
+
try {
|
|
169
|
+
await updateSession(session.id, { status: 'running' });
|
|
170
|
+
browser = await launchBrowser({
|
|
171
|
+
provider: providerName,
|
|
172
|
+
headless,
|
|
173
|
+
url: provider.config.url,
|
|
174
|
+
profileMode,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
await updateSession(session.id, { status: 'failed' });
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
const startTime = Date.now();
|
|
182
|
+
try {
|
|
183
|
+
// Check login
|
|
184
|
+
const loggedIn = await provider.actions.isLoggedIn(browser.page);
|
|
185
|
+
if (!loggedIn) {
|
|
186
|
+
throw new Error(`Not logged in to ${provider.config.displayName}. Run: 10x-chat login ${providerName}`);
|
|
187
|
+
}
|
|
188
|
+
// Step 1: Activate deep research mode
|
|
189
|
+
console.log(chalk.dim('Activating deep research mode...'));
|
|
190
|
+
await researchConfig.activateResearch(browser.page);
|
|
191
|
+
// Step 2: Submit the research query
|
|
192
|
+
console.log(chalk.dim('Submitting research query...'));
|
|
193
|
+
await provider.actions.submitPrompt(browser.page, options.prompt);
|
|
194
|
+
// Step 3: Poll for progress with non-blocking status updates
|
|
195
|
+
console.log(chalk.dim('Research in progress...\n'));
|
|
196
|
+
let lastProgress = '';
|
|
197
|
+
let stableCount = 0;
|
|
198
|
+
const stableThreshold = 3;
|
|
199
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
200
|
+
const researching = await researchConfig.isResearching(browser.page);
|
|
201
|
+
const progress = await researchConfig.getProgress(browser.page);
|
|
202
|
+
// Show progress updates
|
|
203
|
+
if (progress && progress !== lastProgress) {
|
|
204
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
205
|
+
const preview = progress.length > 120 ? `${progress.slice(0, 120)}...` : progress;
|
|
206
|
+
console.log(chalk.dim(` [${elapsed}s] ${preview}`));
|
|
207
|
+
lastProgress = progress;
|
|
208
|
+
stableCount = 0;
|
|
209
|
+
}
|
|
210
|
+
else if (!researching) {
|
|
211
|
+
stableCount++;
|
|
212
|
+
if (stableCount >= stableThreshold && lastProgress.length > 0) {
|
|
213
|
+
console.log(chalk.green('\n✓ Research complete'));
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
await browser.page.waitForTimeout(pollIntervalMs);
|
|
218
|
+
}
|
|
219
|
+
// Step 4: Extract the final report
|
|
220
|
+
const report = await researchConfig.getReport(browser.page);
|
|
221
|
+
const truncated = Date.now() - startTime >= timeoutMs && stableCount < stableThreshold;
|
|
222
|
+
// Save response
|
|
223
|
+
await saveResponse(session.id, report);
|
|
224
|
+
// Save report to file if requested
|
|
225
|
+
let savedPath;
|
|
226
|
+
if (options.saveDir || report.length > 0) {
|
|
227
|
+
const saveDir = options.saveDir ?? path.join(os.homedir(), '.10x-chat', 'sessions', session.id);
|
|
228
|
+
await mkdir(saveDir, { recursive: true });
|
|
229
|
+
const filename = `research-${providerName}-${new Date().toISOString().slice(0, 10)}.md`;
|
|
230
|
+
savedPath = path.join(saveDir, filename);
|
|
231
|
+
await writeFile(savedPath, report);
|
|
232
|
+
}
|
|
233
|
+
const durationMs = Date.now() - startTime;
|
|
234
|
+
await updateSession(session.id, {
|
|
235
|
+
status: truncated ? 'timeout' : 'completed',
|
|
236
|
+
durationMs,
|
|
237
|
+
});
|
|
238
|
+
return {
|
|
239
|
+
sessionId: session.id,
|
|
240
|
+
provider: providerName,
|
|
241
|
+
report,
|
|
242
|
+
truncated,
|
|
243
|
+
durationMs,
|
|
244
|
+
savedPath,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
const durationMs = Date.now() - startTime;
|
|
249
|
+
const isTimeout = error instanceof Error && error.message.toLowerCase().includes('timeout');
|
|
250
|
+
await updateSession(session.id, {
|
|
251
|
+
status: isTimeout ? 'timeout' : 'failed',
|
|
252
|
+
durationMs,
|
|
253
|
+
});
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
await browser.close();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=research-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-orchestrator.js","sourceRoot":"","sources":["../../src/core/research-orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -103,6 +103,39 @@ export interface ChatOptions {
|
|
|
103
103
|
/** Override to use isolated (per-provider) profiles regardless of config. */
|
|
104
104
|
isolatedProfile?: boolean;
|
|
105
105
|
}
|
|
106
|
+
export interface ResearchOptions {
|
|
107
|
+
prompt: string;
|
|
108
|
+
provider?: ProviderName;
|
|
109
|
+
headed?: boolean;
|
|
110
|
+
timeoutMs?: number;
|
|
111
|
+
pollIntervalMs?: number;
|
|
112
|
+
saveDir?: string;
|
|
113
|
+
isolatedProfile?: boolean;
|
|
114
|
+
}
|
|
115
|
+
export interface ResearchResult {
|
|
116
|
+
sessionId: string;
|
|
117
|
+
provider: ProviderName;
|
|
118
|
+
report: string;
|
|
119
|
+
truncated: boolean;
|
|
120
|
+
durationMs: number;
|
|
121
|
+
savedPath?: string;
|
|
122
|
+
}
|
|
123
|
+
export interface ImageGenOptions {
|
|
124
|
+
prompt: string;
|
|
125
|
+
provider?: ProviderName;
|
|
126
|
+
headed?: boolean;
|
|
127
|
+
timeoutMs?: number;
|
|
128
|
+
saveDir?: string;
|
|
129
|
+
isolatedProfile?: boolean;
|
|
130
|
+
}
|
|
131
|
+
export interface ImageGenResult {
|
|
132
|
+
sessionId: string;
|
|
133
|
+
provider: ProviderName;
|
|
134
|
+
images: GeneratedImage[];
|
|
135
|
+
text: string;
|
|
136
|
+
truncated: boolean;
|
|
137
|
+
durationMs: number;
|
|
138
|
+
}
|
|
106
139
|
export type VideoMode = 'ingredients' | 'frames';
|
|
107
140
|
export type VideoModel = 'Veo 3.1 - Fast' | 'Veo 3.1 - Fast [Lower Priority]' | 'Veo 3.1 - Quality' | 'Veo 2 - Fast' | 'Veo 2 - Quality';
|
|
108
141
|
export type VideoOrientation = 'landscape' | 'portrait';
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|