@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.
- package/README.md +163 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +175 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +6 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +154 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/chat.d.ts +6 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +218 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/docs.d.ts +6 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +181 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/jobs.d.ts +6 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +348 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/jobs.test.d.ts +5 -0
- package/dist/commands/jobs.test.d.ts.map +1 -0
- package/dist/commands/jobs.test.js +118 -0
- package/dist/commands/jobs.test.js.map +1 -0
- package/dist/commands/logs.d.ts +8 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +186 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/processors.d.ts +8 -0
- package/dist/commands/processors.d.ts.map +1 -0
- package/dist/commands/processors.js +91 -0
- package/dist/commands/processors.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +370 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/shortcuts.d.ts +20 -0
- package/dist/commands/shortcuts.d.ts.map +1 -0
- package/dist/commands/shortcuts.js +405 -0
- package/dist/commands/shortcuts.js.map +1 -0
- package/dist/commands/tables.d.ts +6 -0
- package/dist/commands/tables.d.ts.map +1 -0
- package/dist/commands/tables.js +189 -0
- package/dist/commands/tables.js.map +1 -0
- package/dist/commands/templates.d.ts +8 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +202 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/index.d.ts +14 -412
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -46
- package/dist/index.js.map +1 -1
- package/dist/lib/browser.d.ts +11 -0
- package/dist/lib/browser.d.ts.map +1 -0
- package/dist/lib/browser.js +33 -0
- package/dist/lib/browser.js.map +1 -0
- package/dist/lib/client.d.ts +57 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +176 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +56 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +110 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/config.test.d.ts +5 -0
- package/dist/lib/config.test.d.ts.map +1 -0
- package/dist/lib/config.test.js +81 -0
- package/dist/lib/config.test.js.map +1 -0
- package/dist/lib/logs.d.ts +89 -0
- package/dist/lib/logs.d.ts.map +1 -0
- package/dist/lib/logs.js +196 -0
- package/dist/lib/logs.js.map +1 -0
- package/dist/lib/logs.test.d.ts +5 -0
- package/dist/lib/logs.test.d.ts.map +1 -0
- package/dist/lib/logs.test.js +183 -0
- package/dist/lib/logs.test.js.map +1 -0
- package/dist/lib/output.d.ts +73 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +204 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/output.test.d.ts +5 -0
- package/dist/lib/output.test.d.ts.map +1 -0
- package/dist/lib/output.test.js +174 -0
- package/dist/lib/output.test.js.map +1 -0
- package/dist/lib/processors.d.ts +73 -0
- package/dist/lib/processors.d.ts.map +1 -0
- package/dist/lib/processors.js +94 -0
- package/dist/lib/processors.js.map +1 -0
- package/dist/lib/processors.test.d.ts +5 -0
- package/dist/lib/processors.test.d.ts.map +1 -0
- package/dist/lib/processors.test.js +83 -0
- package/dist/lib/processors.test.js.map +1 -0
- package/dist/lib/progress.d.ts +44 -0
- package/dist/lib/progress.d.ts.map +1 -0
- package/dist/lib/progress.js +102 -0
- package/dist/lib/progress.js.map +1 -0
- package/dist/lib/templates.d.ts +56 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +204 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/templates.test.d.ts +5 -0
- package/dist/lib/templates.test.d.ts.map +1 -0
- package/dist/lib/templates.test.js +101 -0
- package/dist/lib/templates.test.js.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -25
- package/dist/bin.d.ts +0 -1
- package/dist/bin.js +0 -152
- package/dist/bin.js.map +0 -1
- package/dist/chunk-A6YTW4WL.js +0 -499
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|