@framers/agentos-ext-cli-executor 1.2.0 → 1.3.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 (42) hide show
  1. package/LICENSE +96 -21
  2. package/README.md +130 -0
  3. package/dist/index.d.ts +6 -6
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +11 -10
  6. package/dist/index.js.map +1 -1
  7. package/dist/services/shellService.d.ts +10 -0
  8. package/dist/services/shellService.d.ts.map +1 -1
  9. package/dist/services/shellService.js +33 -0
  10. package/dist/services/shellService.js.map +1 -1
  11. package/dist/tools/{createPdf.d.ts → createDocument.d.ts} +13 -10
  12. package/dist/tools/createDocument.d.ts.map +1 -0
  13. package/dist/tools/createDocument.js +201 -0
  14. package/dist/tools/createDocument.js.map +1 -0
  15. package/dist/tools/createSpreadsheet.d.ts +35 -0
  16. package/dist/tools/createSpreadsheet.d.ts.map +1 -0
  17. package/dist/tools/createSpreadsheet.js +185 -0
  18. package/dist/tools/createSpreadsheet.js.map +1 -0
  19. package/dist/tools/execute.d.ts.map +1 -1
  20. package/dist/tools/execute.js +1 -0
  21. package/dist/tools/execute.js.map +1 -1
  22. package/dist/tools/fileRead.d.ts.map +1 -1
  23. package/dist/tools/fileRead.js +1 -0
  24. package/dist/tools/fileRead.js.map +1 -1
  25. package/dist/tools/fileWrite.d.ts.map +1 -1
  26. package/dist/tools/fileWrite.js +14 -1
  27. package/dist/tools/fileWrite.js.map +1 -1
  28. package/dist/tools/listDir.d.ts.map +1 -1
  29. package/dist/tools/listDir.js +1 -0
  30. package/dist/tools/listDir.js.map +1 -1
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/types.js +1 -0
  33. package/dist/types.js.map +1 -1
  34. package/manifest.json +17 -3
  35. package/package.json +14 -8
  36. package/dist/tools/createPdf.d.ts.map +0 -1
  37. package/dist/tools/createPdf.js +0 -215
  38. package/dist/tools/createPdf.js.map +0 -1
  39. package/dist/tools/readDocument.d.ts +0 -41
  40. package/dist/tools/readDocument.d.ts.map +0 -1
  41. package/dist/tools/readDocument.js +0 -252
  42. package/dist/tools/readDocument.js.map +0 -1
package/manifest.json CHANGED
@@ -2,12 +2,12 @@
2
2
  "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
3
  "id": "com.framers.system.cli-executor",
4
4
  "name": "CLI Executor Extension",
5
- "version": "1.2.0",
5
+ "version": "1.3.0",
6
6
  "description": "Execute shell commands and manage files for AgentOS agents",
7
7
  "author": {
8
8
  "name": "Frame.dev",
9
9
  "email": "support@frame.dev",
10
- "url": "https://github.com/framersai"
10
+ "url": "https://github.com/framerslab"
11
11
  },
12
12
  "license": "MIT",
13
13
  "keywords": ["cli", "shell", "command", "execute", "terminal", "bash", "powershell", "script"],
@@ -15,7 +15,7 @@
15
15
  "categories": ["system", "automation", "development"],
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "https://github.com/framersai/agentos-extensions"
18
+ "url": "https://github.com/framerslab/agentos-extensions"
19
19
  },
20
20
  "extensions": [
21
21
  {
@@ -53,6 +53,20 @@
53
53
  "description": "Create a real PDF document from text content",
54
54
  "entry": "./dist/tools/createPdf.js"
55
55
  },
56
+ {
57
+ "kind": "tool",
58
+ "id": "create_spreadsheet",
59
+ "displayName": "Create Spreadsheet",
60
+ "description": "Create an Excel (.xlsx) or CSV file from structured data",
61
+ "entry": "./dist/tools/createSpreadsheet.js"
62
+ },
63
+ {
64
+ "kind": "tool",
65
+ "id": "create_document",
66
+ "displayName": "Create Document",
67
+ "description": "Create a Word document (.docx) from text or markdown",
68
+ "entry": "./dist/tools/createDocument.js"
69
+ },
56
70
  {
57
71
  "kind": "tool",
58
72
  "id": "read_document",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/agentos-ext-cli-executor",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "CLI executor extension for AgentOS - execute shell commands and manage files",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,26 +39,32 @@
39
39
  "license": "MIT",
40
40
  "repository": {
41
41
  "type": "git",
42
- "url": "https://github.com/framersai/agentos-extensions",
42
+ "url": "git+https://github.com/framerslab/agentos-extensions.git",
43
43
  "directory": "registry/curated/system/cli-executor"
44
44
  },
45
45
  "dependencies": {
46
- "xlsx": "^0.18.5",
46
+ "docx": "^9.0.2",
47
47
  "mammoth": "^1.8.0",
48
- "pdf-parse": "^1.1.1"
48
+ "pdf-parse": "^1.1.1",
49
+ "xlsx": "^0.18.5"
49
50
  },
50
51
  "peerDependencies": {
51
- "@framers/agentos": "^0.1.0"
52
+ "@framers/agentos": ">=0.10.40"
52
53
  },
53
54
  "devDependencies": {
54
55
  "@types/node": "^20.0.0",
56
+ "jszip": "^3.10.1",
55
57
  "typescript": "^5.4.0",
56
- "vitest": "^1.6.0",
57
- "@framers/agentos": "0.1.6"
58
+ "vitest": "^3.2.7",
59
+ "@framers/agentos": "^0.10.40"
60
+ },
61
+ "homepage": "https://github.com/framerslab/agentos-extensions/tree/master/registry/curated/system/cli-executor#readme",
62
+ "bugs": {
63
+ "url": "https://github.com/framerslab/agentos-extensions/issues"
58
64
  },
59
65
  "scripts": {
60
66
  "build": "tsc",
61
- "test": "vitest run",
67
+ "test": "vitest run --passWithNoTests",
62
68
  "test:watch": "vitest",
63
69
  "clean": "rm -rf dist"
64
70
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"createPdf.d.ts","sourceRoot":"","sources":["../../src/tools/createPdf.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA8K3G,qBAAa,aAAc,YAAW,KAAK;IACzC,SAAgB,EAAE,uBAAuB;IACzC,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,WAAW,gBAAgB;IAC3C,SAAgB,WAAW,qHACyF;IACpH,SAAgB,QAAQ,YAAY;IACpC,SAAgB,cAAc,QAAQ;IAEtC,SAAgB,WAAW,EAAE,gBAAgB,CA0B3C;IAEI,OAAO,CACX,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EACD,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA4B/E,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;CAM/E"}
@@ -1,215 +0,0 @@
1
- /**
2
- * Create PDF Tool
3
- * Generate real PDF files from text content.
4
- *
5
- * @module @framers/agentos-ext-cli-executor
6
- */
7
- import { mkdir, writeFile } from 'node:fs/promises';
8
- import { dirname, resolve } from 'node:path';
9
- /**
10
- * Generate a valid PDF 1.4 binary buffer from plain text content.
11
- *
12
- * Supports:
13
- * - Multi-page text layout with automatic pagination
14
- * - UTF-8 → WinAnsiEncoding (Latin-1 subset)
15
- * - Configurable margins, font size, page dimensions
16
- * - Document metadata (Title, Author, CreationDate)
17
- */
18
- function generatePdf(text, opts = {}) {
19
- const fontSize = opts.fontSize ?? 12;
20
- const margin = opts.margin ?? 72; // 1 inch
21
- const pageW = opts.pageWidth ?? 612; // US Letter
22
- const pageH = opts.pageHeight ?? 792;
23
- const lineHeight = fontSize * 1.4;
24
- const usableW = pageW - margin * 2;
25
- const usableH = pageH - margin * 2;
26
- const linesPerPage = Math.floor(usableH / lineHeight);
27
- // Approximate characters per line (Helvetica average ~0.5 * fontSize)
28
- const avgCharWidth = fontSize * 0.5;
29
- const charsPerLine = Math.floor(usableW / avgCharWidth);
30
- // Word-wrap text into lines
31
- const rawLines = text.split('\n');
32
- const wrapped = [];
33
- for (const raw of rawLines) {
34
- if (raw.length === 0) {
35
- wrapped.push('');
36
- continue;
37
- }
38
- let remaining = raw;
39
- while (remaining.length > 0) {
40
- if (remaining.length <= charsPerLine) {
41
- wrapped.push(remaining);
42
- break;
43
- }
44
- // Find last space within charsPerLine
45
- let breakAt = remaining.lastIndexOf(' ', charsPerLine);
46
- if (breakAt <= 0)
47
- breakAt = charsPerLine;
48
- wrapped.push(remaining.slice(0, breakAt));
49
- remaining = remaining.slice(breakAt).trimStart();
50
- }
51
- }
52
- // Paginate
53
- const pages = [];
54
- for (let i = 0; i < wrapped.length; i += linesPerPage) {
55
- pages.push(wrapped.slice(i, i + linesPerPage));
56
- }
57
- if (pages.length === 0)
58
- pages.push(['']);
59
- // ── Build PDF objects ──────────────────────────────────────────────────
60
- const objects = [];
61
- const offsets = [];
62
- let nextObj = 1;
63
- const addObj = (content) => {
64
- const id = nextObj++;
65
- objects.push(`${id} 0 obj\n${content}\nendobj\n`);
66
- return id;
67
- };
68
- // Escape PDF string: backslash, parens, non-ASCII → octal
69
- const pdfStr = (s) => {
70
- let out = '';
71
- for (let i = 0; i < s.length; i++) {
72
- const code = s.charCodeAt(i);
73
- const ch = s[i];
74
- if (ch === '\\' || ch === '(' || ch === ')') {
75
- out += '\\' + ch;
76
- }
77
- else if (code < 32 || code > 126) {
78
- // Replace non-printable / non-ASCII with '?'
79
- out += '?';
80
- }
81
- else {
82
- out += ch;
83
- }
84
- }
85
- return out;
86
- };
87
- // 1: Catalog
88
- const catalogId = addObj(`<< /Type /Catalog /Pages 2 0 R >>`);
89
- // 2: Pages (placeholder — will be rewritten)
90
- const pagesIdx = objects.length;
91
- addObj('PLACEHOLDER');
92
- // 3: Font
93
- const fontId = addObj(`<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >>`);
94
- // Create page objects + content streams
95
- const pageObjIds = [];
96
- for (const pageLines of pages) {
97
- // Build content stream
98
- const streamLines = [];
99
- streamLines.push('BT');
100
- streamLines.push(`/F1 ${fontSize} Tf`);
101
- // Start at top-left with margin
102
- let y = pageH - margin - fontSize;
103
- streamLines.push(`${margin} ${y.toFixed(1)} Td`);
104
- for (let i = 0; i < pageLines.length; i++) {
105
- if (i > 0) {
106
- streamLines.push(`0 ${(-lineHeight).toFixed(1)} Td`);
107
- }
108
- streamLines.push(`(${pdfStr(pageLines[i])}) Tj`);
109
- }
110
- streamLines.push('ET');
111
- const stream = streamLines.join('\n');
112
- const streamId = addObj(`<< /Length ${Buffer.byteLength(stream, 'latin1')} >>\nstream\n${stream}\nendstream`);
113
- const pageId = addObj(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageW} ${pageH}] ` +
114
- `/Contents ${streamId} 0 R /Resources << /Font << /F1 ${fontId} 0 R >> >> >>`);
115
- pageObjIds.push(pageId);
116
- }
117
- // Rewrite Pages object with correct Kids
118
- const kidsStr = pageObjIds.map((id) => `${id} 0 R`).join(' ');
119
- objects[pagesIdx] = `2 0 obj\n<< /Type /Pages /Kids [${kidsStr}] /Count ${pageObjIds.length} >> \nendobj\n`;
120
- // Info dictionary
121
- const now = new Date();
122
- const dateStr = `D:${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, '0')}${String(now.getDate()).padStart(2, '0')}`;
123
- const infoParts = [`/CreationDate (${dateStr})`];
124
- if (opts.title)
125
- infoParts.push(`/Title (${pdfStr(opts.title)})`);
126
- if (opts.author)
127
- infoParts.push(`/Author (${pdfStr(opts.author)})`);
128
- infoParts.push(`/Producer (Wunderland AgentOS)`);
129
- const infoId = addObj(`<< ${infoParts.join(' ')} >>`);
130
- // ── Serialize ──────────────────────────────────────────────────────────
131
- let pdf = '%PDF-1.4\n%\xE2\xE3\xCF\xD3\n';
132
- for (let i = 0; i < objects.length; i++) {
133
- offsets[i] = Buffer.byteLength(pdf, 'latin1');
134
- pdf += objects[i] + '\n';
135
- }
136
- const xrefOffset = Buffer.byteLength(pdf, 'latin1');
137
- pdf += `xref\n0 ${nextObj}\n`;
138
- pdf += '0000000000 65535 f \n';
139
- for (let i = 0; i < objects.length; i++) {
140
- pdf += `${String(offsets[i]).padStart(10, '0')} 00000 n \n`;
141
- }
142
- pdf += `trailer\n<< /Size ${nextObj} /Root ${catalogId} 0 R /Info ${infoId} 0 R >>\n`;
143
- pdf += `startxref\n${xrefOffset}\n%%EOF\n`;
144
- return Buffer.from(pdf, 'latin1');
145
- }
146
- // ── Tool ─────────────────────────────────────────────────────────────────────
147
- export class CreatePdfTool {
148
- id = 'cli-create-pdf-v1';
149
- name = 'create_pdf';
150
- displayName = 'Create PDF';
151
- description = 'Create a real PDF document from text content. Use this instead of file_write when the user asks for a PDF file.';
152
- category = 'system';
153
- hasSideEffects = true;
154
- inputSchema = {
155
- type: 'object',
156
- required: ['path', 'content'],
157
- properties: {
158
- path: {
159
- type: 'string',
160
- description: 'Output file path (should end in .pdf)',
161
- },
162
- content: {
163
- type: 'string',
164
- description: 'Text content to include in the PDF',
165
- },
166
- title: {
167
- type: 'string',
168
- description: 'PDF document title (metadata)',
169
- },
170
- author: {
171
- type: 'string',
172
- description: 'PDF document author (metadata)',
173
- },
174
- fontSize: {
175
- type: 'number',
176
- description: 'Font size in points (default: 12)',
177
- },
178
- },
179
- additionalProperties: false,
180
- };
181
- async execute(input, _context) {
182
- try {
183
- const outPath = resolve(input.path);
184
- const pdfBuffer = generatePdf(input.content, {
185
- title: input.title,
186
- author: input.author,
187
- fontSize: input.fontSize,
188
- });
189
- await mkdir(dirname(outPath), { recursive: true });
190
- await writeFile(outPath, pdfBuffer);
191
- // Count pages from the generated content
192
- const pageCount = (pdfBuffer.toString('latin1').match(/\/Type \/Page\b/g) || []).length;
193
- return {
194
- success: true,
195
- output: {
196
- path: outPath,
197
- pages: pageCount,
198
- bytes: pdfBuffer.length,
199
- },
200
- };
201
- }
202
- catch (error) {
203
- return { success: false, error: error.message };
204
- }
205
- }
206
- validateArgs(input) {
207
- const errors = [];
208
- if (!input.path || typeof input.path !== 'string')
209
- errors.push('path is required (string)');
210
- if (input.content === undefined || input.content === null)
211
- errors.push('content is required');
212
- return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
213
- }
214
- }
215
- //# sourceMappingURL=createPdf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createPdf.js","sourceRoot":"","sources":["../../src/tools/createPdf.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Read Document Tool
3
- * Extract text content from binary document formats (xlsx, csv, docx, pdf).
4
- *
5
- * @module @framers/agentos-ext-cli-executor
6
- */
7
- import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
8
- import type { ShellService } from '../services/shellService.js';
9
- import type { DocumentReadResult } from '../types.js';
10
- /**
11
- * Tool for reading binary document formats
12
- */
13
- export declare class ReadDocumentTool implements ITool {
14
- private shellService;
15
- readonly id = "cli-read-document-v1";
16
- /** Tool call name used by the LLM / ToolExecutor. */
17
- readonly name = "read_document";
18
- readonly displayName = "Read Document";
19
- readonly description: string;
20
- readonly category = "system";
21
- readonly hasSideEffects = false;
22
- readonly inputSchema: JSONSchemaObject;
23
- constructor(shellService: ShellService);
24
- /**
25
- * Read and parse a document
26
- */
27
- execute(input: {
28
- path: string;
29
- format?: string;
30
- sheet?: string;
31
- maxRows?: number;
32
- }, _context: ToolExecutionContext): Promise<ToolExecutionResult<DocumentReadResult>>;
33
- /**
34
- * Validate input
35
- */
36
- validateArgs(input: Record<string, any>): {
37
- isValid: boolean;
38
- errors?: any[];
39
- };
40
- }
41
- //# sourceMappingURL=readDocument.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readDocument.d.ts","sourceRoot":"","sources":["../../src/tools/readDocument.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA4JtD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,KAAK;IAwChC,OAAO,CAAC,YAAY;IAvChC,SAAgB,EAAE,0BAA0B;IAC5C,qDAAqD;IACrD,SAAgB,IAAI,mBAAmB;IACvC,SAAgB,WAAW,mBAAmB;IAC9C,SAAgB,WAAW,SAK+C;IAC1E,SAAgB,QAAQ,YAAY;IACpC,SAAgB,cAAc,SAAS;IAEvC,SAAgB,WAAW,EAAE,gBAAgB,CAwB3C;gBAEkB,YAAY,EAAE,YAAY;IAE9C;;OAEG;IACG,OAAO,CACX,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EACD,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAgEnD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;CAe/E"}
@@ -1,252 +0,0 @@
1
- /**
2
- * Read Document Tool
3
- * Extract text content from binary document formats (xlsx, csv, docx, pdf).
4
- *
5
- * @module @framers/agentos-ext-cli-executor
6
- */
7
- import { extname } from 'node:path';
8
- const EXTENSION_FORMAT_MAP = {
9
- '.xlsx': 'xlsx',
10
- '.xls': 'xlsx',
11
- '.csv': 'csv',
12
- '.tsv': 'csv',
13
- '.docx': 'docx',
14
- '.pdf': 'pdf',
15
- };
16
- /**
17
- * Escape pipe characters for markdown table cells.
18
- */
19
- function escapeCell(value) {
20
- if (value === null || value === undefined)
21
- return '';
22
- return String(value).replace(/\|/g, '\\|').replace(/\n/g, ' ');
23
- }
24
- /**
25
- * Convert sheet rows to a markdown table string.
26
- */
27
- function toMarkdownTable(headers, rows, sheetName, totalRows, maxRows) {
28
- const truncated = totalRows > maxRows;
29
- const countLabel = truncated
30
- ? `(showing ${maxRows} of ${totalRows} rows)`
31
- : `(${totalRows} rows)`;
32
- const lines = [];
33
- lines.push(`## Sheet: ${sheetName} ${countLabel}`);
34
- lines.push(`| ${headers.map(escapeCell).join(' | ')} |`);
35
- lines.push(`| ${headers.map(() => '---').join(' | ')} |`);
36
- for (const row of rows) {
37
- lines.push(`| ${row.map(escapeCell).join(' | ')} |`);
38
- }
39
- return lines.join('\n');
40
- }
41
- // ── Format-specific parsers ─────────────────────────────────────────────────
42
- async function parseXlsx(buffer, opts) {
43
- const XLSX = await import('xlsx');
44
- const workbook = XLSX.read(buffer, { type: 'buffer' });
45
- const sheetNames = opts.sheet
46
- ? workbook.SheetNames.filter((n) => n === opts.sheet)
47
- : workbook.SheetNames;
48
- if (opts.sheet && sheetNames.length === 0) {
49
- throw new Error(`Sheet "${opts.sheet}" not found. Available sheets: ${workbook.SheetNames.join(', ')}`);
50
- }
51
- const contentParts = [];
52
- const structuredSheets = [];
53
- for (const name of sheetNames) {
54
- const ws = workbook.Sheets[name];
55
- const jsonRows = XLSX.utils.sheet_to_json(ws, { header: 1 });
56
- if (jsonRows.length === 0)
57
- continue;
58
- const headers = (jsonRows[0] || []).map(String);
59
- const dataRows = jsonRows.slice(1);
60
- const totalRows = dataRows.length;
61
- const truncated = totalRows > opts.maxRows;
62
- const displayRows = dataRows.slice(0, opts.maxRows);
63
- contentParts.push(toMarkdownTable(headers, displayRows, name, totalRows, opts.maxRows));
64
- structuredSheets.push({
65
- name,
66
- headers,
67
- rows: displayRows,
68
- rowCount: totalRows,
69
- truncated,
70
- });
71
- }
72
- return {
73
- content: contentParts.join('\n\n'),
74
- structured: { sheets: structuredSheets },
75
- metadata: { sheetNames: workbook.SheetNames },
76
- };
77
- }
78
- async function parseCsv(buffer, opts) {
79
- // Use xlsx to parse CSV for consistent handling of quoted fields, delimiters, etc.
80
- const XLSX = await import('xlsx');
81
- const workbook = XLSX.read(buffer, { type: 'buffer' });
82
- const sheetName = workbook.SheetNames[0] || 'Sheet1';
83
- const ws = workbook.Sheets[sheetName];
84
- const jsonRows = XLSX.utils.sheet_to_json(ws, { header: 1 });
85
- if (jsonRows.length === 0) {
86
- return { content: '(empty CSV file)', structured: { sheets: [] } };
87
- }
88
- const headers = (jsonRows[0] || []).map(String);
89
- const dataRows = jsonRows.slice(1);
90
- const totalRows = dataRows.length;
91
- const truncated = totalRows > opts.maxRows;
92
- const displayRows = dataRows.slice(0, opts.maxRows);
93
- return {
94
- content: toMarkdownTable(headers, displayRows, 'CSV', totalRows, opts.maxRows),
95
- structured: {
96
- sheets: [{
97
- name: 'CSV',
98
- headers,
99
- rows: displayRows,
100
- rowCount: totalRows,
101
- truncated,
102
- }],
103
- },
104
- };
105
- }
106
- async function parseDocx(buffer) {
107
- const mammoth = await import('mammoth');
108
- const result = await mammoth.extractRawText({ buffer });
109
- return {
110
- content: result.value,
111
- metadata: result.messages.length > 0
112
- ? { warnings: result.messages.map((m) => m.message) }
113
- : undefined,
114
- };
115
- }
116
- async function parsePdf(buffer) {
117
- // pdf-parse has no types — import default export
118
- const pdfParse = (await import('pdf-parse')).default;
119
- const result = await pdfParse(buffer);
120
- return {
121
- content: result.text,
122
- metadata: {
123
- pages: result.numpages,
124
- info: result.info,
125
- },
126
- };
127
- }
128
- // ── Tool ─────────────────────────────────────────────────────────────────────
129
- /**
130
- * Tool for reading binary document formats
131
- */
132
- export class ReadDocumentTool {
133
- shellService;
134
- id = 'cli-read-document-v1';
135
- /** Tool call name used by the LLM / ToolExecutor. */
136
- name = 'read_document';
137
- displayName = 'Read Document';
138
- description = 'Read and extract text content from binary document formats: ' +
139
- '.xlsx/.xls (spreadsheets), .csv/.tsv (comma/tab-separated), ' +
140
- '.docx (Word documents), .pdf (PDFs). ' +
141
- 'Returns structured text that can be analyzed. ' +
142
- 'For plain text files (.txt, .md, .json, etc.), use file_read instead.';
143
- category = 'system';
144
- hasSideEffects = false;
145
- inputSchema = {
146
- type: 'object',
147
- required: ['path'],
148
- properties: {
149
- path: {
150
- type: 'string',
151
- description: 'File path to the document',
152
- },
153
- format: {
154
- type: 'string',
155
- enum: ['xlsx', 'csv', 'docx', 'pdf', 'auto'],
156
- default: 'auto',
157
- description: 'Document format. Auto-detected from extension if not specified.',
158
- },
159
- sheet: {
160
- type: 'string',
161
- description: 'For xlsx: specific sheet name to read. Reads all sheets if omitted.',
162
- },
163
- maxRows: {
164
- type: 'number',
165
- description: 'For xlsx/csv: maximum data rows to return per sheet (default: 500)',
166
- },
167
- },
168
- additionalProperties: false,
169
- };
170
- constructor(shellService) {
171
- this.shellService = shellService;
172
- }
173
- /**
174
- * Read and parse a document
175
- */
176
- async execute(input, _context) {
177
- try {
178
- // Detect format
179
- const ext = extname(input.path).toLowerCase();
180
- let format;
181
- if (input.format && input.format !== 'auto') {
182
- format = input.format;
183
- }
184
- else {
185
- const detected = EXTENSION_FORMAT_MAP[ext];
186
- if (!detected) {
187
- const supported = Object.keys(EXTENSION_FORMAT_MAP).join(', ');
188
- return {
189
- success: false,
190
- error: `Unsupported document format "${ext}". Supported: ${supported}. ` +
191
- (ext === '.doc'
192
- ? 'Legacy .doc format is not supported. Please convert to .docx first.'
193
- : 'For plain text files, use file_read instead.'),
194
- };
195
- }
196
- format = detected;
197
- }
198
- // Read file as buffer (enforces filesystem security)
199
- const { buffer, path: absolutePath, size } = await this.shellService.readFileBuffer(input.path);
200
- const maxRows = input.maxRows ?? 500;
201
- // Parse by format
202
- let parsed;
203
- switch (format) {
204
- case 'xlsx':
205
- parsed = await parseXlsx(buffer, { sheet: input.sheet, maxRows });
206
- break;
207
- case 'csv':
208
- parsed = await parseCsv(buffer, { maxRows });
209
- break;
210
- case 'docx':
211
- parsed = await parseDocx(buffer);
212
- break;
213
- case 'pdf':
214
- parsed = await parsePdf(buffer);
215
- break;
216
- default:
217
- return { success: false, error: `Unknown format: ${format}` };
218
- }
219
- return {
220
- success: true,
221
- output: {
222
- path: absolutePath,
223
- format,
224
- size,
225
- content: parsed.content,
226
- structured: parsed.structured,
227
- metadata: parsed.metadata,
228
- },
229
- };
230
- }
231
- catch (error) {
232
- return { success: false, error: error.message };
233
- }
234
- }
235
- /**
236
- * Validate input
237
- */
238
- validateArgs(input) {
239
- const errors = [];
240
- if (!input.path) {
241
- errors.push('Path is required');
242
- }
243
- else if (typeof input.path !== 'string') {
244
- errors.push('Path must be a string');
245
- }
246
- if (input.format && !['xlsx', 'csv', 'docx', 'pdf', 'auto'].includes(input.format)) {
247
- errors.push(`Invalid format "${input.format}". Must be one of: xlsx, csv, docx, pdf, auto`);
248
- }
249
- return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
250
- }
251
- }
252
- //# sourceMappingURL=readDocument.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readDocument.js","sourceRoot":"","sources":["../../src/tools/readDocument.ts"],"names":[],"mappings":"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"}