@dokobot/cli 2.0.1 → 2.1.0

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/src/crawl.js DELETED
@@ -1,503 +0,0 @@
1
- import { input, select } from '@inquirer/prompts';
2
- import { ServerClient } from './server-client.js';
3
- import { getApiKey, getServerUrl } from './config.js';
4
- import * as fs from 'fs';
5
- const G = '\x1b[32m';
6
- const Y = '\x1b[33m';
7
- const R = '\x1b[31m';
8
- const C = '\x1b[36m';
9
- const D = '\x1b[2m';
10
- const B = '\x1b[1m';
11
- const X = '\x1b[0m';
12
- function displayWidth(str) {
13
- let w = 0;
14
- for (const ch of str) {
15
- const code = ch.codePointAt(0);
16
- // CJK Unified Ideographs, CJK symbols, Hiragana, Katakana, Hangul, fullwidth forms
17
- if ((code >= 0x1100 && code <= 0x115f) ||
18
- (code >= 0x2e80 && code <= 0x303e) ||
19
- (code >= 0x3040 && code <= 0x33bf) ||
20
- (code >= 0x3400 && code <= 0x4dbf) ||
21
- (code >= 0x4e00 && code <= 0xa4cf) ||
22
- (code >= 0xac00 && code <= 0xd7af) ||
23
- (code >= 0xf900 && code <= 0xfaff) ||
24
- (code >= 0xfe30 && code <= 0xfe6f) ||
25
- (code >= 0xff01 && code <= 0xff60) ||
26
- (code >= 0xffe0 && code <= 0xffe6) ||
27
- (code >= 0x20000 && code <= 0x2fa1f)) {
28
- w += 2;
29
- }
30
- else {
31
- w += 1;
32
- }
33
- }
34
- return w;
35
- }
36
- function padEndDisplay(str, width) {
37
- const diff = width - displayWidth(str);
38
- return diff > 0 ? str + ' '.repeat(diff) : str;
39
- }
40
- function sliceDisplay(str, maxWidth) {
41
- let w = 0;
42
- let i = 0;
43
- for (const ch of str) {
44
- const cw = displayWidth(ch);
45
- if (w + cw > maxWidth)
46
- break;
47
- w += cw;
48
- i += ch.length;
49
- }
50
- return str.slice(0, i);
51
- }
52
- const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
53
- const PAGE_ICON = {
54
- pending: `${D}○${X}`,
55
- running: `${C}◉${X}`,
56
- success: `${G}✓${X}`,
57
- failed: `${R}✗${X}`,
58
- skipped: `${D}–${X}`,
59
- };
60
- const TERMINAL_STATES = new Set(['completed', 'failed', 'cancelled']);
61
- function sleep(ms) {
62
- return new Promise(resolve => setTimeout(resolve, ms));
63
- }
64
- function formatElapsed(ms) {
65
- const s = Math.floor(ms / 1000);
66
- if (s < 60)
67
- return `${s}s`;
68
- const m = Math.floor(s / 60);
69
- const rs = s % 60;
70
- if (m < 60)
71
- return `${m}m ${rs}s`;
72
- const h = Math.floor(m / 60);
73
- return `${h}h ${m % 60}m ${rs}s`;
74
- }
75
- function renderProgressBar(completed, total, width) {
76
- if (total === 0)
77
- return `[${'░'.repeat(width)}] 0/0`;
78
- const ratio = Math.min(completed / total, 1);
79
- const filled = Math.round(ratio * width);
80
- return `[${G}${'█'.repeat(filled)}${X}${'░'.repeat(width - filled)}] ${completed}/${total} (${Math.round(ratio * 100)}%)`;
81
- }
82
- function getClient(globalOpts) {
83
- const apiKey = getApiKey(globalOpts.apiKey);
84
- if (!apiKey) {
85
- console.error('API key is required. Run `dokobot config` or set DOKO_API_KEY.');
86
- process.exit(1);
87
- }
88
- const serverUrl = getServerUrl(globalOpts.server);
89
- return new ServerClient(serverUrl, apiKey);
90
- }
91
- function statusColor(status) {
92
- switch (status) {
93
- case 'completed': return G;
94
- case 'running':
95
- case 'aggregating': return C;
96
- case 'queued': return Y;
97
- case 'failed': return R;
98
- case 'cancelled': return D;
99
- default: return '';
100
- }
101
- }
102
- function formatTime(ts) {
103
- return new Date(ts).toLocaleString();
104
- }
105
- function formatSize(bytes) {
106
- if (bytes < 1024)
107
- return `${bytes} B`;
108
- if (bytes < 1024 * 1024)
109
- return `${(bytes / 1024).toFixed(1)} KB`;
110
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
111
- }
112
- function shortId(id) {
113
- return id.length > 12 ? id.slice(0, 12) : id;
114
- }
115
- async function selectOnlineDoko(dokos) {
116
- const onlineDokos = dokos.filter(d => d.isOnline);
117
- if (onlineDokos.length === 0) {
118
- console.error('No online extension doko found. Please ensure your browser extension is running.');
119
- process.exit(1);
120
- }
121
- if (onlineDokos.length === 1) {
122
- console.log(` Using doko: ${onlineDokos[0].name} (${shortId(onlineDokos[0].id)})`);
123
- return onlineDokos[0].id;
124
- }
125
- return select({
126
- message: 'Select a doko:',
127
- choices: onlineDokos.map(d => ({ name: `${d.name} (${shortId(d.id)})`, value: d.id })),
128
- });
129
- }
130
- export function registerCrawlCommands(program) {
131
- const crawl = program
132
- .command('crawl')
133
- .description('Manage crawl tasks');
134
- crawl
135
- .command('create')
136
- .description('Create a new crawl task')
137
- .option('--url <urls...>', 'Target URLs')
138
- .option('--fields <json>', 'Extraction fields JSON')
139
- .option('--format <type>', 'Output format: csv|json|markdown', 'csv')
140
- .option('--max-items <n>', 'Max items per page', '50')
141
- .option('--device <id>', 'Device ID')
142
- .action(async (options) => {
143
- const globalOpts = program.opts();
144
- const client = getClient(globalOpts);
145
- let urls = options.url || [];
146
- if (urls.length === 0) {
147
- const raw = await input({ message: 'Target URLs (comma-separated):' });
148
- urls = raw.split(',').map((u) => u.trim()).filter(Boolean);
149
- if (urls.length === 0) {
150
- console.error('At least one URL is required.');
151
- process.exit(1);
152
- }
153
- }
154
- let fields;
155
- if (options.fields) {
156
- try {
157
- fields = JSON.parse(options.fields);
158
- }
159
- catch {
160
- console.error('Invalid fields JSON.');
161
- process.exit(1);
162
- }
163
- }
164
- else {
165
- const raw = await input({
166
- message: 'Extraction fields JSON (e.g. [{"name":"title","description":"Page title","type":"string","required":true}]):',
167
- });
168
- try {
169
- fields = JSON.parse(raw);
170
- }
171
- catch {
172
- console.error('Invalid fields JSON.');
173
- process.exit(1);
174
- }
175
- }
176
- const format = options.format;
177
- const maxItemsPerPage = parseInt(options.maxItems, 10);
178
- let deviceId = options.device;
179
- if (!deviceId) {
180
- const dokos = await client.listCrawlDokos();
181
- deviceId = await selectOnlineDoko(dokos);
182
- }
183
- const plan = {
184
- urls,
185
- fields,
186
- maxItemsPerPage,
187
- outputFormat: format,
188
- };
189
- try {
190
- const task = await client.createCrawlTask({
191
- deviceIds: [deviceId],
192
- plan,
193
- request: { outputFormat: format },
194
- });
195
- console.log(`\n ${G}✓${X} Task created: ${B}${task.id}${X}`);
196
- console.log(` Status: ${statusColor(task.status)}${task.status}${X}`);
197
- console.log(` URLs: ${urls.length}`);
198
- console.log(`\n Track progress: dokobot crawl watch ${task.id}`);
199
- }
200
- catch (error) {
201
- console.error('Failed to create task:', error instanceof Error ? error.message : error);
202
- process.exit(1);
203
- }
204
- });
205
- crawl
206
- .command('list')
207
- .description('List crawl tasks')
208
- .option('--status <status>', 'Filter by status')
209
- .option('--limit <n>', 'Number of tasks', '20')
210
- .action(async (options) => {
211
- const globalOpts = program.opts();
212
- const client = getClient(globalOpts);
213
- try {
214
- const { tasks, total } = await client.listCrawlTasks({
215
- status: options.status,
216
- limit: parseInt(options.limit, 10),
217
- });
218
- if (tasks.length === 0) {
219
- console.log('No crawl tasks found.');
220
- return;
221
- }
222
- console.log(`\n Crawl Tasks (${tasks.length}/${total}):\n`);
223
- console.log(` ${'ID'.padEnd(22)} ${'Domain'.padEnd(30)} ${'Status'.padEnd(12)} ${'URLs'.padEnd(6)} Created`);
224
- console.log(` ${'─'.repeat(22)} ${'─'.repeat(30)} ${'─'.repeat(12)} ${'─'.repeat(6)} ${'─'.repeat(19)}`);
225
- for (const task of tasks) {
226
- const urlCount = task.plan?.urls.length ?? 0;
227
- const sc = statusColor(task.status);
228
- const domain = task.plan?.urls[0] ? new URL(task.plan.urls[0]).hostname.replace(/^www\./, '') : '—';
229
- const domainDisplay = padEndDisplay(sliceDisplay(domain, 30), 30);
230
- console.log(` ${D}${task.id.padEnd(22)}${X} ${domainDisplay} ${sc}${task.status.padEnd(12)}${X} ${String(urlCount).padEnd(6)} ${D}${formatTime(task.createdAt)}${X}`);
231
- }
232
- console.log('');
233
- }
234
- catch (error) {
235
- console.error('Failed to list tasks:', error instanceof Error ? error.message : error);
236
- process.exit(1);
237
- }
238
- });
239
- crawl
240
- .command('status <taskId>')
241
- .description('Show task details')
242
- .action(async (taskId) => {
243
- const globalOpts = program.opts();
244
- const client = getClient(globalOpts);
245
- try {
246
- const task = await client.getCrawlTask(taskId);
247
- printTaskDetail(task);
248
- }
249
- catch (error) {
250
- console.error('Failed to get task:', error instanceof Error ? error.message : error);
251
- process.exit(1);
252
- }
253
- });
254
- crawl
255
- .command('result <taskId>')
256
- .description('Download task result')
257
- .option('--output <file>', 'Output file path')
258
- .action(async (taskId, options) => {
259
- const globalOpts = program.opts();
260
- const client = getClient(globalOpts);
261
- try {
262
- const result = await client.getCrawlResult(taskId);
263
- console.log(` Format: ${result.format} Items: ${result.itemCount} Size: ${formatSize(result.fileSizeBytes)}`);
264
- console.log(` Summary: ${result.summary}`);
265
- const res = await client.downloadUrl(result.downloadUrl);
266
- const content = await res.text();
267
- if (options.output) {
268
- fs.writeFileSync(options.output, content, 'utf-8');
269
- console.log(`\n ${G}✓${X} Saved to ${options.output}`);
270
- }
271
- else {
272
- console.log('');
273
- console.log(content);
274
- }
275
- }
276
- catch (error) {
277
- console.error('Failed to get result:', error instanceof Error ? error.message : error);
278
- process.exit(1);
279
- }
280
- });
281
- crawl
282
- .command('cancel <taskId>')
283
- .description('Cancel a crawl task')
284
- .action(async (taskId) => {
285
- const globalOpts = program.opts();
286
- const client = getClient(globalOpts);
287
- try {
288
- const task = await client.cancelCrawlTask(taskId);
289
- console.log(` ${G}✓${X} Task ${shortId(task.id)} cancelled.`);
290
- }
291
- catch (error) {
292
- console.error('Failed to cancel task:', error instanceof Error ? error.message : error);
293
- process.exit(1);
294
- }
295
- });
296
- crawl
297
- .command('watch <taskId>')
298
- .description('Watch crawl task progress in real-time')
299
- .action(async (taskId) => {
300
- const globalOpts = program.opts();
301
- const client = getClient(globalOpts);
302
- let task = null;
303
- let frame = 0;
304
- let lastLineCount = 0;
305
- let spinnerTimer = null;
306
- const abortController = new AbortController();
307
- const onSigint = () => {
308
- abortController.abort();
309
- if (spinnerTimer)
310
- clearInterval(spinnerTimer);
311
- process.stdout.write('\x1b[?25h\x1b[0m');
312
- console.log(`\n ${D}Stopped watching.${X}\n`);
313
- process.exit(0);
314
- };
315
- process.on('SIGINT', onSigint);
316
- process.stdout.write('\x1b[?25l');
317
- function render() {
318
- if (!task)
319
- return;
320
- const lines = renderWatchView(task, frame);
321
- if (lastLineCount > 0) {
322
- process.stdout.write(`\x1b[${lastLineCount}A`);
323
- for (let i = 0; i < lastLineCount; i++) {
324
- process.stdout.write('\x1b[2K\n');
325
- }
326
- process.stdout.write(`\x1b[${lastLineCount}A`);
327
- }
328
- lastLineCount = lines.length;
329
- process.stdout.write(lines.join('\n') + '\n');
330
- }
331
- function applyProgress(data) {
332
- if (!task)
333
- return;
334
- task.status = data.status;
335
- task.execution = data.execution;
336
- if (data.error)
337
- task.error = data.error;
338
- render();
339
- }
340
- try {
341
- spinnerTimer = setInterval(() => { frame++; render(); }, 100);
342
- await client.watchTask(taskId, {
343
- onTask: (t) => {
344
- task = t;
345
- render();
346
- if (TERMINAL_STATES.has(t.status))
347
- abortController.abort();
348
- },
349
- onProgress: applyProgress,
350
- onCompleted: (data) => {
351
- if (task) {
352
- task.status = 'completed';
353
- if (data.result)
354
- task.result = data.result;
355
- }
356
- render();
357
- abortController.abort();
358
- },
359
- onFailed: (data) => {
360
- if (task) {
361
- task.status = 'failed';
362
- task.error = data.error;
363
- }
364
- render();
365
- abortController.abort();
366
- },
367
- }, abortController.signal);
368
- }
369
- catch (error) {
370
- if (abortController.signal.aborted)
371
- return;
372
- // SSE disconnected — fallback to polling
373
- if (spinnerTimer)
374
- clearInterval(spinnerTimer);
375
- if (!task) {
376
- try {
377
- task = await client.getCrawlTask(taskId);
378
- }
379
- catch {
380
- process.stdout.write('\x1b[?25h');
381
- console.error('Failed to get task:', error instanceof Error ? error.message : error);
382
- process.exit(1);
383
- }
384
- }
385
- spinnerTimer = setInterval(() => { frame++; render(); }, 100);
386
- render();
387
- while (!TERMINAL_STATES.has(task.status)) {
388
- await sleep(3000);
389
- try {
390
- task = await client.getCrawlTask(taskId);
391
- render();
392
- }
393
- catch { /* retry next cycle */ }
394
- }
395
- }
396
- finally {
397
- if (spinnerTimer)
398
- clearInterval(spinnerTimer);
399
- process.stdout.write('\x1b[?25h');
400
- process.removeListener('SIGINT', onSigint);
401
- }
402
- });
403
- }
404
- function renderWatchView(task, frame) {
405
- const lines = [];
406
- const spin = TERMINAL_STATES.has(task.status) ? '' : ` ${C}${SPINNER[frame % SPINNER.length]}${X}`;
407
- const domain = task.plan?.urls[0] ? new URL(task.plan.urls[0]).hostname.replace(/^www\./, '') : task.id;
408
- lines.push('');
409
- lines.push(` ${B}Watching: ${domain}${X}${spin}`);
410
- lines.push(` ID: ${D}${task.id}${X}`);
411
- lines.push(` Status: ${statusColor(task.status)}${task.status}${X}`);
412
- const start = task.execution.startedAt ?? task.createdAt;
413
- const end = task.execution.completedAt ?? Date.now();
414
- lines.push(` Time: ${formatElapsed(end - start)}`);
415
- if (task.error) {
416
- lines.push(` Error: ${R}${task.error}${X}`);
417
- }
418
- const pages = task.execution.pages;
419
- if (pages.length > 0) {
420
- const done = pages.filter(p => p.status === 'success' || p.status === 'failed' || p.status === 'skipped').length;
421
- lines.push('');
422
- lines.push(` ${renderProgressBar(done, pages.length, 30)}`);
423
- lines.push('');
424
- const termWidth = process.stdout.columns || 80;
425
- const urlWidth = Math.max(20, termWidth - 32);
426
- for (const page of pages) {
427
- const icon = PAGE_ICON[page.status] ?? `${D}?${X}`;
428
- const rawUrl = page.url.replace(/^https?:\/\//, '');
429
- const urlDisp = padEndDisplay(sliceDisplay(rawUrl, urlWidth), urlWidth);
430
- const items = page.extractedItems != null ? `${D}${String(page.extractedItems).padStart(4)} items${X}` : ' ';
431
- const scrolls = page.scrollIterations != null ? `${D}${page.scrollIterations}↓${X}` : '';
432
- let line = ` ${icon} ${urlDisp} ${items} ${scrolls}`;
433
- if (page.error)
434
- line += ` ${R}${page.error}${X}`;
435
- lines.push(line);
436
- }
437
- }
438
- else if (task.status === 'queued') {
439
- lines.push('');
440
- lines.push(` ${D}Waiting for task to start...${X}`);
441
- }
442
- const totalItems = pages.reduce((sum, p) => sum + (p.extractedItems ?? 0), 0);
443
- if (totalItems > 0) {
444
- lines.push('');
445
- lines.push(` Total items: ${B}${totalItems}${X}`);
446
- }
447
- if (task.result) {
448
- lines.push('');
449
- lines.push(` ${G}Result:${X} ${task.result.itemCount} items, ${formatSize(task.result.fileSizeBytes)}`);
450
- if (task.result.summary)
451
- lines.push(` Summary: ${task.result.summary}`);
452
- lines.push(`\n Download: ${B}dokobot crawl result ${task.id}${X}`);
453
- }
454
- lines.push('');
455
- return lines;
456
- }
457
- function printTaskDetail(task) {
458
- const sc = statusColor(task.status);
459
- const domain = task.plan?.urls[0] ? new URL(task.plan.urls[0]).hostname.replace(/^www\./, '') : task.id;
460
- console.log(`\n ${B}Task: ${domain}${X}`);
461
- console.log(` ID: ${task.id}`);
462
- console.log(` Status: ${sc}${task.status}${X}`);
463
- console.log(` Format: ${task.plan?.outputFormat ?? task.request.outputFormat}`);
464
- console.log(` Created: ${formatTime(task.createdAt)}`);
465
- if (task.execution.startedAt) {
466
- console.log(` Started: ${formatTime(task.execution.startedAt)}`);
467
- }
468
- if (task.execution.completedAt) {
469
- console.log(` Done: ${formatTime(task.execution.completedAt)}`);
470
- }
471
- if (task.error) {
472
- console.log(` Error: ${R}${task.error}${X}`);
473
- }
474
- if (task.plan?.urls.length) {
475
- console.log(`\n URLs (${task.plan.urls.length}):`);
476
- for (const url of task.plan.urls) {
477
- console.log(` ${D}${url}${X}`);
478
- }
479
- }
480
- if (task.plan?.fields.length) {
481
- console.log(`\n Fields (${task.plan.fields.length}):`);
482
- for (const f of task.plan.fields) {
483
- const req = f.required ? ' *' : '';
484
- console.log(` ${f.name} ${D}(${f.type}${req})${X} - ${f.description}`);
485
- }
486
- }
487
- if (task.execution.pages.length > 0) {
488
- console.log(`\n Pages:`);
489
- for (const page of task.execution.pages) {
490
- const psc = statusColor(page.status);
491
- const items = page.extractedItems != null ? ` [${page.extractedItems} items]` : '';
492
- const err = page.error ? ` ${R}${page.error}${X}` : '';
493
- console.log(` ${psc}${page.status.padEnd(8)}${X} ${page.url}${items}${err}`);
494
- }
495
- }
496
- if (task.result) {
497
- console.log(`\n Result: ${task.result.itemCount} items, ${formatSize(task.result.fileSizeBytes)}`);
498
- console.log(` Summary: ${task.result.summary}`);
499
- console.log(`\n Download: dokobot crawl result ${task.id}`);
500
- }
501
- console.log('');
502
- }
503
- //# sourceMappingURL=crawl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/crawl.ts"],"names":[],"mappings":"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"}