1688-cli 0.1.31 → 0.1.34

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.
Files changed (62) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +42 -0
  3. package/dist/cli.js +32 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/cart-add.js +8 -4
  6. package/dist/commands/cart-add.js.map +1 -1
  7. package/dist/commands/cart-list.js +6 -2
  8. package/dist/commands/cart-list.js.map +1 -1
  9. package/dist/commands/cart-remove.js +8 -4
  10. package/dist/commands/cart-remove.js.map +1 -1
  11. package/dist/commands/checkout-confirm.js +28 -17
  12. package/dist/commands/checkout-confirm.js.map +1 -1
  13. package/dist/commands/checkout-prepare.js +8 -4
  14. package/dist/commands/checkout-prepare.js.map +1 -1
  15. package/dist/commands/doctor.js +80 -1
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/image-search.js +5 -3
  18. package/dist/commands/image-search.js.map +1 -1
  19. package/dist/commands/offer.js +5 -1
  20. package/dist/commands/offer.js.map +1 -1
  21. package/dist/commands/order-get.js +6 -2
  22. package/dist/commands/order-get.js.map +1 -1
  23. package/dist/commands/order-list.js +4 -0
  24. package/dist/commands/order-list.js.map +1 -1
  25. package/dist/commands/order-logistics.js +5 -1
  26. package/dist/commands/order-logistics.js.map +1 -1
  27. package/dist/commands/search.js +20 -4
  28. package/dist/commands/search.js.map +1 -1
  29. package/dist/commands/seller-chat.js +7 -3
  30. package/dist/commands/seller-chat.js.map +1 -1
  31. package/dist/commands/seller-inquire.js +1 -1
  32. package/dist/commands/seller-inquire.js.map +1 -1
  33. package/dist/commands/seller-messages.js +8 -1
  34. package/dist/commands/seller-messages.js.map +1 -1
  35. package/dist/commands/similar.js +4 -0
  36. package/dist/commands/similar.js.map +1 -1
  37. package/dist/commands/skill.js +297 -0
  38. package/dist/commands/skill.js.map +1 -0
  39. package/dist/daemon/client.js +22 -11
  40. package/dist/daemon/client.js.map +1 -1
  41. package/dist/daemon/manager.js +64 -8
  42. package/dist/daemon/manager.js.map +1 -1
  43. package/dist/daemon/protocol.js.map +1 -1
  44. package/dist/daemon/server.js +96 -3
  45. package/dist/daemon/server.js.map +1 -1
  46. package/dist/io/errors.js +7 -1
  47. package/dist/io/errors.js.map +1 -1
  48. package/dist/session/artifacts.js +152 -0
  49. package/dist/session/artifacts.js.map +1 -0
  50. package/dist/session/context.js +8 -1
  51. package/dist/session/context.js.map +1 -1
  52. package/dist/session/dispatch.js +15 -4
  53. package/dist/session/dispatch.js.map +1 -1
  54. package/dist/session/page-state.js +78 -0
  55. package/dist/session/page-state.js.map +1 -0
  56. package/dist/session/paths.js +6 -0
  57. package/dist/session/paths.js.map +1 -1
  58. package/dist/session/recovery.js +422 -0
  59. package/dist/session/recovery.js.map +1 -0
  60. package/dist/session/shared.js +37 -2
  61. package/dist/session/shared.js.map +1 -1
  62. package/package.json +1 -1
@@ -0,0 +1,422 @@
1
+ import { CliError } from '../io/errors.js';
2
+ import { info } from '../io/output.js';
3
+ import { captureFailureArtifact, } from './artifacts.js';
4
+ import { detectPageState } from './page-state.js';
5
+ const MAX_TRACE_ITEMS = 80;
6
+ function pickPage(ctx) {
7
+ const pages = ctx.pages().filter((p) => !p.isClosed());
8
+ return pages.at(-1) ?? null;
9
+ }
10
+ function errorMessage(error) {
11
+ return error instanceof Error ? error.message : String(error);
12
+ }
13
+ function errorCode(error) {
14
+ if (error instanceof CliError)
15
+ return error.code;
16
+ const maybe = error;
17
+ return typeof maybe?.code === 'string' ? maybe.code : undefined;
18
+ }
19
+ function pushBounded(arr, item) {
20
+ arr.push(item);
21
+ if (arr.length > MAX_TRACE_ITEMS)
22
+ arr.shift();
23
+ }
24
+ function requestResourceType(req) {
25
+ try {
26
+ return req.resourceType();
27
+ }
28
+ catch {
29
+ return 'unknown';
30
+ }
31
+ }
32
+ function requestMethod(req) {
33
+ try {
34
+ return req.method();
35
+ }
36
+ catch {
37
+ return 'GET';
38
+ }
39
+ }
40
+ function requestUrl(req) {
41
+ try {
42
+ return req.url();
43
+ }
44
+ catch {
45
+ return '';
46
+ }
47
+ }
48
+ function consoleLocation(msg) {
49
+ try {
50
+ return msg.location();
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ }
56
+ function attachTrace(ctx) {
57
+ const trace = {
58
+ console: [],
59
+ pageErrors: [],
60
+ recent: [],
61
+ failed: [],
62
+ httpErrors: [],
63
+ detach: () => { },
64
+ };
65
+ const pages = new Set();
66
+ const detachPage = new Map();
67
+ const attachPage = (page) => {
68
+ if (pages.has(page))
69
+ return;
70
+ pages.add(page);
71
+ const onConsole = (msg) => {
72
+ if (!['error', 'warning'].includes(msg.type()))
73
+ return;
74
+ pushBounded(trace.console, {
75
+ at: new Date().toISOString(),
76
+ type: msg.type(),
77
+ text: msg.text(),
78
+ location: consoleLocation(msg),
79
+ });
80
+ };
81
+ const onPageError = (err) => {
82
+ pushBounded(trace.pageErrors, {
83
+ at: new Date().toISOString(),
84
+ message: err.message,
85
+ stack: err.stack,
86
+ });
87
+ };
88
+ const onRequest = (req) => {
89
+ pushBounded(trace.recent, {
90
+ at: new Date().toISOString(),
91
+ method: requestMethod(req),
92
+ url: requestUrl(req),
93
+ resourceType: requestResourceType(req),
94
+ });
95
+ };
96
+ const onRequestFailed = (req) => {
97
+ pushBounded(trace.failed, {
98
+ at: new Date().toISOString(),
99
+ method: requestMethod(req),
100
+ url: requestUrl(req),
101
+ resourceType: requestResourceType(req),
102
+ failure: req.failure()?.errorText,
103
+ });
104
+ };
105
+ const onResponse = (resp) => {
106
+ const status = resp.status();
107
+ if (status < 400)
108
+ return;
109
+ const req = resp.request();
110
+ pushBounded(trace.httpErrors, {
111
+ at: new Date().toISOString(),
112
+ status,
113
+ method: requestMethod(req),
114
+ url: resp.url(),
115
+ resourceType: requestResourceType(req),
116
+ });
117
+ };
118
+ page.on('console', onConsole);
119
+ page.on('pageerror', onPageError);
120
+ page.on('request', onRequest);
121
+ page.on('requestfailed', onRequestFailed);
122
+ page.on('response', onResponse);
123
+ detachPage.set(page, () => {
124
+ page.off('console', onConsole);
125
+ page.off('pageerror', onPageError);
126
+ page.off('request', onRequest);
127
+ page.off('requestfailed', onRequestFailed);
128
+ page.off('response', onResponse);
129
+ });
130
+ };
131
+ for (const page of ctx.pages())
132
+ attachPage(page);
133
+ ctx.on('page', attachPage);
134
+ trace.detach = () => {
135
+ ctx.off('page', attachPage);
136
+ for (const detach of detachPage.values())
137
+ detach();
138
+ detachPage.clear();
139
+ };
140
+ return trace;
141
+ }
142
+ function snapshotTrace(trace) {
143
+ return {
144
+ console: [...trace.console],
145
+ pageErrors: [...trace.pageErrors],
146
+ network: {
147
+ recent: [...trace.recent],
148
+ failed: [...trace.failed],
149
+ httpErrors: [...trace.httpErrors],
150
+ },
151
+ };
152
+ }
153
+ export function classifyRecoveryFailure(signals) {
154
+ const { message, code, pageState, trace } = signals;
155
+ const msg = `${code ?? ''}\n${message}`;
156
+ if (pageState?.kind === 'not_logged_in' || code === 'NOT_LOGGED_IN') {
157
+ return 'not_logged_in';
158
+ }
159
+ if (pageState?.kind === 'risk_challenge' || code === 'RISK_CONTROL') {
160
+ return 'risk_challenge';
161
+ }
162
+ if (pageState?.kind === 'rate_limited')
163
+ return 'rate_limited';
164
+ if (/Target page, context or browser has been closed|Browser closed|Target closed|Context closed|page crash/i.test(msg)) {
165
+ return 'browser_context_broken';
166
+ }
167
+ if (/ECONNRESET|ENOTFOUND|ERR_(?:TIMED_OUT|CONNECTION|INTERNET|NETWORK|NAME)|net::|NETWORK_ERROR/i.test(msg)) {
168
+ return 'network_error';
169
+ }
170
+ if (/429|403|访问频繁|请求频繁|操作频繁|稍后再试|系统繁忙/i.test(msg)) {
171
+ return 'rate_limited';
172
+ }
173
+ if (/Timeout .*navigation|Navigation timeout|waiting for .*navigation|waitForLoadState/i.test(msg)) {
174
+ return 'navigation_timeout';
175
+ }
176
+ if (/not visible|not enabled|does not receive pointer events|intercepts pointer events|element is outside|Element is not attached/i.test(msg)) {
177
+ return 'element_blocked';
178
+ }
179
+ if (/locator|selector|waiting for .*visible|No .* found|not found|Could not (?:find|locate).*element|element.*missing/i.test(msg)) {
180
+ return 'element_missing';
181
+ }
182
+ if (trace.network.httpErrors.some((r) => r.status === 429))
183
+ return 'rate_limited';
184
+ if (trace.network.failed.length >= 3 || trace.network.httpErrors.length >= 5) {
185
+ return 'network_error';
186
+ }
187
+ if (pageState?.kind === 'normal_1688_page' && /NO_RESULTS|UPLOAD_FAILED|parse|structure|expected/i.test(msg)) {
188
+ return 'site_changed';
189
+ }
190
+ return 'unknown';
191
+ }
192
+ export function recoveryDecisionFor(kind, headed) {
193
+ switch (kind) {
194
+ case 'not_logged_in':
195
+ return {
196
+ failureKind: kind,
197
+ action: 'pause_for_manual_login',
198
+ retryable: false,
199
+ maxRetries: 0,
200
+ cooldownMs: 0,
201
+ exitCode: 3,
202
+ code: 'NOT_LOGGED_IN',
203
+ message: 'Session expired. Run `1688 login`.',
204
+ recoverHint: 'Session expired. Run `1688 login` and retry.',
205
+ };
206
+ case 'risk_challenge':
207
+ return {
208
+ failureKind: kind,
209
+ action: 'pause_for_manual_challenge',
210
+ retryable: false,
211
+ maxRetries: 0,
212
+ cooldownMs: headed ? 0 : 5 * 60_000,
213
+ exitCode: 4,
214
+ code: 'RISK_CONTROL',
215
+ message: headed
216
+ ? 'Slider verification not solved in time. Try again with `--headed`.'
217
+ : 'Aliyun risk control triggered. Run once with `--headed` to solve it manually.',
218
+ recoverHint: '1688 is showing a verification challenge. Retry once with `--headed` and complete the manual check.',
219
+ };
220
+ case 'rate_limited':
221
+ return {
222
+ failureKind: kind,
223
+ action: 'backoff',
224
+ retryable: true,
225
+ maxRetries: 1,
226
+ cooldownMs: 60_000 + Math.floor(Math.random() * 30_000),
227
+ exitCode: 9,
228
+ code: 'RATE_LIMITED',
229
+ message: '1688 is rate-limiting this session. Wait a few minutes, then retry at a slower pace.',
230
+ recoverHint: '1688 is rate-limiting this session. Wait a few minutes, then retry at a slower pace.',
231
+ };
232
+ case 'element_missing':
233
+ return {
234
+ failureKind: kind,
235
+ action: 'retry_after_resnapshot',
236
+ retryable: true,
237
+ maxRetries: 1,
238
+ cooldownMs: 1000,
239
+ exitCode: 1,
240
+ code: 'ELEMENT_MISSING',
241
+ message: 'Expected page element was not found.',
242
+ };
243
+ case 'element_blocked':
244
+ return {
245
+ failureKind: kind,
246
+ action: 'dismiss_overlay_and_retry',
247
+ retryable: true,
248
+ maxRetries: 1,
249
+ cooldownMs: 1000,
250
+ exitCode: 1,
251
+ code: 'ELEMENT_BLOCKED',
252
+ message: 'Expected page element was present but not clickable.',
253
+ };
254
+ case 'navigation_timeout':
255
+ return {
256
+ failureKind: kind,
257
+ action: 'wait_for_business_signal',
258
+ retryable: true,
259
+ maxRetries: 1,
260
+ cooldownMs: 1500,
261
+ exitCode: 9,
262
+ code: 'NAVIGATION_TIMEOUT',
263
+ message: 'Page navigation timed out before the expected business signal appeared.',
264
+ };
265
+ case 'page_unstable':
266
+ return {
267
+ failureKind: kind,
268
+ action: 'stabilize_and_retry',
269
+ retryable: true,
270
+ maxRetries: 1,
271
+ cooldownMs: 1500,
272
+ exitCode: 1,
273
+ code: 'PAGE_UNSTABLE',
274
+ message: 'The page did not become stable enough to operate safely.',
275
+ };
276
+ case 'browser_context_broken':
277
+ return {
278
+ failureKind: kind,
279
+ action: 'recreate_context',
280
+ retryable: true,
281
+ maxRetries: 1,
282
+ cooldownMs: 0,
283
+ exitCode: 130,
284
+ code: 'BROWSER_CONTEXT_BROKEN',
285
+ message: 'Browser context closed or crashed during the operation.',
286
+ };
287
+ case 'network_error':
288
+ return {
289
+ failureKind: kind,
290
+ action: 'retry_after_network_backoff',
291
+ retryable: true,
292
+ maxRetries: 1,
293
+ cooldownMs: 3000,
294
+ exitCode: 9,
295
+ code: 'NETWORK_ERROR',
296
+ message: 'Network error while operating 1688.',
297
+ };
298
+ case 'site_changed':
299
+ return {
300
+ failureKind: kind,
301
+ action: 'fail_with_artifacts',
302
+ retryable: false,
303
+ maxRetries: 0,
304
+ cooldownMs: 0,
305
+ exitCode: 1,
306
+ code: 'SITE_CHANGED',
307
+ message: '1688 page structure may have changed. Inspect the saved artifacts and update the command.',
308
+ };
309
+ case 'unknown':
310
+ return {
311
+ failureKind: kind,
312
+ action: 'retry_once_then_fail',
313
+ retryable: true,
314
+ maxRetries: 1,
315
+ cooldownMs: 1000,
316
+ exitCode: 1,
317
+ code: 'UNKNOWN_RECOVERY_FAILURE',
318
+ message: '1688 operation failed for an unknown reason.',
319
+ };
320
+ }
321
+ }
322
+ async function wait(ms) {
323
+ if (ms <= 0)
324
+ return;
325
+ await new Promise((r) => setTimeout(r, ms));
326
+ }
327
+ async function runRecoveryAction(decision, page) {
328
+ switch (decision.action) {
329
+ case 'dismiss_overlay_and_retry':
330
+ if (page && !page.isClosed()) {
331
+ await page.keyboard.press('Escape').catch(() => { });
332
+ await wait(decision.cooldownMs);
333
+ }
334
+ return;
335
+ case 'backoff':
336
+ info(`1688 rate limit detected; backing off for ${Math.round(decision.cooldownMs / 1000)}s before one retry...`);
337
+ await wait(decision.cooldownMs);
338
+ return;
339
+ case 'retry_after_network_backoff':
340
+ case 'retry_after_resnapshot':
341
+ case 'wait_for_business_signal':
342
+ case 'stabilize_and_retry':
343
+ case 'retry_once_then_fail':
344
+ await wait(decision.cooldownMs);
345
+ return;
346
+ default:
347
+ return;
348
+ }
349
+ }
350
+ function recoveryDetails(decision, artifactDetails) {
351
+ return {
352
+ ...artifactDetails,
353
+ category: artifactDetails.category ?? decision.failureKind,
354
+ failureKind: decision.failureKind,
355
+ recoveryAction: decision.action,
356
+ recoverHint: artifactDetails.recoverHint ?? decision.recoverHint,
357
+ retryable: false,
358
+ };
359
+ }
360
+ export async function withRecovery(ctx, meta, operation, options = {}) {
361
+ let lastError = null;
362
+ const configuredRetries = options.maxRetries ?? 1;
363
+ for (let attempt = 0; attempt <= configuredRetries; attempt++) {
364
+ const trace = attachTrace(ctx);
365
+ try {
366
+ return await operation(attempt);
367
+ }
368
+ catch (error) {
369
+ lastError = error;
370
+ trace.detach();
371
+ const currentPage = pickPage(ctx);
372
+ const pageState = currentPage
373
+ ? await detectPageState(currentPage).catch(() => null)
374
+ : null;
375
+ const signals = {
376
+ message: errorMessage(error),
377
+ code: errorCode(error),
378
+ pageState,
379
+ trace: snapshotTrace(trace),
380
+ };
381
+ const failureKind = classifyRecoveryFailure(signals);
382
+ const decision = recoveryDecisionFor(failureKind, options.headed === true);
383
+ const allowedRetries = Math.min(configuredRetries, decision.maxRetries);
384
+ const willRetry = decision.retryable && attempt < allowedRetries;
385
+ const artifactDetails = await captureFailureArtifact(ctx, meta, error, {
386
+ pageState,
387
+ trace: signals.trace,
388
+ recovery: {
389
+ attempt,
390
+ willRetry,
391
+ failureKind: decision.failureKind,
392
+ action: decision.action,
393
+ retryable: decision.retryable,
394
+ maxRetries: allowedRetries,
395
+ cooldownMs: decision.cooldownMs,
396
+ },
397
+ }).catch(() => ({}));
398
+ if (!willRetry) {
399
+ if (error instanceof CliError && error.exitCode !== 1) {
400
+ throw error.withDetails(recoveryDetails(decision, artifactDetails));
401
+ }
402
+ throw new CliError(decision.exitCode, decision.code, decision.message, recoveryDetails(decision, artifactDetails));
403
+ }
404
+ await runRecoveryAction(decision, currentPage);
405
+ await options.beforeRetry?.({
406
+ ctx,
407
+ page: currentPage,
408
+ attempt,
409
+ meta,
410
+ pageState,
411
+ failureKind,
412
+ decision,
413
+ });
414
+ }
415
+ finally {
416
+ trace.detach();
417
+ }
418
+ }
419
+ const message = errorMessage(lastError);
420
+ throw new CliError(1, 'RECOVERY_EXHAUSTED', message);
421
+ }
422
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/session/recovery.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAwB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,sBAAsB,GAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAwElE,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAmB;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,KAA2B,CAAC;IAC1C,OAAO,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,GAAmC,EAAE,IAA6B;IACrF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,IAAI,GAAG,CAAC,MAAM,GAAG,eAAe;QAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAmB;IAC1C,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB;IACtC,MAAM,KAAK,GAAe;QACxB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;KACjB,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE/C,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,EAAE;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,CAAC,GAAmB,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO;YACvD,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;gBACzB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAU,EAAE,EAAE;YACjC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE;gBAC5B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;YACjC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;gBACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;gBACpB,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC;aACvC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,EAAE;YACvC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;gBACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;gBACpB,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBACtC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS;aAClC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,MAAM,GAAG,GAAG;gBAAE,OAAO;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE;gBAC5B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,MAAM;gBACN,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;gBACf,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC;aACvC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3B,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;QAClB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,CAAC;QACnD,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;QACjC,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;SAClC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAA+B;IAE/B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;IAExC,IAAI,SAAS,EAAE,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACpE,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,EAAE,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QACpE,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,SAAS,EAAE,IAAI,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IAC9D,IAAI,yGAAyG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxH,OAAO,wBAAwB,CAAC;IAClC,CAAC;IACD,IAAI,8FAA8F,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7G,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,oFAAoF,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnG,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,+HAA+H,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9I,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,mHAAmH,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClI,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAClF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,EAAE,IAAI,KAAK,kBAAkB,IAAI,oDAAoD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7G,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAyB,EACzB,MAAe;IAEf,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,wBAAwB;gBAChC,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,oCAAoC;gBAC7C,WAAW,EAAE,8CAA8C;aAC5D,CAAC;QACJ,KAAK,gBAAgB;YACnB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,4BAA4B;gBACpC,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;gBACnC,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,MAAM;oBACb,CAAC,CAAC,oEAAoE;oBACtE,CAAC,CAAC,+EAA+E;gBACnF,WAAW,EAAE,qGAAqG;aACnH,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;gBACvD,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,sFAAsF;gBAC/F,WAAW,EAAE,sFAAsF;aACpG,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,wBAAwB;gBAChC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,sCAAsC;aAChD,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,2BAA2B;gBACnC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,sDAAsD;aAChE,CAAC;QACJ,KAAK,oBAAoB;YACvB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,0BAA0B;gBAClC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,yEAAyE;aACnF,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,0DAA0D;aACpE,CAAC;QACJ,KAAK,wBAAwB;YAC3B,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,yDAAyD;aACnE,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,6BAA6B;gBACrC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,qCAAqC;aAC/C,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,2FAA2F;aACrG,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,sBAAsB;gBAC9B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,8CAA8C;aACxD,CAAC;IACN,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,EAAU;IAC5B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO;IACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAA0B,EAAE,IAAiB;IAC5E,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,2BAA2B;YAC9B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;YACD,OAAO;QACT,KAAK,SAAS;YACZ,IAAI,CAAC,6CAA6C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACjH,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,6BAA6B,CAAC;QACnC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,0BAA0B,CAAC;QAChC,KAAK,qBAAqB,CAAC;QAC3B,KAAK,sBAAsB;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChC,OAAO;QACT;YACE,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAA0B,EAAE,eAAgC;IACnF,OAAO;QACL,GAAG,eAAe;QAClB,QAAQ,EAAE,eAAe,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW;QAC1D,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,cAAc,EAAE,QAAQ,CAAC,MAAM;QAC/B,WAAW,EAAE,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QAChE,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAmB,EACnB,IAAa,EACb,SAA0C,EAC1C,UAA2B,EAAE;IAE7B,IAAI,SAAS,GAAY,IAAI,CAAC;IAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAElD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,WAAW;gBAC3B,CAAC,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;gBAC5B,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;gBACtB,SAAS;gBACT,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;aAC5B,CAAC;YACF,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;YAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,GAAG,cAAc,CAAC;YACjE,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;gBACrE,SAAS;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE;oBACR,OAAO;oBACP,SAAS;oBACT,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,UAAU,EAAE,cAAc;oBAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC;aACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACtD,MAAM,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,MAAM,IAAI,QAAQ,CAChB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,OAAO,EAChB,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAC3C,CAAC;YACJ,CAAC;YAED,MAAM,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1B,GAAG;gBACH,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,IAAI;gBACJ,SAAS;gBACT,WAAW;gBACX,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
@@ -8,6 +8,8 @@ import { profilePath } from './paths.js';
8
8
  import { acquireLock } from './lock.js';
9
9
  import { CliError } from '../io/errors.js';
10
10
  import { clearStaleSingleton } from './context.js';
11
+ import { enrichErrorWithArtifact, } from './artifacts.js';
12
+ import { detectPageState } from './page-state.js';
11
13
  const stealthPlugin = stealth();
12
14
  stealthPlugin.enabledEvasions.delete('iframe.contentWindow');
13
15
  stealthPlugin.enabledEvasions.delete('media.codecs');
@@ -40,7 +42,7 @@ export async function getSharedContext() {
40
42
  });
41
43
  return sharedCtx;
42
44
  }
43
- export async function runOnSharedCtx(fn) {
45
+ export async function runOnSharedCtx(fn, meta) {
44
46
  // Append to serial queue. Each op waits for the previous one to finish.
45
47
  const prev = opChain;
46
48
  let resolveOp;
@@ -55,11 +57,44 @@ export async function runOnSharedCtx(fn) {
55
57
  resolveOp(await fn(ctx));
56
58
  }
57
59
  catch (e) {
58
- rejectOp(e);
60
+ const ctx = sharedCtx;
61
+ if (ctx && meta) {
62
+ rejectOp(await enrichErrorWithArtifact(ctx, meta, e));
63
+ }
64
+ else {
65
+ rejectOp(e);
66
+ }
59
67
  }
60
68
  });
61
69
  return opPromise;
62
70
  }
71
+ export async function getSharedContextStatus() {
72
+ if (!sharedCtx) {
73
+ return {
74
+ browserAlive: false,
75
+ pageCount: 0,
76
+ currentUrl: null,
77
+ pageState: null,
78
+ loggedIn: null,
79
+ };
80
+ }
81
+ const pages = sharedCtx.pages().filter((p) => !p.isClosed());
82
+ const page = pages.at(-1) ?? null;
83
+ const pageState = page ? await detectPageState(page).catch(() => null) : null;
84
+ return {
85
+ browserAlive: true,
86
+ pageCount: pages.length,
87
+ currentUrl: page?.url() ?? null,
88
+ pageState,
89
+ loggedIn: pageState
90
+ ? pageState.kind === 'normal_1688_page'
91
+ ? true
92
+ : pageState.kind === 'not_logged_in'
93
+ ? false
94
+ : null
95
+ : null,
96
+ };
97
+ }
63
98
  export async function releaseSharedContext() {
64
99
  if (sharedCtx) {
65
100
  await sharedCtx.close().catch(() => { });
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/session/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/session/shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "1688-cli",
3
- "version": "0.1.31",
3
+ "version": "0.1.34",
4
4
  "description": "1688.com CLI for humans, Codex, and Claude Code. Sourcing (search / image-search / offer / inquire) and orders (list / detail / logistics / seller chat).",
5
5
  "license": "MIT",
6
6
  "author": "nobodyjack",