10x-chat 0.10.11 → 0.10.12
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 +19 -2
- package/dist/bin/cli.js +2 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/history.d.ts +3 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +207 -0
- package/dist/cli/history.js.map +1 -0
- package/package.json +1 -1
- package/skills/10x-chat/SKILL.md +3 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 10x-chat
|
|
2
2
|
|
|
3
|
-
> Chat with web AI agents (ChatGPT, Gemini, Claude, Grok, Perplexity
|
|
3
|
+
> Chat with web AI agents (ChatGPT, Gemini, Claude, Grok, Perplexity) from your terminal via browser automation.
|
|
4
4
|
|
|
5
5
|
**English** | [繁體中文](./README-zh.md)
|
|
6
6
|
|
|
@@ -110,9 +110,26 @@ npx 10x-chat@latest research -p "Compare React vs Vue in 2026" --provider perple
|
|
|
110
110
|
| `--poll-interval <ms>` | Progress check interval (default: 5000) |
|
|
111
111
|
| `--save-dir <dir>` | Directory to save the research report |
|
|
112
112
|
|
|
113
|
+
### `history`
|
|
114
|
+
|
|
115
|
+
List chat history visible in provider sidebars (ChatGPT, Gemini, Claude, Grok, Perplexity).
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npx 10x-chat@latest history --provider gemini
|
|
119
|
+
npx 10x-chat@latest history --provider all --limit 10
|
|
120
|
+
npx 10x-chat@latest history --provider chatgpt --json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
| Flag | Description |
|
|
124
|
+
|------|-------------|
|
|
125
|
+
| `--provider <name>` | Provider: `chatgpt`, `gemini`, `claude`, `grok`, `perplexity`, or `all` (default: all) |
|
|
126
|
+
| `--limit <n>` | Maximum items per provider (default: 20) |
|
|
127
|
+
| `--headed` | Show browser window |
|
|
128
|
+
| `--json` | Output JSON |
|
|
129
|
+
|
|
113
130
|
### `status`
|
|
114
131
|
|
|
115
|
-
List
|
|
132
|
+
List local 10x-chat CLI sessions.
|
|
116
133
|
|
|
117
134
|
```bash
|
|
118
135
|
npx 10x-chat@latest status # Last 24 hours
|
package/dist/bin/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ import { Command } from 'commander';
|
|
|
7
7
|
import { stopDaemon } from '../browser/daemon.js';
|
|
8
8
|
import { createChatCommand } from '../cli/chat.js';
|
|
9
9
|
import { createConfigCommand } from '../cli/config.js';
|
|
10
|
+
import { createHistoryCommand } from '../cli/history.js';
|
|
10
11
|
import { createImageCommand } from '../cli/image.js';
|
|
11
12
|
import { createLoginCommand } from '../cli/login.js';
|
|
12
13
|
import { createMigrateCommand } from '../cli/migrate.js';
|
|
@@ -38,6 +39,7 @@ program
|
|
|
38
39
|
.version(pkg.version);
|
|
39
40
|
program.addCommand(createLoginCommand());
|
|
40
41
|
program.addCommand(createChatCommand());
|
|
42
|
+
program.addCommand(createHistoryCommand());
|
|
41
43
|
program.addCommand(createImageCommand());
|
|
42
44
|
program.addCommand(createResearchCommand());
|
|
43
45
|
program.addCommand(createVideoCommand());
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,oBAAoB,IAAI,OAAO,CA4C9C"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { launchBrowser } from '../browser/index.js';
|
|
4
|
+
import { resolveHeadlessMode } from '../browser/mode.js';
|
|
5
|
+
import { loadConfig } from '../config.js';
|
|
6
|
+
import { getProvider, isValidProvider } from '../providers/index.js';
|
|
7
|
+
const HISTORY_PROVIDERS = ['chatgpt', 'gemini', 'claude', 'grok', 'perplexity'];
|
|
8
|
+
const HISTORY_URL_HINTS = {
|
|
9
|
+
chatgpt: [/\/c\//, /chatgpt\.com\/share\//],
|
|
10
|
+
gemini: [/gemini\.google\.com\/app\//],
|
|
11
|
+
claude: [/claude\.ai\/chat\//],
|
|
12
|
+
grok: [/grok\.com\/chat\//],
|
|
13
|
+
perplexity: [/perplexity\.ai\/(?:search|thread)\//],
|
|
14
|
+
notebooklm: [/notebooklm\.google\.com\/notebook\//],
|
|
15
|
+
};
|
|
16
|
+
const HISTORY_SELECTOR_HINTS = {
|
|
17
|
+
chatgpt: '[data-testid^="history-item"], nav a, a',
|
|
18
|
+
gemini: 'a[data-test-id="conversation"], [data-test-id="conversation"], nav a, a',
|
|
19
|
+
claude: 'nav a, a[href*="/chat/"], a',
|
|
20
|
+
grok: 'nav a, a[href*="/chat/"], a',
|
|
21
|
+
perplexity: 'nav a, a[href*="/search/"], a[href*="/thread/"], a',
|
|
22
|
+
notebooklm: 'a[href*="/notebook/"], [role="link"], a',
|
|
23
|
+
};
|
|
24
|
+
export function createHistoryCommand() {
|
|
25
|
+
return new Command('history')
|
|
26
|
+
.description('List chat history visible in provider sidebars')
|
|
27
|
+
.option('--provider <name>', `Provider (${HISTORY_PROVIDERS.join(', ')}, all)`, 'all')
|
|
28
|
+
.option('--limit <n>', 'Maximum items per provider', '20')
|
|
29
|
+
.option('--headed', 'Show browser window')
|
|
30
|
+
.option('--json', 'Output JSON')
|
|
31
|
+
.option('--isolated-profile', 'Use per-provider browser profiles')
|
|
32
|
+
.action(async (options) => {
|
|
33
|
+
const providerOption = String(options.provider ?? 'all');
|
|
34
|
+
const limit = Math.max(1, Number.parseInt(options.limit, 10) || 20);
|
|
35
|
+
const providers = (() => {
|
|
36
|
+
if (providerOption === 'all')
|
|
37
|
+
return HISTORY_PROVIDERS;
|
|
38
|
+
if (!isValidProvider(providerOption) || !HISTORY_PROVIDERS.includes(providerOption)) {
|
|
39
|
+
console.error(chalk.red(`Unknown or unsupported provider: ${providerOption}. Use: ${HISTORY_PROVIDERS.join(', ')}, all`));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
return [providerOption];
|
|
43
|
+
})();
|
|
44
|
+
const results = [];
|
|
45
|
+
for (const providerName of providers) {
|
|
46
|
+
results.push(await listProviderHistory(providerName, {
|
|
47
|
+
headed: options.headed === true,
|
|
48
|
+
isolatedProfile: options.isolatedProfile === true,
|
|
49
|
+
limit,
|
|
50
|
+
quiet: options.json === true,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
if (options.json) {
|
|
54
|
+
console.log(JSON.stringify(results, null, 2));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
renderHistory(results);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async function listProviderHistory(providerName, opts) {
|
|
61
|
+
const config = await loadConfig();
|
|
62
|
+
const provider = getProvider(providerName);
|
|
63
|
+
const headless = resolveHeadlessMode(providerName, config.headless, opts.headed);
|
|
64
|
+
const profileMode = opts.isolatedProfile ? 'isolated' : config.profileMode;
|
|
65
|
+
let browser;
|
|
66
|
+
const originalConsoleLog = console.log;
|
|
67
|
+
const originalConsoleError = console.error;
|
|
68
|
+
if (opts.quiet) {
|
|
69
|
+
console.log = () => { };
|
|
70
|
+
console.error = () => { };
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
browser = await launchBrowser({
|
|
74
|
+
provider: providerName,
|
|
75
|
+
headless,
|
|
76
|
+
url: provider.config.url,
|
|
77
|
+
profileMode,
|
|
78
|
+
});
|
|
79
|
+
const loggedIn = await provider.actions.isLoggedIn(browser.page);
|
|
80
|
+
if (!loggedIn) {
|
|
81
|
+
return { provider: providerName, items: [], error: 'not logged in' };
|
|
82
|
+
}
|
|
83
|
+
await revealHistory(browser.page, providerName);
|
|
84
|
+
const items = await extractHistoryItems(browser.page, providerName, opts.limit);
|
|
85
|
+
return { provider: providerName, items };
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return {
|
|
89
|
+
provider: providerName,
|
|
90
|
+
items: [],
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
await browser?.close().catch(() => { });
|
|
96
|
+
if (opts.quiet) {
|
|
97
|
+
console.log = originalConsoleLog;
|
|
98
|
+
console.error = originalConsoleError;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function revealHistory(page, providerName) {
|
|
103
|
+
await page.waitForTimeout(2_000);
|
|
104
|
+
if (providerName === 'chatgpt') {
|
|
105
|
+
const searchButton = page
|
|
106
|
+
.locator('[aria-label*="Search chats"], button:has-text("Search chats")')
|
|
107
|
+
.first();
|
|
108
|
+
if (await searchButton.isVisible().catch(() => false))
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (providerName === 'gemini') {
|
|
112
|
+
const historyVisible = await page
|
|
113
|
+
.locator('a[data-test-id="conversation"], [data-test-id="conversation"]')
|
|
114
|
+
.first()
|
|
115
|
+
.isVisible()
|
|
116
|
+
.catch(() => false);
|
|
117
|
+
if (historyVisible)
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const maybeOpenSidebar = page
|
|
121
|
+
.locator([
|
|
122
|
+
'[data-testid="side-nav-menu-button"]',
|
|
123
|
+
'[aria-label="Main menu"]',
|
|
124
|
+
'[aria-label*="menu" i]',
|
|
125
|
+
'button:has-text("Recents")',
|
|
126
|
+
'button:has-text("History")',
|
|
127
|
+
].join(', '))
|
|
128
|
+
.first();
|
|
129
|
+
if (await maybeOpenSidebar.isVisible().catch(() => false)) {
|
|
130
|
+
await maybeOpenSidebar.click({ force: true }).catch(() => { });
|
|
131
|
+
await page.waitForTimeout(1_000);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function extractHistoryItems(page, providerName, limit) {
|
|
135
|
+
return page.evaluate(({ provider, limit: maxItems, selector, urlHints }) => {
|
|
136
|
+
const normalize = (value) => (value ?? '').replace(/\s+/g, ' ').trim();
|
|
137
|
+
const isVisible = (el) => {
|
|
138
|
+
if (!(el instanceof HTMLElement))
|
|
139
|
+
return false;
|
|
140
|
+
return el.offsetWidth > 0 && el.offsetHeight > 0;
|
|
141
|
+
};
|
|
142
|
+
const matchesUrlHint = (href) => {
|
|
143
|
+
if (!href)
|
|
144
|
+
return false;
|
|
145
|
+
return urlHints.some((pattern) => new RegExp(pattern).test(href));
|
|
146
|
+
};
|
|
147
|
+
const candidates = Array.from(document.querySelectorAll(selector));
|
|
148
|
+
const seen = new Set();
|
|
149
|
+
const items = [];
|
|
150
|
+
for (const el of candidates) {
|
|
151
|
+
if (!isVisible(el))
|
|
152
|
+
continue;
|
|
153
|
+
const anchor = el instanceof HTMLAnchorElement ? el : el.querySelector('a');
|
|
154
|
+
const href = anchor instanceof HTMLAnchorElement ? anchor.href : '';
|
|
155
|
+
const title = normalize(el.getAttribute('aria-label') ||
|
|
156
|
+
el.getAttribute('title') ||
|
|
157
|
+
el.textContent ||
|
|
158
|
+
anchor?.textContent);
|
|
159
|
+
if (!title || title.length < 2)
|
|
160
|
+
continue;
|
|
161
|
+
if (/^(new chat|search chats|settings|upgrade|log in|sign in|explore gpts|library)$/i.test(title) ||
|
|
162
|
+
/^open (?:conversation|project|chat) options/i.test(title)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const providerSpecific = (() => {
|
|
166
|
+
if (provider === 'gemini')
|
|
167
|
+
return el.getAttribute('data-test-id') === 'conversation' || matchesUrlHint(href);
|
|
168
|
+
if (provider === 'chatgpt')
|
|
169
|
+
return matchesUrlHint(href);
|
|
170
|
+
return matchesUrlHint(href);
|
|
171
|
+
})();
|
|
172
|
+
if (!providerSpecific)
|
|
173
|
+
continue;
|
|
174
|
+
const key = href || title.toLowerCase();
|
|
175
|
+
if (seen.has(key))
|
|
176
|
+
continue;
|
|
177
|
+
seen.add(key);
|
|
178
|
+
items.push({ title, ...(href ? { href } : {}) });
|
|
179
|
+
if (items.length >= maxItems)
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
return items;
|
|
183
|
+
}, {
|
|
184
|
+
provider: providerName,
|
|
185
|
+
limit,
|
|
186
|
+
selector: HISTORY_SELECTOR_HINTS[providerName] ?? 'a, button, [role="link"]',
|
|
187
|
+
urlHints: (HISTORY_URL_HINTS[providerName] ?? []).map((re) => re.source),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function renderHistory(results) {
|
|
191
|
+
for (const result of results) {
|
|
192
|
+
console.log(chalk.bold(`\n${result.provider}`));
|
|
193
|
+
if (result.error) {
|
|
194
|
+
console.log(chalk.red(` ${result.error}`));
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (result.items.length === 0) {
|
|
198
|
+
console.log(chalk.dim(' No history items found.'));
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
result.items.forEach((item, index) => {
|
|
202
|
+
const href = item.href ? chalk.dim(` ${item.href}`) : '';
|
|
203
|
+
console.log(` ${String(index + 1).padStart(2, ' ')}. ${item.title}${href}`);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/10x-chat/SKILL.md
CHANGED
|
@@ -77,7 +77,9 @@ npx 10x-chat@latest research -p "Market analysis of EVs" --provider chatgpt --ti
|
|
|
77
77
|
npx 10x-chat@latest chat --dry-run -p "Debug this error" --file src/
|
|
78
78
|
npx 10x-chat@latest chat --copy -p "Explain this" --file "src/**"
|
|
79
79
|
|
|
80
|
-
#
|
|
80
|
+
# Provider chat history + local session management
|
|
81
|
+
npx 10x-chat@latest history --provider gemini
|
|
82
|
+
npx 10x-chat@latest history --provider all --limit 10
|
|
81
83
|
npx 10x-chat@latest status
|
|
82
84
|
npx 10x-chat@latest session <id> --render
|
|
83
85
|
|