@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.
- package/README.md +123 -17
- package/esm/index.mjs +640 -433
- package/esm/package.json +19 -8
- package/executor/execute-skill-action.d.ts +44 -0
- package/executor/execute-skill-action.d.ts.map +1 -0
- package/executor/host-concurrency.d.ts +9 -0
- package/executor/host-concurrency.d.ts.map +1 -0
- package/executor/openapi-runtime.d.ts.map +1 -1
- package/executor/ssrf-guard.d.ts +4 -0
- package/executor/ssrf-guard.d.ts.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +643 -421
- package/package.json +19 -8
- package/registry/hidden-op.registry.d.ts +15 -1
- package/registry/hidden-op.registry.d.ts.map +1 -1
- package/security/authority-guard.d.ts +35 -5
- package/security/authority-guard.d.ts.map +1 -1
- package/skilled-openapi.plugin.d.ts +41 -2
- package/skilled-openapi.plugin.d.ts.map +1 -1
- package/skilled-openapi.symbols.d.ts +3 -0
- package/skilled-openapi.symbols.d.ts.map +1 -1
- package/skilled-openapi.types.d.ts +22 -0
- package/skilled-openapi.types.d.ts.map +1 -1
- package/sync/bundle-sync.service.d.ts +1 -1
- package/sync/bundle-sync.service.d.ts.map +1 -1
- package/tools/operation-tool.factory.d.ts +5 -4
- package/tools/operation-tool.factory.d.ts.map +1 -1
- package/tools/run-workflow.schema.d.ts +28 -0
- package/tools/run-workflow.schema.d.ts.map +1 -0
- package/tools/run-workflow.tool.d.ts +6 -0
- package/tools/run-workflow.tool.d.ts.map +1 -0
- package/tools/search-skill.schema.d.ts +5 -1
- package/tools/search-skill.schema.d.ts.map +1 -1
- package/tools/search-skill.tool.d.ts.map +1 -1
- package/tools/execute-action.schema.d.ts +0 -26
- package/tools/execute-action.schema.d.ts.map +0 -1
- package/tools/execute-action.tool.d.ts +0 -6
- 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
|
-
"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 /
|
|
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.
|
|
49
|
-
"@frontmcp/auth": "1.
|
|
50
|
-
"@frontmcp/
|
|
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
|
-
"@
|
|
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,
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
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,
|
|
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 {
|
|
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`, `
|
|
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":"
|
|
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
|
|
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` / `
|
|
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;
|
|
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 `
|
|
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
|
|
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 `
|
|
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
|
|
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 `
|
|
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,
|
|
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;
|
|
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"}
|