frontmcp 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/commands/build/exec/bin-meta.d.ts +49 -0
- package/src/commands/build/exec/bin-meta.js +68 -0
- package/src/commands/build/exec/bin-meta.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/generate-cli-entry.js +195 -3
- package/src/commands/build/exec/cli-runtime/generate-cli-entry.js.map +1 -1
- package/src/commands/build/exec/cli-runtime/plugin-emitter.d.ts +160 -0
- package/src/commands/build/exec/cli-runtime/plugin-emitter.js +512 -0
- package/src/commands/build/exec/cli-runtime/plugin-emitter.js.map +1 -0
- package/src/commands/build/exec/cli-runtime/schema-extractor.d.ts +13 -1
- package/src/commands/build/exec/cli-runtime/schema-extractor.js +29 -3
- package/src/commands/build/exec/cli-runtime/schema-extractor.js.map +1 -1
- package/src/commands/build/exec/cli-runtime/skill-md-compose.d.ts +25 -0
- package/src/commands/build/exec/cli-runtime/skill-md-compose.js +63 -0
- package/src/commands/build/exec/cli-runtime/skill-md-compose.js.map +1 -0
- package/src/commands/build/exec/index.js +26 -0
- package/src/commands/build/exec/index.js.map +1 -1
- package/src/commands/dev/bridge/child-supervisor.d.ts +48 -0
- package/src/commands/dev/bridge/child-supervisor.js +228 -0
- package/src/commands/dev/bridge/child-supervisor.js.map +1 -0
- package/src/commands/dev/bridge/errors.d.ts +23 -0
- package/src/commands/dev/bridge/errors.js +34 -0
- package/src/commands/dev/bridge/errors.js.map +1 -0
- package/src/commands/dev/bridge/index.d.ts +30 -0
- package/src/commands/dev/bridge/index.js +220 -0
- package/src/commands/dev/bridge/index.js.map +1 -0
- package/src/commands/dev/bridge/log.d.ts +29 -0
- package/src/commands/dev/bridge/log.js +82 -0
- package/src/commands/dev/bridge/log.js.map +1 -0
- package/src/commands/dev/bridge/state-machine.d.ts +56 -0
- package/src/commands/dev/bridge/state-machine.js +245 -0
- package/src/commands/dev/bridge/state-machine.js.map +1 -0
- package/src/commands/dev/bridge/stdio-framer.d.ts +47 -0
- package/src/commands/dev/bridge/stdio-framer.js +128 -0
- package/src/commands/dev/bridge/stdio-framer.js.map +1 -0
- package/src/commands/dev/bridge/upstream-client.d.ts +49 -0
- package/src/commands/dev/bridge/upstream-client.js +159 -0
- package/src/commands/dev/bridge/upstream-client.js.map +1 -0
- package/src/commands/dev/bridge/watcher.d.ts +30 -0
- package/src/commands/dev/bridge/watcher.js +87 -0
- package/src/commands/dev/bridge/watcher.js.map +1 -0
- package/src/commands/dev/dev.d.ts +18 -1
- package/src/commands/dev/dev.js +134 -14
- package/src/commands/dev/dev.js.map +1 -1
- package/src/commands/dev/inspector.d.ts +13 -1
- package/src/commands/dev/inspector.js +77 -3
- package/src/commands/dev/inspector.js.map +1 -1
- package/src/commands/dev/port.d.ts +23 -0
- package/src/commands/dev/port.js +87 -0
- package/src/commands/dev/port.js.map +1 -0
- package/src/commands/dev/register.d.ts +1 -1
- package/src/commands/dev/register.js +28 -4
- package/src/commands/dev/register.js.map +1 -1
- package/src/commands/dev/test.d.ts +26 -1
- package/src/commands/dev/test.js +181 -64
- package/src/commands/dev/test.js.map +1 -1
- package/src/commands/eject/mcp-client.d.ts +25 -0
- package/src/commands/eject/mcp-client.js +74 -0
- package/src/commands/eject/mcp-client.js.map +1 -0
- package/src/commands/eject/register.d.ts +9 -0
- package/src/commands/eject/register.js +56 -0
- package/src/commands/eject/register.js.map +1 -0
- package/src/commands/install/install-claude-plugin.d.ts +13 -0
- package/src/commands/install/install-claude-plugin.js +327 -0
- package/src/commands/install/install-claude-plugin.js.map +1 -0
- package/src/commands/install/register.d.ts +16 -0
- package/src/commands/install/register.js +70 -0
- package/src/commands/install/register.js.map +1 -0
- package/src/commands/scaffold/create.js +44 -0
- package/src/commands/scaffold/create.js.map +1 -1
- package/src/commands/skills/from-entry.d.ts +31 -0
- package/src/commands/skills/from-entry.js +68 -0
- package/src/commands/skills/from-entry.js.map +1 -0
- package/src/commands/skills/install.d.ts +12 -0
- package/src/commands/skills/install.js +173 -8
- package/src/commands/skills/install.js.map +1 -1
- package/src/commands/skills/register.js +7 -3
- package/src/commands/skills/register.js.map +1 -1
- package/src/config/frontmcp-config.loader.d.ts +28 -0
- package/src/config/frontmcp-config.loader.js +146 -67
- package/src/config/frontmcp-config.loader.js.map +1 -1
- package/src/config/frontmcp-config.resolve.d.ts +67 -0
- package/src/config/frontmcp-config.resolve.js +118 -0
- package/src/config/frontmcp-config.resolve.js.map +1 -0
- package/src/config/frontmcp-config.schema.d.ts +207 -0
- package/src/config/frontmcp-config.schema.js +217 -1
- package/src/config/frontmcp-config.schema.js.map +1 -1
- package/src/config/frontmcp-config.types.d.ts +133 -0
- package/src/config/frontmcp-config.types.js.map +1 -1
- package/src/config/index.d.ts +2 -1
- package/src/config/index.js +3 -1
- package/src/config/index.js.map +1 -1
- package/src/core/args.d.ts +13 -0
- package/src/core/args.js.map +1 -1
- package/src/core/bridge.js +39 -0
- package/src/core/bridge.js.map +1 -1
- package/src/core/cli.d.ts +0 -6
- package/src/core/cli.js +23 -3
- package/src/core/cli.js.map +1 -1
- package/src/core/help.d.ts +1 -1
- package/src/core/help.js +27 -6
- package/src/core/help.js.map +1 -1
- package/src/core/program.d.ts +1 -1
- package/src/core/program.js +56 -12
- package/src/core/program.js.map +1 -1
- package/src/core/project-commands.d.ts +44 -0
- package/src/core/project-commands.js +216 -0
- package/src/core/project-commands.js.map +1 -0
|
@@ -743,6 +743,131 @@ export declare const deploymentTargetSchema: import("@frontmcp/lazy-zod").ZodDis
|
|
|
743
743
|
includeNodeModules: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
744
744
|
deterministic: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
745
745
|
}, import("zod/v4/core").$strict>], "target">;
|
|
746
|
+
/**
|
|
747
|
+
* Built-in CLI verbs that a project verb may NOT shadow. The reserved set
|
|
748
|
+
* also includes Commander's global flag tokens so a verb literally named
|
|
749
|
+
* `--help` can't be defined.
|
|
750
|
+
*/
|
|
751
|
+
export declare const RESERVED_VERBS: ReadonlySet<string>;
|
|
752
|
+
export declare const projectCommandEntrySchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
753
|
+
entry: import("@frontmcp/lazy-zod").ZodString;
|
|
754
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
755
|
+
arguments: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
|
|
756
|
+
name: import("@frontmcp/lazy-zod").ZodString;
|
|
757
|
+
required: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
758
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
759
|
+
variadic: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
760
|
+
}, import("zod/v4/core").$strict>>>;
|
|
761
|
+
options: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
|
|
762
|
+
flags: import("@frontmcp/lazy-zod").ZodString;
|
|
763
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
764
|
+
default: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodNumber, import("@frontmcp/lazy-zod").ZodBoolean]>>;
|
|
765
|
+
}, import("zod/v4/core").$strict>>>;
|
|
766
|
+
hidden: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
767
|
+
}, import("zod/v4/core").$strict>;
|
|
768
|
+
export declare const cliExtensionConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
769
|
+
commands: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodObject<{
|
|
770
|
+
entry: import("@frontmcp/lazy-zod").ZodString;
|
|
771
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
772
|
+
arguments: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
|
|
773
|
+
name: import("@frontmcp/lazy-zod").ZodString;
|
|
774
|
+
required: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
775
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
776
|
+
variadic: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
777
|
+
}, import("zod/v4/core").$strict>>>;
|
|
778
|
+
options: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
|
|
779
|
+
flags: import("@frontmcp/lazy-zod").ZodString;
|
|
780
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
781
|
+
default: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodNumber, import("@frontmcp/lazy-zod").ZodBoolean]>>;
|
|
782
|
+
}, import("zod/v4/core").$strict>>>;
|
|
783
|
+
hidden: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
784
|
+
}, import("zod/v4/core").$strict>>>;
|
|
785
|
+
}, import("zod/v4/core").$strict>;
|
|
786
|
+
export declare const transportHttpSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
787
|
+
port: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
788
|
+
path: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
789
|
+
host: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
790
|
+
}, import("zod/v4/core").$strict>;
|
|
791
|
+
export declare const transportStdioSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
792
|
+
command: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
793
|
+
args: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
794
|
+
}, import("zod/v4/core").$strict>;
|
|
795
|
+
export declare const transportConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
796
|
+
default: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
797
|
+
stdio: "stdio";
|
|
798
|
+
http: "http";
|
|
799
|
+
sse: "sse";
|
|
800
|
+
}>>;
|
|
801
|
+
http: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
802
|
+
port: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
803
|
+
path: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
804
|
+
host: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
805
|
+
}, import("zod/v4/core").$strict>>;
|
|
806
|
+
stdio: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
807
|
+
command: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
808
|
+
args: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
809
|
+
}, import("zod/v4/core").$strict>>;
|
|
810
|
+
}, import("zod/v4/core").$strict>;
|
|
811
|
+
export declare const envOverlaysSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
812
|
+
shared: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
813
|
+
dev: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
814
|
+
test: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
815
|
+
ship: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
816
|
+
}, import("zod/v4/core").$strict>;
|
|
817
|
+
export declare const clientConnectionSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
818
|
+
name: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
819
|
+
transport: import("@frontmcp/lazy-zod").ZodEnum<{
|
|
820
|
+
stdio: "stdio";
|
|
821
|
+
http: "http";
|
|
822
|
+
sse: "sse";
|
|
823
|
+
}>;
|
|
824
|
+
command: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
825
|
+
args: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
826
|
+
env: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
827
|
+
url: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
828
|
+
}, import("zod/v4/core").$strict>;
|
|
829
|
+
export declare const clientsConfigSchema: import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
830
|
+
cursor: "cursor";
|
|
831
|
+
windsurf: "windsurf";
|
|
832
|
+
"claude-code": "claude-code";
|
|
833
|
+
"claude-desktop": "claude-desktop";
|
|
834
|
+
vscode: "vscode";
|
|
835
|
+
}> & import("zod/v4/core").$partial, import("@frontmcp/lazy-zod").ZodObject<{
|
|
836
|
+
name: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
837
|
+
transport: import("@frontmcp/lazy-zod").ZodEnum<{
|
|
838
|
+
stdio: "stdio";
|
|
839
|
+
http: "http";
|
|
840
|
+
sse: "sse";
|
|
841
|
+
}>;
|
|
842
|
+
command: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
843
|
+
args: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
844
|
+
env: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
845
|
+
url: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
846
|
+
}, import("zod/v4/core").$strict>>;
|
|
847
|
+
export declare const testConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
848
|
+
timeoutMs: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
849
|
+
runInBand: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
850
|
+
testMatch: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
851
|
+
coverage: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
852
|
+
}, import("zod/v4/core").$strict>;
|
|
853
|
+
export declare const skillsCliConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
854
|
+
provider: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
855
|
+
claude: "claude";
|
|
856
|
+
codex: "codex";
|
|
857
|
+
}>>;
|
|
858
|
+
bundle: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
859
|
+
none: "none";
|
|
860
|
+
recommended: "recommended";
|
|
861
|
+
minimal: "minimal";
|
|
862
|
+
full: "full";
|
|
863
|
+
}>>;
|
|
864
|
+
install: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
865
|
+
exportTarget: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
866
|
+
cursor: "cursor";
|
|
867
|
+
windsurf: "windsurf";
|
|
868
|
+
copilot: "copilot";
|
|
869
|
+
}>>;
|
|
870
|
+
}, import("zod/v4/core").$strict>;
|
|
746
871
|
export declare const frontmcpConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
747
872
|
$schema: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
748
873
|
name: import("@frontmcp/lazy-zod").ZodString;
|
|
@@ -1057,6 +1182,88 @@ export declare const frontmcpConfigSchema: import("@frontmcp/lazy-zod").ZodObjec
|
|
|
1057
1182
|
supportsSocket: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
1058
1183
|
}, import("zod/v4/core").$strict>>;
|
|
1059
1184
|
}, import("zod/v4/core").$strict>>;
|
|
1185
|
+
cli: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1186
|
+
commands: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodObject<{
|
|
1187
|
+
entry: import("@frontmcp/lazy-zod").ZodString;
|
|
1188
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1189
|
+
arguments: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1190
|
+
name: import("@frontmcp/lazy-zod").ZodString;
|
|
1191
|
+
required: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
1192
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1193
|
+
variadic: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
1194
|
+
}, import("zod/v4/core").$strict>>>;
|
|
1195
|
+
options: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1196
|
+
flags: import("@frontmcp/lazy-zod").ZodString;
|
|
1197
|
+
description: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1198
|
+
default: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodNumber, import("@frontmcp/lazy-zod").ZodBoolean]>>;
|
|
1199
|
+
}, import("zod/v4/core").$strict>>>;
|
|
1200
|
+
hidden: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
1201
|
+
}, import("zod/v4/core").$strict>>>;
|
|
1202
|
+
}, import("zod/v4/core").$strict>>;
|
|
1203
|
+
transport: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1204
|
+
default: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
1205
|
+
stdio: "stdio";
|
|
1206
|
+
http: "http";
|
|
1207
|
+
sse: "sse";
|
|
1208
|
+
}>>;
|
|
1209
|
+
http: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1210
|
+
port: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
1211
|
+
path: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1212
|
+
host: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1213
|
+
}, import("zod/v4/core").$strict>>;
|
|
1214
|
+
stdio: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1215
|
+
command: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1216
|
+
args: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
1217
|
+
}, import("zod/v4/core").$strict>>;
|
|
1218
|
+
}, import("zod/v4/core").$strict>>;
|
|
1219
|
+
env: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1220
|
+
shared: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
1221
|
+
dev: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
1222
|
+
test: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
1223
|
+
ship: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
1224
|
+
}, import("zod/v4/core").$strict>>;
|
|
1225
|
+
clients: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
1226
|
+
cursor: "cursor";
|
|
1227
|
+
windsurf: "windsurf";
|
|
1228
|
+
"claude-code": "claude-code";
|
|
1229
|
+
"claude-desktop": "claude-desktop";
|
|
1230
|
+
vscode: "vscode";
|
|
1231
|
+
}> & import("zod/v4/core").$partial, import("@frontmcp/lazy-zod").ZodObject<{
|
|
1232
|
+
name: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1233
|
+
transport: import("@frontmcp/lazy-zod").ZodEnum<{
|
|
1234
|
+
stdio: "stdio";
|
|
1235
|
+
http: "http";
|
|
1236
|
+
sse: "sse";
|
|
1237
|
+
}>;
|
|
1238
|
+
command: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1239
|
+
args: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
1240
|
+
env: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodString>>;
|
|
1241
|
+
url: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
1242
|
+
}, import("zod/v4/core").$strict>>>;
|
|
1243
|
+
test: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1244
|
+
timeoutMs: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
1245
|
+
runInBand: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
1246
|
+
testMatch: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
1247
|
+
coverage: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
1248
|
+
}, import("zod/v4/core").$strict>>;
|
|
1249
|
+
skills: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
|
|
1250
|
+
provider: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
1251
|
+
claude: "claude";
|
|
1252
|
+
codex: "codex";
|
|
1253
|
+
}>>;
|
|
1254
|
+
bundle: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
1255
|
+
none: "none";
|
|
1256
|
+
recommended: "recommended";
|
|
1257
|
+
minimal: "minimal";
|
|
1258
|
+
full: "full";
|
|
1259
|
+
}>>;
|
|
1260
|
+
install: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
|
|
1261
|
+
exportTarget: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
1262
|
+
cursor: "cursor";
|
|
1263
|
+
windsurf: "windsurf";
|
|
1264
|
+
copilot: "copilot";
|
|
1265
|
+
}>>;
|
|
1266
|
+
}, import("zod/v4/core").$strict>>;
|
|
1060
1267
|
}, import("zod/v4/core").$strict>;
|
|
1061
1268
|
export type FrontMcpConfigInput = z.input<typeof frontmcpConfigSchema>;
|
|
1062
1269
|
export type FrontMcpConfigParsed = z.output<typeof frontmcpConfigSchema>;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* The schema is also the source of truth for JSON Schema generation.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.frontmcpConfigSchema = exports.deploymentTargetSchema = exports.mcpbDeploymentSchema = exports.mcpbRepositorySchema = exports.mcpbCompatibilitySchema = exports.mcpbUserConfigEntrySchema = exports.mcpbAuthorSchema = exports.sdkDeploymentSchema = exports.browserDeploymentSchema = exports.cloudflareDeploymentSchema = exports.lambdaDeploymentSchema = exports.vercelDeploymentSchema = exports.cliDeploymentSchema = exports.distributedDeploymentSchema = exports.nodeDeploymentSchema = exports.wranglerConfigSchema = exports.cliTargetConfigSchema = exports.haConfigSchema = exports.buildOptionsSchema = exports.esbuildOptionsSchema = exports.serverDefaultsSchema = exports.httpConfigSchema = exports.securityHeadersSchema = exports.cookiesConfigSchema = exports.cspConfigSchema = exports.corsConfigSchema = void 0;
|
|
9
|
+
exports.frontmcpConfigSchema = exports.skillsCliConfigSchema = exports.testConfigSchema = exports.clientsConfigSchema = exports.clientConnectionSchema = exports.envOverlaysSchema = exports.transportConfigSchema = exports.transportStdioSchema = exports.transportHttpSchema = exports.cliExtensionConfigSchema = exports.projectCommandEntrySchema = exports.RESERVED_VERBS = exports.deploymentTargetSchema = exports.mcpbDeploymentSchema = exports.mcpbRepositorySchema = exports.mcpbCompatibilitySchema = exports.mcpbUserConfigEntrySchema = exports.mcpbAuthorSchema = exports.sdkDeploymentSchema = exports.browserDeploymentSchema = exports.cloudflareDeploymentSchema = exports.lambdaDeploymentSchema = exports.vercelDeploymentSchema = exports.cliDeploymentSchema = exports.distributedDeploymentSchema = exports.nodeDeploymentSchema = exports.wranglerConfigSchema = exports.cliTargetConfigSchema = exports.haConfigSchema = exports.buildOptionsSchema = exports.esbuildOptionsSchema = exports.serverDefaultsSchema = exports.httpConfigSchema = exports.securityHeadersSchema = exports.cookiesConfigSchema = exports.cspConfigSchema = exports.corsConfigSchema = void 0;
|
|
10
10
|
// Lazy-by-default `z`. Same API as `zod`'s `z`, but compound schemas
|
|
11
11
|
// (`z.object`, `z.union`, `z.discriminatedUnion`, `z.intersection`,
|
|
12
12
|
// `z.record`, `z.tuple`) defer construction until first `.parse()`.
|
|
@@ -294,6 +294,214 @@ exports.deploymentTargetSchema = lazy_zod_1.z.discriminatedUnion('target', [
|
|
|
294
294
|
exports.mcpbDeploymentSchema,
|
|
295
295
|
]);
|
|
296
296
|
// ============================================
|
|
297
|
+
// CLI extension (issue #409)
|
|
298
|
+
// ============================================
|
|
299
|
+
//
|
|
300
|
+
// `cli.commands` lets projects register custom `frontmcp <verb>` entries
|
|
301
|
+
// that show up in `frontmcp --help` alongside the built-ins and run with
|
|
302
|
+
// the project's full module graph (spawned via `tsx`).
|
|
303
|
+
/**
|
|
304
|
+
* Built-in CLI verbs that a project verb may NOT shadow. The reserved set
|
|
305
|
+
* also includes Commander's global flag tokens so a verb literally named
|
|
306
|
+
* `--help` can't be defined.
|
|
307
|
+
*/
|
|
308
|
+
exports.RESERVED_VERBS = new Set([
|
|
309
|
+
'dev',
|
|
310
|
+
'build',
|
|
311
|
+
'test',
|
|
312
|
+
'init',
|
|
313
|
+
'doctor',
|
|
314
|
+
'inspector',
|
|
315
|
+
'create',
|
|
316
|
+
'start',
|
|
317
|
+
'stop',
|
|
318
|
+
'restart',
|
|
319
|
+
'status',
|
|
320
|
+
'list',
|
|
321
|
+
'logs',
|
|
322
|
+
'socket',
|
|
323
|
+
'service',
|
|
324
|
+
'install',
|
|
325
|
+
'uninstall',
|
|
326
|
+
'configure',
|
|
327
|
+
'skills',
|
|
328
|
+
'mcpb',
|
|
329
|
+
'pm',
|
|
330
|
+
'help',
|
|
331
|
+
'version',
|
|
332
|
+
'--help',
|
|
333
|
+
'-h',
|
|
334
|
+
'--version',
|
|
335
|
+
'-V',
|
|
336
|
+
'--list-commands',
|
|
337
|
+
]);
|
|
338
|
+
const projectCommandArgumentSchema = lazy_zod_1.z
|
|
339
|
+
.object({
|
|
340
|
+
name: lazy_zod_1.z.string().min(1),
|
|
341
|
+
required: lazy_zod_1.z.boolean().optional(),
|
|
342
|
+
description: lazy_zod_1.z.string().optional(),
|
|
343
|
+
variadic: lazy_zod_1.z.boolean().optional(),
|
|
344
|
+
})
|
|
345
|
+
.strict();
|
|
346
|
+
const projectCommandOptionSchema = lazy_zod_1.z
|
|
347
|
+
.object({
|
|
348
|
+
flags: lazy_zod_1.z.string().min(1),
|
|
349
|
+
description: lazy_zod_1.z.string().optional(),
|
|
350
|
+
default: lazy_zod_1.z.union([lazy_zod_1.z.string(), lazy_zod_1.z.number(), lazy_zod_1.z.boolean()]).optional(),
|
|
351
|
+
})
|
|
352
|
+
.strict();
|
|
353
|
+
exports.projectCommandEntrySchema = lazy_zod_1.z
|
|
354
|
+
.object({
|
|
355
|
+
entry: lazy_zod_1.z.string().min(1),
|
|
356
|
+
description: lazy_zod_1.z.string().optional(),
|
|
357
|
+
arguments: lazy_zod_1.z
|
|
358
|
+
.array(projectCommandArgumentSchema)
|
|
359
|
+
.optional()
|
|
360
|
+
.superRefine((args, ctx) => {
|
|
361
|
+
if (!args)
|
|
362
|
+
return;
|
|
363
|
+
// Commander allows variadic only on the final positional. Catch it
|
|
364
|
+
// here instead of letting it surface as a cryptic runtime error.
|
|
365
|
+
for (let i = 0; i < args.length - 1; i++) {
|
|
366
|
+
if (args[i].variadic) {
|
|
367
|
+
ctx.addIssue({
|
|
368
|
+
code: 'custom',
|
|
369
|
+
path: [i, 'variadic'],
|
|
370
|
+
message: `Argument "${args[i].name}" is variadic but is not the last argument. Variadic positionals must be last.`,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}),
|
|
375
|
+
options: lazy_zod_1.z.array(projectCommandOptionSchema).optional(),
|
|
376
|
+
hidden: lazy_zod_1.z.boolean().optional(),
|
|
377
|
+
})
|
|
378
|
+
.strict();
|
|
379
|
+
exports.cliExtensionConfigSchema = lazy_zod_1.z
|
|
380
|
+
.object({
|
|
381
|
+
commands: lazy_zod_1.z
|
|
382
|
+
.record(lazy_zod_1.z.string(), exports.projectCommandEntrySchema)
|
|
383
|
+
.optional()
|
|
384
|
+
.superRefine((map, ctx) => {
|
|
385
|
+
if (!map)
|
|
386
|
+
return;
|
|
387
|
+
for (const name of Object.keys(map)) {
|
|
388
|
+
if (exports.RESERVED_VERBS.has(name)) {
|
|
389
|
+
ctx.addIssue({
|
|
390
|
+
code: 'custom',
|
|
391
|
+
path: [name],
|
|
392
|
+
message: `Command "${name}" collides with a built-in frontmcp verb. ` +
|
|
393
|
+
`Choose a project-specific name (e.g. "project:${name}").`,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
if (!/^[a-zA-Z][a-zA-Z0-9:_-]*$/.test(name)) {
|
|
397
|
+
ctx.addIssue({
|
|
398
|
+
code: 'custom',
|
|
399
|
+
path: [name],
|
|
400
|
+
message: `"${name}" is not a valid verb name. Use letters, digits, ":", "_", "-".`,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}),
|
|
405
|
+
})
|
|
406
|
+
.strict();
|
|
407
|
+
// ============================================
|
|
408
|
+
// Transport defaults (issue #400)
|
|
409
|
+
// ============================================
|
|
410
|
+
//
|
|
411
|
+
// Per-protocol defaults consumed by `dev` / `inspector` / `pm start` / `pm
|
|
412
|
+
// socket` so server-startup flags don't have to be re-typed on every CLI
|
|
413
|
+
// invocation. Per-deployment `server.http.port` still wins where set.
|
|
414
|
+
exports.transportHttpSchema = lazy_zod_1.z
|
|
415
|
+
.object({
|
|
416
|
+
port: lazy_zod_1.z.number().int().min(0).max(65535).optional(),
|
|
417
|
+
path: lazy_zod_1.z.string().optional(),
|
|
418
|
+
host: lazy_zod_1.z.string().optional(),
|
|
419
|
+
})
|
|
420
|
+
.strict();
|
|
421
|
+
exports.transportStdioSchema = lazy_zod_1.z
|
|
422
|
+
.object({
|
|
423
|
+
command: lazy_zod_1.z.string().optional(),
|
|
424
|
+
args: lazy_zod_1.z.array(lazy_zod_1.z.string()).optional(),
|
|
425
|
+
})
|
|
426
|
+
.strict();
|
|
427
|
+
exports.transportConfigSchema = lazy_zod_1.z
|
|
428
|
+
.object({
|
|
429
|
+
default: lazy_zod_1.z.enum(['http', 'sse', 'stdio']).optional(),
|
|
430
|
+
http: exports.transportHttpSchema.optional(),
|
|
431
|
+
stdio: exports.transportStdioSchema.optional(),
|
|
432
|
+
})
|
|
433
|
+
.strict();
|
|
434
|
+
// ============================================
|
|
435
|
+
// Env overlays (issue #400)
|
|
436
|
+
// ============================================
|
|
437
|
+
//
|
|
438
|
+
// `shared` applies to every mode; mode-specific overlays (`dev`, `test`,
|
|
439
|
+
// `ship`) are merged on top. Effective env = `shared` ⊕ `<mode>` (later
|
|
440
|
+
// wins). Loaded by `dev`/`test`/`pm` in addition to `.env`/`.env.local`
|
|
441
|
+
// — file-based env still wins for parity with existing behavior.
|
|
442
|
+
exports.envOverlaysSchema = lazy_zod_1.z
|
|
443
|
+
.object({
|
|
444
|
+
shared: lazy_zod_1.z.record(lazy_zod_1.z.string(), lazy_zod_1.z.string()).optional(),
|
|
445
|
+
dev: lazy_zod_1.z.record(lazy_zod_1.z.string(), lazy_zod_1.z.string()).optional(),
|
|
446
|
+
test: lazy_zod_1.z.record(lazy_zod_1.z.string(), lazy_zod_1.z.string()).optional(),
|
|
447
|
+
ship: lazy_zod_1.z.record(lazy_zod_1.z.string(), lazy_zod_1.z.string()).optional(),
|
|
448
|
+
})
|
|
449
|
+
.strict();
|
|
450
|
+
// ============================================
|
|
451
|
+
// MCP client connection snippets (issue #400)
|
|
452
|
+
// ============================================
|
|
453
|
+
//
|
|
454
|
+
// Per-client connection descriptors consumed by `frontmcp eject-mcp-config
|
|
455
|
+
// <client>` to emit ready-to-paste `.mcp.json` / `claude_desktop_config.json`
|
|
456
|
+
// / Cursor / Windsurf / VS Code snippets.
|
|
457
|
+
exports.clientConnectionSchema = lazy_zod_1.z
|
|
458
|
+
.object({
|
|
459
|
+
name: lazy_zod_1.z.string().optional(),
|
|
460
|
+
transport: lazy_zod_1.z.enum(['http', 'sse', 'stdio']),
|
|
461
|
+
command: lazy_zod_1.z.string().optional(),
|
|
462
|
+
args: lazy_zod_1.z.array(lazy_zod_1.z.string()).optional(),
|
|
463
|
+
env: lazy_zod_1.z.record(lazy_zod_1.z.string(), lazy_zod_1.z.string()).optional(),
|
|
464
|
+
url: lazy_zod_1.z.string().url().optional(),
|
|
465
|
+
})
|
|
466
|
+
.strict();
|
|
467
|
+
// `z.record(z.enum([...]), …)` in Zod 4 treats every enum value as a
|
|
468
|
+
// REQUIRED key — so a `clients: { 'claude-code': {…} }` config (which is
|
|
469
|
+
// the shape the scaffold emits) fails validation with "expected object,
|
|
470
|
+
// received undefined" for the other four clients. The Verdaccio E2E
|
|
471
|
+
// surfaced this against the generated template. `partialRecord` is Zod 4's
|
|
472
|
+
// canonical fix: same enum-keyed schema but every key is optional, which
|
|
473
|
+
// matches the user-facing contract (clients are opt-in, not all-or-nothing).
|
|
474
|
+
exports.clientsConfigSchema = lazy_zod_1.z.partialRecord(lazy_zod_1.z.enum(['claude-code', 'claude-desktop', 'cursor', 'windsurf', 'vscode']), exports.clientConnectionSchema);
|
|
475
|
+
// ============================================
|
|
476
|
+
// Test runner defaults (issue #400)
|
|
477
|
+
// ============================================
|
|
478
|
+
//
|
|
479
|
+
// `frontmcp test` defaults — overridden by CLI flags (`--timeout`,
|
|
480
|
+
// `--runInBand`, `--coverage`, `<patterns>`).
|
|
481
|
+
exports.testConfigSchema = lazy_zod_1.z
|
|
482
|
+
.object({
|
|
483
|
+
timeoutMs: lazy_zod_1.z.number().int().positive().optional(),
|
|
484
|
+
runInBand: lazy_zod_1.z.boolean().optional(),
|
|
485
|
+
testMatch: lazy_zod_1.z.array(lazy_zod_1.z.string()).optional(),
|
|
486
|
+
coverage: lazy_zod_1.z.boolean().optional(),
|
|
487
|
+
})
|
|
488
|
+
.strict();
|
|
489
|
+
// ============================================
|
|
490
|
+
// Skills install / export defaults (issue #400)
|
|
491
|
+
// ============================================
|
|
492
|
+
//
|
|
493
|
+
// `frontmcp skills install` / `export` defaults — `install` is the list of
|
|
494
|
+
// catalog skill names a project depends on so `frontmcp skills install`
|
|
495
|
+
// with no arguments installs the curated set.
|
|
496
|
+
exports.skillsCliConfigSchema = lazy_zod_1.z
|
|
497
|
+
.object({
|
|
498
|
+
provider: lazy_zod_1.z.enum(['claude', 'codex']).optional(),
|
|
499
|
+
bundle: lazy_zod_1.z.enum(['recommended', 'minimal', 'full', 'none']).optional(),
|
|
500
|
+
install: lazy_zod_1.z.array(lazy_zod_1.z.string()).optional(),
|
|
501
|
+
exportTarget: lazy_zod_1.z.enum(['cursor', 'windsurf', 'copilot']).optional(),
|
|
502
|
+
})
|
|
503
|
+
.strict();
|
|
504
|
+
// ============================================
|
|
297
505
|
// Top-Level Config
|
|
298
506
|
// ============================================
|
|
299
507
|
exports.frontmcpConfigSchema = lazy_zod_1.z
|
|
@@ -308,6 +516,14 @@ exports.frontmcpConfigSchema = lazy_zod_1.z
|
|
|
308
516
|
nodeVersion: lazy_zod_1.z.string().optional(),
|
|
309
517
|
deployments: lazy_zod_1.z.array(exports.deploymentTargetSchema).min(1, 'At least one deployment target required'),
|
|
310
518
|
build: exports.buildOptionsSchema.optional(),
|
|
519
|
+
// Issue #409 — project-defined CLI verbs
|
|
520
|
+
cli: exports.cliExtensionConfigSchema.optional(),
|
|
521
|
+
// Issue #400 — config drives every command, not just `build`
|
|
522
|
+
transport: exports.transportConfigSchema.optional(),
|
|
523
|
+
env: exports.envOverlaysSchema.optional(),
|
|
524
|
+
clients: exports.clientsConfigSchema.optional(),
|
|
525
|
+
test: exports.testConfigSchema.optional(),
|
|
526
|
+
skills: exports.skillsCliConfigSchema.optional(),
|
|
311
527
|
})
|
|
312
528
|
.strict();
|
|
313
529
|
//# sourceMappingURL=frontmcp-config.schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmcp-config.schema.js","sourceRoot":"","sources":["../../../src/config/frontmcp-config.schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * FrontMCP Config — Zod Validation Schema\n *\n * Validates and normalizes `frontmcp.config` files.\n * The schema is also the source of truth for JSON Schema generation.\n */\n\n// Lazy-by-default `z`. Same API as `zod`'s `z`, but compound schemas\n// (`z.object`, `z.union`, `z.discriminatedUnion`, `z.intersection`,\n// `z.record`, `z.tuple`) defer construction until first `.parse()`.\n// This schema is parsed at CLI startup — using lazy-z keeps module load\n// from materializing every nested config-shape eagerly.\n//\n// Imported directly from `@frontmcp/lazy-zod` (not the `@frontmcp/sdk`\n// barrel) to keep this leaf module lightweight — pulling the full SDK\n// barrel into Jest's transform chain trips on `jose`'s ESM-only build.\nimport { z } from '@frontmcp/lazy-zod';\n\n// ============================================\n// Server Defaults\n// ============================================\n\nexport const corsConfigSchema = z\n .object({\n origins: z.array(z.string()).optional(),\n credentials: z.boolean().optional(),\n maxAge: z.number().int().positive().optional(),\n })\n .strict();\n\nexport const cspConfigSchema = z\n .object({\n enabled: z.boolean().optional(),\n directives: z.record(z.string(), z.union([z.string(), z.array(z.string())])).optional(),\n reportUri: z.string().optional(),\n reportOnly: z.boolean().optional(),\n })\n .strict();\n\nexport const cookiesConfigSchema = z\n .object({\n affinity: z.string().optional(),\n domain: z.string().optional(),\n sameSite: z.enum(['Strict', 'Lax', 'None']).optional(),\n })\n .strict();\n\nexport const securityHeadersSchema = z\n .object({\n hsts: z.union([z.string(), z.literal(false)]).optional(),\n contentTypeOptions: z.union([z.string(), z.literal(false)]).optional(),\n frameOptions: z.union([z.string(), z.literal(false)]).optional(),\n custom: z.record(z.string(), z.string()).optional(),\n })\n .strict();\n\nexport const httpConfigSchema = z\n .object({\n port: z.number().int().min(0).max(65535).optional(),\n socketPath: z.string().optional(),\n entryPath: z.string().optional(),\n cors: corsConfigSchema.optional(),\n })\n .strict();\n\nexport const serverDefaultsSchema = z\n .object({\n http: httpConfigSchema.optional(),\n csp: cspConfigSchema.optional(),\n cookies: cookiesConfigSchema.optional(),\n headers: securityHeadersSchema.optional(),\n })\n .strict();\n\n// ============================================\n// Build Options\n// ============================================\n\nexport const esbuildOptionsSchema = z\n .object({\n external: z.array(z.string()).optional(),\n define: z.record(z.string(), z.string()).optional(),\n target: z.string().optional(),\n minify: z.boolean().optional(),\n })\n .strict();\n\nexport const buildOptionsSchema = z\n .object({\n esbuild: esbuildOptionsSchema.optional(),\n dependencies: z\n .object({\n system: z.array(z.string()).optional(),\n nativeAddons: z.array(z.string()).optional(),\n })\n .strict()\n .optional(),\n storage: z\n .object({\n type: z.enum(['sqlite', 'redis', 'none']),\n required: z.boolean().optional(),\n })\n .strict()\n .optional(),\n network: z\n .object({\n defaultPort: z.number().int().optional(),\n supportsSocket: z.boolean().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\n// ============================================\n// Deployment Targets\n// ============================================\n\nexport const haConfigSchema = z\n .object({\n heartbeatIntervalMs: z.number().int().positive().optional(),\n heartbeatTtlMs: z.number().int().positive().optional(),\n takeoverGracePeriodMs: z.number().int().positive().optional(),\n redisKeyPrefix: z.string().optional(),\n })\n .strict();\n\nexport const cliTargetConfigSchema = z\n .object({\n description: z.string().optional(),\n outputDefault: z.enum(['text', 'json']).optional(),\n authRequired: z.boolean().optional(),\n excludeTools: z.array(z.string()).optional(),\n oauth: z\n .object({\n serverUrl: z.string().optional(),\n clientId: z.string().optional(),\n defaultScope: z.string().optional(),\n portRange: z.tuple([z.number(), z.number()]).optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport const wranglerConfigSchema = z\n .object({\n name: z.string().optional(),\n compatibilityDate: z.string().optional(),\n })\n .strict();\n\nconst deploymentBaseSchema = z.object({\n outDir: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n});\n\nexport const nodeDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('node'),\n server: serverDefaultsSchema.optional(),\n })\n .strict();\n\nexport const distributedDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('distributed'),\n server: serverDefaultsSchema.optional(),\n ha: haConfigSchema.optional(),\n })\n .strict();\n\nexport const cliDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('cli'),\n js: z.boolean().optional(),\n cli: cliTargetConfigSchema.optional(),\n sea: z.object({ enabled: z.boolean().optional() }).strict().optional(),\n })\n .strict();\n\nexport const vercelDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('vercel'),\n server: serverDefaultsSchema.optional(),\n })\n .strict();\n\nexport const lambdaDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('lambda'),\n server: serverDefaultsSchema.optional(),\n })\n .strict();\n\nexport const cloudflareDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('cloudflare'),\n server: serverDefaultsSchema.optional(),\n wrangler: wranglerConfigSchema.optional(),\n })\n .strict();\n\nexport const browserDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('browser'),\n })\n .strict();\n\nexport const sdkDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('sdk'),\n })\n .strict();\n\n// ============================================\n// MCPB (MCP Bundles) target — produces a .mcpb ZIP archive\n// per https://github.com/modelcontextprotocol/mcpb (manifest_version 0.3)\n// ============================================\n\nexport const mcpbAuthorSchema = z\n .object({\n name: z.string(),\n email: z.string().email().optional(),\n url: z.string().url().optional(),\n })\n .strict();\n\nexport const mcpbUserConfigEntrySchema = z\n .object({\n type: z.enum(['string', 'number', 'boolean', 'directory', 'file']),\n title: z.string(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n multiple: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .strict();\n\nexport const mcpbCompatibilitySchema = z\n .object({\n claude_desktop: z.string().optional(),\n platforms: z.array(z.enum(['darwin', 'win32', 'linux'])).optional(),\n runtimes: z\n .object({\n node: z.string().optional(),\n python: z.string().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport const mcpbRepositorySchema = z.union([\n z.string(),\n z\n .object({\n type: z.string(),\n url: z.string(),\n })\n .strict(),\n]);\n\nexport const mcpbDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('mcpb'),\n /** Human-friendly display name shown in installer dialog. */\n displayName: z.string().optional(),\n /** Long markdown description shown in extension details. */\n longDescription: z.string().optional(),\n /** Author object (name/email/url). Overrides parsed package.json.author. */\n author: mcpbAuthorSchema.optional(),\n /** SPDX license identifier. Overrides package.json.license. */\n license: z.string().optional(),\n /** Project homepage URL. */\n homepage: z.string().url().optional(),\n /** Source repository (string URL or {type, url}). */\n repository: mcpbRepositorySchema.optional(),\n /** Documentation URL. */\n documentation: z.string().url().optional(),\n /** Support URL (issues/contact). */\n support: z.string().optional(),\n /** Path to icon (PNG) relative to project root. */\n icon: z.string().optional(),\n /** Keywords for search. */\n keywords: z.array(z.string()).optional(),\n /** Privacy policy URLs for external services this bundle talks to. */\n privacyPolicies: z.array(z.string()).optional(),\n /** Runtime/platform/client compatibility constraints. */\n compatibility: mcpbCompatibilitySchema.optional(),\n /** User-configurable inputs (injected as env vars at runtime). */\n userConfig: z.record(z.string(), mcpbUserConfigEntrySchema).optional(),\n /** Single-executable-application binary integration. */\n sea: z\n .object({\n /** Build SEA binary for host platform and include via platform_overrides. */\n enabled: z.boolean().optional(),\n /** Directory of pre-built SEA binaries to merge (e.g., CI artifacts). */\n mergeFrom: z.string().optional(),\n })\n .strict()\n .optional(),\n /** Include node_modules/ in archive (opt-in, defaults off). */\n includeNodeModules: z.boolean().optional(),\n /** Produce byte-identical archives across builds. @default true */\n deterministic: z.boolean().optional(),\n })\n .strict();\n\nexport const deploymentTargetSchema = z.discriminatedUnion('target', [\n nodeDeploymentSchema,\n distributedDeploymentSchema,\n cliDeploymentSchema,\n vercelDeploymentSchema,\n lambdaDeploymentSchema,\n cloudflareDeploymentSchema,\n browserDeploymentSchema,\n sdkDeploymentSchema,\n mcpbDeploymentSchema,\n]);\n\n// ============================================\n// Top-Level Config\n// ============================================\n\nexport const frontmcpConfigSchema = z\n .object({\n $schema: z.string().optional(),\n name: z\n .string()\n .min(1)\n .regex(/^[a-zA-Z0-9._-]+$/, 'Must be alphanumeric with .-_ only'),\n version: z.string().optional(),\n entry: z.string().optional(),\n nodeVersion: z.string().optional(),\n deployments: z.array(deploymentTargetSchema).min(1, 'At least one deployment target required'),\n build: buildOptionsSchema.optional(),\n })\n .strict();\n\nexport type FrontMcpConfigInput = z.input<typeof frontmcpConfigSchema>;\nexport type FrontMcpConfigParsed = z.output<typeof frontmcpConfigSchema>;\n"]}
|
|
1
|
+
{"version":3,"file":"frontmcp-config.schema.js","sourceRoot":"","sources":["../../../src/config/frontmcp-config.schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * FrontMCP Config — Zod Validation Schema\n *\n * Validates and normalizes `frontmcp.config` files.\n * The schema is also the source of truth for JSON Schema generation.\n */\n\n// Lazy-by-default `z`. Same API as `zod`'s `z`, but compound schemas\n// (`z.object`, `z.union`, `z.discriminatedUnion`, `z.intersection`,\n// `z.record`, `z.tuple`) defer construction until first `.parse()`.\n// This schema is parsed at CLI startup — using lazy-z keeps module load\n// from materializing every nested config-shape eagerly.\n//\n// Imported directly from `@frontmcp/lazy-zod` (not the `@frontmcp/sdk`\n// barrel) to keep this leaf module lightweight — pulling the full SDK\n// barrel into Jest's transform chain trips on `jose`'s ESM-only build.\nimport { z } from '@frontmcp/lazy-zod';\n\n// ============================================\n// Server Defaults\n// ============================================\n\nexport const corsConfigSchema = z\n .object({\n origins: z.array(z.string()).optional(),\n credentials: z.boolean().optional(),\n maxAge: z.number().int().positive().optional(),\n })\n .strict();\n\nexport const cspConfigSchema = z\n .object({\n enabled: z.boolean().optional(),\n directives: z.record(z.string(), z.union([z.string(), z.array(z.string())])).optional(),\n reportUri: z.string().optional(),\n reportOnly: z.boolean().optional(),\n })\n .strict();\n\nexport const cookiesConfigSchema = z\n .object({\n affinity: z.string().optional(),\n domain: z.string().optional(),\n sameSite: z.enum(['Strict', 'Lax', 'None']).optional(),\n })\n .strict();\n\nexport const securityHeadersSchema = z\n .object({\n hsts: z.union([z.string(), z.literal(false)]).optional(),\n contentTypeOptions: z.union([z.string(), z.literal(false)]).optional(),\n frameOptions: z.union([z.string(), z.literal(false)]).optional(),\n custom: z.record(z.string(), z.string()).optional(),\n })\n .strict();\n\nexport const httpConfigSchema = z\n .object({\n port: z.number().int().min(0).max(65535).optional(),\n socketPath: z.string().optional(),\n entryPath: z.string().optional(),\n cors: corsConfigSchema.optional(),\n })\n .strict();\n\nexport const serverDefaultsSchema = z\n .object({\n http: httpConfigSchema.optional(),\n csp: cspConfigSchema.optional(),\n cookies: cookiesConfigSchema.optional(),\n headers: securityHeadersSchema.optional(),\n })\n .strict();\n\n// ============================================\n// Build Options\n// ============================================\n\nexport const esbuildOptionsSchema = z\n .object({\n external: z.array(z.string()).optional(),\n define: z.record(z.string(), z.string()).optional(),\n target: z.string().optional(),\n minify: z.boolean().optional(),\n })\n .strict();\n\nexport const buildOptionsSchema = z\n .object({\n esbuild: esbuildOptionsSchema.optional(),\n dependencies: z\n .object({\n system: z.array(z.string()).optional(),\n nativeAddons: z.array(z.string()).optional(),\n })\n .strict()\n .optional(),\n storage: z\n .object({\n type: z.enum(['sqlite', 'redis', 'none']),\n required: z.boolean().optional(),\n })\n .strict()\n .optional(),\n network: z\n .object({\n defaultPort: z.number().int().optional(),\n supportsSocket: z.boolean().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\n// ============================================\n// Deployment Targets\n// ============================================\n\nexport const haConfigSchema = z\n .object({\n heartbeatIntervalMs: z.number().int().positive().optional(),\n heartbeatTtlMs: z.number().int().positive().optional(),\n takeoverGracePeriodMs: z.number().int().positive().optional(),\n redisKeyPrefix: z.string().optional(),\n })\n .strict();\n\nexport const cliTargetConfigSchema = z\n .object({\n description: z.string().optional(),\n outputDefault: z.enum(['text', 'json']).optional(),\n authRequired: z.boolean().optional(),\n excludeTools: z.array(z.string()).optional(),\n oauth: z\n .object({\n serverUrl: z.string().optional(),\n clientId: z.string().optional(),\n defaultScope: z.string().optional(),\n portRange: z.tuple([z.number(), z.number()]).optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport const wranglerConfigSchema = z\n .object({\n name: z.string().optional(),\n compatibilityDate: z.string().optional(),\n })\n .strict();\n\nconst deploymentBaseSchema = z.object({\n outDir: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n});\n\nexport const nodeDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('node'),\n server: serverDefaultsSchema.optional(),\n })\n .strict();\n\nexport const distributedDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('distributed'),\n server: serverDefaultsSchema.optional(),\n ha: haConfigSchema.optional(),\n })\n .strict();\n\nexport const cliDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('cli'),\n js: z.boolean().optional(),\n cli: cliTargetConfigSchema.optional(),\n sea: z.object({ enabled: z.boolean().optional() }).strict().optional(),\n })\n .strict();\n\nexport const vercelDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('vercel'),\n server: serverDefaultsSchema.optional(),\n })\n .strict();\n\nexport const lambdaDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('lambda'),\n server: serverDefaultsSchema.optional(),\n })\n .strict();\n\nexport const cloudflareDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('cloudflare'),\n server: serverDefaultsSchema.optional(),\n wrangler: wranglerConfigSchema.optional(),\n })\n .strict();\n\nexport const browserDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('browser'),\n })\n .strict();\n\nexport const sdkDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('sdk'),\n })\n .strict();\n\n// ============================================\n// MCPB (MCP Bundles) target — produces a .mcpb ZIP archive\n// per https://github.com/modelcontextprotocol/mcpb (manifest_version 0.3)\n// ============================================\n\nexport const mcpbAuthorSchema = z\n .object({\n name: z.string(),\n email: z.string().email().optional(),\n url: z.string().url().optional(),\n })\n .strict();\n\nexport const mcpbUserConfigEntrySchema = z\n .object({\n type: z.enum(['string', 'number', 'boolean', 'directory', 'file']),\n title: z.string(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n multiple: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .strict();\n\nexport const mcpbCompatibilitySchema = z\n .object({\n claude_desktop: z.string().optional(),\n platforms: z.array(z.enum(['darwin', 'win32', 'linux'])).optional(),\n runtimes: z\n .object({\n node: z.string().optional(),\n python: z.string().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport const mcpbRepositorySchema = z.union([\n z.string(),\n z\n .object({\n type: z.string(),\n url: z.string(),\n })\n .strict(),\n]);\n\nexport const mcpbDeploymentSchema = deploymentBaseSchema\n .extend({\n target: z.literal('mcpb'),\n /** Human-friendly display name shown in installer dialog. */\n displayName: z.string().optional(),\n /** Long markdown description shown in extension details. */\n longDescription: z.string().optional(),\n /** Author object (name/email/url). Overrides parsed package.json.author. */\n author: mcpbAuthorSchema.optional(),\n /** SPDX license identifier. Overrides package.json.license. */\n license: z.string().optional(),\n /** Project homepage URL. */\n homepage: z.string().url().optional(),\n /** Source repository (string URL or {type, url}). */\n repository: mcpbRepositorySchema.optional(),\n /** Documentation URL. */\n documentation: z.string().url().optional(),\n /** Support URL (issues/contact). */\n support: z.string().optional(),\n /** Path to icon (PNG) relative to project root. */\n icon: z.string().optional(),\n /** Keywords for search. */\n keywords: z.array(z.string()).optional(),\n /** Privacy policy URLs for external services this bundle talks to. */\n privacyPolicies: z.array(z.string()).optional(),\n /** Runtime/platform/client compatibility constraints. */\n compatibility: mcpbCompatibilitySchema.optional(),\n /** User-configurable inputs (injected as env vars at runtime). */\n userConfig: z.record(z.string(), mcpbUserConfigEntrySchema).optional(),\n /** Single-executable-application binary integration. */\n sea: z\n .object({\n /** Build SEA binary for host platform and include via platform_overrides. */\n enabled: z.boolean().optional(),\n /** Directory of pre-built SEA binaries to merge (e.g., CI artifacts). */\n mergeFrom: z.string().optional(),\n })\n .strict()\n .optional(),\n /** Include node_modules/ in archive (opt-in, defaults off). */\n includeNodeModules: z.boolean().optional(),\n /** Produce byte-identical archives across builds. @default true */\n deterministic: z.boolean().optional(),\n })\n .strict();\n\nexport const deploymentTargetSchema = z.discriminatedUnion('target', [\n nodeDeploymentSchema,\n distributedDeploymentSchema,\n cliDeploymentSchema,\n vercelDeploymentSchema,\n lambdaDeploymentSchema,\n cloudflareDeploymentSchema,\n browserDeploymentSchema,\n sdkDeploymentSchema,\n mcpbDeploymentSchema,\n]);\n\n// ============================================\n// CLI extension (issue #409)\n// ============================================\n//\n// `cli.commands` lets projects register custom `frontmcp <verb>` entries\n// that show up in `frontmcp --help` alongside the built-ins and run with\n// the project's full module graph (spawned via `tsx`).\n\n/**\n * Built-in CLI verbs that a project verb may NOT shadow. The reserved set\n * also includes Commander's global flag tokens so a verb literally named\n * `--help` can't be defined.\n */\nexport const RESERVED_VERBS: ReadonlySet<string> = new Set([\n 'dev',\n 'build',\n 'test',\n 'init',\n 'doctor',\n 'inspector',\n 'create',\n 'start',\n 'stop',\n 'restart',\n 'status',\n 'list',\n 'logs',\n 'socket',\n 'service',\n 'install',\n 'uninstall',\n 'configure',\n 'skills',\n 'mcpb',\n 'pm',\n 'help',\n 'version',\n '--help',\n '-h',\n '--version',\n '-V',\n '--list-commands',\n]);\n\nconst projectCommandArgumentSchema = z\n .object({\n name: z.string().min(1),\n required: z.boolean().optional(),\n description: z.string().optional(),\n variadic: z.boolean().optional(),\n })\n .strict();\n\nconst projectCommandOptionSchema = z\n .object({\n flags: z.string().min(1),\n description: z.string().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n })\n .strict();\n\nexport const projectCommandEntrySchema = z\n .object({\n entry: z.string().min(1),\n description: z.string().optional(),\n arguments: z\n .array(projectCommandArgumentSchema)\n .optional()\n .superRefine((args, ctx) => {\n if (!args) return;\n // Commander allows variadic only on the final positional. Catch it\n // here instead of letting it surface as a cryptic runtime error.\n for (let i = 0; i < args.length - 1; i++) {\n if (args[i].variadic) {\n ctx.addIssue({\n code: 'custom',\n path: [i, 'variadic'],\n message: `Argument \"${args[i].name}\" is variadic but is not the last argument. Variadic positionals must be last.`,\n });\n }\n }\n }),\n options: z.array(projectCommandOptionSchema).optional(),\n hidden: z.boolean().optional(),\n })\n .strict();\n\nexport const cliExtensionConfigSchema = z\n .object({\n commands: z\n .record(z.string(), projectCommandEntrySchema)\n .optional()\n .superRefine((map, ctx) => {\n if (!map) return;\n for (const name of Object.keys(map)) {\n if (RESERVED_VERBS.has(name)) {\n ctx.addIssue({\n code: 'custom',\n path: [name],\n message:\n `Command \"${name}\" collides with a built-in frontmcp verb. ` +\n `Choose a project-specific name (e.g. \"project:${name}\").`,\n });\n }\n if (!/^[a-zA-Z][a-zA-Z0-9:_-]*$/.test(name)) {\n ctx.addIssue({\n code: 'custom',\n path: [name],\n message: `\"${name}\" is not a valid verb name. Use letters, digits, \":\", \"_\", \"-\".`,\n });\n }\n }\n }),\n })\n .strict();\n\n// ============================================\n// Transport defaults (issue #400)\n// ============================================\n//\n// Per-protocol defaults consumed by `dev` / `inspector` / `pm start` / `pm\n// socket` so server-startup flags don't have to be re-typed on every CLI\n// invocation. Per-deployment `server.http.port` still wins where set.\n\nexport const transportHttpSchema = z\n .object({\n port: z.number().int().min(0).max(65535).optional(),\n path: z.string().optional(),\n host: z.string().optional(),\n })\n .strict();\n\nexport const transportStdioSchema = z\n .object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n })\n .strict();\n\nexport const transportConfigSchema = z\n .object({\n default: z.enum(['http', 'sse', 'stdio']).optional(),\n http: transportHttpSchema.optional(),\n stdio: transportStdioSchema.optional(),\n })\n .strict();\n\n// ============================================\n// Env overlays (issue #400)\n// ============================================\n//\n// `shared` applies to every mode; mode-specific overlays (`dev`, `test`,\n// `ship`) are merged on top. Effective env = `shared` ⊕ `<mode>` (later\n// wins). Loaded by `dev`/`test`/`pm` in addition to `.env`/`.env.local`\n// — file-based env still wins for parity with existing behavior.\n\nexport const envOverlaysSchema = z\n .object({\n shared: z.record(z.string(), z.string()).optional(),\n dev: z.record(z.string(), z.string()).optional(),\n test: z.record(z.string(), z.string()).optional(),\n ship: z.record(z.string(), z.string()).optional(),\n })\n .strict();\n\n// ============================================\n// MCP client connection snippets (issue #400)\n// ============================================\n//\n// Per-client connection descriptors consumed by `frontmcp eject-mcp-config\n// <client>` to emit ready-to-paste `.mcp.json` / `claude_desktop_config.json`\n// / Cursor / Windsurf / VS Code snippets.\n\nexport const clientConnectionSchema = z\n .object({\n name: z.string().optional(),\n transport: z.enum(['http', 'sse', 'stdio']),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n url: z.string().url().optional(),\n })\n .strict();\n\n// `z.record(z.enum([...]), …)` in Zod 4 treats every enum value as a\n// REQUIRED key — so a `clients: { 'claude-code': {…} }` config (which is\n// the shape the scaffold emits) fails validation with \"expected object,\n// received undefined\" for the other four clients. The Verdaccio E2E\n// surfaced this against the generated template. `partialRecord` is Zod 4's\n// canonical fix: same enum-keyed schema but every key is optional, which\n// matches the user-facing contract (clients are opt-in, not all-or-nothing).\nexport const clientsConfigSchema = z.partialRecord(\n z.enum(['claude-code', 'claude-desktop', 'cursor', 'windsurf', 'vscode']),\n clientConnectionSchema,\n);\n\n// ============================================\n// Test runner defaults (issue #400)\n// ============================================\n//\n// `frontmcp test` defaults — overridden by CLI flags (`--timeout`,\n// `--runInBand`, `--coverage`, `<patterns>`).\n\nexport const testConfigSchema = z\n .object({\n timeoutMs: z.number().int().positive().optional(),\n runInBand: z.boolean().optional(),\n testMatch: z.array(z.string()).optional(),\n coverage: z.boolean().optional(),\n })\n .strict();\n\n// ============================================\n// Skills install / export defaults (issue #400)\n// ============================================\n//\n// `frontmcp skills install` / `export` defaults — `install` is the list of\n// catalog skill names a project depends on so `frontmcp skills install`\n// with no arguments installs the curated set.\n\nexport const skillsCliConfigSchema = z\n .object({\n provider: z.enum(['claude', 'codex']).optional(),\n bundle: z.enum(['recommended', 'minimal', 'full', 'none']).optional(),\n install: z.array(z.string()).optional(),\n exportTarget: z.enum(['cursor', 'windsurf', 'copilot']).optional(),\n })\n .strict();\n\n// ============================================\n// Top-Level Config\n// ============================================\n\nexport const frontmcpConfigSchema = z\n .object({\n $schema: z.string().optional(),\n name: z\n .string()\n .min(1)\n .regex(/^[a-zA-Z0-9._-]+$/, 'Must be alphanumeric with .-_ only'),\n version: z.string().optional(),\n entry: z.string().optional(),\n nodeVersion: z.string().optional(),\n deployments: z.array(deploymentTargetSchema).min(1, 'At least one deployment target required'),\n build: buildOptionsSchema.optional(),\n\n // Issue #409 — project-defined CLI verbs\n cli: cliExtensionConfigSchema.optional(),\n // Issue #400 — config drives every command, not just `build`\n transport: transportConfigSchema.optional(),\n env: envOverlaysSchema.optional(),\n clients: clientsConfigSchema.optional(),\n test: testConfigSchema.optional(),\n skills: skillsCliConfigSchema.optional(),\n })\n .strict();\n\nexport type FrontMcpConfigInput = z.input<typeof frontmcpConfigSchema>;\nexport type FrontMcpConfigParsed = z.output<typeof frontmcpConfigSchema>;\n"]}
|