@majkapp/majk-chat-cli 1.0.26 → 1.0.28

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.
@@ -0,0 +1,11 @@
1
+ import { ToolExecutor, ToolDefinition, ToolResult, RequestContext } from '@majkapp/majk-chat-core';
2
+ export declare class BashTool implements ToolExecutor {
3
+ readonly name = "bash";
4
+ private requireConfirmation;
5
+ constructor(requireConfirmation?: boolean);
6
+ readonly definition: ToolDefinition;
7
+ execute(args: any, _context: RequestContext): Promise<ToolResult>;
8
+ validateArgs(args: any): boolean;
9
+ requestPermission(args: any, _context: RequestContext): Promise<boolean>;
10
+ }
11
+ //# sourceMappingURL=bash.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.tool.d.ts","sourceRoot":"","sources":["../../src/tools/bash.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,yBAAyB,CAAC;AAMjC,qBAAa,QAAS,YAAW,YAAY;IAC3C,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,mBAAmB,CAAU;gBAEzB,mBAAmB,UAAO;IAItC,QAAQ,CAAC,UAAU,EAAE,cAAc,CA2BjC;IAEI,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAoEvE,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO;IAQ1B,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;CAuB/E"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BashTool = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const util_1 = require("util");
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
12
+ class BashTool {
13
+ name = 'bash';
14
+ requireConfirmation;
15
+ constructor(requireConfirmation = true) {
16
+ this.requireConfirmation = requireConfirmation;
17
+ }
18
+ definition = {
19
+ type: 'function',
20
+ function: {
21
+ name: 'bash',
22
+ description: 'Execute bash commands on the local system',
23
+ parameters: {
24
+ type: 'object',
25
+ properties: {
26
+ command: {
27
+ type: 'string',
28
+ description: 'The bash command to execute'
29
+ },
30
+ working_directory: {
31
+ type: 'string',
32
+ description: 'Optional working directory for the command'
33
+ },
34
+ timeout: {
35
+ type: 'number',
36
+ description: 'Timeout in milliseconds (default: 30000)'
37
+ }
38
+ },
39
+ required: ['command']
40
+ }
41
+ },
42
+ serverInvocable: true,
43
+ sideEffects: 'external',
44
+ requiresConfirmation: true
45
+ };
46
+ async execute(args, _context) {
47
+ const { command, working_directory, timeout = 30000 } = args;
48
+ try {
49
+ const options = {
50
+ timeout,
51
+ maxBuffer: 1024 * 1024 * 10 // 10MB
52
+ };
53
+ if (working_directory) {
54
+ options.cwd = working_directory;
55
+ }
56
+ console.log(chalk_1.default.yellow(`\nExecuting: ${command}`));
57
+ if (working_directory) {
58
+ console.log(chalk_1.default.gray(`In directory: ${working_directory}`));
59
+ }
60
+ const { stdout, stderr } = await execAsync(command, options);
61
+ let output = '';
62
+ if (stdout) {
63
+ output += stdout;
64
+ }
65
+ if (stderr) {
66
+ output += '\n[stderr]\n' + stderr;
67
+ }
68
+ // Truncate output if too long
69
+ const maxLength = 10000;
70
+ if (output.length > maxLength) {
71
+ output = output.substring(0, maxLength) + '\n...[truncated]';
72
+ }
73
+ return {
74
+ success: true,
75
+ output: {
76
+ stdout: stdout || '',
77
+ stderr: stderr || '',
78
+ combined: output,
79
+ exit_code: 0
80
+ }
81
+ };
82
+ }
83
+ catch (error) {
84
+ let errorMessage = 'Command execution failed';
85
+ let exitCode = -1;
86
+ if (error.code === 'ETIMEDOUT') {
87
+ errorMessage = `Command timed out after ${timeout}ms`;
88
+ }
89
+ else if (error.code) {
90
+ errorMessage = `Command failed with code ${error.code}`;
91
+ exitCode = error.code;
92
+ }
93
+ else if (error.message) {
94
+ errorMessage = error.message;
95
+ }
96
+ return {
97
+ success: false,
98
+ error: errorMessage,
99
+ output: {
100
+ stdout: error.stdout || '',
101
+ stderr: error.stderr || '',
102
+ exit_code: exitCode
103
+ }
104
+ };
105
+ }
106
+ }
107
+ validateArgs(args) {
108
+ if (!args || typeof args !== 'object')
109
+ return false;
110
+ if (!args.command || typeof args.command !== 'string')
111
+ return false;
112
+ if (args.working_directory && typeof args.working_directory !== 'string')
113
+ return false;
114
+ if (args.timeout && typeof args.timeout !== 'number')
115
+ return false;
116
+ return true;
117
+ }
118
+ async requestPermission(args, _context) {
119
+ if (!this.requireConfirmation) {
120
+ return true;
121
+ }
122
+ console.log(chalk_1.default.yellow('\n⚠️ Tool execution request:'));
123
+ console.log(chalk_1.default.cyan('Tool:'), this.name);
124
+ console.log(chalk_1.default.cyan('Command:'), args.command);
125
+ if (args.working_directory) {
126
+ console.log(chalk_1.default.cyan('Directory:'), args.working_directory);
127
+ }
128
+ const { confirm } = await inquirer_1.default.prompt([
129
+ {
130
+ type: 'confirm',
131
+ name: 'confirm',
132
+ message: 'Do you want to execute this command?',
133
+ default: false
134
+ }
135
+ ]);
136
+ return confirm;
137
+ }
138
+ }
139
+ exports.BashTool = BashTool;
140
+ //# sourceMappingURL=bash.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.tool.js","sourceRoot":"","sources":["../../src/tools/bash.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ToolExecutor, ToolDefinition, ToolResult, RequestContext } from '@majkapp/majk-chat-core';
2
+ export declare class FileSystemTool implements ToolExecutor {
3
+ readonly name = "filesystem";
4
+ private requireConfirmation;
5
+ constructor(requireConfirmation?: boolean);
6
+ readonly definition: ToolDefinition;
7
+ execute(args: any, _context: RequestContext): Promise<ToolResult>;
8
+ validateArgs(args: any): boolean;
9
+ requestPermission(args: any, _context: RequestContext): Promise<boolean>;
10
+ private readFile;
11
+ private writeFile;
12
+ private appendFile;
13
+ private deleteFile;
14
+ private exists;
15
+ private listDirectory;
16
+ private makeDirectory;
17
+ private copy;
18
+ private move;
19
+ }
20
+ //# sourceMappingURL=filesystem.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.tool.d.ts","sourceRoot":"","sources":["../../src/tools/filesystem.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,mBAAmB,CAAU;gBAEzB,mBAAmB,UAAO;IAItC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAwCjC;IAEI,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IA2DvE,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO;IAkB1B,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;YAkChE,QAAQ;YAyBR,SAAS;YAST,UAAU;YASV,UAAU;YAoBV,MAAM;YAmBN,aAAa;YA4Bb,aAAa;YAcb,IAAI;YAYJ,IAAI;CAWnB"}
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FileSystemTool = void 0;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const inquirer_1 = __importDefault(require("inquirer"));
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ class FileSystemTool {
45
+ name = 'filesystem';
46
+ requireConfirmation;
47
+ constructor(requireConfirmation = true) {
48
+ this.requireConfirmation = requireConfirmation;
49
+ }
50
+ definition = {
51
+ type: 'function',
52
+ function: {
53
+ name: 'filesystem',
54
+ description: 'Perform file system operations (read, write, list, etc.)',
55
+ parameters: {
56
+ type: 'object',
57
+ properties: {
58
+ operation: {
59
+ type: 'string',
60
+ enum: ['read', 'write', 'append', 'delete', 'exists', 'list', 'mkdir', 'copy', 'move'],
61
+ description: 'The file system operation to perform'
62
+ },
63
+ path: {
64
+ type: 'string',
65
+ description: 'The file or directory path'
66
+ },
67
+ content: {
68
+ type: 'string',
69
+ description: 'Content to write or append (for write/append operations)'
70
+ },
71
+ destination: {
72
+ type: 'string',
73
+ description: 'Destination path (for copy/move operations)'
74
+ },
75
+ encoding: {
76
+ type: 'string',
77
+ description: 'File encoding (default: utf-8)'
78
+ },
79
+ recursive: {
80
+ type: 'boolean',
81
+ description: 'Whether to operate recursively (for mkdir/delete)'
82
+ }
83
+ },
84
+ required: ['operation', 'path']
85
+ }
86
+ },
87
+ serverInvocable: true,
88
+ sideEffects: 'write',
89
+ requiresConfirmation: true
90
+ };
91
+ async execute(args, _context) {
92
+ const { operation, path: filePath, content, destination, encoding = 'utf-8', recursive = false } = args;
93
+ try {
94
+ let result;
95
+ switch (operation) {
96
+ case 'read':
97
+ result = await this.readFile(filePath, encoding);
98
+ break;
99
+ case 'write':
100
+ result = await this.writeFile(filePath, content, encoding);
101
+ break;
102
+ case 'append':
103
+ result = await this.appendFile(filePath, content, encoding);
104
+ break;
105
+ case 'delete':
106
+ result = await this.deleteFile(filePath, recursive);
107
+ break;
108
+ case 'exists':
109
+ result = await this.exists(filePath);
110
+ break;
111
+ case 'list':
112
+ result = await this.listDirectory(filePath);
113
+ break;
114
+ case 'mkdir':
115
+ result = await this.makeDirectory(filePath, recursive);
116
+ break;
117
+ case 'copy':
118
+ result = await this.copy(filePath, destination);
119
+ break;
120
+ case 'move':
121
+ result = await this.move(filePath, destination);
122
+ break;
123
+ default:
124
+ throw new Error(`Unknown operation: ${operation}`);
125
+ }
126
+ return {
127
+ success: true,
128
+ output: result
129
+ };
130
+ }
131
+ catch (error) {
132
+ return {
133
+ success: false,
134
+ error: error.message || 'File system operation failed'
135
+ };
136
+ }
137
+ }
138
+ validateArgs(args) {
139
+ if (!args || typeof args !== 'object')
140
+ return false;
141
+ if (!args.operation || !args.path)
142
+ return false;
143
+ const validOperations = ['read', 'write', 'append', 'delete', 'exists', 'list', 'mkdir', 'copy', 'move'];
144
+ if (!validOperations.includes(args.operation))
145
+ return false;
146
+ if ((args.operation === 'write' || args.operation === 'append') && args.content === undefined) {
147
+ return false;
148
+ }
149
+ if ((args.operation === 'copy' || args.operation === 'move') && !args.destination) {
150
+ return false;
151
+ }
152
+ return true;
153
+ }
154
+ async requestPermission(args, _context) {
155
+ if (!this.requireConfirmation) {
156
+ return true;
157
+ }
158
+ // Read operations don't need confirmation
159
+ if (args.operation === 'read' || args.operation === 'exists' || args.operation === 'list') {
160
+ return true;
161
+ }
162
+ console.log(chalk_1.default.yellow('\n⚠️ File system operation request:'));
163
+ console.log(chalk_1.default.cyan('Operation:'), args.operation);
164
+ console.log(chalk_1.default.cyan('Path:'), args.path);
165
+ if (args.destination) {
166
+ console.log(chalk_1.default.cyan('Destination:'), args.destination);
167
+ }
168
+ if (args.content && args.content.length > 100) {
169
+ console.log(chalk_1.default.cyan('Content:'), args.content.substring(0, 100) + '...');
170
+ }
171
+ else if (args.content) {
172
+ console.log(chalk_1.default.cyan('Content:'), args.content);
173
+ }
174
+ const { confirm } = await inquirer_1.default.prompt([
175
+ {
176
+ type: 'confirm',
177
+ name: 'confirm',
178
+ message: `Do you want to ${args.operation} this file/directory?`,
179
+ default: false
180
+ }
181
+ ]);
182
+ return confirm;
183
+ }
184
+ async readFile(filePath, encoding) {
185
+ const stats = await fs.stat(filePath);
186
+ if (stats.isDirectory()) {
187
+ throw new Error('Cannot read a directory as a file');
188
+ }
189
+ const content = await fs.readFile(filePath, encoding);
190
+ // Truncate if too large
191
+ const maxLength = 50000;
192
+ if (content.length > maxLength) {
193
+ return {
194
+ content: content.substring(0, maxLength),
195
+ truncated: true,
196
+ originalLength: content.length
197
+ };
198
+ }
199
+ return {
200
+ content,
201
+ size: stats.size,
202
+ modified: stats.mtime
203
+ };
204
+ }
205
+ async writeFile(filePath, content, encoding) {
206
+ await fs.writeFile(filePath, content, { encoding: encoding });
207
+ return {
208
+ path: filePath,
209
+ size: Buffer.byteLength(content, encoding),
210
+ operation: 'write'
211
+ };
212
+ }
213
+ async appendFile(filePath, content, encoding) {
214
+ await fs.appendFile(filePath, content, { encoding: encoding });
215
+ return {
216
+ path: filePath,
217
+ appended: content.length,
218
+ operation: 'append'
219
+ };
220
+ }
221
+ async deleteFile(filePath, recursive) {
222
+ const stats = await fs.stat(filePath);
223
+ if (stats.isDirectory() && !recursive) {
224
+ throw new Error('Cannot delete directory without recursive flag');
225
+ }
226
+ if (recursive) {
227
+ await fs.remove(filePath);
228
+ }
229
+ else {
230
+ await fs.unlink(filePath);
231
+ }
232
+ return {
233
+ path: filePath,
234
+ deleted: true,
235
+ wasDirectory: stats.isDirectory()
236
+ };
237
+ }
238
+ async exists(filePath) {
239
+ const exists = await fs.pathExists(filePath);
240
+ if (exists) {
241
+ const stats = await fs.stat(filePath);
242
+ return {
243
+ exists: true,
244
+ isFile: stats.isFile(),
245
+ isDirectory: stats.isDirectory(),
246
+ size: stats.size,
247
+ modified: stats.mtime
248
+ };
249
+ }
250
+ return {
251
+ exists: false
252
+ };
253
+ }
254
+ async listDirectory(dirPath) {
255
+ const stats = await fs.stat(dirPath);
256
+ if (!stats.isDirectory()) {
257
+ throw new Error('Path is not a directory');
258
+ }
259
+ const items = await fs.readdir(dirPath);
260
+ const details = [];
261
+ for (const item of items) {
262
+ const itemPath = path.join(dirPath, item);
263
+ const itemStats = await fs.stat(itemPath);
264
+ details.push({
265
+ name: item,
266
+ type: itemStats.isDirectory() ? 'directory' : 'file',
267
+ size: itemStats.size,
268
+ modified: itemStats.mtime
269
+ });
270
+ }
271
+ return {
272
+ path: dirPath,
273
+ items: details,
274
+ count: details.length
275
+ };
276
+ }
277
+ async makeDirectory(dirPath, recursive) {
278
+ if (recursive) {
279
+ await fs.ensureDir(dirPath);
280
+ }
281
+ else {
282
+ await fs.mkdir(dirPath);
283
+ }
284
+ return {
285
+ path: dirPath,
286
+ created: true,
287
+ recursive
288
+ };
289
+ }
290
+ async copy(source, destination) {
291
+ await fs.copy(source, destination);
292
+ const stats = await fs.stat(destination);
293
+ return {
294
+ source,
295
+ destination,
296
+ size: stats.size,
297
+ operation: 'copy'
298
+ };
299
+ }
300
+ async move(source, destination) {
301
+ await fs.move(source, destination);
302
+ const stats = await fs.stat(destination);
303
+ return {
304
+ source,
305
+ destination,
306
+ size: stats.size,
307
+ operation: 'move'
308
+ };
309
+ }
310
+ }
311
+ exports.FileSystemTool = FileSystemTool;
312
+ //# sourceMappingURL=filesystem.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.tool.js","sourceRoot":"","sources":["../../src/tools/filesystem.tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@majkapp/majk-chat-cli",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "CLI for multi-provider LLM chat interactions",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
@@ -32,11 +32,11 @@
32
32
  "author": "Jules White",
33
33
  "license": "MIT",
34
34
  "dependencies": {
35
- "@majkapp/majk-chat-basic-tools": "1.0.26",
36
- "@majkapp/majk-chat-core": "1.0.26",
37
- "@majkapp/majk-chat-document-tools": "1.0.26",
38
- "@majkapp/majk-chat-mcp": "1.0.26",
39
- "@majkapp/majk-chat-sessions": "1.0.26",
35
+ "@majkapp/majk-chat-basic-tools": "1.0.27",
36
+ "@majkapp/majk-chat-core": "1.0.27",
37
+ "@majkapp/majk-chat-document-tools": "1.0.27",
38
+ "@majkapp/majk-chat-mcp": "1.0.27",
39
+ "@majkapp/majk-chat-sessions": "1.0.27",
40
40
  "chalk": "^4.1.2",
41
41
  "commander": "^12.0.0",
42
42
  "dotenv": "^16.4.0",