microsandbox-mcp 0.5.7 → 0.5.10
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 +142 -27
- package/dist/config.d.ts +10 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/resources.d.ts +2 -0
- package/dist/resources.js +71 -0
- package/dist/resources.js.map +1 -0
- package/dist/schemas/common.d.ts +7 -0
- package/dist/schemas/common.js +8 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/state/exec-sessions.d.ts +19 -0
- package/dist/state/exec-sessions.js +151 -0
- package/dist/state/exec-sessions.js.map +1 -0
- package/dist/tools/exec.js +283 -56
- package/dist/tools/exec.js.map +1 -1
- package/dist/tools/filesystem.js +195 -59
- package/dist/tools/filesystem.js.map +1 -1
- package/dist/tools/image.d.ts +2 -0
- package/dist/tools/image.js +99 -0
- package/dist/tools/image.js.map +1 -0
- package/dist/tools/logs.d.ts +2 -0
- package/dist/tools/logs.js +128 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/metrics.js +48 -65
- package/dist/tools/metrics.js.map +1 -1
- package/dist/tools/runtime.d.ts +2 -0
- package/dist/tools/runtime.js +61 -0
- package/dist/tools/runtime.js.map +1 -0
- package/dist/tools/sandbox.d.ts +216 -0
- package/dist/tools/sandbox.js +619 -202
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/snapshot.d.ts +2 -0
- package/dist/tools/snapshot.js +234 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/ssh.d.ts +2 -0
- package/dist/tools/ssh.js +323 -0
- package/dist/tools/ssh.js.map +1 -0
- package/dist/tools/volume.js +287 -23
- package/dist/tools/volume.js.map +1 -1
- package/dist/utils/errors.d.ts +2 -7
- package/dist/utils/errors.js +6 -5
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/exec-output.d.ts +20 -0
- package/dist/utils/exec-output.js +15 -0
- package/dist/utils/exec-output.js.map +1 -0
- package/dist/utils/output.d.ts +11 -0
- package/dist/utils/output.js +21 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/policy.d.ts +8 -0
- package/dist/utils/policy.js +47 -0
- package/dist/utils/policy.js.map +1 -0
- package/dist/utils/redaction.d.ts +1 -0
- package/dist/utils/redaction.js +15 -0
- package/dist/utils/redaction.js.map +1 -0
- package/dist/utils/response.d.ts +34 -0
- package/dist/utils/response.js +38 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/utils/serialization.d.ts +15 -0
- package/dist/utils/serialization.js +164 -0
- package/dist/utils/serialization.js.map +1 -0
- package/package.json +5 -3
package/dist/tools/volume.js
CHANGED
|
@@ -1,28 +1,39 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { Volume } from "microsandbox";
|
|
3
3
|
import { formatError } from "../utils/errors.js";
|
|
4
|
+
import { limitText } from "../utils/output.js";
|
|
5
|
+
import { ok } from "../utils/response.js";
|
|
6
|
+
import { fsEntryData, fsMetadataData, volumeHandleData } from "../utils/serialization.js";
|
|
7
|
+
const encodingSchema = z.enum(["utf8", "base64"]);
|
|
4
8
|
export function registerVolumeTools(server) {
|
|
5
9
|
server.registerTool("volume_create", {
|
|
6
10
|
title: "Create Volume",
|
|
7
|
-
description: "Create a named persistent volume.
|
|
11
|
+
description: "Create a directory or disk-backed named persistent volume.",
|
|
8
12
|
inputSchema: z.object({
|
|
9
13
|
name: z.string().describe("Volume name"),
|
|
10
|
-
|
|
14
|
+
kind: z.enum(["directory", "disk"]).optional().describe("Volume kind. Defaults to directory."),
|
|
15
|
+
sizeMib: z.number().int().min(1).optional().describe("Disk capacity in MiB for disk-backed volumes"),
|
|
16
|
+
quotaMib: z.number().int().min(1).optional().describe("Quota in MiB"),
|
|
17
|
+
labels: z.record(z.string(), z.string()).optional().describe("Volume labels"),
|
|
11
18
|
}),
|
|
12
19
|
annotations: {
|
|
13
20
|
readOnlyHint: false,
|
|
14
21
|
destructiveHint: false,
|
|
15
22
|
idempotentHint: false,
|
|
16
23
|
},
|
|
17
|
-
}, async ({ name, sizeMib }) => {
|
|
24
|
+
}, async ({ name, kind, sizeMib, quotaMib, labels }) => {
|
|
18
25
|
try {
|
|
19
26
|
let builder = Volume.builder(name);
|
|
27
|
+
builder = kind === "disk" ? builder.disk() : builder.directory();
|
|
20
28
|
if (typeof sizeMib === "number")
|
|
21
|
-
builder = builder.
|
|
29
|
+
builder = builder.size(sizeMib);
|
|
30
|
+
if (typeof quotaMib === "number")
|
|
31
|
+
builder = builder.quota(quotaMib);
|
|
32
|
+
for (const [key, value] of Object.entries(labels ?? {})) {
|
|
33
|
+
builder = builder.label(key, value);
|
|
34
|
+
}
|
|
22
35
|
await builder.create();
|
|
23
|
-
return
|
|
24
|
-
content: [{ type: "text", text: JSON.stringify({ name, created: true }, null, 2) }],
|
|
25
|
-
};
|
|
36
|
+
return ok(volumeHandleData(await Volume.get(name)));
|
|
26
37
|
}
|
|
27
38
|
catch (error) {
|
|
28
39
|
return formatError(error);
|
|
@@ -40,41 +51,294 @@ export function registerVolumeTools(server) {
|
|
|
40
51
|
}, async () => {
|
|
41
52
|
try {
|
|
42
53
|
const handles = await Volume.list();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
return ok(handles.map(volumeHandleData));
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return formatError(error);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
server.registerTool("volume_inspect", {
|
|
61
|
+
title: "Inspect Volume",
|
|
62
|
+
description: "Inspect one named volume.",
|
|
63
|
+
inputSchema: z.object({
|
|
64
|
+
name: z.string().describe("Volume name"),
|
|
65
|
+
}),
|
|
66
|
+
annotations: {
|
|
67
|
+
readOnlyHint: true,
|
|
68
|
+
destructiveHint: false,
|
|
69
|
+
idempotentHint: true,
|
|
70
|
+
},
|
|
71
|
+
}, async ({ name }) => {
|
|
72
|
+
try {
|
|
73
|
+
return ok(volumeHandleData(await Volume.get(name)));
|
|
52
74
|
}
|
|
53
75
|
catch (error) {
|
|
54
76
|
return formatError(error);
|
|
55
77
|
}
|
|
56
78
|
});
|
|
57
79
|
server.registerTool("volume_remove", {
|
|
58
|
-
title: "Remove
|
|
59
|
-
description: "Remove
|
|
80
|
+
title: "Remove Volumes",
|
|
81
|
+
description: "Remove one or more named volumes.",
|
|
82
|
+
inputSchema: z.object({
|
|
83
|
+
name: z.string().optional().describe("Volume name"),
|
|
84
|
+
names: z.array(z.string()).optional().describe("Volume names"),
|
|
85
|
+
}),
|
|
86
|
+
annotations: {
|
|
87
|
+
readOnlyHint: false,
|
|
88
|
+
destructiveHint: true,
|
|
89
|
+
idempotentHint: true,
|
|
90
|
+
},
|
|
91
|
+
}, async ({ name, names }) => {
|
|
92
|
+
try {
|
|
93
|
+
const targets = [...(name ? [name] : []), ...(names ?? [])];
|
|
94
|
+
if (targets.length === 0)
|
|
95
|
+
throw new Error("volume_remove requires name or names");
|
|
96
|
+
const results = [];
|
|
97
|
+
for (const target of targets) {
|
|
98
|
+
await Volume.remove(target);
|
|
99
|
+
results.push({ name: target, removed: true });
|
|
100
|
+
}
|
|
101
|
+
return ok(results);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return formatError(error);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
server.registerTool("volume_fs_read", {
|
|
108
|
+
title: "Read Volume File",
|
|
109
|
+
description: "Read a file from a named volume as UTF-8 text or base64 bytes.",
|
|
110
|
+
inputSchema: z.object({
|
|
111
|
+
name: z.string().describe("Volume name"),
|
|
112
|
+
path: z.string().describe("Path inside the volume"),
|
|
113
|
+
encoding: encodingSchema.optional().describe("Output encoding. Defaults to utf8."),
|
|
114
|
+
maxBytes: z.number().int().positive().optional().describe("Maximum bytes to return"),
|
|
115
|
+
}),
|
|
116
|
+
annotations: {
|
|
117
|
+
readOnlyHint: true,
|
|
118
|
+
destructiveHint: false,
|
|
119
|
+
idempotentHint: true,
|
|
120
|
+
},
|
|
121
|
+
}, async ({ name, path, encoding, maxBytes }) => {
|
|
122
|
+
try {
|
|
123
|
+
const fs = await volumeFs(name);
|
|
124
|
+
if ((encoding ?? "utf8") === "base64") {
|
|
125
|
+
const data = await fs.read(path);
|
|
126
|
+
const result = encodeBytes(data, "content", maxBytes);
|
|
127
|
+
return ok({ name, path, encoding: "base64", content: result.content }, {
|
|
128
|
+
truncated: result.truncated ? [result.truncated] : undefined,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const content = await fs.readToString(path);
|
|
132
|
+
const limited = limitText(content, "content", maxBytes);
|
|
133
|
+
return ok({ name, path, encoding: "utf8", content: limited.text }, {
|
|
134
|
+
truncated: limited.truncated ? [limited.truncated] : undefined,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return formatError(error);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
server.registerTool("volume_fs_write", {
|
|
142
|
+
title: "Write Volume File",
|
|
143
|
+
description: "Write UTF-8 text or base64 bytes into a named volume.",
|
|
144
|
+
inputSchema: z.object({
|
|
145
|
+
name: z.string().describe("Volume name"),
|
|
146
|
+
path: z.string().describe("Path inside the volume"),
|
|
147
|
+
content: z.string().describe("Content to write"),
|
|
148
|
+
encoding: encodingSchema.optional().describe("Input encoding. Defaults to utf8."),
|
|
149
|
+
}),
|
|
150
|
+
annotations: {
|
|
151
|
+
readOnlyHint: false,
|
|
152
|
+
destructiveHint: false,
|
|
153
|
+
idempotentHint: true,
|
|
154
|
+
},
|
|
155
|
+
}, async ({ name, path, content, encoding }) => {
|
|
156
|
+
try {
|
|
157
|
+
const data = (encoding ?? "utf8") === "base64" ? Buffer.from(content, "base64") : content;
|
|
158
|
+
const fs = await volumeFs(name);
|
|
159
|
+
await fs.write(path, data);
|
|
160
|
+
return ok({ name, path, encoding: encoding ?? "utf8", written: Buffer.byteLength(data) });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return formatError(error);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
server.registerTool("volume_fs_list", {
|
|
167
|
+
title: "List Volume Directory",
|
|
168
|
+
description: "List entries inside a named volume.",
|
|
169
|
+
inputSchema: z.object({
|
|
170
|
+
name: z.string().describe("Volume name"),
|
|
171
|
+
path: z.string().describe("Directory path inside the volume"),
|
|
172
|
+
}),
|
|
173
|
+
annotations: {
|
|
174
|
+
readOnlyHint: true,
|
|
175
|
+
destructiveHint: false,
|
|
176
|
+
idempotentHint: true,
|
|
177
|
+
},
|
|
178
|
+
}, async ({ name, path }) => {
|
|
179
|
+
try {
|
|
180
|
+
const fs = await volumeFs(name);
|
|
181
|
+
return ok((await fs.list(path)).map(fsEntryData));
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return formatError(error);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
server.registerTool("volume_fs_mkdir", {
|
|
188
|
+
title: "Create Volume Directory",
|
|
189
|
+
description: "Create a directory inside a named volume.",
|
|
60
190
|
inputSchema: z.object({
|
|
61
191
|
name: z.string().describe("Volume name"),
|
|
192
|
+
path: z.string().describe("Directory path inside the volume"),
|
|
193
|
+
}),
|
|
194
|
+
annotations: {
|
|
195
|
+
readOnlyHint: false,
|
|
196
|
+
destructiveHint: false,
|
|
197
|
+
idempotentHint: true,
|
|
198
|
+
},
|
|
199
|
+
}, async ({ name, path }) => {
|
|
200
|
+
try {
|
|
201
|
+
const fs = await volumeFs(name);
|
|
202
|
+
await fs.mkdir(path);
|
|
203
|
+
return ok({ name, path, created: true });
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
return formatError(error);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
server.registerTool("volume_fs_remove", {
|
|
210
|
+
title: "Remove Volume Path",
|
|
211
|
+
description: "Remove a file or directory from a named volume.",
|
|
212
|
+
inputSchema: z.object({
|
|
213
|
+
name: z.string().describe("Volume name"),
|
|
214
|
+
path: z.string().describe("Path inside the volume"),
|
|
215
|
+
kind: z.enum(["auto", "file", "dir"]).optional().describe("Removal kind. Defaults to auto."),
|
|
62
216
|
}),
|
|
63
217
|
annotations: {
|
|
64
218
|
readOnlyHint: false,
|
|
65
219
|
destructiveHint: true,
|
|
66
220
|
idempotentHint: true,
|
|
67
221
|
},
|
|
68
|
-
}, async ({ name }) => {
|
|
222
|
+
}, async ({ name, path, kind }) => {
|
|
223
|
+
try {
|
|
224
|
+
const fs = await volumeFs(name);
|
|
225
|
+
if (kind === "dir")
|
|
226
|
+
await fs.removeDir(path);
|
|
227
|
+
else if (kind === "file")
|
|
228
|
+
await fs.remove(path);
|
|
229
|
+
else {
|
|
230
|
+
try {
|
|
231
|
+
await fs.remove(path);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
await fs.removeDir(path);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return ok({ name, path, removed: true });
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
return formatError(error);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
server.registerTool("volume_fs_copy", {
|
|
244
|
+
title: "Copy Volume Path",
|
|
245
|
+
description: "Copy a file inside a named volume.",
|
|
246
|
+
inputSchema: z.object({
|
|
247
|
+
name: z.string().describe("Volume name"),
|
|
248
|
+
from: z.string().describe("Source path"),
|
|
249
|
+
to: z.string().describe("Destination path"),
|
|
250
|
+
}),
|
|
251
|
+
annotations: {
|
|
252
|
+
readOnlyHint: false,
|
|
253
|
+
destructiveHint: false,
|
|
254
|
+
idempotentHint: false,
|
|
255
|
+
},
|
|
256
|
+
}, async ({ name, from, to }) => {
|
|
69
257
|
try {
|
|
70
|
-
await
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
258
|
+
const fs = await volumeFs(name);
|
|
259
|
+
await fs.copy(from, to);
|
|
260
|
+
return ok({ name, from, to, copied: true });
|
|
74
261
|
}
|
|
75
262
|
catch (error) {
|
|
76
263
|
return formatError(error);
|
|
77
264
|
}
|
|
78
265
|
});
|
|
266
|
+
server.registerTool("volume_fs_rename", {
|
|
267
|
+
title: "Rename Volume Path",
|
|
268
|
+
description: "Rename a file or directory inside a named volume.",
|
|
269
|
+
inputSchema: z.object({
|
|
270
|
+
name: z.string().describe("Volume name"),
|
|
271
|
+
from: z.string().describe("Old path"),
|
|
272
|
+
to: z.string().describe("New path"),
|
|
273
|
+
}),
|
|
274
|
+
annotations: {
|
|
275
|
+
readOnlyHint: false,
|
|
276
|
+
destructiveHint: false,
|
|
277
|
+
idempotentHint: false,
|
|
278
|
+
},
|
|
279
|
+
}, async ({ name, from, to }) => {
|
|
280
|
+
try {
|
|
281
|
+
const fs = await volumeFs(name);
|
|
282
|
+
await fs.rename(from, to);
|
|
283
|
+
return ok({ name, from, to, renamed: true });
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
return formatError(error);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
server.registerTool("volume_fs_stat", {
|
|
290
|
+
title: "Stat Volume Path",
|
|
291
|
+
description: "Get metadata for a path inside a named volume.",
|
|
292
|
+
inputSchema: z.object({
|
|
293
|
+
name: z.string().describe("Volume name"),
|
|
294
|
+
path: z.string().describe("Path inside the volume"),
|
|
295
|
+
}),
|
|
296
|
+
annotations: {
|
|
297
|
+
readOnlyHint: true,
|
|
298
|
+
destructiveHint: false,
|
|
299
|
+
idempotentHint: true,
|
|
300
|
+
},
|
|
301
|
+
}, async ({ name, path }) => {
|
|
302
|
+
try {
|
|
303
|
+
const fs = await volumeFs(name);
|
|
304
|
+
return ok(fsMetadataData(await fs.stat(path)));
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
return formatError(error);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
server.registerTool("volume_fs_exists", {
|
|
311
|
+
title: "Check Volume Path Exists",
|
|
312
|
+
description: "Check whether a path exists inside a named volume.",
|
|
313
|
+
inputSchema: z.object({
|
|
314
|
+
name: z.string().describe("Volume name"),
|
|
315
|
+
path: z.string().describe("Path inside the volume"),
|
|
316
|
+
}),
|
|
317
|
+
annotations: {
|
|
318
|
+
readOnlyHint: true,
|
|
319
|
+
destructiveHint: false,
|
|
320
|
+
idempotentHint: true,
|
|
321
|
+
},
|
|
322
|
+
}, async ({ name, path }) => {
|
|
323
|
+
try {
|
|
324
|
+
const fs = await volumeFs(name);
|
|
325
|
+
return ok({ name, path, exists: await fs.exists(path) });
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
return formatError(error);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
async function volumeFs(name) {
|
|
333
|
+
return (await Volume.get(name)).fs();
|
|
334
|
+
}
|
|
335
|
+
function encodeBytes(data, field, maxBytes) {
|
|
336
|
+
const totalBytes = data.byteLength;
|
|
337
|
+
const returnedBytes = maxBytes && totalBytes > maxBytes ? maxBytes : totalBytes;
|
|
338
|
+
const content = Buffer.from(data.subarray(0, returnedBytes)).toString("base64");
|
|
339
|
+
return {
|
|
340
|
+
content,
|
|
341
|
+
truncated: returnedBytes < totalBytes ? { field, returnedBytes, totalBytes } : undefined,
|
|
342
|
+
};
|
|
79
343
|
}
|
|
80
344
|
//# sourceMappingURL=volume.js.map
|
package/dist/tools/volume.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volume.js","sourceRoot":"","sources":["../../src/tools/volume.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SACrE,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC,CAAC;YACJ,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SACzC,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"volume.js","sourceRoot":"","sources":["../../src/tools/volume.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAmB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE1F,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC9F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACpG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YACrE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SAC9E,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAClD,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACjE,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SACzC,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;SAC/D,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACnD,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAClF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACrF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACtD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE;oBACrE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC7D,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE;gBACjE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;aAC/D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,uDAAuD;QACpE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAChD,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SAClF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1F,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SAC9D,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SAC9D,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACnD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAC7F,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,IAAI,KAAK,KAAK;gBAAE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACxC,IAAI,IAAI,KAAK,MAAM;gBAAE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBAC3C,CAAC;gBACJ,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAC5C,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;SACpC,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;SACtB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACpD,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACpD,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,OAAO,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,IAAgB,EAAE,KAAa,EAAE,QAAiB;IAIrE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,MAAM,aAAa,GAAG,QAAQ,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChF,OAAO;QACL,OAAO;QACP,SAAS,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;KACzF,CAAC;AACJ,CAAC"}
|
package/dist/utils/errors.d.ts
CHANGED
package/dist/utils/errors.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { errorResult } from "./response.js";
|
|
2
|
+
import { PolicyError, formatPolicyError } from "./policy.js";
|
|
1
3
|
export function formatError(error) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
4
|
+
if (error instanceof PolicyError) {
|
|
5
|
+
return formatPolicyError(error);
|
|
6
|
+
}
|
|
7
|
+
return errorResult(error);
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=errors.js.map
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ExecOutput } from "microsandbox";
|
|
2
|
+
import { compactTruncations } from "./output.js";
|
|
3
|
+
export declare function formatExecOutput(output: ExecOutput): {
|
|
4
|
+
data: {
|
|
5
|
+
stdout: string;
|
|
6
|
+
stderr: string;
|
|
7
|
+
exitCode: number;
|
|
8
|
+
success: boolean;
|
|
9
|
+
};
|
|
10
|
+
truncated?: ReturnType<typeof compactTruncations>;
|
|
11
|
+
};
|
|
12
|
+
export declare function formatExecOutput(output: ExecOutput, maxBytes: number | undefined): {
|
|
13
|
+
data: {
|
|
14
|
+
stdout: string;
|
|
15
|
+
stderr: string;
|
|
16
|
+
exitCode: number;
|
|
17
|
+
success: boolean;
|
|
18
|
+
};
|
|
19
|
+
truncated?: ReturnType<typeof compactTruncations>;
|
|
20
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { compactTruncations, limitText } from "./output.js";
|
|
2
|
+
export function formatExecOutput(output, maxBytes) {
|
|
3
|
+
const stdout = limitText(output.stdout(), "stdout", maxBytes);
|
|
4
|
+
const stderr = limitText(output.stderr(), "stderr", maxBytes);
|
|
5
|
+
return {
|
|
6
|
+
data: {
|
|
7
|
+
stdout: stdout.text,
|
|
8
|
+
stderr: stderr.text,
|
|
9
|
+
exitCode: output.code,
|
|
10
|
+
success: output.success,
|
|
11
|
+
},
|
|
12
|
+
truncated: compactTruncations([stdout.truncated, stderr.truncated]),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=exec-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-output.js","sourceRoot":"","sources":["../../src/utils/exec-output.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAoB5D,MAAM,UAAU,gBAAgB,CAAC,MAAkB,EAAE,QAAiB;IASpE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE9D,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB;QACD,SAAS,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Truncation {
|
|
2
|
+
field: string;
|
|
3
|
+
returnedBytes: number;
|
|
4
|
+
totalBytes: number;
|
|
5
|
+
}
|
|
6
|
+
export interface LimitedText {
|
|
7
|
+
text: string;
|
|
8
|
+
truncated?: Truncation;
|
|
9
|
+
}
|
|
10
|
+
export declare function limitText(value: string, field: string, maxBytes?: number): LimitedText;
|
|
11
|
+
export declare function compactTruncations(values: Array<Truncation | undefined>): Truncation[] | undefined;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getServerConfig } from "../config.js";
|
|
2
|
+
export function limitText(value, field, maxBytes = getServerConfig().maxOutputBytes) {
|
|
3
|
+
const totalBytes = Buffer.byteLength(value, "utf8");
|
|
4
|
+
if (totalBytes <= maxBytes) {
|
|
5
|
+
return { text: value };
|
|
6
|
+
}
|
|
7
|
+
const limited = Buffer.from(value, "utf8").subarray(0, maxBytes).toString("utf8");
|
|
8
|
+
return {
|
|
9
|
+
text: limited,
|
|
10
|
+
truncated: {
|
|
11
|
+
field,
|
|
12
|
+
returnedBytes: Buffer.byteLength(limited, "utf8"),
|
|
13
|
+
totalBytes,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function compactTruncations(values) {
|
|
18
|
+
const truncations = values.filter((value) => value !== undefined);
|
|
19
|
+
return truncations.length > 0 ? truncations : undefined;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAa/C,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,KAAa,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,cAAc;IACjG,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClF,OAAO;QACL,IAAI,EAAE,OAAO;QACb,SAAS,EAAE;YACT,KAAK;YACL,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;YACjD,UAAU;SACX;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAqC;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACvF,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ToolResult } from "./response.js";
|
|
2
|
+
export declare class PolicyError extends Error {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly code = "host_path_denied";
|
|
5
|
+
constructor(message: string, path: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function assertHostPathAllowed(rawPath: string): string;
|
|
8
|
+
export declare function formatPolicyError(error: PolicyError): ToolResult;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { getServerConfig } from "../config.js";
|
|
4
|
+
import { fail } from "./response.js";
|
|
5
|
+
export class PolicyError extends Error {
|
|
6
|
+
path;
|
|
7
|
+
code = "host_path_denied";
|
|
8
|
+
constructor(message, path) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.path = path;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function assertHostPathAllowed(rawPath) {
|
|
14
|
+
const config = getServerConfig();
|
|
15
|
+
const resolved = resolveExistingAware(rawPath);
|
|
16
|
+
if (config.hostPathPolicy === "unrestricted") {
|
|
17
|
+
return resolved;
|
|
18
|
+
}
|
|
19
|
+
const allowed = config.hostPaths.some((allowedPath) => isWithinPath(resolved, allowedPath));
|
|
20
|
+
if (!allowed) {
|
|
21
|
+
throw new PolicyError("host path is outside MICROSANDBOX_MCP_HOST_PATHS", resolved);
|
|
22
|
+
}
|
|
23
|
+
return resolved;
|
|
24
|
+
}
|
|
25
|
+
export function formatPolicyError(error) {
|
|
26
|
+
return fail(error.code, error.message, { details: { path: error.path } });
|
|
27
|
+
}
|
|
28
|
+
function resolveExistingAware(rawPath) {
|
|
29
|
+
const resolved = path.resolve(rawPath);
|
|
30
|
+
try {
|
|
31
|
+
return fs.realpathSync.native(resolved);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
const parent = path.dirname(resolved);
|
|
35
|
+
try {
|
|
36
|
+
return path.join(fs.realpathSync.native(parent), path.basename(resolved));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return resolved;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function isWithinPath(candidate, allowedPath) {
|
|
44
|
+
const relative = path.relative(allowedPath, candidate);
|
|
45
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/utils/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAEtD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGE;IAF7B,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YAAY,OAAe,EAAW,IAAY;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,SAAI,GAAJ,IAAI,CAAQ;IAElD,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CAAC,kDAAkD,EAAE,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,WAAmB;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function redact(value: unknown): unknown;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const SECRET_KEY_PATTERN = /(password|passwd|secret|token|api[_-]?key|private[_-]?key)/i;
|
|
2
|
+
export function redact(value) {
|
|
3
|
+
if (Array.isArray(value)) {
|
|
4
|
+
return value.map((entry) => redact(entry));
|
|
5
|
+
}
|
|
6
|
+
if (value && typeof value === "object") {
|
|
7
|
+
const result = {};
|
|
8
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
9
|
+
result[key] = SECRET_KEY_PATTERN.test(key) ? "[redacted]" : redact(nested);
|
|
10
|
+
}
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/utils/redaction.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,6DAA6D,CAAC;AAEzF,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Truncation } from "./output.js";
|
|
2
|
+
export interface ToolOk<T> {
|
|
3
|
+
ok: true;
|
|
4
|
+
data: T;
|
|
5
|
+
warnings?: string[];
|
|
6
|
+
truncated?: Truncation[];
|
|
7
|
+
}
|
|
8
|
+
export interface ToolError {
|
|
9
|
+
ok: false;
|
|
10
|
+
error: {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
details?: unknown;
|
|
14
|
+
retryable?: boolean;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
type TextContent = {
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
};
|
|
21
|
+
export type ToolResult = {
|
|
22
|
+
content: TextContent[];
|
|
23
|
+
isError?: true;
|
|
24
|
+
};
|
|
25
|
+
export declare function ok<T>(data: T, options?: {
|
|
26
|
+
warnings?: string[];
|
|
27
|
+
truncated?: Truncation[];
|
|
28
|
+
}): ToolResult;
|
|
29
|
+
export declare function fail(code: string, message: string, options?: {
|
|
30
|
+
details?: unknown;
|
|
31
|
+
retryable?: boolean;
|
|
32
|
+
}): ToolResult;
|
|
33
|
+
export declare function errorResult(error: unknown, code?: string): ToolResult;
|
|
34
|
+
export {};
|