@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,370 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { get, post, patch, OkraApiError, EXIT_CODES } from '../lib/client.js';
4
+ import { formatOutput, formatDate, success, error } from '../lib/output.js';
5
+ import { withSpinner } from '../lib/progress.js';
6
+ import { getDefaultFormat } from '../lib/config.js';
7
+ import { openInBrowser, getJobWebUrl } from '../lib/browser.js';
8
+ import { readFileSync, existsSync } from 'fs';
9
+ const PAGE_COLUMNS = [
10
+ { key: 'page', header: 'Page', width: 6 },
11
+ { key: 'status', header: 'Status', width: 12 },
12
+ { key: 'resolution', header: 'Resolution', width: 12 },
13
+ { key: 'ocrLineCount', header: 'OCR Lines', width: 10 },
14
+ { key: 'hasOcr', header: 'Has OCR', width: 8 },
15
+ ];
16
+ function formatStatus(status) {
17
+ switch (status) {
18
+ case 'complete': return chalk.green(status);
19
+ case 'partial': return chalk.yellow(status);
20
+ case 'flagged': return chalk.red(status);
21
+ case 'pending': return chalk.yellow(status);
22
+ case 'gap': return chalk.magenta(status);
23
+ case 'empty': return chalk.dim(status);
24
+ default: return status;
25
+ }
26
+ }
27
+ export function createReviewCommand() {
28
+ const review = new Command('review')
29
+ .description('Review job verification status and page content');
30
+ review
31
+ .command('status <jobId>')
32
+ .description('Get verification status summary for a job')
33
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
34
+ .option('-w, --web', 'Open job review page in browser')
35
+ .action(async (jobId, options) => {
36
+ if (options.web) {
37
+ const url = `${getJobWebUrl(jobId)}/review`;
38
+ console.error(`Opening ${url} in your browser.`);
39
+ await openInBrowser(url);
40
+ return;
41
+ }
42
+ const tree = await withSpinner('Fetching verification status', () => get(`api/ocr/jobs/${jobId}/verification-tree`));
43
+ if (options.output === 'json') {
44
+ console.log(formatOutput(tree, 'json'));
45
+ return;
46
+ }
47
+ console.log(chalk.bold('Verification Status'));
48
+ console.log(chalk.dim('─'.repeat(50)));
49
+ console.log(chalk.bold('Job:'), jobId);
50
+ console.log(chalk.bold('Total Pages:'), tree.totalPages);
51
+ console.log();
52
+ console.log(chalk.bold('Summary:'));
53
+ console.log(` ${chalk.green('Complete:')} ${tree.summary.complete}`);
54
+ console.log(` ${chalk.yellow('Pending:')} ${tree.summary.pending}`);
55
+ console.log(` ${chalk.red('Flagged:')} ${tree.summary.flagged}`);
56
+ console.log(` ${chalk.magenta('Gap:')} ${tree.summary.gap}`);
57
+ console.log(` ${chalk.blue('Resolved:')} ${tree.summary.resolved}`);
58
+ if (tree.summary.stale > 0) {
59
+ console.log(` ${chalk.dim('Stale:')} ${tree.summary.stale}`);
60
+ }
61
+ });
62
+ review
63
+ .command('pages <jobId>')
64
+ .description('List pages with verification status')
65
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
66
+ .option('-s, --status <status>', 'Filter by status (complete, pending, flagged, gap)')
67
+ .action(async (jobId, options) => {
68
+ const tree = await withSpinner('Fetching pages', () => get(`api/ocr/jobs/${jobId}/verification-tree`));
69
+ let pages = tree.pages;
70
+ if (options.status) {
71
+ pages = pages.filter(p => p.status === options.status);
72
+ }
73
+ if (pages.length === 0) {
74
+ console.log(chalk.dim('No pages found'));
75
+ return;
76
+ }
77
+ if (options.output === 'json') {
78
+ console.log(formatOutput(pages, 'json'));
79
+ return;
80
+ }
81
+ const formatted = pages.map(p => ({
82
+ ...p,
83
+ status: formatStatus(p.status),
84
+ resolution: p.resolution || chalk.dim('-'),
85
+ hasOcr: p.hasOcr ? chalk.green('✓') : chalk.dim('✗'),
86
+ }));
87
+ console.log(formatOutput(formatted, 'table', PAGE_COLUMNS));
88
+ console.log(chalk.dim(`\n${pages.length} pages`));
89
+ });
90
+ review
91
+ .command('page <jobId> <pageNum>')
92
+ .description('Get page content (markdown and OCR blocks)')
93
+ .option('-o, --output <format>', 'Output format (markdown, json)', 'markdown')
94
+ .option('--ocr', 'Show OCR blocks instead of markdown')
95
+ .option('--raw', 'Output raw content without formatting')
96
+ .action(async (jobId, pageNum, options) => {
97
+ const page = await withSpinner('Fetching page content', () => get(`api/ocr/jobs/${jobId}/pages/${pageNum}`));
98
+ if (options.output === 'json') {
99
+ console.log(formatOutput(page, 'json'));
100
+ return;
101
+ }
102
+ if (options.ocr) {
103
+ if (!page.blocks || page.blocks.length === 0) {
104
+ console.log(chalk.dim('No OCR blocks available'));
105
+ return;
106
+ }
107
+ if (options.raw) {
108
+ for (const block of page.blocks) {
109
+ console.log(block.text);
110
+ }
111
+ return;
112
+ }
113
+ console.log(chalk.bold(`OCR Blocks - Page ${pageNum}`));
114
+ console.log(chalk.dim('─'.repeat(50)));
115
+ for (let i = 0; i < page.blocks.length; i++) {
116
+ const block = page.blocks[i];
117
+ const conf = block.confidence !== undefined ? ` (${(block.confidence * 100).toFixed(0)}%)` : '';
118
+ console.log(chalk.cyan(`[${i + 1}]${conf}`), block.text);
119
+ }
120
+ console.log(chalk.dim(`\n${page.blocks.length} blocks`));
121
+ return;
122
+ }
123
+ if (options.raw) {
124
+ console.log(page.content);
125
+ return;
126
+ }
127
+ console.log(chalk.bold(`Page ${pageNum} Content`));
128
+ console.log(chalk.dim('─'.repeat(50)));
129
+ console.log(page.content);
130
+ console.log();
131
+ console.log(chalk.dim(`Version: ${page.version}`));
132
+ if (page.dimension) {
133
+ console.log(chalk.dim(`Dimension: ${page.dimension.width}x${page.dimension.height}`));
134
+ }
135
+ if (page.blocks) {
136
+ console.log(chalk.dim(`OCR Blocks: ${page.blocks.length}`));
137
+ }
138
+ });
139
+ review
140
+ .command('resolve <jobId> <pageNum>')
141
+ .description('Mark a page as reviewed')
142
+ .option('-r, --resolution <type>', 'Resolution type (reviewed, skipped, flagged)', 'reviewed')
143
+ .option('-n, --note <text>', 'Add a note to the resolution')
144
+ .action(async (jobId, pageNum, options) => {
145
+ try {
146
+ await withSpinner(`Resolving page ${pageNum}`, () => post(`api/ocr/jobs/${jobId}/pages/${pageNum}/resolve`, {
147
+ resolution: options.resolution,
148
+ note: options.note,
149
+ }));
150
+ success(`Page ${pageNum} marked as ${options.resolution}`);
151
+ }
152
+ catch (err) {
153
+ if (err instanceof OkraApiError) {
154
+ error(err.message);
155
+ process.exit(err.exitCode);
156
+ }
157
+ throw err;
158
+ }
159
+ });
160
+ review
161
+ .command('history <jobId>')
162
+ .description('Get verification audit trail')
163
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
164
+ .option('-l, --limit <n>', 'Limit results', '20')
165
+ .option('-p, --page <n>', 'Filter by page number')
166
+ .action(async (jobId, options) => {
167
+ const params = { limit: options.limit };
168
+ if (options.page)
169
+ params.page = options.page;
170
+ const response = await withSpinner('Fetching history', () => get(`api/ocr/jobs/${jobId}/history`, params));
171
+ if (response.history.length === 0) {
172
+ console.log(chalk.dim('No history found'));
173
+ return;
174
+ }
175
+ if (options.output === 'json') {
176
+ console.log(formatOutput(response.history, 'json'));
177
+ return;
178
+ }
179
+ console.log(chalk.bold('Verification History'));
180
+ console.log(chalk.dim('─'.repeat(60)));
181
+ for (const entry of response.history) {
182
+ const page = entry.pageNumber ? `Page ${entry.pageNumber}` : '';
183
+ const entity = entry.entityType ? `${entry.entityType}` : '';
184
+ const target = [page, entity].filter(Boolean).join(' - ') || 'Job';
185
+ console.log(chalk.dim(formatDate(entry.createdAt)), chalk.cyan(entry.action), chalk.white(target), chalk.dim(`by ${entry.triggeredBy}`));
186
+ }
187
+ });
188
+ review
189
+ .command('entities <jobId>')
190
+ .description('List extracted entities (tables, figures, footnotes)')
191
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
192
+ .option('-t, --type <type>', 'Filter by type (tables, figures, footnotes, all)', 'all')
193
+ .option('-p, --page <n>', 'Filter by page number')
194
+ .action(async (jobId, options) => {
195
+ const params = { type: options.type };
196
+ if (options.page)
197
+ params.page = options.page;
198
+ const response = await withSpinner('Fetching entities', () => get(`api/ocr/jobs/${jobId}/entities`, params));
199
+ if (options.output === 'json') {
200
+ console.log(formatOutput(response, 'json'));
201
+ return;
202
+ }
203
+ console.log(chalk.bold('Entities'));
204
+ console.log(chalk.dim('─'.repeat(50)));
205
+ console.log(`Tables: ${response.counts.tables}`);
206
+ console.log(`Figures: ${response.counts.figures}`);
207
+ console.log(`Footnotes: ${response.counts.footnotes}`);
208
+ if (response.entities.length > 0) {
209
+ console.log();
210
+ for (const e of response.entities) {
211
+ const title = e.title ? ` - ${e.title.slice(0, 40)}${e.title.length > 40 ? '...' : ''}` : '';
212
+ console.log(` Page ${e.page}: ${chalk.cyan(e.type)}${title}`);
213
+ }
214
+ }
215
+ });
216
+ review
217
+ .command('tables <jobId>')
218
+ .description('List extracted tables with verification status')
219
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
220
+ .option('-p, --page <n>', 'Filter by page number')
221
+ .action(async (jobId, options) => {
222
+ const params = {};
223
+ if (options.page)
224
+ params.page = options.page;
225
+ const response = await withSpinner('Fetching tables', () => get(`api/ocr/jobs/${jobId}/tables`, params));
226
+ if (response.tables.length === 0) {
227
+ console.log(chalk.dim('No tables found'));
228
+ return;
229
+ }
230
+ if (options.output === 'json') {
231
+ console.log(formatOutput(response.tables, 'json'));
232
+ return;
233
+ }
234
+ const COLS = [
235
+ { key: 'id_short', header: 'ID', width: 10 },
236
+ { key: 'page_number', header: 'Page', width: 6 },
237
+ { key: 'status_fmt', header: 'Status', width: 12 },
238
+ { key: 'preview', header: 'Preview', width: 40 },
239
+ ];
240
+ const formatted = response.tables.map(t => ({
241
+ ...t,
242
+ id_short: t.id.slice(0, 8),
243
+ status_fmt: formatStatus(t.verification_status),
244
+ preview: t.markdown.replace(/\n/g, ' ').slice(0, 40) + (t.markdown.length > 40 ? '...' : ''),
245
+ }));
246
+ console.log(formatOutput(formatted, 'table', COLS));
247
+ console.log(chalk.dim(`\n${response.tables.length} tables`));
248
+ });
249
+ review
250
+ .command('open <jobId>')
251
+ .description('Open job review page in browser')
252
+ .action(async (jobId) => {
253
+ const url = `${getJobWebUrl(jobId)}/review`;
254
+ console.error(`Opening ${url} in your browser.`);
255
+ await openInBrowser(url);
256
+ });
257
+ review
258
+ .command('save <jobId> <pageNum>')
259
+ .description('Save/update page markdown content')
260
+ .option('-f, --file <path>', 'Read content from file')
261
+ .option('-c, --content <text>', 'Content to save (use - for stdin)')
262
+ .action(async (jobId, pageNum, options) => {
263
+ let content;
264
+ if (options.file) {
265
+ if (!existsSync(options.file)) {
266
+ error(`File not found: ${options.file}`);
267
+ process.exit(EXIT_CODES.INVALID_ARGS);
268
+ }
269
+ content = readFileSync(options.file, 'utf-8');
270
+ }
271
+ else if (options.content) {
272
+ if (options.content === '-') {
273
+ const chunks = [];
274
+ for await (const chunk of process.stdin) {
275
+ chunks.push(chunk);
276
+ }
277
+ content = Buffer.concat(chunks).toString('utf-8');
278
+ }
279
+ else {
280
+ content = options.content;
281
+ }
282
+ }
283
+ else {
284
+ error('Either --file or --content is required');
285
+ process.exit(EXIT_CODES.INVALID_ARGS);
286
+ }
287
+ try {
288
+ const result = await withSpinner(`Saving page ${pageNum}`, () => patch(`api/ocr/jobs/${jobId}/pages/${pageNum}`, { content }));
289
+ success(`Page ${pageNum} saved (version ${result.version})`);
290
+ }
291
+ catch (err) {
292
+ if (err instanceof OkraApiError) {
293
+ error(err.message);
294
+ process.exit(err.exitCode);
295
+ }
296
+ throw err;
297
+ }
298
+ });
299
+ review
300
+ .command('versions <jobId> <pageNum>')
301
+ .description('List page content versions')
302
+ .option('-o, --output <format>', 'Output format (table, json)', getDefaultFormat())
303
+ .action(async (jobId, pageNum, options) => {
304
+ const response = await withSpinner('Fetching versions', () => get(`api/ocr/jobs/${jobId}/pages/${pageNum}/versions`));
305
+ if (response.versions.length === 0) {
306
+ console.log(chalk.dim('No versions found'));
307
+ return;
308
+ }
309
+ if (options.output === 'json') {
310
+ console.log(formatOutput(response.versions, 'json'));
311
+ return;
312
+ }
313
+ console.log(chalk.bold(`Page ${pageNum} Versions`));
314
+ console.log(chalk.dim('─'.repeat(50)));
315
+ for (const v of response.versions) {
316
+ console.log(` v${v.version} - ${formatDate(v.createdAt)} by ${v.createdBy}`);
317
+ }
318
+ });
319
+ review
320
+ .command('version <jobId> <pageNum> <version>')
321
+ .description('Get specific version of page content')
322
+ .option('-o, --output <format>', 'Output format (markdown, json)', 'markdown')
323
+ .option('--raw', 'Output raw content without formatting')
324
+ .action(async (jobId, pageNum, version, options) => {
325
+ const page = await withSpinner(`Fetching version ${version}`, () => get(`api/ocr/jobs/${jobId}/pages/${pageNum}/versions/${version}`));
326
+ if (options.output === 'json') {
327
+ console.log(formatOutput(page, 'json'));
328
+ return;
329
+ }
330
+ if (options.raw) {
331
+ console.log(page.content);
332
+ return;
333
+ }
334
+ console.log(chalk.bold(`Page ${pageNum} - Version ${version}`));
335
+ console.log(chalk.dim('─'.repeat(50)));
336
+ console.log(page.content);
337
+ });
338
+ review
339
+ .command('diff <jobId> <pageNum>')
340
+ .description('Show diff between current and previous version')
341
+ .option('--from <v>', 'Compare from version')
342
+ .option('--to <v>', 'Compare to version')
343
+ .action(async (jobId, pageNum, options) => {
344
+ const current = await get(`api/ocr/jobs/${jobId}/pages/${pageNum}`);
345
+ let previousVersion = (current.version || 1) - 1;
346
+ if (options.from)
347
+ previousVersion = parseInt(options.from);
348
+ if (previousVersion < 1) {
349
+ console.log(chalk.dim('No previous version to compare'));
350
+ return;
351
+ }
352
+ const previous = await get(`api/ocr/jobs/${jobId}/pages/${pageNum}/versions/${previousVersion}`);
353
+ console.log(chalk.bold(`Diff: v${previousVersion} → v${current.version}`));
354
+ console.log(chalk.dim('─'.repeat(50)));
355
+ const currentLines = current.content.split('\n');
356
+ const previousLines = previous.content.split('\n');
357
+ for (let i = 0; i < Math.max(currentLines.length, previousLines.length); i++) {
358
+ const curr = currentLines[i] ?? '';
359
+ const prev = previousLines[i] ?? '';
360
+ if (curr !== prev) {
361
+ if (prev)
362
+ console.log(chalk.red(`- ${prev}`));
363
+ if (curr)
364
+ console.log(chalk.green(`+ ${curr}`));
365
+ }
366
+ }
367
+ });
368
+ return review;
369
+ }
370
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
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
+ /**
9
+ * Create the 'extract' shortcut command
10
+ * okra extract <file> - Upload, create job, wait, return results
11
+ *
12
+ * Agent-friendly: Use -o json --quiet for clean JSON output
13
+ */
14
+ export declare function createExtractCommand(): Command;
15
+ /**
16
+ * Create the 'run' shortcut command
17
+ * okra run <file> "<query>" - Upload, chat, return result
18
+ */
19
+ export declare function createRunCommand(): Command;
20
+ //# sourceMappingURL=shortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../../src/commands/shortcuts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CA6M9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAsF1C"}