@frontmcp/sdk 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,108 @@
1
+ # @frontmcp/sdk
2
+
3
+ The core FrontMCP framework for building MCP servers and clients in TypeScript.
4
+
5
+ [![NPM](https://img.shields.io/npm/v/@frontmcp/sdk.svg)](https://www.npmjs.com/package/@frontmcp/sdk)
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @frontmcp/sdk reflect-metadata
11
+ ```
12
+
13
+ > Most users should scaffold with `npx frontmcp create my-app` instead of installing manually. See [Installation][docs-install].
14
+
15
+ ## Features
16
+
17
+ - **`@FrontMcp` server** — single decorator configures info, apps, HTTP, logging, session, auth ([docs][docs-server])
18
+ - **`@App`** — group tools, resources, prompts into isolated domains ([docs][docs-apps])
19
+ - **`@Tool`** — typed actions with Zod input schemas, class or function style ([docs][docs-tools])
20
+ - **`@Resource`** — read-only data with static and template URIs ([docs][docs-resources])
21
+ - **`@Prompt`** — reusable message templates returning `GetPromptResult` ([docs][docs-prompts])
22
+ - **`@Agent`** — orchestrated multi-step tool chains ([docs][docs-agents])
23
+ - **Elicitation** — request structured user input mid-flow ([docs][docs-elicitation])
24
+ - **Skills** — HTTP-discoverable tool manifests for agent marketplaces ([docs][docs-skills])
25
+ - **5 context classes** — `ToolContext`, `ResourceContext`, `PromptContext`, `AgentContext`, `HookContext`
26
+ - **Direct client** — `create()`, `connect()`, `connectOpenAI()`, `connectClaude()`, `connectLangChain()`, `connectVercelAI()` ([docs][docs-direct])
27
+ - **Authentication** — Remote OAuth, Local OAuth, JWKS, DCR, per-app auth surfaces ([docs][docs-auth])
28
+ - **Sessions** — stateful / stateless modes, JWT or UUID transport IDs
29
+ - **Hooks** — tool, list-tools, HTTP, resource, prompt hook families ([docs][docs-hooks])
30
+ - **Ext-Apps** — mount external MCP servers as sub-apps ([docs][docs-ext-apps])
31
+ - **Providers / DI** — scoped injection with GLOBAL and CONTEXT scopes ([docs][docs-providers])
32
+ - **ConfigPlugin** — load `frontmcp.yaml` / `frontmcp.json` config files ([docs][docs-config])
33
+ - **Transport** — Streamable HTTP + SSE ([docs][docs-transport])
34
+
35
+ ## Quick Example
36
+
37
+ ```ts
38
+ import 'reflect-metadata';
39
+ import { FrontMcp, App, Tool } from '@frontmcp/sdk';
40
+ import { z } from 'zod';
41
+
42
+ @Tool({ name: 'greet', inputSchema: { name: z.string() } })
43
+ class GreetTool {
44
+ async execute({ name }: { name: string }) {
45
+ return `Hello, ${name}!`;
46
+ }
47
+ }
48
+
49
+ @App({ id: 'hello', name: 'Hello', tools: [GreetTool] })
50
+ class HelloApp {}
51
+
52
+ @FrontMcp({ info: { name: 'Demo', version: '0.1.0' }, apps: [HelloApp], http: { port: 3000 } })
53
+ export default class Server {}
54
+ ```
55
+
56
+ > Full walkthrough: [Quickstart][docs-quickstart]
57
+
58
+ ## Docs
59
+
60
+ | Topic | Link |
61
+ | ------------------------- | -------------------------------------------------------------------------------------------------- |
62
+ | Server configuration | [The FrontMCP Server][docs-server] |
63
+ | Apps & isolation | [Apps][docs-apps] |
64
+ | Tools, Resources, Prompts | [Tools][docs-tools] · [Resources][docs-resources] · [Prompts][docs-prompts] |
65
+ | Agents | [Agents][docs-agents] |
66
+ | Authentication | [Auth Overview][docs-auth] · [Remote OAuth][docs-remote] · [Local OAuth][docs-local] |
67
+ | Direct client | [Direct Client][docs-direct] |
68
+ | Hooks & providers | [Hooks][docs-hooks] · [Providers][docs-providers] |
69
+ | Deployment | [Local Dev][docs-deploy] · [Production][docs-production] |
70
+ | SDK reference | [Overview][docs-sdk-ref] |
71
+
72
+ ## Related Packages
73
+
74
+ - [`@frontmcp/cli`](../cli) — scaffolding and dev tooling
75
+ - [`@frontmcp/auth`](../auth) — authentication library
76
+ - [`@frontmcp/adapters`](../adapters) — OpenAPI adapter
77
+ - [`@frontmcp/plugins`](../plugins) — Cache, Remember, CodeCall, Dashboard
78
+ - [`@frontmcp/testing`](../testing) — E2E testing framework
79
+ - [`@frontmcp/ui`](../ui) / [`@frontmcp/uipack`](../uipack) — UI components and build tools
80
+
81
+ ## License
82
+
83
+ Apache-2.0 — see [LICENSE](../../LICENSE).
84
+
85
+ <!-- links -->
86
+
87
+ [docs-install]: https://docs.agentfront.dev/frontmcp/getting-started/installation
88
+ [docs-quickstart]: https://docs.agentfront.dev/frontmcp/getting-started/quickstart
89
+ [docs-server]: https://docs.agentfront.dev/frontmcp/servers/server
90
+ [docs-apps]: https://docs.agentfront.dev/frontmcp/servers/apps
91
+ [docs-tools]: https://docs.agentfront.dev/frontmcp/servers/tools
92
+ [docs-resources]: https://docs.agentfront.dev/frontmcp/servers/resources
93
+ [docs-prompts]: https://docs.agentfront.dev/frontmcp/servers/prompts
94
+ [docs-agents]: https://docs.agentfront.dev/frontmcp/servers/agents
95
+ [docs-elicitation]: https://docs.agentfront.dev/frontmcp/servers/elicitation
96
+ [docs-skills]: https://docs.agentfront.dev/frontmcp/servers/skills
97
+ [docs-auth]: https://docs.agentfront.dev/frontmcp/authentication/overview
98
+ [docs-remote]: https://docs.agentfront.dev/frontmcp/authentication/remote
99
+ [docs-local]: https://docs.agentfront.dev/frontmcp/authentication/local
100
+ [docs-direct]: https://docs.agentfront.dev/frontmcp/deployment/direct-client
101
+ [docs-transport]: https://docs.agentfront.dev/frontmcp/deployment/transport
102
+ [docs-ext-apps]: https://docs.agentfront.dev/frontmcp/servers/ext-apps
103
+ [docs-hooks]: https://docs.agentfront.dev/frontmcp/extensibility/hooks
104
+ [docs-providers]: https://docs.agentfront.dev/frontmcp/extensibility/providers
105
+ [docs-config]: https://docs.agentfront.dev/frontmcp/extensibility/config-yaml
106
+ [docs-deploy]: https://docs.agentfront.dev/frontmcp/deployment/local-dev-server
107
+ [docs-production]: https://docs.agentfront.dev/frontmcp/deployment/production-build
108
+ [docs-sdk-ref]: https://docs.agentfront.dev/frontmcp/sdk-reference/overview
@@ -24,7 +24,7 @@ import { z } from 'zod';
24
24
  declare const oauthAuthorizeRequestSchema: z.ZodObject<{
25
25
  response_type: z.ZodLiteral<"code">;
26
26
  client_id: z.ZodString;
27
- redirect_uri: z.ZodString;
27
+ redirect_uri: z.ZodURL;
28
28
  code_challenge: z.ZodString;
29
29
  code_challenge_method: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"S256">>>;
30
30
  scope: z.ZodOptional<z.ZodString>;
@@ -35,7 +35,7 @@ declare const oauthAuthorizeRequestSchema: z.ZodObject<{
35
35
  * Minimal request for anonymous/default provider mode
36
36
  */
37
37
  declare const anonymousAuthorizeRequestSchema: z.ZodObject<{
38
- redirect_uri: z.ZodString;
38
+ redirect_uri: z.ZodURL;
39
39
  state: z.ZodOptional<z.ZodString>;
40
40
  }, z.core.$strip>;
41
41
  export type OAuthAuthorizeRequest = z.infer<typeof oauthAuthorizeRequestSchema>;
@@ -52,7 +52,7 @@ declare const stateSchema: z.ZodObject<{
52
52
  validatedRequest: z.ZodOptional<z.ZodObject<{
53
53
  response_type: z.ZodLiteral<"code">;
54
54
  client_id: z.ZodString;
55
- redirect_uri: z.ZodString;
55
+ redirect_uri: z.ZodURL;
56
56
  code_challenge: z.ZodString;
57
57
  code_challenge_method: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"S256">>>;
58
58
  scope: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.authorize.flow.d.ts","sourceRoot":"","sources":["../../../src/auth/flows/oauth.authorize.flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;;;;;;GAMG;AACH,OAAO,EAEL,QAAQ,EAER,cAAc,EAQf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,CAAC,EAAY,MAAM,KAAK,CAAC;AAuDlC;;GAEG;AACH,QAAA,MAAM,2BAA2B;;;;;;;;;iBAS/B,CAAC;AAEH;;GAEG;AACH,QAAA,MAAM,+BAA+B;;;iBAGnC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAMxF,QAAA,MAAM,WAAW;;;;iBAAkB,CAAC;AAEpC,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBf,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAIhB,CAAC;AAEH,QAAA,MAAM,IAAI;;;;CAQ2B,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB,iBAAiB,EAAE,cAAc,CAC/B,kBAAkB,EAClB,OAAO,IAAI,EACX,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,OAAO,WAAW,CACnB,CAAC;KACH;CACF;AAED,QAAA,MAAM,IAAI,EAAG,iBAA0B,CAAC;AAcxC,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;IACnE,OAAO,CAAC,MAAM,CAAiD;IAGzD,UAAU;IAiEV,aAAa;IAmFb,iBAAiB;IAOjB,2BAA2B;IAmG3B,oBAAoB;IA0GpB,cAAc;IAIpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAkRzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAyCxB"}
1
+ {"version":3,"file":"oauth.authorize.flow.d.ts","sourceRoot":"","sources":["../../../src/auth/flows/oauth.authorize.flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;;;;;;GAMG;AACH,OAAO,EAEL,QAAQ,EAER,cAAc,EAQf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,CAAC,EAAY,MAAM,KAAK,CAAC;AAuElC;;GAEG;AACH,QAAA,MAAM,2BAA2B;;;;;;;;;iBAS/B,CAAC;AAEH;;GAEG;AACH,QAAA,MAAM,+BAA+B;;;iBAGnC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAMxF,QAAA,MAAM,WAAW;;;;iBAAkB,CAAC;AAEpC,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBf,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAIhB,CAAC;AAEH,QAAA,MAAM,IAAI;;;;CAQ2B,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB,iBAAiB,EAAE,cAAc,CAC/B,kBAAkB,EAClB,OAAO,IAAI,EACX,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,OAAO,WAAW,CACnB,CAAC;KACH;CACF;AAED,QAAA,MAAM,IAAI,EAAG,iBAA0B,CAAC;AAcxC,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;IACnE,OAAO,CAAC,MAAM,CAAiD;IAGzD,UAAU;IAiEV,aAAa;IAqFb,iBAAiB;IAOjB,2BAA2B;IAmG3B,oBAAoB;IA0GpB,cAAc;IAIpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAkRzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAyCxB"}
@@ -14,7 +14,15 @@
14
14
  */
15
15
  /**
16
16
  * Get the current machine ID.
17
- * This value is stable for the lifetime of the process.
17
+ * Returns the override (if set via `setMachineIdOverride`) or the computed value.
18
18
  */
19
19
  export declare function getMachineId(): string;
20
+ /**
21
+ * Set a process-wide machine ID override.
22
+ * Pass `undefined` to clear the override and revert to the computed value.
23
+ *
24
+ * This is used by `create()` to inject a stable machine ID for session continuity,
25
+ * especially when using Redis-backed sessions across process restarts.
26
+ */
27
+ export declare function setMachineIdOverride(id: string | undefined): void;
20
28
  //# sourceMappingURL=machine-id.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../../src/auth/machine-id.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AA4GH;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../../src/auth/machine-id.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AA+GH;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjE"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `create()` Factory Function
3
+ *
4
+ * Spins up a FrontMCP direct server from a flat config object — no decorators,
5
+ * no App classes, no HTTP server. Supports machineId injection for session
6
+ * continuity and caching for reuse.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { create } from '@frontmcp/sdk';
11
+ *
12
+ * const server = await create({
13
+ * info: { name: 'my-service', version: '1.0.0' },
14
+ * tools: [MyTool],
15
+ * adapters: [OpenapiAdapter.init({ name: 'api', spec, baseUrl })],
16
+ * });
17
+ *
18
+ * const { tools } = await server.listTools();
19
+ * const result = await server.callTool('my-tool', { arg: 'value' });
20
+ * await server.dispose();
21
+ * ```
22
+ */
23
+ import 'reflect-metadata';
24
+ import type { DirectMcpServer } from './direct.types';
25
+ import type { CreateConfig } from './create.types';
26
+ /**
27
+ * Create a FrontMCP direct server from a flat config object.
28
+ *
29
+ * Returns a `DirectMcpServer` that provides `listTools`, `callTool`,
30
+ * `listResources`, `readResource`, `listPrompts`, `getPrompt`, and `dispose`.
31
+ *
32
+ * @param config - Flat configuration combining server and app fields
33
+ * @returns A ready-to-use `DirectMcpServer`
34
+ *
35
+ * @example Basic usage
36
+ * ```typescript
37
+ * const server = await create({
38
+ * info: { name: 'my-service', version: '1.0.0' },
39
+ * tools: [MyTool],
40
+ * });
41
+ * const { tools } = await server.listTools();
42
+ * await server.dispose();
43
+ * ```
44
+ *
45
+ * @example With caching and machineId
46
+ * ```typescript
47
+ * const server = await create({
48
+ * info: { name: 'my-service', version: '1.0.0' },
49
+ * tools: [MyTool],
50
+ * machineId: 'stable-id-for-sessions',
51
+ * cacheKey: 'tenant-123',
52
+ * });
53
+ * ```
54
+ */
55
+ export declare function create(config: CreateConfig): Promise<DirectMcpServer>;
56
+ /**
57
+ * Clear the create() instance cache.
58
+ * Useful for testing to ensure clean state between test runs.
59
+ * Does NOT dispose cached servers — call `dispose()` on each first.
60
+ */
61
+ export declare function clearCreateCache(): void;
62
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/direct/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CA6D3E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Configuration types for the `create()` factory function.
3
+ *
4
+ * Provides a flat config interface that combines server-level and app-level
5
+ * fields, avoiding the need for decorators or explicit app class definitions.
6
+ */
7
+ import type { ServerInfoOptions, RedisOptionsInput, PubsubOptionsInput, TransportOptionsInput, LoggingOptionsInput, PaginationOptions, ElicitationOptionsInput, SkillsConfigOptionsInput, ExtAppsOptionsInput, AuthOptionsInput } from '../common/types';
8
+ import type { ToolType, ResourceType, PromptType, PluginType, ProviderType, AdapterType, AgentType, SkillType, AuthProviderType } from '../common/interfaces';
9
+ /**
10
+ * Flat configuration for the `create()` factory function.
11
+ *
12
+ * Combines server-level metadata (info, redis, transport, etc.) with
13
+ * app-level entries (tools, resources, prompts, etc.) into a single object.
14
+ * Internally, app-level fields are wrapped into a synthetic app definition.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { create } from '@frontmcp/sdk';
19
+ *
20
+ * const server = await create({
21
+ * info: { name: 'my-service', version: '1.0.0' },
22
+ * tools: [MyTool],
23
+ * adapters: [OpenapiAdapter.init({ name: 'api', spec, baseUrl })],
24
+ * machineId: 'stable-id',
25
+ * cacheKey: 'tenant-123',
26
+ * });
27
+ * ```
28
+ */
29
+ export interface CreateConfig {
30
+ /** Server name and version (required) */
31
+ info: ServerInfoOptions;
32
+ /** Redis configuration for sessions, persistence, etc. */
33
+ redis?: RedisOptionsInput;
34
+ /** Pub/Sub configuration (Redis-only) for resource subscriptions */
35
+ pubsub?: PubsubOptionsInput;
36
+ /** Transport and session lifecycle configuration */
37
+ transport?: TransportOptionsInput;
38
+ /** Logging configuration */
39
+ logging?: LoggingOptionsInput;
40
+ /** Pagination configuration for list operations */
41
+ pagination?: PaginationOptions;
42
+ /** Elicitation configuration for interactive user input */
43
+ elicitation?: ElicitationOptionsInput;
44
+ /** Skills HTTP endpoints configuration */
45
+ skillsConfig?: SkillsConfigOptionsInput;
46
+ /** MCP Apps (ext-apps) configuration */
47
+ extApps?: ExtAppsOptionsInput;
48
+ /** Tool classes or builder-defined tools */
49
+ tools?: ToolType[];
50
+ /** Resource classes or builder-defined resources */
51
+ resources?: ResourceType[];
52
+ /** Prompt classes or builder-defined prompts */
53
+ prompts?: PromptType[];
54
+ /** Adapter instances (e.g., OpenapiAdapter.init({...})) */
55
+ adapters?: AdapterType[];
56
+ /** Plugin instances */
57
+ plugins?: PluginType[];
58
+ /** Dependency injection providers */
59
+ providers?: ProviderType[];
60
+ /** Auth providers (e.g., GithubAuthProvider, GoogleAuthProvider) */
61
+ authProviders?: AuthProviderType[];
62
+ /** Autonomous AI agents */
63
+ agents?: AgentType[];
64
+ /** Skills for multi-step task workflows */
65
+ skills?: SkillType[];
66
+ /** Authentication configuration for the app */
67
+ auth?: AuthOptionsInput;
68
+ /**
69
+ * Name for the synthetic app.
70
+ * Defaults to `info.name` if not provided.
71
+ */
72
+ appName?: string;
73
+ /**
74
+ * Process-wide machine ID override for session continuity.
75
+ * When set, `getMachineId()` returns this value instead of the computed one.
76
+ * Useful for maintaining sessions across process restarts with Redis storage.
77
+ */
78
+ machineId?: string;
79
+ /**
80
+ * Cache key for reusing server instances.
81
+ * Same `cacheKey` returns the same `DirectMcpServer` promise.
82
+ * Calling `dispose()` on the server automatically evicts it from the cache.
83
+ */
84
+ cacheKey?: string;
85
+ }
86
+ //# sourceMappingURL=create.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.types.d.ts","sourceRoot":"","sources":["../../src/direct/create.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,YAAY;IAG3B,yCAAyC;IACzC,IAAI,EAAE,iBAAiB,CAAC;IAExB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAE1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAE5B,oDAAoD;IACpD,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAElC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAE9B,mDAAmD;IACnD,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAEtC,0CAA0C;IAC1C,YAAY,CAAC,EAAE,wBAAwB,CAAC;IAExC,wCAAwC;IACxC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAI9B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAE3B,gDAAgD;IAChD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB,uBAAuB;IACvB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAE3B,oEAAoE;IACpE,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEnC,2BAA2B;IAC3B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAIxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -6,6 +6,8 @@
6
6
  */
7
7
  import type { ListToolsResult, CallToolResult, ListResourcesResult, ReadResourceResult, ListPromptsResult, GetPromptResult, ListResourceTemplatesResult } from '@modelcontextprotocol/sdk/types.js';
8
8
  import type { DirectMcpServer, DirectCallOptions } from './direct.types';
9
+ import type { ConnectOptions } from './client.types';
10
+ import type { DirectClient } from './client.types';
9
11
  import type { Scope } from '../scope/scope.instance';
10
12
  /**
11
13
  * Implementation of DirectMcpServer that bypasses HTTP transport
@@ -33,6 +35,7 @@ export declare class DirectMcpServerImpl implements DirectMcpServer {
33
35
  readResource(uri: string, options?: DirectCallOptions): Promise<ReadResourceResult>;
34
36
  listPrompts(options?: DirectCallOptions): Promise<ListPromptsResult>;
35
37
  getPrompt(name: string, args?: Record<string, string>, options?: DirectCallOptions): Promise<GetPromptResult>;
38
+ connect(sessionIdOrOptions?: string | ConnectOptions): Promise<DirectClient>;
36
39
  dispose(): Promise<void>;
37
40
  }
38
41
  //# sourceMappingURL=direct-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"direct-server.d.ts","sourceRoot":"","sources":["../../src/direct/direct-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAA4C,MAAM,gBAAgB,CAAC;AACnH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAsCrD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,KAAK,EAAE,KAAK;IAMxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;YACW,OAAO;IAmCf,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIhE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAY5G,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQxE,qBAAqB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAQxF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAYnF,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAY7G,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc/B"}
1
+ {"version":3,"file":"direct-server.d.ts","sourceRoot":"","sources":["../../src/direct/direct-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAA4C,MAAM,gBAAgB,CAAC;AACnH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAsCrD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,KAAK,EAAE,KAAK;IAMxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;YACW,OAAO;IAmCf,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIhE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAY5G,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQxE,qBAAqB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAQxF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAYnF,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAY7G,OAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAgB5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc/B"}
@@ -5,6 +5,7 @@
5
5
  * Useful for embedding MCP servers in existing applications, testing, and agent backends.
6
6
  */
7
7
  import type { ListToolsResult, CallToolResult, ListResourcesResult, ReadResourceResult, ListPromptsResult, GetPromptResult, ListResourceTemplatesResult } from '@modelcontextprotocol/sdk/types.js';
8
+ import type { DirectClient, ConnectOptions } from './client.types';
8
9
  /**
9
10
  * Auth context for direct server invocation.
10
11
  * Simulates what would come from JWT validation in the HTTP layer.
@@ -126,6 +127,14 @@ export interface DirectMcpServer {
126
127
  * @returns Prompt content with messages
127
128
  */
128
129
  getPrompt(name: string, args?: Record<string, string>, options?: DirectCallOptions): Promise<GetPromptResult>;
130
+ /**
131
+ * Connect a new MCP client to this server.
132
+ * Each client gets its own session and in-memory transport.
133
+ *
134
+ * @param sessionIdOrOptions - Session ID string (shorthand) or full ConnectOptions
135
+ * @returns Connected DirectClient instance
136
+ */
137
+ connect(sessionIdOrOptions?: string | ConnectOptions): Promise<DirectClient>;
129
138
  /**
130
139
  * Dispose the server and cleanup resources.
131
140
  */
@@ -1 +1 @@
1
- {"version":3,"file":"direct.types.d.ts","sourceRoot":"","sources":["../../src/direct/direct.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEjE;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAM7G;;;;;OAKG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAEzF;;;;;;OAMG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAMpF;;;;;OAKG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAErE;;;;;;;OAOG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAM9G;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
1
+ {"version":3,"file":"direct.types.d.ts","sourceRoot":"","sources":["../../src/direct/direct.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEjE;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAM7G;;;;;OAKG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAEzF;;;;;;OAMG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAMpF;;;;;OAKG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAErE;;;;;;;OAOG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAM9G;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAM7E;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
package/direct/index.d.ts CHANGED
@@ -12,4 +12,6 @@ export { detectPlatform, formatToolsForPlatform, formatResultForPlatform, PLATFO
12
12
  export type { OpenAITool, ClaudeTool, LangChainTool, VercelAITool, VercelAITools } from './llm-platform';
13
13
  export type { DirectMcpServer, DirectAuthContext, DirectCallOptions, DirectRequestMetadata } from './direct.types';
14
14
  export { DirectMcpServerImpl } from './direct-server';
15
+ export { create, clearCreateCache } from './create';
16
+ export type { CreateConfig } from './create.types';
15
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/direct/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,YAAY,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,WAAW,EAEX,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAEhB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAElB,eAAe,EACf,cAAc,EAEd,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAMrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMzG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEnH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/direct/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,YAAY,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,WAAW,EAEX,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAEhB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAElB,eAAe,EACf,cAAc,EAEd,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAMrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMzG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEnH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAMtD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}