@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/adapters",
3
- "version": "1.4.0",
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.4.0",
68
- "@frontmcp/di": "1.4.0",
69
- "@frontmcp/utils": "1.4.0",
70
- "@frontmcp/sdk": "1.4.0",
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-types": "^12.1.3",
73
- "mcp-from-openapi": "2.3.0"
72
+ "mcp-from-openapi": "2.4.0",
73
+ "openapi-types": "^12.1.3"
74
74
  },
75
75
  "peerDependencies": {
76
- "@frontmcp/lazy-zod": "1.4.0"
76
+ "@frontmcp/lazy-zod": "1.5.0-rc.1"
77
77
  }
78
78
  }
@@ -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 bundleSourceSchema = z2.discriminatedUnion("type", [staticSourceSchema, npmSourceSchema, saasSourceSchema]);
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(specifier);
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
- bundle = await this.fetchOnce();
724
- await this.persistCache(bundle);
725
- } catch (e) {
726
- this.logger.warn(
727
- `[saas-source] initial pull failed (${e.message}); attempting cached bundle fallback`
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.logger.warn(`[saas-source] using cached bundle "${bundle.bundleId}@${bundle.version}"`);
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.4.0",
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.4.0",
68
- "@frontmcp/di": "1.4.0",
69
- "@frontmcp/utils": "1.4.0",
70
- "@frontmcp/sdk": "1.4.0",
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-types": "^12.1.3",
73
- "mcp-from-openapi": "2.3.0"
72
+ "mcp-from-openapi": "2.4.0",
73
+ "openapi-types": "^12.1.3"
74
74
  },
75
75
  "peerDependencies": {
76
- "@frontmcp/lazy-zod": "1.4.0"
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
- * ExecuteActionTool via `tryGet` so an unconfigured server is a no-op.
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 ExecuteActionTool. Calls return a promise that resolves after 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":"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"}
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;AAwBD;;;;;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"}
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;AA8IvC,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"}
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
- * `execute_action` meta-tool, which resolves `(skillId, actionId)` to one of these.
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 `execute_action` can actually
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":"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"}
1
+ {"version":3,"file":"bundle.types.d.ts","sourceRoot":"","sources":["../../../src/skills/bundle/bundle.types.ts"],"names":[],"mappings":"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"}