@frontmcp/adapters 1.4.0 → 1.5.0-rc.1
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/esm/package.json +8 -8
- package/esm/skills/index.mjs +258 -20
- package/package.json +8 -8
- package/skills/audit/audit-config.d.ts +1 -1
- package/skills/audit/audit-writer.d.ts +2 -1
- package/skills/audit/audit-writer.d.ts.map +1 -1
- package/skills/bundle/bundle-diff.d.ts.map +1 -1
- package/skills/bundle/bundle.schema.d.ts +1 -0
- package/skills/bundle/bundle.schema.d.ts.map +1 -1
- package/skills/bundle/bundle.types.d.ts +12 -3
- package/skills/bundle/bundle.types.d.ts.map +1 -1
- package/skills/deploy/manifest-to-config.d.ts +61 -0
- package/skills/deploy/manifest-to-config.d.ts.map +1 -0
- package/skills/index.d.ts +4 -2
- package/skills/index.d.ts.map +1 -1
- package/skills/index.js +261 -20
- package/skills/openapi/compile-skilled-bundle.d.ts +73 -0
- package/skills/openapi/compile-skilled-bundle.d.ts.map +1 -0
- package/skills/source-options.d.ts +8 -0
- package/skills/source-options.d.ts.map +1 -1
- package/skills/sources/index.d.ts +5 -4
- package/skills/sources/index.d.ts.map +1 -1
- package/skills/sources/inline.source.d.ts +16 -0
- package/skills/sources/inline.source.d.ts.map +1 -0
- package/skills/sources/npm.source.d.ts.map +1 -1
- package/skills/sources/saas-pull.source.d.ts +12 -2
- package/skills/sources/saas-pull.source.d.ts.map +1 -1
- package/skills/sources/skill-bundle-source.interface.d.ts +41 -0
- package/skills/sources/skill-bundle-source.interface.d.ts.map +1 -1
package/esm/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/adapters",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0-rc.1",
|
|
4
4
|
"description": "Adapters for the FrontMCP framework",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -64,15 +64,15 @@
|
|
|
64
64
|
"node": ">=24.0.0"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@frontmcp/auth": "1.
|
|
68
|
-
"@frontmcp/di": "1.
|
|
69
|
-
"@frontmcp/
|
|
70
|
-
"@frontmcp/
|
|
67
|
+
"@frontmcp/auth": "1.5.0-rc.1",
|
|
68
|
+
"@frontmcp/di": "1.5.0-rc.1",
|
|
69
|
+
"@frontmcp/sdk": "1.5.0-rc.1",
|
|
70
|
+
"@frontmcp/utils": "1.5.0-rc.1",
|
|
71
71
|
"js-yaml": "^4.1.0",
|
|
72
|
-
"openapi
|
|
73
|
-
"
|
|
72
|
+
"mcp-from-openapi": "2.4.0",
|
|
73
|
+
"openapi-types": "^12.1.3"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@frontmcp/lazy-zod": "1.
|
|
76
|
+
"@frontmcp/lazy-zod": "1.5.0-rc.1"
|
|
77
77
|
}
|
|
78
78
|
}
|
package/esm/skills/index.mjs
CHANGED
|
@@ -73,6 +73,9 @@ var operationDescriptorSchema = z.object({
|
|
|
73
73
|
mapper: z.array(parameterMapperSchema).max(256),
|
|
74
74
|
authBindingRef: z.string().min(1).max(128),
|
|
75
75
|
requiredAuthorities: authoritiesPolicySchema.optional(),
|
|
76
|
+
// Explicit opt-in that a policy-less op is intentionally public — consulted
|
|
77
|
+
// only when the deployment runs the executor with `unprotectedOps: 'deny'`.
|
|
78
|
+
public: z.boolean().optional(),
|
|
76
79
|
maxResponseBytes: z.number().int().positive().max(64 * 1024 * 1024).optional(),
|
|
77
80
|
timeoutMs: z.number().int().positive().max(6e5).optional(),
|
|
78
81
|
summary: z.string().max(512).optional(),
|
|
@@ -153,6 +156,7 @@ var OverlayParseError = class extends Error {
|
|
|
153
156
|
this.errors = errors;
|
|
154
157
|
this.name = "OverlayParseError";
|
|
155
158
|
}
|
|
159
|
+
errors;
|
|
156
160
|
};
|
|
157
161
|
function parseRaw(input) {
|
|
158
162
|
switch (input.kind) {
|
|
@@ -210,7 +214,7 @@ function parseOverlay(input) {
|
|
|
210
214
|
}
|
|
211
215
|
|
|
212
216
|
// libs/adapters/src/skills/bundle/bundle-diff.ts
|
|
213
|
-
var opEqual = (a, b) => a.operationId === b.operationId && a.serviceId === b.serviceId && a.httpMethod === b.httpMethod && a.pathTemplate === b.pathTemplate && a.authBindingRef === b.authBindingRef && JSON.stringify(a.mapper ?? null) === JSON.stringify(b.mapper ?? null) && JSON.stringify(a.inputSchema) === JSON.stringify(b.inputSchema) && JSON.stringify(a.outputSchema) === JSON.stringify(b.outputSchema) && JSON.stringify(a.requiredAuthorities ?? null) === JSON.stringify(b.requiredAuthorities ?? null) && a.maxResponseBytes === b.maxResponseBytes && a.timeoutMs === b.timeoutMs;
|
|
217
|
+
var opEqual = (a, b) => a.operationId === b.operationId && a.serviceId === b.serviceId && a.httpMethod === b.httpMethod && a.pathTemplate === b.pathTemplate && a.authBindingRef === b.authBindingRef && JSON.stringify(a.mapper ?? null) === JSON.stringify(b.mapper ?? null) && JSON.stringify(a.inputSchema) === JSON.stringify(b.inputSchema) && JSON.stringify(a.outputSchema) === JSON.stringify(b.outputSchema) && JSON.stringify(a.requiredAuthorities ?? null) === JSON.stringify(b.requiredAuthorities ?? null) && (a.public ?? false) === (b.public ?? false) && a.maxResponseBytes === b.maxResponseBytes && a.timeoutMs === b.timeoutMs;
|
|
214
218
|
var skillEqual = (a, b) => a.id === b.id && a.name === b.name && a.description === b.description && a.instructions === b.instructions && JSON.stringify(a.tags ?? []) === JSON.stringify(b.tags ?? []) && JSON.stringify(a.operationIds) === JSON.stringify(b.operationIds) && JSON.stringify(a.requiredAuthorities ?? null) === JSON.stringify(b.requiredAuthorities ?? null);
|
|
215
219
|
function diffBundles(oldBundle, newBundle) {
|
|
216
220
|
const oldSkills = new Map((oldBundle?.skills ?? []).map((s) => [s.id, s]));
|
|
@@ -451,6 +455,7 @@ var BundlePinnedError = class extends Error {
|
|
|
451
455
|
this.pinnedVersion = pinnedVersion;
|
|
452
456
|
this.name = "BundlePinnedError";
|
|
453
457
|
}
|
|
458
|
+
pinnedVersion;
|
|
454
459
|
};
|
|
455
460
|
|
|
456
461
|
// libs/adapters/src/skills/dependency/skill-dag.ts
|
|
@@ -460,6 +465,7 @@ var SkillDependencyCycleError = class extends Error {
|
|
|
460
465
|
this.cycle = cycle;
|
|
461
466
|
this.name = "SkillDependencyCycleError";
|
|
462
467
|
}
|
|
468
|
+
cycle;
|
|
463
469
|
};
|
|
464
470
|
var SkillDependencyMissingError = class extends Error {
|
|
465
471
|
constructor(skillId, missingId) {
|
|
@@ -468,6 +474,8 @@ var SkillDependencyMissingError = class extends Error {
|
|
|
468
474
|
this.missingId = missingId;
|
|
469
475
|
this.name = "SkillDependencyMissingError";
|
|
470
476
|
}
|
|
477
|
+
skillId;
|
|
478
|
+
missingId;
|
|
471
479
|
};
|
|
472
480
|
var SkillDependencyInvariantError = class extends Error {
|
|
473
481
|
constructor(message) {
|
|
@@ -630,7 +638,22 @@ var saasSourceSchema = z2.object({
|
|
|
630
638
|
/** Expected issuer (`iss`) claim. */
|
|
631
639
|
expectedIssuer: z2.string().min(1)
|
|
632
640
|
});
|
|
633
|
-
var
|
|
641
|
+
var inlineSourceSchema = z2.object({
|
|
642
|
+
type: z2.literal("inline"),
|
|
643
|
+
/**
|
|
644
|
+
* The skilled-OpenAPI bundle object, embedded directly (no filesystem, no
|
|
645
|
+
* network). The right source for V8-isolate runtimes (Cloudflare Workers),
|
|
646
|
+
* where `static` (fs) and `npm` can't run and `saas` needs an endpoint. The
|
|
647
|
+
* object is validated by the overlay parser, same as file/remote bundles.
|
|
648
|
+
*/
|
|
649
|
+
content: z2.unknown()
|
|
650
|
+
});
|
|
651
|
+
var bundleSourceSchema = z2.discriminatedUnion("type", [
|
|
652
|
+
staticSourceSchema,
|
|
653
|
+
npmSourceSchema,
|
|
654
|
+
saasSourceSchema,
|
|
655
|
+
inlineSourceSchema
|
|
656
|
+
]);
|
|
634
657
|
var signatureKeySchema = z2.object({
|
|
635
658
|
/** Stable key id (matches `kid` claim in the bundle JWT). */
|
|
636
659
|
keyId: z2.string().min(1),
|
|
@@ -640,13 +663,50 @@ var signatureKeySchema = z2.object({
|
|
|
640
663
|
publicKeyPem: z2.string().min(1)
|
|
641
664
|
});
|
|
642
665
|
|
|
666
|
+
// libs/adapters/src/skills/sources/inline.source.ts
|
|
667
|
+
var InlineSource = class {
|
|
668
|
+
constructor(options, logger) {
|
|
669
|
+
this.options = options;
|
|
670
|
+
this.logger = logger;
|
|
671
|
+
}
|
|
672
|
+
options;
|
|
673
|
+
logger;
|
|
674
|
+
id = "inline:bundle";
|
|
675
|
+
listeners = /* @__PURE__ */ new Set();
|
|
676
|
+
async start() {
|
|
677
|
+
const bundle = this.parse();
|
|
678
|
+
for (const fn of this.listeners) {
|
|
679
|
+
try {
|
|
680
|
+
fn(bundle);
|
|
681
|
+
} catch (e) {
|
|
682
|
+
this.logger.warn(`[inline-source] listener threw: ${e.message}`);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
onChange(listener) {
|
|
687
|
+
this.listeners.add(listener);
|
|
688
|
+
return () => {
|
|
689
|
+
this.listeners.delete(listener);
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
async stop() {
|
|
693
|
+
this.listeners.clear();
|
|
694
|
+
}
|
|
695
|
+
parse() {
|
|
696
|
+
return parseOverlay({ kind: "object", content: this.options.content });
|
|
697
|
+
}
|
|
698
|
+
};
|
|
699
|
+
|
|
643
700
|
// libs/adapters/src/skills/sources/npm.source.ts
|
|
701
|
+
var npmDynamicImport;
|
|
644
702
|
var NpmSource = class {
|
|
645
703
|
constructor(options, logger) {
|
|
646
704
|
this.options = options;
|
|
647
705
|
this.logger = logger;
|
|
648
706
|
this.id = `npm:${this.options.packageName}${this.options.exportName ? `#${this.options.exportName}` : ""}`;
|
|
649
707
|
}
|
|
708
|
+
options;
|
|
709
|
+
logger;
|
|
650
710
|
id;
|
|
651
711
|
listeners = /* @__PURE__ */ new Set();
|
|
652
712
|
cached;
|
|
@@ -686,9 +746,16 @@ var NpmSource = class {
|
|
|
686
746
|
}
|
|
687
747
|
return parseOverlay({ kind: "object", content: exported });
|
|
688
748
|
}
|
|
689
|
-
// Indirected so tests can stub.
|
|
749
|
+
// Indirected so tests can stub. The dynamic `import()` is wrapped in a
|
|
750
|
+
// lazily-built `new Function` so static bundlers (esbuild / `wrangler dev` /
|
|
751
|
+
// miniflare) don't try to resolve the runtime-computed package specifier at
|
|
752
|
+
// build time — installing an npm bundle is a Node-only path that never runs
|
|
753
|
+
// on a V8 isolate, but `createBundleSource` keeps NpmSource statically
|
|
754
|
+
// reachable in the worker bundle. The Function is only built when this runs
|
|
755
|
+
// (Node), so a Worker that merely bundles it never evaluates it.
|
|
690
756
|
dynamicImport(specifier) {
|
|
691
|
-
return import(
|
|
757
|
+
npmDynamicImport ??= new Function("s", "return import(s)");
|
|
758
|
+
return npmDynamicImport(specifier);
|
|
692
759
|
}
|
|
693
760
|
notify(bundle) {
|
|
694
761
|
for (const fn of this.listeners) {
|
|
@@ -706,35 +773,49 @@ import { dirname, ensureDir, pathResolve, readFile, writeFile } from "@frontmcp/
|
|
|
706
773
|
var DEFAULT_CACHE_DIR = ".frontmcp/skilled-openapi";
|
|
707
774
|
var DEFAULT_PULL_TIMEOUT_MS = 3e4;
|
|
708
775
|
var SaasPullSource = class {
|
|
709
|
-
constructor(options, cacheDir, logger) {
|
|
776
|
+
constructor(options, cacheDir, logger, deps = {}) {
|
|
710
777
|
this.options = options;
|
|
711
778
|
this.cacheDir = cacheDir;
|
|
712
779
|
this.logger = logger;
|
|
780
|
+
this.deps = deps;
|
|
713
781
|
this.id = `saas:${this.options.endpoint}`;
|
|
714
782
|
}
|
|
783
|
+
options;
|
|
784
|
+
cacheDir;
|
|
785
|
+
logger;
|
|
786
|
+
deps;
|
|
715
787
|
id;
|
|
716
788
|
listeners = /* @__PURE__ */ new Set();
|
|
717
789
|
pollHandle;
|
|
718
790
|
inFlight = false;
|
|
719
791
|
stopped = false;
|
|
720
792
|
async start() {
|
|
793
|
+
if (this.stopped || this.inFlight) {
|
|
794
|
+
this.schedulePoll();
|
|
795
|
+
return;
|
|
796
|
+
}
|
|
797
|
+
this.inFlight = true;
|
|
721
798
|
let bundle;
|
|
722
799
|
try {
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
bundle = await this.loadCache();
|
|
730
|
-
if (!bundle) {
|
|
731
|
-
throw new Error(
|
|
732
|
-
`[saas-source] initial pull failed and no cached bundle is available at ${this.cachePath()}: ${e.message}`
|
|
800
|
+
try {
|
|
801
|
+
bundle = await this.fetchOnce();
|
|
802
|
+
await this.persistCache(bundle);
|
|
803
|
+
} catch (e) {
|
|
804
|
+
this.logger.warn(
|
|
805
|
+
`[saas-source] initial pull failed (${e.message}); attempting cached bundle fallback`
|
|
733
806
|
);
|
|
807
|
+
bundle = await this.loadCache();
|
|
808
|
+
if (!bundle) {
|
|
809
|
+
throw new Error(
|
|
810
|
+
`[saas-source] initial pull failed and no cached bundle is available at ${this.cachePath()}: ${e.message}`
|
|
811
|
+
);
|
|
812
|
+
}
|
|
813
|
+
this.logger.warn(`[saas-source] using cached bundle "${bundle.bundleId}@${bundle.version}"`);
|
|
734
814
|
}
|
|
735
|
-
this.
|
|
815
|
+
this.notify(bundle);
|
|
816
|
+
} finally {
|
|
817
|
+
this.inFlight = false;
|
|
736
818
|
}
|
|
737
|
-
this.notify(bundle);
|
|
738
819
|
this.schedulePoll();
|
|
739
820
|
}
|
|
740
821
|
onChange(listener) {
|
|
@@ -752,12 +833,32 @@ var SaasPullSource = class {
|
|
|
752
833
|
this.listeners.clear();
|
|
753
834
|
}
|
|
754
835
|
schedulePoll() {
|
|
755
|
-
if (this.stopped) return;
|
|
836
|
+
if (this.stopped || this.deps.disablePolling) return;
|
|
837
|
+
if (this.pollHandle) clearTimeout(this.pollHandle);
|
|
756
838
|
this.pollHandle = setTimeout(() => {
|
|
757
839
|
void this.pollOnce();
|
|
758
840
|
}, this.options.pollIntervalMs);
|
|
759
841
|
this.pollHandle.unref?.();
|
|
760
842
|
}
|
|
843
|
+
/**
|
|
844
|
+
* Manually pull a fresh bundle, persist it, and notify listeners. Drive this
|
|
845
|
+
* from a Cron Trigger / Durable Object alarm on runtimes without background
|
|
846
|
+
* timers (where `disablePolling` is set). Single-flight: returns `undefined`
|
|
847
|
+
* if a pull is already in flight; throws if the pull itself fails (the caller
|
|
848
|
+
* — e.g. a scheduled handler — decides how to surface it).
|
|
849
|
+
*/
|
|
850
|
+
async refresh() {
|
|
851
|
+
if (this.stopped || this.inFlight) return void 0;
|
|
852
|
+
this.inFlight = true;
|
|
853
|
+
try {
|
|
854
|
+
const bundle = await this.fetchOnce();
|
|
855
|
+
await this.persistCache(bundle);
|
|
856
|
+
this.notify(bundle);
|
|
857
|
+
return bundle;
|
|
858
|
+
} finally {
|
|
859
|
+
this.inFlight = false;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
761
862
|
async pollOnce() {
|
|
762
863
|
if (this.stopped) return;
|
|
763
864
|
if (this.inFlight) {
|
|
@@ -808,6 +909,10 @@ var SaasPullSource = class {
|
|
|
808
909
|
}
|
|
809
910
|
async persistCache(bundle) {
|
|
810
911
|
try {
|
|
912
|
+
if (this.deps.cache) {
|
|
913
|
+
await this.deps.cache.write(bundle);
|
|
914
|
+
return;
|
|
915
|
+
}
|
|
811
916
|
const filePath = this.cachePath();
|
|
812
917
|
await ensureDir(dirname(filePath));
|
|
813
918
|
await writeFile(filePath, JSON.stringify(bundle));
|
|
@@ -817,6 +922,11 @@ var SaasPullSource = class {
|
|
|
817
922
|
}
|
|
818
923
|
async loadCache() {
|
|
819
924
|
try {
|
|
925
|
+
if (this.deps.cache) {
|
|
926
|
+
const cached = await this.deps.cache.read();
|
|
927
|
+
if (cached === void 0 || cached === null) return void 0;
|
|
928
|
+
return parseOverlay({ kind: "object", content: cached });
|
|
929
|
+
}
|
|
820
930
|
const filePath = this.cachePath();
|
|
821
931
|
const raw = await readFile(filePath, "utf8");
|
|
822
932
|
return parseOverlay({ kind: "json", content: raw });
|
|
@@ -843,6 +953,8 @@ var StaticSource = class {
|
|
|
843
953
|
this.logger = logger;
|
|
844
954
|
this.id = `static:${this.options.path}`;
|
|
845
955
|
}
|
|
956
|
+
options;
|
|
957
|
+
logger;
|
|
846
958
|
id;
|
|
847
959
|
listeners = /* @__PURE__ */ new Set();
|
|
848
960
|
watcher;
|
|
@@ -927,17 +1039,74 @@ var StaticSource = class {
|
|
|
927
1039
|
};
|
|
928
1040
|
|
|
929
1041
|
// libs/adapters/src/skills/sources/index.ts
|
|
930
|
-
function createBundleSource(source, cacheDir, logger) {
|
|
1042
|
+
function createBundleSource(source, cacheDir, logger, deps) {
|
|
931
1043
|
switch (source.type) {
|
|
932
1044
|
case "static":
|
|
933
1045
|
return new StaticSource(source, logger);
|
|
934
1046
|
case "npm":
|
|
935
1047
|
return new NpmSource(source, logger);
|
|
936
1048
|
case "saas":
|
|
937
|
-
return new SaasPullSource(source, cacheDir, logger);
|
|
1049
|
+
return new SaasPullSource(source, cacheDir, logger, deps);
|
|
1050
|
+
case "inline":
|
|
1051
|
+
return new InlineSource(source, logger);
|
|
938
1052
|
}
|
|
939
1053
|
}
|
|
940
1054
|
|
|
1055
|
+
// libs/adapters/src/skills/openapi/compile-skilled-bundle.ts
|
|
1056
|
+
import { OpenAPIToolGenerator } from "mcp-from-openapi";
|
|
1057
|
+
async function compileSkilledBundleFromOpenApi(openapi, skills, options) {
|
|
1058
|
+
const serviceId = options.serviceId ?? "api";
|
|
1059
|
+
const baseUrl = options.baseUrl ?? openapi.servers?.[0]?.url;
|
|
1060
|
+
if (!baseUrl) {
|
|
1061
|
+
throw new Error("compileSkilledBundleFromOpenApi: no baseUrl \u2014 pass options.baseUrl or declare servers[] in the OpenAPI doc.");
|
|
1062
|
+
}
|
|
1063
|
+
const generator = await OpenAPIToolGenerator.fromJSON(openapi);
|
|
1064
|
+
const tools = await generator.generateTools();
|
|
1065
|
+
const byOperationId = /* @__PURE__ */ new Map();
|
|
1066
|
+
for (const tool of tools) {
|
|
1067
|
+
const opId = tool.metadata.operationId;
|
|
1068
|
+
if (opId) byOperationId.set(opId, tool);
|
|
1069
|
+
}
|
|
1070
|
+
const referenced = /* @__PURE__ */ new Set();
|
|
1071
|
+
for (const skill of skills) for (const opId of skill.operationIds) referenced.add(opId);
|
|
1072
|
+
const operations = {};
|
|
1073
|
+
for (const opId of referenced) {
|
|
1074
|
+
const tool = byOperationId.get(opId);
|
|
1075
|
+
if (!tool) {
|
|
1076
|
+
throw new Error(`compileSkilledBundleFromOpenApi: operationId "${opId}" is referenced by a skill but not defined in the OpenAPI document.`);
|
|
1077
|
+
}
|
|
1078
|
+
operations[opId] = {
|
|
1079
|
+
operationId: opId,
|
|
1080
|
+
serviceId,
|
|
1081
|
+
httpMethod: tool.metadata.method.toUpperCase(),
|
|
1082
|
+
pathTemplate: tool.metadata.path,
|
|
1083
|
+
summary: tool.metadata.operationSummary ?? tool.description,
|
|
1084
|
+
inputSchema: tool.inputSchema,
|
|
1085
|
+
outputSchema: tool.outputSchema ?? { type: "object" },
|
|
1086
|
+
mapper: tool.mapper,
|
|
1087
|
+
authBindingRef: "default"
|
|
1088
|
+
};
|
|
1089
|
+
}
|
|
1090
|
+
return {
|
|
1091
|
+
schemaVersion: 1,
|
|
1092
|
+
bundleId: options.bundleId,
|
|
1093
|
+
version: options.version,
|
|
1094
|
+
generatedAt: options.generatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
1095
|
+
sourceDigest: options.sourceDigest ?? "0".repeat(64),
|
|
1096
|
+
services: [{ id: serviceId, baseUrl }],
|
|
1097
|
+
authBindings: { default: options.authBinding ?? { kind: "none" } },
|
|
1098
|
+
skills: skills.map((s) => ({
|
|
1099
|
+
id: s.id,
|
|
1100
|
+
name: s.name,
|
|
1101
|
+
description: s.description,
|
|
1102
|
+
instructions: s.instructions,
|
|
1103
|
+
tags: s.tags ?? [],
|
|
1104
|
+
operationIds: s.operationIds
|
|
1105
|
+
})),
|
|
1106
|
+
operations
|
|
1107
|
+
};
|
|
1108
|
+
}
|
|
1109
|
+
|
|
941
1110
|
// libs/adapters/src/skills/sources/filesystem-skills.source.ts
|
|
942
1111
|
import {
|
|
943
1112
|
basename,
|
|
@@ -962,6 +1131,7 @@ var FilesystemSkillsSource = class {
|
|
|
962
1131
|
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
963
1132
|
this.id = `filesystem-skills:${this.options.skillsDir}`;
|
|
964
1133
|
}
|
|
1134
|
+
logger;
|
|
965
1135
|
id;
|
|
966
1136
|
options;
|
|
967
1137
|
listeners = /* @__PURE__ */ new Set();
|
|
@@ -1360,6 +1530,8 @@ var BundlePushJwtVerifier = class {
|
|
|
1360
1530
|
jwksUri: options.jwksUri
|
|
1361
1531
|
};
|
|
1362
1532
|
}
|
|
1533
|
+
options;
|
|
1534
|
+
logger;
|
|
1363
1535
|
providerRef;
|
|
1364
1536
|
jwks;
|
|
1365
1537
|
/**
|
|
@@ -1762,6 +1934,8 @@ var StorageAdapterAuditStore = class {
|
|
|
1762
1934
|
this.adapter = adapter;
|
|
1763
1935
|
this.options = options;
|
|
1764
1936
|
}
|
|
1937
|
+
adapter;
|
|
1938
|
+
options;
|
|
1765
1939
|
get sequenceKey() {
|
|
1766
1940
|
return this.options.sequenceKey ?? SKILL_AUDIT_KEYS.sequence;
|
|
1767
1941
|
}
|
|
@@ -1838,6 +2012,10 @@ var SkillAuditWriter = class {
|
|
|
1838
2012
|
this.subjectHashSecret = options.subjectHashSecret ?? this.deriveDefaultSubjectSecret();
|
|
1839
2013
|
this.maxQueueDepth = options.maxQueueDepth ?? SKILL_AUDIT_QUEUE_MAX;
|
|
1840
2014
|
}
|
|
2015
|
+
store;
|
|
2016
|
+
signer;
|
|
2017
|
+
logger;
|
|
2018
|
+
metrics;
|
|
1841
2019
|
/**
|
|
1842
2020
|
* Single-flight queue: every append() chains onto this promise so the
|
|
1843
2021
|
* read-tail-then-append-with-prevHash sequence stays atomic per process.
|
|
@@ -2452,6 +2630,63 @@ function crossValidateManifest(manifest) {
|
|
|
2452
2630
|
return errors.length === 0 ? { ok: true } : { ok: false, errors };
|
|
2453
2631
|
}
|
|
2454
2632
|
|
|
2633
|
+
// libs/adapters/src/skills/deploy/manifest-to-config.ts
|
|
2634
|
+
function specStem(ref) {
|
|
2635
|
+
const noQuery = ref.split("?")[0].split("#")[0];
|
|
2636
|
+
const base = noQuery.split("/").pop() ?? noQuery;
|
|
2637
|
+
const stem = base.replace(/\.(ya?ml|json)$/i, "");
|
|
2638
|
+
const safe = (stem || base).replace(/[^a-zA-Z0-9_.-]/g, "-");
|
|
2639
|
+
return safe || "spec";
|
|
2640
|
+
}
|
|
2641
|
+
function normalizeSpec(source) {
|
|
2642
|
+
if (typeof source === "string") {
|
|
2643
|
+
const id = specStem(source);
|
|
2644
|
+
return { id, spec: source, bindingName: id };
|
|
2645
|
+
}
|
|
2646
|
+
return {
|
|
2647
|
+
id: source.id,
|
|
2648
|
+
spec: source.spec,
|
|
2649
|
+
baseUrl: source.baseUrl,
|
|
2650
|
+
bindingName: source.bindingName ?? source.id
|
|
2651
|
+
};
|
|
2652
|
+
}
|
|
2653
|
+
function buildFrontMcpConfigFromManifest(manifest) {
|
|
2654
|
+
const info = {
|
|
2655
|
+
name: manifest.server.info.name,
|
|
2656
|
+
version: manifest.server.info.version,
|
|
2657
|
+
...manifest.server.info.title !== void 0 ? { title: manifest.server.info.title } : {}
|
|
2658
|
+
};
|
|
2659
|
+
const skills = {
|
|
2660
|
+
source: manifest.skills.source,
|
|
2661
|
+
...manifest.skills.alwaysLoad ? { alwaysLoad: manifest.skills.alwaysLoad } : {},
|
|
2662
|
+
...manifest.skills.tags ? { tags: manifest.skills.tags } : {}
|
|
2663
|
+
};
|
|
2664
|
+
let specs = [];
|
|
2665
|
+
let specsDir;
|
|
2666
|
+
if (typeof manifest.specs === "string") {
|
|
2667
|
+
specsDir = manifest.specs;
|
|
2668
|
+
} else {
|
|
2669
|
+
specs = manifest.specs.map(normalizeSpec);
|
|
2670
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2671
|
+
for (const s of specs) {
|
|
2672
|
+
if (seen.has(s.id)) {
|
|
2673
|
+
throw new Error(
|
|
2674
|
+
`manifest specs: duplicate spec id "${s.id}" (derived from the filename stem). Give the colliding spec an explicit { id } in frontmcp.deploy.yaml.`
|
|
2675
|
+
);
|
|
2676
|
+
}
|
|
2677
|
+
seen.add(s.id);
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
return {
|
|
2681
|
+
info,
|
|
2682
|
+
...manifest.server.instructions !== void 0 ? { instructions: manifest.server.instructions } : {},
|
|
2683
|
+
skillsConfig: { enabled: true, injectInstructions: "append" },
|
|
2684
|
+
skills,
|
|
2685
|
+
specs,
|
|
2686
|
+
...specsDir !== void 0 ? { specsDir } : {}
|
|
2687
|
+
};
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2455
2690
|
// libs/adapters/src/skills/classifier/openapi-classify.ts
|
|
2456
2691
|
function classifyOperations(specId, ops) {
|
|
2457
2692
|
if (!specId || specId.length === 0) {
|
|
@@ -2770,6 +3005,7 @@ export {
|
|
|
2770
3005
|
ClassificationRegistry,
|
|
2771
3006
|
FilesystemSkillsSource,
|
|
2772
3007
|
Hs256AuditSigner,
|
|
3008
|
+
InlineSource,
|
|
2773
3009
|
MemoryAuditStore,
|
|
2774
3010
|
NpmSource,
|
|
2775
3011
|
OverlayParseError,
|
|
@@ -2789,6 +3025,7 @@ export {
|
|
|
2789
3025
|
WebhookReplayGuard,
|
|
2790
3026
|
applyClassificationOverrides,
|
|
2791
3027
|
applyEnvironmentOverlay,
|
|
3028
|
+
buildFrontMcpConfigFromManifest,
|
|
2792
3029
|
buildKnownOps,
|
|
2793
3030
|
buildResourceChangeNotification,
|
|
2794
3031
|
bundleDigest,
|
|
@@ -2798,6 +3035,7 @@ export {
|
|
|
2798
3035
|
canonicalizeRecordForSigning,
|
|
2799
3036
|
classifyOne,
|
|
2800
3037
|
classifyOperations,
|
|
3038
|
+
compileSkilledBundleFromOpenApi,
|
|
2801
3039
|
createBundleSource,
|
|
2802
3040
|
crossValidate,
|
|
2803
3041
|
crossValidateManifest,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/adapters",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0-rc.1",
|
|
4
4
|
"description": "Adapters for the FrontMCP framework",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -64,15 +64,15 @@
|
|
|
64
64
|
"node": ">=24.0.0"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@frontmcp/auth": "1.
|
|
68
|
-
"@frontmcp/di": "1.
|
|
69
|
-
"@frontmcp/
|
|
70
|
-
"@frontmcp/
|
|
67
|
+
"@frontmcp/auth": "1.5.0-rc.1",
|
|
68
|
+
"@frontmcp/di": "1.5.0-rc.1",
|
|
69
|
+
"@frontmcp/sdk": "1.5.0-rc.1",
|
|
70
|
+
"@frontmcp/utils": "1.5.0-rc.1",
|
|
71
71
|
"js-yaml": "^4.1.0",
|
|
72
|
-
"openapi
|
|
73
|
-
"
|
|
72
|
+
"mcp-from-openapi": "2.4.0",
|
|
73
|
+
"openapi-types": "^12.1.3"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@frontmcp/lazy-zod": "1.
|
|
76
|
+
"@frontmcp/lazy-zod": "1.5.0-rc.1"
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -81,7 +81,7 @@ export interface SkillAuditConfig {
|
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* DI token for the audit writer service. Resolved lazily by the
|
|
84
|
-
*
|
|
84
|
+
* run_workflow tool via `tryGet` so an unconfigured server is a no-op.
|
|
85
85
|
*/
|
|
86
86
|
export declare const SkillAuditWriterToken: Token<SkillAuditWriter>;
|
|
87
87
|
//# sourceMappingURL=audit-config.d.ts.map
|
|
@@ -89,7 +89,8 @@ export interface SkillAuditWriterOptions {
|
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
91
|
* Audit writer service. Constructed once per scope and resolved out of DI
|
|
92
|
-
* by the
|
|
92
|
+
* by the skill-action executor (`executeSkillAction`, used by `run_workflow`).
|
|
93
|
+
* Calls return a promise that resolves after the
|
|
93
94
|
* chained store work completes — but the tool detaches that promise so a
|
|
94
95
|
* slow audit backend never directly slows every skill invocation.
|
|
95
96
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-writer.d.ts","sourceRoot":"","sources":["../../../src/skills/audit/audit-writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-writer.d.ts","sourceRoot":"","sources":["../../../src/skills/audit/audit-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-diff.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle-diff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sDAAsD;IACtD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,6BAA6B;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"bundle-diff.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle-diff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sDAAsD;IACtD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,6BAA6B;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAC;CACjB;AAyBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,EAAE,SAAS,EAAE,cAAc,GAAG,UAAU,CAoDxG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAM1D"}
|
|
@@ -71,6 +71,7 @@ export declare const resolvedBundleSchema: import("@frontmcp/lazy-zod").ZodObjec
|
|
|
71
71
|
}, import("zod/v4/core").$loose>>;
|
|
72
72
|
authBindingRef: import("@frontmcp/lazy-zod").ZodString;
|
|
73
73
|
requiredAuthorities: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodUnknown>>;
|
|
74
|
+
public: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
74
75
|
maxResponseBytes: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
75
76
|
timeoutMs: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
76
77
|
summary: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.schema.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle.schema.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle.schema.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle.schema.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAiJvC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAwBtB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgClG"}
|
|
@@ -33,7 +33,8 @@ export interface ServiceDescriptor {
|
|
|
33
33
|
/**
|
|
34
34
|
* One executable operation derived from an OpenAPI `operationId`. The MCP client
|
|
35
35
|
* never sees these directly — they are invokable only through the plugin's
|
|
36
|
-
* `
|
|
36
|
+
* `run_workflow` meta-tool, whose sandboxed `callTool(actionId, …)` resolves to
|
|
37
|
+
* one of these.
|
|
37
38
|
*
|
|
38
39
|
* The descriptor is shaped so it can be projected onto an `McpOpenAPITool` for
|
|
39
40
|
* reuse of `@frontmcp/adapters/openapi`'s `buildRequest` / `parseResponse`
|
|
@@ -66,6 +67,14 @@ export interface OperationDescriptor {
|
|
|
66
67
|
authBindingRef: string;
|
|
67
68
|
/** Optional ABAC policy required to invoke this op. */
|
|
68
69
|
requiredAuthorities?: AuthoritiesPolicy;
|
|
70
|
+
/**
|
|
71
|
+
* Explicitly mark this op as public (no authorization required). Only
|
|
72
|
+
* consulted when the deployment runs with `unprotectedOps: 'deny'`: a
|
|
73
|
+
* policy-less op is blocked by default-deny UNLESS the bundle opts in with
|
|
74
|
+
* `public: true`. Under the default `unprotectedOps: 'allow'` this field has
|
|
75
|
+
* no effect (policy-less ops are already callable).
|
|
76
|
+
*/
|
|
77
|
+
public?: boolean;
|
|
69
78
|
/** Optional override of the response cap (bytes). */
|
|
70
79
|
maxResponseBytes?: number;
|
|
71
80
|
/** Optional override of the per-op timeout (ms). */
|
|
@@ -135,8 +144,8 @@ export interface ResolvedBundle {
|
|
|
135
144
|
*
|
|
136
145
|
* Throws if any of the skill's `operationIds` is missing from `ops`. Silently
|
|
137
146
|
* dropping unknown ids would let a malformed bundle apply with the skill's
|
|
138
|
-
* advertised action list out of sync with what `
|
|
139
|
-
* resolve, so the bundle apply path treats this as a hard failure that trips
|
|
147
|
+
* advertised action list out of sync with what `run_workflow`'s `callTool` can
|
|
148
|
+
* actually resolve, so the bundle apply path treats this as a hard failure that trips
|
|
140
149
|
* the rollback.
|
|
141
150
|
*/
|
|
142
151
|
export declare function bundleSkillToActions(skill: BundledSkill, ops: Record<string, OperationDescriptor>): SkillAction[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.types.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle.types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,mFAAmF;AACnF,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9E,2FAA2F;AAC3F,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,iFAAiF;AACjF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"bundle.types.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle.types.ts"],"names":[],"mappings":"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"}
|