@crewx/chromex 0.1.0-rc.44 → 0.1.0-rc.46
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/cli.js +20 -20
- package/dist/src/engine.js +41 -41
- package/dist/src/engine.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -50,41 +50,41 @@ try {
|
|
|
50
50
|
catch { }
|
|
51
51
|
function printUsage() {
|
|
52
52
|
console.log(`
|
|
53
|
-
@crewx/chromex@${PKG_VERSION} - Chrome X
|
|
53
|
+
@crewx/chromex@${PKG_VERSION} - Chrome X browser tools CLI
|
|
54
54
|
|
|
55
55
|
Usage:
|
|
56
56
|
chromex <command> [options]
|
|
57
57
|
|
|
58
58
|
Commands:
|
|
59
59
|
chromex usage Show detailed guide (SKILL.md)
|
|
60
|
-
chromex connect Chrome X
|
|
61
|
-
chromex status
|
|
62
|
-
chromex disconnect
|
|
63
|
-
chromex read
|
|
64
|
-
chromex screenshot
|
|
65
|
-
chromex tabs
|
|
60
|
+
chromex connect Request Chrome X browser access approval
|
|
61
|
+
chromex status Show current session status
|
|
62
|
+
chromex disconnect End the current session
|
|
63
|
+
chromex read Read tab text (page_read_text)
|
|
64
|
+
chromex screenshot Capture a tab screenshot
|
|
65
|
+
chromex tabs List connected tabs
|
|
66
66
|
|
|
67
67
|
Options:
|
|
68
68
|
connect:
|
|
69
|
-
--scope=all|current
|
|
70
|
-
--expires=30d|90d|1y
|
|
71
|
-
--name=<name>
|
|
72
|
-
--endpoint=<url>
|
|
73
|
-
--agent=<id>
|
|
69
|
+
--scope=all|current Scope (default: all)
|
|
70
|
+
--expires=30d|90d|1y Token expiration (default: 90d)
|
|
71
|
+
--name=<name> Token name
|
|
72
|
+
--endpoint=<url> Server URL (default: http://localhost:8150)
|
|
73
|
+
--agent=<id> Agent ID (default: CREWX_AGENT_ID environment variable)
|
|
74
74
|
|
|
75
75
|
read:
|
|
76
|
-
--tab=<tabId>
|
|
77
|
-
--step=1|2|3
|
|
78
|
-
--selector=<css> CSS
|
|
76
|
+
--tab=<tabId> Target tab ID
|
|
77
|
+
--step=1|2|3 Extraction step (default: 1)
|
|
78
|
+
--selector=<css> CSS selector
|
|
79
79
|
|
|
80
80
|
screenshot:
|
|
81
|
-
--tab=<tabId>
|
|
82
|
-
--output=<path>
|
|
81
|
+
--tab=<tabId> Target tab ID
|
|
82
|
+
--output=<path> Output path
|
|
83
83
|
|
|
84
84
|
Environment variables:
|
|
85
|
-
CREWX_AGENT_ID
|
|
86
|
-
CREWX_ENDPOINT
|
|
87
|
-
CREWX_API_TOKEN
|
|
85
|
+
CREWX_AGENT_ID Agent ID
|
|
86
|
+
CREWX_ENDPOINT Default server URL
|
|
87
|
+
CREWX_API_TOKEN Server auth token (for remote server access)
|
|
88
88
|
`);
|
|
89
89
|
}
|
|
90
90
|
function showDetailedUsage() {
|
package/dist/src/engine.js
CHANGED
|
@@ -57,21 +57,21 @@ class ChromexEngine {
|
|
|
57
57
|
const existing = cache[agentId];
|
|
58
58
|
if (existing) {
|
|
59
59
|
if (existing.endpoint !== endpoint) {
|
|
60
|
-
console.warn(
|
|
60
|
+
console.warn(`Warning: saved endpoint (${existing.endpoint}) differs from the current endpoint (${endpoint}); reconnecting`);
|
|
61
61
|
}
|
|
62
62
|
else {
|
|
63
63
|
const expiresAt = new Date(existing.expiresAt).getTime();
|
|
64
64
|
if (existing.mcpSessionId && expiresAt - Date.now() > TOKEN_BUFFER_MS) {
|
|
65
|
-
console.log(
|
|
65
|
+
console.log(`Reusing existing token (expires: ${existing.expiresAt})`);
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
const scope = opts.scope === 'current' ? 'current' : 'all_tabs';
|
|
71
71
|
const expiresIn = opts.expires ?? '90d';
|
|
72
|
-
console.log(`Chrome X
|
|
73
|
-
console.log(
|
|
74
|
-
console.log(`
|
|
72
|
+
console.log(`Requesting Chrome X browser access... (waiting up to 60 seconds)`);
|
|
73
|
+
console.log(`Agent: ${agentId} | Scope: ${scope} | Expires: ${expiresIn}`);
|
|
74
|
+
console.log(`Click Allow in the Chrome popup.`);
|
|
75
75
|
const body = { agentId, scope, expiresIn };
|
|
76
76
|
if (opts.name)
|
|
77
77
|
body['tokenName'] = opts.name;
|
|
@@ -90,37 +90,37 @@ class ChromexEngine {
|
|
|
90
90
|
}
|
|
91
91
|
catch (err) {
|
|
92
92
|
const msg = err instanceof Error ? err.message : String(err);
|
|
93
|
-
throw new Error(
|
|
93
|
+
throw new Error(`Server connection failed: ${msg}\nCheck that the server is running (${endpoint})`);
|
|
94
94
|
}
|
|
95
95
|
if (!res.ok) {
|
|
96
96
|
const data = await res.json().catch(() => ({}));
|
|
97
97
|
const reason = data['reason'] ?? '';
|
|
98
98
|
if (res.status === 403 && reason === 'user_denied') {
|
|
99
|
-
throw new Error('
|
|
99
|
+
throw new Error('Connection denied: the user rejected browser access');
|
|
100
100
|
}
|
|
101
101
|
if (res.status === 403 && reason === 'restricted_tab') {
|
|
102
|
-
throw new Error('Chrome X
|
|
102
|
+
throw new Error('Chrome X connection denied: the active tab is a restricted page such as chrome://, an extension page, about:, or data:. Select a regular web page tab and try again.');
|
|
103
103
|
}
|
|
104
104
|
if (res.status === 403 && reason === 'content_script_not_connected') {
|
|
105
|
-
throw new Error('Chrome X
|
|
105
|
+
throw new Error('Chrome X connection denied: no readable page channel is connected. Open or reload a regular web page and try again.');
|
|
106
106
|
}
|
|
107
107
|
if (res.status === 403 && reason === 'no_browser_tab_available') {
|
|
108
|
-
throw new Error('Chrome X
|
|
108
|
+
throw new Error('Chrome X connection denied: no browser tab is available for the approval popup. Open a regular web page tab and try again.');
|
|
109
109
|
}
|
|
110
110
|
if (res.status === 403 && reason === 'invalid_scope') {
|
|
111
|
-
throw new Error('Chrome X
|
|
111
|
+
throw new Error('Chrome X connection denied: the requested scope is invalid.');
|
|
112
112
|
}
|
|
113
113
|
if (res.status === 408 || reason === 'timeout') {
|
|
114
|
-
throw new Error('
|
|
114
|
+
throw new Error('Connection timed out: no response within 60 seconds');
|
|
115
115
|
}
|
|
116
116
|
if (res.status === 503 || reason === 'no_browser_connected') {
|
|
117
117
|
throw new Error([
|
|
118
|
-
'Chrome X
|
|
119
|
-
'
|
|
120
|
-
|
|
118
|
+
'Chrome X is not connected: no browser MCP session was found.',
|
|
119
|
+
'Open the CrewX extension side panel in Chrome, confirm MCP status is connected, then try again.',
|
|
120
|
+
`Server: ${endpoint}`,
|
|
121
121
|
].join('\n'));
|
|
122
122
|
}
|
|
123
|
-
throw new Error(`
|
|
123
|
+
throw new Error(`Negotiation failed (${res.status}): ${JSON.stringify(data)}`);
|
|
124
124
|
}
|
|
125
125
|
const result = await res.json();
|
|
126
126
|
cache[agentId] = {
|
|
@@ -133,16 +133,16 @@ class ChromexEngine {
|
|
|
133
133
|
mcpSessionId: result.mcpSessionId,
|
|
134
134
|
};
|
|
135
135
|
this.saveTokenCache(cache);
|
|
136
|
-
console.log(
|
|
137
|
-
console.log(`
|
|
138
|
-
console.log(`
|
|
139
|
-
console.log(`
|
|
136
|
+
console.log(`Connection successful.`);
|
|
137
|
+
console.log(` Expires: ${result.expiresAt}`);
|
|
138
|
+
console.log(` Scope: ${result.scope}`);
|
|
139
|
+
console.log(` Token ID: ${result.jti}`);
|
|
140
140
|
}
|
|
141
141
|
async call(tool, args) {
|
|
142
142
|
const agentId = this.agentId;
|
|
143
143
|
const cached = this.loadToken(agentId);
|
|
144
144
|
if (!cached) {
|
|
145
|
-
throw new Error('
|
|
145
|
+
throw new Error('No token found. Run: npx crewx chromex connect');
|
|
146
146
|
}
|
|
147
147
|
let res;
|
|
148
148
|
try {
|
|
@@ -166,21 +166,21 @@ class ChromexEngine {
|
|
|
166
166
|
}
|
|
167
167
|
catch (err) {
|
|
168
168
|
const msg = err instanceof Error ? err.message : String(err);
|
|
169
|
-
throw new Error(
|
|
169
|
+
throw new Error(`Server connection failed: ${msg}`);
|
|
170
170
|
}
|
|
171
171
|
if (!res.ok) {
|
|
172
172
|
const data = await res.json().catch(() => ({}));
|
|
173
173
|
if (res.status === 401) {
|
|
174
|
-
throw new Error('
|
|
174
|
+
throw new Error('Token expired. Run: npx crewx chromex connect');
|
|
175
175
|
}
|
|
176
176
|
if (res.status === 403) {
|
|
177
|
-
throw new Error(
|
|
177
|
+
throw new Error(`Access denied (403): ${JSON.stringify(data)}`);
|
|
178
178
|
}
|
|
179
|
-
throw new Error(`MCP tools/call
|
|
179
|
+
throw new Error(`MCP tools/call failed (${res.status}): ${JSON.stringify(data)}`);
|
|
180
180
|
}
|
|
181
181
|
const payload = await res.json();
|
|
182
182
|
if (payload.error) {
|
|
183
|
-
throw new Error(`MCP tools/call
|
|
183
|
+
throw new Error(`MCP tools/call error (${payload.error.code ?? 'unknown'}): ${payload.error.message ?? JSON.stringify(payload.error)}`);
|
|
184
184
|
}
|
|
185
185
|
console.log(JSON.stringify(payload.result ?? payload, null, 2));
|
|
186
186
|
}
|
|
@@ -188,31 +188,31 @@ class ChromexEngine {
|
|
|
188
188
|
const agentId = this.agentId;
|
|
189
189
|
const cached = this.loadToken(agentId);
|
|
190
190
|
if (!cached) {
|
|
191
|
-
console.log('
|
|
191
|
+
console.log('No connected session. Run: npx crewx chromex connect');
|
|
192
192
|
return;
|
|
193
193
|
}
|
|
194
194
|
const expiresAt = new Date(cached.expiresAt);
|
|
195
195
|
const now = Date.now();
|
|
196
196
|
const diffMs = expiresAt.getTime() - now;
|
|
197
197
|
if (diffMs <= 0) {
|
|
198
|
-
console.log(
|
|
199
|
-
console.log('npx crewx chromex connect
|
|
198
|
+
console.log(`Session expired (${cached.expiresAt})`);
|
|
199
|
+
console.log('Reconnect with: npx crewx chromex connect');
|
|
200
200
|
return;
|
|
201
201
|
}
|
|
202
202
|
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
203
203
|
const diffHours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
204
|
-
const remaining = diffDays > 0 ? `${diffDays}
|
|
205
|
-
console.log(
|
|
206
|
-
console.log(
|
|
207
|
-
console.log(
|
|
208
|
-
console.log(
|
|
209
|
-
console.log(
|
|
204
|
+
const remaining = diffDays > 0 ? `${diffDays}d ${diffHours}h` : `${diffHours}h`;
|
|
205
|
+
console.log(`Agent: ${agentId}`);
|
|
206
|
+
console.log(`Scope: ${cached.scope}`);
|
|
207
|
+
console.log(`Expires: ${cached.expiresAt} (${remaining} remaining)`);
|
|
208
|
+
console.log(`Token ID: ${cached.jti}`);
|
|
209
|
+
console.log(`Server: ${cached.endpoint}`);
|
|
210
210
|
}
|
|
211
211
|
async disconnect() {
|
|
212
212
|
const agentId = this.agentId;
|
|
213
213
|
const cached = this.loadToken(agentId);
|
|
214
214
|
if (!cached) {
|
|
215
|
-
console.log('
|
|
215
|
+
console.log('No connected session');
|
|
216
216
|
return;
|
|
217
217
|
}
|
|
218
218
|
try {
|
|
@@ -226,16 +226,16 @@ class ChromexEngine {
|
|
|
226
226
|
signal: AbortSignal.timeout(10000),
|
|
227
227
|
});
|
|
228
228
|
if (!res.ok) {
|
|
229
|
-
console.warn(
|
|
229
|
+
console.warn(`Server revoke failed (${res.status}); deleting the local token only`);
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
catch {
|
|
233
|
-
console.warn('
|
|
233
|
+
console.warn('Server connection failed; deleting the local token only');
|
|
234
234
|
}
|
|
235
235
|
const cache = this.loadTokenCache();
|
|
236
236
|
delete cache[agentId];
|
|
237
237
|
this.saveTokenCache(cache);
|
|
238
|
-
console.log('
|
|
238
|
+
console.log('Disconnected');
|
|
239
239
|
}
|
|
240
240
|
loadToken(agentId) {
|
|
241
241
|
const cache = this.loadTokenCache();
|
|
@@ -247,7 +247,7 @@ class ChromexEngine {
|
|
|
247
247
|
}
|
|
248
248
|
const tabId = args['tabId'];
|
|
249
249
|
if (typeof tabId !== 'number' || Number.isNaN(tabId)) {
|
|
250
|
-
throw new Error(`${tool}
|
|
250
|
+
throw new Error(`${tool} requires --tab=<tabId>`);
|
|
251
251
|
}
|
|
252
252
|
const { tabId: _tabId, ...toolArgs } = args;
|
|
253
253
|
return {
|
|
@@ -267,7 +267,7 @@ class ChromexEngine {
|
|
|
267
267
|
return JSON.parse(content);
|
|
268
268
|
}
|
|
269
269
|
catch {
|
|
270
|
-
console.error('chromex-tokens.json
|
|
270
|
+
console.error('Failed to parse chromex-tokens.json. Reconnect with: npx crewx chromex connect');
|
|
271
271
|
return {};
|
|
272
272
|
}
|
|
273
273
|
}
|
package/dist/src/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAG7B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAElF,MAAM,eAAe,GAAG,KAAM,CAAC;AAE/B,MAAa,aAAa;IAGxB,YAAY,SAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,gBAAgB,CAAC;IACjD,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC;IACpD,CAAC;IAED,IAAY,eAAe;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC;QAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|