@agent-vm/config-contracts 0.0.108 → 0.0.109
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/dist/index.d.ts +213 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -77,6 +77,7 @@ declare const mcpProviderSchema: z.ZodObject<{
|
|
|
77
77
|
transport: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
78
78
|
kind: z.ZodLiteral<"streamable-http">;
|
|
79
79
|
url: z.ZodURL;
|
|
80
|
+
connectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
80
81
|
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
81
82
|
source: z.ZodLiteral<"environment">;
|
|
82
83
|
name: z.ZodString;
|
|
@@ -100,6 +101,7 @@ declare const mcpProviderSchema: z.ZodObject<{
|
|
|
100
101
|
}, z.core.$strict>, z.ZodObject<{
|
|
101
102
|
kind: z.ZodLiteral<"sse">;
|
|
102
103
|
url: z.ZodURL;
|
|
104
|
+
connectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
103
105
|
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
104
106
|
source: z.ZodLiteral<"environment">;
|
|
105
107
|
name: z.ZodString;
|
|
@@ -124,6 +126,7 @@ declare const mcpProviderSchema: z.ZodObject<{
|
|
|
124
126
|
kind: z.ZodLiteral<"stdio">;
|
|
125
127
|
command: z.ZodString;
|
|
126
128
|
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
129
|
+
connectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
127
130
|
cwd: z.ZodOptional<z.ZodString>;
|
|
128
131
|
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
129
132
|
source: z.ZodLiteral<"environment">;
|
|
@@ -170,6 +173,7 @@ declare const mcpConfigSchema: z.ZodObject<{
|
|
|
170
173
|
transport: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
171
174
|
kind: z.ZodLiteral<"streamable-http">;
|
|
172
175
|
url: z.ZodURL;
|
|
176
|
+
connectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
173
177
|
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
174
178
|
source: z.ZodLiteral<"environment">;
|
|
175
179
|
name: z.ZodString;
|
|
@@ -193,6 +197,7 @@ declare const mcpConfigSchema: z.ZodObject<{
|
|
|
193
197
|
}, z.core.$strict>, z.ZodObject<{
|
|
194
198
|
kind: z.ZodLiteral<"sse">;
|
|
195
199
|
url: z.ZodURL;
|
|
200
|
+
connectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
196
201
|
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
197
202
|
source: z.ZodLiteral<"environment">;
|
|
198
203
|
name: z.ZodString;
|
|
@@ -217,6 +222,7 @@ declare const mcpConfigSchema: z.ZodObject<{
|
|
|
217
222
|
kind: z.ZodLiteral<"stdio">;
|
|
218
223
|
command: z.ZodString;
|
|
219
224
|
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
225
|
+
connectionTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
220
226
|
cwd: z.ZodOptional<z.ZodString>;
|
|
221
227
|
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
222
228
|
source: z.ZodLiteral<"environment">;
|
|
@@ -248,6 +254,7 @@ declare const mcpConfigSchema: z.ZodObject<{
|
|
|
248
254
|
type McpConfig = z.infer<typeof mcpConfigSchema>;
|
|
249
255
|
type McpProvider = z.infer<typeof mcpProviderSchema>;
|
|
250
256
|
type ResolvedMcpProvider = {
|
|
257
|
+
readonly connectionTimeoutMs?: number;
|
|
251
258
|
readonly headers: Readonly<Record<string, FormattedSecretValue>>;
|
|
252
259
|
readonly namespace: string;
|
|
253
260
|
readonly transport: 'streamable-http' | 'sse';
|
|
@@ -255,6 +262,7 @@ type ResolvedMcpProvider = {
|
|
|
255
262
|
} | {
|
|
256
263
|
readonly args: readonly string[];
|
|
257
264
|
readonly command: string;
|
|
265
|
+
readonly connectionTimeoutMs?: number;
|
|
258
266
|
readonly cwd?: string;
|
|
259
267
|
readonly env: Readonly<Record<string, FormattedSecretValue>>;
|
|
260
268
|
readonly namespace: string;
|
|
@@ -532,20 +540,224 @@ declare function mcpPortalCallRequiresApproval(profile: ResolvedMcpPortalProfile
|
|
|
532
540
|
declare const mcpPortalConfigSchemaVersions: {
|
|
533
541
|
readonly mcp: 1;
|
|
534
542
|
readonly mcpPortal: 1;
|
|
543
|
+
readonly toolPortal: 1;
|
|
535
544
|
};
|
|
536
545
|
declare const mcpPortalConfigSchemaIds: {
|
|
537
546
|
readonly mcp: "agent-vm:mcp:1";
|
|
538
547
|
readonly mcpPortal: "agent-vm:mcp-portal:1";
|
|
548
|
+
readonly toolPortal: "agent-vm:tool-portal:1";
|
|
539
549
|
};
|
|
540
550
|
declare const mcpPortalConfigSchemaPaths: {
|
|
541
551
|
readonly mcpFromGatewayConfig: "../../schemas/mcp.schema.json";
|
|
542
552
|
readonly mcpPortalFromGatewayConfig: "../../schemas/mcp-portal.schema.json";
|
|
553
|
+
readonly toolPortalFromGatewayConfig: "../../schemas/tool-portal.schema.json";
|
|
543
554
|
};
|
|
544
555
|
interface ConfigContractSchemaArtifacts {
|
|
545
556
|
readonly mcp: Record<string, unknown>;
|
|
546
557
|
readonly mcpPortal: Record<string, unknown>;
|
|
558
|
+
readonly toolPortal: Record<string, unknown>;
|
|
547
559
|
}
|
|
548
560
|
declare function createConfigContractSchemaArtifacts(): ConfigContractSchemaArtifacts;
|
|
549
561
|
//#endregion
|
|
550
|
-
|
|
562
|
+
//#region src/tool-portal-config.d.ts
|
|
563
|
+
declare const toolPortalToolSelectorSchema: z.ZodObject<{
|
|
564
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
565
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
566
|
+
}, z.core.$strict>;
|
|
567
|
+
type ToolPortalToolSelector = z.infer<typeof toolPortalToolSelectorSchema>;
|
|
568
|
+
declare const toolPortalCallPolicySchema: z.ZodObject<{
|
|
569
|
+
requiresApproval: z.ZodObject<{
|
|
570
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
571
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
572
|
+
}, z.core.$strict>;
|
|
573
|
+
withoutApproval: z.ZodObject<{
|
|
574
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
575
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
576
|
+
}, z.core.$strict>;
|
|
577
|
+
}, z.core.$strict>;
|
|
578
|
+
type ToolPortalCallPolicy = z.infer<typeof toolPortalCallPolicySchema>;
|
|
579
|
+
declare const toolPortalBackendBindingSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
580
|
+
kind: z.ZodLiteral<"mcp_provider">;
|
|
581
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
582
|
+
kind: z.ZodLiteral<"controller_host_action">;
|
|
583
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
584
|
+
kind: z.ZodLiteral<"tool_vm_runner">;
|
|
585
|
+
}, z.core.$strict>], "kind">;
|
|
586
|
+
type ToolPortalBackendBinding = z.infer<typeof toolPortalBackendBindingSchema>;
|
|
587
|
+
declare const toolPortalCapabilityPolicySchema: z.ZodObject<{
|
|
588
|
+
backend: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
589
|
+
kind: z.ZodLiteral<"mcp_provider">;
|
|
590
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
591
|
+
kind: z.ZodLiteral<"controller_host_action">;
|
|
592
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
593
|
+
kind: z.ZodLiteral<"tool_vm_runner">;
|
|
594
|
+
}, z.core.$strict>], "kind">;
|
|
595
|
+
calls: z.ZodObject<{
|
|
596
|
+
requiresApproval: z.ZodObject<{
|
|
597
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
598
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
599
|
+
}, z.core.$strict>;
|
|
600
|
+
withoutApproval: z.ZodObject<{
|
|
601
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
602
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
603
|
+
}, z.core.$strict>;
|
|
604
|
+
}, z.core.$strict>;
|
|
605
|
+
tools: z.ZodObject<{
|
|
606
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
607
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
608
|
+
}, z.core.$strict>;
|
|
609
|
+
}, z.core.$strict>;
|
|
610
|
+
type ToolPortalCapabilityPolicy = z.infer<typeof toolPortalCapabilityPolicySchema>;
|
|
611
|
+
declare const toolPortalProfileDefinitionSchema: z.ZodObject<{
|
|
612
|
+
capabilities: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
613
|
+
backend: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
614
|
+
kind: z.ZodLiteral<"mcp_provider">;
|
|
615
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
616
|
+
kind: z.ZodLiteral<"controller_host_action">;
|
|
617
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
618
|
+
kind: z.ZodLiteral<"tool_vm_runner">;
|
|
619
|
+
}, z.core.$strict>], "kind">;
|
|
620
|
+
calls: z.ZodObject<{
|
|
621
|
+
requiresApproval: z.ZodObject<{
|
|
622
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
623
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
624
|
+
}, z.core.$strict>;
|
|
625
|
+
withoutApproval: z.ZodObject<{
|
|
626
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
627
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
628
|
+
}, z.core.$strict>;
|
|
629
|
+
}, z.core.$strict>;
|
|
630
|
+
tools: z.ZodObject<{
|
|
631
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
632
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
633
|
+
}, z.core.$strict>;
|
|
634
|
+
}, z.core.$strict>>>;
|
|
635
|
+
}, z.core.$strict>;
|
|
636
|
+
type ToolPortalProfileDefinition = z.infer<typeof toolPortalProfileDefinitionSchema>;
|
|
637
|
+
declare const toolPortalAgentConfigSchema: z.ZodObject<{
|
|
638
|
+
profile: z.ZodString;
|
|
639
|
+
}, z.core.$strict>;
|
|
640
|
+
type ToolPortalAgentConfig = z.infer<typeof toolPortalAgentConfigSchema>;
|
|
641
|
+
declare const toolPortalConfigSchema: z.ZodObject<{
|
|
642
|
+
$schema: z.ZodOptional<z.ZodString>;
|
|
643
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
644
|
+
agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
645
|
+
profile: z.ZodString;
|
|
646
|
+
}, z.core.$strict>>>;
|
|
647
|
+
profiles: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
648
|
+
capabilities: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
649
|
+
backend: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
650
|
+
kind: z.ZodLiteral<"mcp_provider">;
|
|
651
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
652
|
+
kind: z.ZodLiteral<"controller_host_action">;
|
|
653
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
654
|
+
kind: z.ZodLiteral<"tool_vm_runner">;
|
|
655
|
+
}, z.core.$strict>], "kind">;
|
|
656
|
+
calls: z.ZodObject<{
|
|
657
|
+
requiresApproval: z.ZodObject<{
|
|
658
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
659
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
660
|
+
}, z.core.$strict>;
|
|
661
|
+
withoutApproval: z.ZodObject<{
|
|
662
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
663
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
664
|
+
}, z.core.$strict>;
|
|
665
|
+
}, z.core.$strict>;
|
|
666
|
+
tools: z.ZodObject<{
|
|
667
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
668
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
669
|
+
}, z.core.$strict>;
|
|
670
|
+
}, z.core.$strict>>>;
|
|
671
|
+
}, z.core.$strict>>;
|
|
672
|
+
}, z.core.$strict>;
|
|
673
|
+
type ToolPortalConfig = z.infer<typeof toolPortalConfigSchema>;
|
|
674
|
+
declare function loadToolPortalConfig(configPath: string): Promise<ToolPortalConfig>;
|
|
675
|
+
declare const ToolPortalMcpProjectionNamespaceSchema: z.ZodObject<{
|
|
676
|
+
calls: z.ZodObject<{
|
|
677
|
+
requiresApproval: z.ZodObject<{
|
|
678
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
679
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
680
|
+
}, z.core.$strict>;
|
|
681
|
+
withoutApproval: z.ZodObject<{
|
|
682
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
683
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
684
|
+
}, z.core.$strict>;
|
|
685
|
+
}, z.core.$strict>;
|
|
686
|
+
tools: z.ZodObject<{
|
|
687
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
688
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
689
|
+
}, z.core.$strict>;
|
|
690
|
+
}, z.core.$strict>;
|
|
691
|
+
type ToolPortalMcpProjectionNamespace = z.infer<typeof ToolPortalMcpProjectionNamespaceSchema>;
|
|
692
|
+
declare const ToolPortalMcpProjectionSchema: z.ZodObject<{
|
|
693
|
+
agentId: z.ZodString;
|
|
694
|
+
namespaces: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
695
|
+
calls: z.ZodObject<{
|
|
696
|
+
requiresApproval: z.ZodObject<{
|
|
697
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
698
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
699
|
+
}, z.core.$strict>;
|
|
700
|
+
withoutApproval: z.ZodObject<{
|
|
701
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
702
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
703
|
+
}, z.core.$strict>;
|
|
704
|
+
}, z.core.$strict>;
|
|
705
|
+
tools: z.ZodObject<{
|
|
706
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
707
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
708
|
+
}, z.core.$strict>;
|
|
709
|
+
}, z.core.$strict>>;
|
|
710
|
+
profile: z.ZodString;
|
|
711
|
+
}, z.core.$strict>;
|
|
712
|
+
type ToolPortalMcpProjection = z.infer<typeof ToolPortalMcpProjectionSchema>;
|
|
713
|
+
declare const ToolPortalControllerHostActionProjectionNamespaceSchema: z.ZodObject<{
|
|
714
|
+
calls: z.ZodObject<{
|
|
715
|
+
requiresApproval: z.ZodObject<{
|
|
716
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
717
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
718
|
+
}, z.core.$strict>;
|
|
719
|
+
withoutApproval: z.ZodObject<{
|
|
720
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
721
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
722
|
+
}, z.core.$strict>;
|
|
723
|
+
}, z.core.$strict>;
|
|
724
|
+
tools: z.ZodObject<{
|
|
725
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
726
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
727
|
+
}, z.core.$strict>;
|
|
728
|
+
}, z.core.$strict>;
|
|
729
|
+
type ToolPortalControllerHostActionProjectionNamespace = z.infer<typeof ToolPortalControllerHostActionProjectionNamespaceSchema>;
|
|
730
|
+
declare const ToolPortalControllerHostActionProjectionSchema: z.ZodObject<{
|
|
731
|
+
agentId: z.ZodString;
|
|
732
|
+
namespaces: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
733
|
+
calls: z.ZodObject<{
|
|
734
|
+
requiresApproval: z.ZodObject<{
|
|
735
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
736
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
737
|
+
}, z.core.$strict>;
|
|
738
|
+
withoutApproval: z.ZodObject<{
|
|
739
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
740
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
741
|
+
}, z.core.$strict>;
|
|
742
|
+
}, z.core.$strict>;
|
|
743
|
+
tools: z.ZodObject<{
|
|
744
|
+
allow: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>;
|
|
745
|
+
deny: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
746
|
+
}, z.core.$strict>;
|
|
747
|
+
}, z.core.$strict>>;
|
|
748
|
+
profile: z.ZodString;
|
|
749
|
+
}, z.core.$strict>;
|
|
750
|
+
type ToolPortalControllerHostActionProjection = z.infer<typeof ToolPortalControllerHostActionProjectionSchema>;
|
|
751
|
+
interface CreateToolPortalMcpProjectionProps {
|
|
752
|
+
readonly agentId: string;
|
|
753
|
+
readonly config: ToolPortalConfig;
|
|
754
|
+
}
|
|
755
|
+
declare function createToolPortalMcpProjection(props: CreateToolPortalMcpProjectionProps): ToolPortalMcpProjection;
|
|
756
|
+
interface CreateToolPortalControllerHostActionProjectionProps {
|
|
757
|
+
readonly agentId: string;
|
|
758
|
+
readonly config: ToolPortalConfig;
|
|
759
|
+
}
|
|
760
|
+
declare function createToolPortalControllerHostActionProjection(props: CreateToolPortalControllerHostActionProjectionProps): ToolPortalControllerHostActionProjection;
|
|
761
|
+
//#endregion
|
|
762
|
+
export { ConfigContractSchemaArtifacts, CreateToolPortalControllerHostActionProjectionProps, CreateToolPortalMcpProjectionProps, FormattedSecretValue, JsonArray, JsonObject, JsonPrimitive, JsonValue, McpConfig, McpPortalAgentConfig, McpPortalApprovalToolAnnotations, McpPortalApprovalToolCall, McpPortalCallPolicyDecision, McpPortalConfig, McpPortalExternalAuthConfig, McpPortalProfileDefinition, McpPortalProxyConfig, McpProvider, NamespaceToolRef, OpenClawMcpPortalPluginConfig, PortalApprovalConfig, PortalToolSelector, ResolvedMcpPortalProfile, ResolvedMcpProvider, SecretFormat, SecretValue, ToolPortalAgentConfig, ToolPortalBackendBinding, ToolPortalCallPolicy, ToolPortalCapabilityPolicy, ToolPortalConfig, ToolPortalControllerHostActionProjection, ToolPortalControllerHostActionProjectionNamespace, ToolPortalControllerHostActionProjectionNamespaceSchema, ToolPortalControllerHostActionProjectionSchema, ToolPortalMcpProjection, ToolPortalMcpProjectionNamespace, ToolPortalMcpProjectionNamespaceSchema, ToolPortalMcpProjectionSchema, ToolPortalProfileDefinition, ToolPortalToolSelector, assertJsonObject, createConfigContractSchemaArtifacts, createToolPortalControllerHostActionProjection, createToolPortalMcpProjection, formatSecretValue, formattedSecretValueSchema, isJsonObject, jsonObjectSchema, jsonValueSchema, loadJsonConfigFile, loadMcpConfig, loadMcpPortalConfig, loadToolPortalConfig, mcpConfigSchema, mcpConfigToResolvedProviders, mcpPortalAgentConfigSchema, mcpPortalCallPolicyDecision, mcpPortalCallRequiresApproval, mcpPortalConfigSchema, mcpPortalConfigSchemaIds, mcpPortalConfigSchemaPaths, mcpPortalConfigSchemaVersions, mcpPortalExternalAuthSchema, mcpPortalProfileDefinitionSchema, mcpPortalProxySchema, mcpProviderSchema, mcpSecretPolicySchema, namespaceToolRefSchema, openClawMcpPortalPluginConfigSchema, portalApprovalConfigSchema, portalToolSelectorSchema, resolveMcpPortalProfile, resolvedMcpPortalProfileSchema, secretFormatSchema, secretValueSchema, secretValueToEnvironmentReference, toolPortalAgentConfigSchema, toolPortalBackendBindingSchema, toolPortalCallPolicySchema, toolPortalCapabilityPolicySchema, toolPortalConfigSchema, toolPortalProfileDefinitionSchema, toolPortalToolSelectorSchema };
|
|
551
763
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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":";;;iBAsBsB,kBAAA,CAAmB,QAAA,WAAmB,OAAA;;;KCpBhD,aAAA;AAAA,KACA,SAAA,GAAY,SAAA;AAAA,KACZ,UAAA;EAAA,CAAgB,GAAA,WAAc,SAAA;AAAA;AAAA,KAC9B,SAAA,GAAY,SAAA,GAAY,UAAA,GAAa,aAAA;AAAA,cAEpC,eAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,SAAA;AAAA,cAW3B,gBAAA,EAAkB,CAAA,CAAE,OAAA,CAAQ,UAAA;AAAA,iBAEzB,YAAA,CAAa,KAAA,YAAiB,KAAA,IAAS,UAAA;AAAA,iBAIvC,gBAAA,CAAiB,KAAA,WAAgB,KAAA,WAAgB,UAAA;;;cCtBpD,kBAAA,EAAkB,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;cAmClB,iBAAA,EAAiB,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;;cAKjB,0BAAA,EAA0B,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;KAS3B,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,oBAAA,GAAuB,CAAA,CAAE,KAAA,QAAa,0BAAA;AAAA,iBAElC,iBAAA,CAAkB,MAAA,EAAQ,oBAAA,EAAsB,QAAA;;;
|
|
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","../src/tool-portal-config.ts"],"mappings":";;;iBAsBsB,kBAAA,CAAmB,QAAA,WAAmB,OAAA;;;KCpBhD,aAAA;AAAA,KACA,SAAA,GAAY,SAAA;AAAA,KACZ,UAAA;EAAA,CAAgB,GAAA,WAAc,SAAA;AAAA;AAAA,KAC9B,SAAA,GAAY,SAAA,GAAY,UAAA,GAAa,aAAA;AAAA,cAEpC,eAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,SAAA;AAAA,cAW3B,gBAAA,EAAkB,CAAA,CAAE,OAAA,CAAQ,UAAA;AAAA,iBAEzB,YAAA,CAAa,KAAA,YAAiB,KAAA,IAAS,UAAA;AAAA,iBAIvC,gBAAA,CAAiB,KAAA,WAAgB,KAAA,WAAgB,UAAA;;;cCtBpD,kBAAA,EAAkB,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;cAmClB,iBAAA,EAAiB,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;;cAKjB,0BAAA,EAA0B,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;KAS3B,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAC7B,oBAAA,GAAuB,CAAA,CAAE,KAAA,QAAa,0BAAA;AAAA,iBAElC,iBAAA,CAAkB,MAAA,EAAQ,oBAAA,EAAsB,QAAA;;;cCDnD,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;cAuBrB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAcjB,eAAA,EAAe,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQhB,SAAA,GAAY,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAC3B,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAE7B,mBAAA;EAAA,SAEA,mBAAA;EAAA,SACA,OAAA,EAAS,QAAA,CAAS,MAAA,SAAe,oBAAA;EAAA,SACjC,SAAA;EAAA,SACA,SAAA;EAAA,SACA,GAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,OAAA;EAAA,SACA,mBAAA;EAAA,SACA,GAAA;EAAA,SACA,GAAA,EAAK,QAAA,CAAS,MAAA,SAAe,oBAAA;EAAA,SAC7B,SAAA;EAAA,SACA,SAAA;AAAA;AAAA,iBAGU,aAAA,CAAc,UAAA,WAAqB,OAAA,CAAQ,SAAA;AAAA,iBAIjD,4BAAA,CAA6B,MAAA,EAAQ,SAAA,YAAqB,mBAAA;;;cCvH7D,sBAAA,EAAsB,CAAA,CAAA,SAAA;;;;KAOvB,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,cAEjC,wBAAA,EAAwB,CAAA,CAAA,SAAA;;;;KAOzB,kBAAA,GAAqB,CAAA,CAAE,KAAA,QAAa,wBAAA;AAAA,cAEnC,0BAAA,EAA0B,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuB3B,oBAAA,GAAuB,CAAA,CAAE,KAAA,QAAa,0BAAA;AAAA,cAmCrC,gCAAA,EAAgC,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BjC,0BAAA,GAA6B,CAAA,CAAE,KAAA,QAAa,gCAAA;AAAA,cAE3C,8BAAA,EAA8B,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiB/B,wBAAA,GAA2B,CAAA,CAAE,KAAA,QAAa,8BAAA;AAAA,cAEzC,2BAAA,EAA2B,CAAA,CAAA,SAAA;;;;;;;;;KAM5B,2BAAA,GAA8B,CAAA,CAAE,KAAA,QAAa,2BAAA;AAAA,cAS5C,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;KAwBrB,oBAAA,GAAuB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,cAErC,0BAAA,EAA0B,CAAA,CAAA,SAAA;;;;;;;;;;;KAQ3B,oBAAA,GAAuB,CAAA,CAAE,KAAA,QAAa,0BAAA;AAAA,cAErC,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoB7B,qBAAA,GAAwB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KAChC,eAAA,GAAkB,IAAA,CAAK,qBAAA;EAAA,SACzB,MAAA,EAAQ,QAAA,CAAS,MAAA,SAAe,oBAAA;AAAA;AAAA,cAG7B,mCAAA,EAAmC,CAAA,CAAA,SAAA;;;;KAOpC,6BAAA,GAAgC,CAAA,CAAE,KAAA,QAAa,mCAAA;AAAA,iBAcrC,mBAAA,CAAoB,UAAA,WAAqB,OAAA,CAAQ,eAAA;AAAA,iBA2FvD,uBAAA,CACf,MAAA,EAAQ,eAAA,EACR,WAAA,WACE,wBAAA;AAAA,iBAQa,iCAAA,CAAkC,MAAA,EAAQ,WAAA;;;UCxUzC,gCAAA;EAAA,SACP,eAAA;EAAA,SACA,YAAA;AAAA;AAAA,UAGO,yBAAA;EAAA,SACP,WAAA,GAAc,gCAAA;EAAA,SACd,SAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAyCE,2BAAA;EAAA,SACE,IAAA;AAAA;EAAA,SACA,IAAA;AAAA;EAAA,SACA,IAAA;AAAA;AAAA,iBAEE,2BAAA,CACf,OAAA,EAAS,wBAAA,EACT,IAAA,EAAM,yBAAA,GACJ,2BAAA;AAAA,iBAqBa,6BAAA,CACf,OAAA,EAAS,wBAAA,EACT,IAAA,EAAM,yBAAA;;;cC5EM,6BAAA;EAAA;;;;cAMA,wBAAA;EAAA;;;;cAMA,0BAAA;EAAA;;;;UAMI,6BAAA;EAAA,SACP,GAAA,EAAK,MAAA;EAAA,SACL,SAAA,EAAW,MAAA;EAAA,SACX,UAAA,EAAY,MAAA;AAAA;AAAA,iBAUN,mCAAA,CAAA,GAAuC,6BAAA;;;cCjC1C,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;;KAO7B,sBAAA,GAAyB,CAAA,CAAE,KAAA,QAAa,4BAAA;AAAA,cAEvC,0BAAA,EAA0B,CAAA,CAAA,SAAA;;;;;;;;;;KAgB3B,oBAAA,GAAuB,CAAA,CAAE,KAAA,QAAa,0BAAA;AAAA,cAErC,8BAAA,EAA8B,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;;KAM/B,wBAAA,GAA2B,CAAA,CAAE,KAAA,QAAa,8BAAA;AAAA,cAEzC,gCAAA,EAAgC,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;KAQjC,0BAAA,GAA6B,CAAA,CAAE,KAAA,QAAa,gCAAA;AAAA,cAE3C,iCAAA,EAAiC,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAMlC,2BAAA,GAA8B,CAAA,CAAE,KAAA,QAAa,iCAAA;AAAA,cAE5C,2BAAA,EAA2B,CAAA,CAAA,SAAA;;;KAM5B,qBAAA,GAAwB,CAAA,CAAE,KAAA,QAAa,2BAAA;AAAA,cAEtC,sBAAA,EAAsB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BvB,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,sBAAA;AAAA,iBAExB,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,gBAAA;AAAA,cAI3D,sCAAA,EAAsC,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;KAOvC,gCAAA,GAAmC,CAAA,CAAE,KAAA,QACzC,sCAAA;AAAA,cAGK,6BAAA,EAA6B,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;KAQ9B,uBAAA,GAA0B,CAAA,CAAE,KAAA,QAAa,6BAAA;AAAA,cAExC,uDAAA,EAAuD,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;KAGxD,iDAAA,GAAoD,CAAA,CAAE,KAAA,QAC1D,uDAAA;AAAA,cAGK,8CAAA,EAA8C,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;KAW/C,wCAAA,GAA2C,CAAA,CAAE,KAAA,QACjD,8CAAA;AAAA,UAGS,kCAAA;EAAA,SACP,OAAA;EAAA,SACA,MAAA,EAAQ,gBAAA;AAAA;AAAA,iBAGF,6BAAA,CACf,KAAA,EAAO,kCAAA,GACL,uBAAA;AAAA,UAgCc,mDAAA;EAAA,SACP,OAAA;EAAA,SACA,MAAA,EAAQ,gBAAA;AAAA;AAAA,iBAGF,8CAAA,CACf,KAAA,EAAO,mDAAA,GACL,wCAAA"}
|
package/dist/index.js
CHANGED
|
@@ -73,15 +73,18 @@ const remoteTransportUrlSchema = z.url().refine((value) => {
|
|
|
73
73
|
const protocol = new URL(value).protocol;
|
|
74
74
|
return protocol === "http:" || protocol === "https:";
|
|
75
75
|
}, { message: "Remote MCP transport URLs must use http or https." });
|
|
76
|
+
const connectionTimeoutMsSchema = z.number().int().min(1).max(3e5);
|
|
76
77
|
const streamableHttpTransportSchema = z.object({
|
|
77
78
|
kind: z.literal("streamable-http"),
|
|
78
79
|
url: remoteTransportUrlSchema,
|
|
80
|
+
connectionTimeoutMs: connectionTimeoutMsSchema.optional(),
|
|
79
81
|
headers: z.record(z.string(), formattedSecretValueSchema).default({}),
|
|
80
82
|
requiredEgressHosts: z.array(z.string().min(1)).default([])
|
|
81
83
|
}).strict();
|
|
82
84
|
const sseTransportSchema = z.object({
|
|
83
85
|
kind: z.literal("sse"),
|
|
84
86
|
url: remoteTransportUrlSchema,
|
|
87
|
+
connectionTimeoutMs: connectionTimeoutMsSchema.optional(),
|
|
85
88
|
headers: z.record(z.string(), formattedSecretValueSchema).default({}),
|
|
86
89
|
requiredEgressHosts: z.array(z.string().min(1)).default([])
|
|
87
90
|
}).strict();
|
|
@@ -89,6 +92,7 @@ const stdioTransportSchema = z.object({
|
|
|
89
92
|
kind: z.literal("stdio"),
|
|
90
93
|
command: z.string().min(1),
|
|
91
94
|
args: z.array(z.string()).default([]),
|
|
95
|
+
connectionTimeoutMs: connectionTimeoutMsSchema.optional(),
|
|
92
96
|
cwd: z.string().min(1).optional(),
|
|
93
97
|
env: z.record(z.string(), formattedSecretValueSchema).default({}),
|
|
94
98
|
networkAccess: z.enum(["declared", "none"]).optional(),
|
|
@@ -139,15 +143,18 @@ function mcpConfigToResolvedProviders(config) {
|
|
|
139
143
|
namespace: provider.namespace,
|
|
140
144
|
transport: transport.kind
|
|
141
145
|
};
|
|
146
|
+
if (transport.connectionTimeoutMs !== void 0) resolvedProvider.connectionTimeoutMs = transport.connectionTimeoutMs;
|
|
142
147
|
if (transport.cwd !== void 0) resolvedProvider.cwd = transport.cwd;
|
|
143
148
|
return resolvedProvider;
|
|
144
149
|
}
|
|
145
|
-
|
|
150
|
+
const resolvedProvider = {
|
|
146
151
|
headers: transport.headers,
|
|
147
152
|
namespace: provider.namespace,
|
|
148
153
|
transport: transport.kind,
|
|
149
154
|
url: transport.url
|
|
150
155
|
};
|
|
156
|
+
if (transport.connectionTimeoutMs !== void 0) resolvedProvider.connectionTimeoutMs = transport.connectionTimeoutMs;
|
|
157
|
+
return resolvedProvider;
|
|
151
158
|
});
|
|
152
159
|
}
|
|
153
160
|
//#endregion
|
|
@@ -343,18 +350,129 @@ function secretValueToEnvironmentReference(secret) {
|
|
|
343
350
|
return secret.ref;
|
|
344
351
|
}
|
|
345
352
|
//#endregion
|
|
353
|
+
//#region src/tool-portal-config.ts
|
|
354
|
+
const toolPortalToolSelectorSchema = z.object({
|
|
355
|
+
allow: z.union([z.literal("*"), z.array(z.string().min(1))]),
|
|
356
|
+
deny: z.array(z.string().min(1)).default([])
|
|
357
|
+
}).strict();
|
|
358
|
+
const toolPortalCallPolicySchema = z.object({
|
|
359
|
+
requiresApproval: toolPortalToolSelectorSchema,
|
|
360
|
+
withoutApproval: toolPortalToolSelectorSchema
|
|
361
|
+
}).strict().superRefine((policy, context) => {
|
|
362
|
+
if (toolSelectorsOverlap(policy.requiresApproval, policy.withoutApproval)) context.addIssue({
|
|
363
|
+
code: z.ZodIssueCode.custom,
|
|
364
|
+
message: "Tool Portal call policy cannot list one tool in both approval selectors.",
|
|
365
|
+
path: ["withoutApproval"]
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
const toolPortalBackendBindingSchema = z.discriminatedUnion("kind", [
|
|
369
|
+
z.object({ kind: z.literal("mcp_provider") }).strict(),
|
|
370
|
+
z.object({ kind: z.literal("controller_host_action") }).strict(),
|
|
371
|
+
z.object({ kind: z.literal("tool_vm_runner") }).strict()
|
|
372
|
+
]);
|
|
373
|
+
const toolPortalCapabilityPolicySchema = z.object({
|
|
374
|
+
backend: toolPortalBackendBindingSchema,
|
|
375
|
+
calls: toolPortalCallPolicySchema,
|
|
376
|
+
tools: toolPortalToolSelectorSchema
|
|
377
|
+
}).strict();
|
|
378
|
+
const toolPortalProfileDefinitionSchema = z.object({ capabilities: z.record(z.string().min(1), toolPortalCapabilityPolicySchema).default({}) }).strict();
|
|
379
|
+
const toolPortalAgentConfigSchema = z.object({ profile: z.string().min(1) }).strict();
|
|
380
|
+
const toolPortalConfigSchema = z.object({
|
|
381
|
+
$schema: z.string().min(1).optional(),
|
|
382
|
+
schemaVersion: z.literal(1),
|
|
383
|
+
agents: z.record(z.string().min(1), toolPortalAgentConfigSchema).default({}),
|
|
384
|
+
profiles: z.record(z.string().min(1), toolPortalProfileDefinitionSchema)
|
|
385
|
+
}).strict().superRefine((config, context) => {
|
|
386
|
+
if (Object.keys(config.profiles).length === 0) context.addIssue({
|
|
387
|
+
code: z.ZodIssueCode.custom,
|
|
388
|
+
message: "tool-portal.config.jsonc must define at least one profile.",
|
|
389
|
+
path: ["profiles"]
|
|
390
|
+
});
|
|
391
|
+
for (const [agentId, agentConfig] of Object.entries(config.agents)) if (config.profiles[agentConfig.profile] === void 0) context.addIssue({
|
|
392
|
+
code: z.ZodIssueCode.custom,
|
|
393
|
+
message: `Tool Portal agent "${agentId}" references missing profile "${agentConfig.profile}".`,
|
|
394
|
+
path: [
|
|
395
|
+
"agents",
|
|
396
|
+
agentId,
|
|
397
|
+
"profile"
|
|
398
|
+
]
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
async function loadToolPortalConfig(configPath) {
|
|
402
|
+
return toolPortalConfigSchema.parse(await loadJsonConfigFile(configPath));
|
|
403
|
+
}
|
|
404
|
+
const ToolPortalMcpProjectionNamespaceSchema = z.object({
|
|
405
|
+
calls: toolPortalCallPolicySchema,
|
|
406
|
+
tools: toolPortalToolSelectorSchema
|
|
407
|
+
}).strict();
|
|
408
|
+
const ToolPortalMcpProjectionSchema = z.object({
|
|
409
|
+
agentId: z.string().min(1),
|
|
410
|
+
namespaces: z.record(z.string().min(1), ToolPortalMcpProjectionNamespaceSchema),
|
|
411
|
+
profile: z.string().min(1)
|
|
412
|
+
}).strict();
|
|
413
|
+
const ToolPortalControllerHostActionProjectionNamespaceSchema = ToolPortalMcpProjectionNamespaceSchema;
|
|
414
|
+
const ToolPortalControllerHostActionProjectionSchema = z.object({
|
|
415
|
+
agentId: z.string().min(1),
|
|
416
|
+
namespaces: z.record(z.string().min(1), ToolPortalControllerHostActionProjectionNamespaceSchema),
|
|
417
|
+
profile: z.string().min(1)
|
|
418
|
+
}).strict();
|
|
419
|
+
function createToolPortalMcpProjection(props) {
|
|
420
|
+
const agentConfig = props.config.agents[props.agentId];
|
|
421
|
+
if (agentConfig === void 0) throw new Error(`Tool Portal agent "${props.agentId}" is not configured.`);
|
|
422
|
+
const profileConfig = props.config.profiles[agentConfig.profile];
|
|
423
|
+
if (profileConfig === void 0) throw new Error(`Tool Portal agent "${props.agentId}" references missing profile "${agentConfig.profile}".`);
|
|
424
|
+
const namespaces = Object.fromEntries(Object.entries(profileConfig.capabilities).filter(([, capabilityPolicy]) => capabilityPolicy.backend.kind === "mcp_provider").map(([namespace, capabilityPolicy]) => [namespace, {
|
|
425
|
+
calls: capabilityPolicy.calls,
|
|
426
|
+
tools: capabilityPolicy.tools
|
|
427
|
+
}]));
|
|
428
|
+
return ToolPortalMcpProjectionSchema.parse({
|
|
429
|
+
agentId: props.agentId,
|
|
430
|
+
namespaces,
|
|
431
|
+
profile: agentConfig.profile
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
function createToolPortalControllerHostActionProjection(props) {
|
|
435
|
+
const agentConfig = props.config.agents[props.agentId];
|
|
436
|
+
if (agentConfig === void 0) throw new Error(`Tool Portal agent "${props.agentId}" is not configured.`);
|
|
437
|
+
const profileConfig = props.config.profiles[agentConfig.profile];
|
|
438
|
+
if (profileConfig === void 0) throw new Error(`Tool Portal agent "${props.agentId}" references missing profile "${agentConfig.profile}".`);
|
|
439
|
+
const namespaces = Object.fromEntries(Object.entries(profileConfig.capabilities).filter(([, capabilityPolicy]) => capabilityPolicy.backend.kind === "controller_host_action").map(([namespace, capabilityPolicy]) => [namespace, {
|
|
440
|
+
calls: capabilityPolicy.calls,
|
|
441
|
+
tools: capabilityPolicy.tools
|
|
442
|
+
}]));
|
|
443
|
+
return ToolPortalControllerHostActionProjectionSchema.parse({
|
|
444
|
+
agentId: props.agentId,
|
|
445
|
+
namespaces,
|
|
446
|
+
profile: agentConfig.profile
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
function toolSelectorsOverlap(left, right) {
|
|
450
|
+
const leftAllow = left.allow;
|
|
451
|
+
const rightAllow = right.allow;
|
|
452
|
+
if (leftAllow === "*" && rightAllow === "*") return true;
|
|
453
|
+
if (leftAllow === "*") {
|
|
454
|
+
if (rightAllow === "*") return true;
|
|
455
|
+
return rightAllow.some((toolName) => !left.deny.includes(toolName));
|
|
456
|
+
}
|
|
457
|
+
if (rightAllow === "*") return leftAllow.some((toolName) => !right.deny.includes(toolName));
|
|
458
|
+
return leftAllow.some((toolName) => rightAllow.includes(toolName) && !left.deny.includes(toolName) && !right.deny.includes(toolName));
|
|
459
|
+
}
|
|
460
|
+
//#endregion
|
|
346
461
|
//#region src/schema-artifacts.ts
|
|
347
462
|
const mcpPortalConfigSchemaVersions = {
|
|
348
463
|
mcp: 1,
|
|
349
|
-
mcpPortal: 1
|
|
464
|
+
mcpPortal: 1,
|
|
465
|
+
toolPortal: 1
|
|
350
466
|
};
|
|
351
467
|
const mcpPortalConfigSchemaIds = {
|
|
352
468
|
mcp: "agent-vm:mcp:1",
|
|
353
|
-
mcpPortal: "agent-vm:mcp-portal:1"
|
|
469
|
+
mcpPortal: "agent-vm:mcp-portal:1",
|
|
470
|
+
toolPortal: "agent-vm:tool-portal:1"
|
|
354
471
|
};
|
|
355
472
|
const mcpPortalConfigSchemaPaths = {
|
|
356
473
|
mcpFromGatewayConfig: "../../schemas/mcp.schema.json",
|
|
357
|
-
mcpPortalFromGatewayConfig: "../../schemas/mcp-portal.schema.json"
|
|
474
|
+
mcpPortalFromGatewayConfig: "../../schemas/mcp-portal.schema.json",
|
|
475
|
+
toolPortalFromGatewayConfig: "../../schemas/tool-portal.schema.json"
|
|
358
476
|
};
|
|
359
477
|
function withSchemaId(schema, schemaId) {
|
|
360
478
|
return {
|
|
@@ -365,10 +483,11 @@ function withSchemaId(schema, schemaId) {
|
|
|
365
483
|
function createConfigContractSchemaArtifacts() {
|
|
366
484
|
return {
|
|
367
485
|
mcp: withSchemaId(zod.toJSONSchema(mcpConfigSchema, { target: "draft-07" }), mcpPortalConfigSchemaIds.mcp),
|
|
368
|
-
mcpPortal: withSchemaId(zod.toJSONSchema(mcpPortalConfigSchema, { target: "draft-07" }), mcpPortalConfigSchemaIds.mcpPortal)
|
|
486
|
+
mcpPortal: withSchemaId(zod.toJSONSchema(mcpPortalConfigSchema, { target: "draft-07" }), mcpPortalConfigSchemaIds.mcpPortal),
|
|
487
|
+
toolPortal: withSchemaId(zod.toJSONSchema(toolPortalConfigSchema, { target: "draft-07" }), mcpPortalConfigSchemaIds.toolPortal)
|
|
369
488
|
};
|
|
370
489
|
}
|
|
371
490
|
//#endregion
|
|
372
|
-
export { assertJsonObject, createConfigContractSchemaArtifacts, formatSecretValue, formattedSecretValueSchema, isJsonObject, jsonObjectSchema, jsonValueSchema, loadJsonConfigFile, loadMcpConfig, loadMcpPortalConfig, mcpConfigSchema, mcpConfigToResolvedProviders, mcpPortalAgentConfigSchema, mcpPortalCallPolicyDecision, mcpPortalCallRequiresApproval, mcpPortalConfigSchema, mcpPortalConfigSchemaIds, mcpPortalConfigSchemaPaths, mcpPortalConfigSchemaVersions, mcpPortalExternalAuthSchema, mcpPortalProfileDefinitionSchema, mcpPortalProxySchema, mcpProviderSchema, mcpSecretPolicySchema, namespaceToolRefSchema, openClawMcpPortalPluginConfigSchema, portalApprovalConfigSchema, portalToolSelectorSchema, resolveMcpPortalProfile, resolvedMcpPortalProfileSchema, secretFormatSchema, secretValueSchema, secretValueToEnvironmentReference };
|
|
491
|
+
export { ToolPortalControllerHostActionProjectionNamespaceSchema, ToolPortalControllerHostActionProjectionSchema, ToolPortalMcpProjectionNamespaceSchema, ToolPortalMcpProjectionSchema, assertJsonObject, createConfigContractSchemaArtifacts, createToolPortalControllerHostActionProjection, createToolPortalMcpProjection, formatSecretValue, formattedSecretValueSchema, isJsonObject, jsonObjectSchema, jsonValueSchema, loadJsonConfigFile, loadMcpConfig, loadMcpPortalConfig, loadToolPortalConfig, mcpConfigSchema, mcpConfigToResolvedProviders, mcpPortalAgentConfigSchema, mcpPortalCallPolicyDecision, mcpPortalCallRequiresApproval, mcpPortalConfigSchema, mcpPortalConfigSchemaIds, mcpPortalConfigSchemaPaths, mcpPortalConfigSchemaVersions, mcpPortalExternalAuthSchema, mcpPortalProfileDefinitionSchema, mcpPortalProxySchema, mcpProviderSchema, mcpSecretPolicySchema, namespaceToolRefSchema, openClawMcpPortalPluginConfigSchema, portalApprovalConfigSchema, portalToolSelectorSchema, resolveMcpPortalProfile, resolvedMcpPortalProfileSchema, secretFormatSchema, secretValueSchema, secretValueToEnvironmentReference, toolPortalAgentConfigSchema, toolPortalBackendBindingSchema, toolPortalCallPolicySchema, toolPortalCapabilityPolicySchema, toolPortalConfigSchema, toolPortalProfileDefinitionSchema, toolPortalToolSelectorSchema };
|
|
373
492
|
|
|
374
493
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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 secretFormatSchema = z.discriminatedUnion('kind', [\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('bearer'),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('prefix'),\n\t\t\tprefix: z\n\t\t\t\t.string()\n\t\t\t\t.min(1, 'secret format prefix must not be empty.')\n\t\t\t\t.max(64, 'secret format prefix must be 64 characters or fewer.')\n\t\t\t\t.refine(\n\t\t\t\t\t(value) => !/\\s/u.test(value),\n\t\t\t\t\t'secret format prefix must not contain whitespace; agent-vm inserts one space.',\n\t\t\t\t),\n\t\t})\n\t\t.strict(),\n]);\n\nconst environmentSecretValueSchema = z\n\t.object({\n\t\tsource: z.literal('environment'),\n\t\tname: z.string().min(1),\n\t})\n\t.strict();\n\nconst onePasswordSecretValueSchema = z\n\t.object({\n\t\tsource: z.literal('1password'),\n\t\tref: z.string().regex(/^op:\\/\\//u, '1Password refs must start with op://'),\n\t})\n\t.strict();\n\nexport const secretValueSchema = z.discriminatedUnion('source', [\n\tenvironmentSecretValueSchema,\n\tonePasswordSecretValueSchema,\n]);\n\nexport const formattedSecretValueSchema = z.discriminatedUnion('source', [\n\tenvironmentSecretValueSchema.extend({\n\t\tformat: secretFormatSchema.optional(),\n\t}),\n\tonePasswordSecretValueSchema.extend({\n\t\tformat: secretFormatSchema.optional(),\n\t}),\n]);\n\nexport type SecretFormat = z.infer<typeof secretFormatSchema>;\nexport type SecretValue = z.infer<typeof secretValueSchema>;\nexport type FormattedSecretValue = z.infer<typeof formattedSecretValueSchema>;\n\nexport function formatSecretValue(secret: FormattedSecretValue, rawValue: string): string {\n\tif (secret.format === undefined) {\n\t\treturn rawValue;\n\t}\n\tswitch (secret.format.kind) {\n\t\tcase 'bearer':\n\t\t\treturn `Bearer ${rawValue}`;\n\t\tcase 'prefix':\n\t\t\treturn `${secret.format.prefix} ${rawValue}`;\n\t\tdefault: {\n\t\t\tconst exhaustiveFormat: never = secret.format;\n\t\t\treturn exhaustiveFormat;\n\t\t}\n\t}\n}\n","import { z } from 'zod';\n\nimport { loadJsonConfigFile } from './json-config-file.js';\nimport { formattedSecretValueSchema, type FormattedSecretValue } 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 remoteTransportUrlSchema = z.url().refine(\n\t(value) => {\n\t\tconst protocol = new URL(value).protocol;\n\t\treturn protocol === 'http:' || protocol === 'https:';\n\t},\n\t{ message: 'Remote MCP transport URLs must use http or https.' },\n);\n\nconst streamableHttpTransportSchema = z\n\t.object({\n\t\tkind: z.literal('streamable-http'),\n\t\turl: remoteTransportUrlSchema,\n\t\theaders: z.record(z.string(), formattedSecretValueSchema).default({}),\n\t\trequiredEgressHosts: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nconst sseTransportSchema = z\n\t.object({\n\t\tkind: z.literal('sse'),\n\t\turl: remoteTransportUrlSchema,\n\t\theaders: z.record(z.string(), formattedSecretValueSchema).default({}),\n\t\trequiredEgressHosts: z.array(z.string().min(1)).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(), formattedSecretValueSchema).default({}),\n\t\tnetworkAccess: z.enum(['declared', 'none']).optional(),\n\t\trequiredEgressHosts: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nexport const mcpSecretPolicySchema = z\n\t.object({\n\t\thosts: z.array(z.string()).default([]),\n\t\tinjection: z.enum(['env', 'http-mediation']),\n\t})\n\t.strict()\n\t.superRefine((policy, context) => {\n\t\tif (policy.injection === 'http-mediation' && policy.hosts.length === 0) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'http-mediation secret policies must declare at least one host.',\n\t\t\t\tpath: ['hosts'],\n\t\t\t});\n\t\t}\n\t\tif (policy.injection === 'env' && policy.hosts.length > 0) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'env secret policies must not declare hosts.',\n\t\t\t\tpath: ['hosts'],\n\t\t\t});\n\t\t}\n\t});\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\tsecretPolicies: z.record(z.string().min(1), mcpSecretPolicySchema).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, FormattedSecretValue>>;\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, FormattedSecretValue>>;\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, FormattedSecretValue>>;\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 namespaceSelectorMatches(\n\tprofile: ResolvedMcpPortalProfile,\n\tselectorKind: 'requiresApproval' | 'withoutApproval',\n\tnamespace: string,\n\ttoolName: string,\n): boolean {\n\tconst selector = (profile.approval.callPoliciesByNamespace ?? {})[namespace]?.[selectorKind];\n\tif (selector === undefined) {\n\t\treturn false;\n\t}\n\tif ((selector.deny ?? []).includes(toolName)) {\n\t\treturn false;\n\t}\n\treturn selector.allow === '*' || selector.allow.includes(toolName);\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 type McpPortalCallPolicyDecision =\n\t| { readonly kind: 'allow_without_approval' }\n\t| { readonly kind: 'blocked' }\n\t| { readonly kind: 'requires_approval' };\n\nexport function mcpPortalCallPolicyDecision(\n\tprofile: ResolvedMcpPortalProfile,\n\tcall: McpPortalApprovalToolCall,\n): McpPortalCallPolicyDecision {\n\tif (\n\t\tselectorMatches(profile.approval.allowWithoutApprovalTools, call.namespace, call.toolName) ||\n\t\tnamespaceSelectorMatches(profile, 'withoutApproval', call.namespace, call.toolName) ||\n\t\thasTrustedReadOnlyAnnotation(profile, call)\n\t) {\n\t\treturn { kind: 'allow_without_approval' };\n\t}\n\tif (profile.approval.annotationPolicy === 'always-require-approval') {\n\t\treturn { kind: 'requires_approval' };\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\tnamespaceSelectorMatches(profile, 'requiresApproval', call.namespace, call.toolName)\n\t) {\n\t\treturn { kind: 'requires_approval' };\n\t}\n\treturn { kind: 'blocked' };\n}\n\nexport function mcpPortalCallRequiresApproval(\n\tprofile: ResolvedMcpPortalProfile,\n\tcall: McpPortalApprovalToolCall,\n): boolean {\n\treturn mcpPortalCallPolicyDecision(profile, call).kind === 'requires_approval';\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 portalToolSelectorSchema = z\n\t.object({\n\t\tallow: z.union([z.literal('*'), z.array(z.string().min(1))]),\n\t\tdeny: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nexport type PortalToolSelector = z.infer<typeof portalToolSelectorSchema>;\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\tcallPoliciesByNamespace: z\n\t\t\t.record(\n\t\t\t\tz.string().min(1),\n\t\t\t\tz\n\t\t\t\t\t.object({\n\t\t\t\t\t\trequiresApproval: portalToolSelectorSchema,\n\t\t\t\t\t\twithoutApproval: portalToolSelectorSchema,\n\t\t\t\t\t})\n\t\t\t\t\t.strict(),\n\t\t\t)\n\t\t\t.default({}),\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\nconst portalNamespaceCallPolicySchema = z\n\t.object({\n\t\trequiresApproval: portalToolSelectorSchema,\n\t\twithoutApproval: portalToolSelectorSchema,\n\t})\n\t.strict();\n\nconst portalNamespaceApprovalSchema = z\n\t.object({\n\t\tallowWithoutApproval: z.array(z.string().min(1)).default([]),\n\t\talwaysAsk: z.array(z.string().min(1)).default([]),\n\t\ttrustedAnnotations: z.boolean().default(false),\n\t\twrite: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nconst defaultPortalNamespaceApproval = {\n\tallowWithoutApproval: [],\n\talwaysAsk: [],\n\ttrustedAnnotations: false,\n\twrite: [],\n} satisfies z.infer<typeof portalNamespaceApprovalSchema>;\n\nconst portalNamespacePolicySchema = z\n\t.object({\n\t\tapproval: portalNamespaceApprovalSchema.default(defaultPortalNamespaceApproval).optional(),\n\t\tcalls: portalNamespaceCallPolicySchema,\n\t\ttools: portalToolSelectorSchema,\n\t})\n\t.strict();\n\ntype PortalNamespacePolicy = z.infer<typeof portalNamespacePolicySchema>;\n\nexport const mcpPortalProfileDefinitionSchema = z\n\t.object({\n\t\tapproval: z\n\t\t\t.object({\n\t\t\t\tannotationPolicy: portalApprovalConfigSchema.shape.annotationPolicy.optional(),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tnamespaces: z.record(z.string().min(1), portalNamespacePolicySchema).default({}),\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})\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\nexport const mcpPortalExternalAuthSchema = z\n\t.object({\n\t\tmasterKey: secretValueSchema,\n\t})\n\t.strict();\n\nexport type McpPortalExternalAuthConfig = z.infer<typeof mcpPortalExternalAuthSchema>;\n\nfunction isLoopbackProxyHost(host: string): boolean {\n\tconst normalizedHost = host.toLowerCase();\n\treturn (\n\t\tnormalizedHost === 'localhost' || normalizedHost === '127.0.0.1' || normalizedHost === '::1'\n\t);\n}\n\nexport const mcpPortalProxySchema = z\n\t.object({\n\t\tserver: z\n\t\t\t.object({\n\t\t\t\thost: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.min(1)\n\t\t\t\t\t.refine(isLoopbackProxyHost, {\n\t\t\t\t\t\tmessage: 'mcpProxy.server.host must be loopback-only for HTTP bearer auth.',\n\t\t\t\t\t})\n\t\t\t\t\t.default('127.0.0.1'),\n\t\t\t\tport: z.number().int().min(1).max(65_535).default(18_791),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.default({ host: '127.0.0.1', port: 18_791 }),\n\t\tauth: z\n\t\t\t.object({\n\t\t\t\theaderName: z.string().min(1).default('authorization'),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.default({ headerName: 'authorization' }),\n\t})\n\t.strict();\n\nexport type McpPortalProxyConfig = z.infer<typeof mcpPortalProxySchema>;\n\nexport const mcpPortalAgentConfigSchema = z\n\t.object({\n\t\tcredentialVersion: z.number().int().positive().default(1),\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\texternalAuth: mcpPortalExternalAuthSchema.optional(),\n\t\tmcpProxy: mcpPortalProxySchema.optional(),\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\ntype ParsedMcpPortalConfig = z.infer<typeof mcpPortalConfigSchema>;\nexport type McpPortalConfig = Omit<ParsedMcpPortalConfig, 'agents'> & {\n\treadonly agents: Readonly<Record<string, McpPortalAgentConfig>>;\n};\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\ntype AuthoredPortalNamespaces = McpPortalProfileDefinition['namespaces'];\n\nexport async function loadMcpPortalConfig(configPath: string): Promise<McpPortalConfig> {\n\treturn mcpPortalConfigSchema.parse(await loadJsonConfigFile(configPath));\n}\n\nfunction namespaceToolRefs(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n\tselector: (policy: PortalNamespacePolicy) => readonly string[],\n): readonly NamespaceToolRef[] {\n\treturn Object.entries(namespaces).flatMap(([namespace, policy]) =>\n\t\tselector(policy).map((toolName) => ({ namespace, toolName })),\n\t);\n}\n\nfunction selectorAllowList(selector: PortalToolSelector): readonly string[] {\n\treturn selector.allow === '*' ? [] : selector.allow;\n}\n\nfunction selectorHasVisibleTools(selector: PortalToolSelector): boolean {\n\treturn selector.allow === '*' || selector.allow.length > 0;\n}\n\nfunction activeNamespaces(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n): Readonly<Record<string, PortalNamespacePolicy>> {\n\treturn Object.fromEntries(\n\t\tObject.entries(namespaces).filter(([, policy]) => selectorHasVisibleTools(policy.tools)),\n\t);\n}\n\nfunction compileNamespaceApproval(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n\tannotationPolicy: PortalApprovalConfig['annotationPolicy'],\n): PortalApprovalConfig {\n\treturn portalApprovalConfigSchema.parse({\n\t\tallowWithoutApprovalTools: namespaceToolRefs(namespaces, (policy) => [\n\t\t\t...selectorAllowList(policy.calls.withoutApproval),\n\t\t\t...(policy.approval?.allowWithoutApproval ?? []),\n\t\t]),\n\t\tannotationPolicy,\n\t\talwaysAskTools: namespaceToolRefs(namespaces, (policy) => [\n\t\t\t...selectorAllowList(policy.calls.requiresApproval),\n\t\t\t...(policy.approval?.alwaysAsk ?? []),\n\t\t]),\n\t\tcallPoliciesByNamespace: Object.fromEntries(\n\t\t\tObject.entries(namespaces).map(([namespace, policy]) => [namespace, policy.calls]),\n\t\t),\n\t\ttrustedAnnotationNamespaces: Object.entries(namespaces)\n\t\t\t.filter(([, policy]) => policy.approval?.trustedAnnotations)\n\t\t\t.map(([namespace]) => namespace),\n\t\twriteTools: namespaceToolRefs(namespaces, (policy) => policy.approval?.write ?? []),\n\t});\n}\n\nfunction compileEnabledToolsByNamespace(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n): Record<string, readonly string[]> {\n\treturn Object.fromEntries(\n\t\tObject.entries(namespaces)\n\t\t\t.filter(([, policy]) => policy.tools.allow !== '*')\n\t\t\t.map(([namespace, policy]) => [namespace, selectorAllowList(policy.tools)]),\n\t);\n}\n\nfunction compileHiddenToolsByNamespace(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n): Record<string, readonly string[]> {\n\treturn Object.fromEntries(\n\t\tObject.entries(namespaces)\n\t\t\t.filter(([, policy]) => (policy.tools.deny ?? []).length > 0)\n\t\t\t.map(([namespace, policy]) => [namespace, policy.tools.deny ?? []]),\n\t);\n}\n\nfunction compileProfileFromNamespaces(\n\tnamespaces: AuthoredPortalNamespaces,\n\tprofile: McpPortalProfileDefinition,\n): ResolvedMcpPortalProfile {\n\tconst annotationPolicy =\n\t\tprofile.approval?.annotationPolicy ?? defaultProfile.approval.annotationPolicy;\n\tconst activeNamespacePolicies = activeNamespaces(namespaces);\n\treturn resolvedMcpPortalProfileSchema.parse({\n\t\tapproval: compileNamespaceApproval(activeNamespacePolicies, annotationPolicy),\n\t\tcache: profile.cache ?? defaultProfile.cache,\n\t\tenabledNamespaces: Object.keys(activeNamespacePolicies),\n\t\tenabledToolsByNamespace: compileEnabledToolsByNamespace(activeNamespacePolicies),\n\t\thiddenToolsByNamespace: compileHiddenToolsByNamespace(activeNamespacePolicies),\n\t\tlogging: profile.logging ?? defaultProfile.logging,\n\t\tpromptContext: profile.promptContext ?? defaultProfile.promptContext,\n\t});\n}\n\nexport function resolveMcpPortalProfile(\n\tconfig: McpPortalConfig,\n\tprofileName: string,\n): ResolvedMcpPortalProfile {\n\tconst profile = config.profiles[profileName];\n\tif (profile === undefined) {\n\t\tthrow new Error(`unknown MCP profile '${profileName}'`);\n\t}\n\treturn compileProfileFromNamespaces(profile.namespaces, profile);\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":";;;;;AAIA,MAAM,sBACL;AAED,SAAS,iBAAiB,MAAc,QAAwB;CAC/D,MAAM,SAAS,KAAK,MAAM,GAAG,OAAO;CAIpC,OAAO,QAHM,OAAO,MAAM,KAAK,CAAC,OAGZ,WADL,SADY,OAAO,YAAY,KACJ;;AAI3C,SAAS,iBAAiB,UAAkB,MAAc,OAA2B;CACpF,OAAO,CACN,oBAAoB,SAAS,IAAI,iBAAiB,MAAM,MAAM,OAAO,CAAC,IACtE,oBAAoB,MAAM,MAAM,CAChC,CAAC,KAAK,IAAI;;AAGZ,eAAsB,mBAAmB,UAAoC;CAC5E,MAAM,YAAY,MAAM,SAAS,UAAU,OAAO;CAClD,MAAM,cAA4B,EAAE;CACpC,MAAM,eAAe,oBAAoB,WAAW,aAAa;EAChE,oBAAoB;EACpB,kBAAkB;EAClB,CAAC;CAEF,IAAI,YAAY,SAAS,GAAG;EAC3B,MAAM,kBAAkB,YAAY;EACpC,IAAI,oBAAoB,KAAA,GACvB,MAAM,IAAI,MAAM,iBAAiB,UAAU,WAAW,gBAAgB,CAAC;;CAIzE,OAAO;;;;AC9BR,MAAa,kBAAwC,EAAE,WACtD,EAAE,MAAM;CACP,EAAE,QAAQ;CACV,EAAE,QAAQ,CAAC,QAAQ;CACnB,EAAE,SAAS;CACX,EAAE,MAAM;CACR,EAAE,MAAM,gBAAgB;CACxB;CACA,CAAC,CACF;AAED,MAAa,mBAA0C,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB;AAE5F,SAAgB,aAAa,OAAqC;CACjE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG5E,SAAgB,iBAAiB,OAAgB,OAA2B;CAC3E,IAAI,CAAC,aAAa,MAAM,EACvB,MAAM,IAAI,MAAM,GAAG,MAAM,yBAAyB;CAGnD,OAAO,iBAAiB,MAAM,MAAM;;;;AC3BrC,MAAa,qBAAqB,EAAE,mBAAmB,QAAQ,CAC9D,EACE,OAAO,EACP,MAAM,EAAE,QAAQ,SAAS,EACzB,CAAC,CACD,QAAQ,EACV,EACE,OAAO;CACP,MAAM,EAAE,QAAQ,SAAS;CACzB,QAAQ,EACN,QAAQ,CACR,IAAI,GAAG,0CAA0C,CACjD,IAAI,IAAI,uDAAuD,CAC/D,QACC,UAAU,CAAC,MAAM,KAAK,MAAM,EAC7B,gFACA;CACF,CAAC,CACD,QAAQ,CACV,CAAC;AAEF,MAAM,+BAA+B,EACnC,OAAO;CACP,QAAQ,EAAE,QAAQ,cAAc;CAChC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,CAAC,CACD,QAAQ;AAEV,MAAM,+BAA+B,EACnC,OAAO;CACP,QAAQ,EAAE,QAAQ,YAAY;CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,aAAa,uCAAuC;CAC1E,CAAC,CACD,QAAQ;AAEV,MAAa,oBAAoB,EAAE,mBAAmB,UAAU,CAC/D,8BACA,6BACA,CAAC;AAEF,MAAa,6BAA6B,EAAE,mBAAmB,UAAU,CACxE,6BAA6B,OAAO,EACnC,QAAQ,mBAAmB,UAAU,EACrC,CAAC,EACF,6BAA6B,OAAO,EACnC,QAAQ,mBAAmB,UAAU,EACrC,CAAC,CACF,CAAC;AAMF,SAAgB,kBAAkB,QAA8B,UAA0B;CACzF,IAAI,OAAO,WAAW,KAAA,GACrB,OAAO;CAER,QAAQ,OAAO,OAAO,MAAtB;EACC,KAAK,UACJ,OAAO,UAAU;EAClB,KAAK,UACJ,OAAO,GAAG,OAAO,OAAO,OAAO,GAAG;EACnC,SAEC,OADgC,OAAO;;;;;AC5D1C,MAAM,6BAA6B,EACjC,OAAO,EACP,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,EACrC,CAAC,CACD,QAAQ;AAEV,MAAM,2BAA2B,EAAE,KAAK,CAAC,QACvC,UAAU;CACV,MAAM,WAAW,IAAI,IAAI,MAAM,CAAC;CAChC,OAAO,aAAa,WAAW,aAAa;GAE7C,EAAE,SAAS,qDAAqD,CAChE;AAED,MAAM,gCAAgC,EACpC,OAAO;CACP,MAAM,EAAE,QAAQ,kBAAkB;CAClC,KAAK;CACL,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC;CACrE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC3D,CAAC,CACD,QAAQ;AAEV,MAAM,qBAAqB,EACzB,OAAO;CACP,MAAM,EAAE,QAAQ,MAAM;CACtB,KAAK;CACL,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC;CACrE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC3D,CAAC,CACD,QAAQ;AAEV,MAAM,uBAAuB,EAC3B,OAAO;CACP,MAAM,EAAE,QAAQ,QAAQ;CACxB,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC1B,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;CACrC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACjC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC;CACjE,eAAe,EAAE,KAAK,CAAC,YAAY,OAAO,CAAC,CAAC,UAAU;CACtD,qBAAqB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC3D,CAAC,CACD,QAAQ;AAEV,MAAa,wBAAwB,EACnC,OAAO;CACP,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;CACtC,WAAW,EAAE,KAAK,CAAC,OAAO,iBAAiB,CAAC;CAC5C,CAAC,CACD,QAAQ,CACR,aAAa,QAAQ,YAAY;CACjC,IAAI,OAAO,cAAc,oBAAoB,OAAO,MAAM,WAAW,GACpE,QAAQ,SAAS;EAChB,MAAM,EAAE,aAAa;EACrB,SAAS;EACT,MAAM,CAAC,QAAQ;EACf,CAAC;CAEH,IAAI,OAAO,cAAc,SAAS,OAAO,MAAM,SAAS,GACvD,QAAQ,SAAS;EAChB,MAAM,EAAE,aAAa;EACrB,SAAS;EACT,MAAM,CAAC,QAAQ;EACf,CAAC;EAEF;AAEH,MAAa,oBAAoB,EAC/B,OAAO;CACP,MAAM,EAAE,QAAQ,MAAM;CACtB,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC5B,WAAW,2BAA2B,QAAQ,EAAE,CAAC;CACjD,gBAAgB,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC;CAC9E,WAAW,EAAE,mBAAmB,QAAQ;EACvC;EACA;EACA;EACA,CAAC;CACF,CAAC,CACD,QAAQ;AAEV,MAAa,kBAAkB,EAC7B,OAAO;CACP,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACrC,eAAe,EAAE,QAAQ,EAAE;CAC3B,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC;CACrE,CAAC,CACD,QAAQ;AAqBV,eAAsB,cAAc,YAAwC;CAC3E,OAAO,gBAAgB,MAAM,MAAM,mBAAmB,WAAW,CAAC;;AAGnE,SAAgB,6BAA6B,QAAmD;CAC/F,OAAO,OAAO,OAAO,OAAO,UAAU,CAAC,KAAK,aAAa;EACxD,MAAM,YAAY,SAAS;EAC3B,IAAI,UAAU,SAAS,SAAS;GAC/B,MAAM,mBAOF;IACH,MAAM,UAAU;IAChB,SAAS,UAAU;IACnB,KAAK,UAAU;IACf,WAAW,SAAS;IACpB,WAAW,UAAU;IACrB;GACD,IAAI,UAAU,QAAQ,KAAA,GACrB,iBAAiB,MAAM,UAAU;GAElC,OAAO;;EAGR,OAAO;GACN,SAAS,UAAU;GACnB,WAAW,SAAS;GACpB,WAAW,UAAU;GACrB,KAAK,UAAU;GACf;GACA;;;;ACtIH,SAAS,gBACR,WACA,WACA,UACU;CACV,OAAO,UAAU,MACf,aAAa,SAAS,cAAc,aAAa,SAAS,aAAa,SACxE;;AAGF,SAAS,yBACR,SACA,cACA,WACA,UACU;CACV,MAAM,YAAY,QAAQ,SAAS,2BAA2B,EAAE,EAAE,aAAa;CAC/E,IAAI,aAAa,KAAA,GAChB,OAAO;CAER,KAAK,SAAS,QAAQ,EAAE,EAAE,SAAS,SAAS,EAC3C,OAAO;CAER,OAAO,SAAS,UAAU,OAAO,SAAS,MAAM,SAAS,SAAS;;AAGnE,SAAS,6BACR,SACA,MACU;CACV,OACC,QAAQ,SAAS,qBAAqB,mCACtC,QAAQ,SAAS,4BAA4B,SAAS,KAAK,UAAU,IACrE,KAAK,aAAa,iBAAiB,QACnC,KAAK,YAAY,oBAAoB;;AASvC,SAAgB,4BACf,SACA,MAC8B;CAC9B,IACC,gBAAgB,QAAQ,SAAS,2BAA2B,KAAK,WAAW,KAAK,SAAS,IAC1F,yBAAyB,SAAS,mBAAmB,KAAK,WAAW,KAAK,SAAS,IACnF,6BAA6B,SAAS,KAAK,EAE3C,OAAO,EAAE,MAAM,0BAA0B;CAE1C,IAAI,QAAQ,SAAS,qBAAqB,2BACzC,OAAO,EAAE,MAAM,qBAAqB;CAErC,IACC,gBAAgB,QAAQ,SAAS,gBAAgB,KAAK,WAAW,KAAK,SAAS,IAC/E,gBAAgB,QAAQ,SAAS,YAAY,KAAK,WAAW,KAAK,SAAS,IAC3E,yBAAyB,SAAS,oBAAoB,KAAK,WAAW,KAAK,SAAS,EAEpF,OAAO,EAAE,MAAM,qBAAqB;CAErC,OAAO,EAAE,MAAM,WAAW;;AAG3B,SAAgB,8BACf,SACA,MACU;CACV,OAAO,4BAA4B,SAAS,KAAK,CAAC,SAAS;;;;AC/E5D,MAAa,yBAAyB,EACpC,OAAO;CACP,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC5B,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC3B,CAAC,CACD,QAAQ;AAIV,MAAa,2BAA2B,EACtC,OAAO;CACP,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;CAC5D,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC5C,CAAC,CACD,QAAQ;AAIV,MAAa,6BAA6B,EACxC,OAAO;CACP,2BAA2B,EAAE,MAAM,uBAAuB,CAAC,QAAQ,EAAE,CAAC;CACtE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC,QAAQ,EAAE,CAAC;CAC3D,kBAAkB,EAChB,KAAK,CAAC,iCAAiC,0BAA0B,CAAC,CAClE,QAAQ,gCAAgC;CAC1C,yBAAyB,EACvB,OACA,EAAE,QAAQ,CAAC,IAAI,EAAE,EACjB,EACE,OAAO;EACP,kBAAkB;EAClB,iBAAiB;EACjB,CAAC,CACD,QAAQ,CACV,CACA,QAAQ,EAAE,CAAC;CACb,6BAA6B,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CACnE,YAAY,EAAE,MAAM,uBAAuB,CAAC,QAAQ,EAAE,CAAC;CACvD,CAAC,CACD,QAAQ;AAIV,MAAM,kCAAkC,EACtC,OAAO;CACP,kBAAkB;CAClB,iBAAiB;CACjB,CAAC,CACD,QAAQ;AAEV,MAAM,gCAAgC,EACpC,OAAO;CACP,sBAAsB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC5D,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CACjD,oBAAoB,EAAE,SAAS,CAAC,QAAQ,MAAM;CAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC7C,CAAC,CACD,QAAQ;AASV,MAAM,8BAA8B,EAClC,OAAO;CACP,UAAU,8BAA8B,QAAQ;EARjD,sBAAsB,EAAE;EACxB,WAAW,EAAE;EACb,oBAAoB;EACpB,OAAO,EAAE;EAKsE,CAAC,CAAC,UAAU;CAC1F,OAAO;CACP,OAAO;CACP,CAAC,CACD,QAAQ;AAIV,MAAa,mCAAmC,EAC9C,OAAO;CACP,UAAU,EACR,OAAO,EACP,kBAAkB,2BAA2B,MAAM,iBAAiB,UAAU,EAC9E,CAAC,CACD,QAAQ,CACR,UAAU;CACZ,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,4BAA4B,CAAC,QAAQ,EAAE,CAAC;CAChF,SAAS,EACP,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,QAAQ,MAAM,EAAE,CAAC,CAC/C,QAAQ,CACR,UAAU;CACZ,eAAe,EACb,OAAO;EACP,SAAS,EAAE,SAAS,CAAC,QAAQ,KAAK;EAClC,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,GAAG;EACtD,CAAC,CACD,QAAQ,CACR,UAAU;CACZ,OAAO,EACL,OAAO,EACP,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,IAAO,EACzD,CAAC,CACD,QAAQ,CACR,UAAU;CACZ,CAAC,CACD,QAAQ;AAIV,MAAa,iCAAiC,EAC5C,OAAO;CACP,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;CAC7C,yBAAyB,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAChF,wBAAwB,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAC/E,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ;CACpD,eAAe,EACb,OAAO;EACP,SAAS,EAAE,SAAS;EACpB,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU;EAC1C,CAAC,CACD,QAAQ;CACV,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ;CACvE,UAAU;CACV,CAAC,CACD,QAAQ;AAIV,MAAa,8BAA8B,EACzC,OAAO,EACP,WAAW,mBACX,CAAC,CACD,QAAQ;AAIV,SAAS,oBAAoB,MAAuB;CACnD,MAAM,iBAAiB,KAAK,aAAa;CACzC,OACC,mBAAmB,eAAe,mBAAmB,eAAe,mBAAmB;;AAIzF,MAAa,uBAAuB,EAClC,OAAO;CACP,QAAQ,EACN,OAAO;EACP,MAAM,EACJ,QAAQ,CACR,IAAI,EAAE,CACN,OAAO,qBAAqB,EAC5B,SAAS,oEACT,CAAC,CACD,QAAQ,YAAY;EACtB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,MAAO,CAAC,QAAQ,MAAO;EACzD,CAAC,CACD,QAAQ,CACR,QAAQ;EAAE,MAAM;EAAa,MAAM;EAAQ,CAAC;CAC9C,MAAM,EACJ,OAAO,EACP,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,gBAAgB,EACtD,CAAC,CACD,QAAQ,CACR,QAAQ,EAAE,YAAY,iBAAiB,CAAC;CAC1C,CAAC,CACD,QAAQ;AAIV,MAAa,6BAA6B,EACxC,OAAO;CACP,mBAAmB,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;CACzD,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC1B,SAAS,kBAAkB,UAAU;CACrC,CAAC,CACD,QAAQ;AAIV,MAAa,wBAAwB,EACnC,OAAO;CACP,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACrC,eAAe,EAAE,QAAQ,EAAE;CAC3B,cAAc,4BAA4B,UAAU;CACpD,UAAU,qBAAqB,UAAU;CACzC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC;CAC3E,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,iCAAiC;CACvE,CAAC,CACD,QAAQ,CACR,aAAa,QAAQ,YAAY;CACjC,IAAI,OAAO,KAAK,OAAO,SAAS,CAAC,WAAW,GAC3C,QAAQ,SAAS;EAChB,MAAM,EAAE,aAAa;EACrB,SAAS;EACT,MAAM,CAAC,WAAW;EAClB,CAAC;EAEF;AAOH,MAAa,sCAAsC,EACjD,OAAO;CACP,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC5B,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACrC,CAAC,CACD,QAAQ;AAIV,MAAM,iBAA2C;CAChD,UAAU,2BAA2B,MAAM,EAAE,CAAC;CAC9C,OAAO,EAAE,cAAc,KAAQ;CAC/B,mBAAmB,EAAE;CACrB,yBAAyB,EAAE;CAC3B,wBAAwB,EAAE;CAC1B,SAAS,EAAE,SAAS,OAAO;CAC3B,eAAe;EAAE,SAAS;EAAM,eAAe;EAAI;CACnD;AAID,eAAsB,oBAAoB,YAA8C;CACvF,OAAO,sBAAsB,MAAM,MAAM,mBAAmB,WAAW,CAAC;;AAGzE,SAAS,kBACR,YACA,UAC8B;CAC9B,OAAO,OAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,WAAW,YACtD,SAAS,OAAO,CAAC,KAAK,cAAc;EAAE;EAAW;EAAU,EAAE,CAC7D;;AAGF,SAAS,kBAAkB,UAAiD;CAC3E,OAAO,SAAS,UAAU,MAAM,EAAE,GAAG,SAAS;;AAG/C,SAAS,wBAAwB,UAAuC;CACvE,OAAO,SAAS,UAAU,OAAO,SAAS,MAAM,SAAS;;AAG1D,SAAS,iBACR,YACkD;CAClD,OAAO,OAAO,YACb,OAAO,QAAQ,WAAW,CAAC,QAAQ,GAAG,YAAY,wBAAwB,OAAO,MAAM,CAAC,CACxF;;AAGF,SAAS,yBACR,YACA,kBACuB;CACvB,OAAO,2BAA2B,MAAM;EACvC,2BAA2B,kBAAkB,aAAa,WAAW,CACpE,GAAG,kBAAkB,OAAO,MAAM,gBAAgB,EAClD,GAAI,OAAO,UAAU,wBAAwB,EAAE,CAC/C,CAAC;EACF;EACA,gBAAgB,kBAAkB,aAAa,WAAW,CACzD,GAAG,kBAAkB,OAAO,MAAM,iBAAiB,EACnD,GAAI,OAAO,UAAU,aAAa,EAAE,CACpC,CAAC;EACF,yBAAyB,OAAO,YAC/B,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,WAAW,OAAO,MAAM,CAAC,CAClF;EACD,6BAA6B,OAAO,QAAQ,WAAW,CACrD,QAAQ,GAAG,YAAY,OAAO,UAAU,mBAAmB,CAC3D,KAAK,CAAC,eAAe,UAAU;EACjC,YAAY,kBAAkB,aAAa,WAAW,OAAO,UAAU,SAAS,EAAE,CAAC;EACnF,CAAC;;AAGH,SAAS,+BACR,YACoC;CACpC,OAAO,OAAO,YACb,OAAO,QAAQ,WAAW,CACxB,QAAQ,GAAG,YAAY,OAAO,MAAM,UAAU,IAAI,CAClD,KAAK,CAAC,WAAW,YAAY,CAAC,WAAW,kBAAkB,OAAO,MAAM,CAAC,CAAC,CAC5E;;AAGF,SAAS,8BACR,YACoC;CACpC,OAAO,OAAO,YACb,OAAO,QAAQ,WAAW,CACxB,QAAQ,GAAG,aAAa,OAAO,MAAM,QAAQ,EAAE,EAAE,SAAS,EAAE,CAC5D,KAAK,CAAC,WAAW,YAAY,CAAC,WAAW,OAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,CACpE;;AAGF,SAAS,6BACR,YACA,SAC2B;CAC3B,MAAM,mBACL,QAAQ,UAAU,oBAAoB,eAAe,SAAS;CAC/D,MAAM,0BAA0B,iBAAiB,WAAW;CAC5D,OAAO,+BAA+B,MAAM;EAC3C,UAAU,yBAAyB,yBAAyB,iBAAiB;EAC7E,OAAO,QAAQ,SAAS,eAAe;EACvC,mBAAmB,OAAO,KAAK,wBAAwB;EACvD,yBAAyB,+BAA+B,wBAAwB;EAChF,wBAAwB,8BAA8B,wBAAwB;EAC9E,SAAS,QAAQ,WAAW,eAAe;EAC3C,eAAe,QAAQ,iBAAiB,eAAe;EACvD,CAAC;;AAGH,SAAgB,wBACf,QACA,aAC2B;CAC3B,MAAM,UAAU,OAAO,SAAS;CAChC,IAAI,YAAY,KAAA,GACf,MAAM,IAAI,MAAM,wBAAwB,YAAY,GAAG;CAExD,OAAO,6BAA6B,QAAQ,YAAY,QAAQ;;AAGjE,SAAgB,kCAAkC,QAA6B;CAC9E,IAAI,OAAO,WAAW,eACrB,OAAO,MAAM,OAAO,KAAK;CAE1B,OAAO,OAAO;;;;ACzUf,MAAa,gCAAgC;CAC5C,KAAK;CACL,WAAW;CACX;AAED,MAAa,2BAA2B;CACvC,KAAK;CACL,WAAW;CACX;AAED,MAAa,6BAA6B;CACzC,sBAAsB;CACtB,4BAA4B;CAC5B;AAOD,SAAS,aAAa,QAAiC,UAA2C;CACjG,OAAO;EACN,KAAK;EACL,GAAG;EACH;;AAGF,SAAgB,sCAAqE;CACpF,OAAO;EACN,KAAK,aACJ,IAAI,aAAa,iBAAiB,EAAE,QAAQ,YAAY,CAAC,EACzD,yBAAyB,IACzB;EACD,WAAW,aACV,IAAI,aAAa,uBAAuB,EAAE,QAAQ,YAAY,CAAC,EAC/D,yBAAyB,UACzB;EACD"}
|
|
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/tool-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 secretFormatSchema = z.discriminatedUnion('kind', [\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('bearer'),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('prefix'),\n\t\t\tprefix: z\n\t\t\t\t.string()\n\t\t\t\t.min(1, 'secret format prefix must not be empty.')\n\t\t\t\t.max(64, 'secret format prefix must be 64 characters or fewer.')\n\t\t\t\t.refine(\n\t\t\t\t\t(value) => !/\\s/u.test(value),\n\t\t\t\t\t'secret format prefix must not contain whitespace; agent-vm inserts one space.',\n\t\t\t\t),\n\t\t})\n\t\t.strict(),\n]);\n\nconst environmentSecretValueSchema = z\n\t.object({\n\t\tsource: z.literal('environment'),\n\t\tname: z.string().min(1),\n\t})\n\t.strict();\n\nconst onePasswordSecretValueSchema = z\n\t.object({\n\t\tsource: z.literal('1password'),\n\t\tref: z.string().regex(/^op:\\/\\//u, '1Password refs must start with op://'),\n\t})\n\t.strict();\n\nexport const secretValueSchema = z.discriminatedUnion('source', [\n\tenvironmentSecretValueSchema,\n\tonePasswordSecretValueSchema,\n]);\n\nexport const formattedSecretValueSchema = z.discriminatedUnion('source', [\n\tenvironmentSecretValueSchema.extend({\n\t\tformat: secretFormatSchema.optional(),\n\t}),\n\tonePasswordSecretValueSchema.extend({\n\t\tformat: secretFormatSchema.optional(),\n\t}),\n]);\n\nexport type SecretFormat = z.infer<typeof secretFormatSchema>;\nexport type SecretValue = z.infer<typeof secretValueSchema>;\nexport type FormattedSecretValue = z.infer<typeof formattedSecretValueSchema>;\n\nexport function formatSecretValue(secret: FormattedSecretValue, rawValue: string): string {\n\tif (secret.format === undefined) {\n\t\treturn rawValue;\n\t}\n\tswitch (secret.format.kind) {\n\t\tcase 'bearer':\n\t\t\treturn `Bearer ${rawValue}`;\n\t\tcase 'prefix':\n\t\t\treturn `${secret.format.prefix} ${rawValue}`;\n\t\tdefault: {\n\t\t\tconst exhaustiveFormat: never = secret.format;\n\t\t\treturn exhaustiveFormat;\n\t\t}\n\t}\n}\n","import { z } from 'zod';\n\nimport { loadJsonConfigFile } from './json-config-file.js';\nimport { formattedSecretValueSchema, type FormattedSecretValue } 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 remoteTransportUrlSchema = z.url().refine(\n\t(value) => {\n\t\tconst protocol = new URL(value).protocol;\n\t\treturn protocol === 'http:' || protocol === 'https:';\n\t},\n\t{ message: 'Remote MCP transport URLs must use http or https.' },\n);\n\nconst connectionTimeoutMsSchema = z.number().int().min(1).max(300_000);\n\nconst streamableHttpTransportSchema = z\n\t.object({\n\t\tkind: z.literal('streamable-http'),\n\t\turl: remoteTransportUrlSchema,\n\t\tconnectionTimeoutMs: connectionTimeoutMsSchema.optional(),\n\t\theaders: z.record(z.string(), formattedSecretValueSchema).default({}),\n\t\trequiredEgressHosts: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nconst sseTransportSchema = z\n\t.object({\n\t\tkind: z.literal('sse'),\n\t\turl: remoteTransportUrlSchema,\n\t\tconnectionTimeoutMs: connectionTimeoutMsSchema.optional(),\n\t\theaders: z.record(z.string(), formattedSecretValueSchema).default({}),\n\t\trequiredEgressHosts: z.array(z.string().min(1)).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\tconnectionTimeoutMs: connectionTimeoutMsSchema.optional(),\n\t\tcwd: z.string().min(1).optional(),\n\t\tenv: z.record(z.string(), formattedSecretValueSchema).default({}),\n\t\tnetworkAccess: z.enum(['declared', 'none']).optional(),\n\t\trequiredEgressHosts: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nexport const mcpSecretPolicySchema = z\n\t.object({\n\t\thosts: z.array(z.string()).default([]),\n\t\tinjection: z.enum(['env', 'http-mediation']),\n\t})\n\t.strict()\n\t.superRefine((policy, context) => {\n\t\tif (policy.injection === 'http-mediation' && policy.hosts.length === 0) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'http-mediation secret policies must declare at least one host.',\n\t\t\t\tpath: ['hosts'],\n\t\t\t});\n\t\t}\n\t\tif (policy.injection === 'env' && policy.hosts.length > 0) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'env secret policies must not declare hosts.',\n\t\t\t\tpath: ['hosts'],\n\t\t\t});\n\t\t}\n\t});\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\tsecretPolicies: z.record(z.string().min(1), mcpSecretPolicySchema).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 connectionTimeoutMs?: number;\n\t\t\treadonly headers: Readonly<Record<string, FormattedSecretValue>>;\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 connectionTimeoutMs?: number;\n\t\t\treadonly cwd?: string;\n\t\t\treadonly env: Readonly<Record<string, FormattedSecretValue>>;\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\tconnectionTimeoutMs?: number;\n\t\t\t\tcwd?: string;\n\t\t\t\tenv: Readonly<Record<string, FormattedSecretValue>>;\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.connectionTimeoutMs !== undefined) {\n\t\t\t\tresolvedProvider.connectionTimeoutMs = transport.connectionTimeoutMs;\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\tconst resolvedProvider: {\n\t\t\tconnectionTimeoutMs?: number;\n\t\t\theaders: Readonly<Record<string, FormattedSecretValue>>;\n\t\t\tnamespace: string;\n\t\t\ttransport: 'streamable-http' | 'sse';\n\t\t\turl: string;\n\t\t} = {\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\tif (transport.connectionTimeoutMs !== undefined) {\n\t\t\tresolvedProvider.connectionTimeoutMs = transport.connectionTimeoutMs;\n\t\t}\n\t\treturn resolvedProvider;\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 namespaceSelectorMatches(\n\tprofile: ResolvedMcpPortalProfile,\n\tselectorKind: 'requiresApproval' | 'withoutApproval',\n\tnamespace: string,\n\ttoolName: string,\n): boolean {\n\tconst selector = (profile.approval.callPoliciesByNamespace ?? {})[namespace]?.[selectorKind];\n\tif (selector === undefined) {\n\t\treturn false;\n\t}\n\tif ((selector.deny ?? []).includes(toolName)) {\n\t\treturn false;\n\t}\n\treturn selector.allow === '*' || selector.allow.includes(toolName);\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 type McpPortalCallPolicyDecision =\n\t| { readonly kind: 'allow_without_approval' }\n\t| { readonly kind: 'blocked' }\n\t| { readonly kind: 'requires_approval' };\n\nexport function mcpPortalCallPolicyDecision(\n\tprofile: ResolvedMcpPortalProfile,\n\tcall: McpPortalApprovalToolCall,\n): McpPortalCallPolicyDecision {\n\tif (\n\t\tselectorMatches(profile.approval.allowWithoutApprovalTools, call.namespace, call.toolName) ||\n\t\tnamespaceSelectorMatches(profile, 'withoutApproval', call.namespace, call.toolName) ||\n\t\thasTrustedReadOnlyAnnotation(profile, call)\n\t) {\n\t\treturn { kind: 'allow_without_approval' };\n\t}\n\tif (profile.approval.annotationPolicy === 'always-require-approval') {\n\t\treturn { kind: 'requires_approval' };\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\tnamespaceSelectorMatches(profile, 'requiresApproval', call.namespace, call.toolName)\n\t) {\n\t\treturn { kind: 'requires_approval' };\n\t}\n\treturn { kind: 'blocked' };\n}\n\nexport function mcpPortalCallRequiresApproval(\n\tprofile: ResolvedMcpPortalProfile,\n\tcall: McpPortalApprovalToolCall,\n): boolean {\n\treturn mcpPortalCallPolicyDecision(profile, call).kind === 'requires_approval';\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 portalToolSelectorSchema = z\n\t.object({\n\t\tallow: z.union([z.literal('*'), z.array(z.string().min(1))]),\n\t\tdeny: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nexport type PortalToolSelector = z.infer<typeof portalToolSelectorSchema>;\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\tcallPoliciesByNamespace: z\n\t\t\t.record(\n\t\t\t\tz.string().min(1),\n\t\t\t\tz\n\t\t\t\t\t.object({\n\t\t\t\t\t\trequiresApproval: portalToolSelectorSchema,\n\t\t\t\t\t\twithoutApproval: portalToolSelectorSchema,\n\t\t\t\t\t})\n\t\t\t\t\t.strict(),\n\t\t\t)\n\t\t\t.default({}),\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\nconst portalNamespaceCallPolicySchema = z\n\t.object({\n\t\trequiresApproval: portalToolSelectorSchema,\n\t\twithoutApproval: portalToolSelectorSchema,\n\t})\n\t.strict();\n\nconst portalNamespaceApprovalSchema = z\n\t.object({\n\t\tallowWithoutApproval: z.array(z.string().min(1)).default([]),\n\t\talwaysAsk: z.array(z.string().min(1)).default([]),\n\t\ttrustedAnnotations: z.boolean().default(false),\n\t\twrite: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nconst defaultPortalNamespaceApproval = {\n\tallowWithoutApproval: [],\n\talwaysAsk: [],\n\ttrustedAnnotations: false,\n\twrite: [],\n} satisfies z.infer<typeof portalNamespaceApprovalSchema>;\n\nconst portalNamespacePolicySchema = z\n\t.object({\n\t\tapproval: portalNamespaceApprovalSchema.default(defaultPortalNamespaceApproval).optional(),\n\t\tcalls: portalNamespaceCallPolicySchema,\n\t\ttools: portalToolSelectorSchema,\n\t})\n\t.strict();\n\ntype PortalNamespacePolicy = z.infer<typeof portalNamespacePolicySchema>;\n\nexport const mcpPortalProfileDefinitionSchema = z\n\t.object({\n\t\tapproval: z\n\t\t\t.object({\n\t\t\t\tannotationPolicy: portalApprovalConfigSchema.shape.annotationPolicy.optional(),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tnamespaces: z.record(z.string().min(1), portalNamespacePolicySchema).default({}),\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})\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\nexport const mcpPortalExternalAuthSchema = z\n\t.object({\n\t\tmasterKey: secretValueSchema,\n\t})\n\t.strict();\n\nexport type McpPortalExternalAuthConfig = z.infer<typeof mcpPortalExternalAuthSchema>;\n\nfunction isLoopbackProxyHost(host: string): boolean {\n\tconst normalizedHost = host.toLowerCase();\n\treturn (\n\t\tnormalizedHost === 'localhost' || normalizedHost === '127.0.0.1' || normalizedHost === '::1'\n\t);\n}\n\nexport const mcpPortalProxySchema = z\n\t.object({\n\t\tserver: z\n\t\t\t.object({\n\t\t\t\thost: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.min(1)\n\t\t\t\t\t.refine(isLoopbackProxyHost, {\n\t\t\t\t\t\tmessage: 'mcpProxy.server.host must be loopback-only for HTTP bearer auth.',\n\t\t\t\t\t})\n\t\t\t\t\t.default('127.0.0.1'),\n\t\t\t\tport: z.number().int().min(1).max(65_535).default(18_791),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.default({ host: '127.0.0.1', port: 18_791 }),\n\t\tauth: z\n\t\t\t.object({\n\t\t\t\theaderName: z.string().min(1).default('authorization'),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.default({ headerName: 'authorization' }),\n\t})\n\t.strict();\n\nexport type McpPortalProxyConfig = z.infer<typeof mcpPortalProxySchema>;\n\nexport const mcpPortalAgentConfigSchema = z\n\t.object({\n\t\tcredentialVersion: z.number().int().positive().default(1),\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\texternalAuth: mcpPortalExternalAuthSchema.optional(),\n\t\tmcpProxy: mcpPortalProxySchema.optional(),\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\ntype ParsedMcpPortalConfig = z.infer<typeof mcpPortalConfigSchema>;\nexport type McpPortalConfig = Omit<ParsedMcpPortalConfig, 'agents'> & {\n\treadonly agents: Readonly<Record<string, McpPortalAgentConfig>>;\n};\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\ntype AuthoredPortalNamespaces = McpPortalProfileDefinition['namespaces'];\n\nexport async function loadMcpPortalConfig(configPath: string): Promise<McpPortalConfig> {\n\treturn mcpPortalConfigSchema.parse(await loadJsonConfigFile(configPath));\n}\n\nfunction namespaceToolRefs(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n\tselector: (policy: PortalNamespacePolicy) => readonly string[],\n): readonly NamespaceToolRef[] {\n\treturn Object.entries(namespaces).flatMap(([namespace, policy]) =>\n\t\tselector(policy).map((toolName) => ({ namespace, toolName })),\n\t);\n}\n\nfunction selectorAllowList(selector: PortalToolSelector): readonly string[] {\n\treturn selector.allow === '*' ? [] : selector.allow;\n}\n\nfunction selectorHasVisibleTools(selector: PortalToolSelector): boolean {\n\treturn selector.allow === '*' || selector.allow.length > 0;\n}\n\nfunction activeNamespaces(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n): Readonly<Record<string, PortalNamespacePolicy>> {\n\treturn Object.fromEntries(\n\t\tObject.entries(namespaces).filter(([, policy]) => selectorHasVisibleTools(policy.tools)),\n\t);\n}\n\nfunction compileNamespaceApproval(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n\tannotationPolicy: PortalApprovalConfig['annotationPolicy'],\n): PortalApprovalConfig {\n\treturn portalApprovalConfigSchema.parse({\n\t\tallowWithoutApprovalTools: namespaceToolRefs(namespaces, (policy) => [\n\t\t\t...selectorAllowList(policy.calls.withoutApproval),\n\t\t\t...(policy.approval?.allowWithoutApproval ?? []),\n\t\t]),\n\t\tannotationPolicy,\n\t\talwaysAskTools: namespaceToolRefs(namespaces, (policy) => [\n\t\t\t...selectorAllowList(policy.calls.requiresApproval),\n\t\t\t...(policy.approval?.alwaysAsk ?? []),\n\t\t]),\n\t\tcallPoliciesByNamespace: Object.fromEntries(\n\t\t\tObject.entries(namespaces).map(([namespace, policy]) => [namespace, policy.calls]),\n\t\t),\n\t\ttrustedAnnotationNamespaces: Object.entries(namespaces)\n\t\t\t.filter(([, policy]) => policy.approval?.trustedAnnotations)\n\t\t\t.map(([namespace]) => namespace),\n\t\twriteTools: namespaceToolRefs(namespaces, (policy) => policy.approval?.write ?? []),\n\t});\n}\n\nfunction compileEnabledToolsByNamespace(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n): Record<string, readonly string[]> {\n\treturn Object.fromEntries(\n\t\tObject.entries(namespaces)\n\t\t\t.filter(([, policy]) => policy.tools.allow !== '*')\n\t\t\t.map(([namespace, policy]) => [namespace, selectorAllowList(policy.tools)]),\n\t);\n}\n\nfunction compileHiddenToolsByNamespace(\n\tnamespaces: Readonly<Record<string, PortalNamespacePolicy>>,\n): Record<string, readonly string[]> {\n\treturn Object.fromEntries(\n\t\tObject.entries(namespaces)\n\t\t\t.filter(([, policy]) => (policy.tools.deny ?? []).length > 0)\n\t\t\t.map(([namespace, policy]) => [namespace, policy.tools.deny ?? []]),\n\t);\n}\n\nfunction compileProfileFromNamespaces(\n\tnamespaces: AuthoredPortalNamespaces,\n\tprofile: McpPortalProfileDefinition,\n): ResolvedMcpPortalProfile {\n\tconst annotationPolicy =\n\t\tprofile.approval?.annotationPolicy ?? defaultProfile.approval.annotationPolicy;\n\tconst activeNamespacePolicies = activeNamespaces(namespaces);\n\treturn resolvedMcpPortalProfileSchema.parse({\n\t\tapproval: compileNamespaceApproval(activeNamespacePolicies, annotationPolicy),\n\t\tcache: profile.cache ?? defaultProfile.cache,\n\t\tenabledNamespaces: Object.keys(activeNamespacePolicies),\n\t\tenabledToolsByNamespace: compileEnabledToolsByNamespace(activeNamespacePolicies),\n\t\thiddenToolsByNamespace: compileHiddenToolsByNamespace(activeNamespacePolicies),\n\t\tlogging: profile.logging ?? defaultProfile.logging,\n\t\tpromptContext: profile.promptContext ?? defaultProfile.promptContext,\n\t});\n}\n\nexport function resolveMcpPortalProfile(\n\tconfig: McpPortalConfig,\n\tprofileName: string,\n): ResolvedMcpPortalProfile {\n\tconst profile = config.profiles[profileName];\n\tif (profile === undefined) {\n\t\tthrow new Error(`unknown MCP profile '${profileName}'`);\n\t}\n\treturn compileProfileFromNamespaces(profile.namespaces, profile);\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 { z } from 'zod';\n\nimport { loadJsonConfigFile } from './json-config-file.js';\n\nexport const toolPortalToolSelectorSchema = z\n\t.object({\n\t\tallow: z.union([z.literal('*'), z.array(z.string().min(1))]),\n\t\tdeny: z.array(z.string().min(1)).default([]),\n\t})\n\t.strict();\n\nexport type ToolPortalToolSelector = z.infer<typeof toolPortalToolSelectorSchema>;\n\nexport const toolPortalCallPolicySchema = z\n\t.object({\n\t\trequiresApproval: toolPortalToolSelectorSchema,\n\t\twithoutApproval: toolPortalToolSelectorSchema,\n\t})\n\t.strict()\n\t.superRefine((policy, context) => {\n\t\tif (toolSelectorsOverlap(policy.requiresApproval, policy.withoutApproval)) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Tool Portal call policy cannot list one tool in both approval selectors.',\n\t\t\t\tpath: ['withoutApproval'],\n\t\t\t});\n\t\t}\n\t});\n\nexport type ToolPortalCallPolicy = z.infer<typeof toolPortalCallPolicySchema>;\n\nexport const toolPortalBackendBindingSchema = z.discriminatedUnion('kind', [\n\tz.object({ kind: z.literal('mcp_provider') }).strict(),\n\tz.object({ kind: z.literal('controller_host_action') }).strict(),\n\tz.object({ kind: z.literal('tool_vm_runner') }).strict(),\n]);\n\nexport type ToolPortalBackendBinding = z.infer<typeof toolPortalBackendBindingSchema>;\n\nexport const toolPortalCapabilityPolicySchema = z\n\t.object({\n\t\tbackend: toolPortalBackendBindingSchema,\n\t\tcalls: toolPortalCallPolicySchema,\n\t\ttools: toolPortalToolSelectorSchema,\n\t})\n\t.strict();\n\nexport type ToolPortalCapabilityPolicy = z.infer<typeof toolPortalCapabilityPolicySchema>;\n\nexport const toolPortalProfileDefinitionSchema = z\n\t.object({\n\t\tcapabilities: z.record(z.string().min(1), toolPortalCapabilityPolicySchema).default({}),\n\t})\n\t.strict();\n\nexport type ToolPortalProfileDefinition = z.infer<typeof toolPortalProfileDefinitionSchema>;\n\nexport const toolPortalAgentConfigSchema = z\n\t.object({\n\t\tprofile: z.string().min(1),\n\t})\n\t.strict();\n\nexport type ToolPortalAgentConfig = z.infer<typeof toolPortalAgentConfigSchema>;\n\nexport const toolPortalConfigSchema = z\n\t.object({\n\t\t$schema: z.string().min(1).optional(),\n\t\tschemaVersion: z.literal(1),\n\t\tagents: z.record(z.string().min(1), toolPortalAgentConfigSchema).default({}),\n\t\tprofiles: z.record(z.string().min(1), toolPortalProfileDefinitionSchema),\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: 'tool-portal.config.jsonc must define at least one profile.',\n\t\t\t\tpath: ['profiles'],\n\t\t\t});\n\t\t}\n\n\t\tfor (const [agentId, agentConfig] of Object.entries(config.agents)) {\n\t\t\tif (config.profiles[agentConfig.profile] === undefined) {\n\t\t\t\tcontext.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: `Tool Portal agent \"${agentId}\" references missing profile \"${agentConfig.profile}\".`,\n\t\t\t\t\tpath: ['agents', agentId, 'profile'],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\nexport type ToolPortalConfig = z.infer<typeof toolPortalConfigSchema>;\n\nexport async function loadToolPortalConfig(configPath: string): Promise<ToolPortalConfig> {\n\treturn toolPortalConfigSchema.parse(await loadJsonConfigFile(configPath));\n}\n\nexport const ToolPortalMcpProjectionNamespaceSchema = z\n\t.object({\n\t\tcalls: toolPortalCallPolicySchema,\n\t\ttools: toolPortalToolSelectorSchema,\n\t})\n\t.strict();\n\nexport type ToolPortalMcpProjectionNamespace = z.infer<\n\ttypeof ToolPortalMcpProjectionNamespaceSchema\n>;\n\nexport const ToolPortalMcpProjectionSchema = z\n\t.object({\n\t\tagentId: z.string().min(1),\n\t\tnamespaces: z.record(z.string().min(1), ToolPortalMcpProjectionNamespaceSchema),\n\t\tprofile: z.string().min(1),\n\t})\n\t.strict();\n\nexport type ToolPortalMcpProjection = z.infer<typeof ToolPortalMcpProjectionSchema>;\n\nexport const ToolPortalControllerHostActionProjectionNamespaceSchema =\n\tToolPortalMcpProjectionNamespaceSchema;\n\nexport type ToolPortalControllerHostActionProjectionNamespace = z.infer<\n\ttypeof ToolPortalControllerHostActionProjectionNamespaceSchema\n>;\n\nexport const ToolPortalControllerHostActionProjectionSchema = z\n\t.object({\n\t\tagentId: z.string().min(1),\n\t\tnamespaces: z.record(\n\t\t\tz.string().min(1),\n\t\t\tToolPortalControllerHostActionProjectionNamespaceSchema,\n\t\t),\n\t\tprofile: z.string().min(1),\n\t})\n\t.strict();\n\nexport type ToolPortalControllerHostActionProjection = z.infer<\n\ttypeof ToolPortalControllerHostActionProjectionSchema\n>;\n\nexport interface CreateToolPortalMcpProjectionProps {\n\treadonly agentId: string;\n\treadonly config: ToolPortalConfig;\n}\n\nexport function createToolPortalMcpProjection(\n\tprops: CreateToolPortalMcpProjectionProps,\n): ToolPortalMcpProjection {\n\tconst agentConfig = props.config.agents[props.agentId];\n\tif (agentConfig === undefined) {\n\t\tthrow new Error(`Tool Portal agent \"${props.agentId}\" is not configured.`);\n\t}\n\n\tconst profileConfig = props.config.profiles[agentConfig.profile];\n\tif (profileConfig === undefined) {\n\t\tthrow new Error(\n\t\t\t`Tool Portal agent \"${props.agentId}\" references missing profile \"${agentConfig.profile}\".`,\n\t\t);\n\t}\n\n\tconst namespaces = Object.fromEntries(\n\t\tObject.entries(profileConfig.capabilities)\n\t\t\t.filter(([, capabilityPolicy]) => capabilityPolicy.backend.kind === 'mcp_provider')\n\t\t\t.map(([namespace, capabilityPolicy]) => [\n\t\t\t\tnamespace,\n\t\t\t\t{\n\t\t\t\t\tcalls: capabilityPolicy.calls,\n\t\t\t\t\ttools: capabilityPolicy.tools,\n\t\t\t\t},\n\t\t\t]),\n\t);\n\n\treturn ToolPortalMcpProjectionSchema.parse({\n\t\tagentId: props.agentId,\n\t\tnamespaces,\n\t\tprofile: agentConfig.profile,\n\t});\n}\n\nexport interface CreateToolPortalControllerHostActionProjectionProps {\n\treadonly agentId: string;\n\treadonly config: ToolPortalConfig;\n}\n\nexport function createToolPortalControllerHostActionProjection(\n\tprops: CreateToolPortalControllerHostActionProjectionProps,\n): ToolPortalControllerHostActionProjection {\n\tconst agentConfig = props.config.agents[props.agentId];\n\tif (agentConfig === undefined) {\n\t\tthrow new Error(`Tool Portal agent \"${props.agentId}\" is not configured.`);\n\t}\n\n\tconst profileConfig = props.config.profiles[agentConfig.profile];\n\tif (profileConfig === undefined) {\n\t\tthrow new Error(\n\t\t\t`Tool Portal agent \"${props.agentId}\" references missing profile \"${agentConfig.profile}\".`,\n\t\t);\n\t}\n\n\tconst namespaces = Object.fromEntries(\n\t\tObject.entries(profileConfig.capabilities)\n\t\t\t.filter(([, capabilityPolicy]) => capabilityPolicy.backend.kind === 'controller_host_action')\n\t\t\t.map(([namespace, capabilityPolicy]) => [\n\t\t\t\tnamespace,\n\t\t\t\t{\n\t\t\t\t\tcalls: capabilityPolicy.calls,\n\t\t\t\t\ttools: capabilityPolicy.tools,\n\t\t\t\t},\n\t\t\t]),\n\t);\n\n\treturn ToolPortalControllerHostActionProjectionSchema.parse({\n\t\tagentId: props.agentId,\n\t\tnamespaces,\n\t\tprofile: agentConfig.profile,\n\t});\n}\n\nfunction toolSelectorsOverlap(\n\tleft: ToolPortalToolSelector,\n\tright: ToolPortalToolSelector,\n): boolean {\n\tconst leftAllow = left.allow;\n\tconst rightAllow = right.allow;\n\tif (leftAllow === '*' && rightAllow === '*') {\n\t\treturn true;\n\t}\n\tif (leftAllow === '*') {\n\t\tif (rightAllow === '*') {\n\t\t\treturn true;\n\t\t}\n\t\treturn rightAllow.some((toolName) => !left.deny.includes(toolName));\n\t}\n\tif (rightAllow === '*') {\n\t\treturn leftAllow.some((toolName) => !right.deny.includes(toolName));\n\t}\n\treturn leftAllow.some(\n\t\t(toolName) =>\n\t\t\trightAllow.includes(toolName) &&\n\t\t\t!left.deny.includes(toolName) &&\n\t\t\t!right.deny.includes(toolName),\n\t);\n}\n","import * as zod from 'zod';\n\nimport { mcpConfigSchema } from './mcp-config.js';\nimport { mcpPortalConfigSchema } from './mcp-portal-config.js';\nimport { toolPortalConfigSchema } from './tool-portal-config.js';\n\nexport const mcpPortalConfigSchemaVersions = {\n\tmcp: 1,\n\tmcpPortal: 1,\n\ttoolPortal: 1,\n} as const;\n\nexport const mcpPortalConfigSchemaIds = {\n\tmcp: 'agent-vm:mcp:1',\n\tmcpPortal: 'agent-vm:mcp-portal:1',\n\ttoolPortal: 'agent-vm:tool-portal:1',\n} as const;\n\nexport const mcpPortalConfigSchemaPaths = {\n\tmcpFromGatewayConfig: '../../schemas/mcp.schema.json',\n\tmcpPortalFromGatewayConfig: '../../schemas/mcp-portal.schema.json',\n\ttoolPortalFromGatewayConfig: '../../schemas/tool-portal.schema.json',\n} as const;\n\nexport interface ConfigContractSchemaArtifacts {\n\treadonly mcp: Record<string, unknown>;\n\treadonly mcpPortal: Record<string, unknown>;\n\treadonly toolPortal: 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\ttoolPortal: withSchemaId(\n\t\t\tzod.toJSONSchema(toolPortalConfigSchema, { target: 'draft-07' }),\n\t\t\tmcpPortalConfigSchemaIds.toolPortal,\n\t\t),\n\t};\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED