copilot-fs-mcp 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/BACKUPS.md +173 -0
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/SECURITY.md +9 -0
- package/config.example.json +39 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/permissions/config-loader.js +229 -0
- package/dist/permissions/config-loader.js.map +1 -0
- package/dist/permissions/evaluator.js +198 -0
- package/dist/permissions/evaluator.js.map +1 -0
- package/dist/permissions/path-resolver.js +102 -0
- package/dist/permissions/path-resolver.js.map +1 -0
- package/dist/server.js +162 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/backup-tools.js +104 -0
- package/dist/tools/backup-tools.js.map +1 -0
- package/dist/tools/get-permissions.js +20 -0
- package/dist/tools/get-permissions.js.map +1 -0
- package/dist/tools/list-directory.js +69 -0
- package/dist/tools/list-directory.js.map +1 -0
- package/dist/tools/read-file.js +52 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/search-files.js +65 -0
- package/dist/tools/search-files.js.map +1 -0
- package/dist/tools/write-file.js +65 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/utils/backup-manager.js +153 -0
- package/dist/utils/backup-manager.js.map +1 -0
- package/dist/utils/logger.js +96 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +67 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Server = void 0;
|
|
4
|
+
exports.startStdioLoop = startStdioLoop;
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
const logger_1 = require("./utils/logger");
|
|
7
|
+
function errMessage(err) {
|
|
8
|
+
if (typeof err === 'string')
|
|
9
|
+
return err;
|
|
10
|
+
if (err && typeof err === 'object' && 'message' in err && typeof err.message === 'string') {
|
|
11
|
+
return err.message;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
return String(err);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return 'Unknown error';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
class Server extends events_1.EventEmitter {
|
|
21
|
+
tools;
|
|
22
|
+
constructor() {
|
|
23
|
+
super();
|
|
24
|
+
this.tools = new Map();
|
|
25
|
+
}
|
|
26
|
+
registerTool(name, handler, description, inputSchema) {
|
|
27
|
+
this.tools.set(name, { handler, description, inputSchema });
|
|
28
|
+
}
|
|
29
|
+
listTools() {
|
|
30
|
+
const result = [];
|
|
31
|
+
for (const [name, def] of this.tools) {
|
|
32
|
+
result.push({ name, description: def.description, inputSchema: def.inputSchema });
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
async callTool(name, input) {
|
|
37
|
+
const entry = this.tools.get(name);
|
|
38
|
+
if (!entry)
|
|
39
|
+
throw new Error('Tool not found: ' + name);
|
|
40
|
+
const result = await Promise.resolve(entry.handler(input));
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.Server = Server;
|
|
45
|
+
function send(obj) {
|
|
46
|
+
process.stdout.write(JSON.stringify(obj) + '\n');
|
|
47
|
+
}
|
|
48
|
+
// MCP-compliant line-delimited JSON-RPC 2.0 stdio transport
|
|
49
|
+
function startStdioLoop(server) {
|
|
50
|
+
server.emit('startup');
|
|
51
|
+
(0, logger_1.info)('startup');
|
|
52
|
+
const stdin = process.stdin;
|
|
53
|
+
stdin.setEncoding('utf8');
|
|
54
|
+
let buffer = '';
|
|
55
|
+
stdin.on('data', async (chunk) => {
|
|
56
|
+
buffer += chunk;
|
|
57
|
+
let idx;
|
|
58
|
+
while ((idx = buffer.indexOf('\n')) >= 0) {
|
|
59
|
+
const line = buffer.slice(0, idx).trim();
|
|
60
|
+
buffer = buffer.slice(idx + 1);
|
|
61
|
+
if (!line)
|
|
62
|
+
continue;
|
|
63
|
+
let msg = null;
|
|
64
|
+
try {
|
|
65
|
+
msg = JSON.parse(line);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
send({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } });
|
|
69
|
+
(0, logger_1.warn)('Invalid JSON received');
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
(0, logger_1.debug)('[mcp.recv]', msg);
|
|
74
|
+
const method = msg.method || '';
|
|
75
|
+
const id = msg.id ?? null;
|
|
76
|
+
// --- Notifications (no id → no response) ---
|
|
77
|
+
if (id === null || id === undefined) {
|
|
78
|
+
if (method === 'notifications/initialized') {
|
|
79
|
+
(0, logger_1.info)('client sent notifications/initialized');
|
|
80
|
+
}
|
|
81
|
+
else if (method === 'notifications/cancelled') {
|
|
82
|
+
// ignore cancellation for now
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
(0, logger_1.debug)('unknown notification:', method);
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// --- Requests (have id → require response) ---
|
|
90
|
+
switch (method) {
|
|
91
|
+
case 'initialize': {
|
|
92
|
+
send({
|
|
93
|
+
jsonrpc: '2.0', id,
|
|
94
|
+
result: {
|
|
95
|
+
protocolVersion: '2024-11-05',
|
|
96
|
+
capabilities: { tools: {} },
|
|
97
|
+
serverInfo: { name: 'copilot-fs-mcp', version: '0.1.0' },
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
server.emit('initialized', msg.params || {});
|
|
101
|
+
(0, logger_1.info)('initialized');
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case 'tools/list': {
|
|
105
|
+
const tools = server.listTools();
|
|
106
|
+
send({ jsonrpc: '2.0', id, result: { tools } });
|
|
107
|
+
(0, logger_1.info)('tools/list', { count: tools.length });
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case 'tools/call': {
|
|
111
|
+
const toolName = msg.params?.name;
|
|
112
|
+
const args = msg.params?.arguments ?? msg.params?.input ?? {};
|
|
113
|
+
try {
|
|
114
|
+
const start = Date.now();
|
|
115
|
+
const result = await server.callTool(toolName, args);
|
|
116
|
+
const duration = Date.now() - start;
|
|
117
|
+
const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
118
|
+
send({
|
|
119
|
+
jsonrpc: '2.0', id,
|
|
120
|
+
result: { content: [{ type: 'text', text }] },
|
|
121
|
+
});
|
|
122
|
+
(0, logger_1.info)('tools/call', { tool: toolName, duration_ms: duration });
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
send({
|
|
126
|
+
jsonrpc: '2.0', id,
|
|
127
|
+
result: { content: [{ type: 'text', text: 'Error: ' + errMessage(err) }], isError: true },
|
|
128
|
+
});
|
|
129
|
+
(0, logger_1.warn)('tools/call error', { tool: toolName, err: errMessage(err) });
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case 'logging/setLevel': {
|
|
134
|
+
// Acknowledge but no-op for now
|
|
135
|
+
send({ jsonrpc: '2.0', id, result: {} });
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
default: {
|
|
139
|
+
send({
|
|
140
|
+
jsonrpc: '2.0', id,
|
|
141
|
+
error: { code: -32601, message: 'Method not found: ' + method },
|
|
142
|
+
});
|
|
143
|
+
(0, logger_1.warn)('Unknown method:', method);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
(0, logger_1.warn)('Processing error:', errMessage(err));
|
|
149
|
+
send({
|
|
150
|
+
jsonrpc: '2.0', id: msg?.id ?? null,
|
|
151
|
+
error: { code: -32603, message: 'Internal error: ' + errMessage(err) },
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
stdin.on('end', () => {
|
|
157
|
+
server.emit('shutdown');
|
|
158
|
+
process.exit(0);
|
|
159
|
+
});
|
|
160
|
+
server.emit('ready');
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
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.listBackupsTool = listBackupsTool;
|
|
37
|
+
exports.restoreBackupTool = restoreBackupTool;
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const evaluator_js_1 = require("../permissions/evaluator.js");
|
|
40
|
+
const backup_manager_js_1 = require("../utils/backup-manager.js");
|
|
41
|
+
/**
|
|
42
|
+
* Lists available backups for a file
|
|
43
|
+
*/
|
|
44
|
+
async function listBackupsTool(input, config) {
|
|
45
|
+
if (!input || typeof input.path !== 'string') {
|
|
46
|
+
throw new Error('missing path');
|
|
47
|
+
}
|
|
48
|
+
const resolved = path.resolve(input.path);
|
|
49
|
+
// Check read permissions for the file
|
|
50
|
+
const permission = await (0, evaluator_js_1.checkPermission)(config, resolved, 'read');
|
|
51
|
+
if (!permission.allowed) {
|
|
52
|
+
throw new Error(`Access denied: ${permission.reason}`);
|
|
53
|
+
}
|
|
54
|
+
const backupConfig = {
|
|
55
|
+
...backup_manager_js_1.DEFAULT_BACKUP_CONFIG,
|
|
56
|
+
...(config.backup || {})
|
|
57
|
+
};
|
|
58
|
+
const backups = await (0, backup_manager_js_1.listBackups)(resolved, backupConfig);
|
|
59
|
+
return {
|
|
60
|
+
file: resolved,
|
|
61
|
+
backups: backups.map((b, index) => ({
|
|
62
|
+
index,
|
|
63
|
+
path: b.path,
|
|
64
|
+
timestamp: b.timestamp.toISOString(),
|
|
65
|
+
size: b.size,
|
|
66
|
+
ageMinutes: Math.floor((Date.now() - b.timestamp.getTime()) / 60000)
|
|
67
|
+
}))
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Restores a file from a backup
|
|
72
|
+
*/
|
|
73
|
+
async function restoreBackupTool(input, config) {
|
|
74
|
+
if (!input || typeof input.path !== 'string') {
|
|
75
|
+
throw new Error('missing path');
|
|
76
|
+
}
|
|
77
|
+
const resolved = path.resolve(input.path);
|
|
78
|
+
// Check write permissions for the target file
|
|
79
|
+
const permission = await (0, evaluator_js_1.checkPermission)(config, resolved, 'write');
|
|
80
|
+
if (!permission.allowed) {
|
|
81
|
+
throw new Error(`Access denied: ${permission.reason}`);
|
|
82
|
+
}
|
|
83
|
+
const backupConfig = {
|
|
84
|
+
...backup_manager_js_1.DEFAULT_BACKUP_CONFIG,
|
|
85
|
+
...(config.backup || {})
|
|
86
|
+
};
|
|
87
|
+
const backups = await (0, backup_manager_js_1.listBackups)(resolved, backupConfig);
|
|
88
|
+
if (backups.length === 0) {
|
|
89
|
+
throw new Error('No backups found for this file');
|
|
90
|
+
}
|
|
91
|
+
// Default to most recent backup (index 0)
|
|
92
|
+
const backupIndex = input.backupIndex ?? 0;
|
|
93
|
+
if (backupIndex < 0 || backupIndex >= backups.length) {
|
|
94
|
+
throw new Error(`Invalid backup index. Available: 0-${backups.length - 1}`);
|
|
95
|
+
}
|
|
96
|
+
const backup = backups[backupIndex];
|
|
97
|
+
await (0, backup_manager_js_1.restoreBackup)(backup.path, resolved);
|
|
98
|
+
return {
|
|
99
|
+
restored: resolved,
|
|
100
|
+
from: backup.path,
|
|
101
|
+
timestamp: backup.timestamp.toISOString()
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=backup-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-tools.js","sourceRoot":"","sources":["../../src/tools/backup-tools.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,0CAiCC;AAKD,8CA0CC;AAxFD,2CAA6B;AAE7B,8DAA8D;AAC9D,kEAA+F;AAE/F;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,KAAuB,EACvB,MAAc;IAEd,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE1C,sCAAsC;IACtC,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,GAAG,yCAAqB;QACxB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KACzB,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,+BAAW,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE1D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,KAAK;YACL,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;YACpC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC;SACrE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,KAA6C,EAC7C,MAAc;IAEd,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE1C,8CAA8C;IAC9C,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,GAAG,yCAAqB;QACxB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KACzB,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,+BAAW,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,0CAA0C;IAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IAE3C,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,IAAA,iCAAa,EAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE3C,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = getPermissionsTool;
|
|
4
|
+
async function getPermissionsTool(_input, config) {
|
|
5
|
+
return {
|
|
6
|
+
version: config.version,
|
|
7
|
+
permissions: {
|
|
8
|
+
allowed: config.permissions.allowed.map(entry => ({
|
|
9
|
+
path: entry.path,
|
|
10
|
+
operations: entry.operations,
|
|
11
|
+
})),
|
|
12
|
+
denied: config.permissions.denied,
|
|
13
|
+
},
|
|
14
|
+
security: {
|
|
15
|
+
maxFileSizeBytes: config.security.maxFileSizeBytes,
|
|
16
|
+
allowedExtensions: config.security.allowedExtensions,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=get-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-permissions.js","sourceRoot":"","sources":["../../src/tools/get-permissions.ts"],"names":[],"mappings":";;AAEA,qCAeC;AAfc,KAAK,UAAU,kBAAkB,CAAC,MAAe,EAAE,MAAc;IAC9E,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;YACH,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;SAClC;QACD,QAAQ,EAAE;YACR,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB;YAClD,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB;SACrD;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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.default = listDirectoryTool;
|
|
37
|
+
const fs_1 = require("fs");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const evaluator_js_1 = require("../permissions/evaluator.js");
|
|
40
|
+
async function listDirectoryTool(input, config) {
|
|
41
|
+
if (!input || typeof input.path !== 'string')
|
|
42
|
+
throw new Error('missing path');
|
|
43
|
+
const resolved = path.resolve(input.path);
|
|
44
|
+
// Check permissions before listing
|
|
45
|
+
const permission = await (0, evaluator_js_1.checkPermission)(config, resolved, 'list');
|
|
46
|
+
if (!permission.allowed) {
|
|
47
|
+
throw new Error(`Access denied: ${permission.reason}`);
|
|
48
|
+
}
|
|
49
|
+
const entries = await fs_1.promises.readdir(resolved, { withFileTypes: true });
|
|
50
|
+
const results = [];
|
|
51
|
+
for (const e of entries) {
|
|
52
|
+
try {
|
|
53
|
+
const full = path.join(resolved, e.name);
|
|
54
|
+
const stat = await fs_1.promises.lstat(full); // use lstat to avoid following broken symlinks
|
|
55
|
+
results.push({
|
|
56
|
+
name: e.name,
|
|
57
|
+
type: e.isDirectory() ? 'directory' : e.isSymbolicLink() ? 'symlink' : 'file',
|
|
58
|
+
size: stat.size,
|
|
59
|
+
mtime: stat.mtime.toISOString(),
|
|
60
|
+
path: full
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// skip entries we can't stat (broken symlinks, permission issues, etc.)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { path: resolved, entries: results };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=list-directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-directory.js","sourceRoot":"","sources":["../../src/tools/list-directory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,oCA4BC;AAjCD,2BAAoC;AACpC,2CAA6B;AAE7B,8DAA8D;AAE/C,KAAK,UAAU,iBAAiB,CAAC,KAAuB,EAAE,MAAc;IACrF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE1C,mCAAmC;IACnC,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,OAAO,GAAU,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,aAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,+CAA+C;YAClF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;gBAC7E,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC/B,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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.default = readFileTool;
|
|
37
|
+
const fs_1 = require("fs");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const evaluator_js_1 = require("../permissions/evaluator.js");
|
|
40
|
+
async function readFileTool(input, config) {
|
|
41
|
+
if (!input || typeof input.path !== 'string')
|
|
42
|
+
throw new Error('missing path');
|
|
43
|
+
const resolved = path.resolve(input.path);
|
|
44
|
+
// Check permissions before reading
|
|
45
|
+
const permission = await (0, evaluator_js_1.checkPermission)(config, resolved, 'read');
|
|
46
|
+
if (!permission.allowed) {
|
|
47
|
+
throw new Error(`Access denied: ${permission.reason}`);
|
|
48
|
+
}
|
|
49
|
+
const content = await fs_1.promises.readFile(resolved, 'utf8');
|
|
50
|
+
return { path: resolved, content };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=read-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../src/tools/read-file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,+BAYC;AAjBD,2BAAoC;AACpC,2CAA6B;AAE7B,8DAA8D;AAE/C,KAAK,UAAU,YAAY,CAAC,KAAuB,EAAE,MAAc;IAChF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE1C,mCAAmC;IACnC,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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.default = searchFilesTool;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const glob_1 = require("glob");
|
|
39
|
+
const fs_1 = require("fs");
|
|
40
|
+
const evaluator_js_1 = require("../permissions/evaluator.js");
|
|
41
|
+
async function searchFilesTool(input, config) {
|
|
42
|
+
const root = path.resolve(input.rootPath || '.');
|
|
43
|
+
// Check permissions before searching
|
|
44
|
+
const permission = await (0, evaluator_js_1.checkPermission)(config, root, 'search');
|
|
45
|
+
if (!permission.allowed) {
|
|
46
|
+
throw new Error(`Access denied: ${permission.reason}`);
|
|
47
|
+
}
|
|
48
|
+
const pattern = input.pattern || '**/*';
|
|
49
|
+
const matches = await (0, glob_1.glob)(pattern, { cwd: root, absolute: true, nodir: true });
|
|
50
|
+
let results = matches.slice(0, 100);
|
|
51
|
+
if (input.searchContent) {
|
|
52
|
+
const filtered = [];
|
|
53
|
+
for (const f of results) {
|
|
54
|
+
try {
|
|
55
|
+
const c = await fs_1.promises.readFile(f, 'utf8');
|
|
56
|
+
if (c.includes(input.searchContent))
|
|
57
|
+
filtered.push(f);
|
|
58
|
+
}
|
|
59
|
+
catch (_) { }
|
|
60
|
+
}
|
|
61
|
+
results = filtered.slice(0, 100);
|
|
62
|
+
}
|
|
63
|
+
return { root, results };
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=search-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-files.js","sourceRoot":"","sources":["../../src/tools/search-files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,kCAuBC;AA7BD,2CAA6B;AAC7B,+BAA4B;AAC5B,2BAAoC;AAEpC,8DAA8D;AAE/C,KAAK,UAAU,eAAe,CAAC,KAAqE,EAAE,MAAc;IACjI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;IAEjD,qCAAqC;IACrC,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,IAAA,WAAI,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAc,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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.default = writeFileTool;
|
|
37
|
+
const fs_1 = require("fs");
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const evaluator_js_1 = require("../permissions/evaluator.js");
|
|
40
|
+
const backup_manager_js_1 = require("../utils/backup-manager.js");
|
|
41
|
+
async function writeFileTool(input, config) {
|
|
42
|
+
if (!input || typeof input.path !== 'string')
|
|
43
|
+
throw new Error('missing path');
|
|
44
|
+
const resolved = path.resolve(input.path);
|
|
45
|
+
// Check permissions before writing
|
|
46
|
+
const permission = await (0, evaluator_js_1.checkPermission)(config, resolved, 'write');
|
|
47
|
+
if (!permission.allowed) {
|
|
48
|
+
throw new Error(`Access denied: ${permission.reason}`);
|
|
49
|
+
}
|
|
50
|
+
// Create backup before modifying the file
|
|
51
|
+
const backupConfig = {
|
|
52
|
+
...backup_manager_js_1.DEFAULT_BACKUP_CONFIG,
|
|
53
|
+
...(config.backup || {})
|
|
54
|
+
};
|
|
55
|
+
const backupPath = await (0, backup_manager_js_1.createBackup)(resolved, backupConfig);
|
|
56
|
+
const dir = path.dirname(resolved);
|
|
57
|
+
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
58
|
+
await fs_1.promises.writeFile(resolved, input.content ?? '', 'utf8');
|
|
59
|
+
return {
|
|
60
|
+
path: resolved,
|
|
61
|
+
bytes: Buffer.byteLength(input.content ?? '', 'utf8'),
|
|
62
|
+
backup: backupPath || undefined
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=write-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,gCA0BC;AAhCD,2BAAoC;AACpC,2CAA6B;AAE7B,8DAA8D;AAC9D,kEAAiF;AAElE,KAAK,UAAU,aAAa,CAAC,KAAwC,EAAE,MAAc;IAClG,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE1C,mCAAmC;IACnC,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,0CAA0C;IAC1C,MAAM,YAAY,GAAG;QACnB,GAAG,yCAAqB;QACxB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KACzB,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,IAAA,gCAAY,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,aAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,aAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC;QACrD,MAAM,EAAE,UAAU,IAAI,SAAS;KAChC,CAAC;AACJ,CAAC"}
|