@okrapdf/cli 0.1.0 → 0.1.1

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 (115) hide show
  1. package/README.md +163 -0
  2. package/dist/cli.d.ts +19 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +175 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/auth.d.ts +6 -0
  7. package/dist/commands/auth.d.ts.map +1 -0
  8. package/dist/commands/auth.js +154 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/chat.d.ts +6 -0
  11. package/dist/commands/chat.d.ts.map +1 -0
  12. package/dist/commands/chat.js +218 -0
  13. package/dist/commands/chat.js.map +1 -0
  14. package/dist/commands/docs.d.ts +6 -0
  15. package/dist/commands/docs.d.ts.map +1 -0
  16. package/dist/commands/docs.js +181 -0
  17. package/dist/commands/docs.js.map +1 -0
  18. package/dist/commands/jobs.d.ts +6 -0
  19. package/dist/commands/jobs.d.ts.map +1 -0
  20. package/dist/commands/jobs.js +348 -0
  21. package/dist/commands/jobs.js.map +1 -0
  22. package/dist/commands/jobs.test.d.ts +5 -0
  23. package/dist/commands/jobs.test.d.ts.map +1 -0
  24. package/dist/commands/jobs.test.js +118 -0
  25. package/dist/commands/jobs.test.js.map +1 -0
  26. package/dist/commands/logs.d.ts +8 -0
  27. package/dist/commands/logs.d.ts.map +1 -0
  28. package/dist/commands/logs.js +186 -0
  29. package/dist/commands/logs.js.map +1 -0
  30. package/dist/commands/processors.d.ts +8 -0
  31. package/dist/commands/processors.d.ts.map +1 -0
  32. package/dist/commands/processors.js +91 -0
  33. package/dist/commands/processors.js.map +1 -0
  34. package/dist/commands/review.d.ts +3 -0
  35. package/dist/commands/review.d.ts.map +1 -0
  36. package/dist/commands/review.js +370 -0
  37. package/dist/commands/review.js.map +1 -0
  38. package/dist/commands/shortcuts.d.ts +20 -0
  39. package/dist/commands/shortcuts.d.ts.map +1 -0
  40. package/dist/commands/shortcuts.js +405 -0
  41. package/dist/commands/shortcuts.js.map +1 -0
  42. package/dist/commands/tables.d.ts +6 -0
  43. package/dist/commands/tables.d.ts.map +1 -0
  44. package/dist/commands/tables.js +189 -0
  45. package/dist/commands/tables.js.map +1 -0
  46. package/dist/commands/templates.d.ts +8 -0
  47. package/dist/commands/templates.d.ts.map +1 -0
  48. package/dist/commands/templates.js +202 -0
  49. package/dist/commands/templates.js.map +1 -0
  50. package/dist/index.d.ts +14 -412
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +23 -46
  53. package/dist/index.js.map +1 -1
  54. package/dist/lib/browser.d.ts +11 -0
  55. package/dist/lib/browser.d.ts.map +1 -0
  56. package/dist/lib/browser.js +33 -0
  57. package/dist/lib/browser.js.map +1 -0
  58. package/dist/lib/client.d.ts +57 -0
  59. package/dist/lib/client.d.ts.map +1 -0
  60. package/dist/lib/client.js +176 -0
  61. package/dist/lib/client.js.map +1 -0
  62. package/dist/lib/config.d.ts +56 -0
  63. package/dist/lib/config.d.ts.map +1 -0
  64. package/dist/lib/config.js +110 -0
  65. package/dist/lib/config.js.map +1 -0
  66. package/dist/lib/config.test.d.ts +5 -0
  67. package/dist/lib/config.test.d.ts.map +1 -0
  68. package/dist/lib/config.test.js +81 -0
  69. package/dist/lib/config.test.js.map +1 -0
  70. package/dist/lib/logs.d.ts +89 -0
  71. package/dist/lib/logs.d.ts.map +1 -0
  72. package/dist/lib/logs.js +196 -0
  73. package/dist/lib/logs.js.map +1 -0
  74. package/dist/lib/logs.test.d.ts +5 -0
  75. package/dist/lib/logs.test.d.ts.map +1 -0
  76. package/dist/lib/logs.test.js +183 -0
  77. package/dist/lib/logs.test.js.map +1 -0
  78. package/dist/lib/output.d.ts +73 -0
  79. package/dist/lib/output.d.ts.map +1 -0
  80. package/dist/lib/output.js +204 -0
  81. package/dist/lib/output.js.map +1 -0
  82. package/dist/lib/output.test.d.ts +5 -0
  83. package/dist/lib/output.test.d.ts.map +1 -0
  84. package/dist/lib/output.test.js +174 -0
  85. package/dist/lib/output.test.js.map +1 -0
  86. package/dist/lib/processors.d.ts +73 -0
  87. package/dist/lib/processors.d.ts.map +1 -0
  88. package/dist/lib/processors.js +94 -0
  89. package/dist/lib/processors.js.map +1 -0
  90. package/dist/lib/processors.test.d.ts +5 -0
  91. package/dist/lib/processors.test.d.ts.map +1 -0
  92. package/dist/lib/processors.test.js +83 -0
  93. package/dist/lib/processors.test.js.map +1 -0
  94. package/dist/lib/progress.d.ts +44 -0
  95. package/dist/lib/progress.d.ts.map +1 -0
  96. package/dist/lib/progress.js +102 -0
  97. package/dist/lib/progress.js.map +1 -0
  98. package/dist/lib/templates.d.ts +56 -0
  99. package/dist/lib/templates.d.ts.map +1 -0
  100. package/dist/lib/templates.js +204 -0
  101. package/dist/lib/templates.js.map +1 -0
  102. package/dist/lib/templates.test.d.ts +5 -0
  103. package/dist/lib/templates.test.d.ts.map +1 -0
  104. package/dist/lib/templates.test.js +101 -0
  105. package/dist/lib/templates.test.js.map +1 -0
  106. package/dist/types.d.ts +144 -0
  107. package/dist/types.d.ts.map +1 -0
  108. package/dist/types.js +5 -0
  109. package/dist/types.js.map +1 -0
  110. package/package.json +56 -25
  111. package/dist/bin.d.ts +0 -1
  112. package/dist/bin.js +0 -152
  113. package/dist/bin.js.map +0 -1
  114. package/dist/chunk-A6YTW4WL.js +0 -499
  115. package/dist/chunk-A6YTW4WL.js.map +0 -1
@@ -0,0 +1,405 @@
1
+ /**
2
+ * Shortcut commands for common workflows
3
+ *
4
+ * These provide a simpler interface for the most common operations.
5
+ * Designed to be agent-friendly with predictable JSON output.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { existsSync, statSync, mkdirSync, writeFileSync } from 'fs';
9
+ import { resolve, basename, join } from 'path';
10
+ import chalk from 'chalk';
11
+ import { get, post, uploadFile, EXIT_CODES } from '../lib/client.js';
12
+ import { formatOutput, success, error, info } from '../lib/output.js';
13
+ import { withSpinner, pollWithProgress } from '../lib/progress.js';
14
+ import { getDefaultFormat } from '../lib/config.js';
15
+ import { resolveProcessor, getProcessor } from '../lib/processors.js';
16
+ import { loadTemplate } from '../lib/templates.js';
17
+ import { logJob, updateJobLog } from '../lib/logs.js';
18
+ /**
19
+ * Create the 'extract' shortcut command
20
+ * okra extract <file> - Upload, create job, wait, return results
21
+ *
22
+ * Agent-friendly: Use -o json --quiet for clean JSON output
23
+ */
24
+ export function createExtractCommand() {
25
+ return new Command('extract')
26
+ .description('Extract tables and text from a PDF (upload + process + wait)')
27
+ .argument('<source>', 'PDF file path, URL, or document UUID')
28
+ .option('-o, --output <format>', 'Output format (table, json, markdown)', getDefaultFormat())
29
+ .option('-d, --output-dir <path>', 'Write results to directory instead of stdout')
30
+ .option('-p, --processor <name>', 'Use specific processor (docai, gemini, qwen, llamaparse)')
31
+ .option('-t, --template <name>', 'Use extraction template (invoice, receipt, financial-statement)')
32
+ .option('--tables-only', 'Only return extracted tables')
33
+ .option('--text-only', 'Only return extracted text')
34
+ .option('--timeout <seconds>', 'Job timeout in seconds (default: 600)', '600')
35
+ .option('-q, --quiet', 'Minimal output (just the results) - ideal for piping')
36
+ .action(async (source, options) => {
37
+ let documentUuid;
38
+ let fileName;
39
+ // Resolve processor if specified
40
+ let processorId;
41
+ if (options.processor) {
42
+ processorId = resolveProcessor(options.processor);
43
+ const proc = getProcessor(processorId);
44
+ if (!proc) {
45
+ error(`Unknown processor: ${options.processor}`);
46
+ console.log(chalk.dim('Run `okra processors list` to see available processors'));
47
+ process.exit(EXIT_CODES.INVALID_ARGS);
48
+ }
49
+ if (!options.quiet)
50
+ info(`Using processor: ${proc.name}`);
51
+ }
52
+ // Load template if specified
53
+ let template;
54
+ if (options.template) {
55
+ template = loadTemplate(options.template);
56
+ if (!template) {
57
+ error(`Unknown template: ${options.template}`);
58
+ console.log(chalk.dim('Run `okra templates list` to see available templates'));
59
+ process.exit(EXIT_CODES.INVALID_ARGS);
60
+ }
61
+ if (!options.quiet)
62
+ info(`Using template: ${template.name}`);
63
+ // Use template's preferred processor if not explicitly specified
64
+ if (!processorId && template.processor) {
65
+ processorId = template.processor;
66
+ }
67
+ }
68
+ // Step 1: Handle source (file upload, URL, or existing UUID)
69
+ if (source.match(/^[0-9a-f-]{36}$/i)) {
70
+ // UUID - use existing document directly (skip upload)
71
+ documentUuid = source;
72
+ fileName = 'document.pdf';
73
+ if (!options.quiet)
74
+ info(`Using existing document: ${source}`);
75
+ // Create extraction job directly
76
+ const jobPayload = { document_uuid: documentUuid };
77
+ if (processorId)
78
+ jobPayload.processor = processorId;
79
+ const createResponse = await withSpinner('Creating extraction job', () => post('api/v1/extract', jobPayload));
80
+ const logEntry = logJob({
81
+ job_id: createResponse.job_id,
82
+ document_uuid: documentUuid,
83
+ file_name: fileName,
84
+ processor: processorId || 'default',
85
+ template: options.template,
86
+ status: 'running',
87
+ started_at: new Date().toISOString(),
88
+ });
89
+ const startTime = Date.now();
90
+ const timeoutMs = parseInt(options.timeout, 10) * 1000;
91
+ const job = await waitForJob(createResponse.job_id, options.quiet, timeoutMs);
92
+ updateJobLog(logEntry.id, {
93
+ status: job.status,
94
+ pages: job.total_pages || undefined,
95
+ completed_at: new Date().toISOString(),
96
+ duration_ms: Date.now() - startTime,
97
+ error: job.error || undefined,
98
+ });
99
+ if (job.status === 'failed') {
100
+ error(`Extraction failed: ${job.error || 'Unknown error'}`);
101
+ process.exit(EXIT_CODES.JOB_FAILED);
102
+ }
103
+ const results = await getResults(createResponse.job_id);
104
+ outputResults(results, options, fileName);
105
+ return;
106
+ }
107
+ if (source.startsWith('http://') || source.startsWith('https://')) {
108
+ // URL source - create job directly
109
+ if (!options.quiet)
110
+ info(`Processing URL: ${source}`);
111
+ const jobPayload = { url: source };
112
+ if (processorId)
113
+ jobPayload.processor = processorId;
114
+ const createResponse = await withSpinner('Creating extraction job', () => post('api/v1/extract', jobPayload));
115
+ documentUuid = '';
116
+ fileName = source.split('/').pop() || 'document.pdf';
117
+ // Log the job
118
+ const logEntry = logJob({
119
+ job_id: createResponse.job_id,
120
+ file_name: fileName,
121
+ processor: processorId || 'default',
122
+ template: options.template,
123
+ status: 'running',
124
+ started_at: new Date().toISOString(),
125
+ });
126
+ // Wait for job
127
+ const startTime = Date.now();
128
+ const timeoutMs = parseInt(options.timeout, 10) * 1000;
129
+ const job = await waitForJob(createResponse.job_id, options.quiet, timeoutMs);
130
+ // Update log
131
+ updateJobLog(logEntry.id, {
132
+ status: job.status,
133
+ pages: job.total_pages || undefined,
134
+ completed_at: new Date().toISOString(),
135
+ duration_ms: Date.now() - startTime,
136
+ error: job.error || undefined,
137
+ });
138
+ const results = await getResults(createResponse.job_id);
139
+ outputResults(results, options, fileName);
140
+ return;
141
+ }
142
+ // File source
143
+ const filePath = resolve(source);
144
+ if (!existsSync(filePath)) {
145
+ error(`File not found: ${filePath}`);
146
+ process.exit(EXIT_CODES.INVALID_ARGS);
147
+ }
148
+ if (!filePath.toLowerCase().endsWith('.pdf')) {
149
+ error('Only PDF files are supported');
150
+ process.exit(EXIT_CODES.INVALID_ARGS);
151
+ }
152
+ fileName = basename(filePath);
153
+ const fileSize = statSync(filePath).size;
154
+ if (!options.quiet)
155
+ info(`Processing: ${fileName}`);
156
+ const { readFileSync } = await import('fs');
157
+ const fileBuffer = readFileSync(filePath);
158
+ const fileBase64 = fileBuffer.toString('base64');
159
+ const jobPayload = {
160
+ file_base64: fileBase64,
161
+ filename: fileName,
162
+ };
163
+ if (processorId)
164
+ jobPayload.processor = processorId;
165
+ const createResponse = await withSpinner('Uploading and creating extraction job', () => post('api/v1/extract', jobPayload));
166
+ documentUuid = '';
167
+ // Log the job locally
168
+ const logEntry = logJob({
169
+ job_id: createResponse.job_id,
170
+ document_uuid: documentUuid,
171
+ file_name: fileName,
172
+ processor: processorId || 'default',
173
+ template: options.template,
174
+ status: 'running',
175
+ started_at: new Date().toISOString(),
176
+ });
177
+ // Step 4: Wait for completion
178
+ const startTime = Date.now();
179
+ const timeoutMs = parseInt(options.timeout, 10) * 1000;
180
+ const job = await waitForJob(createResponse.job_id, options.quiet, timeoutMs);
181
+ // Update local log
182
+ updateJobLog(logEntry.id, {
183
+ status: job.status,
184
+ pages: job.total_pages || undefined,
185
+ completed_at: new Date().toISOString(),
186
+ duration_ms: Date.now() - startTime,
187
+ error: job.error || undefined,
188
+ });
189
+ if (job.status === 'failed') {
190
+ error(`Extraction failed: ${job.error || 'Unknown error'}`);
191
+ process.exit(EXIT_CODES.JOB_FAILED);
192
+ }
193
+ // Step 5: Get and output results
194
+ const results = await getResults(createResponse.job_id);
195
+ outputResults(results, options, fileName);
196
+ });
197
+ }
198
+ /**
199
+ * Create the 'run' shortcut command
200
+ * okra run <file> "<query>" - Upload, chat, return result
201
+ */
202
+ export function createRunCommand() {
203
+ return new Command('run')
204
+ .description('Ask a question about a PDF (upload + chat)')
205
+ .argument('<source>', 'PDF file path, URL, or document UUID')
206
+ .argument('<query>', 'Question to ask about the document')
207
+ .option('-o, --output <format>', 'Output format (text, json)', 'text')
208
+ .option('-q, --quiet', 'Minimal output (just the answer)')
209
+ .action(async (source, query, options) => {
210
+ let documentUuid;
211
+ // Handle different source types
212
+ if (source.match(/^[0-9a-f-]{36}$/i)) {
213
+ // UUID - use directly
214
+ documentUuid = source;
215
+ }
216
+ else if (source.startsWith('http://') || source.startsWith('https://')) {
217
+ // URL - need to upload first
218
+ error('URL sources not yet supported for chat. Upload the file first.');
219
+ process.exit(EXIT_CODES.INVALID_ARGS);
220
+ }
221
+ else {
222
+ // File - upload first
223
+ const filePath = resolve(source);
224
+ if (!existsSync(filePath)) {
225
+ error(`File not found: ${filePath}`);
226
+ process.exit(EXIT_CODES.INVALID_ARGS);
227
+ }
228
+ if (!filePath.toLowerCase().endsWith('.pdf')) {
229
+ error('Only PDF files are supported');
230
+ process.exit(EXIT_CODES.INVALID_ARGS);
231
+ }
232
+ const fileName = basename(filePath);
233
+ const fileSize = statSync(filePath).size;
234
+ if (!options.quiet)
235
+ info(`Uploading: ${fileName}`);
236
+ // Upload file
237
+ const signedUrlResponse = await withSpinner('Uploading', async () => {
238
+ const response = await post('api/chat/upload/signed-url', {
239
+ file_name: fileName,
240
+ file_size: fileSize,
241
+ content_type: 'application/pdf',
242
+ document_type: 'pdf_chat',
243
+ });
244
+ await uploadFile(response.upload_url, filePath, 'application/pdf');
245
+ return response;
246
+ });
247
+ documentUuid = signedUrlResponse.document_uuid;
248
+ }
249
+ // Send chat message
250
+ if (!options.quiet)
251
+ info(`Asking: ${query}`);
252
+ const response = await withSpinner('Thinking', () => post('api/v1/messages', {
253
+ document_uuid: documentUuid,
254
+ message: query,
255
+ }));
256
+ // Output result
257
+ if (options.output === 'json') {
258
+ console.log(formatOutput(response, 'json'));
259
+ }
260
+ else if (options.quiet) {
261
+ console.log(response.message.content);
262
+ }
263
+ else {
264
+ console.log();
265
+ console.log(chalk.green('Answer:'));
266
+ console.log(response.message.content);
267
+ if (response.output_files && response.output_files.length > 0) {
268
+ console.log();
269
+ console.log(chalk.dim('Generated files:'));
270
+ for (const file of response.output_files) {
271
+ console.log(chalk.dim(` - ${file.filename}`));
272
+ }
273
+ }
274
+ }
275
+ });
276
+ }
277
+ /**
278
+ * Wait for a job to complete
279
+ */
280
+ async function waitForJob(jobId, quiet, timeoutMs = 600000) {
281
+ return pollWithProgress(async () => {
282
+ const job = await get(`api/v1/jobs/${jobId}`);
283
+ const done = job.status === 'completed' || job.status === 'failed' || job.status === 'cancelled';
284
+ return {
285
+ done,
286
+ progress: job.pages_completed || 0,
287
+ total: job.total_pages || undefined,
288
+ data: job,
289
+ };
290
+ }, {
291
+ label: quiet ? '' : 'Extracting',
292
+ interval: 2000,
293
+ timeout: timeoutMs,
294
+ });
295
+ }
296
+ /**
297
+ * Get job results
298
+ */
299
+ async function getResults(jobId) {
300
+ return get(`api/v1/jobs/${jobId}/results`);
301
+ }
302
+ /**
303
+ * Get file extension for output format
304
+ */
305
+ function getExtension(format) {
306
+ switch (format) {
307
+ case 'json': return 'json';
308
+ case 'markdown': return 'md';
309
+ case 'csv': return 'csv';
310
+ default: return 'txt';
311
+ }
312
+ }
313
+ /**
314
+ * Output results based on options
315
+ */
316
+ function outputResults(results, options, fileName) {
317
+ // Determine output content based on format
318
+ let content;
319
+ const format = options.output || 'table';
320
+ if (format === 'json') {
321
+ content = formatOutput(results, 'json');
322
+ }
323
+ else if (options.tablesOnly) {
324
+ if (results.tables.length === 0) {
325
+ content = 'No tables extracted';
326
+ }
327
+ else {
328
+ content = results.tables.map(t => t.content_markdown).join('\n\n');
329
+ }
330
+ }
331
+ else if (options.textOnly) {
332
+ content = results.pages.map(p => p.text).join('\n\n');
333
+ }
334
+ else if (format === 'markdown') {
335
+ // Build markdown output
336
+ const parts = [];
337
+ parts.push(`# Extraction Results\n`);
338
+ parts.push(`- Pages: ${results.pages.length}`);
339
+ parts.push(`- Tables: ${results.tables.length}\n`);
340
+ if (results.tables.length > 0) {
341
+ parts.push('## Tables\n');
342
+ for (const table of results.tables) {
343
+ parts.push(`### Page ${table.page_number}\n`);
344
+ parts.push(table.content_markdown);
345
+ parts.push('');
346
+ }
347
+ }
348
+ content = parts.join('\n');
349
+ }
350
+ else {
351
+ // Default table format - build text output
352
+ const parts = [];
353
+ parts.push('Extraction Complete');
354
+ parts.push('─'.repeat(50));
355
+ parts.push(`Pages: ${results.pages.length}`);
356
+ parts.push(`Tables: ${results.tables.length}`);
357
+ if (results.tables.length > 0) {
358
+ parts.push('\nExtracted Tables:');
359
+ for (const table of results.tables) {
360
+ parts.push(`\n[Page ${table.page_number}]`);
361
+ parts.push(table.content_markdown);
362
+ }
363
+ }
364
+ content = parts.join('\n');
365
+ }
366
+ // Write to file or stdout
367
+ if (options.outputDir) {
368
+ // Ensure directory exists
369
+ const outDir = resolve(options.outputDir);
370
+ mkdirSync(outDir, { recursive: true });
371
+ // Determine output filename
372
+ const baseName = fileName ? fileName.replace(/\.pdf$/i, '') : 'results';
373
+ const ext = getExtension(format);
374
+ const outPath = join(outDir, `${baseName}.${ext}`);
375
+ writeFileSync(outPath, content, 'utf-8');
376
+ if (!options.quiet) {
377
+ success(`Results written to ${outPath}`);
378
+ }
379
+ }
380
+ else {
381
+ // Stdout output with formatting for human-readable formats
382
+ if (format === 'json' || options.tablesOnly || options.textOnly) {
383
+ console.log(content);
384
+ }
385
+ else {
386
+ // Add colors for terminal display
387
+ if (!options.quiet) {
388
+ console.log();
389
+ console.log(chalk.bold('Extraction Complete'));
390
+ console.log(chalk.dim('─'.repeat(50)));
391
+ console.log(`Pages: ${results.pages.length}`);
392
+ console.log(`Tables: ${results.tables.length}`);
393
+ }
394
+ if (results.tables.length > 0) {
395
+ if (!options.quiet)
396
+ console.log(chalk.bold('\nExtracted Tables:'));
397
+ for (const table of results.tables) {
398
+ console.log(chalk.cyan(`\n[Page ${table.page_number}]`));
399
+ console.log(table.content_markdown);
400
+ }
401
+ }
402
+ }
403
+ }
404
+ }
405
+ //# sourceMappingURL=shortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../../src/commands/shortcuts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Table extraction commands
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createTablesCommand(): Command;
6
+ //# sourceMappingURL=tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/commands/tables.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,wBAAgB,mBAAmB,IAAI,OAAO,CAqK7C"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Table extraction commands
3
+ */
4
+ import { Command } from 'commander';
5
+ import { writeFileSync } from 'fs';
6
+ import chalk from 'chalk';
7
+ import { get, OkraApiError, EXIT_CODES } from '../lib/client.js';
8
+ import { formatOutput, success, error, } from '../lib/output.js';
9
+ import { withSpinner } from '../lib/progress.js';
10
+ import { getDefaultFormat } from '../lib/config.js';
11
+ // Columns for table list display
12
+ const TABLE_COLUMNS = [
13
+ { key: 'id', header: 'Table ID', width: 38 },
14
+ { key: 'page_number', header: 'Page', width: 6 },
15
+ { key: 'processor_type', header: 'Source', width: 10 },
16
+ { key: 'confidence_fmt', header: 'Confidence', width: 12 },
17
+ { key: 'preview', header: 'Preview', width: 40 },
18
+ ];
19
+ export function createTablesCommand() {
20
+ const tables = new Command('tables')
21
+ .description('Manage extracted tables');
22
+ // tables list
23
+ tables
24
+ .command('list <documentUuid>')
25
+ .alias('ls')
26
+ .description('List tables from a document')
27
+ .option('-o, --output <format>', 'Output format (table, json, csv)', getDefaultFormat())
28
+ .option('-p, --page <n>', 'Filter by page number')
29
+ .action(async (documentUuid, options) => {
30
+ const params = {};
31
+ if (options.page) {
32
+ params.page_number = options.page;
33
+ }
34
+ const response = await withSpinner('Fetching tables', () => get(`api/extractions/${documentUuid}`, params));
35
+ // Handle both array and paginated responses
36
+ const items = Array.isArray(response) ? response : response.items;
37
+ if (items.length === 0) {
38
+ console.log(chalk.dim('No tables found'));
39
+ return;
40
+ }
41
+ // Format for display
42
+ const formatted = items.map(table => ({
43
+ ...table,
44
+ confidence_fmt: table.confidence !== null
45
+ ? `${(table.confidence * 100).toFixed(0)}%`
46
+ : '-',
47
+ preview: truncate(table.content_markdown.replace(/\n/g, ' '), 40),
48
+ }));
49
+ console.log(formatOutput(formatted, options.output, TABLE_COLUMNS));
50
+ });
51
+ // tables get
52
+ tables
53
+ .command('get <tableId>')
54
+ .description('Get table content')
55
+ .option('-o, --output <format>', 'Output format (markdown, json)', 'markdown')
56
+ .action(async (tableId, options) => {
57
+ try {
58
+ const table = await withSpinner('Fetching table', () => get(`api/extractions/tables/${tableId}`));
59
+ if (options.output === 'json') {
60
+ console.log(formatOutput(table, 'json'));
61
+ }
62
+ else {
63
+ // Default: markdown output
64
+ console.log(chalk.bold(`Table (Page ${table.page_number})`));
65
+ console.log(chalk.dim('─'.repeat(50)));
66
+ console.log(table.content_markdown);
67
+ console.log();
68
+ console.log(chalk.dim(`ID: ${table.id}`));
69
+ console.log(chalk.dim(`Source: ${table.processor_type}`));
70
+ if (table.confidence !== null) {
71
+ console.log(chalk.dim(`Confidence: ${(table.confidence * 100).toFixed(1)}%`));
72
+ }
73
+ }
74
+ }
75
+ catch (err) {
76
+ if (err instanceof OkraApiError && err.statusCode === 404) {
77
+ error(`Table not found: ${tableId}`);
78
+ process.exit(EXIT_CODES.NOT_FOUND);
79
+ }
80
+ throw err;
81
+ }
82
+ });
83
+ // tables export
84
+ tables
85
+ .command('export <tableId>')
86
+ .description('Export table to a file')
87
+ .option('-f, --format <format>', 'Export format (csv, json, xlsx, markdown)', 'csv')
88
+ .option('-o, --out <path>', 'Output file path')
89
+ .action(async (tableId, options) => {
90
+ try {
91
+ const table = await withSpinner('Fetching table', () => get(`api/extractions/tables/${tableId}`));
92
+ const format = options.format;
93
+ let content;
94
+ let ext;
95
+ switch (format) {
96
+ case 'json':
97
+ content = JSON.stringify(table, null, 2);
98
+ ext = 'json';
99
+ break;
100
+ case 'csv':
101
+ content = markdownTableToCsv(table.content_markdown);
102
+ ext = 'csv';
103
+ break;
104
+ case 'markdown':
105
+ case 'md':
106
+ content = table.content_markdown;
107
+ ext = 'md';
108
+ break;
109
+ case 'xlsx':
110
+ error('XLSX export not yet implemented. Use CSV or JSON.');
111
+ process.exit(EXIT_CODES.INVALID_ARGS);
112
+ return;
113
+ default:
114
+ error(`Invalid format: ${format}. Use: csv, json, markdown`);
115
+ process.exit(EXIT_CODES.INVALID_ARGS);
116
+ return;
117
+ }
118
+ const outputPath = options.out || `table-${tableId.slice(0, 8)}.${ext}`;
119
+ writeFileSync(outputPath, content, 'utf-8');
120
+ success(`Exported to: ${outputPath}`);
121
+ }
122
+ catch (err) {
123
+ if (err instanceof OkraApiError && err.statusCode === 404) {
124
+ error(`Table not found: ${tableId}`);
125
+ process.exit(EXIT_CODES.NOT_FOUND);
126
+ }
127
+ throw err;
128
+ }
129
+ });
130
+ // tables search
131
+ tables
132
+ .command('search <documentUuid> <query>')
133
+ .description('Search within extracted tables')
134
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
135
+ .action(async (documentUuid, query, options) => {
136
+ const response = await withSpinner('Searching tables', () => get(`api/extractions/${documentUuid}/search`, { q: query }));
137
+ if (response.results.length === 0) {
138
+ console.log(chalk.dim('No matching tables found'));
139
+ return;
140
+ }
141
+ // Format for display
142
+ const formatted = response.results.map(table => ({
143
+ ...table,
144
+ confidence_fmt: table.confidence !== null
145
+ ? `${(table.confidence * 100).toFixed(0)}%`
146
+ : '-',
147
+ preview: truncate(table.content_markdown.replace(/\n/g, ' '), 40),
148
+ }));
149
+ console.log(formatOutput(formatted, options.output, TABLE_COLUMNS));
150
+ });
151
+ return tables;
152
+ }
153
+ /**
154
+ * Truncate string with ellipsis
155
+ */
156
+ function truncate(str, maxLength) {
157
+ if (str.length <= maxLength)
158
+ return str;
159
+ return str.slice(0, maxLength - 3) + '...';
160
+ }
161
+ /**
162
+ * Convert markdown table to CSV
163
+ */
164
+ function markdownTableToCsv(markdown) {
165
+ const lines = markdown.trim().split('\n');
166
+ const csvLines = [];
167
+ for (const line of lines) {
168
+ // Skip separator lines (like |---|---|)
169
+ if (line.match(/^\|[\s-:|]+\|$/))
170
+ continue;
171
+ // Parse table row
172
+ if (line.startsWith('|') && line.endsWith('|')) {
173
+ const cells = line
174
+ .slice(1, -1) // Remove leading/trailing pipes
175
+ .split('|')
176
+ .map(cell => cell.trim());
177
+ // Escape CSV fields
178
+ const escapedCells = cells.map(cell => {
179
+ if (cell.includes(',') || cell.includes('"') || cell.includes('\n')) {
180
+ return `"${cell.replace(/"/g, '""')}"`;
181
+ }
182
+ return cell;
183
+ });
184
+ csvLines.push(escapedCells.join(','));
185
+ }
186
+ }
187
+ return csvLines.join('\n');
188
+ }
189
+ //# sourceMappingURL=tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/commands/tables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Template management commands
3
+ *
4
+ * Create, list, and use extraction templates.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createTemplatesCommand(): Command;
8
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/commands/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,sBAAsB,IAAI,OAAO,CA8NhD"}