1688-cli 0.1.41 → 0.1.42

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 (83) hide show
  1. package/AGENTS.md +112 -318
  2. package/ARCHITECTURE.md +106 -0
  3. package/README.md +100 -10
  4. package/dist/cli.js +98 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/cart-list.js +2 -1
  7. package/dist/commands/cart-list.js.map +1 -1
  8. package/dist/commands/compare.js +107 -0
  9. package/dist/commands/compare.js.map +1 -0
  10. package/dist/commands/doctor.js +19 -5
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/offer.js +7 -5
  13. package/dist/commands/offer.js.map +1 -1
  14. package/dist/commands/order-list.js +4 -2
  15. package/dist/commands/order-list.js.map +1 -1
  16. package/dist/commands/order-logistics.js +4 -2
  17. package/dist/commands/order-logistics.js.map +1 -1
  18. package/dist/commands/research.js +142 -0
  19. package/dist/commands/research.js.map +1 -0
  20. package/dist/commands/search.js +59 -18
  21. package/dist/commands/search.js.map +1 -1
  22. package/dist/commands/seller-messages.js +7 -4
  23. package/dist/commands/seller-messages.js.map +1 -1
  24. package/dist/commands/sourcing-utils.js +438 -0
  25. package/dist/commands/sourcing-utils.js.map +1 -0
  26. package/dist/commands/supplier-inspect.js +559 -0
  27. package/dist/commands/supplier-inspect.js.map +1 -0
  28. package/dist/commands/supplier-search.js +522 -0
  29. package/dist/commands/supplier-search.js.map +1 -0
  30. package/dist/daemon/protocol.js +2 -1
  31. package/dist/daemon/protocol.js.map +1 -1
  32. package/dist/session/dispatch.js +2 -0
  33. package/dist/session/dispatch.js.map +1 -1
  34. package/dist/session/im-ws.js +8 -5
  35. package/dist/session/im-ws.js.map +1 -1
  36. package/dist/session/paths.js +17 -4
  37. package/dist/session/paths.js.map +1 -1
  38. package/dist/session/search-mtop.js +53 -0
  39. package/dist/session/search-mtop.js.map +1 -1
  40. package/dist/session/supplier-search.js +403 -0
  41. package/dist/session/supplier-search.js.map +1 -0
  42. package/dist/util/encoding.js +8 -0
  43. package/dist/util/encoding.js.map +1 -0
  44. package/dist/util/temp.js +6 -0
  45. package/dist/util/temp.js.map +1 -0
  46. package/docs/AGENT_MAPS_PLAN.md +171 -0
  47. package/docs/AGENT_WORKING_PRINCIPLES.md +143 -0
  48. package/docs/COMMANDS.md +199 -0
  49. package/docs/FEATURES.md +45 -0
  50. package/docs/JSON_CONTRACTS.md +390 -0
  51. package/docs/QUALITY_SCORE.md +60 -0
  52. package/docs/README.md +35 -0
  53. package/docs/RELIABILITY.md +61 -0
  54. package/docs/SAFETY.md +100 -0
  55. package/docs/WORKFLOW.md +82 -0
  56. package/docs/exec-plans/README.md +9 -0
  57. package/docs/exec-plans/active/README.md +4 -0
  58. package/docs/exec-plans/completed/2026-05-28-sourcing-research-v1.md +125 -0
  59. package/docs/exec-plans/completed/2026-05-31-supplier-inspect-v1.md +113 -0
  60. package/docs/exec-plans/completed/2026-06-04-supplier-search-v1.md +81 -0
  61. package/docs/exec-plans/completed/2026-06-07-windows-cli-compatibility.md +138 -0
  62. package/docs/exec-plans/completed/README.md +4 -0
  63. package/docs/exec-plans/tech-debt-tracker.md +5 -0
  64. package/docs/generated/command-index.md +54 -0
  65. package/docs/generated/json-shapes.md +111 -0
  66. package/docs/generated/module-map.md +13 -0
  67. package/docs/generated/test-index.md +34 -0
  68. package/docs/playbooks/add-command.md +15 -0
  69. package/docs/playbooks/add-mtop-capture.md +13 -0
  70. package/docs/playbooks/change-json-output.md +11 -0
  71. package/docs/playbooks/debug-risk-control.md +12 -0
  72. package/docs/playbooks/update-cli-release.md +11 -0
  73. package/docs/specs/checkout-and-orders.md +30 -0
  74. package/docs/specs/seller-im.md +28 -0
  75. package/docs/specs/sourcing-research.md +186 -0
  76. package/docs/specs/supplier-inspect.md +144 -0
  77. package/docs/specs/supplier-search.md +179 -0
  78. package/docs/specs/windows-cli-compatibility.md +123 -0
  79. package/package.json +12 -2
  80. package/scripts/check_agent_map.mjs +86 -0
  81. package/scripts/fix_bin_mode.mjs +18 -0
  82. package/scripts/generate_agent_context.mjs +253 -0
  83. package/scripts/postinstall.mjs +12 -4
@@ -0,0 +1,438 @@
1
+ import { CliError } from '../io/errors.js';
2
+ export function normalizeSearchSort(raw) {
3
+ const value = (raw ?? 'relevance').trim();
4
+ if (value === 'relevance' ||
5
+ value === 'best-selling' ||
6
+ value === 'price-asc' ||
7
+ value === 'price-desc') {
8
+ return value;
9
+ }
10
+ throw new CliError(2, 'BAD_INPUT', `Invalid --sort: ${value}. Use relevance | best-selling | price-asc | price-desc.`);
11
+ }
12
+ export function normalizeVerifiedFilter(raw) {
13
+ const value = (raw ?? 'any').trim();
14
+ if (value === 'any' ||
15
+ value === 'factory' ||
16
+ value === 'business' ||
17
+ value === 'super-factory') {
18
+ return value;
19
+ }
20
+ throw new CliError(2, 'BAD_INPUT', `Invalid --verified: ${value}. Use any | factory | business | super-factory.`);
21
+ }
22
+ export function parseOptionalNumber(raw, flag) {
23
+ if (raw === undefined || raw === '')
24
+ return null;
25
+ const n = Number(raw);
26
+ if (!Number.isFinite(n)) {
27
+ throw new CliError(2, 'BAD_INPUT', `Invalid ${flag}: ${raw}`);
28
+ }
29
+ return n;
30
+ }
31
+ export function parsePositiveInt(raw, flag, fallback, cap) {
32
+ const value = raw ?? String(fallback);
33
+ const n = parseInt(value, 10);
34
+ if (!Number.isFinite(n) || n < 1) {
35
+ throw new CliError(2, 'BAD_INPUT', `${flag} must be a positive integer.`);
36
+ }
37
+ return cap ? Math.min(n, cap) : n;
38
+ }
39
+ export function normalizeFilters(input) {
40
+ const priceMin = input.priceMin ?? null;
41
+ const priceMax = input.priceMax ?? null;
42
+ if (priceMin !== null && priceMin < 0) {
43
+ throw new CliError(2, 'BAD_INPUT', '--price-min must be >= 0.');
44
+ }
45
+ if (priceMax !== null && priceMax < 0) {
46
+ throw new CliError(2, 'BAD_INPUT', '--price-max must be >= 0.');
47
+ }
48
+ if (priceMin !== null && priceMax !== null && priceMin > priceMax) {
49
+ throw new CliError(2, 'BAD_INPUT', '--price-min cannot exceed --price-max.');
50
+ }
51
+ const minTurnover = input.minTurnover ?? null;
52
+ if (minTurnover !== null && minTurnover < 0) {
53
+ throw new CliError(2, 'BAD_INPUT', '--min-turnover must be >= 0.');
54
+ }
55
+ return {
56
+ priceMin,
57
+ priceMax,
58
+ province: input.province?.trim() || null,
59
+ city: input.city?.trim() || null,
60
+ verified: input.verified ?? 'any',
61
+ minTurnover,
62
+ excludeAds: input.excludeAds === true,
63
+ };
64
+ }
65
+ export function hasActiveFilters(filters) {
66
+ return (filters.priceMin !== null ||
67
+ filters.priceMax !== null ||
68
+ filters.province !== null ||
69
+ filters.city !== null ||
70
+ filters.verified !== 'any' ||
71
+ filters.minTurnover !== null ||
72
+ filters.excludeAds);
73
+ }
74
+ export function applySearchControls(offers, sort, filters) {
75
+ const filtered = offers.filter((offer) => offerMatchesFilters(offer, filters));
76
+ return sortOffers(filtered, sort);
77
+ }
78
+ export function offerMatchesFilters(offer, filters) {
79
+ const price = offer.price.min ?? offer.price.max;
80
+ if (filters.priceMin !== null && (price === null || price < filters.priceMin)) {
81
+ return false;
82
+ }
83
+ if (filters.priceMax !== null && (price === null || price > filters.priceMax)) {
84
+ return false;
85
+ }
86
+ if (filters.province &&
87
+ !includesNormalized(offer.location.province, filters.province)) {
88
+ return false;
89
+ }
90
+ if (filters.city && !includesNormalized(offer.location.city, filters.city)) {
91
+ return false;
92
+ }
93
+ if (filters.excludeAds && offer.isP4P)
94
+ return false;
95
+ if (filters.verified === 'factory' && !offer.verified.factory)
96
+ return false;
97
+ if (filters.verified === 'business' && !offer.verified.business)
98
+ return false;
99
+ if (filters.verified === 'super-factory' && !offer.verified.superFactory) {
100
+ return false;
101
+ }
102
+ if (filters.minTurnover !== null) {
103
+ const demand = demandSignals(offer);
104
+ if (demand.orderCount === null || demand.orderCount < filters.minTurnover) {
105
+ return false;
106
+ }
107
+ }
108
+ return true;
109
+ }
110
+ export function sortOffers(offers, sort) {
111
+ if (sort === 'relevance')
112
+ return [...offers];
113
+ return [...offers].sort((a, b) => {
114
+ if (sort === 'price-asc') {
115
+ return nullableNumberLast(a.price.min) - nullableNumberLast(b.price.min);
116
+ }
117
+ if (sort === 'price-desc') {
118
+ return nullableNumberLastDesc(b.price.min) - nullableNumberLastDesc(a.price.min);
119
+ }
120
+ const bd = demandSignals(b).orderCount ?? -1;
121
+ const ad = demandSignals(a).orderCount ?? -1;
122
+ if (bd !== ad)
123
+ return bd - ad;
124
+ return scoreOffer(b).score - scoreOffer(a).score;
125
+ });
126
+ }
127
+ export function demandSignals(offer) {
128
+ const repurchaseText = offer.demand?.repurchaseRateText ??
129
+ findPercentText([...(offer.serviceTags ?? []), ...offer.tags]);
130
+ return {
131
+ turnoverText: offer.turnover ?? offer.demand?.orderCountText ?? null,
132
+ orderCount: offer.demand?.orderCount ??
133
+ parseCountText(offer.turnover ?? offer.demand?.orderCountText ?? null),
134
+ repurchaseRateText: repurchaseText,
135
+ repurchaseRate: offer.demand?.repurchaseRate ?? parsePercentText(repurchaseText),
136
+ };
137
+ }
138
+ export function parseCountText(text) {
139
+ if (!text)
140
+ return null;
141
+ const compact = text.replace(/,/g, '').replace(/\s+/g, '');
142
+ const match = compact.match(/(\d+(?:\.\d+)?)(万|w|W|亿|k|K)?/);
143
+ if (!match)
144
+ return null;
145
+ const value = Number(match[1]);
146
+ if (!Number.isFinite(value))
147
+ return null;
148
+ const unit = match[2] ?? '';
149
+ const multiplier = unit === '亿'
150
+ ? 100000000
151
+ : unit === '万' || unit === 'w' || unit === 'W'
152
+ ? 10000
153
+ : unit === 'k' || unit === 'K'
154
+ ? 1000
155
+ : 1;
156
+ return Math.round(value * multiplier);
157
+ }
158
+ export function parsePercentText(text) {
159
+ if (!text)
160
+ return null;
161
+ const match = text.match(/(\d+(?:\.\d+)?)\s*%/);
162
+ if (!match)
163
+ return null;
164
+ const n = Number(match[1]);
165
+ return Number.isFinite(n) ? n : null;
166
+ }
167
+ export function scoreOffer(offer) {
168
+ const demand = demandSignals(offer);
169
+ const parts = [];
170
+ const price = offer.price.min;
171
+ let pricePoints = 0;
172
+ if (price !== null) {
173
+ pricePoints = price <= 5 ? 25 : price <= 20 ? 22 : price <= 50 ? 18 : price <= 100 ? 12 : price <= 200 ? 8 : 4;
174
+ }
175
+ parts.push({
176
+ name: 'price',
177
+ points: pricePoints,
178
+ reason: price === null ? 'no price' : `min price ${price}`,
179
+ });
180
+ const orderCount = demand.orderCount ?? 0;
181
+ const demandPoints = orderCount >= 10000
182
+ ? 25
183
+ : orderCount >= 1000
184
+ ? 20
185
+ : orderCount >= 100
186
+ ? 15
187
+ : orderCount >= 10
188
+ ? 8
189
+ : orderCount > 0
190
+ ? 4
191
+ : 0;
192
+ parts.push({
193
+ name: 'demand',
194
+ points: demandPoints,
195
+ reason: demand.turnoverText ?? 'no turnover',
196
+ });
197
+ const years = offer.supplier.years ?? 0;
198
+ const tenurePoints = Math.min(15, years * 3);
199
+ parts.push({
200
+ name: 'supplier-tenure',
201
+ points: tenurePoints,
202
+ reason: years > 0 ? `${years} years` : 'no tenure',
203
+ });
204
+ const verifiedPoints = offer.verified.superFactory
205
+ ? 15
206
+ : offer.verified.factory
207
+ ? 10
208
+ : offer.verified.business
209
+ ? 8
210
+ : 0;
211
+ parts.push({
212
+ name: 'verification',
213
+ points: verifiedPoints,
214
+ reason: verificationLabel(offer.verified),
215
+ });
216
+ const tags = [...new Set([...(offer.serviceTags ?? []), ...offer.tags])];
217
+ const servicePoints = Math.min(10, tags.length * 2);
218
+ parts.push({
219
+ name: 'service-tags',
220
+ points: servicePoints,
221
+ reason: tags.length ? tags.join(', ') : 'no tags',
222
+ });
223
+ parts.push({
224
+ name: 'organic',
225
+ points: offer.isP4P ? 0 : 10,
226
+ reason: offer.isP4P ? 'ad result' : 'organic result',
227
+ });
228
+ return {
229
+ score: Math.min(100, Math.round(parts.reduce((sum, p) => sum + p.points, 0))),
230
+ scoreBreakdown: parts,
231
+ };
232
+ }
233
+ export function detailSummary(detail) {
234
+ const knownStocks = detail.skus
235
+ .map((sku) => sku.stock)
236
+ .filter((stock) => stock !== null);
237
+ return {
238
+ offerId: detail.offerId,
239
+ title: detail.title,
240
+ url: detail.url,
241
+ priceMin: detail.priceMin,
242
+ priceMax: detail.priceMax,
243
+ unitName: detail.unitName,
244
+ minOrderQty: detail.minOrderQty,
245
+ mixOrderQty: detail.mixOrderQty,
246
+ priceTiers: detail.priceTiers,
247
+ saledCount: detail.saledCount,
248
+ categoryId: detail.categoryId,
249
+ supplier: detail.supplier,
250
+ skuCount: detail.skus.length,
251
+ totalStock: knownStocks.length > 0
252
+ ? knownStocks.reduce((sum, stock) => sum + stock, 0)
253
+ : null,
254
+ stockKnown: knownStocks.length > 0,
255
+ packageCount: detail.packageInfo.length,
256
+ freight: detail.freight,
257
+ mainImage: detail.mainImage,
258
+ };
259
+ }
260
+ export function scoreDetail(detail) {
261
+ const pseudoOffer = {
262
+ offerId: detail.offerId,
263
+ title: detail.title,
264
+ price: {
265
+ text: detail.priceRange ?? '',
266
+ min: detail.priceMin,
267
+ max: detail.priceMax,
268
+ },
269
+ supplier: {
270
+ name: detail.supplier.name,
271
+ shopUrl: null,
272
+ years: null,
273
+ },
274
+ location: {
275
+ province: detail.freight.province,
276
+ city: detail.freight.city,
277
+ },
278
+ bizType: null,
279
+ verified: { factory: false, business: false, superFactory: false },
280
+ tags: [],
281
+ isP4P: false,
282
+ turnover: detail.saledCount !== null ? String(detail.saledCount) : null,
283
+ url: detail.url,
284
+ image: detail.mainImage,
285
+ };
286
+ const scored = scoreOffer(pseudoOffer);
287
+ const skuPoints = detail.skus.length >= 20 ? 5 : detail.skus.length >= 5 ? 3 : detail.skus.length > 0 ? 1 : 0;
288
+ scored.scoreBreakdown.push({
289
+ name: 'sku-depth',
290
+ points: skuPoints,
291
+ reason: `${detail.skus.length} skus`,
292
+ });
293
+ scored.score = Math.min(100, scored.score + skuPoints);
294
+ return scored;
295
+ }
296
+ export function makeResearchItem(input) {
297
+ const scored = scoreOffer(input.offer);
298
+ return {
299
+ sourceKeyword: input.sourceKeyword,
300
+ sourceRank: input.sourceRank,
301
+ globalRank: input.globalRank,
302
+ offer: input.offer,
303
+ demand: demandSignals(input.offer),
304
+ supplier: {
305
+ years: input.offer.supplier.years,
306
+ verified: input.offer.verified,
307
+ tags: [...new Set([...(input.offer.serviceTags ?? []), ...input.offer.tags])],
308
+ isAd: input.offer.isP4P,
309
+ },
310
+ score: scored.score,
311
+ scoreBreakdown: scored.scoreBreakdown,
312
+ };
313
+ }
314
+ export function parseEnrichTop(raw) {
315
+ if (!raw || raw === '0' || raw === 'none')
316
+ return 0;
317
+ const normalized = raw.startsWith('top:') ? raw.slice(4) : raw;
318
+ const n = parseInt(normalized, 10);
319
+ if (!Number.isFinite(n) || n < 0) {
320
+ throw new CliError(2, 'BAD_INPUT', `Invalid --enrich: ${raw}. Use top:N, N, 0, or none.`);
321
+ }
322
+ return Math.min(n, 50);
323
+ }
324
+ export function researchItemsToJsonl(items) {
325
+ return items.map((item) => JSON.stringify(item)).join('\n') + (items.length ? '\n' : '');
326
+ }
327
+ export function researchItemsToCsv(items) {
328
+ const header = [
329
+ 'globalRank',
330
+ 'score',
331
+ 'sourceKeyword',
332
+ 'sourceRank',
333
+ 'offerId',
334
+ 'title',
335
+ 'priceMin',
336
+ 'turnover',
337
+ 'supplierName',
338
+ 'supplierYears',
339
+ 'verified',
340
+ 'tags',
341
+ 'isAd',
342
+ 'url',
343
+ 'enrichedPriceMin',
344
+ 'minOrderQty',
345
+ 'saledCount',
346
+ 'skuCount',
347
+ 'errorCode',
348
+ ];
349
+ const rows = items.map((item) => [
350
+ item.globalRank,
351
+ item.score,
352
+ item.sourceKeyword,
353
+ item.sourceRank,
354
+ item.offer.offerId,
355
+ item.offer.title,
356
+ item.offer.price.min ?? '',
357
+ item.demand.turnoverText ?? '',
358
+ item.offer.supplier.name ?? '',
359
+ item.offer.supplier.years ?? '',
360
+ verificationLabel(item.offer.verified),
361
+ item.supplier.tags.join('|'),
362
+ item.offer.isP4P ? 'true' : 'false',
363
+ item.offer.url,
364
+ item.enriched?.priceMin ?? '',
365
+ item.enriched?.minOrderQty ?? '',
366
+ item.enriched?.saledCount ?? '',
367
+ item.enriched?.skuCount ?? '',
368
+ item.error?.code ?? '',
369
+ ]);
370
+ return [header, ...rows].map((row) => row.map(csvCell).join(',')).join('\n') + '\n';
371
+ }
372
+ export function compareItemsToCsv(items) {
373
+ const header = [
374
+ 'offerId',
375
+ 'ok',
376
+ 'score',
377
+ 'title',
378
+ 'priceMin',
379
+ 'minOrderQty',
380
+ 'saledCount',
381
+ 'skuCount',
382
+ 'supplierName',
383
+ 'errorCode',
384
+ ];
385
+ const rows = items.map((item) => [
386
+ item.offerId,
387
+ item.ok ? 'true' : 'false',
388
+ item.score ?? '',
389
+ item.summary?.title ?? '',
390
+ item.summary?.priceMin ?? '',
391
+ item.summary?.minOrderQty ?? '',
392
+ item.summary?.saledCount ?? '',
393
+ item.summary?.skuCount ?? '',
394
+ item.summary?.supplier.name ?? '',
395
+ item.error?.code ?? '',
396
+ ]);
397
+ return [header, ...rows].map((row) => row.map(csvCell).join(',')).join('\n') + '\n';
398
+ }
399
+ export function errorInfo(error) {
400
+ if (error && typeof error === 'object') {
401
+ const rec = error;
402
+ return {
403
+ code: typeof rec.code === 'string' ? rec.code : 'ERROR',
404
+ message: typeof rec.message === 'string' ? rec.message : String(error),
405
+ };
406
+ }
407
+ return { code: 'ERROR', message: String(error) };
408
+ }
409
+ function includesNormalized(value, needle) {
410
+ if (!value)
411
+ return false;
412
+ return value.trim().toLowerCase().includes(needle.trim().toLowerCase());
413
+ }
414
+ function nullableNumberLast(n) {
415
+ return n === null ? Number.POSITIVE_INFINITY : n;
416
+ }
417
+ function nullableNumberLastDesc(n) {
418
+ return n === null ? Number.NEGATIVE_INFINITY : n;
419
+ }
420
+ function findPercentText(values) {
421
+ return values.find((value) => /\d+(?:\.\d+)?\s*%/.test(value)) ?? null;
422
+ }
423
+ function verificationLabel(verified) {
424
+ if (verified.superFactory)
425
+ return 'super-factory';
426
+ if (verified.factory)
427
+ return 'factory';
428
+ if (verified.business)
429
+ return 'business';
430
+ return 'none';
431
+ }
432
+ function csvCell(value) {
433
+ const s = String(value ?? '');
434
+ if (/[",\n]/.test(s))
435
+ return `"${s.replace(/"/g, '""')}"`;
436
+ return s;
437
+ }
438
+ //# sourceMappingURL=sourcing-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcing-utils.js","sourceRoot":"","sources":["../../src/commands/sourcing-utils.ts"],"names":[],"mappings":"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"}