@majkapp/majk-chat-cli 1.0.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.
- package/README.md +746 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1001 -0
- package/dist/cli.js.map +1 -0
- package/dist/interactive/interactive.d.ts +27 -0
- package/dist/interactive/interactive.d.ts.map +1 -0
- package/dist/interactive/interactive.js +361 -0
- package/dist/interactive/interactive.js.map +1 -0
- package/dist/tools/bash.tool.d.ts +11 -0
- package/dist/tools/bash.tool.d.ts.map +1 -0
- package/dist/tools/bash.tool.js +140 -0
- package/dist/tools/bash.tool.js.map +1 -0
- package/dist/tools/filesystem.tool.d.ts +20 -0
- package/dist/tools/filesystem.tool.d.ts.map +1 -0
- package/dist/tools/filesystem.tool.js +312 -0
- package/dist/tools/filesystem.tool.js.map +1 -0
- package/dist/utils/config.d.ts +8 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +140 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.d.ts +45 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +265 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/models.d.ts +10 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +56 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/output.d.ts +133 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +306 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/tool-filter.d.ts +35 -0
- package/dist/utils/tool-filter.d.ts.map +1 -0
- package/dist/utils/tool-filter.js +94 -0
- package/dist/utils/tool-filter.js.map +1 -0
- package/package.json +64 -0
|
@@ -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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class ConfigLoader {
|
|
2
|
+
static load(configPath: string): Promise<any>;
|
|
3
|
+
private static expandEnvironmentVariables;
|
|
4
|
+
static save(configPath: string, config: any): Promise<void>;
|
|
5
|
+
static merge(base: any, override: any): Promise<any>;
|
|
6
|
+
private static deepMerge;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,qBAAa,YAAY;WACV,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAqCnD,OAAO,CAAC,MAAM,CAAC,0BAA0B;WAuB5B,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;WAsBpD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1D,OAAO,CAAC,MAAM,CAAC,SAAS;CA0BzB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ConfigLoader = void 0;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const yaml = __importStar(require("yaml"));
|
|
40
|
+
class ConfigLoader {
|
|
41
|
+
static async load(configPath) {
|
|
42
|
+
if (!await fs.pathExists(configPath)) {
|
|
43
|
+
throw new Error(`Configuration file not found: ${configPath}`);
|
|
44
|
+
}
|
|
45
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
46
|
+
const ext = path.extname(configPath).toLowerCase();
|
|
47
|
+
let config;
|
|
48
|
+
switch (ext) {
|
|
49
|
+
case '.json':
|
|
50
|
+
config = JSON.parse(content);
|
|
51
|
+
break;
|
|
52
|
+
case '.yaml':
|
|
53
|
+
case '.yml':
|
|
54
|
+
config = yaml.parse(content);
|
|
55
|
+
break;
|
|
56
|
+
default:
|
|
57
|
+
// Try to detect format
|
|
58
|
+
try {
|
|
59
|
+
config = JSON.parse(content);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
try {
|
|
63
|
+
config = yaml.parse(content);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new Error(`Unable to parse configuration file: ${configPath}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Expand environment variables
|
|
71
|
+
config = this.expandEnvironmentVariables(config);
|
|
72
|
+
return config;
|
|
73
|
+
}
|
|
74
|
+
static expandEnvironmentVariables(obj) {
|
|
75
|
+
if (typeof obj === 'string') {
|
|
76
|
+
// Replace ${VAR} with environment variable value
|
|
77
|
+
return obj.replace(/\$\{([^}]+)\}/g, (match, varName) => {
|
|
78
|
+
return process.env[varName] || match;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (Array.isArray(obj)) {
|
|
82
|
+
return obj.map(item => this.expandEnvironmentVariables(item));
|
|
83
|
+
}
|
|
84
|
+
if (obj && typeof obj === 'object') {
|
|
85
|
+
const result = {};
|
|
86
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
87
|
+
result[key] = this.expandEnvironmentVariables(value);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
return obj;
|
|
92
|
+
}
|
|
93
|
+
static async save(configPath, config) {
|
|
94
|
+
await fs.ensureDir(path.dirname(configPath));
|
|
95
|
+
const ext = path.extname(configPath).toLowerCase();
|
|
96
|
+
let content;
|
|
97
|
+
switch (ext) {
|
|
98
|
+
case '.json':
|
|
99
|
+
content = JSON.stringify(config, null, 2);
|
|
100
|
+
break;
|
|
101
|
+
case '.yaml':
|
|
102
|
+
case '.yml':
|
|
103
|
+
content = yaml.stringify(config);
|
|
104
|
+
break;
|
|
105
|
+
default:
|
|
106
|
+
// Default to YAML
|
|
107
|
+
content = yaml.stringify(config);
|
|
108
|
+
}
|
|
109
|
+
await fs.writeFile(configPath, content, 'utf-8');
|
|
110
|
+
}
|
|
111
|
+
static async merge(base, override) {
|
|
112
|
+
return this.deepMerge(base, override);
|
|
113
|
+
}
|
|
114
|
+
static deepMerge(target, source) {
|
|
115
|
+
if (!source)
|
|
116
|
+
return target;
|
|
117
|
+
if (!target)
|
|
118
|
+
return source;
|
|
119
|
+
if (Array.isArray(source)) {
|
|
120
|
+
return source;
|
|
121
|
+
}
|
|
122
|
+
if (typeof source !== 'object' || source === null) {
|
|
123
|
+
return source;
|
|
124
|
+
}
|
|
125
|
+
const result = { ...target };
|
|
126
|
+
for (const key in source) {
|
|
127
|
+
if (source.hasOwnProperty(key)) {
|
|
128
|
+
if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {
|
|
129
|
+
result[key] = this.deepMerge(target[key], source[key]);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
result[key] = source[key];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.ConfigLoader = ConfigLoader;
|
|
140
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ProviderConfig } from '@majkapp/majk-chat-core';
|
|
2
|
+
export interface CliCredentialOptions {
|
|
3
|
+
openaiApiKey?: string;
|
|
4
|
+
openaiOrgId?: string;
|
|
5
|
+
anthropicApiKey?: string;
|
|
6
|
+
azureOpenaiApiKey?: string;
|
|
7
|
+
azureOpenaiEndpoint?: string;
|
|
8
|
+
azureOpenaiDeployment?: string;
|
|
9
|
+
awsAccessKeyId?: string;
|
|
10
|
+
awsSecretAccessKey?: string;
|
|
11
|
+
awsSessionToken?: string;
|
|
12
|
+
awsRegion?: string;
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
apiKeyFile?: string;
|
|
15
|
+
envFile?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class CredentialManager {
|
|
18
|
+
private configDir;
|
|
19
|
+
private dotenvLoaded;
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Load environment variables from .env files with precedence:
|
|
23
|
+
* 1. .env.local (highest priority)
|
|
24
|
+
* 2. .env
|
|
25
|
+
* 3. Global .majk-chat/.env
|
|
26
|
+
*/
|
|
27
|
+
private loadDotenvFiles;
|
|
28
|
+
loadProviders(options?: CliCredentialOptions): Promise<any>;
|
|
29
|
+
getCredentials(provider: string, options?: CliCredentialOptions): Promise<ProviderConfig>;
|
|
30
|
+
/**
|
|
31
|
+
* Get API key from CLI options with provider-specific precedence
|
|
32
|
+
*/
|
|
33
|
+
private getCliApiKey;
|
|
34
|
+
/**
|
|
35
|
+
* Add provider-specific configuration with CLI option precedence
|
|
36
|
+
*/
|
|
37
|
+
private addProviderSpecificConfig;
|
|
38
|
+
private readApiKeyFromFile;
|
|
39
|
+
private getEnvironmentKey;
|
|
40
|
+
private getProviderStandardKey;
|
|
41
|
+
private hasProviderConfig;
|
|
42
|
+
private loadProviderConfig;
|
|
43
|
+
saveProviderConfig(provider: string, config: ProviderConfig): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/utils/credentials.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IAEnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAkB;;IAMtC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqCjB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;IAqC3D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgD/F;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,yBAAyB;YA0BnB,kBAAkB;IAShC,OAAO,CAAC,iBAAiB;YAgBX,sBAAsB;YA6BtB,iBAAiB;YAKjB,kBAAkB;IAY1B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlF"}
|