@agimon-ai/doompi-mcp 0.0.1-alpha.93 → 0.0.1-alpha.95
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/dist/apiContracts.cjs +36 -2
- package/dist/apiContracts.cjs.map +1 -1
- package/dist/apiContracts.d.mts.map +1 -1
- package/dist/apiContracts.mjs +36 -2
- package/dist/apiContracts.mjs.map +1 -1
- package/dist/extensions/pi.cjs +1 -1
- package/dist/extensions/pi.mjs +1 -1
- package/dist/extensions/server.cjs +106 -7
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.mts.map +1 -1
- package/dist/extensions/server.mjs +106 -7
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/extensions/web.mjs +369 -175
- package/dist/extensions/web.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/{mcpCommand-BARs6Y1N.cjs → mcpCommand-CGYkV5hK.cjs} +50 -5
- package/dist/mcpCommand-CGYkV5hK.cjs.map +1 -0
- package/dist/{mcpCommand-BaJXXphd.mjs → mcpCommand-DlUGMhht.mjs} +33 -6
- package/dist/mcpCommand-DlUGMhht.mjs.map +1 -0
- package/package.json +10 -9
- package/dist/mcpCommand-BARs6Y1N.cjs.map +0 -1
- package/dist/mcpCommand-BaJXXphd.mjs.map +0 -1
package/dist/apiContracts.cjs
CHANGED
|
@@ -66,11 +66,45 @@ const McpAuthorizationSchema = typebox.Type.Object({
|
|
|
66
66
|
error: O(S),
|
|
67
67
|
expiresAt: N
|
|
68
68
|
});
|
|
69
|
+
const McpSessionToolSchema = typebox.Type.Object({
|
|
70
|
+
server: S,
|
|
71
|
+
tool: S,
|
|
72
|
+
description: O(S),
|
|
73
|
+
inputSchema: typebox.Type.Record(S, typebox.Type.Unknown()),
|
|
74
|
+
tokens: N
|
|
75
|
+
});
|
|
76
|
+
const SessionToolQuery = [{
|
|
77
|
+
name: "server",
|
|
78
|
+
in: "query",
|
|
79
|
+
required: true,
|
|
80
|
+
schema: typebox.Type.String({
|
|
81
|
+
minLength: 1,
|
|
82
|
+
maxLength: 160
|
|
83
|
+
})
|
|
84
|
+
}, {
|
|
85
|
+
name: "tool",
|
|
86
|
+
in: "query",
|
|
87
|
+
required: true,
|
|
88
|
+
schema: typebox.Type.String({
|
|
89
|
+
minLength: 1,
|
|
90
|
+
maxLength: 256
|
|
91
|
+
})
|
|
92
|
+
}];
|
|
69
93
|
const apiContracts = (0, _agimon_ai_doompi_core_apiContracts.defineApiContract)({
|
|
70
94
|
version: 1,
|
|
71
95
|
sockets: [],
|
|
72
96
|
dynamic: [],
|
|
73
|
-
http: [
|
|
97
|
+
http: [{
|
|
98
|
+
id: "mcp.session.tool",
|
|
99
|
+
scope: "session",
|
|
100
|
+
basePath: "mcp-session",
|
|
101
|
+
path: "/tool",
|
|
102
|
+
method: "GET",
|
|
103
|
+
authentication: "owner",
|
|
104
|
+
description: "Read one tool the session reaches through mcp_use: its description, schema, and token cost.",
|
|
105
|
+
parameters: SessionToolQuery,
|
|
106
|
+
responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(McpSessionToolSchema)
|
|
107
|
+
}, ...["global", "workspace"].flatMap((scope) => [
|
|
74
108
|
{
|
|
75
109
|
id: "mcp.catalog",
|
|
76
110
|
scope,
|
|
@@ -129,7 +163,7 @@ const apiContracts = (0, _agimon_ai_doompi_core_apiContracts.defineApiContract)(
|
|
|
129
163
|
parameters: RepositoryQuery,
|
|
130
164
|
responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(McpAuthorizationSchema)
|
|
131
165
|
}))
|
|
132
|
-
])
|
|
166
|
+
])]
|
|
133
167
|
});
|
|
134
168
|
//#endregion
|
|
135
169
|
exports.apiContracts = apiContracts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-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({ pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24})$' });\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 apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: (['global', 'workspace'] as const).flatMap((scope) => [\n
|
|
1
|
+
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-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({ pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24})$' });\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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBA+Ca"}
|
package/dist/apiContracts.mjs
CHANGED
|
@@ -62,11 +62,45 @@ const McpAuthorizationSchema = Type.Object({
|
|
|
62
62
|
error: O(S),
|
|
63
63
|
expiresAt: N
|
|
64
64
|
});
|
|
65
|
+
const McpSessionToolSchema = Type.Object({
|
|
66
|
+
server: S,
|
|
67
|
+
tool: S,
|
|
68
|
+
description: O(S),
|
|
69
|
+
inputSchema: Type.Record(S, Type.Unknown()),
|
|
70
|
+
tokens: N
|
|
71
|
+
});
|
|
72
|
+
const SessionToolQuery = [{
|
|
73
|
+
name: "server",
|
|
74
|
+
in: "query",
|
|
75
|
+
required: true,
|
|
76
|
+
schema: Type.String({
|
|
77
|
+
minLength: 1,
|
|
78
|
+
maxLength: 160
|
|
79
|
+
})
|
|
80
|
+
}, {
|
|
81
|
+
name: "tool",
|
|
82
|
+
in: "query",
|
|
83
|
+
required: true,
|
|
84
|
+
schema: Type.String({
|
|
85
|
+
minLength: 1,
|
|
86
|
+
maxLength: 256
|
|
87
|
+
})
|
|
88
|
+
}];
|
|
65
89
|
const apiContracts = defineApiContract({
|
|
66
90
|
version: 1,
|
|
67
91
|
sockets: [],
|
|
68
92
|
dynamic: [],
|
|
69
|
-
http: [
|
|
93
|
+
http: [{
|
|
94
|
+
id: "mcp.session.tool",
|
|
95
|
+
scope: "session",
|
|
96
|
+
basePath: "mcp-session",
|
|
97
|
+
path: "/tool",
|
|
98
|
+
method: "GET",
|
|
99
|
+
authentication: "owner",
|
|
100
|
+
description: "Read one tool the session reaches through mcp_use: its description, schema, and token cost.",
|
|
101
|
+
parameters: SessionToolQuery,
|
|
102
|
+
responses: jsonApiResponses(McpSessionToolSchema)
|
|
103
|
+
}, ...["global", "workspace"].flatMap((scope) => [
|
|
70
104
|
{
|
|
71
105
|
id: "mcp.catalog",
|
|
72
106
|
scope,
|
|
@@ -125,7 +159,7 @@ const apiContracts = defineApiContract({
|
|
|
125
159
|
parameters: RepositoryQuery,
|
|
126
160
|
responses: jsonApiResponses(McpAuthorizationSchema)
|
|
127
161
|
}))
|
|
128
|
-
])
|
|
162
|
+
])]
|
|
129
163
|
});
|
|
130
164
|
//#endregion
|
|
131
165
|
export { apiContracts, apiContracts as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-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({ pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24})$' });\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 apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: (['global', 'workspace'] as const).flatMap((scope) => [\n
|
|
1
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-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({ pattern: '^(?:[a-f0-9]{32}|repo-[A-Za-z0-9_-]{24})$' });\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"],"mappings":"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"}
|
package/dist/extensions/pi.cjs
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperties(exports, {
|
|
|
5
5
|
const require_rolldown_runtime = require("../rolldown-runtime-C0BPl7ul.cjs");
|
|
6
6
|
const require_mcpCatalog = require("../mcpCatalog-Bnkul3t_.cjs");
|
|
7
7
|
const require_projection = require("../projection-w3XxXmVi.cjs");
|
|
8
|
-
const require_mcpCommand = require("../mcpCommand-
|
|
8
|
+
const require_mcpCommand = require("../mcpCommand-CGYkV5hK.cjs");
|
|
9
9
|
let node_path = require("node:path");
|
|
10
10
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
11
11
|
let _agimon_ai_doompi_core_mcpProjection = require("@agimon-ai/doompi-core/mcpProjection");
|
package/dist/extensions/pi.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as readSessionConfig } from "../mcpCatalog-laXfwecc.mjs";
|
|
2
2
|
import { t as mcpSessionConfigFromProjection } from "../projection-gyAA2jRB.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { C as MCP_STATUS_KEY, S as LEADER_GROUP, _ as formatMcpSessionAuthStatus, a as createMcpSessionToolsService, b as LEADER_BINDING_PREFIX, i as createMcpChildTool, p as MCP_SESSION_AUTH_STATUS_KEY, r as MCP_SESSION_TOOLS_SERVICE, t as createMcpCommand, v as McpSession, w as PACKAGE_SOURCE, x as LEADER_DETAIL, y as createMcpTool } from "../mcpCommand-DlUGMhht.mjs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { DOOM_MCP_PROJECTION_SERVICE, readDoomMcpProjectionService } from "@agimon-ai/doompi-core/mcpProjection";
|
|
6
6
|
import { definePiExtension, piToolContributions } from "@agimon-ai/doompi-core/piExtension";
|
|
@@ -5,7 +5,7 @@ Object.defineProperties(exports, {
|
|
|
5
5
|
const require_rolldown_runtime = require("../rolldown-runtime-C0BPl7ul.cjs");
|
|
6
6
|
const require_mcpCatalog = require("../mcpCatalog-Bnkul3t_.cjs");
|
|
7
7
|
const require_projection = require("../projection-w3XxXmVi.cjs");
|
|
8
|
-
const require_mcpCommand = require("../mcpCommand-
|
|
8
|
+
const require_mcpCommand = require("../mcpCommand-CGYkV5hK.cjs");
|
|
9
9
|
const require_keyringTokenStore = require("../keyringTokenStore-LBsDb_eC.cjs");
|
|
10
10
|
let node_crypto = require("node:crypto");
|
|
11
11
|
let node_fs = require("node:fs");
|
|
@@ -33,6 +33,60 @@ function mountMcpHeadlessTools(tools) {
|
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
//#endregion
|
|
36
|
+
//#region src/services/mcpToolCost/index.ts
|
|
37
|
+
/**
|
|
38
|
+
* What one downstream tool would cost if it were added to the model's tool list directly: its
|
|
39
|
+
* name, description and input schema, priced the way the context panel prices every other tool.
|
|
40
|
+
*/
|
|
41
|
+
function mcpToolTokens(tool, countTokens) {
|
|
42
|
+
return countTokens(JSON.stringify({
|
|
43
|
+
name: tool.piName,
|
|
44
|
+
...tool.description === void 0 ? {} : { description: tool.description },
|
|
45
|
+
parameters: tool.inputSchema
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/services/mcpSessionApi/index.ts
|
|
50
|
+
const JSON_HEADERS$1 = { "content-type": "application/json" };
|
|
51
|
+
function json$1(body, status = 200) {
|
|
52
|
+
return new Response(JSON.stringify(body), {
|
|
53
|
+
status,
|
|
54
|
+
headers: JSON_HEADERS$1
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* This package's session mount, `mcp-session`: one reachable tool's description and schema.
|
|
59
|
+
*
|
|
60
|
+
* Read-only and bounded to the tools `mcp_use` accepts, so a page can inspect what the agent may
|
|
61
|
+
* call without the status line carrying every schema.
|
|
62
|
+
*/
|
|
63
|
+
function createMcpSessionApi(source, countTokens) {
|
|
64
|
+
return {
|
|
65
|
+
basePath: "mcp-session",
|
|
66
|
+
start() {
|
|
67
|
+
return {
|
|
68
|
+
async fetch(request) {
|
|
69
|
+
const url = new URL(request.url);
|
|
70
|
+
if (request.method !== "GET" || url.pathname !== "/tool") return json$1({ error: "Not found." }, 404);
|
|
71
|
+
const server = url.searchParams.get("server") ?? "";
|
|
72
|
+
const name = url.searchParams.get("tool") ?? "";
|
|
73
|
+
if (!server || !name) return json$1({ error: "A tool is named by its server and tool name." }, 400);
|
|
74
|
+
const tool = source.activeToolDefinitions().find((candidate) => candidate.serverName === server && candidate.toolName === name);
|
|
75
|
+
if (!tool) return json$1({ error: `MCP tool ${server}/${name} is not available in this session.` }, 404);
|
|
76
|
+
return json$1({
|
|
77
|
+
server,
|
|
78
|
+
tool: name,
|
|
79
|
+
...tool.description === void 0 ? {} : { description: tool.description },
|
|
80
|
+
inputSchema: tool.inputSchema,
|
|
81
|
+
tokens: mcpToolTokens(tool, await countTokens())
|
|
82
|
+
});
|
|
83
|
+
},
|
|
84
|
+
close: () => void 0
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
36
90
|
//#region src/services/serverRuntime/index.ts
|
|
37
91
|
function sessionConfiguration(execution, workspaceRoot) {
|
|
38
92
|
if (workspaceRoot !== void 0) {
|
|
@@ -118,6 +172,23 @@ function createMcpServerRuntime(environment = {}, workspaceRoot, getResolver) {
|
|
|
118
172
|
});
|
|
119
173
|
return transition;
|
|
120
174
|
};
|
|
175
|
+
let countTokens;
|
|
176
|
+
let tokenizer;
|
|
177
|
+
const loadTokenizer = () => {
|
|
178
|
+
tokenizer ??= import("gpt-tokenizer").then((module) => {
|
|
179
|
+
countTokens = module.countTokens;
|
|
180
|
+
return module.countTokens;
|
|
181
|
+
});
|
|
182
|
+
return tokenizer;
|
|
183
|
+
};
|
|
184
|
+
const toolTokens = /* @__PURE__ */ new Map();
|
|
185
|
+
/** Each reachable tool's schema cost, keyed by its registered name, once the tokenizer is loaded. */
|
|
186
|
+
const reachableTokens = () => {
|
|
187
|
+
if (countTokens === void 0) return toolTokens;
|
|
188
|
+
for (const tool of session.activeToolDefinitions()) if (!toolTokens.has(tool.piName)) toolTokens.set(tool.piName, mcpToolTokens(tool, countTokens));
|
|
189
|
+
return toolTokens;
|
|
190
|
+
};
|
|
191
|
+
const api = createMcpSessionApi(session, loadTokenizer);
|
|
121
192
|
const activity = {
|
|
122
193
|
name: "doompi-mcp-runtime",
|
|
123
194
|
async start(execution) {
|
|
@@ -127,7 +198,17 @@ function createMcpServerRuntime(environment = {}, workspaceRoot, getResolver) {
|
|
|
127
198
|
const reported = /* @__PURE__ */ new Set();
|
|
128
199
|
const publish = () => {
|
|
129
200
|
execution.client.setStatus(require_mcpCommand.MCP_STATUS_KEY, session.getServers().map((server) => server.name).join(","));
|
|
130
|
-
|
|
201
|
+
const tokens = reachableTokens();
|
|
202
|
+
execution.client.setStatus(require_mcpCommand.MCP_SESSION_AUTH_STATUS_KEY, require_mcpCommand.formatMcpSessionAuthStatus(session.getServers().map((server) => ({
|
|
203
|
+
...server,
|
|
204
|
+
tools: server.tools.map((tool) => {
|
|
205
|
+
const cost = tokens.get(tool.piName);
|
|
206
|
+
return cost === void 0 ? tool : {
|
|
207
|
+
...tool,
|
|
208
|
+
tokens: cost
|
|
209
|
+
};
|
|
210
|
+
})
|
|
211
|
+
}))));
|
|
131
212
|
for (const diagnostic of session.getDiagnostics()) {
|
|
132
213
|
if (reported.has(diagnostic)) continue;
|
|
133
214
|
reported.add(diagnostic);
|
|
@@ -138,7 +219,13 @@ function createMcpServerRuntime(environment = {}, workspaceRoot, getResolver) {
|
|
|
138
219
|
});
|
|
139
220
|
}
|
|
140
221
|
};
|
|
141
|
-
const stopPublishing = session.onChange(
|
|
222
|
+
const stopPublishing = session.onChange(() => {
|
|
223
|
+
toolTokens.clear();
|
|
224
|
+
publish();
|
|
225
|
+
});
|
|
226
|
+
loadTokenizer().then(() => {
|
|
227
|
+
if (active === execution) publish();
|
|
228
|
+
});
|
|
142
229
|
try {
|
|
143
230
|
await refresh(execution, execution.selection);
|
|
144
231
|
publish();
|
|
@@ -184,6 +271,7 @@ function createMcpServerRuntime(environment = {}, workspaceRoot, getResolver) {
|
|
|
184
271
|
const childTool = require_mcpCommand.createMcpChildTool(invoke);
|
|
185
272
|
return {
|
|
186
273
|
session,
|
|
274
|
+
api: [api],
|
|
187
275
|
activities: [activity],
|
|
188
276
|
commands: [{
|
|
189
277
|
name: "mcp",
|
|
@@ -719,6 +807,13 @@ var apiRoutes_default = (0, _agimon_ai_doompi_core_web.defineApiRoutes)({
|
|
|
719
807
|
path: AUTHORIZATION_FLOW_PATH,
|
|
720
808
|
query: [require_mcpCommand.MCP_REPOSITORY_ID_QUERY],
|
|
721
809
|
response: (0, _agimon_ai_doompi_core_web.apiResponse)()
|
|
810
|
+
},
|
|
811
|
+
/** Session scope: one tool the session reaches through mcp_use, with its description and schema. */
|
|
812
|
+
sessionTool: {
|
|
813
|
+
method: "GET",
|
|
814
|
+
path: require_mcpCommand.MCP_SESSION_TOOL_API_PATH,
|
|
815
|
+
query: [require_mcpCommand.MCP_SESSION_TOOL_SERVER_QUERY, require_mcpCommand.MCP_SESSION_TOOL_NAME_QUERY],
|
|
816
|
+
response: (0, _agimon_ai_doompi_core_web.apiResponse)()
|
|
722
817
|
}
|
|
723
818
|
});
|
|
724
819
|
//#endregion
|
|
@@ -842,7 +937,7 @@ async function handleAuthorizationFlow(request, context, path) {
|
|
|
842
937
|
* the browser a client bound to the same segment, so the settings panel can no
|
|
843
938
|
* longer spell a workspace mount by hand.
|
|
844
939
|
*/
|
|
845
|
-
var route_server_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoute)({
|
|
940
|
+
var route_server_default$1 = (0, _agimon_ai_doompi_core_extensionFile.defineRoute)({
|
|
846
941
|
basePath: "mcp",
|
|
847
942
|
start(context) {
|
|
848
943
|
return {
|
|
@@ -861,6 +956,10 @@ var route_server_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoute)
|
|
|
861
956
|
}
|
|
862
957
|
});
|
|
863
958
|
//#endregion
|
|
959
|
+
//#region src/extensions/workspaces/sessions/(backend)/api/mcp-session/route.server.ts
|
|
960
|
+
/** Mounts the session's `mcp-session` API: the reachable tool detail the context panel opens. */
|
|
961
|
+
var route_server_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoute)((context) => context.root.api[0]);
|
|
962
|
+
//#endregion
|
|
864
963
|
//#region src/extensions/workspaces/sessions/(backend)/command/mcp.server.ts
|
|
865
964
|
var mcp_server_default = (0, _agimon_ai_doompi_core_extensionFile.defineServerCommand)((context) => context.root.commands[0]);
|
|
866
965
|
//#endregion
|
|
@@ -876,10 +975,10 @@ const via = (identity, value) => value === void 0 ? void 0 : {
|
|
|
876
975
|
const facet = (0, _agimon_ai_doompi_core_serverFacet.defineServerPlugin)({
|
|
877
976
|
name: "@agimon-ai/doompi-mcp",
|
|
878
977
|
global: (context) => ({ get api() {
|
|
879
|
-
return [at(route_server_default, context)];
|
|
978
|
+
return [at(route_server_default$1, context)];
|
|
880
979
|
} }),
|
|
881
980
|
workspace: (context) => ({ get api() {
|
|
882
|
-
return [at(route_server_default, context)];
|
|
981
|
+
return [at(route_server_default$1, context)];
|
|
883
982
|
} }),
|
|
884
983
|
session: async (context) => {
|
|
885
984
|
const scopeSession = await root_server_default(context);
|
|
@@ -890,7 +989,7 @@ const facet = (0, _agimon_ai_doompi_core_serverFacet.defineServerPlugin)({
|
|
|
890
989
|
return {
|
|
891
990
|
...(0, _agimon_ai_doompi_core_extensionFile.composeRootHooks)(scopeSession),
|
|
892
991
|
get api() {
|
|
893
|
-
return [at(route_server_default, context)];
|
|
992
|
+
return [at(route_server_default$1, context), at(route_server_default, contextSession)];
|
|
894
993
|
},
|
|
895
994
|
get commands() {
|
|
896
995
|
return [via({ name: "mcp" }, at(mcp_server_default, contextSession))];
|