@okrapdf/cli 0.1.8 → 0.2.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.
Files changed (50) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +13 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auth.d.ts.map +1 -1
  5. package/dist/commands/auth.js +104 -24
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/docs.d.ts.map +1 -1
  8. package/dist/commands/docs.js +29 -5
  9. package/dist/commands/docs.js.map +1 -1
  10. package/dist/commands/entities.d.ts +8 -0
  11. package/dist/commands/entities.d.ts.map +1 -0
  12. package/dist/commands/entities.js +243 -0
  13. package/dist/commands/entities.js.map +1 -0
  14. package/dist/commands/jobs.d.ts.map +1 -1
  15. package/dist/commands/jobs.js +35 -6
  16. package/dist/commands/jobs.js.map +1 -1
  17. package/dist/commands/logs.d.ts.map +1 -1
  18. package/dist/commands/logs.js +28 -6
  19. package/dist/commands/logs.js.map +1 -1
  20. package/dist/commands/processors.d.ts.map +1 -1
  21. package/dist/commands/processors.js +34 -11
  22. package/dist/commands/processors.js.map +1 -1
  23. package/dist/commands/providers.d.ts.map +1 -1
  24. package/dist/commands/providers.js +14 -3
  25. package/dist/commands/providers.js.map +1 -1
  26. package/dist/commands/review.d.ts.map +1 -1
  27. package/dist/commands/review.js +103 -25
  28. package/dist/commands/review.js.map +1 -1
  29. package/dist/commands/shortcuts.d.ts.map +1 -1
  30. package/dist/commands/shortcuts.js +66 -5
  31. package/dist/commands/shortcuts.js.map +1 -1
  32. package/dist/commands/tables.d.ts.map +1 -1
  33. package/dist/commands/tables.js +32 -5
  34. package/dist/commands/tables.js.map +1 -1
  35. package/dist/commands/templates.d.ts.map +1 -1
  36. package/dist/commands/templates.js +74 -15
  37. package/dist/commands/templates.js.map +1 -1
  38. package/dist/lib/config.d.ts +4 -0
  39. package/dist/lib/config.d.ts.map +1 -1
  40. package/dist/lib/config.js +6 -0
  41. package/dist/lib/config.js.map +1 -1
  42. package/dist/lib/pdf-image.d.ts +118 -0
  43. package/dist/lib/pdf-image.d.ts.map +1 -0
  44. package/dist/lib/pdf-image.js +236 -0
  45. package/dist/lib/pdf-image.js.map +1 -0
  46. package/dist/lib/workspace.d.ts +59 -0
  47. package/dist/lib/workspace.d.ts.map +1 -0
  48. package/dist/lib/workspace.js +185 -0
  49. package/dist/lib/workspace.js.map +1 -0
  50. package/package.json +5 -1
@@ -0,0 +1,236 @@
1
+ /**
2
+ * PDF to Image utilities for CLI
3
+ *
4
+ * Uses mupdf for PDF rendering and sharp for image processing.
5
+ * This module is self-contained and doesn't depend on any APIs.
6
+ */
7
+ // Dynamic imports for optional dependencies
8
+ let mupdfModule = null;
9
+ let sharpFn = null;
10
+ async function getMupdf() {
11
+ if (!mupdfModule) {
12
+ try {
13
+ mupdfModule = await import('mupdf');
14
+ }
15
+ catch {
16
+ throw new Error('mupdf is required for image export. Install it with: npm install mupdf');
17
+ }
18
+ }
19
+ return mupdfModule;
20
+ }
21
+ async function getSharp() {
22
+ if (!sharpFn) {
23
+ try {
24
+ const mod = await import('sharp');
25
+ // Handle both ESM default export and CJS module.exports
26
+ sharpFn = (mod.default || mod);
27
+ }
28
+ catch {
29
+ throw new Error('sharp is required for image export. Install it with: npm install sharp');
30
+ }
31
+ }
32
+ return sharpFn;
33
+ }
34
+ /**
35
+ * Normalize bbox to x/y/width/height format
36
+ */
37
+ function normalizeBbox(bbox) {
38
+ if ('xmin' in bbox) {
39
+ return {
40
+ x: bbox.xmin,
41
+ y: bbox.ymin,
42
+ width: bbox.xmax - bbox.xmin,
43
+ height: bbox.ymax - bbox.ymin,
44
+ };
45
+ }
46
+ return bbox;
47
+ }
48
+ /**
49
+ * PDF Image Renderer
50
+ *
51
+ * Renders PDF pages to images and crops regions based on bounding boxes.
52
+ * Includes page caching to avoid redundant renders when extracting multiple
53
+ * regions from the same page.
54
+ */
55
+ export class PdfImageRenderer {
56
+ document; // mupdf.Document
57
+ pdfBuffer;
58
+ /** Cache key: `${pageNumber}-${scale}` */
59
+ pageCache = new Map();
60
+ constructor(pdfBuffer, document) {
61
+ this.pdfBuffer = pdfBuffer;
62
+ this.document = document;
63
+ }
64
+ /**
65
+ * Create a renderer from a PDF buffer
66
+ */
67
+ static async fromBuffer(pdfBuffer) {
68
+ const mupdf = await getMupdf();
69
+ const document = mupdf.Document.openDocument(pdfBuffer, 'application/pdf');
70
+ return new PdfImageRenderer(pdfBuffer, document);
71
+ }
72
+ /**
73
+ * Create a renderer from a PDF file path
74
+ */
75
+ static async fromFile(filePath) {
76
+ const fs = await import('fs/promises');
77
+ const buffer = await fs.readFile(filePath);
78
+ return PdfImageRenderer.fromBuffer(buffer);
79
+ }
80
+ /**
81
+ * Get the number of pages in the PDF
82
+ */
83
+ getPageCount() {
84
+ return this.document.countPages();
85
+ }
86
+ /**
87
+ * Get a cached page render, or render and cache it.
88
+ * Always renders as PNG for lossless cropping operations.
89
+ */
90
+ async getCachedPage(pageNumber, scale) {
91
+ const cacheKey = `${pageNumber}-${scale}`;
92
+ const cached = this.pageCache.get(cacheKey);
93
+ if (cached) {
94
+ return cached;
95
+ }
96
+ const sharp = await getSharp();
97
+ // mupdf uses 0-based page index
98
+ const pageIndex = pageNumber - 1;
99
+ if (pageIndex < 0 || pageIndex >= this.getPageCount()) {
100
+ throw new Error(`Invalid page number: ${pageNumber}. PDF has ${this.getPageCount()} pages.`);
101
+ }
102
+ const page = this.document.loadPage(pageIndex);
103
+ const bounds = page.getBounds();
104
+ const pageWidth = bounds[2] - bounds[0];
105
+ const pageHeight = bounds[3] - bounds[1];
106
+ // Render at scaled resolution
107
+ const pixmap = page.toPixmap([scale, 0, 0, scale, 0, 0], // transformation matrix for scaling
108
+ mupdfModule.ColorSpace.DeviceRGB, false, // no alpha
109
+ true // annotations
110
+ );
111
+ const pngData = pixmap.asPNG();
112
+ const buffer = Buffer.from(pngData);
113
+ const metadata = await sharp(buffer).metadata();
114
+ const result = {
115
+ buffer,
116
+ width: metadata.width || Math.round(pageWidth * scale),
117
+ height: metadata.height || Math.round(pageHeight * scale),
118
+ };
119
+ this.pageCache.set(cacheKey, result);
120
+ return result;
121
+ }
122
+ /**
123
+ * Render a full page to an image
124
+ */
125
+ async renderPage(pageNumber, options = {}) {
126
+ const { format = 'png', quality = 90, scale = 2 } = options;
127
+ const sharp = await getSharp();
128
+ const cached = await this.getCachedPage(pageNumber, scale);
129
+ // Convert to desired format
130
+ let pipeline = sharp(cached.buffer);
131
+ if (format === 'jpg') {
132
+ pipeline = pipeline.jpeg({ quality });
133
+ }
134
+ else {
135
+ pipeline = pipeline.png();
136
+ }
137
+ const buffer = await pipeline.toBuffer();
138
+ return {
139
+ buffer,
140
+ width: cached.width,
141
+ height: cached.height,
142
+ format,
143
+ };
144
+ }
145
+ /**
146
+ * Render a cropped region from a page
147
+ */
148
+ async renderRegion(pageNumber, bbox, options = {}) {
149
+ const { format = 'png', quality = 90, scale = 2, padding = 0 } = options;
150
+ const sharp = await getSharp();
151
+ const normalizedBbox = normalizeBbox(bbox);
152
+ // Get cached page render (or render and cache)
153
+ const fullPage = await this.getCachedPage(pageNumber, scale);
154
+ // Calculate crop coordinates in pixels
155
+ const cropX = Math.max(0, Math.floor(normalizedBbox.x * fullPage.width) - padding);
156
+ const cropY = Math.max(0, Math.floor(normalizedBbox.y * fullPage.height) - padding);
157
+ const cropWidth = Math.min(fullPage.width - cropX, Math.ceil(normalizedBbox.width * fullPage.width) + padding * 2);
158
+ const cropHeight = Math.min(fullPage.height - cropY, Math.ceil(normalizedBbox.height * fullPage.height) + padding * 2);
159
+ // Crop the region
160
+ let pipeline = sharp(fullPage.buffer).extract({
161
+ left: cropX,
162
+ top: cropY,
163
+ width: cropWidth,
164
+ height: cropHeight,
165
+ });
166
+ // Convert to desired format
167
+ if (format === 'jpg') {
168
+ pipeline = pipeline.jpeg({ quality });
169
+ }
170
+ else {
171
+ pipeline = pipeline.png();
172
+ }
173
+ const buffer = await pipeline.toBuffer();
174
+ const metadata = await sharp(buffer).metadata();
175
+ return {
176
+ buffer,
177
+ width: metadata.width || cropWidth,
178
+ height: metadata.height || cropHeight,
179
+ format,
180
+ };
181
+ }
182
+ /**
183
+ * Clear the page cache to free memory
184
+ */
185
+ clearCache() {
186
+ this.pageCache.clear();
187
+ }
188
+ /**
189
+ * Get cache statistics
190
+ */
191
+ getCacheStats() {
192
+ let estimatedBytes = 0;
193
+ for (const page of this.pageCache.values()) {
194
+ estimatedBytes += page.buffer.length;
195
+ }
196
+ return {
197
+ pages: this.pageCache.size,
198
+ estimatedBytes,
199
+ };
200
+ }
201
+ /**
202
+ * Close the document and free resources
203
+ */
204
+ close() {
205
+ // Clear the page cache
206
+ this.pageCache.clear();
207
+ // mupdf handles cleanup automatically via garbage collection
208
+ // but we can help by clearing references
209
+ this.document = null;
210
+ }
211
+ }
212
+ /**
213
+ * Convenience function to render a region from a PDF file
214
+ */
215
+ export async function renderPdfRegion(pdfPath, pageNumber, bbox, options = {}) {
216
+ const renderer = await PdfImageRenderer.fromFile(pdfPath);
217
+ try {
218
+ return await renderer.renderRegion(pageNumber, bbox, options);
219
+ }
220
+ finally {
221
+ renderer.close();
222
+ }
223
+ }
224
+ /**
225
+ * Convenience function to render a region from a PDF buffer
226
+ */
227
+ export async function renderPdfRegionFromBuffer(pdfBuffer, pageNumber, bbox, options = {}) {
228
+ const renderer = await PdfImageRenderer.fromBuffer(pdfBuffer);
229
+ try {
230
+ return await renderer.renderRegion(pageNumber, bbox, options);
231
+ }
232
+ finally {
233
+ renderer.close();
234
+ }
235
+ }
236
+ //# sourceMappingURL=pdf-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-image.js","sourceRoot":"","sources":["../../src/lib/pdf-image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Agentic Workspace Export
3
+ *
4
+ * Creates a structured workspace directory for AI agents to consume.
5
+ * Outputs JSON manifest to stdout for piping to agents.
6
+ */
7
+ import type { JobResults } from '../types.js';
8
+ /**
9
+ * Workspace manifest for agents
10
+ */
11
+ export interface WorkspaceManifest {
12
+ version: string;
13
+ job_id: string;
14
+ working_dir: string;
15
+ source: {
16
+ filename: string;
17
+ pages: number;
18
+ file_size_bytes?: number;
19
+ };
20
+ assets: {
21
+ tables: {
22
+ count: number;
23
+ csv_files: string[];
24
+ json_file: string;
25
+ };
26
+ text: {
27
+ markdown: string;
28
+ per_page: string[];
29
+ };
30
+ images?: {
31
+ pages: string[];
32
+ figures: string[];
33
+ };
34
+ };
35
+ processing: {
36
+ created_at: string;
37
+ cli_version: string;
38
+ };
39
+ }
40
+ /**
41
+ * Options for workspace creation
42
+ */
43
+ export interface WorkspaceOptions {
44
+ /** Include page images and figure crops */
45
+ includeImages?: boolean;
46
+ /** Image scale factor (1-4) */
47
+ scale?: number;
48
+ /** Image format */
49
+ imageFormat?: 'png' | 'jpg';
50
+ /** PDF buffer for image rendering */
51
+ pdfBuffer?: Buffer;
52
+ /** Original PDF path to copy */
53
+ pdfPath?: string;
54
+ }
55
+ /**
56
+ * Create an agentic workspace directory structure
57
+ */
58
+ export declare function createAgenticWorkspace(outputDir: string, results: JobResults, options?: WorkspaceOptions): Promise<WorkspaceManifest>;
59
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/lib/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAG3D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE;YACN,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,EAAE,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,IAAI,EAAE;YACJ,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,OAAO,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;KACH,CAAC;IACF,UAAU,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC5B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAwH5B"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Agentic Workspace Export
3
+ *
4
+ * Creates a structured workspace directory for AI agents to consume.
5
+ * Outputs JSON manifest to stdout for piping to agents.
6
+ */
7
+ import { mkdirSync, writeFileSync } from 'fs';
8
+ import { join, resolve } from 'path';
9
+ /**
10
+ * Create an agentic workspace directory structure
11
+ */
12
+ export async function createAgenticWorkspace(outputDir, results, options = {}) {
13
+ const dir = resolve(outputDir);
14
+ const { includeImages = false, scale = 2, imageFormat = 'png' } = options;
15
+ // Normalize results - handle both API formats
16
+ // API returns: { results: { tables: [], text: [] } }
17
+ // Type expects: { tables: [], pages: [] }
18
+ const rawResults = results;
19
+ const tables = results.tables || rawResults.results?.tables || [];
20
+ const pages = results.pages || (rawResults.results?.text || []).map((t) => ({
21
+ page_number: t.page,
22
+ text: t.content,
23
+ entities: [],
24
+ }));
25
+ // Create directory structure
26
+ mkdirSync(dir, { recursive: true });
27
+ mkdirSync(join(dir, 'tables'), { recursive: true });
28
+ mkdirSync(join(dir, 'text'), { recursive: true });
29
+ if (includeImages) {
30
+ mkdirSync(join(dir, 'pages'), { recursive: true });
31
+ mkdirSync(join(dir, 'figures'), { recursive: true });
32
+ }
33
+ const manifest = {
34
+ version: '1.0',
35
+ job_id: results.job_id,
36
+ working_dir: dir,
37
+ source: {
38
+ filename: results.filename,
39
+ pages: results.total_pages,
40
+ },
41
+ assets: {
42
+ tables: {
43
+ count: tables.length,
44
+ csv_files: [],
45
+ json_file: 'tables/all_tables.json',
46
+ },
47
+ text: {
48
+ markdown: 'text/full_text.md',
49
+ per_page: [],
50
+ },
51
+ },
52
+ processing: {
53
+ created_at: new Date().toISOString(),
54
+ cli_version: '0.2.0',
55
+ },
56
+ };
57
+ // Write tables as CSV and JSON
58
+ const tablesJson = [];
59
+ for (let i = 0; i < tables.length; i++) {
60
+ const table = tables[i];
61
+ const csvFilename = `table_${String(i + 1).padStart(3, '0')}_p${table.page_number}.csv`;
62
+ const csvPath = join(dir, 'tables', csvFilename);
63
+ // Convert markdown table to CSV
64
+ const csv = markdownTableToCsv(table.content_markdown);
65
+ writeFileSync(csvPath, csv, 'utf-8');
66
+ manifest.assets.tables.csv_files.push(`tables/${csvFilename}`);
67
+ tablesJson.push({
68
+ id: table.id,
69
+ page: table.page_number,
70
+ markdown: table.content_markdown,
71
+ rows: parseMarkdownTableRows(table.content_markdown),
72
+ });
73
+ }
74
+ // Write combined tables JSON
75
+ writeFileSync(join(dir, 'tables', 'all_tables.json'), JSON.stringify(tablesJson, null, 2), 'utf-8');
76
+ // Write text files
77
+ const fullTextParts = [];
78
+ for (const page of pages) {
79
+ const pageFilename = `page_${String(page.page_number).padStart(3, '0')}.md`;
80
+ const pagePath = join(dir, 'text', pageFilename);
81
+ const pageContent = `# Page ${page.page_number}\n\n${page.text}`;
82
+ writeFileSync(pagePath, pageContent, 'utf-8');
83
+ manifest.assets.text.per_page.push(`text/${pageFilename}`);
84
+ fullTextParts.push(`## Page ${page.page_number}\n\n${page.text}`);
85
+ }
86
+ // Write full text markdown
87
+ const fullText = `# ${results.filename}\n\nExtracted text from ${results.total_pages} pages.\n\n---\n\n${fullTextParts.join('\n\n---\n\n')}`;
88
+ writeFileSync(join(dir, 'text', 'full_text.md'), fullText, 'utf-8');
89
+ // Render images if requested
90
+ if (includeImages && options.pdfBuffer) {
91
+ const imageAssets = await renderWorkspaceImages(dir, options.pdfBuffer, results.total_pages, tables, { scale, format: imageFormat });
92
+ manifest.assets.images = imageAssets;
93
+ }
94
+ // Write manifest
95
+ writeFileSync(join(dir, 'manifest.json'), JSON.stringify(manifest, null, 2), 'utf-8');
96
+ return manifest;
97
+ }
98
+ /**
99
+ * Render page images and figure crops
100
+ */
101
+ async function renderWorkspaceImages(dir, pdfBuffer, totalPages, tables, options) {
102
+ const { PdfImageRenderer } = await import('./pdf-image.js');
103
+ const renderer = await PdfImageRenderer.fromBuffer(pdfBuffer);
104
+ const pageImages = [];
105
+ const figures = [];
106
+ try {
107
+ // Render full page images
108
+ for (let pageNum = 1; pageNum <= totalPages; pageNum++) {
109
+ const filename = `page_${String(pageNum).padStart(3, '0')}.${options.format}`;
110
+ const image = await renderer.renderPage(pageNum, {
111
+ format: options.format,
112
+ scale: options.scale,
113
+ });
114
+ writeFileSync(join(dir, 'pages', filename), image.buffer);
115
+ pageImages.push(`pages/${filename}`);
116
+ }
117
+ // Render figure/table crops from entities with bboxes
118
+ let figureIndex = 1;
119
+ for (const table of tables) {
120
+ if (table.bbox) {
121
+ const filename = `table_${String(figureIndex).padStart(3, '0')}_p${table.page_number}.${options.format}`;
122
+ const image = await renderer.renderRegion(table.page_number, table.bbox, {
123
+ format: options.format,
124
+ scale: options.scale,
125
+ padding: 10,
126
+ });
127
+ writeFileSync(join(dir, 'figures', filename), image.buffer);
128
+ figures.push(`figures/${filename}`);
129
+ figureIndex++;
130
+ }
131
+ }
132
+ }
133
+ finally {
134
+ renderer.close();
135
+ }
136
+ return { pages: pageImages, figures };
137
+ }
138
+ /**
139
+ * Convert markdown table to CSV
140
+ */
141
+ function markdownTableToCsv(markdown) {
142
+ const lines = markdown.trim().split('\n');
143
+ const csvLines = [];
144
+ for (const line of lines) {
145
+ // Skip separator lines (|---|---|)
146
+ if (line.match(/^\|[\s-:|]+\|$/))
147
+ continue;
148
+ // Parse table row
149
+ if (line.startsWith('|') && line.endsWith('|')) {
150
+ const cells = line
151
+ .slice(1, -1) // Remove leading/trailing |
152
+ .split('|')
153
+ .map(cell => {
154
+ const trimmed = cell.trim();
155
+ // Escape quotes and wrap in quotes if contains comma/quote/newline
156
+ if (trimmed.includes(',') || trimmed.includes('"') || trimmed.includes('\n')) {
157
+ return `"${trimmed.replace(/"/g, '""')}"`;
158
+ }
159
+ return trimmed;
160
+ });
161
+ csvLines.push(cells.join(','));
162
+ }
163
+ }
164
+ return csvLines.join('\n');
165
+ }
166
+ /**
167
+ * Parse markdown table into rows array
168
+ */
169
+ function parseMarkdownTableRows(markdown) {
170
+ const lines = markdown.trim().split('\n');
171
+ const rows = [];
172
+ for (const line of lines) {
173
+ if (line.match(/^\|[\s-:|]+\|$/))
174
+ continue;
175
+ if (line.startsWith('|') && line.endsWith('|')) {
176
+ const cells = line
177
+ .slice(1, -1)
178
+ .split('|')
179
+ .map(cell => cell.trim());
180
+ rows.push(cells);
181
+ }
182
+ }
183
+ return rows;
184
+ }
185
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/lib/workspace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@okrapdf/cli",
3
- "version": "0.1.8",
3
+ "version": "0.2.0",
4
4
  "description": "OkraPDF command-line interface for PDF extraction and document chat",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,6 +56,10 @@
56
56
  "ora": "^8.0.1",
57
57
  "ws": "^8.18.0"
58
58
  },
59
+ "optionalDependencies": {
60
+ "mupdf": "^0.3.0",
61
+ "sharp": "^0.33.5"
62
+ },
59
63
  "devDependencies": {
60
64
  "@types/node": "^20.14.0",
61
65
  "@types/ws": "^8.5.12",