@agent-vm/config-contracts 0.0.59
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/dist/index.d.ts +359 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +264 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Shravan Sunder
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/json-config-file.d.ts
|
|
4
|
+
declare function loadJsonConfigFile(filePath: string): Promise<unknown>;
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region src/json-value.d.ts
|
|
7
|
+
type JsonPrimitive = boolean | null | number | string;
|
|
8
|
+
type JsonArray = JsonValue[];
|
|
9
|
+
type JsonObject = {
|
|
10
|
+
[key: string]: JsonValue;
|
|
11
|
+
};
|
|
12
|
+
type JsonValue = JsonArray | JsonObject | JsonPrimitive;
|
|
13
|
+
declare const jsonValueSchema: z.ZodType<JsonValue>;
|
|
14
|
+
declare const jsonObjectSchema: z.ZodType<JsonObject>;
|
|
15
|
+
declare function isJsonObject(value: unknown): value is JsonObject;
|
|
16
|
+
declare function assertJsonObject(value: unknown, label: string): JsonObject;
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/secret-value.d.ts
|
|
19
|
+
declare const secretValueSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
20
|
+
source: z.ZodLiteral<"environment">;
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
23
|
+
source: z.ZodLiteral<"1password">;
|
|
24
|
+
ref: z.ZodString;
|
|
25
|
+
}, z.core.$strict>], "source">;
|
|
26
|
+
type SecretValue = z.infer<typeof secretValueSchema>;
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/mcp-config.d.ts
|
|
29
|
+
declare const mcpProviderSchema: z.ZodObject<{
|
|
30
|
+
kind: z.ZodLiteral<"mcp">;
|
|
31
|
+
namespace: z.ZodString;
|
|
32
|
+
discovery: z.ZodDefault<z.ZodObject<{
|
|
33
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strict>>;
|
|
35
|
+
transport: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
36
|
+
kind: z.ZodLiteral<"streamable-http">;
|
|
37
|
+
url: z.ZodString;
|
|
38
|
+
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
39
|
+
source: z.ZodLiteral<"environment">;
|
|
40
|
+
name: z.ZodString;
|
|
41
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
42
|
+
source: z.ZodLiteral<"1password">;
|
|
43
|
+
ref: z.ZodString;
|
|
44
|
+
}, z.core.$strict>], "source">>>;
|
|
45
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
46
|
+
kind: z.ZodLiteral<"sse">;
|
|
47
|
+
url: z.ZodString;
|
|
48
|
+
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
49
|
+
source: z.ZodLiteral<"environment">;
|
|
50
|
+
name: z.ZodString;
|
|
51
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
52
|
+
source: z.ZodLiteral<"1password">;
|
|
53
|
+
ref: z.ZodString;
|
|
54
|
+
}, z.core.$strict>], "source">>>;
|
|
55
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
56
|
+
kind: z.ZodLiteral<"stdio">;
|
|
57
|
+
command: z.ZodString;
|
|
58
|
+
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
59
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
60
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
61
|
+
source: z.ZodLiteral<"environment">;
|
|
62
|
+
name: z.ZodString;
|
|
63
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
64
|
+
source: z.ZodLiteral<"1password">;
|
|
65
|
+
ref: z.ZodString;
|
|
66
|
+
}, z.core.$strict>], "source">>>;
|
|
67
|
+
}, z.core.$strict>], "kind">;
|
|
68
|
+
}, z.core.$strict>;
|
|
69
|
+
declare const mcpConfigSchema: z.ZodObject<{
|
|
70
|
+
$schema: z.ZodOptional<z.ZodString>;
|
|
71
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
72
|
+
providers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
73
|
+
kind: z.ZodLiteral<"mcp">;
|
|
74
|
+
namespace: z.ZodString;
|
|
75
|
+
discovery: z.ZodDefault<z.ZodObject<{
|
|
76
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
77
|
+
}, z.core.$strict>>;
|
|
78
|
+
transport: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
79
|
+
kind: z.ZodLiteral<"streamable-http">;
|
|
80
|
+
url: z.ZodString;
|
|
81
|
+
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
82
|
+
source: z.ZodLiteral<"environment">;
|
|
83
|
+
name: z.ZodString;
|
|
84
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
85
|
+
source: z.ZodLiteral<"1password">;
|
|
86
|
+
ref: z.ZodString;
|
|
87
|
+
}, z.core.$strict>], "source">>>;
|
|
88
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
89
|
+
kind: z.ZodLiteral<"sse">;
|
|
90
|
+
url: z.ZodString;
|
|
91
|
+
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
92
|
+
source: z.ZodLiteral<"environment">;
|
|
93
|
+
name: z.ZodString;
|
|
94
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
95
|
+
source: z.ZodLiteral<"1password">;
|
|
96
|
+
ref: z.ZodString;
|
|
97
|
+
}, z.core.$strict>], "source">>>;
|
|
98
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
99
|
+
kind: z.ZodLiteral<"stdio">;
|
|
100
|
+
command: z.ZodString;
|
|
101
|
+
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
102
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
103
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
104
|
+
source: z.ZodLiteral<"environment">;
|
|
105
|
+
name: z.ZodString;
|
|
106
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
107
|
+
source: z.ZodLiteral<"1password">;
|
|
108
|
+
ref: z.ZodString;
|
|
109
|
+
}, z.core.$strict>], "source">>>;
|
|
110
|
+
}, z.core.$strict>], "kind">;
|
|
111
|
+
}, z.core.$strict>>>;
|
|
112
|
+
}, z.core.$strict>;
|
|
113
|
+
type McpConfig = z.infer<typeof mcpConfigSchema>;
|
|
114
|
+
type McpProvider = z.infer<typeof mcpProviderSchema>;
|
|
115
|
+
type ResolvedMcpProvider = {
|
|
116
|
+
readonly headers: Readonly<Record<string, SecretValue>>;
|
|
117
|
+
readonly namespace: string;
|
|
118
|
+
readonly transport: 'streamable-http' | 'sse';
|
|
119
|
+
readonly url: string;
|
|
120
|
+
} | {
|
|
121
|
+
readonly args: readonly string[];
|
|
122
|
+
readonly command: string;
|
|
123
|
+
readonly cwd?: string;
|
|
124
|
+
readonly env: Readonly<Record<string, SecretValue>>;
|
|
125
|
+
readonly namespace: string;
|
|
126
|
+
readonly transport: 'stdio';
|
|
127
|
+
};
|
|
128
|
+
declare function loadMcpConfig(configPath: string): Promise<McpConfig>;
|
|
129
|
+
declare function mcpConfigToResolvedProviders(config: McpConfig): readonly ResolvedMcpProvider[];
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/mcp-portal-config.d.ts
|
|
132
|
+
declare const namespaceToolRefSchema: z.ZodObject<{
|
|
133
|
+
namespace: z.ZodString;
|
|
134
|
+
toolName: z.ZodString;
|
|
135
|
+
}, z.core.$strict>;
|
|
136
|
+
type NamespaceToolRef = z.infer<typeof namespaceToolRefSchema>;
|
|
137
|
+
declare const portalApprovalConfigSchema: z.ZodObject<{
|
|
138
|
+
allowWithoutApprovalTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
139
|
+
namespace: z.ZodString;
|
|
140
|
+
toolName: z.ZodString;
|
|
141
|
+
}, z.core.$strict>>>;
|
|
142
|
+
alwaysAskTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
143
|
+
namespace: z.ZodString;
|
|
144
|
+
toolName: z.ZodString;
|
|
145
|
+
}, z.core.$strict>>>;
|
|
146
|
+
annotationPolicy: z.ZodDefault<z.ZodEnum<{
|
|
147
|
+
"destructive-requires-approval": "destructive-requires-approval";
|
|
148
|
+
"always-require-approval": "always-require-approval";
|
|
149
|
+
}>>;
|
|
150
|
+
trustedAnnotationNamespaces: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
151
|
+
writeTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
152
|
+
namespace: z.ZodString;
|
|
153
|
+
toolName: z.ZodString;
|
|
154
|
+
}, z.core.$strict>>>;
|
|
155
|
+
}, z.core.$strict>;
|
|
156
|
+
type PortalApprovalConfig = z.infer<typeof portalApprovalConfigSchema>;
|
|
157
|
+
declare const mcpPortalProfileDefinitionSchema: z.ZodObject<{
|
|
158
|
+
extends: z.ZodOptional<z.ZodString>;
|
|
159
|
+
enabledNamespaces: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
160
|
+
enabledToolsByNamespace: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
|
|
161
|
+
hiddenToolsByNamespace: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
|
|
162
|
+
logging: z.ZodOptional<z.ZodObject<{
|
|
163
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
164
|
+
}, z.core.$strict>>;
|
|
165
|
+
promptContext: z.ZodOptional<z.ZodObject<{
|
|
166
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
167
|
+
maxNamespaces: z.ZodDefault<z.ZodNumber>;
|
|
168
|
+
}, z.core.$strict>>;
|
|
169
|
+
cache: z.ZodOptional<z.ZodObject<{
|
|
170
|
+
catalogTtlMs: z.ZodDefault<z.ZodNumber>;
|
|
171
|
+
}, z.core.$strict>>;
|
|
172
|
+
approval: z.ZodOptional<z.ZodObject<{
|
|
173
|
+
allowWithoutApprovalTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
174
|
+
namespace: z.ZodString;
|
|
175
|
+
toolName: z.ZodString;
|
|
176
|
+
}, z.core.$strict>>>;
|
|
177
|
+
alwaysAskTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
178
|
+
namespace: z.ZodString;
|
|
179
|
+
toolName: z.ZodString;
|
|
180
|
+
}, z.core.$strict>>>;
|
|
181
|
+
annotationPolicy: z.ZodDefault<z.ZodEnum<{
|
|
182
|
+
"destructive-requires-approval": "destructive-requires-approval";
|
|
183
|
+
"always-require-approval": "always-require-approval";
|
|
184
|
+
}>>;
|
|
185
|
+
trustedAnnotationNamespaces: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
186
|
+
writeTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
187
|
+
namespace: z.ZodString;
|
|
188
|
+
toolName: z.ZodString;
|
|
189
|
+
}, z.core.$strict>>>;
|
|
190
|
+
}, z.core.$strict>>;
|
|
191
|
+
}, z.core.$strict>;
|
|
192
|
+
type McpPortalProfileDefinition = z.infer<typeof mcpPortalProfileDefinitionSchema>;
|
|
193
|
+
declare const resolvedMcpPortalProfileSchema: z.ZodObject<{
|
|
194
|
+
enabledNamespaces: z.ZodArray<z.ZodString>;
|
|
195
|
+
enabledToolsByNamespace: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
|
|
196
|
+
hiddenToolsByNamespace: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
|
|
197
|
+
logging: z.ZodObject<{
|
|
198
|
+
enabled: z.ZodBoolean;
|
|
199
|
+
}, z.core.$strict>;
|
|
200
|
+
promptContext: z.ZodObject<{
|
|
201
|
+
enabled: z.ZodBoolean;
|
|
202
|
+
maxNamespaces: z.ZodNumber;
|
|
203
|
+
}, z.core.$strict>;
|
|
204
|
+
cache: z.ZodObject<{
|
|
205
|
+
catalogTtlMs: z.ZodNumber;
|
|
206
|
+
}, z.core.$strict>;
|
|
207
|
+
approval: z.ZodObject<{
|
|
208
|
+
allowWithoutApprovalTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
209
|
+
namespace: z.ZodString;
|
|
210
|
+
toolName: z.ZodString;
|
|
211
|
+
}, z.core.$strict>>>;
|
|
212
|
+
alwaysAskTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
213
|
+
namespace: z.ZodString;
|
|
214
|
+
toolName: z.ZodString;
|
|
215
|
+
}, z.core.$strict>>>;
|
|
216
|
+
annotationPolicy: z.ZodDefault<z.ZodEnum<{
|
|
217
|
+
"destructive-requires-approval": "destructive-requires-approval";
|
|
218
|
+
"always-require-approval": "always-require-approval";
|
|
219
|
+
}>>;
|
|
220
|
+
trustedAnnotationNamespaces: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
221
|
+
writeTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
222
|
+
namespace: z.ZodString;
|
|
223
|
+
toolName: z.ZodString;
|
|
224
|
+
}, z.core.$strict>>>;
|
|
225
|
+
}, z.core.$strict>;
|
|
226
|
+
}, z.core.$strict>;
|
|
227
|
+
type ResolvedMcpPortalProfile = z.infer<typeof resolvedMcpPortalProfileSchema>;
|
|
228
|
+
declare const mcpPortalServerSchema: z.ZodObject<{
|
|
229
|
+
host: z.ZodDefault<z.ZodString>;
|
|
230
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
231
|
+
accessHeader: z.ZodObject<{
|
|
232
|
+
name: z.ZodString;
|
|
233
|
+
secret: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
234
|
+
source: z.ZodLiteral<"environment">;
|
|
235
|
+
name: z.ZodString;
|
|
236
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
237
|
+
source: z.ZodLiteral<"1password">;
|
|
238
|
+
ref: z.ZodString;
|
|
239
|
+
}, z.core.$strict>], "source">;
|
|
240
|
+
}, z.core.$strict>;
|
|
241
|
+
}, z.core.$strict>;
|
|
242
|
+
type McpPortalServerConfig = z.infer<typeof mcpPortalServerSchema>;
|
|
243
|
+
declare const mcpPortalAgentConfigSchema: z.ZodObject<{
|
|
244
|
+
profile: z.ZodString;
|
|
245
|
+
hmacKey: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
246
|
+
source: z.ZodLiteral<"environment">;
|
|
247
|
+
name: z.ZodString;
|
|
248
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
249
|
+
source: z.ZodLiteral<"1password">;
|
|
250
|
+
ref: z.ZodString;
|
|
251
|
+
}, z.core.$strict>], "source">>;
|
|
252
|
+
}, z.core.$strict>;
|
|
253
|
+
type McpPortalAgentConfig = z.infer<typeof mcpPortalAgentConfigSchema>;
|
|
254
|
+
declare const mcpPortalConfigSchema: z.ZodObject<{
|
|
255
|
+
$schema: z.ZodOptional<z.ZodString>;
|
|
256
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
257
|
+
server: z.ZodObject<{
|
|
258
|
+
host: z.ZodDefault<z.ZodString>;
|
|
259
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
260
|
+
accessHeader: z.ZodObject<{
|
|
261
|
+
name: z.ZodString;
|
|
262
|
+
secret: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
263
|
+
source: z.ZodLiteral<"environment">;
|
|
264
|
+
name: z.ZodString;
|
|
265
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
266
|
+
source: z.ZodLiteral<"1password">;
|
|
267
|
+
ref: z.ZodString;
|
|
268
|
+
}, z.core.$strict>], "source">;
|
|
269
|
+
}, z.core.$strict>;
|
|
270
|
+
}, z.core.$strict>;
|
|
271
|
+
agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
272
|
+
profile: z.ZodString;
|
|
273
|
+
hmacKey: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
274
|
+
source: z.ZodLiteral<"environment">;
|
|
275
|
+
name: z.ZodString;
|
|
276
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
277
|
+
source: z.ZodLiteral<"1password">;
|
|
278
|
+
ref: z.ZodString;
|
|
279
|
+
}, z.core.$strict>], "source">>;
|
|
280
|
+
}, z.core.$strict>>>;
|
|
281
|
+
profiles: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
282
|
+
extends: z.ZodOptional<z.ZodString>;
|
|
283
|
+
enabledNamespaces: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
284
|
+
enabledToolsByNamespace: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
|
|
285
|
+
hiddenToolsByNamespace: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
|
|
286
|
+
logging: z.ZodOptional<z.ZodObject<{
|
|
287
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
288
|
+
}, z.core.$strict>>;
|
|
289
|
+
promptContext: z.ZodOptional<z.ZodObject<{
|
|
290
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
291
|
+
maxNamespaces: z.ZodDefault<z.ZodNumber>;
|
|
292
|
+
}, z.core.$strict>>;
|
|
293
|
+
cache: z.ZodOptional<z.ZodObject<{
|
|
294
|
+
catalogTtlMs: z.ZodDefault<z.ZodNumber>;
|
|
295
|
+
}, z.core.$strict>>;
|
|
296
|
+
approval: z.ZodOptional<z.ZodObject<{
|
|
297
|
+
allowWithoutApprovalTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
298
|
+
namespace: z.ZodString;
|
|
299
|
+
toolName: z.ZodString;
|
|
300
|
+
}, z.core.$strict>>>;
|
|
301
|
+
alwaysAskTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
302
|
+
namespace: z.ZodString;
|
|
303
|
+
toolName: z.ZodString;
|
|
304
|
+
}, z.core.$strict>>>;
|
|
305
|
+
annotationPolicy: z.ZodDefault<z.ZodEnum<{
|
|
306
|
+
"destructive-requires-approval": "destructive-requires-approval";
|
|
307
|
+
"always-require-approval": "always-require-approval";
|
|
308
|
+
}>>;
|
|
309
|
+
trustedAnnotationNamespaces: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
310
|
+
writeTools: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
311
|
+
namespace: z.ZodString;
|
|
312
|
+
toolName: z.ZodString;
|
|
313
|
+
}, z.core.$strict>>>;
|
|
314
|
+
}, z.core.$strict>>;
|
|
315
|
+
}, z.core.$strict>>;
|
|
316
|
+
}, z.core.$strict>;
|
|
317
|
+
type McpPortalConfig = z.infer<typeof mcpPortalConfigSchema>;
|
|
318
|
+
declare const openClawMcpPortalPluginConfigSchema: z.ZodObject<{
|
|
319
|
+
configDir: z.ZodString;
|
|
320
|
+
binPath: z.ZodOptional<z.ZodString>;
|
|
321
|
+
}, z.core.$strict>;
|
|
322
|
+
type OpenClawMcpPortalPluginConfig = z.infer<typeof openClawMcpPortalPluginConfigSchema>;
|
|
323
|
+
declare function loadMcpPortalConfig(configPath: string): Promise<McpPortalConfig>;
|
|
324
|
+
declare function resolveMcpPortalProfile(config: McpPortalConfig, profileName: string): ResolvedMcpPortalProfile;
|
|
325
|
+
declare function secretValueToEnvironmentReference(secret: SecretValue): string;
|
|
326
|
+
//#endregion
|
|
327
|
+
//#region src/mcp-portal-approval-policy.d.ts
|
|
328
|
+
interface McpPortalApprovalToolAnnotations {
|
|
329
|
+
readonly destructiveHint?: boolean | undefined;
|
|
330
|
+
readonly readOnlyHint?: boolean | undefined;
|
|
331
|
+
}
|
|
332
|
+
interface McpPortalApprovalToolCall {
|
|
333
|
+
readonly annotations?: McpPortalApprovalToolAnnotations;
|
|
334
|
+
readonly namespace: string;
|
|
335
|
+
readonly toolName: string;
|
|
336
|
+
}
|
|
337
|
+
declare function mcpPortalCallRequiresApproval(profile: ResolvedMcpPortalProfile, call: McpPortalApprovalToolCall): boolean;
|
|
338
|
+
//#endregion
|
|
339
|
+
//#region src/schema-artifacts.d.ts
|
|
340
|
+
declare const mcpPortalConfigSchemaVersions: {
|
|
341
|
+
readonly mcp: 1;
|
|
342
|
+
readonly mcpPortal: 1;
|
|
343
|
+
};
|
|
344
|
+
declare const mcpPortalConfigSchemaIds: {
|
|
345
|
+
readonly mcp: "agent-vm:mcp:1";
|
|
346
|
+
readonly mcpPortal: "agent-vm:mcp-portal:1";
|
|
347
|
+
};
|
|
348
|
+
declare const mcpPortalConfigSchemaPaths: {
|
|
349
|
+
readonly mcpFromGatewayConfig: "../../schemas/mcp.schema.json";
|
|
350
|
+
readonly mcpPortalFromGatewayConfig: "../../schemas/mcp-portal.schema.json";
|
|
351
|
+
};
|
|
352
|
+
interface ConfigContractSchemaArtifacts {
|
|
353
|
+
readonly mcp: Record<string, unknown>;
|
|
354
|
+
readonly mcpPortal: Record<string, unknown>;
|
|
355
|
+
}
|
|
356
|
+
declare function createConfigContractSchemaArtifacts(): ConfigContractSchemaArtifacts;
|
|
357
|
+
//#endregion
|
|
358
|
+
export { ConfigContractSchemaArtifacts, JsonArray, JsonObject, JsonPrimitive, JsonValue, McpConfig, McpPortalAgentConfig, McpPortalApprovalToolAnnotations, McpPortalApprovalToolCall, McpPortalConfig, McpPortalProfileDefinition, McpPortalServerConfig, McpProvider, NamespaceToolRef, OpenClawMcpPortalPluginConfig, PortalApprovalConfig, ResolvedMcpPortalProfile, ResolvedMcpProvider, SecretValue, assertJsonObject, createConfigContractSchemaArtifacts, isJsonObject, jsonObjectSchema, jsonValueSchema, loadJsonConfigFile, loadMcpConfig, loadMcpPortalConfig, mcpConfigSchema, mcpConfigToResolvedProviders, mcpPortalAgentConfigSchema, mcpPortalCallRequiresApproval, mcpPortalConfigSchema, mcpPortalConfigSchemaIds, mcpPortalConfigSchemaPaths, mcpPortalConfigSchemaVersions, mcpPortalProfileDefinitionSchema, mcpPortalServerSchema, mcpProviderSchema, namespaceToolRefSchema, openClawMcpPortalPluginConfigSchema, portalApprovalConfigSchema, resolveMcpPortalProfile, resolvedMcpPortalProfileSchema, secretValueSchema, secretValueToEnvironmentReference };
|
|
359
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/json-config-file.ts","../src/json-value.ts","../src/secret-value.ts","../src/mcp-config.ts","../src/mcp-portal-config.ts","../src/mcp-portal-approval-policy.ts","../src/schema-artifacts.ts"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { parse, printParseErrorCode } from "jsonc-parser";
|
|
3
|
+
import * as zod from "zod";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
//#region src/json-config-file.ts
|
|
6
|
+
const parseJsoncToUnknown = parse;
|
|
7
|
+
function formatLineColumn(text, offset) {
|
|
8
|
+
const prefix = text.slice(0, offset);
|
|
9
|
+
return `line ${prefix.split("\n").length}, column ${offset - prefix.lastIndexOf("\n")}`;
|
|
10
|
+
}
|
|
11
|
+
function formatParseError(filePath, text, error) {
|
|
12
|
+
return [`Invalid JSONC in ${filePath}: ${formatLineColumn(text, error.offset)}:`, printParseErrorCode(error.error)].join(" ");
|
|
13
|
+
}
|
|
14
|
+
async function loadJsonConfigFile(filePath) {
|
|
15
|
+
const rawConfig = await readFile(filePath, "utf8");
|
|
16
|
+
const parseErrors = [];
|
|
17
|
+
const parsedConfig = parseJsoncToUnknown(rawConfig, parseErrors, {
|
|
18
|
+
allowTrailingComma: true,
|
|
19
|
+
disallowComments: false
|
|
20
|
+
});
|
|
21
|
+
if (parseErrors.length > 0) {
|
|
22
|
+
const firstParseError = parseErrors[0];
|
|
23
|
+
if (firstParseError !== void 0) throw new Error(formatParseError(filePath, rawConfig, firstParseError));
|
|
24
|
+
}
|
|
25
|
+
return parsedConfig;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/json-value.ts
|
|
29
|
+
const jsonValueSchema = z.lazy(() => z.union([
|
|
30
|
+
z.string(),
|
|
31
|
+
z.number().finite(),
|
|
32
|
+
z.boolean(),
|
|
33
|
+
z.null(),
|
|
34
|
+
z.array(jsonValueSchema),
|
|
35
|
+
jsonObjectSchema
|
|
36
|
+
]));
|
|
37
|
+
const jsonObjectSchema = z.record(z.string(), jsonValueSchema);
|
|
38
|
+
function isJsonObject(value) {
|
|
39
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
40
|
+
}
|
|
41
|
+
function assertJsonObject(value, label) {
|
|
42
|
+
if (!isJsonObject(value)) throw new Error(`${label} must be a JSON object.`);
|
|
43
|
+
return jsonObjectSchema.parse(value);
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/secret-value.ts
|
|
47
|
+
const secretValueSchema = z.discriminatedUnion("source", [z.object({
|
|
48
|
+
source: z.literal("environment"),
|
|
49
|
+
name: z.string().min(1)
|
|
50
|
+
}).strict(), z.object({
|
|
51
|
+
source: z.literal("1password"),
|
|
52
|
+
ref: z.string().min(1)
|
|
53
|
+
}).strict()]);
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/mcp-config.ts
|
|
56
|
+
const mcpProviderDiscoverySchema = z.object({ summary: z.string().min(1).optional() }).strict();
|
|
57
|
+
const streamableHttpTransportSchema = z.object({
|
|
58
|
+
kind: z.literal("streamable-http"),
|
|
59
|
+
url: z.string().url(),
|
|
60
|
+
headers: z.record(z.string(), secretValueSchema).default({})
|
|
61
|
+
}).strict();
|
|
62
|
+
const sseTransportSchema = z.object({
|
|
63
|
+
kind: z.literal("sse"),
|
|
64
|
+
url: z.string().url(),
|
|
65
|
+
headers: z.record(z.string(), secretValueSchema).default({})
|
|
66
|
+
}).strict();
|
|
67
|
+
const stdioTransportSchema = z.object({
|
|
68
|
+
kind: z.literal("stdio"),
|
|
69
|
+
command: z.string().min(1),
|
|
70
|
+
args: z.array(z.string()).default([]),
|
|
71
|
+
cwd: z.string().min(1).optional(),
|
|
72
|
+
env: z.record(z.string(), secretValueSchema).default({})
|
|
73
|
+
}).strict();
|
|
74
|
+
const mcpProviderSchema = z.object({
|
|
75
|
+
kind: z.literal("mcp"),
|
|
76
|
+
namespace: z.string().min(1),
|
|
77
|
+
discovery: mcpProviderDiscoverySchema.default({}),
|
|
78
|
+
transport: z.discriminatedUnion("kind", [
|
|
79
|
+
streamableHttpTransportSchema,
|
|
80
|
+
sseTransportSchema,
|
|
81
|
+
stdioTransportSchema
|
|
82
|
+
])
|
|
83
|
+
}).strict();
|
|
84
|
+
const mcpConfigSchema = z.object({
|
|
85
|
+
$schema: z.string().min(1).optional(),
|
|
86
|
+
schemaVersion: z.literal(1),
|
|
87
|
+
providers: z.record(z.string().min(1), mcpProviderSchema).default({})
|
|
88
|
+
}).strict();
|
|
89
|
+
async function loadMcpConfig(configPath) {
|
|
90
|
+
return mcpConfigSchema.parse(await loadJsonConfigFile(configPath));
|
|
91
|
+
}
|
|
92
|
+
function mcpConfigToResolvedProviders(config) {
|
|
93
|
+
return Object.values(config.providers).map((provider) => {
|
|
94
|
+
const transport = provider.transport;
|
|
95
|
+
if (transport.kind === "stdio") {
|
|
96
|
+
const resolvedProvider = {
|
|
97
|
+
args: transport.args,
|
|
98
|
+
command: transport.command,
|
|
99
|
+
env: transport.env,
|
|
100
|
+
namespace: provider.namespace,
|
|
101
|
+
transport: transport.kind
|
|
102
|
+
};
|
|
103
|
+
if (transport.cwd !== void 0) resolvedProvider.cwd = transport.cwd;
|
|
104
|
+
return resolvedProvider;
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
headers: transport.headers,
|
|
108
|
+
namespace: provider.namespace,
|
|
109
|
+
transport: transport.kind,
|
|
110
|
+
url: transport.url
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//#endregion
|
|
115
|
+
//#region src/mcp-portal-approval-policy.ts
|
|
116
|
+
function selectorMatches(selectors, namespace, toolName) {
|
|
117
|
+
return selectors.some((selector) => selector.namespace === namespace && selector.toolName === toolName);
|
|
118
|
+
}
|
|
119
|
+
function hasTrustedReadOnlyAnnotation(profile, call) {
|
|
120
|
+
return profile.approval.annotationPolicy === "destructive-requires-approval" && profile.approval.trustedAnnotationNamespaces.includes(call.namespace) && call.annotations?.readOnlyHint === true && call.annotations.destructiveHint !== true;
|
|
121
|
+
}
|
|
122
|
+
function mcpPortalCallRequiresApproval(profile, call) {
|
|
123
|
+
if (selectorMatches(profile.approval.allowWithoutApprovalTools, call.namespace, call.toolName)) return false;
|
|
124
|
+
if (profile.approval.annotationPolicy === "always-require-approval") return true;
|
|
125
|
+
if (selectorMatches(profile.approval.alwaysAskTools, call.namespace, call.toolName) || selectorMatches(profile.approval.writeTools, call.namespace, call.toolName)) return true;
|
|
126
|
+
return !hasTrustedReadOnlyAnnotation(profile, call);
|
|
127
|
+
}
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/mcp-portal-config.ts
|
|
130
|
+
const namespaceToolRefSchema = z.object({
|
|
131
|
+
namespace: z.string().min(1),
|
|
132
|
+
toolName: z.string().min(1)
|
|
133
|
+
}).strict();
|
|
134
|
+
const portalApprovalConfigSchema = z.object({
|
|
135
|
+
allowWithoutApprovalTools: z.array(namespaceToolRefSchema).default([]),
|
|
136
|
+
alwaysAskTools: z.array(namespaceToolRefSchema).default([]),
|
|
137
|
+
annotationPolicy: z.enum(["destructive-requires-approval", "always-require-approval"]).default("destructive-requires-approval"),
|
|
138
|
+
trustedAnnotationNamespaces: z.array(z.string().min(1)).default([]),
|
|
139
|
+
writeTools: z.array(namespaceToolRefSchema).default([])
|
|
140
|
+
}).strict();
|
|
141
|
+
const mcpPortalProfileDefinitionSchema = z.object({
|
|
142
|
+
extends: z.string().min(1).optional(),
|
|
143
|
+
enabledNamespaces: z.array(z.string().min(1)).optional(),
|
|
144
|
+
enabledToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))).optional(),
|
|
145
|
+
hiddenToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))).optional(),
|
|
146
|
+
logging: z.object({ enabled: z.boolean().default(false) }).strict().optional(),
|
|
147
|
+
promptContext: z.object({
|
|
148
|
+
enabled: z.boolean().default(true),
|
|
149
|
+
maxNamespaces: z.number().int().positive().default(12)
|
|
150
|
+
}).strict().optional(),
|
|
151
|
+
cache: z.object({ catalogTtlMs: z.number().int().positive().default(6e4) }).strict().optional(),
|
|
152
|
+
approval: portalApprovalConfigSchema.optional()
|
|
153
|
+
}).strict();
|
|
154
|
+
const resolvedMcpPortalProfileSchema = z.object({
|
|
155
|
+
enabledNamespaces: z.array(z.string().min(1)),
|
|
156
|
+
enabledToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))),
|
|
157
|
+
hiddenToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))),
|
|
158
|
+
logging: z.object({ enabled: z.boolean() }).strict(),
|
|
159
|
+
promptContext: z.object({
|
|
160
|
+
enabled: z.boolean(),
|
|
161
|
+
maxNamespaces: z.number().int().positive()
|
|
162
|
+
}).strict(),
|
|
163
|
+
cache: z.object({ catalogTtlMs: z.number().int().positive() }).strict(),
|
|
164
|
+
approval: portalApprovalConfigSchema
|
|
165
|
+
}).strict();
|
|
166
|
+
const mcpPortalAccessHeaderSchema = z.object({
|
|
167
|
+
name: z.string().min(1),
|
|
168
|
+
secret: secretValueSchema
|
|
169
|
+
}).strict();
|
|
170
|
+
const mcpPortalServerSchema = z.object({
|
|
171
|
+
host: z.string().min(1).default("127.0.0.1"),
|
|
172
|
+
port: z.number().int().min(1).max(65535).default(18790),
|
|
173
|
+
accessHeader: mcpPortalAccessHeaderSchema
|
|
174
|
+
}).strict();
|
|
175
|
+
const mcpPortalAgentConfigSchema = z.object({
|
|
176
|
+
profile: z.string().min(1),
|
|
177
|
+
hmacKey: secretValueSchema.optional()
|
|
178
|
+
}).strict();
|
|
179
|
+
const mcpPortalConfigSchema = z.object({
|
|
180
|
+
$schema: z.string().min(1).optional(),
|
|
181
|
+
schemaVersion: z.literal(1),
|
|
182
|
+
server: mcpPortalServerSchema,
|
|
183
|
+
agents: z.record(z.string().min(1), mcpPortalAgentConfigSchema).default({}),
|
|
184
|
+
profiles: z.record(z.string().min(1), mcpPortalProfileDefinitionSchema)
|
|
185
|
+
}).strict().superRefine((config, context) => {
|
|
186
|
+
if (Object.keys(config.profiles).length === 0) context.addIssue({
|
|
187
|
+
code: z.ZodIssueCode.custom,
|
|
188
|
+
message: "mcp-portal.config.jsonc must define at least one profile.",
|
|
189
|
+
path: ["profiles"]
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
const openClawMcpPortalPluginConfigSchema = z.object({
|
|
193
|
+
configDir: z.string().min(1),
|
|
194
|
+
binPath: z.string().min(1).optional()
|
|
195
|
+
}).strict();
|
|
196
|
+
const defaultProfile = {
|
|
197
|
+
approval: portalApprovalConfigSchema.parse({}),
|
|
198
|
+
cache: { catalogTtlMs: 6e4 },
|
|
199
|
+
enabledNamespaces: [],
|
|
200
|
+
enabledToolsByNamespace: {},
|
|
201
|
+
hiddenToolsByNamespace: {},
|
|
202
|
+
logging: { enabled: false },
|
|
203
|
+
promptContext: {
|
|
204
|
+
enabled: true,
|
|
205
|
+
maxNamespaces: 12
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
async function loadMcpPortalConfig(configPath) {
|
|
209
|
+
return mcpPortalConfigSchema.parse(await loadJsonConfigFile(configPath));
|
|
210
|
+
}
|
|
211
|
+
function mergeProfile(base, override) {
|
|
212
|
+
return resolvedMcpPortalProfileSchema.parse({
|
|
213
|
+
approval: override.approval ?? base.approval,
|
|
214
|
+
cache: override.cache ?? base.cache,
|
|
215
|
+
enabledNamespaces: override.enabledNamespaces ?? base.enabledNamespaces,
|
|
216
|
+
enabledToolsByNamespace: override.enabledToolsByNamespace ?? base.enabledToolsByNamespace,
|
|
217
|
+
hiddenToolsByNamespace: override.hiddenToolsByNamespace ?? base.hiddenToolsByNamespace,
|
|
218
|
+
logging: override.logging ?? base.logging,
|
|
219
|
+
promptContext: override.promptContext ?? base.promptContext
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
function resolveMcpPortalProfileWithState(config, profileName, state) {
|
|
223
|
+
const profile = config.profiles[profileName];
|
|
224
|
+
if (profile === void 0) throw new Error(`unknown MCP profile '${profileName}'`);
|
|
225
|
+
if (state.stack.includes(profileName)) throw new Error(`MCP profile inheritance cycle: ${[...state.stack, profileName].join(" -> ")}`);
|
|
226
|
+
return mergeProfile(profile.extends === void 0 ? defaultProfile : resolveMcpPortalProfileWithState(config, profile.extends, { stack: [...state.stack, profileName] }), profile);
|
|
227
|
+
}
|
|
228
|
+
function resolveMcpPortalProfile(config, profileName) {
|
|
229
|
+
return resolveMcpPortalProfileWithState(config, profileName, { stack: [] });
|
|
230
|
+
}
|
|
231
|
+
function secretValueToEnvironmentReference(secret) {
|
|
232
|
+
if (secret.source === "environment") return `\${${secret.name}}`;
|
|
233
|
+
return secret.ref;
|
|
234
|
+
}
|
|
235
|
+
//#endregion
|
|
236
|
+
//#region src/schema-artifacts.ts
|
|
237
|
+
const mcpPortalConfigSchemaVersions = {
|
|
238
|
+
mcp: 1,
|
|
239
|
+
mcpPortal: 1
|
|
240
|
+
};
|
|
241
|
+
const mcpPortalConfigSchemaIds = {
|
|
242
|
+
mcp: "agent-vm:mcp:1",
|
|
243
|
+
mcpPortal: "agent-vm:mcp-portal:1"
|
|
244
|
+
};
|
|
245
|
+
const mcpPortalConfigSchemaPaths = {
|
|
246
|
+
mcpFromGatewayConfig: "../../schemas/mcp.schema.json",
|
|
247
|
+
mcpPortalFromGatewayConfig: "../../schemas/mcp-portal.schema.json"
|
|
248
|
+
};
|
|
249
|
+
function withSchemaId(schema, schemaId) {
|
|
250
|
+
return {
|
|
251
|
+
$id: schemaId,
|
|
252
|
+
...schema
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function createConfigContractSchemaArtifacts() {
|
|
256
|
+
return {
|
|
257
|
+
mcp: withSchemaId(zod.toJSONSchema(mcpConfigSchema, { target: "draft-07" }), mcpPortalConfigSchemaIds.mcp),
|
|
258
|
+
mcpPortal: withSchemaId(zod.toJSONSchema(mcpPortalConfigSchema, { target: "draft-07" }), mcpPortalConfigSchemaIds.mcpPortal)
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
//#endregion
|
|
262
|
+
export { assertJsonObject, createConfigContractSchemaArtifacts, isJsonObject, jsonObjectSchema, jsonValueSchema, loadJsonConfigFile, loadMcpConfig, loadMcpPortalConfig, mcpConfigSchema, mcpConfigToResolvedProviders, mcpPortalAgentConfigSchema, mcpPortalCallRequiresApproval, mcpPortalConfigSchema, mcpPortalConfigSchemaIds, mcpPortalConfigSchemaPaths, mcpPortalConfigSchemaVersions, mcpPortalProfileDefinitionSchema, mcpPortalServerSchema, mcpProviderSchema, namespaceToolRefSchema, openClawMcpPortalPluginConfigSchema, portalApprovalConfigSchema, resolveMcpPortalProfile, resolvedMcpPortalProfileSchema, secretValueSchema, secretValueToEnvironmentReference };
|
|
263
|
+
|
|
264
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/json-config-file.ts","../src/json-value.ts","../src/secret-value.ts","../src/mcp-config.ts","../src/mcp-portal-approval-policy.ts","../src/mcp-portal-config.ts","../src/schema-artifacts.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\n\nimport { parse, type ParseError, type ParseOptions, printParseErrorCode } from 'jsonc-parser';\n\nconst parseJsoncToUnknown: (text: string, errors: ParseError[], options: ParseOptions) => unknown =\n\tparse;\n\nfunction formatLineColumn(text: string, offset: number): string {\n\tconst prefix = text.slice(0, offset);\n\tconst line = prefix.split('\\n').length;\n\tconst lastLineBreakIndex = prefix.lastIndexOf('\\n');\n\tconst column = offset - lastLineBreakIndex;\n\treturn `line ${line}, column ${column}`;\n}\n\nfunction formatParseError(filePath: string, text: string, error: ParseError): string {\n\treturn [\n\t\t`Invalid JSONC in ${filePath}: ${formatLineColumn(text, error.offset)}:`,\n\t\tprintParseErrorCode(error.error),\n\t].join(' ');\n}\n\nexport async function loadJsonConfigFile(filePath: string): Promise<unknown> {\n\tconst rawConfig = await readFile(filePath, 'utf8');\n\tconst parseErrors: ParseError[] = [];\n\tconst parsedConfig = parseJsoncToUnknown(rawConfig, parseErrors, {\n\t\tallowTrailingComma: true,\n\t\tdisallowComments: false,\n\t});\n\n\tif (parseErrors.length > 0) {\n\t\tconst firstParseError = parseErrors[0];\n\t\tif (firstParseError !== undefined) {\n\t\t\tthrow new Error(formatParseError(filePath, rawConfig, firstParseError));\n\t\t}\n\t}\n\n\treturn parsedConfig;\n}\n","import { z } from 'zod';\n\nexport type JsonPrimitive = boolean | null | number | string;\nexport type JsonArray = JsonValue[];\nexport type JsonObject = { [key: string]: JsonValue };\nexport type JsonValue = JsonArray | JsonObject | JsonPrimitive;\n\nexport const jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n\tz.union([\n\t\tz.string(),\n\t\tz.number().finite(),\n\t\tz.boolean(),\n\t\tz.null(),\n\t\tz.array(jsonValueSchema),\n\t\tjsonObjectSchema,\n\t]),\n);\n\nexport const jsonObjectSchema: z.ZodType<JsonObject> = z.record(z.string(), jsonValueSchema);\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function assertJsonObject(value: unknown, label: string): JsonObject {\n\tif (!isJsonObject(value)) {\n\t\tthrow new Error(`${label} must be a JSON object.`);\n\t}\n\n\treturn jsonObjectSchema.parse(value);\n}\n","import { z } from 'zod';\n\nexport const secretValueSchema = z.discriminatedUnion('source', [\n\tz\n\t\t.object({\n\t\t\tsource: z.literal('environment'),\n\t\t\tname: z.string().min(1),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tsource: z.literal('1password'),\n\t\t\tref: z.string().min(1),\n\t\t})\n\t\t.strict(),\n]);\n\nexport type SecretValue = z.infer<typeof secretValueSchema>;\n","import { z } from 'zod';\n\nimport { loadJsonConfigFile } from './json-config-file.js';\nimport { secretValueSchema, type SecretValue } from './secret-value.js';\n\nconst mcpProviderDiscoverySchema = z\n\t.object({\n\t\tsummary: z.string().min(1).optional(),\n\t})\n\t.strict();\n\nconst streamableHttpTransportSchema = z\n\t.object({\n\t\tkind: z.literal('streamable-http'),\n\t\turl: z.string().url(),\n\t\theaders: z.record(z.string(), secretValueSchema).default({}),\n\t})\n\t.strict();\n\nconst sseTransportSchema = z\n\t.object({\n\t\tkind: z.literal('sse'),\n\t\turl: z.string().url(),\n\t\theaders: z.record(z.string(), secretValueSchema).default({}),\n\t})\n\t.strict();\n\nconst stdioTransportSchema = z\n\t.object({\n\t\tkind: z.literal('stdio'),\n\t\tcommand: z.string().min(1),\n\t\targs: z.array(z.string()).default([]),\n\t\tcwd: z.string().min(1).optional(),\n\t\tenv: z.record(z.string(), secretValueSchema).default({}),\n\t})\n\t.strict();\n\nexport const mcpProviderSchema = z\n\t.object({\n\t\tkind: z.literal('mcp'),\n\t\tnamespace: z.string().min(1),\n\t\tdiscovery: mcpProviderDiscoverySchema.default({}),\n\t\ttransport: z.discriminatedUnion('kind', [\n\t\t\tstreamableHttpTransportSchema,\n\t\t\tsseTransportSchema,\n\t\t\tstdioTransportSchema,\n\t\t]),\n\t})\n\t.strict();\n\nexport const mcpConfigSchema = z\n\t.object({\n\t\t$schema: z.string().min(1).optional(),\n\t\tschemaVersion: z.literal(1),\n\t\tproviders: z.record(z.string().min(1), mcpProviderSchema).default({}),\n\t})\n\t.strict();\n\nexport type McpConfig = z.infer<typeof mcpConfigSchema>;\nexport type McpProvider = z.infer<typeof mcpProviderSchema>;\n\nexport type ResolvedMcpProvider =\n\t| {\n\t\t\treadonly headers: Readonly<Record<string, SecretValue>>;\n\t\t\treadonly namespace: string;\n\t\t\treadonly transport: 'streamable-http' | 'sse';\n\t\t\treadonly url: string;\n\t }\n\t| {\n\t\t\treadonly args: readonly string[];\n\t\t\treadonly command: string;\n\t\t\treadonly cwd?: string;\n\t\t\treadonly env: Readonly<Record<string, SecretValue>>;\n\t\t\treadonly namespace: string;\n\t\t\treadonly transport: 'stdio';\n\t };\n\nexport async function loadMcpConfig(configPath: string): Promise<McpConfig> {\n\treturn mcpConfigSchema.parse(await loadJsonConfigFile(configPath));\n}\n\nexport function mcpConfigToResolvedProviders(config: McpConfig): readonly ResolvedMcpProvider[] {\n\treturn Object.values(config.providers).map((provider) => {\n\t\tconst transport = provider.transport;\n\t\tif (transport.kind === 'stdio') {\n\t\t\tconst resolvedProvider: {\n\t\t\t\targs: readonly string[];\n\t\t\t\tcommand: string;\n\t\t\t\tcwd?: string;\n\t\t\t\tenv: Readonly<Record<string, SecretValue>>;\n\t\t\t\tnamespace: string;\n\t\t\t\ttransport: 'stdio';\n\t\t\t} = {\n\t\t\t\targs: transport.args,\n\t\t\t\tcommand: transport.command,\n\t\t\t\tenv: transport.env,\n\t\t\t\tnamespace: provider.namespace,\n\t\t\t\ttransport: transport.kind,\n\t\t\t};\n\t\t\tif (transport.cwd !== undefined) {\n\t\t\t\tresolvedProvider.cwd = transport.cwd;\n\t\t\t}\n\t\t\treturn resolvedProvider;\n\t\t}\n\n\t\treturn {\n\t\t\theaders: transport.headers,\n\t\t\tnamespace: provider.namespace,\n\t\t\ttransport: transport.kind,\n\t\t\turl: transport.url,\n\t\t};\n\t});\n}\n","import type { NamespaceToolRef, ResolvedMcpPortalProfile } from './mcp-portal-config.js';\n\nexport interface McpPortalApprovalToolAnnotations {\n\treadonly destructiveHint?: boolean | undefined;\n\treadonly readOnlyHint?: boolean | undefined;\n}\n\nexport interface McpPortalApprovalToolCall {\n\treadonly annotations?: McpPortalApprovalToolAnnotations;\n\treadonly namespace: string;\n\treadonly toolName: string;\n}\n\nfunction selectorMatches(\n\tselectors: readonly NamespaceToolRef[],\n\tnamespace: string,\n\ttoolName: string,\n): boolean {\n\treturn selectors.some(\n\t\t(selector) => selector.namespace === namespace && selector.toolName === toolName,\n\t);\n}\n\nfunction hasTrustedReadOnlyAnnotation(\n\tprofile: ResolvedMcpPortalProfile,\n\tcall: McpPortalApprovalToolCall,\n): boolean {\n\treturn (\n\t\tprofile.approval.annotationPolicy === 'destructive-requires-approval' &&\n\t\tprofile.approval.trustedAnnotationNamespaces.includes(call.namespace) &&\n\t\tcall.annotations?.readOnlyHint === true &&\n\t\tcall.annotations.destructiveHint !== true\n\t);\n}\n\nexport function mcpPortalCallRequiresApproval(\n\tprofile: ResolvedMcpPortalProfile,\n\tcall: McpPortalApprovalToolCall,\n): boolean {\n\tif (selectorMatches(profile.approval.allowWithoutApprovalTools, call.namespace, call.toolName)) {\n\t\treturn false;\n\t}\n\tif (profile.approval.annotationPolicy === 'always-require-approval') {\n\t\treturn true;\n\t}\n\tif (\n\t\tselectorMatches(profile.approval.alwaysAskTools, call.namespace, call.toolName) ||\n\t\tselectorMatches(profile.approval.writeTools, call.namespace, call.toolName)\n\t) {\n\t\treturn true;\n\t}\n\treturn !hasTrustedReadOnlyAnnotation(profile, call);\n}\n","import { z } from 'zod';\n\nimport { loadJsonConfigFile } from './json-config-file.js';\nimport { secretValueSchema, type SecretValue } from './secret-value.js';\n\nexport const namespaceToolRefSchema = z\n\t.object({\n\t\tnamespace: z.string().min(1),\n\t\ttoolName: z.string().min(1),\n\t})\n\t.strict();\n\nexport type NamespaceToolRef = z.infer<typeof namespaceToolRefSchema>;\n\nexport const portalApprovalConfigSchema = z\n\t.object({\n\t\tallowWithoutApprovalTools: z.array(namespaceToolRefSchema).default([]),\n\t\talwaysAskTools: z.array(namespaceToolRefSchema).default([]),\n\t\tannotationPolicy: z\n\t\t\t.enum(['destructive-requires-approval', 'always-require-approval'])\n\t\t\t.default('destructive-requires-approval'),\n\t\ttrustedAnnotationNamespaces: z.array(z.string().min(1)).default([]),\n\t\twriteTools: z.array(namespaceToolRefSchema).default([]),\n\t})\n\t.strict();\n\nexport type PortalApprovalConfig = z.infer<typeof portalApprovalConfigSchema>;\n\nexport const mcpPortalProfileDefinitionSchema = z\n\t.object({\n\t\textends: z.string().min(1).optional(),\n\t\tenabledNamespaces: z.array(z.string().min(1)).optional(),\n\t\tenabledToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))).optional(),\n\t\thiddenToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))).optional(),\n\t\tlogging: z\n\t\t\t.object({ enabled: z.boolean().default(false) })\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tpromptContext: z\n\t\t\t.object({\n\t\t\t\tenabled: z.boolean().default(true),\n\t\t\t\tmaxNamespaces: z.number().int().positive().default(12),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tcache: z\n\t\t\t.object({\n\t\t\t\tcatalogTtlMs: z.number().int().positive().default(60_000),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tapproval: portalApprovalConfigSchema.optional(),\n\t})\n\t.strict();\n\nexport type McpPortalProfileDefinition = z.infer<typeof mcpPortalProfileDefinitionSchema>;\n\nexport const resolvedMcpPortalProfileSchema = z\n\t.object({\n\t\tenabledNamespaces: z.array(z.string().min(1)),\n\t\tenabledToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))),\n\t\thiddenToolsByNamespace: z.record(z.string().min(1), z.array(z.string().min(1))),\n\t\tlogging: z.object({ enabled: z.boolean() }).strict(),\n\t\tpromptContext: z\n\t\t\t.object({\n\t\t\t\tenabled: z.boolean(),\n\t\t\t\tmaxNamespaces: z.number().int().positive(),\n\t\t\t})\n\t\t\t.strict(),\n\t\tcache: z.object({ catalogTtlMs: z.number().int().positive() }).strict(),\n\t\tapproval: portalApprovalConfigSchema,\n\t})\n\t.strict();\n\nexport type ResolvedMcpPortalProfile = z.infer<typeof resolvedMcpPortalProfileSchema>;\n\nconst mcpPortalAccessHeaderSchema = z\n\t.object({\n\t\tname: z.string().min(1),\n\t\tsecret: secretValueSchema,\n\t})\n\t.strict();\n\nexport const mcpPortalServerSchema = z\n\t.object({\n\t\thost: z.string().min(1).default('127.0.0.1'),\n\t\tport: z.number().int().min(1).max(65_535).default(18_790),\n\t\taccessHeader: mcpPortalAccessHeaderSchema,\n\t})\n\t.strict();\n\nexport type McpPortalServerConfig = z.infer<typeof mcpPortalServerSchema>;\n\nexport const mcpPortalAgentConfigSchema = z\n\t.object({\n\t\tprofile: z.string().min(1),\n\t\thmacKey: secretValueSchema.optional(),\n\t})\n\t.strict();\n\nexport type McpPortalAgentConfig = z.infer<typeof mcpPortalAgentConfigSchema>;\n\nexport const mcpPortalConfigSchema = z\n\t.object({\n\t\t$schema: z.string().min(1).optional(),\n\t\tschemaVersion: z.literal(1),\n\t\tserver: mcpPortalServerSchema,\n\t\tagents: z.record(z.string().min(1), mcpPortalAgentConfigSchema).default({}),\n\t\tprofiles: z.record(z.string().min(1), mcpPortalProfileDefinitionSchema),\n\t})\n\t.strict()\n\t.superRefine((config, context) => {\n\t\tif (Object.keys(config.profiles).length === 0) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'mcp-portal.config.jsonc must define at least one profile.',\n\t\t\t\tpath: ['profiles'],\n\t\t\t});\n\t\t}\n\t});\n\nexport type McpPortalConfig = z.infer<typeof mcpPortalConfigSchema>;\n\nexport const openClawMcpPortalPluginConfigSchema = z\n\t.object({\n\t\tconfigDir: z.string().min(1),\n\t\tbinPath: z.string().min(1).optional(),\n\t})\n\t.strict();\n\nexport type OpenClawMcpPortalPluginConfig = z.infer<typeof openClawMcpPortalPluginConfigSchema>;\n\nconst defaultProfile: ResolvedMcpPortalProfile = {\n\tapproval: portalApprovalConfigSchema.parse({}),\n\tcache: { catalogTtlMs: 60_000 },\n\tenabledNamespaces: [],\n\tenabledToolsByNamespace: {},\n\thiddenToolsByNamespace: {},\n\tlogging: { enabled: false },\n\tpromptContext: { enabled: true, maxNamespaces: 12 },\n};\n\ninterface ResolveProfileState {\n\treadonly stack: readonly string[];\n}\n\nexport async function loadMcpPortalConfig(configPath: string): Promise<McpPortalConfig> {\n\treturn mcpPortalConfigSchema.parse(await loadJsonConfigFile(configPath));\n}\n\nfunction mergeProfile(\n\tbase: ResolvedMcpPortalProfile,\n\toverride: McpPortalProfileDefinition,\n): ResolvedMcpPortalProfile {\n\treturn resolvedMcpPortalProfileSchema.parse({\n\t\tapproval: override.approval ?? base.approval,\n\t\tcache: override.cache ?? base.cache,\n\t\tenabledNamespaces: override.enabledNamespaces ?? base.enabledNamespaces,\n\t\tenabledToolsByNamespace: override.enabledToolsByNamespace ?? base.enabledToolsByNamespace,\n\t\thiddenToolsByNamespace: override.hiddenToolsByNamespace ?? base.hiddenToolsByNamespace,\n\t\tlogging: override.logging ?? base.logging,\n\t\tpromptContext: override.promptContext ?? base.promptContext,\n\t});\n}\n\nfunction resolveMcpPortalProfileWithState(\n\tconfig: McpPortalConfig,\n\tprofileName: string,\n\tstate: ResolveProfileState,\n): ResolvedMcpPortalProfile {\n\tconst profile = config.profiles[profileName];\n\tif (profile === undefined) {\n\t\tthrow new Error(`unknown MCP profile '${profileName}'`);\n\t}\n\tif (state.stack.includes(profileName)) {\n\t\tthrow new Error(`MCP profile inheritance cycle: ${[...state.stack, profileName].join(' -> ')}`);\n\t}\n\n\tconst parentProfile =\n\t\tprofile.extends === undefined\n\t\t\t? defaultProfile\n\t\t\t: resolveMcpPortalProfileWithState(config, profile.extends, {\n\t\t\t\t\tstack: [...state.stack, profileName],\n\t\t\t\t});\n\treturn mergeProfile(parentProfile, profile);\n}\n\nexport function resolveMcpPortalProfile(\n\tconfig: McpPortalConfig,\n\tprofileName: string,\n): ResolvedMcpPortalProfile {\n\treturn resolveMcpPortalProfileWithState(config, profileName, { stack: [] });\n}\n\nexport function secretValueToEnvironmentReference(secret: SecretValue): string {\n\tif (secret.source === 'environment') {\n\t\treturn `\\${${secret.name}}`;\n\t}\n\treturn secret.ref;\n}\n","import * as zod from 'zod';\n\nimport { mcpConfigSchema } from './mcp-config.js';\nimport { mcpPortalConfigSchema } from './mcp-portal-config.js';\n\nexport const mcpPortalConfigSchemaVersions = {\n\tmcp: 1,\n\tmcpPortal: 1,\n} as const;\n\nexport const mcpPortalConfigSchemaIds = {\n\tmcp: 'agent-vm:mcp:1',\n\tmcpPortal: 'agent-vm:mcp-portal:1',\n} as const;\n\nexport const mcpPortalConfigSchemaPaths = {\n\tmcpFromGatewayConfig: '../../schemas/mcp.schema.json',\n\tmcpPortalFromGatewayConfig: '../../schemas/mcp-portal.schema.json',\n} as const;\n\nexport interface ConfigContractSchemaArtifacts {\n\treadonly mcp: Record<string, unknown>;\n\treadonly mcpPortal: Record<string, unknown>;\n}\n\nfunction withSchemaId(schema: Record<string, unknown>, schemaId: string): Record<string, unknown> {\n\treturn {\n\t\t$id: schemaId,\n\t\t...schema,\n\t};\n}\n\nexport function createConfigContractSchemaArtifacts(): ConfigContractSchemaArtifacts {\n\treturn {\n\t\tmcp: withSchemaId(\n\t\t\tzod.toJSONSchema(mcpConfigSchema, { target: 'draft-07' }),\n\t\t\tmcpPortalConfigSchemaIds.mcp,\n\t\t),\n\t\tmcpPortal: withSchemaId(\n\t\t\tzod.toJSONSchema(mcpPortalConfigSchema, { target: 'draft-07' }),\n\t\t\tmcpPortalConfigSchemaIds.mcpPortal,\n\t\t),\n\t};\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agent-vm/config-contracts",
|
|
3
|
+
"version": "0.0.59",
|
|
4
|
+
"description": "Shared agent-vm JSONC config schemas and TypeScript contracts.",
|
|
5
|
+
"homepage": "https://github.com/ShravanSunder/agent-vm#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/ShravanSunder/agent-vm/issues"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"author": "Shravan Sunder <ShravanSunder@users.noreply.github.com>",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/ShravanSunder/agent-vm.git",
|
|
14
|
+
"directory": "packages/config-contracts"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"type": "module",
|
|
20
|
+
"main": "./dist/index.js",
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"import": "./dist/index.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"jsonc-parser": "^3.3.1",
|
|
33
|
+
"zod": "^4.4.3"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"vitest": "^4.1.5"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsdown",
|
|
40
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
41
|
+
"test": "vitest run --root ../../ --config vitest.config.ts packages/config-contracts/src"
|
|
42
|
+
}
|
|
43
|
+
}
|