@frontmcp/plugin-skilled-openapi 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.
Files changed (39) hide show
  1. package/README.md +123 -17
  2. package/esm/index.mjs +640 -433
  3. package/esm/package.json +19 -8
  4. package/executor/execute-skill-action.d.ts +44 -0
  5. package/executor/execute-skill-action.d.ts.map +1 -0
  6. package/executor/host-concurrency.d.ts +9 -0
  7. package/executor/host-concurrency.d.ts.map +1 -0
  8. package/executor/openapi-runtime.d.ts.map +1 -1
  9. package/executor/ssrf-guard.d.ts +4 -0
  10. package/executor/ssrf-guard.d.ts.map +1 -1
  11. package/index.d.ts +1 -0
  12. package/index.d.ts.map +1 -1
  13. package/index.js +643 -421
  14. package/package.json +19 -8
  15. package/registry/hidden-op.registry.d.ts +15 -1
  16. package/registry/hidden-op.registry.d.ts.map +1 -1
  17. package/security/authority-guard.d.ts +35 -5
  18. package/security/authority-guard.d.ts.map +1 -1
  19. package/skilled-openapi.plugin.d.ts +41 -2
  20. package/skilled-openapi.plugin.d.ts.map +1 -1
  21. package/skilled-openapi.symbols.d.ts +3 -0
  22. package/skilled-openapi.symbols.d.ts.map +1 -1
  23. package/skilled-openapi.types.d.ts +22 -0
  24. package/skilled-openapi.types.d.ts.map +1 -1
  25. package/sync/bundle-sync.service.d.ts +1 -1
  26. package/sync/bundle-sync.service.d.ts.map +1 -1
  27. package/tools/operation-tool.factory.d.ts +5 -4
  28. package/tools/operation-tool.factory.d.ts.map +1 -1
  29. package/tools/run-workflow.schema.d.ts +28 -0
  30. package/tools/run-workflow.schema.d.ts.map +1 -0
  31. package/tools/run-workflow.tool.d.ts +6 -0
  32. package/tools/run-workflow.tool.d.ts.map +1 -0
  33. package/tools/search-skill.schema.d.ts +5 -1
  34. package/tools/search-skill.schema.d.ts.map +1 -1
  35. package/tools/search-skill.tool.d.ts.map +1 -1
  36. package/tools/execute-action.schema.d.ts +0 -26
  37. package/tools/execute-action.schema.d.ts.map +0 -1
  38. package/tools/execute-action.tool.d.ts +0 -6
  39. package/tools/execute-action.tool.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@frontmcp/plugin-skilled-openapi",
3
- "version": "1.4.0",
4
- "description": "FrontMCP plugin: serve a customer's OpenAPI spec as skill bundles (signed, OpenAPI-Overlay-based) with hidden per-operation tools mediated by three meta-tools (search_skill / load_skill / execute_action).",
3
+ "version": "1.5.0-rc.1",
4
+ "description": "FrontMCP plugin: serve a customer's OpenAPI spec as skill bundles (signed, OpenAPI-Overlay-based) with hidden per-operation tools mediated by three meta-tools (search_skill / load_skill / run_workflow — the last runs an enclave-sandboxed AgentScript that orchestrates the loaded skills' operations).",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "license": "Apache-2.0",
7
+ "engines": {
8
+ "node": ">=24.0.0"
9
+ },
7
10
  "keywords": [
8
11
  "mcp",
9
12
  "frontmcp",
@@ -45,14 +48,22 @@
45
48
  }
46
49
  },
47
50
  "dependencies": {
48
- "@frontmcp/adapters": "1.4.0",
49
- "@frontmcp/auth": "1.4.0",
50
- "@frontmcp/protocol": "1.4.0",
51
- "@frontmcp/sdk": "1.4.0",
52
- "@frontmcp/utils": "1.4.0"
51
+ "@frontmcp/adapters": "1.5.0-rc.1",
52
+ "@frontmcp/auth": "1.5.0-rc.1",
53
+ "@frontmcp/sdk": "1.5.0-rc.1"
53
54
  },
54
55
  "peerDependencies": {
55
- "@frontmcp/lazy-zod": "1.4.0"
56
+ "@enclave-vm/ast": "*",
57
+ "@enclave-vm/core": "*",
58
+ "@frontmcp/lazy-zod": "1.5.0-rc.1"
59
+ },
60
+ "peerDependenciesMeta": {
61
+ "@enclave-vm/ast": {
62
+ "optional": true
63
+ },
64
+ "@enclave-vm/core": {
65
+ "optional": true
66
+ }
56
67
  },
57
68
  "devDependencies": {
58
69
  "reflect-metadata": "^0.2.2"
@@ -1,4 +1,4 @@
1
- import type { AuthBinding, OperationDescriptor, ServiceDescriptor } from '@frontmcp/adapters/skills';
1
+ import type { AuthBinding, AuthoritiesPolicy, OperationDescriptor, ServiceDescriptor } from '@frontmcp/adapters/skills';
2
2
  /**
3
3
  * Plugin-private map of `(skillId, actionId) -> OperationDescriptor`.
4
4
  *
@@ -14,6 +14,12 @@ import type { AuthBinding, OperationDescriptor, ServiceDescriptor } from '@front
14
14
  export interface HiddenOpEntry {
15
15
  /** Skill that owns this operation (used for ABAC namespacing). */
16
16
  skillId: string;
17
+ /**
18
+ * Skill-level required-authorities policy (`BundledSkill.requiredAuthorities`),
19
+ * pinned with the entry. AND-ed with the op-level policy at execution time so
20
+ * a skill-wide gate actually protects every op of the skill (C2).
21
+ */
22
+ skillRequiredAuthorities?: AuthoritiesPolicy;
17
23
  /** Operation descriptor (immutable for the lifetime of this entry). */
18
24
  op: OperationDescriptor;
19
25
  /** Resolved service this op lives in. */
@@ -35,6 +41,14 @@ export declare class HiddenOpRegistry {
35
41
  * as a structured error to the caller.
36
42
  */
37
43
  get(skillId: string, actionId: string): HiddenOpEntry | undefined;
44
+ /**
45
+ * Resolve an operation by actionId (operationId) ALONE — used by the enclave
46
+ * codecall (`run_workflow`), where a sandboxed script calls
47
+ * `callTool(actionId, input)` without naming the owning skill. operationIds
48
+ * are unique within a bundle, so the first match is authoritative; returns
49
+ * undefined when no loaded skill exposes the action.
50
+ */
51
+ getByActionId(actionId: string): HiddenOpEntry | undefined;
38
52
  /** Set or replace the entry for `(skillId, actionId)`. */
39
53
  set(entry: HiddenOpEntry): void;
40
54
  /** Remove the entry for `(skillId, actionId)`. Returns true if anything was removed. */
@@ -1 +1 @@
1
- {"version":3,"file":"hidden-op.registry.d.ts","sourceRoot":"","sources":["../../src/registry/hidden-op.registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAErG;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,EAAE,EAAE,mBAAmB,CAAC;IACxB,yCAAyC;IACzC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,+DAA+D;IAC/D,WAAW,EAAE,WAAW,CAAC;IACzB,6JAA6J;IAC7J,QAAQ,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAoC;IAEnD,mEAAmE;IACnE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjE,0DAA0D;IAC1D,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAI/B,wFAAwF;IACxF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAYpC,6DAA6D;IAC7D,MAAM,IAAI,gBAAgB,CAAC,aAAa,CAAC;IAIzC,6DAA6D;IAC7D,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"hidden-op.registry.d.ts","sourceRoot":"","sources":["../../src/registry/hidden-op.registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,iBAAiB,CAAC;IAC7C,uEAAuE;IACvE,EAAE,EAAE,mBAAmB,CAAC;IACxB,yCAAyC;IACzC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,+DAA+D;IAC/D,WAAW,EAAE,WAAW,CAAC;IACzB,6JAA6J;IAC7J,QAAQ,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAoC;IAEnD,mEAAmE;IACnE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjE;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAO1D,0DAA0D;IAC1D,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAI/B,wFAAwF;IACxF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAYpC,6DAA6D;IAC7D,MAAM,IAAI,gBAAgB,CAAC,aAAa,CAAC;IAIzC,6DAA6D;IAC7D,KAAK,IAAI,IAAI;CAGd"}
@@ -1,9 +1,34 @@
1
1
  import type { AuthoritiesPolicy } from '@frontmcp/adapters/skills';
2
2
  import { AuthoritiesEvaluatorRegistry, AuthoritiesProfileRegistry, type AuthoritiesResult } from '@frontmcp/auth';
3
3
  import type { FrontMcpLogger } from '@frontmcp/sdk';
4
+ /** How an op with NO authorities policy at all is treated by {@link AuthorityGuard}. */
5
+ export type UnprotectedOpsPolicy = 'allow' | 'deny';
4
6
  export interface AuthorityCheckArgs {
5
- /** Required-authorities policy from the bundle (skill-level + op-level merged). */
7
+ /** Op-level required-authorities policy from the bundle (`OperationDescriptor.requiredAuthorities`). */
6
8
  policy: AuthoritiesPolicy | undefined;
9
+ /**
10
+ * Skill-level required-authorities policy (`BundledSkill.requiredAuthorities`).
11
+ * AND-ed with the op-level policy: BOTH must grant. Previously this was
12
+ * silently dropped (C2) — only op-level policy was enforced, so a bundle that
13
+ * gated a whole skill at the skill level left every op of that skill open.
14
+ */
15
+ skillPolicy?: AuthoritiesPolicy | undefined;
16
+ /**
17
+ * Whether the op is explicitly marked public by the bundle
18
+ * (`OperationDescriptor.public === true`). Only consulted when there is NO
19
+ * policy at all AND `unprotectedOps === 'deny'` — it is the bundle's opt-in
20
+ * acknowledgement that a policy-less op is intentionally callable by anyone.
21
+ */
22
+ isPublic?: boolean;
23
+ /**
24
+ * How to treat ops that carry NO policy (neither skill- nor op-level):
25
+ * - `'allow'` (default, backward compatible): grant — origin trust comes from
26
+ * the signed bundle.
27
+ * - `'deny'`: default-deny the execution surface (C1/C3) — a policy-less op is
28
+ * blocked unless it is explicitly `public: true`. Production deployments
29
+ * should set this so a single missing policy line can't silently expose an op.
30
+ */
31
+ unprotectedOps?: UnprotectedOpsPolicy;
7
32
  /** Caller authInfo (from MCP request); shape matches libs/auth's AuthInfoLike. */
8
33
  authInfo: Partial<{
9
34
  user?: Record<string, unknown>;
@@ -15,10 +40,15 @@ export interface AuthorityCheckArgs {
15
40
  env?: Record<string, unknown>;
16
41
  }
17
42
  /**
18
- * Default permissive guard when no policy is attached. v1.2 ships fail-closed
19
- * for hidden ops: skill-level policy missing AND op-level policy missing means
20
- * grant — but the meta-tool layer always requires successful skill resolution
21
- * and the bundle signature verifies origin trust.
43
+ * Evaluates a hidden op's authorities. Two policies can apply — skill-level and
44
+ * op-level — and BOTH must grant (AND semantics). When neither is present the
45
+ * op is "unprotected": granted under the default `unprotectedOps: 'allow'`, or
46
+ * blocked under `'deny'` unless the bundle marked the op `public: true`.
47
+ *
48
+ * The signed bundle verifies origin trust; this guard is the per-op
49
+ * authorization boundary on the execution surface (`run_workflow` + the
50
+ * internal per-op tools), since `load_skill` is NOT an auth boundary on the
51
+ * stateless edge (no per-session loaded-skill state).
22
52
  */
23
53
  export declare class AuthorityGuard {
24
54
  private readonly engine;
@@ -1 +1 @@
1
- {"version":3,"file":"authority-guard.d.ts","sourceRoot":"","sources":["../../src/security/authority-guard.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAGL,4BAA4B,EAC5B,0BAA0B,EAG1B,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvF,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAGlD,IAAI,GAAE;QACJ,QAAQ,CAAC,EAAE,0BAA0B,CAAC;QACtC,UAAU,CAAC,EAAE,4BAA4B,CAAC;QAC1C,MAAM,CAAC,EAAE,cAAc,CAAC;KACpB;IASF,KAAK,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAyBlE"}
1
+ {"version":3,"file":"authority-guard.d.ts","sourceRoot":"","sources":["../../src/security/authority-guard.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAGL,4BAA4B,EAC5B,0BAA0B,EAG1B,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,wFAAwF;AACxF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,wGAAwG;IACxG,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvF,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAGlD,IAAI,GAAE;QACJ,QAAQ,CAAC,EAAE,0BAA0B,CAAC;QACtC,UAAU,CAAC,EAAE,4BAA4B,CAAC;QAC1C,MAAM,CAAC,EAAE,cAAc,CAAC;KACpB;IASF,KAAK,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAsDlE"}
@@ -1,11 +1,38 @@
1
- import { DynamicPlugin, type ProviderType } from '@frontmcp/sdk';
1
+ import { type BundleSourceDeps, type SkillBundleSource } from '@frontmcp/adapters/skills';
2
+ import { DynamicPlugin, type FlowCtxOf, type ProviderType } from '@frontmcp/sdk';
2
3
  import { type SkilledOpenApiPluginOptions, type SkilledOpenApiPluginOptionsInput } from './skilled-openapi.types';
4
+ /**
5
+ * Well-known DI token a host can use to inject runtime dependencies into the
6
+ * plugin's bundle source — without taking a hard dependency on this plugin (the
7
+ * host just provides a value under `Symbol.for(...)`). This is the same
8
+ * cross-package wiring pattern as {@link TELEMETRY_FACTORY_TOKEN}.
9
+ *
10
+ * `@frontmcp/edge` uses it to (a) swap the on-disk last-good cache for a
11
+ * KV-backed store and disable background polling (no filesystem / no background
12
+ * execution on a Worker), and (b) receive the live source so a Cron Trigger /
13
+ * Durable Object alarm can drive {@link SkillBundleSource.refresh}.
14
+ */
15
+ export declare const SKILLED_OPENAPI_RUNTIME_DEPS_TOKEN: unique symbol;
16
+ /**
17
+ * Runtime dependencies a host injects under {@link
18
+ * SKILLED_OPENAPI_RUNTIME_DEPS_TOKEN}. Extends the generic {@link
19
+ * BundleSourceDeps} (pluggable cache + `disablePolling`) with an `attach`
20
+ * callback that hands back the live source for external refresh scheduling.
21
+ */
22
+ export interface SkilledOpenApiRuntimeDeps extends BundleSourceDeps {
23
+ /**
24
+ * Invoked once with the live bundle source right after it's constructed, so
25
+ * an external scheduler (Cloudflare Cron Trigger / DO alarm) can call
26
+ * `source.refresh()` on a runtime with no background timers.
27
+ */
28
+ attach?(source: SkillBundleSource): void;
29
+ }
3
30
  /**
4
31
  * `@frontmcp/plugin-skilled-openapi`
5
32
  *
6
33
  * Consumes signed skill bundles (OpenAPI spec + Overlay) from a configured
7
34
  * source (static, npm, or SaaS-pull) and serves them as FrontMCP skills with
8
- * three meta-tools (`search_skill`, `load_skill`, `execute_action`). Per-op
35
+ * three meta-tools (`search_skill`, `load_skill`, `run_workflow`). Per-op
9
36
  * REST tools stay hidden from `tools/list`.
10
37
  *
11
38
  * Lifecycle: `BundleSyncService` is a useFactory provider that starts the
@@ -18,6 +45,18 @@ export default class SkilledOpenApiPlugin extends DynamicPlugin<SkilledOpenApiPl
18
45
  private cachedLogger?;
19
46
  constructor(options: SkilledOpenApiPluginOptionsInput);
20
47
  private getLogger;
48
+ /**
49
+ * Make the always-loaded `search_skill` tool description carry a live catalog
50
+ * of the available skills (name + short description). Because tools/list is
51
+ * always in the agent's context (unlike the initialize `instructions` a client
52
+ * may not inject), embedding the catalog here tells the agent WHEN to call
53
+ * `search_skill` — it can see what this server can do without searching first.
54
+ *
55
+ * Runs at every `tools:list-tools`, so the catalog reflects the currently
56
+ * loaded bundle (hot-swaps included). Idempotent: the description is rebuilt
57
+ * from the static base each time, never appended onto a prior catalog.
58
+ */
59
+ injectSkillCatalogIntoSearchTool(flowCtx: FlowCtxOf<'tools:list-tools'>): Promise<void>;
21
60
  private warnIfInsecureConfig;
22
61
  static dynamicProviders(options: SkilledOpenApiPluginOptionsInput): ProviderType[];
23
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skilled-openapi.plugin.d.ts","sourceRoot":"","sources":["../src/skilled-openapi.plugin.ts"],"names":[],"mappings":"AASA,OAAO,EACL,aAAa,EAKb,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACtC,MAAM,yBAAyB,CAAC;AAmDjC;;;;;;;;;;;;GAYG;AAQH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,aAAa,CAC7D,2BAA2B,EAC3B,gCAAgC,CACjC;IACC,OAAO,EAAE,2BAA2B,CAAC;IACrC,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAE1B,OAAO,EAAE,gCAAgC;IAMrD,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,oBAAoB;WAaZ,gBAAgB,CAAC,OAAO,EAAE,gCAAgC,GAAG,YAAY,EAAE;CAsI5F"}
1
+ {"version":3,"file":"skilled-openapi.plugin.d.ts","sourceRoot":"","sources":["../src/skilled-openapi.plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,gBAAgB,EAIrB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EAMb,KAAK,SAAS,EAEd,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACtC,MAAM,yBAAyB,CAAC;AAmBjC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kCAAkC,eAAsD,CAAC;AAEtG;;;;;GAKG;AACH,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE;;;;OAIG;IACH,MAAM,CAAC,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC1C;AAqDD;;;;;;;;;;;;GAYG;AAQH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,aAAa,CAC7D,2BAA2B,EAC3B,gCAAgC,CACjC;IACC,OAAO,EAAE,2BAA2B,CAAC;IACrC,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAE1B,OAAO,EAAE,gCAAgC;IAMrD,OAAO,CAAC,SAAS;IAOjB;;;;;;;;;;OAUG;IAEG,gCAAgC,CAAC,OAAO,EAAE,SAAS,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7F,OAAO,CAAC,oBAAoB;WAaZ,gBAAgB,CAAC,OAAO,EAAE,gCAAgC,GAAG,YAAY,EAAE;CAsJ5F"}
@@ -1,3 +1,4 @@
1
+ import { type UnprotectedOpsPolicy } from './security/authority-guard';
1
2
  import { type CredentialResolver } from './executor/credential-resolver';
2
3
  import { type OutboundOptions, type SkilledOpenApiPluginOptions } from './skilled-openapi.types';
3
4
  /**
@@ -8,6 +9,8 @@ export declare class SkilledOpenApiConfig {
8
9
  readonly options: SkilledOpenApiPluginOptions;
9
10
  constructor(options: SkilledOpenApiPluginOptions);
10
11
  get outbound(): OutboundOptions;
12
+ /** Default-deny policy for ops with no required-authorities (C1/C3). */
13
+ get unprotectedOps(): UnprotectedOpsPolicy;
11
14
  }
12
15
  /**
13
16
  * Token for the plugin-private credential resolver. Production wiring backs
@@ -1 +1 @@
1
- {"version":3,"file":"skilled-openapi.symbols.d.ts","sourceRoot":"","sources":["../src/skilled-openapi.symbols.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEjG;;;GAGG;AACH,qBAAa,oBAAoB;aACH,OAAO,EAAE,2BAA2B;gBAApC,OAAO,EAAE,2BAA2B;IAChE,IAAI,QAAQ,IAAI,eAAe,CAE9B;CACF;AAED;;;GAGG;AACH,8BAAsB,gCAAgC;IACpD,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CACvF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,gCAAgC,CAExG"}
1
+ {"version":3,"file":"skilled-openapi.symbols.d.ts","sourceRoot":"","sources":["../src/skilled-openapi.symbols.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEjG;;;GAGG;AACH,qBAAa,oBAAoB;aACH,OAAO,EAAE,2BAA2B;gBAApC,OAAO,EAAE,2BAA2B;IAChE,IAAI,QAAQ,IAAI,eAAe,CAE9B;IACD,wEAAwE;IACxE,IAAI,cAAc,IAAI,oBAAoB,CAEzC;CACF;AAED;;;GAGG;AACH,8BAAsB,gCAAgC;IACpD,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CACvF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,gCAAgC,CAExG"}
@@ -29,6 +29,9 @@ declare const skilledOpenApiPluginOptionsObjectSchema: import("@frontmcp/lazy-zo
29
29
  enableWebhook: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodBoolean>;
30
30
  jwksUrl: import("@frontmcp/lazy-zod").ZodString;
31
31
  expectedIssuer: import("@frontmcp/lazy-zod").ZodString;
32
+ }, import("zod/v4/core").$strip>, import("@frontmcp/lazy-zod").ZodObject<{
33
+ type: import("@frontmcp/lazy-zod").ZodLiteral<"inline">;
34
+ content: import("@frontmcp/lazy-zod").ZodUnknown;
32
35
  }, import("zod/v4/core").$strip>], "type">;
33
36
  requireSignature: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodBoolean>;
34
37
  trustedKeys: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
@@ -48,6 +51,10 @@ declare const skilledOpenApiPluginOptionsObjectSchema: import("@frontmcp/lazy-zo
48
51
  defaultMaxResponseBytes: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodNumber>;
49
52
  allowHttp: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodBoolean>;
50
53
  }, import("zod/v4/core").$strip>>;
54
+ unprotectedOps: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodEnum<{
55
+ allow: "allow";
56
+ deny: "deny";
57
+ }>>;
51
58
  sourceConflictPolicy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodEnum<{
52
59
  "static-wins": "static-wins";
53
60
  "last-wins": "last-wins";
@@ -76,6 +83,9 @@ export declare const skilledOpenApiPluginOptionsSchema: import("zod").ZodPipe<im
76
83
  enableWebhook: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodBoolean>;
77
84
  jwksUrl: import("@frontmcp/lazy-zod").ZodString;
78
85
  expectedIssuer: import("@frontmcp/lazy-zod").ZodString;
86
+ }, import("zod/v4/core").$strip>, import("@frontmcp/lazy-zod").ZodObject<{
87
+ type: import("@frontmcp/lazy-zod").ZodLiteral<"inline">;
88
+ content: import("@frontmcp/lazy-zod").ZodUnknown;
79
89
  }, import("zod/v4/core").$strip>], "type">;
80
90
  requireSignature: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodBoolean>;
81
91
  trustedKeys: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
@@ -95,6 +105,10 @@ export declare const skilledOpenApiPluginOptionsSchema: import("zod").ZodPipe<im
95
105
  defaultMaxResponseBytes: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodNumber>;
96
106
  allowHttp: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodBoolean>;
97
107
  }, import("zod/v4/core").$strip>>;
108
+ unprotectedOps: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodEnum<{
109
+ allow: "allow";
110
+ deny: "deny";
111
+ }>>;
98
112
  sourceConflictPolicy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodEnum<{
99
113
  "static-wins": "static-wins";
100
114
  "last-wins": "last-wins";
@@ -131,6 +145,9 @@ export declare const skilledOpenApiPluginOptionsSchema: import("zod").ZodPipe<im
131
145
  enableWebhook: boolean;
132
146
  jwksUrl: string;
133
147
  expectedIssuer: string;
148
+ } | {
149
+ type: "inline";
150
+ content: unknown;
134
151
  };
135
152
  requireSignature: boolean;
136
153
  trustedKeys: {
@@ -139,6 +156,7 @@ export declare const skilledOpenApiPluginOptionsSchema: import("zod").ZodPipe<im
139
156
  publicKeyPem: string;
140
157
  }[];
141
158
  dev: boolean;
159
+ unprotectedOps: "allow" | "deny";
142
160
  sourceConflictPolicy: "static-wins" | "last-wins" | "reject";
143
161
  exposeOperationsAsInternalTools: boolean;
144
162
  credentials?: Record<string, string> | undefined;
@@ -161,6 +179,9 @@ export declare const skilledOpenApiPluginOptionsSchema: import("zod").ZodPipe<im
161
179
  enableWebhook: boolean;
162
180
  jwksUrl: string;
163
181
  expectedIssuer: string;
182
+ } | {
183
+ type: "inline";
184
+ content: unknown;
164
185
  };
165
186
  requireSignature: boolean;
166
187
  trustedKeys: {
@@ -177,6 +198,7 @@ export declare const skilledOpenApiPluginOptionsSchema: import("zod").ZodPipe<im
177
198
  allowHttp: boolean;
178
199
  egressProxy?: string | undefined;
179
200
  };
201
+ unprotectedOps: "allow" | "deny";
180
202
  sourceConflictPolicy: "static-wins" | "last-wins" | "reject";
181
203
  exposeOperationsAsInternalTools: boolean;
182
204
  bundleCacheDir?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"skilled-openapi.types.d.ts","sourceRoot":"","sources":["../src/skilled-openapi.types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAKvC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,qBAAqB;;;;;;;iCAgC9B,CAAC;AAEL,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA6D3C,CAAC;AAUH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiB5C,CAAC;AAEH,kEAAkE;AAClE,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,uDAAuD;AACvD,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC"}
1
+ {"version":3,"file":"skilled-openapi.types.d.ts","sourceRoot":"","sources":["../src/skilled-openapi.types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAKvC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,qBAAqB;;;;;;;iCAgC9B,CAAC;AAEL,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA4E3C,CAAC;AAUH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiB5C,CAAC;AAEH,kEAAkE;AAClE,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,uDAAuD;AACvD,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC"}
@@ -21,7 +21,7 @@ export interface BundleSyncOptions {
21
21
  * other tools / agents / CodeCall scripts / jobs can compose with it via
22
22
  * `this.callTool(name, args)` from `ExecutionContextBase`. Internal tools
23
23
  * are excluded from `tools/list` and rejected for external `tools/call`.
24
- * The existing meta-tools (`search_skill` / `load_skill` / `execute_action`)
24
+ * The existing meta-tools (`search_skill` / `load_skill` / `run_workflow`)
25
25
  * are unaffected.
26
26
  */
27
27
  exposeOperationsAsInternalTools: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"bundle-sync.service.d.ts","sourceRoot":"","sources":["../../src/sync/bundle-sync.service.ts"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,UAAU,EACf,KAAK,WAAW,EAEhB,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,cAAc,EAAqB,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEpG,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC;;;;;;;;OAQG;IACH,+BAA+B,EAAE,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAfxC,OAAO,CAAC,yBAAyB,CAA0C;gBAGxD,aAAa,EAAE,sBAAsB,EACrC,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,cAAc;IACvC;;;;;;OAMG;IACc,oBAAoB,CAAC,EAAE,oBAAoB,YAAA;IAG9D;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0O/D;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;CAmCzB"}
1
+ {"version":3,"file":"bundle-sync.service.d.ts","sourceRoot":"","sources":["../../src/sync/bundle-sync.service.ts"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,UAAU,EACf,KAAK,WAAW,EAEhB,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,cAAc,EAAqB,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEpG,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC;;;;;;;;OAQG;IACH,+BAA+B,EAAE,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAfxC,OAAO,CAAC,yBAAyB,CAA0C;gBAGxD,aAAa,EAAE,sBAAsB,EACrC,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,cAAc;IACvC;;;;;;OAMG;IACc,oBAAoB,CAAC,EAAE,oBAAoB,YAAA;IAG9D;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0O/D;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;CAwCzB"}
@@ -36,8 +36,8 @@ export interface OperationRegisterContext {
36
36
  }
37
37
  /**
38
38
  * Stable result envelope produced by every operation executor. Mirrors the
39
- * shape returned by `execute_action.tool.ts` so call-site code (via
40
- * `callTool`) can branch on `ok` uniformly regardless of which surface the
39
+ * shape returned by the shared `executeSkillAction` executor so call-site code
40
+ * (via `callTool`) can branch on `ok` uniformly regardless of which surface the
41
41
  * operation was reached through.
42
42
  */
43
43
  export interface OperationToolResult {
@@ -80,10 +80,11 @@ export declare class OperationToolFactory {
80
80
  /** Number of currently-registered internal operation tools (test/audit hook). */
81
81
  get size(): number;
82
82
  /**
83
- * Build the actual function executor for one op. Mirrors `ExecuteActionTool.execute`:
83
+ * Build the actual function executor for one op. Mirrors the skill-action
84
+ * executor (`executeSkillAction`):
84
85
  * authority check + input validation + `executeOperation` — so callers
85
86
  * reaching the op via `callTool` get the same security gates as callers
86
- * going through `execute_action`.
87
+ * going through `run_workflow`.
87
88
  */
88
89
  private makeExecutor;
89
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operation-tool.factory.d.ts","sourceRoot":"","sources":["../../src/tools/operation-tool.factory.ts"],"names":[],"mappings":"AAaA,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAGrB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAWpE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAS/E;AA2BD,MAAM,WAAW,wBAAwB;IACvC,sEAAsE;IACtE,YAAY,EAAE,YAAY,CAAC;IAC3B,8DAA8D;IAC9D,SAAS,EAAE,gBAAgB,CAAC;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD;;;GAGG;AACH,qBAAa,oBAAoB;IAMnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,kFAAkF;IAClF,OAAO,CAAC,UAAU,CAAwC;IAC1D,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB,CAAqB;gBAElB,IAAI,EAAE,wBAAwB;IAE3D;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,wBAAwB,GAAG,IAAI;IA2CpE;;;;OAIG;IACH,aAAa,IAAI,IAAI;IAqBrB,iFAAiF;IACjF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CA4ErB"}
1
+ {"version":3,"file":"operation-tool.factory.d.ts","sourceRoot":"","sources":["../../src/tools/operation-tool.factory.ts"],"names":[],"mappings":"AAaA,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAGrB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAWpE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAS/E;AA2BD,MAAM,WAAW,wBAAwB;IACvC,sEAAsE;IACtE,YAAY,EAAE,YAAY,CAAC;IAC3B,8DAA8D;IAC9D,SAAS,EAAE,gBAAgB,CAAC;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD;;;GAGG;AACH,qBAAa,oBAAoB;IAMnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,kFAAkF;IAClF,OAAO,CAAC,UAAU,CAAwC;IAC1D,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB,CAAqB;gBAElB,IAAI,EAAE,wBAAwB;IAE3D;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,wBAAwB,GAAG,IAAI;IA2CpE;;;;OAIG;IACH,aAAa,IAAI,IAAI;IAqBrB,iFAAiF;IACjF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CA+ErB"}
@@ -0,0 +1,28 @@
1
+ export declare const runWorkflowDescription = "Execute a task by running a short AgentScript program in a secure sandbox (enclave).\n\nThis is the EXECUTE step of the skill mechanism. After `search_skill` (to find a\nskill) and `load_skill` (to read its instructions + the actions it offers), write\na program that calls those actions to accomplish the user's task \u2014 chaining\nseveral calls in ONE round-trip, with each call authorized, schema-validated, and\nsent to the real upstream API (credentials injected from the vault, never echoed).\n\nInside the script:\n - `await callTool(actionId, input)` invokes a loaded skill's action (the\n `actionId` is what `load_skill` lists under `actions[]`). It returns the\n action's response `data`, or throws if the action is unknown / unauthorized /\n fails validation.\n - `Math` and `JSON` are available. There is NO host access and NO network\n except through `callTool`.\n - The script's final `return <value>` is the result.\n\nExample (after loading a skill exposing getTodo + getUser):\n const t = await callTool(\"getTodo\", { id: 1 });\n const u = await callTool(\"getUser\", { id: t.userId });\n return { todo: t.title, owner: u.name };\n\nOUTPUT: { success, value?, error?, stats }";
2
+ export declare const runWorkflowInputSchema: {
3
+ script: import("@frontmcp/lazy-zod").ZodString;
4
+ };
5
+ export declare const runWorkflowOutputSchema: {
6
+ success: import("@frontmcp/lazy-zod").ZodBoolean;
7
+ value: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnknown>;
8
+ error: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
9
+ stats: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{
10
+ durationMs: import("@frontmcp/lazy-zod").ZodNumber;
11
+ toolCalls: import("@frontmcp/lazy-zod").ZodNumber;
12
+ steps: import("@frontmcp/lazy-zod").ZodNumber;
13
+ }, import("zod/v4/core").$strip>>;
14
+ };
15
+ export type RunWorkflowInput = {
16
+ script: string;
17
+ };
18
+ export type RunWorkflowOutput = {
19
+ success: boolean;
20
+ value?: unknown;
21
+ error?: string;
22
+ stats?: {
23
+ durationMs: number;
24
+ toolCalls: number;
25
+ steps: number;
26
+ };
27
+ };
28
+ //# sourceMappingURL=run-workflow.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-workflow.schema.d.ts","sourceRoot":"","sources":["../../src/tools/run-workflow.schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,ksCAsBQ,CAAC;AAE5C,eAAO,MAAM,sBAAsB;;CAMlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;CAWnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAClD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ToolContext } from '@frontmcp/sdk';
2
+ import { type RunWorkflowInput, type RunWorkflowOutput } from './run-workflow.schema';
3
+ export default class RunWorkflowTool extends ToolContext {
4
+ execute(input: RunWorkflowInput): Promise<RunWorkflowOutput>;
5
+ }
6
+ //# sourceMappingURL=run-workflow.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-workflow.tool.d.ts","sourceRoot":"","sources":["../../src/tools/run-workflow.tool.ts"],"names":[],"mappings":"AAUA,OAAO,EAAQ,WAAW,EAAE,MAAM,eAAe,CAAC;AAOlD,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAkB/B,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IAChD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAmFnE"}
@@ -1,8 +1,10 @@
1
- export declare const searchSkillDescription = "Search the available skills by free-form query.\n\nA \"skill\" is a curated bundle of REST operations exposed to you behind a single\nnamed capability \u2014 instead of seeing each individual API endpoint, you see one\nskill that knows how to do something useful (e.g. \"billing\", \"customers\"). Use\nthis tool first to discover what skills exist for the user's request, then call\n`load_skill` to read its instructions + the actions it offers, and `execute_action`\nto actually invoke one.\n\nINPUT:\n- query: short natural-language description of what you want to do\n- limit?: max results (default 20, max 50)\n- tags?: filter to skills carrying these tags\n\nOUTPUT: { skills: Array<{ skillId, name, description, score }> }";
1
+ export declare const searchSkillDescription = "Search the available skills by free-form query.\n\nA \"skill\" is a curated bundle of REST operations exposed to you behind a single\nnamed capability \u2014 instead of seeing each individual API endpoint, you see one\nskill that knows how to do something useful (e.g. \"billing\", \"customers\"). Use\nthis tool first to discover what skills exist for the user's request, then call\n`load_skill` to read its instructions + the actions it offers, and `run_workflow`\nto execute \u2014 a short sandboxed script that calls the skill's actions via\n`callTool(actionId, input)` (chaining several in one round-trip).\n\nINPUT:\n- query: short natural-language description of what you want to do\n- limit?: max results (default 20, max 50)\n- tags?: filter to skills carrying these tags\n- notQuery?: anti-query \u2014 describe what you do NOT want; matching skills are\n demoted (e.g. query \"rate limiting\", notQuery \"enforcement\" to prefer guidance\n over enforcement skills)\n\nOUTPUT: { skills: Array<{ skillId, name, description, score }> }";
2
2
  export declare const searchSkillInputSchema: {
3
3
  query: import("@frontmcp/lazy-zod").ZodString;
4
4
  limit: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
5
5
  tags: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>;
6
+ notQuery: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>]>>;
7
+ notWeight: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
6
8
  };
7
9
  export declare const searchSkillOutputSchema: {
8
10
  skills: import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodObject<{
@@ -17,6 +19,8 @@ export type SearchSkillInput = {
17
19
  query: string;
18
20
  limit?: number;
19
21
  tags?: string[];
22
+ notQuery?: string | string[];
23
+ notWeight?: number;
20
24
  };
21
25
  export type SearchSkillOutput = {
22
26
  skills: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"search-skill.schema.d.ts","sourceRoot":"","sources":["../../src/tools/search-skill.schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,8tBAc8B,CAAC;AAElE,eAAO,MAAM,sBAAsB;;;;CAIlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;CAUnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"search-skill.schema.d.ts","sourceRoot":"","sources":["../../src/tools/search-skill.schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,0hCAkB8B,CAAC;AAElE,eAAO,MAAM,sBAAsB;;;;;;CASlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;CAUnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-skill.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-skill.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IAChD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA6BnE"}
1
+ {"version":3,"file":"search-skill.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-skill.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IAChD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAiCnE"}
@@ -1,26 +0,0 @@
1
- export declare const executeActionDescription = "Execute one action of a previously loaded skill.\n\nPipeline:\n 1. Resolve (skillId, actionId) \u2192 bundled OpenAPI operation\n 2. Authorize: caller's authInfo is checked against the action's required authorities (if any)\n 3. Validate: the input is validated against the action's inputJsonSchema by the underlying executor\n 4. Outbound: an HTTPS request is built and sent to the service the action belongs to,\n with credentials injected from the configured vault (never echoed back to you)\n 5. Response: the response body is validated against outputJsonSchema and returned in\n a structured envelope. Failures (auth, schema, network) are returned as ok:false\n with a structured error string \u2014 they DO NOT throw.\n\nINPUT: { skillId, actionId, input }\nOUTPUT: { ok, status, data?, contentType?, error? }";
2
- export declare const executeActionInputSchema: {
3
- skillId: import("@frontmcp/lazy-zod").ZodString;
4
- actionId: import("@frontmcp/lazy-zod").ZodString;
5
- input: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodRecord<import("@frontmcp/lazy-zod").ZodString, import("@frontmcp/lazy-zod").ZodUnknown>>;
6
- };
7
- export declare const executeActionOutputSchema: {
8
- ok: import("@frontmcp/lazy-zod").ZodBoolean;
9
- status: import("@frontmcp/lazy-zod").ZodNumber;
10
- data: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnknown>;
11
- contentType: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
12
- error: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>;
13
- };
14
- export type ExecuteActionInput = {
15
- skillId: string;
16
- actionId: string;
17
- input?: Record<string, unknown>;
18
- };
19
- export type ExecuteActionOutput = {
20
- ok: boolean;
21
- status: number;
22
- data?: unknown;
23
- contentType?: string;
24
- error?: string;
25
- };
26
- //# sourceMappingURL=execute-action.schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-action.schema.d.ts","sourceRoot":"","sources":["../../src/tools/execute-action.schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,q0BAae,CAAC;AAErD,eAAO,MAAM,wBAAwB;;;;CAOpC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;CAMrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -1,6 +0,0 @@
1
- import { ToolContext } from '@frontmcp/sdk';
2
- import { type ExecuteActionInput, type ExecuteActionOutput } from './execute-action.schema';
3
- export default class ExecuteActionTool extends ToolContext {
4
- execute(input: ExecuteActionInput): Promise<ExecuteActionOutput>;
5
- }
6
- //# sourceMappingURL=execute-action.tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-action.tool.d.ts","sourceRoot":"","sources":["../../src/tools/execute-action.tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAQ,WAAW,EAAE,MAAM,eAAe,CAAC;AAQlD,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAajC,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IAClD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA4RvE"}