@agimon-ai/po-mcp 0.0.0-alpha.2 → 0.0.0-alpha.4
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 +5 -5
- package/dist/apiContracts.cjs +6 -6
- package/dist/apiContracts.cjs.map +1 -1
- package/dist/apiContracts.d.mts +6 -6
- package/dist/apiContracts.d.mts.map +1 -1
- package/dist/apiContracts.mjs +7 -7
- package/dist/apiContracts.mjs.map +1 -1
- package/dist/extensions/mcp-ui.mjs.map +1 -1
- package/dist/extensions/mcp.cjs +3 -3
- package/dist/extensions/mcp.cjs.map +1 -1
- package/dist/extensions/mcp.d.mts +1 -1
- package/dist/extensions/mcp.mjs +3 -3
- package/dist/extensions/mcp.mjs.map +1 -1
- package/dist/extensions/server.cjs +30 -30
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.mts +1 -1
- package/dist/extensions/server.mjs +37 -37
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/extensions/web.mjs +61 -61
- package/dist/extensions/web.mjs.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +6 -6
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/dist/{mcpCatalog-6Tpt6Gqn.cjs → mcpCatalog-BHoE4gfz.cjs} +10 -10
- package/dist/mcpCatalog-BHoE4gfz.cjs.map +1 -0
- package/dist/{mcpCatalog-SlqWS-sb.mjs → mcpCatalog-Bp-mLZM1.mjs} +11 -11
- package/dist/mcpCatalog-Bp-mLZM1.mjs.map +1 -0
- package/dist/{mcpConfig-BYESy-zP.d.mts → mcpConfig-lHsIQ2fZ.d.mts} +11 -11
- package/dist/{mcpConfig-BYESy-zP.d.mts.map → mcpConfig-lHsIQ2fZ.d.mts.map} +1 -1
- package/dist/projection-gyAA2jRB.mjs.map +1 -1
- package/dist/projection-w3XxXmVi.cjs.map +1 -1
- package/dist/projection.d.mts +3 -3
- package/dist/projection.d.mts.map +1 -1
- package/llms.txt +1 -1
- package/package.json +15 -15
- package/dist/mcpCatalog-6Tpt6Gqn.cjs.map +0 -1
- package/dist/mcpCatalog-SlqWS-sb.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ absent rather than merely hidden from the model.
|
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
18
|
-
`po init`
|
|
18
|
+
`po init` include this adapter in `default.packages` in `.po/modes.yaml`.
|
|
19
19
|
Remove it or move it to a named layer to change which major modes load it. When loaded in Po,
|
|
20
20
|
domain selection controls server access.
|
|
21
21
|
|
|
@@ -40,7 +40,7 @@ Repository `.mcp.json` entries describe direct MCP servers:
|
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Selected legacy plugins may also provide root `.mcp.json`. A schema-gated Agent Plugin v1 instead
|
|
43
|
-
provides root `mcp.json`.
|
|
43
|
+
provides root `mcp.json`. Po validates its portable contract, supplies private persistent
|
|
44
44
|
`PLUGIN_DATA`, and resolves plugin-relative stdio commands and working directories. It also
|
|
45
45
|
normalizes `streamable-http` for the embedded runtime. Invalid portable server entries are isolated
|
|
46
46
|
from the other entries in that plugin.
|
|
@@ -61,7 +61,7 @@ domains:
|
|
|
61
61
|
An absent or empty allowlist retains configured entries. Use `po --no-mcp` when no MCP server
|
|
62
62
|
should load.
|
|
63
63
|
|
|
64
|
-
Within Po, this package consumes the immutable `
|
|
64
|
+
Within Po, this package consumes the immutable `poMcpProjection` service published on the
|
|
65
65
|
session Cordis root.
|
|
66
66
|
Downstream clients run in-process through `@agimon-ai/mcp-proxy`; this adapter does not start its
|
|
67
67
|
Hono server.
|
|
@@ -148,7 +148,7 @@ tool to inspect its description, full input schema, warnings and estimated schem
|
|
|
148
148
|
Authorization sends one `/mcp auth <server>` prompt frame; headless hosts never open a desktop
|
|
149
149
|
browser automatically.
|
|
150
150
|
|
|
151
|
-
The compact `
|
|
151
|
+
The compact `po-mcp-session-auth` status carries configured names, states, safe authorization
|
|
152
152
|
URLs and tool identities/estimates. It excludes credentials and credential-store data. Repository
|
|
153
153
|
catalog and authorization APIs remain separate from this live-session view.
|
|
154
154
|
|
|
@@ -196,7 +196,7 @@ Named routed `src/extensions/` entries declare host contributions and delegate t
|
|
|
196
196
|
### Remote file transfer
|
|
197
197
|
|
|
198
198
|
Session MCP always exposes `share_file` and `save_file`, both marked with
|
|
199
|
-
`_meta['
|
|
199
|
+
`_meta['po/fileTransfer']=true`, subject to the connection's capability grants.
|
|
200
200
|
`share_file({path})` uses session-bound host sharing without a consent prompt. Its
|
|
201
201
|
structured result contains `url`, `fileName`, `mimeType`, `size`, `expiresAt` (epoch
|
|
202
202
|
milliseconds), and `maxDownloads` (3). Links expire after 10 minutes and require
|
package/dist/apiContracts.cjs
CHANGED
|
@@ -185,7 +185,7 @@ const Address = {
|
|
|
185
185
|
scope: "session",
|
|
186
186
|
direction: "client-to-server"
|
|
187
187
|
};
|
|
188
|
-
const mcpAppOpenMethod = (0, _agimon_ai_po_core_pluginProtocol.
|
|
188
|
+
const mcpAppOpenMethod = (0, _agimon_ai_po_core_pluginProtocol.definePoPluginMethod)({
|
|
189
189
|
...Address,
|
|
190
190
|
method: "open",
|
|
191
191
|
input: typebox.Type.Object({ toolCallId: typebox.Type.String({
|
|
@@ -210,13 +210,13 @@ const mcpAppOpenMethod = (0, _agimon_ai_po_core_pluginProtocol.defineDoomPluginM
|
|
|
210
210
|
readOnly: typebox.Type.Boolean()
|
|
211
211
|
})
|
|
212
212
|
});
|
|
213
|
-
const mcpAppActivateMethod = (0, _agimon_ai_po_core_pluginProtocol.
|
|
213
|
+
const mcpAppActivateMethod = (0, _agimon_ai_po_core_pluginProtocol.definePoPluginMethod)({
|
|
214
214
|
...Address,
|
|
215
215
|
method: "activate",
|
|
216
216
|
input: typebox.Type.Object({ leaseId: Lease }, { additionalProperties: false }),
|
|
217
217
|
output: typebox.Type.Object({ readOnly: typebox.Type.Literal(false) })
|
|
218
218
|
});
|
|
219
|
-
const mcpAppCallToolMethod = (0, _agimon_ai_po_core_pluginProtocol.
|
|
219
|
+
const mcpAppCallToolMethod = (0, _agimon_ai_po_core_pluginProtocol.definePoPluginMethod)({
|
|
220
220
|
...Address,
|
|
221
221
|
method: "callTool",
|
|
222
222
|
input: typebox.Type.Object({
|
|
@@ -229,7 +229,7 @@ const mcpAppCallToolMethod = (0, _agimon_ai_po_core_pluginProtocol.defineDoomPlu
|
|
|
229
229
|
}, { additionalProperties: false }),
|
|
230
230
|
output: Result
|
|
231
231
|
});
|
|
232
|
-
const mcpAppSetStateMethod = (0, _agimon_ai_po_core_pluginProtocol.
|
|
232
|
+
const mcpAppSetStateMethod = (0, _agimon_ai_po_core_pluginProtocol.definePoPluginMethod)({
|
|
233
233
|
...Address,
|
|
234
234
|
method: "setState",
|
|
235
235
|
input: typebox.Type.Object({
|
|
@@ -238,7 +238,7 @@ const mcpAppSetStateMethod = (0, _agimon_ai_po_core_pluginProtocol.defineDoomPlu
|
|
|
238
238
|
}, { additionalProperties: false }),
|
|
239
239
|
output: Empty
|
|
240
240
|
});
|
|
241
|
-
const mcpAppFollowUpMethod = (0, _agimon_ai_po_core_pluginProtocol.
|
|
241
|
+
const mcpAppFollowUpMethod = (0, _agimon_ai_po_core_pluginProtocol.definePoPluginMethod)({
|
|
242
242
|
...Address,
|
|
243
243
|
method: "followUp",
|
|
244
244
|
input: typebox.Type.Object({
|
|
@@ -250,7 +250,7 @@ const mcpAppFollowUpMethod = (0, _agimon_ai_po_core_pluginProtocol.defineDoomPlu
|
|
|
250
250
|
}, { additionalProperties: false }),
|
|
251
251
|
output: Empty
|
|
252
252
|
});
|
|
253
|
-
const mcpAppCloseMethod = (0, _agimon_ai_po_core_pluginProtocol.
|
|
253
|
+
const mcpAppCloseMethod = (0, _agimon_ai_po_core_pluginProtocol.definePoPluginMethod)({
|
|
254
254
|
...Address,
|
|
255
255
|
method: "close",
|
|
256
256
|
input: typebox.Type.Object({ leaseId: Lease }, { additionalProperties: false }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses","Type","defineDoomPluginMethod"],"sources":["../src/schemas/apiContracts.ts","../src/schemas/mcpApps.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nconst RepositoryId = Type.String({\n pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24}|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$',\n});\nconst RepositoryQuery = [{ name: 'repositoryId', in: 'query' as const, required: true, schema: RepositoryId }];\nexport const McpCatalogSchema = Type.Object({\n repositoryId: S,\n sync: Type.Object({ fresh: B, reasons: Type.Array(S) }),\n servers: Type.Array(\n Type.Object({\n name: S,\n state: literals(['not-connected', 'connecting', 'connected', 'degraded', 'needs-auth', 'failed', 'closed']),\n source: literals(['cached', 'live', 'configured']),\n credentialPresent: B,\n tools: Type.Array(Type.Object({ name: S, piName: S, description: O(S) })),\n error: O(S),\n }),\n ),\n droppedServers: Type.Array(S),\n diagnostics: Type.Array(S),\n});\nexport const McpAuthorizationSchema = Type.Object({\n id: S,\n repositoryId: S,\n serverName: S,\n status: literals(['starting', 'waiting', 'completed', 'failed', 'cancelled', 'expired']),\n authorizationUrl: O(S),\n error: O(S),\n expiresAt: N,\n});\nexport const McpSessionToolSchema = Type.Object({\n server: S,\n tool: S,\n description: O(S),\n inputSchema: Type.Record(S, Type.Unknown()),\n tokens: N,\n});\nconst SessionToolQuery = [\n { name: 'server', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 160 }) },\n { name: 'tool', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 256 }) },\n];\ntype HttpContract = Parameters<typeof defineApiContract>[0]['http'][number];\nexport const apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: [\n {\n id: 'mcp.session.tool',\n scope: 'session',\n basePath: 'mcp-session',\n path: '/tool',\n method: 'GET',\n authentication: 'owner',\n description: 'Read one tool the session reaches through mcp_use: its description, schema, and token cost.',\n parameters: SessionToolQuery,\n responses: jsonApiResponses(McpSessionToolSchema),\n },\n ...(['global', 'workspace'] as const).flatMap((scope): HttpContract[] => [\n {\n id: 'mcp.catalog',\n scope,\n basePath: 'mcp',\n path: '/repository',\n method: 'GET',\n authentication: 'owner',\n description: 'Read the synced MCP repository catalog.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.discover',\n scope,\n basePath: 'mcp',\n path: '/repository/discover',\n method: 'POST',\n authentication: 'owner',\n description: 'Discover repository MCP servers.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ repositoryId: RepositoryId }) },\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.authorize',\n scope,\n basePath: 'mcp',\n path: '/repository/authorize',\n method: 'POST',\n authentication: 'owner',\n description: 'Start MCP authorization.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n repositoryId: RepositoryId,\n serverName: Type.String({ minLength: 1, maxLength: 160 }),\n }),\n },\n responses: jsonApiResponses(McpAuthorizationSchema, 202),\n },\n ...(['GET', 'DELETE'] as const).map((method) => ({\n id: `mcp.authorization.${method}`,\n scope,\n basePath: 'mcp',\n path: '/repository/authorize/{flowId}',\n method,\n authentication: 'owner' as const,\n description: method === 'GET' ? 'Read an authorization flow.' : 'Cancel an authorization flow.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpAuthorizationSchema),\n })),\n ]),\n ],\n});\nexport default apiContracts;\n","import { defineDoomPluginMethod } from '@agimon-ai/po-core/pluginProtocol';\nimport { Type } from 'typebox';\n\nexport type { McpAppOpenResult } from '../types/webMcp';\n\nconst Lease = Type.String({ minLength: 1, maxLength: 128 });\nconst JsonObject = Type.Record(Type.String(), Type.Unknown());\nconst Empty = Type.Object({}, { additionalProperties: false });\nconst Result = Type.Object({\n content: Type.Array(Type.Unknown()),\n structuredContent: Type.Optional(Type.Unknown()),\n _meta: Type.Optional(JsonObject),\n isError: Type.Optional(Type.Boolean()),\n});\nconst Address = { service: 'mcp.apps', scope: 'session', direction: 'client-to-server' } as const;\n\nexport const mcpAppOpenMethod = defineDoomPluginMethod({\n ...Address,\n method: 'open',\n input: Type.Object({ toolCallId: Type.String({ minLength: 1, maxLength: 512 }) }, { additionalProperties: false }),\n output: Type.Object({\n leaseId: Lease,\n html: Type.String(),\n resourceUri: Type.String(),\n protocol: Type.Union([Type.Literal('mcp'), Type.Literal('openai')]),\n resourceMeta: JsonObject,\n tool: Type.Object({\n name: Type.String(),\n description: Type.String(),\n inputSchema: Type.Object({ type: Type.Literal('object') }, { additionalProperties: true }),\n _meta: JsonObject,\n }),\n args: JsonObject,\n result: Result,\n state: Type.Unknown(),\n readOnly: Type.Boolean(),\n }),\n});\n\nexport const mcpAppActivateMethod = defineDoomPluginMethod({\n ...Address,\n method: 'activate',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Type.Object({ readOnly: Type.Literal(false) }),\n});\nexport const mcpAppCallToolMethod = defineDoomPluginMethod({\n ...Address,\n method: 'callTool',\n input: Type.Object(\n { leaseId: Lease, name: Type.String({ minLength: 1, maxLength: 256 }), arguments: JsonObject },\n { additionalProperties: false },\n ),\n output: Result,\n});\nexport const mcpAppSetStateMethod = defineDoomPluginMethod({\n ...Address,\n method: 'setState',\n input: Type.Object({ leaseId: Lease, state: Type.Unknown() }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppFollowUpMethod = defineDoomPluginMethod({\n ...Address,\n method: 'followUp',\n input: Type.Object(\n { leaseId: Lease, prompt: Type.String({ minLength: 1, maxLength: 16000 }) },\n { additionalProperties: false },\n ),\n output: Empty,\n});\nexport const mcpAppCloseMethod = defineDoomPluginMethod({\n ...Address,\n method: 'close',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppMethods = [\n mcpAppOpenMethod,\n mcpAppActivateMethod,\n mcpAppCallToolMethod,\n mcpAppSetStateMethod,\n mcpAppFollowUpMethod,\n mcpAppCloseMethod,\n] as const;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses","Type","definePoPluginMethod"],"sources":["../src/schemas/apiContracts.ts","../src/schemas/mcpApps.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nconst RepositoryId = Type.String({\n pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24}|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$',\n});\nconst RepositoryQuery = [{ name: 'repositoryId', in: 'query' as const, required: true, schema: RepositoryId }];\nexport const McpCatalogSchema = Type.Object({\n repositoryId: S,\n sync: Type.Object({ fresh: B, reasons: Type.Array(S) }),\n servers: Type.Array(\n Type.Object({\n name: S,\n state: literals(['not-connected', 'connecting', 'connected', 'degraded', 'needs-auth', 'failed', 'closed']),\n source: literals(['cached', 'live', 'configured']),\n credentialPresent: B,\n tools: Type.Array(Type.Object({ name: S, piName: S, description: O(S) })),\n error: O(S),\n }),\n ),\n droppedServers: Type.Array(S),\n diagnostics: Type.Array(S),\n});\nexport const McpAuthorizationSchema = Type.Object({\n id: S,\n repositoryId: S,\n serverName: S,\n status: literals(['starting', 'waiting', 'completed', 'failed', 'cancelled', 'expired']),\n authorizationUrl: O(S),\n error: O(S),\n expiresAt: N,\n});\nexport const McpSessionToolSchema = Type.Object({\n server: S,\n tool: S,\n description: O(S),\n inputSchema: Type.Record(S, Type.Unknown()),\n tokens: N,\n});\nconst SessionToolQuery = [\n { name: 'server', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 160 }) },\n { name: 'tool', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 256 }) },\n];\ntype HttpContract = Parameters<typeof defineApiContract>[0]['http'][number];\nexport const apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: [\n {\n id: 'mcp.session.tool',\n scope: 'session',\n basePath: 'mcp-session',\n path: '/tool',\n method: 'GET',\n authentication: 'owner',\n description: 'Read one tool the session reaches through mcp_use: its description, schema, and token cost.',\n parameters: SessionToolQuery,\n responses: jsonApiResponses(McpSessionToolSchema),\n },\n ...(['global', 'workspace'] as const).flatMap((scope): HttpContract[] => [\n {\n id: 'mcp.catalog',\n scope,\n basePath: 'mcp',\n path: '/repository',\n method: 'GET',\n authentication: 'owner',\n description: 'Read the synced MCP repository catalog.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.discover',\n scope,\n basePath: 'mcp',\n path: '/repository/discover',\n method: 'POST',\n authentication: 'owner',\n description: 'Discover repository MCP servers.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ repositoryId: RepositoryId }) },\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.authorize',\n scope,\n basePath: 'mcp',\n path: '/repository/authorize',\n method: 'POST',\n authentication: 'owner',\n description: 'Start MCP authorization.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n repositoryId: RepositoryId,\n serverName: Type.String({ minLength: 1, maxLength: 160 }),\n }),\n },\n responses: jsonApiResponses(McpAuthorizationSchema, 202),\n },\n ...(['GET', 'DELETE'] as const).map((method) => ({\n id: `mcp.authorization.${method}`,\n scope,\n basePath: 'mcp',\n path: '/repository/authorize/{flowId}',\n method,\n authentication: 'owner' as const,\n description: method === 'GET' ? 'Read an authorization flow.' : 'Cancel an authorization flow.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpAuthorizationSchema),\n })),\n ]),\n ],\n});\nexport default apiContracts;\n","import { definePoPluginMethod } from '@agimon-ai/po-core/pluginProtocol';\nimport { Type } from 'typebox';\n\nexport type { McpAppOpenResult } from '../types/webMcp';\n\nconst Lease = Type.String({ minLength: 1, maxLength: 128 });\nconst JsonObject = Type.Record(Type.String(), Type.Unknown());\nconst Empty = Type.Object({}, { additionalProperties: false });\nconst Result = Type.Object({\n content: Type.Array(Type.Unknown()),\n structuredContent: Type.Optional(Type.Unknown()),\n _meta: Type.Optional(JsonObject),\n isError: Type.Optional(Type.Boolean()),\n});\nconst Address = { service: 'mcp.apps', scope: 'session', direction: 'client-to-server' } as const;\n\nexport const mcpAppOpenMethod = definePoPluginMethod({\n ...Address,\n method: 'open',\n input: Type.Object({ toolCallId: Type.String({ minLength: 1, maxLength: 512 }) }, { additionalProperties: false }),\n output: Type.Object({\n leaseId: Lease,\n html: Type.String(),\n resourceUri: Type.String(),\n protocol: Type.Union([Type.Literal('mcp'), Type.Literal('openai')]),\n resourceMeta: JsonObject,\n tool: Type.Object({\n name: Type.String(),\n description: Type.String(),\n inputSchema: Type.Object({ type: Type.Literal('object') }, { additionalProperties: true }),\n _meta: JsonObject,\n }),\n args: JsonObject,\n result: Result,\n state: Type.Unknown(),\n readOnly: Type.Boolean(),\n }),\n});\n\nexport const mcpAppActivateMethod = definePoPluginMethod({\n ...Address,\n method: 'activate',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Type.Object({ readOnly: Type.Literal(false) }),\n});\nexport const mcpAppCallToolMethod = definePoPluginMethod({\n ...Address,\n method: 'callTool',\n input: Type.Object(\n { leaseId: Lease, name: Type.String({ minLength: 1, maxLength: 256 }), arguments: JsonObject },\n { additionalProperties: false },\n ),\n output: Result,\n});\nexport const mcpAppSetStateMethod = definePoPluginMethod({\n ...Address,\n method: 'setState',\n input: Type.Object({ leaseId: Lease, state: Type.Unknown() }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppFollowUpMethod = definePoPluginMethod({\n ...Address,\n method: 'followUp',\n input: Type.Object(\n { leaseId: Lease, prompt: Type.String({ minLength: 1, maxLength: 16000 }) },\n { additionalProperties: false },\n ),\n output: Empty,\n});\nexport const mcpAppCloseMethod = definePoPluginMethod({\n ...Address,\n method: 'close',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppMethods = [\n mcpAppOpenMethod,\n mcpAppActivateMethod,\n mcpAppCallToolMethod,\n mcpAppSetStateMethod,\n mcpAppFollowUpMethod,\n mcpAppCloseMethod,\n] as const;\n"],"mappings":"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"}
|
package/dist/apiContracts.d.mts
CHANGED
|
@@ -80,7 +80,7 @@ interface McpAppOpenResult {
|
|
|
80
80
|
}
|
|
81
81
|
//#endregion
|
|
82
82
|
//#region src/schemas/mcpApps.d.ts
|
|
83
|
-
export declare const mcpAppOpenMethod: import("@agimon-ai/po-core/pluginProtocol").
|
|
83
|
+
export declare const mcpAppOpenMethod: import("@agimon-ai/po-core/pluginProtocol").PoPluginMethod<Type.TObject<{
|
|
84
84
|
toolCallId: Type.TString;
|
|
85
85
|
}>, Type.TObject<{
|
|
86
86
|
leaseId: Type.TString;
|
|
@@ -106,12 +106,12 @@ export declare const mcpAppOpenMethod: import("@agimon-ai/po-core/pluginProtocol
|
|
|
106
106
|
state: Type.TUnknown;
|
|
107
107
|
readOnly: Type.TBoolean;
|
|
108
108
|
}>>;
|
|
109
|
-
export declare const mcpAppActivateMethod: import("@agimon-ai/po-core/pluginProtocol").
|
|
109
|
+
export declare const mcpAppActivateMethod: import("@agimon-ai/po-core/pluginProtocol").PoPluginMethod<Type.TObject<{
|
|
110
110
|
leaseId: Type.TString;
|
|
111
111
|
}>, Type.TObject<{
|
|
112
112
|
readOnly: Type.TLiteral<false>;
|
|
113
113
|
}>>;
|
|
114
|
-
export declare const mcpAppCallToolMethod: import("@agimon-ai/po-core/pluginProtocol").
|
|
114
|
+
export declare const mcpAppCallToolMethod: import("@agimon-ai/po-core/pluginProtocol").PoPluginMethod<Type.TObject<{
|
|
115
115
|
leaseId: Type.TString;
|
|
116
116
|
name: Type.TString;
|
|
117
117
|
arguments: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
@@ -121,15 +121,15 @@ export declare const mcpAppCallToolMethod: import("@agimon-ai/po-core/pluginProt
|
|
|
121
121
|
_meta: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
122
122
|
isError: Type.TOptional<Type.TBoolean>;
|
|
123
123
|
}>>;
|
|
124
|
-
export declare const mcpAppSetStateMethod: import("@agimon-ai/po-core/pluginProtocol").
|
|
124
|
+
export declare const mcpAppSetStateMethod: import("@agimon-ai/po-core/pluginProtocol").PoPluginMethod<Type.TObject<{
|
|
125
125
|
leaseId: Type.TString;
|
|
126
126
|
state: Type.TUnknown;
|
|
127
127
|
}>, Type.TObject<{}>>;
|
|
128
|
-
export declare const mcpAppFollowUpMethod: import("@agimon-ai/po-core/pluginProtocol").
|
|
128
|
+
export declare const mcpAppFollowUpMethod: import("@agimon-ai/po-core/pluginProtocol").PoPluginMethod<Type.TObject<{
|
|
129
129
|
leaseId: Type.TString;
|
|
130
130
|
prompt: Type.TString;
|
|
131
131
|
}>, Type.TObject<{}>>;
|
|
132
|
-
export declare const mcpAppCloseMethod: import("@agimon-ai/po-core/pluginProtocol").
|
|
132
|
+
export declare const mcpAppCloseMethod: import("@agimon-ai/po-core/pluginProtocol").PoPluginMethod<Type.TObject<{
|
|
133
133
|
leaseId: Type.TString;
|
|
134
134
|
}>, Type.TObject<{}>>;
|
|
135
135
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts","../src/types/webMcp.ts","../src/schemas/mcpApps.ts"],"mappings":";;;;qBAiDa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCvCI;EACf;EACA;EACA;EACA;EACA,cAAc;EACd;IACE;IACA;IACA;MAAe;OAAiB;;IAChC,OAAO;;EAET,MAAM;EACN;IAAU;IAAoB;IAA6B,QAAQ;IAAyB;;EAC5F;EACA;;;;qBCTW,8DAAgB,
|
|
1
|
+
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts","../src/types/webMcp.ts","../src/schemas/mcpApps.ts"],"mappings":";;;;qBAiDa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCvCI;EACf;EACA;EACA;EACA;EACA,cAAc;EACd;IACE;IACA;IACA;MAAe;OAAiB;;IAChC,OAAO;;EAET,MAAM;EACN;IAAU;IAAoB;IAA6B,QAAQ;IAAyB;;EAC5F;EACA;;;;qBCTW,8DAAgB,eAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;qBAuBhB,kEAAoB,eAAA,KAAA;;;;;qBAMpB,kEAAoB,eAAA,KAAA;;;;;;;;;;qBASpB,kEAAoB,eAAA,KAAA;;;IAK/B,KAAA;qBACW,kEAAoB,eAAA,KAAA;;;IAQ/B,KAAA;qBACW,+DAAiB,eAAA,KAAA;;IAK5B,KAAA"}
|
package/dist/apiContracts.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineApiContract, jsonApiResponses } from "@agimon-ai/po-core/apiContracts";
|
|
2
2
|
import { Type } from "typebox";
|
|
3
|
-
import {
|
|
3
|
+
import { definePoPluginMethod } from "@agimon-ai/po-core/pluginProtocol";
|
|
4
4
|
//#region src/schemas/apiContracts.ts
|
|
5
5
|
const S = Type.String();
|
|
6
6
|
const N = Type.Number();
|
|
@@ -181,7 +181,7 @@ const Address = {
|
|
|
181
181
|
scope: "session",
|
|
182
182
|
direction: "client-to-server"
|
|
183
183
|
};
|
|
184
|
-
const mcpAppOpenMethod =
|
|
184
|
+
const mcpAppOpenMethod = definePoPluginMethod({
|
|
185
185
|
...Address,
|
|
186
186
|
method: "open",
|
|
187
187
|
input: Type.Object({ toolCallId: Type.String({
|
|
@@ -206,13 +206,13 @@ const mcpAppOpenMethod = defineDoomPluginMethod({
|
|
|
206
206
|
readOnly: Type.Boolean()
|
|
207
207
|
})
|
|
208
208
|
});
|
|
209
|
-
const mcpAppActivateMethod =
|
|
209
|
+
const mcpAppActivateMethod = definePoPluginMethod({
|
|
210
210
|
...Address,
|
|
211
211
|
method: "activate",
|
|
212
212
|
input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),
|
|
213
213
|
output: Type.Object({ readOnly: Type.Literal(false) })
|
|
214
214
|
});
|
|
215
|
-
const mcpAppCallToolMethod =
|
|
215
|
+
const mcpAppCallToolMethod = definePoPluginMethod({
|
|
216
216
|
...Address,
|
|
217
217
|
method: "callTool",
|
|
218
218
|
input: Type.Object({
|
|
@@ -225,7 +225,7 @@ const mcpAppCallToolMethod = defineDoomPluginMethod({
|
|
|
225
225
|
}, { additionalProperties: false }),
|
|
226
226
|
output: Result
|
|
227
227
|
});
|
|
228
|
-
const mcpAppSetStateMethod =
|
|
228
|
+
const mcpAppSetStateMethod = definePoPluginMethod({
|
|
229
229
|
...Address,
|
|
230
230
|
method: "setState",
|
|
231
231
|
input: Type.Object({
|
|
@@ -234,7 +234,7 @@ const mcpAppSetStateMethod = defineDoomPluginMethod({
|
|
|
234
234
|
}, { additionalProperties: false }),
|
|
235
235
|
output: Empty
|
|
236
236
|
});
|
|
237
|
-
const mcpAppFollowUpMethod =
|
|
237
|
+
const mcpAppFollowUpMethod = definePoPluginMethod({
|
|
238
238
|
...Address,
|
|
239
239
|
method: "followUp",
|
|
240
240
|
input: Type.Object({
|
|
@@ -246,7 +246,7 @@ const mcpAppFollowUpMethod = defineDoomPluginMethod({
|
|
|
246
246
|
}, { additionalProperties: false }),
|
|
247
247
|
output: Empty
|
|
248
248
|
});
|
|
249
|
-
const mcpAppCloseMethod =
|
|
249
|
+
const mcpAppCloseMethod = definePoPluginMethod({
|
|
250
250
|
...Address,
|
|
251
251
|
method: "close",
|
|
252
252
|
input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts","../src/schemas/mcpApps.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nconst RepositoryId = Type.String({\n pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24}|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$',\n});\nconst RepositoryQuery = [{ name: 'repositoryId', in: 'query' as const, required: true, schema: RepositoryId }];\nexport const McpCatalogSchema = Type.Object({\n repositoryId: S,\n sync: Type.Object({ fresh: B, reasons: Type.Array(S) }),\n servers: Type.Array(\n Type.Object({\n name: S,\n state: literals(['not-connected', 'connecting', 'connected', 'degraded', 'needs-auth', 'failed', 'closed']),\n source: literals(['cached', 'live', 'configured']),\n credentialPresent: B,\n tools: Type.Array(Type.Object({ name: S, piName: S, description: O(S) })),\n error: O(S),\n }),\n ),\n droppedServers: Type.Array(S),\n diagnostics: Type.Array(S),\n});\nexport const McpAuthorizationSchema = Type.Object({\n id: S,\n repositoryId: S,\n serverName: S,\n status: literals(['starting', 'waiting', 'completed', 'failed', 'cancelled', 'expired']),\n authorizationUrl: O(S),\n error: O(S),\n expiresAt: N,\n});\nexport const McpSessionToolSchema = Type.Object({\n server: S,\n tool: S,\n description: O(S),\n inputSchema: Type.Record(S, Type.Unknown()),\n tokens: N,\n});\nconst SessionToolQuery = [\n { name: 'server', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 160 }) },\n { name: 'tool', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 256 }) },\n];\ntype HttpContract = Parameters<typeof defineApiContract>[0]['http'][number];\nexport const apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: [\n {\n id: 'mcp.session.tool',\n scope: 'session',\n basePath: 'mcp-session',\n path: '/tool',\n method: 'GET',\n authentication: 'owner',\n description: 'Read one tool the session reaches through mcp_use: its description, schema, and token cost.',\n parameters: SessionToolQuery,\n responses: jsonApiResponses(McpSessionToolSchema),\n },\n ...(['global', 'workspace'] as const).flatMap((scope): HttpContract[] => [\n {\n id: 'mcp.catalog',\n scope,\n basePath: 'mcp',\n path: '/repository',\n method: 'GET',\n authentication: 'owner',\n description: 'Read the synced MCP repository catalog.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.discover',\n scope,\n basePath: 'mcp',\n path: '/repository/discover',\n method: 'POST',\n authentication: 'owner',\n description: 'Discover repository MCP servers.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ repositoryId: RepositoryId }) },\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.authorize',\n scope,\n basePath: 'mcp',\n path: '/repository/authorize',\n method: 'POST',\n authentication: 'owner',\n description: 'Start MCP authorization.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n repositoryId: RepositoryId,\n serverName: Type.String({ minLength: 1, maxLength: 160 }),\n }),\n },\n responses: jsonApiResponses(McpAuthorizationSchema, 202),\n },\n ...(['GET', 'DELETE'] as const).map((method) => ({\n id: `mcp.authorization.${method}`,\n scope,\n basePath: 'mcp',\n path: '/repository/authorize/{flowId}',\n method,\n authentication: 'owner' as const,\n description: method === 'GET' ? 'Read an authorization flow.' : 'Cancel an authorization flow.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpAuthorizationSchema),\n })),\n ]),\n ],\n});\nexport default apiContracts;\n","import { defineDoomPluginMethod } from '@agimon-ai/po-core/pluginProtocol';\nimport { Type } from 'typebox';\n\nexport type { McpAppOpenResult } from '../types/webMcp';\n\nconst Lease = Type.String({ minLength: 1, maxLength: 128 });\nconst JsonObject = Type.Record(Type.String(), Type.Unknown());\nconst Empty = Type.Object({}, { additionalProperties: false });\nconst Result = Type.Object({\n content: Type.Array(Type.Unknown()),\n structuredContent: Type.Optional(Type.Unknown()),\n _meta: Type.Optional(JsonObject),\n isError: Type.Optional(Type.Boolean()),\n});\nconst Address = { service: 'mcp.apps', scope: 'session', direction: 'client-to-server' } as const;\n\nexport const mcpAppOpenMethod = defineDoomPluginMethod({\n ...Address,\n method: 'open',\n input: Type.Object({ toolCallId: Type.String({ minLength: 1, maxLength: 512 }) }, { additionalProperties: false }),\n output: Type.Object({\n leaseId: Lease,\n html: Type.String(),\n resourceUri: Type.String(),\n protocol: Type.Union([Type.Literal('mcp'), Type.Literal('openai')]),\n resourceMeta: JsonObject,\n tool: Type.Object({\n name: Type.String(),\n description: Type.String(),\n inputSchema: Type.Object({ type: Type.Literal('object') }, { additionalProperties: true }),\n _meta: JsonObject,\n }),\n args: JsonObject,\n result: Result,\n state: Type.Unknown(),\n readOnly: Type.Boolean(),\n }),\n});\n\nexport const mcpAppActivateMethod = defineDoomPluginMethod({\n ...Address,\n method: 'activate',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Type.Object({ readOnly: Type.Literal(false) }),\n});\nexport const mcpAppCallToolMethod = defineDoomPluginMethod({\n ...Address,\n method: 'callTool',\n input: Type.Object(\n { leaseId: Lease, name: Type.String({ minLength: 1, maxLength: 256 }), arguments: JsonObject },\n { additionalProperties: false },\n ),\n output: Result,\n});\nexport const mcpAppSetStateMethod = defineDoomPluginMethod({\n ...Address,\n method: 'setState',\n input: Type.Object({ leaseId: Lease, state: Type.Unknown() }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppFollowUpMethod = defineDoomPluginMethod({\n ...Address,\n method: 'followUp',\n input: Type.Object(\n { leaseId: Lease, prompt: Type.String({ minLength: 1, maxLength: 16000 }) },\n { additionalProperties: false },\n ),\n output: Empty,\n});\nexport const mcpAppCloseMethod = defineDoomPluginMethod({\n ...Address,\n method: 'close',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppMethods = [\n mcpAppOpenMethod,\n mcpAppActivateMethod,\n mcpAppCallToolMethod,\n mcpAppSetStateMethod,\n mcpAppFollowUpMethod,\n mcpAppCloseMethod,\n] as const;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts","../src/schemas/mcpApps.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nconst RepositoryId = Type.String({\n pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24}|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$',\n});\nconst RepositoryQuery = [{ name: 'repositoryId', in: 'query' as const, required: true, schema: RepositoryId }];\nexport const McpCatalogSchema = Type.Object({\n repositoryId: S,\n sync: Type.Object({ fresh: B, reasons: Type.Array(S) }),\n servers: Type.Array(\n Type.Object({\n name: S,\n state: literals(['not-connected', 'connecting', 'connected', 'degraded', 'needs-auth', 'failed', 'closed']),\n source: literals(['cached', 'live', 'configured']),\n credentialPresent: B,\n tools: Type.Array(Type.Object({ name: S, piName: S, description: O(S) })),\n error: O(S),\n }),\n ),\n droppedServers: Type.Array(S),\n diagnostics: Type.Array(S),\n});\nexport const McpAuthorizationSchema = Type.Object({\n id: S,\n repositoryId: S,\n serverName: S,\n status: literals(['starting', 'waiting', 'completed', 'failed', 'cancelled', 'expired']),\n authorizationUrl: O(S),\n error: O(S),\n expiresAt: N,\n});\nexport const McpSessionToolSchema = Type.Object({\n server: S,\n tool: S,\n description: O(S),\n inputSchema: Type.Record(S, Type.Unknown()),\n tokens: N,\n});\nconst SessionToolQuery = [\n { name: 'server', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 160 }) },\n { name: 'tool', in: 'query' as const, required: true, schema: Type.String({ minLength: 1, maxLength: 256 }) },\n];\ntype HttpContract = Parameters<typeof defineApiContract>[0]['http'][number];\nexport const apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: [\n {\n id: 'mcp.session.tool',\n scope: 'session',\n basePath: 'mcp-session',\n path: '/tool',\n method: 'GET',\n authentication: 'owner',\n description: 'Read one tool the session reaches through mcp_use: its description, schema, and token cost.',\n parameters: SessionToolQuery,\n responses: jsonApiResponses(McpSessionToolSchema),\n },\n ...(['global', 'workspace'] as const).flatMap((scope): HttpContract[] => [\n {\n id: 'mcp.catalog',\n scope,\n basePath: 'mcp',\n path: '/repository',\n method: 'GET',\n authentication: 'owner',\n description: 'Read the synced MCP repository catalog.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.discover',\n scope,\n basePath: 'mcp',\n path: '/repository/discover',\n method: 'POST',\n authentication: 'owner',\n description: 'Discover repository MCP servers.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ repositoryId: RepositoryId }) },\n responses: jsonApiResponses(McpCatalogSchema),\n },\n {\n id: 'mcp.authorize',\n scope,\n basePath: 'mcp',\n path: '/repository/authorize',\n method: 'POST',\n authentication: 'owner',\n description: 'Start MCP authorization.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n repositoryId: RepositoryId,\n serverName: Type.String({ minLength: 1, maxLength: 160 }),\n }),\n },\n responses: jsonApiResponses(McpAuthorizationSchema, 202),\n },\n ...(['GET', 'DELETE'] as const).map((method) => ({\n id: `mcp.authorization.${method}`,\n scope,\n basePath: 'mcp',\n path: '/repository/authorize/{flowId}',\n method,\n authentication: 'owner' as const,\n description: method === 'GET' ? 'Read an authorization flow.' : 'Cancel an authorization flow.',\n parameters: RepositoryQuery,\n responses: jsonApiResponses(McpAuthorizationSchema),\n })),\n ]),\n ],\n});\nexport default apiContracts;\n","import { definePoPluginMethod } from '@agimon-ai/po-core/pluginProtocol';\nimport { Type } from 'typebox';\n\nexport type { McpAppOpenResult } from '../types/webMcp';\n\nconst Lease = Type.String({ minLength: 1, maxLength: 128 });\nconst JsonObject = Type.Record(Type.String(), Type.Unknown());\nconst Empty = Type.Object({}, { additionalProperties: false });\nconst Result = Type.Object({\n content: Type.Array(Type.Unknown()),\n structuredContent: Type.Optional(Type.Unknown()),\n _meta: Type.Optional(JsonObject),\n isError: Type.Optional(Type.Boolean()),\n});\nconst Address = { service: 'mcp.apps', scope: 'session', direction: 'client-to-server' } as const;\n\nexport const mcpAppOpenMethod = definePoPluginMethod({\n ...Address,\n method: 'open',\n input: Type.Object({ toolCallId: Type.String({ minLength: 1, maxLength: 512 }) }, { additionalProperties: false }),\n output: Type.Object({\n leaseId: Lease,\n html: Type.String(),\n resourceUri: Type.String(),\n protocol: Type.Union([Type.Literal('mcp'), Type.Literal('openai')]),\n resourceMeta: JsonObject,\n tool: Type.Object({\n name: Type.String(),\n description: Type.String(),\n inputSchema: Type.Object({ type: Type.Literal('object') }, { additionalProperties: true }),\n _meta: JsonObject,\n }),\n args: JsonObject,\n result: Result,\n state: Type.Unknown(),\n readOnly: Type.Boolean(),\n }),\n});\n\nexport const mcpAppActivateMethod = definePoPluginMethod({\n ...Address,\n method: 'activate',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Type.Object({ readOnly: Type.Literal(false) }),\n});\nexport const mcpAppCallToolMethod = definePoPluginMethod({\n ...Address,\n method: 'callTool',\n input: Type.Object(\n { leaseId: Lease, name: Type.String({ minLength: 1, maxLength: 256 }), arguments: JsonObject },\n { additionalProperties: false },\n ),\n output: Result,\n});\nexport const mcpAppSetStateMethod = definePoPluginMethod({\n ...Address,\n method: 'setState',\n input: Type.Object({ leaseId: Lease, state: Type.Unknown() }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppFollowUpMethod = definePoPluginMethod({\n ...Address,\n method: 'followUp',\n input: Type.Object(\n { leaseId: Lease, prompt: Type.String({ minLength: 1, maxLength: 16000 }) },\n { additionalProperties: false },\n ),\n output: Empty,\n});\nexport const mcpAppCloseMethod = definePoPluginMethod({\n ...Address,\n method: 'close',\n input: Type.Object({ leaseId: Lease }, { additionalProperties: false }),\n output: Empty,\n});\nexport const mcpAppMethods = [\n mcpAppOpenMethod,\n mcpAppActivateMethod,\n mcpAppCallToolMethod,\n mcpAppSetStateMethod,\n mcpAppFollowUpMethod,\n mcpAppCloseMethod,\n] as const;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-ui.mjs","names":["Widget0","Widget1"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/mcp_use.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/session_mcp.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type
|
|
1
|
+
{"version":3,"file":"mcp-ui.mjs","names":["Widget0","Widget1"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/mcp_use.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/session_mcp.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type PoMcpWidgetProps } from '@agimon-ai/po-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/po-web-components';\n\nfunction McpUseMcpWidget(props: PoMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Call MCP tool\">\n <McpToolFields\n fields={[\n ['Server', props.args.server],\n ['Tool', props.args.tool],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(McpUseMcpWidget);\n","import { defineMcpWidget, type PoMcpWidgetProps } from '@agimon-ai/po-core/web';\nimport { McpToolFrame, McpToolOutput } from '@agimon-ai/po-web-components';\n\nfunction SessionMcpMcpWidget(props: PoMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title={props.toolName}>\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(SessionMcpMcpWidget);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport type { ComponentType } from 'react';\nimport type { PoMcpWidgetProps } from '@agimon-ai/po-core/mcpWidget';\nimport Widget0 from \"../src/extensions/workspaces/sessions/(frontend)/tool/mcp_use.mcp\";\nimport Widget1 from \"../src/extensions/workspaces/sessions/(frontend)/tool/session_mcp.mcp\";\n\nexport const widgets: Readonly<Record<string, ComponentType<PoMcpWidgetProps>>> = {\n \"@agimon-ai/po-mcp/mcp_use\": Widget0,\n \"@agimon-ai/po-mcp/session_mcp\": Widget1,\n};\n"],"mappings":";;;;AAGA,SAAS,gBAAgB,OAAyB;CAChD,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ,CACN,CAAC,UAAU,MAAM,KAAK,MAAM,GAC5B,CAAC,QAAQ,MAAM,KAAK,IAAI,CAC1B,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;AAEA,IAAA,sBAAe,gBAAgB,eAAe;;;ACd9C,SAAS,oBAAoB,OAAyB;CACpD,OACE,oBAAC,cAAD;EAAc,GAAI;EAAO,OAAO,MAAM;EACpC,UAAA,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA;CAC1B,CAAA;AAElB;;;ACHA,MAAa,UAAqE;CAChF,6BAA6BA;CAC7B,iCDGa,gBAAgB,mBCHIC;AACnC"}
|
package/dist/extensions/mcp.cjs
CHANGED
|
@@ -10,12 +10,12 @@ let typebox = require("typebox");
|
|
|
10
10
|
//#region src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp.ts
|
|
11
11
|
var po_use_mcp_mcp_default = (0, _agimon_ai_po_core_mcpFacet.defineMcpSkill)({
|
|
12
12
|
name: "po-use-mcp",
|
|
13
|
-
description: "Use
|
|
13
|
+
description: "Use Po Pi MCP to inspect domain-scoped servers, authenticate, reload configuration, and troubleshoot tool availability.",
|
|
14
14
|
read: () => (0, _agimon_ai_po_core_serverFacet.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/po-use-mcp/SKILL.md")
|
|
15
15
|
});
|
|
16
16
|
//#endregion
|
|
17
17
|
//#region src/services/mcpHeadlessTools/index.ts
|
|
18
|
-
const MCP_HEADLESS_TOOLS_SERVICE = "
|
|
18
|
+
const MCP_HEADLESS_TOOLS_SERVICE = "po/mcp-headless-tools";
|
|
19
19
|
function bindMcpHeadlessTool(context, name) {
|
|
20
20
|
const tool = context.services.get(MCP_HEADLESS_TOOLS_SERVICE)?.get(name);
|
|
21
21
|
if (!tool) throw new Error(`MCP tool is unavailable: ${name}`);
|
|
@@ -40,7 +40,7 @@ typebox.Type.Object({
|
|
|
40
40
|
});
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/services/mcpSessionTools/index.ts
|
|
43
|
-
const MCP_SESSION_TOOLS_SERVICE = "
|
|
43
|
+
const MCP_SESSION_TOOLS_SERVICE = "po/mcp-session-tools";
|
|
44
44
|
//#endregion
|
|
45
45
|
//#region src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp.ts
|
|
46
46
|
var session_mcp_mcp_default = (0, _agimon_ai_po_core_extensionFile.defineRoutedContribution)((context) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","defineMcpTool","defineMcpTool","Type","defineRoutedContribution","defineMcpTool","defineMcpPlugin","skillPoUseMcp","toolMcpUse","toolSaveFile","toolSessionMcp","toolShareFile"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp.ts","../../src/services/mcpHeadlessTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp.ts","../../src/schemas/mcpHeadlessTool.ts","../../src/services/mcpSessionTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/po-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'po-use-mcp',\n description:\n 'Use Doom Pi MCP to inspect domain-scoped servers, authenticate, reload configuration, and troubleshoot tool availability.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-use-mcp/SKILL.md'),\n});\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nexport const MCP_HEADLESS_TOOLS_SERVICE = 'doom/mcp-headless-tools';\n\nexport interface McpHeadlessToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n}\n\nexport function mountMcpHeadlessTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(MCP_HEADLESS_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n } satisfies McpHeadlessToolCatalog);\n });\n };\n}\n\nexport function bindMcpHeadlessTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const tool = context.services.get<McpHeadlessToolCatalog>(MCP_HEADLESS_TOOLS_SERVICE)?.get(name);\n if (!tool) throw new Error(`MCP tool is unavailable: ${name}`);\n return {\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpHeadlessTool(context, 'mcp_use'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpHeadlessTool(context, 'save_file'));\n","import { Type } from 'typebox';\n\nexport const McpHeadlessToolParameters = Type.Object({\n server: Type.String({ minLength: 1 }),\n tool: Type.String({ minLength: 1 }),\n arguments: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n});\n","import type { DoomChildSessionMcpCatalog, DoomChildSessionMcpTool } from '@agimon-ai/po-core/childSession';\nimport type { DoomHeadlessTool, DoomHeadlessToolResult } from '@agimon-ai/po-core/headless';\nimport type { ReadResourceResult } from '@modelcontextprotocol/server';\nimport type { Static, TSchema } from 'typebox';\nimport { Value } from 'typebox/value';\n\nimport { McpHeadlessToolParameters } from '../../schemas/mcpHeadlessTool';\nimport { mcpToolExecutionMetadata, type CatalogTool } from '../mcpCatalog';\nimport { modelInputSchema } from '../mcpFileParams';\nimport type { McpSession } from '../mcpSession';\n\nexport const MCP_SESSION_TOOLS_SERVICE = 'doom/mcp-session-tools';\n\n/** This projection needs no caller-owned execution context and can be borrowed unchanged. */\nexport interface McpDirectTool extends DoomHeadlessTool {\n execute(toolCallId: string, parameters: unknown, signal?: AbortSignal): Promise<DoomHeadlessToolResult>;\n}\n\n/** Narrow cross-root access to the Pi session's existing upstream MCP runtime. */\nexport interface McpSessionToolsService {\n readonly generation: string;\n runtimeRevision(): number;\n readAppResource(server: string, tool: string, resourceUri: string, signal?: AbortSignal): Promise<ReadResourceResult>;\n snapshot(): readonly CatalogTool[];\n project(): readonly McpDirectTool[];\n refresh(): void;\n dispose(): void;\n resolveSelectors(selectors: readonly string[]): readonly string[];\n onChange(listener: () => void): () => void;\n invoke(name: string, parameters: Record<string, unknown>, signal?: AbortSignal): Promise<DoomHeadlessToolResult>;\n}\n\nexport function createMcpSessionToolsService(\n session: McpSession,\n generation: string,\n assertAvailable: () => void = () => undefined,\n): McpSessionToolsService {\n let disposed = false;\n const listeners = new Set<() => void>();\n const retained = new Map<string, { fingerprint: string; tool: McpDirectTool; retire(): void }>();\n const snapshot = () => {\n try {\n if (disposed) return [];\n assertAvailable();\n return session.activeToolDefinitions();\n } catch {\n // An inactive or stale parent lends no declarations.\n return [];\n }\n };\n const project = (): readonly McpDirectTool[] => {\n const definitions = snapshot();\n const names = new Set(definitions.map((tool) => tool.piName));\n for (const [name, entry] of retained) {\n if (names.has(name)) continue;\n entry.retire();\n retained.delete(name);\n }\n return definitions.map((definition) => {\n const fingerprint = JSON.stringify([session.toolGeneration, definition]);\n const previous = retained.get(definition.piName);\n if (previous?.fingerprint === fingerprint) return previous.tool;\n previous?.retire();\n let retired = false;\n const invoke = session.bindToolInvocation(definition);\n const tool: McpDirectTool = {\n name: definition.piName,\n label: `${definition.serverName}: ${definition.toolName}`,\n description: definition.description ?? `${definition.toolName} on the ${definition.serverName} MCP server.`,\n ...(definition.annotations === undefined ? {} : { annotations: definition.annotations }),\n ...(definition._meta === undefined ? {} : { _meta: mcpToolExecutionMetadata(definition) }),\n ...(definition.outputSchema === undefined ? {} : { outputSchema: definition.outputSchema }),\n // File parameters are validated as the `{path}` objects the model sends.\n parameters: modelInputSchema(definition) as TSchema,\n async execute(_toolCallId, parameters, signal) {\n assertAvailable();\n if (retired) throw new Error(`MCP tool ${definition.piName} is no longer available.`);\n signal?.throwIfAborted();\n const arguments_ = parameters === undefined ? {} : parameters;\n if (!Value.Check(tool.parameters, arguments_))\n throw new Error(`Invalid arguments for MCP tool ${definition.piName}.`);\n const result = await invoke(arguments_ as Record<string, unknown>, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n retained.set(definition.piName, {\n fingerprint,\n tool,\n retire: () => {\n retired = true;\n },\n });\n return tool;\n });\n };\n const refresh = () => {\n project();\n for (const listener of listeners) listener();\n };\n // Retirement must happen even if a borrower temporarily has no change listener.\n const stopSession = session.onChange(refresh);\n return Object.freeze({\n generation,\n runtimeRevision: () => session.toolGeneration,\n readAppResource: async (server: string, tool: string, resourceUri: string, signal?: AbortSignal) => {\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n const result = await session.readAppResource(server, tool, resourceUri, signal);\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n return result;\n },\n snapshot,\n project,\n refresh,\n dispose: () => {\n disposed = true;\n stopSession();\n refresh();\n listeners.clear();\n },\n resolveSelectors: (selectors: readonly string[]) => {\n const active = new Set(snapshot().map((tool) => tool.piName));\n return session\n .resolveToolSelectors(selectors)\n .map((tool) => tool.name)\n .filter((name) => active.has(name));\n },\n onChange: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n invoke: async (name: string, parameters: Record<string, unknown>, signal?: AbortSignal) => {\n assertAvailable();\n const tool = project().find((candidate) => candidate.name === name);\n if (!tool) throw new Error(`MCP tool ${name} is not available in this session.`);\n return tool.execute('mcp', parameters, signal);\n },\n });\n}\n\n/** Borrow an existing MCP runtime; a child never starts or disposes its own upstream connections. */\nexport function createMcpChildTool(\n invoke: (\n parameters: Static<typeof McpHeadlessToolParameters>,\n signal?: AbortSignal,\n ) => Promise<DoomHeadlessToolResult>,\n catalog?: DoomChildSessionMcpCatalog,\n): DoomChildSessionMcpTool {\n return {\n name: 'mcp',\n ...(catalog === undefined ? {} : { catalog }),\n description: 'Call a tool exposed by a connected MCP server.',\n parameters: McpHeadlessToolParameters,\n async execute(_toolCallId, parameters, signal) {\n signal?.throwIfAborted();\n if (!Value.Check(McpHeadlessToolParameters, parameters)) throw new Error('Invalid MCP tool arguments.');\n const result = await invoke(parameters, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport {\n MCP_SESSION_TOOLS_SERVICE,\n type McpDirectTool,\n type McpSessionToolsService,\n} from '../../../../../services/mcpSessionTools';\n\nexport default defineRoutedContribution(\n (context: DoomMcpPluginContext): readonly DoomHeadlessTool[] => {\n const service = context.services.get<McpSessionToolsService>(MCP_SESSION_TOOLS_SERVICE);\n if (!service) return [];\n let current: readonly McpDirectTool[] = [];\n const stop = service.onChange(() => {\n const next = service.project();\n if (next.length === current.length && next.every((tool, index) => tool === current[index])) return;\n current = next;\n context.refresh();\n });\n current = service.project();\n context.signal.addEventListener('abort', stop, { once: true });\n return current.map((tool) => ({\n ...tool,\n execute: (toolCallId, parameters, signal) =>\n tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal])),\n }));\n },\n { cardinality: 'many' },\n);\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpHeadlessTool(context, 'share_file'));\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport skillPoUseMcp from '../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp';\nimport toolMcpUse from '../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp';\nimport toolSaveFile from '../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp';\nimport toolSessionMcp from '../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp';\nimport toolShareFile from '../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-mcp',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillPoUseMcp, context)]; },\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-mcp/mcp_use\", via({ name: 'mcp_use' }, at(toolMcpUse, context))), via({ name: 'save_file' }, at(toolSaveFile, context)), ...many(toolSessionMcp, context).map((tool) => withWidget(\"@agimon-ai/po-mcp/session_mcp\", tool)), via({ name: 'share_file' }, at(toolShareFile, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","defineMcpTool","defineMcpTool","Type","defineRoutedContribution","defineMcpTool","defineMcpPlugin","skillPoUseMcp","toolMcpUse","toolSaveFile","toolSessionMcp","toolShareFile"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp.ts","../../src/services/mcpHeadlessTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp.ts","../../src/schemas/mcpHeadlessTool.ts","../../src/services/mcpSessionTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/po-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'po-use-mcp',\n description:\n 'Use Po Pi MCP to inspect domain-scoped servers, authenticate, reload configuration, and troubleshoot tool availability.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-use-mcp/SKILL.md'),\n});\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nexport const MCP_HEADLESS_TOOLS_SERVICE = 'po/mcp-headless-tools';\n\nexport interface McpHeadlessToolCatalog {\n get(name: string): PoHeadlessTool | undefined;\n}\n\nexport function mountMcpHeadlessTools(tools: readonly PoHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(MCP_HEADLESS_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n } satisfies McpHeadlessToolCatalog);\n });\n };\n}\n\nexport function bindMcpHeadlessTool(context: PoMcpPluginContext, name: string): PoHeadlessTool {\n const tool = context.services.get<McpHeadlessToolCatalog>(MCP_HEADLESS_TOOLS_SERVICE)?.get(name);\n if (!tool) throw new Error(`MCP tool is unavailable: ${name}`);\n return {\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: PoMcpPluginContext) => bindMcpHeadlessTool(context, 'mcp_use'));\n","import { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: PoMcpPluginContext) => bindMcpHeadlessTool(context, 'save_file'));\n","import { Type } from 'typebox';\n\nexport const McpHeadlessToolParameters = Type.Object({\n server: Type.String({ minLength: 1 }),\n tool: Type.String({ minLength: 1 }),\n arguments: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n});\n","import type { PoChildSessionMcpCatalog, PoChildSessionMcpTool } from '@agimon-ai/po-core/childSession';\nimport type { PoHeadlessTool, PoHeadlessToolResult } from '@agimon-ai/po-core/headless';\nimport type { ReadResourceResult } from '@modelcontextprotocol/server';\nimport type { Static, TSchema } from 'typebox';\nimport { Value } from 'typebox/value';\n\nimport { McpHeadlessToolParameters } from '../../schemas/mcpHeadlessTool';\nimport { mcpToolExecutionMetadata, type CatalogTool } from '../mcpCatalog';\nimport { modelInputSchema } from '../mcpFileParams';\nimport type { McpSession } from '../mcpSession';\n\nexport const MCP_SESSION_TOOLS_SERVICE = 'po/mcp-session-tools';\n\n/** This projection needs no caller-owned execution context and can be borrowed unchanged. */\nexport interface McpDirectTool extends PoHeadlessTool {\n execute(toolCallId: string, parameters: unknown, signal?: AbortSignal): Promise<PoHeadlessToolResult>;\n}\n\n/** Narrow cross-root access to the Pi session's existing upstream MCP runtime. */\nexport interface McpSessionToolsService {\n readonly generation: string;\n runtimeRevision(): number;\n readAppResource(server: string, tool: string, resourceUri: string, signal?: AbortSignal): Promise<ReadResourceResult>;\n snapshot(): readonly CatalogTool[];\n project(): readonly McpDirectTool[];\n refresh(): void;\n dispose(): void;\n resolveSelectors(selectors: readonly string[]): readonly string[];\n onChange(listener: () => void): () => void;\n invoke(name: string, parameters: Record<string, unknown>, signal?: AbortSignal): Promise<PoHeadlessToolResult>;\n}\n\nexport function createMcpSessionToolsService(\n session: McpSession,\n generation: string,\n assertAvailable: () => void = () => undefined,\n): McpSessionToolsService {\n let disposed = false;\n const listeners = new Set<() => void>();\n const retained = new Map<string, { fingerprint: string; tool: McpDirectTool; retire(): void }>();\n const snapshot = () => {\n try {\n if (disposed) return [];\n assertAvailable();\n return session.activeToolDefinitions();\n } catch {\n // An inactive or stale parent lends no declarations.\n return [];\n }\n };\n const project = (): readonly McpDirectTool[] => {\n const definitions = snapshot();\n const names = new Set(definitions.map((tool) => tool.piName));\n for (const [name, entry] of retained) {\n if (names.has(name)) continue;\n entry.retire();\n retained.delete(name);\n }\n return definitions.map((definition) => {\n const fingerprint = JSON.stringify([session.toolGeneration, definition]);\n const previous = retained.get(definition.piName);\n if (previous?.fingerprint === fingerprint) return previous.tool;\n previous?.retire();\n let retired = false;\n const invoke = session.bindToolInvocation(definition);\n const tool: McpDirectTool = {\n name: definition.piName,\n label: `${definition.serverName}: ${definition.toolName}`,\n description: definition.description ?? `${definition.toolName} on the ${definition.serverName} MCP server.`,\n ...(definition.annotations === undefined ? {} : { annotations: definition.annotations }),\n ...(definition._meta === undefined ? {} : { _meta: mcpToolExecutionMetadata(definition) }),\n ...(definition.outputSchema === undefined ? {} : { outputSchema: definition.outputSchema }),\n // File parameters are validated as the `{path}` objects the model sends.\n parameters: modelInputSchema(definition) as TSchema,\n async execute(_toolCallId, parameters, signal) {\n assertAvailable();\n if (retired) throw new Error(`MCP tool ${definition.piName} is no longer available.`);\n signal?.throwIfAborted();\n const arguments_ = parameters === undefined ? {} : parameters;\n if (!Value.Check(tool.parameters, arguments_))\n throw new Error(`Invalid arguments for MCP tool ${definition.piName}.`);\n const result = await invoke(arguments_ as Record<string, unknown>, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n retained.set(definition.piName, {\n fingerprint,\n tool,\n retire: () => {\n retired = true;\n },\n });\n return tool;\n });\n };\n const refresh = () => {\n project();\n for (const listener of listeners) listener();\n };\n // Retirement must happen even if a borrower temporarily has no change listener.\n const stopSession = session.onChange(refresh);\n return Object.freeze({\n generation,\n runtimeRevision: () => session.toolGeneration,\n readAppResource: async (server: string, tool: string, resourceUri: string, signal?: AbortSignal) => {\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n const result = await session.readAppResource(server, tool, resourceUri, signal);\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n return result;\n },\n snapshot,\n project,\n refresh,\n dispose: () => {\n disposed = true;\n stopSession();\n refresh();\n listeners.clear();\n },\n resolveSelectors: (selectors: readonly string[]) => {\n const active = new Set(snapshot().map((tool) => tool.piName));\n return session\n .resolveToolSelectors(selectors)\n .map((tool) => tool.name)\n .filter((name) => active.has(name));\n },\n onChange: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n invoke: async (name: string, parameters: Record<string, unknown>, signal?: AbortSignal) => {\n assertAvailable();\n const tool = project().find((candidate) => candidate.name === name);\n if (!tool) throw new Error(`MCP tool ${name} is not available in this session.`);\n return tool.execute('mcp', parameters, signal);\n },\n });\n}\n\n/** Borrow an existing MCP runtime; a child never starts or disposes its own upstream connections. */\nexport function createMcpChildTool(\n invoke: (parameters: Static<typeof McpHeadlessToolParameters>, signal?: AbortSignal) => Promise<PoHeadlessToolResult>,\n catalog?: PoChildSessionMcpCatalog,\n): PoChildSessionMcpTool {\n return {\n name: 'mcp',\n ...(catalog === undefined ? {} : { catalog }),\n description: 'Call a tool exposed by a connected MCP server.',\n parameters: McpHeadlessToolParameters,\n async execute(_toolCallId, parameters, signal) {\n signal?.throwIfAborted();\n if (!Value.Check(McpHeadlessToolParameters, parameters)) throw new Error('Invalid MCP tool arguments.');\n const result = await invoke(parameters, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport {\n MCP_SESSION_TOOLS_SERVICE,\n type McpDirectTool,\n type McpSessionToolsService,\n} from '../../../../../services/mcpSessionTools';\n\nexport default defineRoutedContribution(\n (context: PoMcpPluginContext): readonly PoHeadlessTool[] => {\n const service = context.services.get<McpSessionToolsService>(MCP_SESSION_TOOLS_SERVICE);\n if (!service) return [];\n let current: readonly McpDirectTool[] = [];\n const stop = service.onChange(() => {\n const next = service.project();\n if (next.length === current.length && next.every((tool, index) => tool === current[index])) return;\n current = next;\n context.refresh();\n });\n current = service.project();\n context.signal.addEventListener('abort', stop, { once: true });\n return current.map((tool) => ({\n ...tool,\n execute: (toolCallId, parameters, signal) =>\n tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal])),\n }));\n },\n { cardinality: 'many' },\n);\n","import { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: PoMcpPluginContext) => bindMcpHeadlessTool(context, 'share_file'));\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type PoMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport skillPoUseMcp from '../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp';\nimport toolMcpUse from '../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp';\nimport toolSaveFile from '../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp';\nimport toolSessionMcp from '../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp';\nimport toolShareFile from '../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-mcp',\n session: (context) => ({\n get skills(): PoMcpSessionPlugin['skills'] { return [at(skillPoUseMcp, context)]; },\n get tools(): PoMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-mcp/mcp_use\", via({ name: 'mcp_use' }, at(toolMcpUse, context))), via({ name: 'save_file' }, at(toolSaveFile, context)), ...many(toolSessionMcp, context).map((tool) => withWidget(\"@agimon-ai/po-mcp/session_mcp\", tool)), via({ name: 'share_file' }, at(toolShareFile, context))]; },\n }) satisfies PoMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region generated/mcp.d.ts
|
|
2
|
-
export declare const mcp: import("@agimon-ai/po-core/mcpFacet").
|
|
2
|
+
export declare const mcp: import("@agimon-ai/po-core/mcpFacet").PoMcpPluginDefinition;
|
|
3
3
|
//#endregion
|
|
4
4
|
export { mcp as default };
|
|
5
5
|
//# sourceMappingURL=mcp.d.mts.map
|
package/dist/extensions/mcp.mjs
CHANGED
|
@@ -6,12 +6,12 @@ import { Type } from "typebox";
|
|
|
6
6
|
//#region src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp.ts
|
|
7
7
|
var po_use_mcp_mcp_default = defineMcpSkill({
|
|
8
8
|
name: "po-use-mcp",
|
|
9
|
-
description: "Use
|
|
9
|
+
description: "Use Po Pi MCP to inspect domain-scoped servers, authenticate, reload configuration, and troubleshoot tool availability.",
|
|
10
10
|
read: () => readPackageResource(import.meta.url, "src/prompts/po-use-mcp/SKILL.md")
|
|
11
11
|
});
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region src/services/mcpHeadlessTools/index.ts
|
|
14
|
-
const MCP_HEADLESS_TOOLS_SERVICE = "
|
|
14
|
+
const MCP_HEADLESS_TOOLS_SERVICE = "po/mcp-headless-tools";
|
|
15
15
|
function bindMcpHeadlessTool(context, name) {
|
|
16
16
|
const tool = context.services.get(MCP_HEADLESS_TOOLS_SERVICE)?.get(name);
|
|
17
17
|
if (!tool) throw new Error(`MCP tool is unavailable: ${name}`);
|
|
@@ -36,7 +36,7 @@ Type.Object({
|
|
|
36
36
|
});
|
|
37
37
|
//#endregion
|
|
38
38
|
//#region src/services/mcpSessionTools/index.ts
|
|
39
|
-
const MCP_SESSION_TOOLS_SERVICE = "
|
|
39
|
+
const MCP_SESSION_TOOLS_SERVICE = "po/mcp-session-tools";
|
|
40
40
|
//#endregion
|
|
41
41
|
//#region src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp.ts
|
|
42
42
|
var session_mcp_mcp_default = defineRoutedContribution((context) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.mjs","names":["skillPoUseMcp","toolMcpUse","toolSaveFile","toolSessionMcp","toolShareFile"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp.ts","../../src/services/mcpHeadlessTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp.ts","../../src/schemas/mcpHeadlessTool.ts","../../src/services/mcpSessionTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/po-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'po-use-mcp',\n description:\n 'Use Doom Pi MCP to inspect domain-scoped servers, authenticate, reload configuration, and troubleshoot tool availability.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-use-mcp/SKILL.md'),\n});\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nexport const MCP_HEADLESS_TOOLS_SERVICE = 'doom/mcp-headless-tools';\n\nexport interface McpHeadlessToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n}\n\nexport function mountMcpHeadlessTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(MCP_HEADLESS_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n } satisfies McpHeadlessToolCatalog);\n });\n };\n}\n\nexport function bindMcpHeadlessTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const tool = context.services.get<McpHeadlessToolCatalog>(MCP_HEADLESS_TOOLS_SERVICE)?.get(name);\n if (!tool) throw new Error(`MCP tool is unavailable: ${name}`);\n return {\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpHeadlessTool(context, 'mcp_use'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpHeadlessTool(context, 'save_file'));\n","import { Type } from 'typebox';\n\nexport const McpHeadlessToolParameters = Type.Object({\n server: Type.String({ minLength: 1 }),\n tool: Type.String({ minLength: 1 }),\n arguments: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n});\n","import type { DoomChildSessionMcpCatalog, DoomChildSessionMcpTool } from '@agimon-ai/po-core/childSession';\nimport type { DoomHeadlessTool, DoomHeadlessToolResult } from '@agimon-ai/po-core/headless';\nimport type { ReadResourceResult } from '@modelcontextprotocol/server';\nimport type { Static, TSchema } from 'typebox';\nimport { Value } from 'typebox/value';\n\nimport { McpHeadlessToolParameters } from '../../schemas/mcpHeadlessTool';\nimport { mcpToolExecutionMetadata, type CatalogTool } from '../mcpCatalog';\nimport { modelInputSchema } from '../mcpFileParams';\nimport type { McpSession } from '../mcpSession';\n\nexport const MCP_SESSION_TOOLS_SERVICE = 'doom/mcp-session-tools';\n\n/** This projection needs no caller-owned execution context and can be borrowed unchanged. */\nexport interface McpDirectTool extends DoomHeadlessTool {\n execute(toolCallId: string, parameters: unknown, signal?: AbortSignal): Promise<DoomHeadlessToolResult>;\n}\n\n/** Narrow cross-root access to the Pi session's existing upstream MCP runtime. */\nexport interface McpSessionToolsService {\n readonly generation: string;\n runtimeRevision(): number;\n readAppResource(server: string, tool: string, resourceUri: string, signal?: AbortSignal): Promise<ReadResourceResult>;\n snapshot(): readonly CatalogTool[];\n project(): readonly McpDirectTool[];\n refresh(): void;\n dispose(): void;\n resolveSelectors(selectors: readonly string[]): readonly string[];\n onChange(listener: () => void): () => void;\n invoke(name: string, parameters: Record<string, unknown>, signal?: AbortSignal): Promise<DoomHeadlessToolResult>;\n}\n\nexport function createMcpSessionToolsService(\n session: McpSession,\n generation: string,\n assertAvailable: () => void = () => undefined,\n): McpSessionToolsService {\n let disposed = false;\n const listeners = new Set<() => void>();\n const retained = new Map<string, { fingerprint: string; tool: McpDirectTool; retire(): void }>();\n const snapshot = () => {\n try {\n if (disposed) return [];\n assertAvailable();\n return session.activeToolDefinitions();\n } catch {\n // An inactive or stale parent lends no declarations.\n return [];\n }\n };\n const project = (): readonly McpDirectTool[] => {\n const definitions = snapshot();\n const names = new Set(definitions.map((tool) => tool.piName));\n for (const [name, entry] of retained) {\n if (names.has(name)) continue;\n entry.retire();\n retained.delete(name);\n }\n return definitions.map((definition) => {\n const fingerprint = JSON.stringify([session.toolGeneration, definition]);\n const previous = retained.get(definition.piName);\n if (previous?.fingerprint === fingerprint) return previous.tool;\n previous?.retire();\n let retired = false;\n const invoke = session.bindToolInvocation(definition);\n const tool: McpDirectTool = {\n name: definition.piName,\n label: `${definition.serverName}: ${definition.toolName}`,\n description: definition.description ?? `${definition.toolName} on the ${definition.serverName} MCP server.`,\n ...(definition.annotations === undefined ? {} : { annotations: definition.annotations }),\n ...(definition._meta === undefined ? {} : { _meta: mcpToolExecutionMetadata(definition) }),\n ...(definition.outputSchema === undefined ? {} : { outputSchema: definition.outputSchema }),\n // File parameters are validated as the `{path}` objects the model sends.\n parameters: modelInputSchema(definition) as TSchema,\n async execute(_toolCallId, parameters, signal) {\n assertAvailable();\n if (retired) throw new Error(`MCP tool ${definition.piName} is no longer available.`);\n signal?.throwIfAborted();\n const arguments_ = parameters === undefined ? {} : parameters;\n if (!Value.Check(tool.parameters, arguments_))\n throw new Error(`Invalid arguments for MCP tool ${definition.piName}.`);\n const result = await invoke(arguments_ as Record<string, unknown>, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n retained.set(definition.piName, {\n fingerprint,\n tool,\n retire: () => {\n retired = true;\n },\n });\n return tool;\n });\n };\n const refresh = () => {\n project();\n for (const listener of listeners) listener();\n };\n // Retirement must happen even if a borrower temporarily has no change listener.\n const stopSession = session.onChange(refresh);\n return Object.freeze({\n generation,\n runtimeRevision: () => session.toolGeneration,\n readAppResource: async (server: string, tool: string, resourceUri: string, signal?: AbortSignal) => {\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n const result = await session.readAppResource(server, tool, resourceUri, signal);\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n return result;\n },\n snapshot,\n project,\n refresh,\n dispose: () => {\n disposed = true;\n stopSession();\n refresh();\n listeners.clear();\n },\n resolveSelectors: (selectors: readonly string[]) => {\n const active = new Set(snapshot().map((tool) => tool.piName));\n return session\n .resolveToolSelectors(selectors)\n .map((tool) => tool.name)\n .filter((name) => active.has(name));\n },\n onChange: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n invoke: async (name: string, parameters: Record<string, unknown>, signal?: AbortSignal) => {\n assertAvailable();\n const tool = project().find((candidate) => candidate.name === name);\n if (!tool) throw new Error(`MCP tool ${name} is not available in this session.`);\n return tool.execute('mcp', parameters, signal);\n },\n });\n}\n\n/** Borrow an existing MCP runtime; a child never starts or disposes its own upstream connections. */\nexport function createMcpChildTool(\n invoke: (\n parameters: Static<typeof McpHeadlessToolParameters>,\n signal?: AbortSignal,\n ) => Promise<DoomHeadlessToolResult>,\n catalog?: DoomChildSessionMcpCatalog,\n): DoomChildSessionMcpTool {\n return {\n name: 'mcp',\n ...(catalog === undefined ? {} : { catalog }),\n description: 'Call a tool exposed by a connected MCP server.',\n parameters: McpHeadlessToolParameters,\n async execute(_toolCallId, parameters, signal) {\n signal?.throwIfAborted();\n if (!Value.Check(McpHeadlessToolParameters, parameters)) throw new Error('Invalid MCP tool arguments.');\n const result = await invoke(parameters, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport {\n MCP_SESSION_TOOLS_SERVICE,\n type McpDirectTool,\n type McpSessionToolsService,\n} from '../../../../../services/mcpSessionTools';\n\nexport default defineRoutedContribution(\n (context: DoomMcpPluginContext): readonly DoomHeadlessTool[] => {\n const service = context.services.get<McpSessionToolsService>(MCP_SESSION_TOOLS_SERVICE);\n if (!service) return [];\n let current: readonly McpDirectTool[] = [];\n const stop = service.onChange(() => {\n const next = service.project();\n if (next.length === current.length && next.every((tool, index) => tool === current[index])) return;\n current = next;\n context.refresh();\n });\n current = service.project();\n context.signal.addEventListener('abort', stop, { once: true });\n return current.map((tool) => ({\n ...tool,\n execute: (toolCallId, parameters, signal) =>\n tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal])),\n }));\n },\n { cardinality: 'many' },\n);\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpHeadlessTool(context, 'share_file'));\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport skillPoUseMcp from '../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp';\nimport toolMcpUse from '../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp';\nimport toolSaveFile from '../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp';\nimport toolSessionMcp from '../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp';\nimport toolShareFile from '../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-mcp',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillPoUseMcp, context)]; },\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-mcp/mcp_use\", via({ name: 'mcp_use' }, at(toolMcpUse, context))), via({ name: 'save_file' }, at(toolSaveFile, context)), ...many(toolSessionMcp, context).map((tool) => withWidget(\"@agimon-ai/po-mcp/session_mcp\", tool)), via({ name: 'share_file' }, at(toolShareFile, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;AAGA,IAAA,yBAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,YAAY,oBAAoB,YAAY,KAAK,iCAAiC;AACpF,CAAC;;;ACJD,MAAa,6BAA6B;AAgB1C,SAAgB,oBAAoB,SAA+B,MAAgC;CACjG,MAAM,OAAO,QAAQ,SAAS,IAA4B,0BAA0B,CAAC,EAAE,IAAI,IAAI;CAC/F,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,4BAA4B,MAAM;CAC7D,OAAO;EACL,GAAG;EACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;AC1BA,IAAA,sBAAe,eAAe,YAAkC,oBAAoB,SAAS,SAAS,CAAC;;;ACAvG,IAAA,wBAAe,eAAe,YAAkC,oBAAoB,SAAS,WAAW,CAAC;ACFhE,KAAK,OAAO;CACnD,QAAQ,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC;CACpC,MAAM,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC;CAClC,WAAW,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;AACrE,CAAC;;;ACKD,MAAa,4BAA4B;;;ACDzC,IAAA,0BAAe,0BACZ,YAA+D;CAC9D,MAAM,UAAU,QAAQ,SAAS,IAA4B,yBAAyB;CACtF,IAAI,CAAC,SAAS,OAAO,CAAC;CACtB,IAAI,UAAoC,CAAC;CACzC,MAAM,OAAO,QAAQ,eAAe;EAClC,MAAM,OAAO,QAAQ,QAAQ;EAC7B,IAAI,KAAK,WAAW,QAAQ,UAAU,KAAK,OAAO,MAAM,UAAU,SAAS,QAAQ,MAAM,GAAG;EAC5F,UAAU;EACV,QAAQ,QAAQ;CAClB,CAAC;CACD,UAAU,QAAQ,QAAQ;CAC1B,QAAQ,OAAO,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;CAC7D,OAAO,QAAQ,KAAK,UAAU;EAC5B,GAAG;EACH,UAAU,YAAY,YAAY,WAChC,KAAK,QAAQ,YAAY,YAAY,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,CAAC;CACpG,EAAE;AACJ,GACA,EAAE,aAAa,OAAO,CACxB;;;AC1BA,IAAA,yBAAe,eAAe,YAAkC,oBAAoB,SAAS,YAAY,CAAC;;;ACM1G,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;AACA,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa;EACrB,IAAI,SAAyC;GAAE,OAAO,CAAC,GAAGA,wBAAe,OAAO,CAAC;EAAG;EACpF,IAAI,QAAuC;GAAE,OAAO;IAAC,WAAW,6BAA6B,IAAI,EAAE,MAAM,UAAU,GAAG,GAAGC,qBAAY,OAAO,CAAC,CAAC;IAAG,IAAI,EAAE,MAAM,YAAY,GAAG,GAAGC,uBAAc,OAAO,CAAC;IAAG,GAAG,KAAKC,yBAAgB,OAAO,CAAC,CAAC,KAAK,SAAS,WAAW,iCAAiC,IAAI,CAAC;IAAG,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,wBAAe,OAAO,CAAC;GAAC;EAAG;CACvW;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp.mjs","names":["skillPoUseMcp","toolMcpUse","toolSaveFile","toolSessionMcp","toolShareFile"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp.ts","../../src/services/mcpHeadlessTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp.ts","../../src/schemas/mcpHeadlessTool.ts","../../src/services/mcpSessionTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/po-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'po-use-mcp',\n description:\n 'Use Po Pi MCP to inspect domain-scoped servers, authenticate, reload configuration, and troubleshoot tool availability.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/po-use-mcp/SKILL.md'),\n});\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nexport const MCP_HEADLESS_TOOLS_SERVICE = 'po/mcp-headless-tools';\n\nexport interface McpHeadlessToolCatalog {\n get(name: string): PoHeadlessTool | undefined;\n}\n\nexport function mountMcpHeadlessTools(tools: readonly PoHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(MCP_HEADLESS_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n } satisfies McpHeadlessToolCatalog);\n });\n };\n}\n\nexport function bindMcpHeadlessTool(context: PoMcpPluginContext, name: string): PoHeadlessTool {\n const tool = context.services.get<McpHeadlessToolCatalog>(MCP_HEADLESS_TOOLS_SERVICE)?.get(name);\n if (!tool) throw new Error(`MCP tool is unavailable: ${name}`);\n return {\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: PoMcpPluginContext) => bindMcpHeadlessTool(context, 'mcp_use'));\n","import { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: PoMcpPluginContext) => bindMcpHeadlessTool(context, 'save_file'));\n","import { Type } from 'typebox';\n\nexport const McpHeadlessToolParameters = Type.Object({\n server: Type.String({ minLength: 1 }),\n tool: Type.String({ minLength: 1 }),\n arguments: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n});\n","import type { PoChildSessionMcpCatalog, PoChildSessionMcpTool } from '@agimon-ai/po-core/childSession';\nimport type { PoHeadlessTool, PoHeadlessToolResult } from '@agimon-ai/po-core/headless';\nimport type { ReadResourceResult } from '@modelcontextprotocol/server';\nimport type { Static, TSchema } from 'typebox';\nimport { Value } from 'typebox/value';\n\nimport { McpHeadlessToolParameters } from '../../schemas/mcpHeadlessTool';\nimport { mcpToolExecutionMetadata, type CatalogTool } from '../mcpCatalog';\nimport { modelInputSchema } from '../mcpFileParams';\nimport type { McpSession } from '../mcpSession';\n\nexport const MCP_SESSION_TOOLS_SERVICE = 'po/mcp-session-tools';\n\n/** This projection needs no caller-owned execution context and can be borrowed unchanged. */\nexport interface McpDirectTool extends PoHeadlessTool {\n execute(toolCallId: string, parameters: unknown, signal?: AbortSignal): Promise<PoHeadlessToolResult>;\n}\n\n/** Narrow cross-root access to the Pi session's existing upstream MCP runtime. */\nexport interface McpSessionToolsService {\n readonly generation: string;\n runtimeRevision(): number;\n readAppResource(server: string, tool: string, resourceUri: string, signal?: AbortSignal): Promise<ReadResourceResult>;\n snapshot(): readonly CatalogTool[];\n project(): readonly McpDirectTool[];\n refresh(): void;\n dispose(): void;\n resolveSelectors(selectors: readonly string[]): readonly string[];\n onChange(listener: () => void): () => void;\n invoke(name: string, parameters: Record<string, unknown>, signal?: AbortSignal): Promise<PoHeadlessToolResult>;\n}\n\nexport function createMcpSessionToolsService(\n session: McpSession,\n generation: string,\n assertAvailable: () => void = () => undefined,\n): McpSessionToolsService {\n let disposed = false;\n const listeners = new Set<() => void>();\n const retained = new Map<string, { fingerprint: string; tool: McpDirectTool; retire(): void }>();\n const snapshot = () => {\n try {\n if (disposed) return [];\n assertAvailable();\n return session.activeToolDefinitions();\n } catch {\n // An inactive or stale parent lends no declarations.\n return [];\n }\n };\n const project = (): readonly McpDirectTool[] => {\n const definitions = snapshot();\n const names = new Set(definitions.map((tool) => tool.piName));\n for (const [name, entry] of retained) {\n if (names.has(name)) continue;\n entry.retire();\n retained.delete(name);\n }\n return definitions.map((definition) => {\n const fingerprint = JSON.stringify([session.toolGeneration, definition]);\n const previous = retained.get(definition.piName);\n if (previous?.fingerprint === fingerprint) return previous.tool;\n previous?.retire();\n let retired = false;\n const invoke = session.bindToolInvocation(definition);\n const tool: McpDirectTool = {\n name: definition.piName,\n label: `${definition.serverName}: ${definition.toolName}`,\n description: definition.description ?? `${definition.toolName} on the ${definition.serverName} MCP server.`,\n ...(definition.annotations === undefined ? {} : { annotations: definition.annotations }),\n ...(definition._meta === undefined ? {} : { _meta: mcpToolExecutionMetadata(definition) }),\n ...(definition.outputSchema === undefined ? {} : { outputSchema: definition.outputSchema }),\n // File parameters are validated as the `{path}` objects the model sends.\n parameters: modelInputSchema(definition) as TSchema,\n async execute(_toolCallId, parameters, signal) {\n assertAvailable();\n if (retired) throw new Error(`MCP tool ${definition.piName} is no longer available.`);\n signal?.throwIfAborted();\n const arguments_ = parameters === undefined ? {} : parameters;\n if (!Value.Check(tool.parameters, arguments_))\n throw new Error(`Invalid arguments for MCP tool ${definition.piName}.`);\n const result = await invoke(arguments_ as Record<string, unknown>, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n retained.set(definition.piName, {\n fingerprint,\n tool,\n retire: () => {\n retired = true;\n },\n });\n return tool;\n });\n };\n const refresh = () => {\n project();\n for (const listener of listeners) listener();\n };\n // Retirement must happen even if a borrower temporarily has no change listener.\n const stopSession = session.onChange(refresh);\n return Object.freeze({\n generation,\n runtimeRevision: () => session.toolGeneration,\n readAppResource: async (server: string, tool: string, resourceUri: string, signal?: AbortSignal) => {\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n const result = await session.readAppResource(server, tool, resourceUri, signal);\n assertAvailable();\n if (disposed) throw new Error('The MCP session is no longer available.');\n return result;\n },\n snapshot,\n project,\n refresh,\n dispose: () => {\n disposed = true;\n stopSession();\n refresh();\n listeners.clear();\n },\n resolveSelectors: (selectors: readonly string[]) => {\n const active = new Set(snapshot().map((tool) => tool.piName));\n return session\n .resolveToolSelectors(selectors)\n .map((tool) => tool.name)\n .filter((name) => active.has(name));\n },\n onChange: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n invoke: async (name: string, parameters: Record<string, unknown>, signal?: AbortSignal) => {\n assertAvailable();\n const tool = project().find((candidate) => candidate.name === name);\n if (!tool) throw new Error(`MCP tool ${name} is not available in this session.`);\n return tool.execute('mcp', parameters, signal);\n },\n });\n}\n\n/** Borrow an existing MCP runtime; a child never starts or disposes its own upstream connections. */\nexport function createMcpChildTool(\n invoke: (parameters: Static<typeof McpHeadlessToolParameters>, signal?: AbortSignal) => Promise<PoHeadlessToolResult>,\n catalog?: PoChildSessionMcpCatalog,\n): PoChildSessionMcpTool {\n return {\n name: 'mcp',\n ...(catalog === undefined ? {} : { catalog }),\n description: 'Call a tool exposed by a connected MCP server.',\n parameters: McpHeadlessToolParameters,\n async execute(_toolCallId, parameters, signal) {\n signal?.throwIfAborted();\n if (!Value.Check(McpHeadlessToolParameters, parameters)) throw new Error('Invalid MCP tool arguments.');\n const result = await invoke(parameters, signal);\n signal?.throwIfAborted();\n return result;\n },\n };\n}\n","import { defineRoutedContribution } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport {\n MCP_SESSION_TOOLS_SERVICE,\n type McpDirectTool,\n type McpSessionToolsService,\n} from '../../../../../services/mcpSessionTools';\n\nexport default defineRoutedContribution(\n (context: PoMcpPluginContext): readonly PoHeadlessTool[] => {\n const service = context.services.get<McpSessionToolsService>(MCP_SESSION_TOOLS_SERVICE);\n if (!service) return [];\n let current: readonly McpDirectTool[] = [];\n const stop = service.onChange(() => {\n const next = service.project();\n if (next.length === current.length && next.every((tool, index) => tool === current[index])) return;\n current = next;\n context.refresh();\n });\n current = service.project();\n context.signal.addEventListener('abort', stop, { once: true });\n return current.map((tool) => ({\n ...tool,\n execute: (toolCallId, parameters, signal) =>\n tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal])),\n }));\n },\n { cardinality: 'many' },\n);\n","import { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { bindMcpHeadlessTool } from '../../../../../services/mcpHeadlessTools';\n\nexport default defineMcpTool((context: PoMcpPluginContext) => bindMcpHeadlessTool(context, 'share_file'));\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type PoMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport skillPoUseMcp from '../src/extensions/workspaces/sessions/(backend)/skill/po-use-mcp.mcp';\nimport toolMcpUse from '../src/extensions/workspaces/sessions/(backend)/tool/mcp_use.mcp';\nimport toolSaveFile from '../src/extensions/workspaces/sessions/(backend)/tool/save_file.mcp';\nimport toolSessionMcp from '../src/extensions/workspaces/sessions/(backend)/tool/session_mcp.mcp';\nimport toolShareFile from '../src/extensions/workspaces/sessions/(backend)/tool/share_file.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\ntype ManyFactory<T, C> = (context: C) => T | readonly T[];\nconst many = <T, C>(value: T | readonly T[] | ManyFactory<T, C>, context: C): readonly T[] => {\n const resolved = typeof value === 'function' ? (value as ManyFactory<T, C>)(context) : value;\n return Array.isArray(resolved) ? resolved : [resolved as T];\n};\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-mcp',\n session: (context) => ({\n get skills(): PoMcpSessionPlugin['skills'] { return [at(skillPoUseMcp, context)]; },\n get tools(): PoMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-mcp/mcp_use\", via({ name: 'mcp_use' }, at(toolMcpUse, context))), via({ name: 'save_file' }, at(toolSaveFile, context)), ...many(toolSessionMcp, context).map((tool) => withWidget(\"@agimon-ai/po-mcp/session_mcp\", tool)), via({ name: 'share_file' }, at(toolShareFile, context))]; },\n }) satisfies PoMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;AAGA,IAAA,yBAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,YAAY,oBAAoB,YAAY,KAAK,iCAAiC;AACpF,CAAC;;;ACJD,MAAa,6BAA6B;AAgB1C,SAAgB,oBAAoB,SAA6B,MAA8B;CAC7F,MAAM,OAAO,QAAQ,SAAS,IAA4B,0BAA0B,CAAC,EAAE,IAAI,IAAI;CAC/F,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,4BAA4B,MAAM;CAC7D,OAAO;EACL,GAAG;EACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;AC1BA,IAAA,sBAAe,eAAe,YAAgC,oBAAoB,SAAS,SAAS,CAAC;;;ACArG,IAAA,wBAAe,eAAe,YAAgC,oBAAoB,SAAS,WAAW,CAAC;ACF9D,KAAK,OAAO;CACnD,QAAQ,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC;CACpC,MAAM,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC;CAClC,WAAW,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;AACrE,CAAC;;;ACKD,MAAa,4BAA4B;;;ACDzC,IAAA,0BAAe,0BACZ,YAA2D;CAC1D,MAAM,UAAU,QAAQ,SAAS,IAA4B,yBAAyB;CACtF,IAAI,CAAC,SAAS,OAAO,CAAC;CACtB,IAAI,UAAoC,CAAC;CACzC,MAAM,OAAO,QAAQ,eAAe;EAClC,MAAM,OAAO,QAAQ,QAAQ;EAC7B,IAAI,KAAK,WAAW,QAAQ,UAAU,KAAK,OAAO,MAAM,UAAU,SAAS,QAAQ,MAAM,GAAG;EAC5F,UAAU;EACV,QAAQ,QAAQ;CAClB,CAAC;CACD,UAAU,QAAQ,QAAQ;CAC1B,QAAQ,OAAO,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;CAC7D,OAAO,QAAQ,KAAK,UAAU;EAC5B,GAAG;EACH,UAAU,YAAY,YAAY,WAChC,KAAK,QAAQ,YAAY,YAAY,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,CAAC;CACpG,EAAE;AACJ,GACA,EAAE,aAAa,OAAO,CACxB;;;AC1BA,IAAA,yBAAe,eAAe,YAAgC,oBAAoB,SAAS,YAAY,CAAC;;;ACMxG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAM,QAAc,OAA6C,YAA6B;CAC5F,MAAM,WAAW,OAAO,UAAU,aAAc,MAA4B,OAAO,IAAI;CACvF,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAa;AAC5D;AACA,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa;EACrB,IAAI,SAAuC;GAAE,OAAO,CAAC,GAAGA,wBAAe,OAAO,CAAC;EAAG;EAClF,IAAI,QAAqC;GAAE,OAAO;IAAC,WAAW,6BAA6B,IAAI,EAAE,MAAM,UAAU,GAAG,GAAGC,qBAAY,OAAO,CAAC,CAAC;IAAG,IAAI,EAAE,MAAM,YAAY,GAAG,GAAGC,uBAAc,OAAO,CAAC;IAAG,GAAG,KAAKC,yBAAgB,OAAO,CAAC,CAAC,KAAK,SAAS,WAAW,iCAAiC,IAAI,CAAC;IAAG,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,wBAAe,OAAO,CAAC;GAAC;EAAG;CACrW;AACF,CAAC"}
|