10x-chat 0.2.0 → 0.2.2

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # 10x-chat
2
2
 
3
- > Chat with web AI agents (ChatGPT, Gemini, Claude) from your terminal via browser automation.
3
+ > Chat with web AI agents (ChatGPT, Gemini, Claude, Grok) from your terminal via browser automation.
4
4
 
5
5
  10x-chat uses [Playwright](https://playwright.dev) to automate browser sessions with persisted login profiles. Login once, then send prompts — bundled with file context — from your CLI or AI coding agent.
6
6
 
@@ -12,26 +12,24 @@ Paste this into your [OpenClaw](https://openclaw.ai) chat to install as a skill:
12
12
  https://raw.githubusercontent.com/RealMikeChong/10x-chat/refs/heads/main/skills/10x-chat/SKILL.md
13
13
  ```
14
14
 
15
- ## Install
15
+ ## Quick Start
16
16
 
17
17
  ```bash
18
- npm install -g 10x-chat
19
18
  npx playwright install chromium # one-time browser setup
20
- ```
21
-
22
- ## Quick Start
23
19
 
24
- ```bash
25
20
  # 1. Login to a provider (opens a browser window)
26
- 10x-chat login chatgpt
21
+ npx 10x-chat@latest login chatgpt
27
22
 
28
23
  # 2. Send a prompt
29
- 10x-chat chat -p "Explain this error" --provider chatgpt --file "src/**/*.ts"
24
+ npx 10x-chat@latest chat -p "Explain this error" --provider chatgpt --file "src/**/*.ts"
30
25
 
31
26
  # 3. View session history
32
- 10x-chat status
27
+ npx 10x-chat@latest status
33
28
  ```
34
29
 
30
+ > [!TIP]
31
+ > Use `bunx` (bun.sh) instead of `npx` for faster startup.
32
+
35
33
  ## Commands
36
34
 
37
35
  ### `login <provider>`
@@ -39,10 +37,11 @@ npx playwright install chromium # one-time browser setup
39
37
  Opens a headed browser for you to authenticate. The session persists across runs.
40
38
 
41
39
  ```bash
42
- 10x-chat login chatgpt # Login to ChatGPT
43
- 10x-chat login gemini # Login to Gemini
44
- 10x-chat login claude # Login to Claude
45
- 10x-chat login --status # Check login status for all providers
40
+ npx 10x-chat@latest login chatgpt # Login to ChatGPT
41
+ npx 10x-chat@latest login gemini # Login to Gemini
42
+ npx 10x-chat@latest login claude # Login to Claude
43
+ npx 10x-chat@latest login grok # Login to Grok
44
+ npx 10x-chat@latest login --status # Check login status for all providers
46
45
  ```
47
46
 
48
47
  ### `chat`
@@ -50,17 +49,17 @@ Opens a headed browser for you to authenticate. The session persists across runs
50
49
  Send a prompt to an AI provider via browser automation.
51
50
 
52
51
  ```bash
53
- 10x-chat chat -p "Review this code for bugs" --provider chatgpt --file "src/**/*.ts"
54
- 10x-chat chat -p "Debug this error" --file "logs/error.log"
55
- 10x-chat chat -p "Explain this" --dry-run # Preview bundle without sending
56
- 10x-chat chat -p "Explain this" --copy # Copy bundle to clipboard
57
- 10x-chat chat -p "Long task" --timeout 600000 --headed # 10min timeout, visible browser
52
+ npx 10x-chat@latest chat -p "Review this code for bugs" --provider chatgpt --file "src/**/*.ts"
53
+ npx 10x-chat@latest chat -p "Debug this error" --file "logs/error.log"
54
+ npx 10x-chat@latest chat -p "Explain this" --dry-run # Preview bundle without sending
55
+ npx 10x-chat@latest chat -p "Explain this" --copy # Copy bundle to clipboard
56
+ npx 10x-chat@latest chat -p "Long task" --timeout 600000 --headed # 10min timeout, visible browser
58
57
  ```
59
58
 
60
59
  | Flag | Description |
61
60
  |------|-------------|
62
61
  | `-p, --prompt <text>` | **(required)** The prompt to send |
63
- | `--provider <name>` | Provider: `chatgpt`, `gemini`, `claude` (default: config) |
62
+ | `--provider <name>` | Provider: `chatgpt`, `gemini`, `claude`, `grok` (default: config) |
64
63
  | `--model <name>` | Model to select in the UI |
65
64
  | `-f, --file <paths...>` | Files/globs to bundle as context |
66
65
  | `--copy` | Copy bundle to clipboard instead of sending |
@@ -73,8 +72,8 @@ Send a prompt to an AI provider via browser automation.
73
72
  List recent chat sessions.
74
73
 
75
74
  ```bash
76
- 10x-chat status # Last 24 hours
77
- 10x-chat status --hours 72 # Last 3 days
75
+ npx 10x-chat@latest status # Last 24 hours
76
+ npx 10x-chat@latest status --hours 72 # Last 3 days
78
77
  ```
79
78
 
80
79
  ### `session <id>`
@@ -82,7 +81,7 @@ List recent chat sessions.
82
81
  View details of a specific session.
83
82
 
84
83
  ```bash
85
- 10x-chat session <id> --render # Pretty-print the response
84
+ npx 10x-chat@latest session <id> --render # Pretty-print the response
86
85
  ```
87
86
 
88
87
  ### `config`
@@ -90,10 +89,10 @@ View details of a specific session.
90
89
  View or modify configuration.
91
90
 
92
91
  ```bash
93
- 10x-chat config show
94
- 10x-chat config set provider gemini
95
- 10x-chat config set timeout 600000
96
- 10x-chat config set headless false
92
+ npx 10x-chat@latest config show
93
+ npx 10x-chat@latest config set provider gemini
94
+ npx 10x-chat@latest config set timeout 600000
95
+ npx 10x-chat@latest config set headless false
97
96
  ```
98
97
 
99
98
  ### `skill`
@@ -101,8 +100,8 @@ View or modify configuration.
101
100
  Manage the agent integration skill (for Codex, Claude Code, etc).
102
101
 
103
102
  ```bash
104
- 10x-chat skill install # Install SKILL.md to ~/.codex/skills/
105
- 10x-chat skill show # Display SKILL.md content
103
+ npx 10x-chat@latest skill install # Install SKILL.md to ~/.codex/skills/
104
+ npx 10x-chat@latest skill show # Display SKILL.md content
106
105
  ```
107
106
 
108
107
  ## File Bundling
@@ -110,7 +109,7 @@ Manage the agent integration skill (for Codex, Claude Code, etc).
110
109
  The `--file` flag accepts globs. Files are assembled into a markdown bundle sent as the prompt:
111
110
 
112
111
  ```bash
113
- 10x-chat chat -p "Review these" --file "src/**/*.ts" "!src/**/*.test.ts"
112
+ npx 10x-chat@latest chat -p "Review these" --file "src/**/*.ts" "!src/**/*.test.ts"
114
113
  ```
115
114
 
116
115
  Security-sensitive files (`.env*`, `*.pem`, `*.key`, etc.) are automatically excluded.
@@ -122,7 +121,8 @@ Security-sensitive files (`.env*`, `*.pem`, `*.key`, etc.) are automatically exc
122
121
  ├── profiles/
123
122
  │ ├── chatgpt/ # Playwright persistent browser profile
124
123
  │ ├── gemini/
125
- └── claude/
124
+ ├── claude/
125
+ │ └── grok/
126
126
  ├── sessions/
127
127
  │ └── <uuid>/
128
128
  │ ├── meta.json # Session metadata
@@ -136,7 +136,7 @@ Security-sensitive files (`.env*`, `*.pem`, `*.key`, etc.) are automatically exc
136
136
  10x-chat includes a `SKILL.md` for AI coding agents. Install it with:
137
137
 
138
138
  ```bash
139
- 10x-chat skill install
139
+ npx 10x-chat@latest skill install
140
140
  ```
141
141
 
142
142
  This lets agents like Codex or Claude Code use 10x-chat to query other models for cross-validation, code review, or debugging help.
@@ -1 +1 @@
1
- {"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,eAAO,MAAM,cAAc,EAAE,cAQ5B,CAAC;AAYF,eAAO,MAAM,cAAc,EAAE,eAgH5B,CAAC"}
1
+ {"version":3,"file":"chatgpt.d.ts","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,eAAO,MAAM,cAAc,EAAE,cAQ5B,CAAC;AAYF,eAAO,MAAM,cAAc,EAAE,eAkI5B,CAAC"}
@@ -66,19 +66,37 @@ export const chatgptActions = {
66
66
  async captureResponse(page, opts) {
67
67
  const { timeoutMs, onChunk } = opts;
68
68
  const startTime = Date.now();
69
- // Count existing assistant turns before our submission
70
- const existingTurns = await page.locator(SELECTORS.assistantTurn).count();
71
- // Wait for a new assistant turn to appear using Playwright's locator API
72
- await page.locator(SELECTORS.assistantTurn).nth(existingTurns).waitFor({ timeout: timeoutMs });
73
- // Poll until the response stops changing (streaming complete)
69
+ const initialUrl = page.url();
70
+ // ChatGPT navigates from / to /c/<id> after sending a new message.
71
+ // This resets the DOM, so we cannot rely on a pre-counted nth() index.
72
+ // Instead, we poll for any assistant turn to appear and stabilize.
73
+ // Phase 1: Wait for at least one assistant turn to appear
74
+ const waitForTurn = async () => {
75
+ while (Date.now() - startTime < timeoutMs) {
76
+ const count = await page.locator(SELECTORS.assistantTurn).count();
77
+ if (count > 0) {
78
+ // If URL changed (new conversation), any turn is "ours"
79
+ if (page.url() !== initialUrl)
80
+ return;
81
+ // If same URL, ensure the response is fresh (not a cached old one)
82
+ return;
83
+ }
84
+ await page.waitForTimeout(500);
85
+ }
86
+ throw new Error('Timed out waiting for ChatGPT assistant response');
87
+ };
88
+ await waitForTurn();
89
+ // Phase 2: Poll until the response stops changing and streaming is complete
74
90
  let lastText = '';
75
91
  let stableCount = 0;
76
92
  const STABLE_THRESHOLD = 3;
77
93
  const POLL_INTERVAL = 1000;
78
94
  while (Date.now() - startTime < timeoutMs) {
95
+ // If stop button is visible, streaming is still in progress — reset stability
96
+ const isStreaming = await page.$(SELECTORS.stopButton);
79
97
  const lastTurn = page.locator(SELECTORS.assistantTurn).last();
80
98
  const currentText = (await lastTurn.textContent())?.trim() ?? '';
81
- if (currentText === lastText) {
99
+ if (currentText === lastText && !isStreaming) {
82
100
  stableCount++;
83
101
  if (stableCount >= STABLE_THRESHOLD && currentText.length > 0) {
84
102
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/providers/chatgpt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAa1D,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAOxD;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAElE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAa1D,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAMxD;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAElE"}
@@ -10,12 +10,11 @@ const PROVIDERS = {
10
10
  };
11
11
  /** Get a provider by name, throws if not found. */
12
12
  export function getProvider(name) {
13
- const provider = PROVIDERS[name];
14
13
  if (!Object.hasOwn(PROVIDERS, name)) {
15
14
  const available = Object.keys(PROVIDERS).join(', ');
16
15
  throw new Error(`Unknown provider "${name}". Available: ${available}`);
17
16
  }
18
- return provider;
17
+ return PROVIDERS[name];
19
18
  }
20
19
  /** List all registered provider names. */
21
20
  export function listProviders() {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,SAAS,GAAmC;IAChD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;IAC5D,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;CACpD,CAAC;AAEF,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAClD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,SAAS,GAAmC;IAChD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;IAC5D,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;IACzD,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;CACpD,CAAC;AAEF,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAClD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "10x-chat",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "CLI to chat with web AI agents (ChatGPT, Gemini, Claude) via browser automation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: 10x-chat
3
- description: Chat with web AI agents (ChatGPT, Gemini, Claude) via browser automation. Use when stuck, need cross-validation, or want a second-model review.
3
+ description: Chat with web AI agents (ChatGPT, Gemini, Claude, Grok) via browser automation. Use when stuck, need cross-validation, or want a second-model review.
4
4
  ---
5
5
 
6
6
  # 10x-chat — AI Agent Skill
7
7
 
8
- Use 10x-chat to send prompts to web-based AI agents (ChatGPT, Gemini, Claude) via automated browser sessions. The browser uses a persisted Chrome profile, so the user only needs to login once.
8
+ Use 10x-chat to send prompts to web-based AI agents (ChatGPT, Gemini, Claude, Grok) via automated browser sessions. The browser uses a persisted Chrome profile, so the user only needs to login once.
9
9
 
10
10
  ## When to use
11
11
 
@@ -20,33 +20,33 @@ use `bunx` (bun.sh) instead `npx` if you prefer speed.
20
20
 
21
21
  ```bash
22
22
  # Login (one-time per provider — opens browser for user to authenticate)
23
- npx 10x-chat login chatgpt
24
- npx 10x-chat login gemini
25
- npx 10x-chat login claude
26
- npx 10x-chat login grok
23
+ npx 10x-chat@latest login chatgpt
24
+ npx 10x-chat@latest login gemini
25
+ npx 10x-chat@latest login claude
26
+ npx 10x-chat@latest login grok
27
27
 
28
28
  # Chat with a single provider
29
- npx 10x-chat chat -p "Review this code for bugs" --provider chatgpt --file "src/**/*.ts"
29
+ npx 10x-chat@latest chat -p "Review this code for bugs" --provider chatgpt --file "src/**/*.ts"
30
30
 
31
31
  # Multi-provider fan-out (coming v0.2)
32
- # npx 10x-chat chat -p "Review this PR" --providers chatgpt,gemini,claude --file "src/**"
32
+ # npx 10x-chat@latest chat -p "Review this PR" --providers chatgpt,gemini,claude --file "src/**"
33
33
 
34
34
  # Dry run (preview the prompt bundle without sending)
35
- npx 10x-chat chat --dry-run -p "Debug this error" --file src/
35
+ npx 10x-chat@latest chat --dry-run -p "Debug this error" --file src/
36
36
 
37
37
  # Copy bundle to clipboard (manual paste fallback)
38
- npx 10x-chat chat --copy -p "Explain this" --file "src/**"
38
+ npx 10x-chat@latest chat --copy -p "Explain this" --file "src/**"
39
39
 
40
40
  # Check recent sessions
41
- npx 10x-chat status
41
+ npx 10x-chat@latest status
42
42
 
43
43
  # View a session's response
44
- npx 10x-chat session <id> --render
44
+ npx 10x-chat@latest session <id> --render
45
45
  ```
46
46
 
47
47
  ## Tips
48
48
 
49
- - **Login first**: Run `npx 10x-chat login <provider>` once per provider. The session persists.
49
+ - **Login first**: Run `npx 10x-chat@latest login <provider>` once per provider. The session persists.
50
50
  - **Keep file sets small**: fewer files + a focused prompt = better answers.
51
51
  - **Don't send secrets**: exclude `.env`, key files, auth tokens from `--file` patterns.
52
52
  - **Use `--dry-run`** to preview what will be sent before committing to a run.