@patchen0518/agentbrew 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/LICENSE +21 -0
- package/README.md +137 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +362 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -0
- package/dist/dispatcher.d.ts +39 -0
- package/dist/dispatcher.js +245 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/installer.d.ts +8 -0
- package/dist/installer.js +357 -0
- package/dist/installer.js.map +1 -0
- package/dist/logger.d.ts +6 -0
- package/dist/logger.js +22 -0
- package/dist/logger.js.map +1 -0
- package/dist/migration.d.ts +21 -0
- package/dist/migration.js +344 -0
- package/dist/migration.js.map +1 -0
- package/dist/registry.d.ts +51 -0
- package/dist/registry.js +432 -0
- package/dist/registry.js.map +1 -0
- package/dist/router.d.ts +47 -0
- package/dist/router.js +272 -0
- package/dist/router.js.map +1 -0
- package/dist/state.d.ts +8 -0
- package/dist/state.js +63 -0
- package/dist/state.js.map +1 -0
- package/dist/updater.d.ts +2 -0
- package/dist/updater.js +76 -0
- package/dist/updater.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,245 @@
|
|
|
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.CapabilityDispatch = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
class CapabilityDispatch {
|
|
10
|
+
managedClients;
|
|
11
|
+
localPrompts;
|
|
12
|
+
resourceToClient = new Map();
|
|
13
|
+
localResources = new Map();
|
|
14
|
+
constructor(managedClients, localPrompts) {
|
|
15
|
+
this.managedClients = managedClients;
|
|
16
|
+
this.localPrompts = localPrompts;
|
|
17
|
+
}
|
|
18
|
+
scopeName(prefix, name) {
|
|
19
|
+
return `${prefix}__${name}`;
|
|
20
|
+
}
|
|
21
|
+
parseName(fullName) {
|
|
22
|
+
const delimiter = '__';
|
|
23
|
+
const lastIndex = fullName.lastIndexOf(delimiter);
|
|
24
|
+
if (lastIndex === -1) {
|
|
25
|
+
throw new Error(`Invalid name format: ${fullName}. Expected 'prefix${delimiter}name'`);
|
|
26
|
+
}
|
|
27
|
+
const prefix = fullName.substring(0, lastIndex);
|
|
28
|
+
const name = fullName.substring(lastIndex + delimiter.length);
|
|
29
|
+
if (!this.managedClients.has(prefix) && !this.localPrompts.has(fullName)) {
|
|
30
|
+
throw new Error(`Unknown prefix: ${prefix} for name: ${fullName}`);
|
|
31
|
+
}
|
|
32
|
+
return { prefix, name };
|
|
33
|
+
}
|
|
34
|
+
scopeUri(prefix, uri) {
|
|
35
|
+
const protocolIndex = uri.indexOf('://');
|
|
36
|
+
if (protocolIndex !== -1) {
|
|
37
|
+
const scheme = uri.substring(0, protocolIndex);
|
|
38
|
+
const rest = uri.substring(protocolIndex + 3);
|
|
39
|
+
return `mcp://${prefix}/${scheme}/${rest}`;
|
|
40
|
+
}
|
|
41
|
+
return `mcp://${prefix}/raw/${uri}`;
|
|
42
|
+
}
|
|
43
|
+
unscopeUri(uri) {
|
|
44
|
+
try {
|
|
45
|
+
const url = new URL(uri);
|
|
46
|
+
if (url.protocol !== 'mcp:')
|
|
47
|
+
return null;
|
|
48
|
+
const prefix = url.host;
|
|
49
|
+
const pathname = url.pathname; // e.g., /https/example.com/path
|
|
50
|
+
const parts = pathname.split('/');
|
|
51
|
+
if (parts.length < 2)
|
|
52
|
+
return null;
|
|
53
|
+
const scheme = parts[1];
|
|
54
|
+
const rest = parts.slice(2).join('/');
|
|
55
|
+
let originalUri;
|
|
56
|
+
if (scheme === 'raw') {
|
|
57
|
+
originalUri = rest;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
originalUri = `${scheme}://${rest}`;
|
|
61
|
+
}
|
|
62
|
+
originalUri += url.search;
|
|
63
|
+
originalUri += url.hash;
|
|
64
|
+
return { prefix, originalUri };
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async getClient(prefix) {
|
|
71
|
+
const managed = this.managedClients.get(prefix);
|
|
72
|
+
if (!managed) {
|
|
73
|
+
throw new Error(`No client found for prefix: ${prefix}`);
|
|
74
|
+
}
|
|
75
|
+
return await managed.getClient();
|
|
76
|
+
}
|
|
77
|
+
listAllTools(cachedTools) {
|
|
78
|
+
const allTools = [];
|
|
79
|
+
for (const [prefix, tools] of cachedTools.entries()) {
|
|
80
|
+
allTools.push(...tools.map(tool => ({
|
|
81
|
+
...tool,
|
|
82
|
+
name: this.scopeName(prefix, tool.name)
|
|
83
|
+
})));
|
|
84
|
+
}
|
|
85
|
+
return allTools;
|
|
86
|
+
}
|
|
87
|
+
listAllPrompts(cachedPrompts) {
|
|
88
|
+
const allPrompts = [];
|
|
89
|
+
// Add instruction index prompt if there are local resources
|
|
90
|
+
if (this.localResources.size > 0) {
|
|
91
|
+
allPrompts.push({
|
|
92
|
+
name: 'agentbrew__instruction_index',
|
|
93
|
+
description: 'Index of instruction files (GEMINI.md, CLAUDE.md) for all installed tools.'
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Add local prompts
|
|
97
|
+
for (const [prefix, local] of this.localPrompts.entries()) {
|
|
98
|
+
allPrompts.push({
|
|
99
|
+
name: prefix,
|
|
100
|
+
description: local.description
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
for (const [prefix, prompts] of cachedPrompts.entries()) {
|
|
104
|
+
allPrompts.push(...prompts.map(prompt => ({
|
|
105
|
+
...prompt,
|
|
106
|
+
name: this.scopeName(prefix, prompt.name)
|
|
107
|
+
})));
|
|
108
|
+
}
|
|
109
|
+
return allPrompts;
|
|
110
|
+
}
|
|
111
|
+
async getPrompt(fullName, args) {
|
|
112
|
+
if (fullName === 'agentbrew__instruction_index') {
|
|
113
|
+
let content = "The following instruction files are available as resources in AgentBrew:\n\n";
|
|
114
|
+
for (const [uri, resource] of this.localResources.entries()) {
|
|
115
|
+
content += `- ${resource.file} for ${path_1.default.basename(resource.pkgPath)}: ${uri}\n`;
|
|
116
|
+
}
|
|
117
|
+
content += "\nYou can read these resources to get specific instructions for each tool.";
|
|
118
|
+
return {
|
|
119
|
+
description: "Index of instruction files",
|
|
120
|
+
messages: [{
|
|
121
|
+
role: 'user',
|
|
122
|
+
content: {
|
|
123
|
+
type: 'text',
|
|
124
|
+
text: content
|
|
125
|
+
}
|
|
126
|
+
}]
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Check local prompts first
|
|
130
|
+
const local = this.localPrompts.get(fullName);
|
|
131
|
+
if (local) {
|
|
132
|
+
const fullPath = path_1.default.resolve(local.pkgPath, local.file);
|
|
133
|
+
const safeRoot = path_1.default.resolve(local.pkgPath);
|
|
134
|
+
if (!fullPath.startsWith(safeRoot + path_1.default.sep) && fullPath !== safeRoot) {
|
|
135
|
+
throw new Error(`Invalid prompt file path: ${local.file}`);
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
139
|
+
return {
|
|
140
|
+
description: local.description,
|
|
141
|
+
messages: [{
|
|
142
|
+
role: 'user',
|
|
143
|
+
content: {
|
|
144
|
+
type: 'text',
|
|
145
|
+
text: content
|
|
146
|
+
}
|
|
147
|
+
}]
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
throw new Error(`Failed to read prompt file: ${e.message}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const { prefix, name } = this.parseName(fullName);
|
|
155
|
+
const client = await this.getClient(prefix);
|
|
156
|
+
return await client.getPrompt({
|
|
157
|
+
name: name,
|
|
158
|
+
arguments: args
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
listAllResources(cachedResources) {
|
|
162
|
+
const allResources = [];
|
|
163
|
+
// Add local instruction resources
|
|
164
|
+
for (const [uri, local] of this.localResources.entries()) {
|
|
165
|
+
allResources.push({
|
|
166
|
+
uri,
|
|
167
|
+
name: `${path_1.default.basename(local.pkgPath)} instructions (${local.file})`,
|
|
168
|
+
description: `Instruction file for ${path_1.default.basename(local.pkgPath)}`
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
for (const [prefix, resources] of cachedResources.entries()) {
|
|
172
|
+
allResources.push(...resources.map(resource => {
|
|
173
|
+
const scopedUri = this.scopeUri(prefix, resource.uri);
|
|
174
|
+
this.resourceToClient.set(scopedUri, { prefix, originalUri: resource.uri });
|
|
175
|
+
return {
|
|
176
|
+
...resource,
|
|
177
|
+
uri: scopedUri,
|
|
178
|
+
name: this.scopeName(prefix, resource.name)
|
|
179
|
+
};
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
return allResources;
|
|
183
|
+
}
|
|
184
|
+
listAllResourceTemplates(cachedTemplates) {
|
|
185
|
+
const allTemplates = [];
|
|
186
|
+
for (const [prefix, templates] of cachedTemplates.entries()) {
|
|
187
|
+
allTemplates.push(...templates.map(t => ({
|
|
188
|
+
...t,
|
|
189
|
+
uriTemplate: this.scopeUri(prefix, t.uriTemplate)
|
|
190
|
+
})));
|
|
191
|
+
}
|
|
192
|
+
return allTemplates;
|
|
193
|
+
}
|
|
194
|
+
async readResource(uri) {
|
|
195
|
+
// Check local instruction resources
|
|
196
|
+
const local = this.localResources.get(uri);
|
|
197
|
+
if (local) {
|
|
198
|
+
const fullPath = path_1.default.resolve(local.pkgPath, local.file);
|
|
199
|
+
const safeRoot = path_1.default.resolve(local.pkgPath);
|
|
200
|
+
if (!fullPath.startsWith(safeRoot + path_1.default.sep) && fullPath !== safeRoot) {
|
|
201
|
+
throw new Error(`Invalid instruction file path: ${local.file}`);
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
205
|
+
return {
|
|
206
|
+
contents: [{
|
|
207
|
+
uri,
|
|
208
|
+
mimeType: 'text/markdown',
|
|
209
|
+
text: content
|
|
210
|
+
}]
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
throw new Error(`Failed to read instruction file: ${e.message}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Check for direct mapping first (optimistic/performance)
|
|
218
|
+
const mapping = this.resourceToClient.get(uri);
|
|
219
|
+
if (mapping) {
|
|
220
|
+
try {
|
|
221
|
+
const client = await this.getClient(mapping.prefix);
|
|
222
|
+
return await client.readResource({ uri: mapping.originalUri });
|
|
223
|
+
}
|
|
224
|
+
catch (e) { }
|
|
225
|
+
}
|
|
226
|
+
// Fallback to unscoping for templated or unknown URIs
|
|
227
|
+
const unscoped = this.unscopeUri(uri);
|
|
228
|
+
if (unscoped) {
|
|
229
|
+
try {
|
|
230
|
+
const client = await this.getClient(unscoped.prefix);
|
|
231
|
+
return await client.readResource({ uri: unscoped.originalUri });
|
|
232
|
+
}
|
|
233
|
+
catch (e) { }
|
|
234
|
+
}
|
|
235
|
+
throw new Error(`Resource not found: ${uri}`);
|
|
236
|
+
}
|
|
237
|
+
addResourceMapping(scopedUri, prefix, originalUri) {
|
|
238
|
+
this.resourceToClient.set(scopedUri, { prefix, originalUri });
|
|
239
|
+
}
|
|
240
|
+
addLocalResource(uri, local) {
|
|
241
|
+
this.localResources.set(uri, local);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
exports.CapabilityDispatch = CapabilityDispatch;
|
|
245
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":";;;;;;AAGA,4CAAoB;AACpB,gDAAwB;AAcxB,MAAa,kBAAkB;IAKnB;IACA;IALF,gBAAgB,GAAyD,IAAI,GAAG,EAAE,CAAC;IACnF,cAAc,GAA+B,IAAI,GAAG,EAAE,CAAC;IAE/D,YACU,cAA0C,EAC1C,YAAsC;QADtC,mBAAc,GAAd,cAAc,CAA4B;QAC1C,iBAAY,GAAZ,YAAY,CAA0B;IAC7C,CAAC;IAEJ,SAAS,CAAC,MAAc,EAAE,IAAY;QACpC,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC;QACvB,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,qBAAqB,SAAS,OAAO,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,cAAc,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,GAAW;QAClC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YAC9C,OAAO,SAAS,MAAM,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,SAAS,MAAM,QAAQ,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEzC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;YACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,gCAAgC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAElC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,WAAmB,CAAC;YACxB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC;YACtC,CAAC;YAED,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC;YAC1B,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC;YAExB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,WAAgC;QAC3C,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClC,GAAG,IAAI;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;aACxC,CAAC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,aAAoC;QACjD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,4DAA4D;QAC5D,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,8BAA8B;gBACpC,WAAW,EAAE,4EAA4E;aAC1F,CAAC,CAAC;QACL,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxC,GAAG,MAAM;gBACT,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;aAC1C,CAAC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,IAA0B;QAC1D,IAAI,QAAQ,KAAK,8BAA8B,EAAE,CAAC;YAChD,IAAI,OAAO,GAAG,8EAA8E,CAAC;YAC7F,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5D,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,QAAQ,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACnF,CAAC;YACD,OAAO,IAAI,4EAA4E,CAAC;YAExF,OAAO;gBACL,WAAW,EAAE,4BAA4B;gBACzC,QAAQ,EAAE,CAAC;wBACT,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO;yBACd;qBACF,CAAC;aACH,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,GAAG,cAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,OAAO;oBACL,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,QAAQ,EAAE,CAAC;4BACT,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE;gCACP,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,OAAO;6BACd;yBACF,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC;YAC5B,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,eAAwC;QACvD,MAAM,YAAY,GAAe,EAAE,CAAC;QAEpC,kCAAkC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,YAAY,CAAC,IAAI,CAAC;gBAChB,GAAG;gBACH,IAAI,EAAE,GAAG,cAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,KAAK,CAAC,IAAI,GAAG;gBACpE,WAAW,EAAE,wBAAwB,cAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5D,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC5E,OAAO;oBACL,GAAG,QAAQ;oBACX,GAAG,EAAE,SAAS;oBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;iBAC5C,CAAC;YACJ,CAAC,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,wBAAwB,CAAC,eAAgD;QACvE,MAAM,YAAY,GAAuB,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5D,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,GAAG,CAAC;gBACJ,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC;aAClD,CAAC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,oCAAoC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,GAAG,cAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,OAAO;oBACL,QAAQ,EAAE,CAAC;4BACT,GAAG;4BACH,QAAQ,EAAE,eAAe;4BACzB,IAAI,EAAE,OAAO;yBACd,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACpD,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;QAED,sDAAsD;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrD,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,kBAAkB,CAAC,SAAiB,EAAE,MAAc,EAAE,WAAmB;QACvE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB,CAAC,GAAW,EAAE,KAAoB;QAChD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;CACF;AAjQD,gDAiQC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function analyzePackage(pkgPath: string): Promise<{
|
|
2
|
+
scripts: string[];
|
|
3
|
+
}>;
|
|
4
|
+
export declare function installPackage(url: string, confirm?: (summary: {
|
|
5
|
+
scripts: string[];
|
|
6
|
+
}) => Promise<boolean>): Promise<string>;
|
|
7
|
+
export declare function resolveDependencies(pkgPath: string): Promise<void>;
|
|
8
|
+
export declare function createLinkPackage(name: string, command: string, args: string[], env?: Record<string, string>, cwd?: string): Promise<string>;
|
|
@@ -0,0 +1,357 @@
|
|
|
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.analyzePackage = analyzePackage;
|
|
40
|
+
exports.installPackage = installPackage;
|
|
41
|
+
exports.resolveDependencies = resolveDependencies;
|
|
42
|
+
exports.createLinkPackage = createLinkPackage;
|
|
43
|
+
const simple_git_1 = __importDefault(require("simple-git"));
|
|
44
|
+
const path_1 = __importDefault(require("path"));
|
|
45
|
+
const fs_1 = __importDefault(require("fs"));
|
|
46
|
+
const child_process_1 = require("child_process");
|
|
47
|
+
const util_1 = require("util");
|
|
48
|
+
const toml = __importStar(require("smol-toml"));
|
|
49
|
+
const logger_1 = require("./logger");
|
|
50
|
+
const registry_1 = require("./registry");
|
|
51
|
+
const config_1 = require("./config");
|
|
52
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
53
|
+
const readFileAsync = fs_1.default.promises.readFile;
|
|
54
|
+
const writeFileAsync = fs_1.default.promises.writeFile;
|
|
55
|
+
const mkdirAsync = fs_1.default.promises.mkdir;
|
|
56
|
+
const rmAsync = fs_1.default.promises.rm;
|
|
57
|
+
const INSTALL_TIMEOUT = 300000; // 5 minutes
|
|
58
|
+
const PM_HELP = {
|
|
59
|
+
pnpm: "To install pnpm, run: npm install -g pnpm",
|
|
60
|
+
yarn: "To install yarn, run: npm install -g yarn",
|
|
61
|
+
bun: "To install bun, visit: https://bun.sh",
|
|
62
|
+
npm: "Ensure Node.js and npm are installed correctly.",
|
|
63
|
+
poetry: "To install poetry, visit: https://python-poetry.org/docs/#installation",
|
|
64
|
+
uv: "To install uv, visit: https://github.com/astral-sh/uv"
|
|
65
|
+
};
|
|
66
|
+
async function ensurePackageManager(pm) {
|
|
67
|
+
try {
|
|
68
|
+
await execAsync(`${pm} --version`);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
throw new Error(`Package manager '${pm}' is required to install this package, but it was not found.\n` +
|
|
72
|
+
`Suggestion: ${PM_HELP[pm]}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function redactUrl(url) {
|
|
76
|
+
try {
|
|
77
|
+
const parsed = new URL(url);
|
|
78
|
+
if (parsed.password) {
|
|
79
|
+
parsed.password = '****';
|
|
80
|
+
}
|
|
81
|
+
return parsed.toString();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// If not a standard URL, use regex as fallback
|
|
85
|
+
return url.replace(/([^:]+):([^@]+)@/, '$1:****@');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Sanitizes Git URLs by removing prefixes like 'git+' and fragments.
|
|
90
|
+
*/
|
|
91
|
+
function sanitizeGitUrl(url) {
|
|
92
|
+
let sanitized = url.trim();
|
|
93
|
+
// Remove git+ prefix (common in package.json)
|
|
94
|
+
if (sanitized.startsWith('git+')) {
|
|
95
|
+
sanitized = sanitized.substring(4);
|
|
96
|
+
}
|
|
97
|
+
// Remove .git suffix for consistency if it's a standard URL
|
|
98
|
+
if (sanitized.endsWith('.git')) {
|
|
99
|
+
sanitized = sanitized.substring(0, sanitized.length - 4);
|
|
100
|
+
}
|
|
101
|
+
// Remove fragments (e.g., #main)
|
|
102
|
+
const fragmentIndex = sanitized.indexOf('#');
|
|
103
|
+
if (fragmentIndex !== -1) {
|
|
104
|
+
sanitized = sanitized.substring(0, fragmentIndex);
|
|
105
|
+
}
|
|
106
|
+
return sanitized;
|
|
107
|
+
}
|
|
108
|
+
function validateUrl(url) {
|
|
109
|
+
if (url.trim().startsWith('-')) {
|
|
110
|
+
throw new Error("Invalid Git URL: URL cannot start with a dash.");
|
|
111
|
+
}
|
|
112
|
+
// Basic protocol check
|
|
113
|
+
const allowedProtocols = ['https:', 'git:', 'ssh:', 'http:'];
|
|
114
|
+
try {
|
|
115
|
+
const parsed = new URL(url);
|
|
116
|
+
if (!allowedProtocols.includes(parsed.protocol)) {
|
|
117
|
+
// Check if it's an scp-like ssh syntax (e.g. user@host:path)
|
|
118
|
+
if (!url.includes('@') || !url.includes(':')) {
|
|
119
|
+
throw new Error(`Invalid protocol: ${parsed.protocol}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
// If URL parsing fails, check if it's a valid SSH shortcut
|
|
125
|
+
if (!url.includes('@') || !url.includes(':')) {
|
|
126
|
+
throw new Error("Invalid Git URL format.");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function validateName(name, context) {
|
|
131
|
+
if (name.includes('__')) {
|
|
132
|
+
throw new Error(`Invalid ${context} name: '${name}'.\n` +
|
|
133
|
+
`The sequence '__' is reserved as a routing delimiter by AgentBrew.\n` +
|
|
134
|
+
`Please rename the ${context} to proceed.`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function analyzePackage(pkgPath) {
|
|
138
|
+
const scripts = [];
|
|
139
|
+
const packageJsonPath = path_1.default.join(pkgPath, 'package.json');
|
|
140
|
+
if (fs_1.default.existsSync(packageJsonPath)) {
|
|
141
|
+
try {
|
|
142
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
|
|
143
|
+
if (pkg.scripts) {
|
|
144
|
+
['preinstall', 'install', 'postinstall', 'prebuild', 'build', 'postbuild'].forEach(s => {
|
|
145
|
+
if (pkg.scripts[s])
|
|
146
|
+
scripts.push(`${s}: ${pkg.scripts[s]}`);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
logger_1.Logger.error(`Failed to parse package.json for analysis at ${packageJsonPath}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Return summary object
|
|
155
|
+
return { scripts };
|
|
156
|
+
}
|
|
157
|
+
async function installPackage(url, confirm) {
|
|
158
|
+
const sanitizedUrl = sanitizeGitUrl(url);
|
|
159
|
+
validateUrl(sanitizedUrl);
|
|
160
|
+
const safeLogUrl = redactUrl(sanitizedUrl);
|
|
161
|
+
// Ensure directories exist
|
|
162
|
+
const packagesDir = (0, config_1.getPackagesDir)();
|
|
163
|
+
if (!fs_1.default.existsSync(packagesDir)) {
|
|
164
|
+
await mkdirAsync(packagesDir, { recursive: true });
|
|
165
|
+
}
|
|
166
|
+
// Enforce strict uniqueness: use the repo name as the directory name
|
|
167
|
+
const repoName = sanitizedUrl.split('/').pop()?.split(':').pop()?.replace('.git', '') || 'pkg';
|
|
168
|
+
validateName(repoName, 'package');
|
|
169
|
+
const targetPath = path_1.default.join(packagesDir, repoName);
|
|
170
|
+
if (fs_1.default.existsSync(targetPath)) {
|
|
171
|
+
throw new Error(`Package '${repoName}' is already installed at ${targetPath}. Uninstall it first to install a different version.`);
|
|
172
|
+
}
|
|
173
|
+
const gitEnv = { ...process.env, GIT_TERMINAL_PROMPT: '0' };
|
|
174
|
+
// Simple-git's argv-parser blocks PAGER/GIT_PAGER by default for security
|
|
175
|
+
delete gitEnv.PAGER;
|
|
176
|
+
delete gitEnv.GIT_PAGER;
|
|
177
|
+
const git = (0, simple_git_1.default)().env(gitEnv);
|
|
178
|
+
try {
|
|
179
|
+
logger_1.Logger.info(`Cloning ${safeLogUrl} into ${targetPath}...`);
|
|
180
|
+
await git.clone(sanitizedUrl, targetPath);
|
|
181
|
+
// Security Audit
|
|
182
|
+
const summary = await analyzePackage(targetPath);
|
|
183
|
+
if (confirm) {
|
|
184
|
+
const approved = await confirm(summary);
|
|
185
|
+
if (!approved) {
|
|
186
|
+
throw new Error("Installation aborted by user after security review.");
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Post-install dependency resolution
|
|
190
|
+
await resolveDependencies(targetPath);
|
|
191
|
+
// Generate discovery cache
|
|
192
|
+
const manifests = (0, registry_1.findManifests)(targetPath, 2);
|
|
193
|
+
for (const m of manifests) {
|
|
194
|
+
// Validate names in the manifest
|
|
195
|
+
if (m.manifest.servers) {
|
|
196
|
+
for (const srv of m.manifest.servers) {
|
|
197
|
+
validateName(srv.name, 'server');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (m.manifest.prompts) {
|
|
201
|
+
for (const prompt of m.manifest.prompts) {
|
|
202
|
+
validateName(prompt.name, 'prompt');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
await (0, registry_1.generateMcpManifest)(m.path, m.manifest, true);
|
|
206
|
+
}
|
|
207
|
+
return targetPath;
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
let finalError = error;
|
|
211
|
+
const errorMsg = error.message || '';
|
|
212
|
+
if (errorMsg.includes('Authentication failed') || errorMsg.includes('could not read Username') || errorMsg.includes('Permission denied (publickey)')) {
|
|
213
|
+
finalError = new Error(`Authentication failed for private repository: ${safeLogUrl}\n` +
|
|
214
|
+
`Suggestions:\n` +
|
|
215
|
+
` - If using SSH, ensure your keys are added (ssh-add -l).\n` +
|
|
216
|
+
` - If using HTTPS, ensure you have a credential helper configured or provide a token.\n` +
|
|
217
|
+
` - Git terminal prompts are disabled to prevent hanging.`);
|
|
218
|
+
}
|
|
219
|
+
else if (errorMsg.includes('timeout') || errorMsg.includes('Connection') || errorMsg.includes('Failed to connect') || errorMsg.includes('discover capabilities')) {
|
|
220
|
+
finalError = new Error(`Installation failed due to connection or credential errors: ${errorMsg}\n` +
|
|
221
|
+
`Suggestions:\n` +
|
|
222
|
+
` - This server may require API tokens or credentials to function correctly.\n` +
|
|
223
|
+
` - Ensure all required environment variables and API tokens are set in your shell session, then try the installation again.`);
|
|
224
|
+
}
|
|
225
|
+
logger_1.Logger.error(`Installation failed for ${safeLogUrl}:`, finalError.message);
|
|
226
|
+
if (fs_1.default.existsSync(targetPath)) {
|
|
227
|
+
logger_1.Logger.info(`Cleaning up ${targetPath}...`);
|
|
228
|
+
await rmAsync(targetPath, { recursive: true, force: true });
|
|
229
|
+
}
|
|
230
|
+
throw finalError;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async function resolveDependencies(pkgPath) {
|
|
234
|
+
logger_1.Logger.info(`Resolving dependencies in ${pkgPath}...`);
|
|
235
|
+
const packageJsonPath = path_1.default.join(pkgPath, 'package.json');
|
|
236
|
+
const pnpmLockPath = path_1.default.join(pkgPath, 'pnpm-lock.yaml');
|
|
237
|
+
const yarnLockPath = path_1.default.join(pkgPath, 'yarn.lock');
|
|
238
|
+
const bunLockPath = path_1.default.join(pkgPath, 'bun.lockb');
|
|
239
|
+
const npmLockPath = path_1.default.join(pkgPath, 'package-lock.json');
|
|
240
|
+
const requirementsPath = path_1.default.join(pkgPath, 'requirements.txt');
|
|
241
|
+
const poetryLockPath = path_1.default.join(pkgPath, 'poetry.lock');
|
|
242
|
+
const uvLockPath = path_1.default.join(pkgPath, 'uv.lock');
|
|
243
|
+
let packageManager = null;
|
|
244
|
+
if (fs_1.default.existsSync(pnpmLockPath)) {
|
|
245
|
+
packageManager = 'pnpm';
|
|
246
|
+
}
|
|
247
|
+
else if (fs_1.default.existsSync(yarnLockPath)) {
|
|
248
|
+
packageManager = 'yarn';
|
|
249
|
+
}
|
|
250
|
+
else if (fs_1.default.existsSync(bunLockPath)) {
|
|
251
|
+
packageManager = 'bun';
|
|
252
|
+
}
|
|
253
|
+
else if (fs_1.default.existsSync(npmLockPath)) {
|
|
254
|
+
packageManager = 'npm';
|
|
255
|
+
}
|
|
256
|
+
else if (fs_1.default.existsSync(poetryLockPath)) {
|
|
257
|
+
packageManager = 'poetry';
|
|
258
|
+
}
|
|
259
|
+
else if (fs_1.default.existsSync(uvLockPath)) {
|
|
260
|
+
packageManager = 'uv';
|
|
261
|
+
}
|
|
262
|
+
else if (fs_1.default.existsSync(packageJsonPath)) {
|
|
263
|
+
packageManager = 'npm';
|
|
264
|
+
}
|
|
265
|
+
const execOpts = { cwd: pkgPath, maxBuffer: 1024 * 1024 * 50, timeout: INSTALL_TIMEOUT };
|
|
266
|
+
if (packageManager) {
|
|
267
|
+
await ensurePackageManager(packageManager);
|
|
268
|
+
logger_1.Logger.info(`Installing dependencies with ${packageManager}...`);
|
|
269
|
+
if (packageManager === 'poetry') {
|
|
270
|
+
await execAsync(`poetry install`, execOpts);
|
|
271
|
+
}
|
|
272
|
+
else if (packageManager === 'uv') {
|
|
273
|
+
await execAsync(`uv sync`, execOpts);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
await execAsync(`${packageManager} install`, execOpts);
|
|
277
|
+
if (fs_1.default.existsSync(packageJsonPath)) {
|
|
278
|
+
try {
|
|
279
|
+
const pkgJson = JSON.parse(await readFileAsync(packageJsonPath, 'utf-8'));
|
|
280
|
+
if (pkgJson.scripts?.build) {
|
|
281
|
+
logger_1.Logger.info(`Running build script with ${packageManager}...`);
|
|
282
|
+
await execAsync(`${packageManager} run build`, execOpts);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (e) {
|
|
286
|
+
logger_1.Logger.error(`Failed to parse or run build script for ${packageJsonPath}:`, e);
|
|
287
|
+
throw e;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else if (fs_1.default.existsSync(requirementsPath)) {
|
|
293
|
+
const venvDir = '.venv';
|
|
294
|
+
let hasUv = false;
|
|
295
|
+
try {
|
|
296
|
+
await execAsync('uv --version', { timeout: 2000 });
|
|
297
|
+
hasUv = true;
|
|
298
|
+
}
|
|
299
|
+
catch (e) {
|
|
300
|
+
// uv not found, will fall back to standard venv
|
|
301
|
+
}
|
|
302
|
+
if (hasUv) {
|
|
303
|
+
logger_1.Logger.info("Setting up Python virtual environment with uv...");
|
|
304
|
+
await execAsync(`uv venv ${venvDir}`, execOpts);
|
|
305
|
+
logger_1.Logger.info("Installing Python dependencies with uv...");
|
|
306
|
+
await execAsync(`uv pip install -r requirements.txt`, execOpts);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
logger_1.Logger.info("Setting up Python virtual environment...");
|
|
310
|
+
await execAsync(`python3 -m venv ${venvDir}`, execOpts);
|
|
311
|
+
const pipPath = process.platform === 'win32'
|
|
312
|
+
? path_1.default.join(venvDir, 'Scripts', 'pip')
|
|
313
|
+
: path_1.default.join(venvDir, 'bin', 'pip');
|
|
314
|
+
logger_1.Logger.info("Installing Python dependencies...");
|
|
315
|
+
await execAsync(`${pipPath} install -r requirements.txt`, execOpts);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
async function createLinkPackage(name, command, args, env, cwd) {
|
|
320
|
+
validateName(name, 'package');
|
|
321
|
+
// Basic validation to prevent path traversal
|
|
322
|
+
if (name.includes('..') || name.includes('/') || name.includes('\\')) {
|
|
323
|
+
throw new Error("Invalid package name: name cannot contain path traversal characters.");
|
|
324
|
+
}
|
|
325
|
+
// Ensure PACKAGES_DIR exists
|
|
326
|
+
const packagesDir = (0, config_1.getPackagesDir)();
|
|
327
|
+
if (!fs_1.default.existsSync(packagesDir)) {
|
|
328
|
+
await mkdirAsync(packagesDir, { recursive: true });
|
|
329
|
+
}
|
|
330
|
+
// Enforce strict uniqueness: use the name as the directory name
|
|
331
|
+
const pkgDirName = `linked-${name}`;
|
|
332
|
+
const targetPath = path_1.default.join(packagesDir, pkgDirName);
|
|
333
|
+
if (fs_1.default.existsSync(targetPath)) {
|
|
334
|
+
throw new Error(`Linked package '${name}' is already installed at ${targetPath}`);
|
|
335
|
+
}
|
|
336
|
+
await mkdirAsync(targetPath, { recursive: true });
|
|
337
|
+
const manifest = {
|
|
338
|
+
name: `linked-${name}`,
|
|
339
|
+
version: "1.0.0",
|
|
340
|
+
description: "Linked server migrated to AgentBrew",
|
|
341
|
+
servers: [
|
|
342
|
+
{
|
|
343
|
+
name,
|
|
344
|
+
command,
|
|
345
|
+
args,
|
|
346
|
+
description: `Linked server: ${name}`,
|
|
347
|
+
env: env && Object.keys(env).length > 0 ? env : undefined,
|
|
348
|
+
cwd: cwd
|
|
349
|
+
}
|
|
350
|
+
]
|
|
351
|
+
};
|
|
352
|
+
await writeFileAsync(path_1.default.join(targetPath, 'agentbrew.toml'), toml.stringify(manifest), 'utf-8');
|
|
353
|
+
// Generate discovery cache
|
|
354
|
+
await (0, registry_1.generateMcpManifest)(targetPath, manifest);
|
|
355
|
+
return targetPath;
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GA,wCAiBC;AAED,wCAwFC;AAED,kDAmFC;AAED,8CA6CC;AA3VD,4DAAmC;AACnC,gDAAwB;AACxB,4CAAoB;AACpB,iDAAqC;AACrC,+BAAiC;AACjC,gDAAkC;AAElC,qCAAkC;AAClC,yCAAiF;AACjF,qCAA0C;AAE1C,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAClC,MAAM,aAAa,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3C,MAAM,cAAc,GAAG,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC7C,MAAM,UAAU,GAAG,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AACrC,MAAM,OAAO,GAAG,YAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,YAAY;AAE5C,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,2CAA2C;IACjD,IAAI,EAAE,2CAA2C;IACjD,GAAG,EAAE,uCAAuC;IAC5C,GAAG,EAAE,iDAAiD;IACtD,MAAM,EAAE,wEAAwE;IAChF,EAAE,EAAE,uDAAuD;CAC5D,CAAC;AAEF,KAAK,UAAU,oBAAoB,CAAC,EAAwB;IAC1D,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oBAAoB,EAAE,gEAAgE;YACtF,eAAe,OAAO,CAAC,EAAE,CAAC,EAAE,CAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;QAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,8CAA8C;IAC9C,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,4DAA4D;IAC5D,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,iCAAiC;IACjC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,6DAA6D;YAC7D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,2DAA2D;QAC3D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,OAAe;IACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,WAAW,OAAO,WAAW,IAAI,MAAM;YACvC,sEAAsE;YACtE,qBAAqB,OAAO,cAAc,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,OAAe;IAChD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACnF,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,eAAM,CAAC,KAAK,CAAC,gDAAgD,eAAe,EAAE,CAAC,CAAC;QACpF,CAAC;IACL,CAAC;IACD,wBAAwB;IACxB,OAAO,EAAE,OAAO,EAAE,CAAC;AACvB,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAA8D;IAC9G,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAE3C,2BAA2B;IAC3B,MAAM,WAAW,GAAG,IAAA,uBAAc,GAAE,CAAC;IACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,qEAAqE;IACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;IAC/F,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,6BAA6B,UAAU,sDAAsD,CAAC,CAAC;IACrI,CAAC;IAED,MAAM,MAAM,GAAuC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;IAChG,0EAA0E;IAC1E,OAAO,MAAM,CAAC,KAAK,CAAC;IACpB,OAAO,MAAM,CAAC,SAAS,CAAC;IAExB,MAAM,GAAG,GAAG,IAAA,oBAAS,GAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,eAAM,CAAC,IAAI,CAAC,WAAW,UAAU,SAAS,UAAU,KAAK,CAAC,CAAC;QAC3D,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAE1C,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QAED,qCAAqC;QACrC,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEtC,2BAA2B;QAC3B,MAAM,SAAS,GAAG,IAAA,wBAAa,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACxB,iCAAiC;YACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACxC,CAAC;YACL,CAAC;YACD,MAAM,IAAA,8BAAmB,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;YACrJ,UAAU,GAAG,IAAI,KAAK,CACpB,iDAAiD,UAAU,IAAI;gBAC/D,gBAAgB;gBAChB,8DAA8D;gBAC9D,0FAA0F;gBAC1F,2DAA2D,CAC5D,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACnK,UAAU,GAAG,IAAI,KAAK,CACpB,+DAA+D,QAAQ,IAAI;gBAC3E,gBAAgB;gBAChB,gFAAgF;gBAChF,8HAA8H,CAC/H,CAAC;QACJ,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,2BAA2B,UAAU,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,eAAM,CAAC,IAAI,CAAC,eAAe,UAAU,KAAK,CAAC,CAAC;YAC5C,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,UAAU,CAAC;IACnB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,eAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,KAAK,CAAC,CAAC;IAEvD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEjD,IAAI,cAAc,GAA6D,IAAI,CAAC;IAEpF,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,cAAc,GAAG,QAAQ,CAAC;IAC5B,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAEzF,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC3C,eAAM,CAAC,IAAI,CAAC,gCAAgC,cAAc,KAAK,CAAC,CAAC;QAEjE,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,CAAC,GAAG,cAAc,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEvD,IAAI,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC1E,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wBAC3B,eAAM,CAAC,IAAI,CAAC,6BAA6B,cAAc,KAAK,CAAC,CAAC;wBAC9D,MAAM,SAAS,CAAC,GAAG,cAAc,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,eAAM,CAAC,KAAK,CAAC,2CAA2C,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC/E,MAAM,CAAC,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC;QACxB,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gDAAgD;QAClD,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,eAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAChE,MAAM,SAAS,CAAC,WAAW,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChD,eAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,oCAAoC,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACxD,MAAM,SAAS,CAAC,mBAAmB,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;YAExD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC1C,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;gBACtC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAErC,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACjD,MAAM,SAAS,CAAC,GAAG,OAAO,8BAA8B,EAAE,QAAQ,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,IAAc,EAAE,GAA4B,EAAE,GAAY;IAC/H,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9B,6CAA6C;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,IAAA,uBAAc,GAAE,CAAC;IACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,gEAAgE;IAChE,MAAM,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEtD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,6BAA6B,UAAU,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAoB;QAChC,IAAI,EAAE,UAAU,IAAI,EAAE;QACtB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE;YACP;gBACE,IAAI;gBACJ,OAAO;gBACP,IAAI;gBACJ,WAAW,EAAE,kBAAkB,IAAI,EAAE;gBACrC,GAAG,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;gBACzD,GAAG,EAAE,GAAG;aACT;SACF;KACF,CAAC;IAEF,MAAM,cAAc,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAe,CAAC,EAAE,OAAO,CAAC,CAAC;IAExG,2BAA2B;IAC3B,MAAM,IAAA,8BAAmB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEhD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/logger.d.ts
ADDED