@stigmer/mcp-server 3.0.8-dev.20260612122433
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/LICENSE +190 -0
- package/README.md +157 -0
- package/cli/mcp-server-stigmer.d.ts +3 -0
- package/cli/mcp-server-stigmer.d.ts.map +1 -0
- package/cli/mcp-server-stigmer.js +201 -0
- package/cli/mcp-server-stigmer.js.map +1 -0
- package/config.d.ts +44 -0
- package/config.d.ts.map +1 -0
- package/config.js +92 -0
- package/config.js.map +1 -0
- package/domains/agents/apply.d.ts +4 -0
- package/domains/agents/apply.d.ts.map +1 -0
- package/domains/agents/apply.js +25 -0
- package/domains/agents/apply.js.map +1 -0
- package/domains/agents/delete.d.ts +3 -0
- package/domains/agents/delete.d.ts.map +1 -0
- package/domains/agents/delete.js +35 -0
- package/domains/agents/delete.js.map +1 -0
- package/domains/agents/fetch.d.ts +6 -0
- package/domains/agents/fetch.d.ts.map +1 -0
- package/domains/agents/fetch.js +24 -0
- package/domains/agents/fetch.js.map +1 -0
- package/domains/agents/resources.d.ts +5 -0
- package/domains/agents/resources.d.ts.map +1 -0
- package/domains/agents/resources.js +16 -0
- package/domains/agents/resources.js.map +1 -0
- package/domains/agents/tools.d.ts +5 -0
- package/domains/agents/tools.d.ts.map +1 -0
- package/domains/agents/tools.js +41 -0
- package/domains/agents/tools.js.map +1 -0
- package/domains/client.d.ts +53 -0
- package/domains/client.d.ts.map +1 -0
- package/domains/client.js +62 -0
- package/domains/client.js.map +1 -0
- package/domains/marshal.d.ts +8 -0
- package/domains/marshal.d.ts.map +1 -0
- package/domains/marshal.js +17 -0
- package/domains/marshal.js.map +1 -0
- package/domains/mcpservers/apply.d.ts +4 -0
- package/domains/mcpservers/apply.d.ts.map +1 -0
- package/domains/mcpservers/apply.js +26 -0
- package/domains/mcpservers/apply.js.map +1 -0
- package/domains/mcpservers/delete.d.ts +6 -0
- package/domains/mcpservers/delete.d.ts.map +1 -0
- package/domains/mcpservers/delete.js +42 -0
- package/domains/mcpservers/delete.js.map +1 -0
- package/domains/mcpservers/fetch.d.ts +7 -0
- package/domains/mcpservers/fetch.d.ts.map +1 -0
- package/domains/mcpservers/fetch.js +26 -0
- package/domains/mcpservers/fetch.js.map +1 -0
- package/domains/mcpservers/resources.d.ts +5 -0
- package/domains/mcpservers/resources.d.ts.map +1 -0
- package/domains/mcpservers/resources.js +16 -0
- package/domains/mcpservers/resources.js.map +1 -0
- package/domains/mcpservers/tools.d.ts +5 -0
- package/domains/mcpservers/tools.d.ts.map +1 -0
- package/domains/mcpservers/tools.js +39 -0
- package/domains/mcpservers/tools.js.map +1 -0
- package/domains/resourcehandler.d.ts +27 -0
- package/domains/resourcehandler.d.ts.map +1 -0
- package/domains/resourcehandler.js +32 -0
- package/domains/resourcehandler.js.map +1 -0
- package/domains/resourceuri.d.ts +34 -0
- package/domains/resourceuri.d.ts.map +1 -0
- package/domains/resourceuri.js +100 -0
- package/domains/resourceuri.js.map +1 -0
- package/domains/rpcerr.d.ts +8 -0
- package/domains/rpcerr.d.ts.map +1 -0
- package/domains/rpcerr.js +42 -0
- package/domains/rpcerr.js.map +1 -0
- package/domains/search/tools.d.ts +5 -0
- package/domains/search/tools.d.ts.map +1 -0
- package/domains/search/tools.js +125 -0
- package/domains/search/tools.js.map +1 -0
- package/domains/skills/delete.d.ts +6 -0
- package/domains/skills/delete.d.ts.map +1 -0
- package/domains/skills/delete.js +38 -0
- package/domains/skills/delete.js.map +1 -0
- package/domains/skills/fetch.d.ts +6 -0
- package/domains/skills/fetch.d.ts.map +1 -0
- package/domains/skills/fetch.js +28 -0
- package/domains/skills/fetch.js.map +1 -0
- package/domains/skills/resources.d.ts +5 -0
- package/domains/skills/resources.d.ts.map +1 -0
- package/domains/skills/resources.js +25 -0
- package/domains/skills/resources.js.map +1 -0
- package/domains/skills/tools.d.ts +5 -0
- package/domains/skills/tools.d.ts.map +1 -0
- package/domains/skills/tools.js +39 -0
- package/domains/skills/tools.js.map +1 -0
- package/domains/toolresult.d.ts +12 -0
- package/domains/toolresult.d.ts.map +1 -0
- package/domains/toolresult.js +30 -0
- package/domains/toolresult.js.map +1 -0
- package/domains/workflowexecutions/tools.d.ts +5 -0
- package/domains/workflowexecutions/tools.d.ts.map +1 -0
- package/domains/workflowexecutions/tools.js +80 -0
- package/domains/workflowexecutions/tools.js.map +1 -0
- package/domains/workflows/apply.d.ts +4 -0
- package/domains/workflows/apply.d.ts.map +1 -0
- package/domains/workflows/apply.js +30 -0
- package/domains/workflows/apply.js.map +1 -0
- package/domains/workflows/delete.d.ts +3 -0
- package/domains/workflows/delete.d.ts.map +1 -0
- package/domains/workflows/delete.js +35 -0
- package/domains/workflows/delete.js.map +1 -0
- package/domains/workflows/fetch.d.ts +6 -0
- package/domains/workflows/fetch.d.ts.map +1 -0
- package/domains/workflows/fetch.js +25 -0
- package/domains/workflows/fetch.js.map +1 -0
- package/domains/workflows/resources.d.ts +5 -0
- package/domains/workflows/resources.d.ts.map +1 -0
- package/domains/workflows/resources.js +16 -0
- package/domains/workflows/resources.js.map +1 -0
- package/domains/workflows/taskkinds.d.ts +5 -0
- package/domains/workflows/taskkinds.d.ts.map +1 -0
- package/domains/workflows/taskkinds.js +66 -0
- package/domains/workflows/taskkinds.js.map +1 -0
- package/domains/workflows/tools.d.ts +5 -0
- package/domains/workflows/tools.d.ts.map +1 -0
- package/domains/workflows/tools.js +35 -0
- package/domains/workflows/tools.js.map +1 -0
- package/domains/workflows/validate.d.ts +5 -0
- package/domains/workflows/validate.d.ts.map +1 -0
- package/domains/workflows/validate.js +113 -0
- package/domains/workflows/validate.js.map +1 -0
- package/gen/agent.d.ts +385 -0
- package/gen/agent.d.ts.map +1 -0
- package/gen/agent.js +170 -0
- package/gen/agent.js.map +1 -0
- package/gen/apply-runtime.d.ts +18 -0
- package/gen/apply-runtime.d.ts.map +1 -0
- package/gen/apply-runtime.js +50 -0
- package/gen/apply-runtime.js.map +1 -0
- package/gen/mcpserver.d.ts +289 -0
- package/gen/mcpserver.d.ts.map +1 -0
- package/gen/mcpserver.js +166 -0
- package/gen/mcpserver.js.map +1 -0
- package/gen/workflow.d.ts +805 -0
- package/gen/workflow.d.ts.map +1 -0
- package/gen/workflow.js +842 -0
- package/gen/workflow.js.map +1 -0
- package/index.d.ts +20 -0
- package/index.d.ts.map +1 -0
- package/index.js +58 -0
- package/index.js.map +1 -0
- package/logger.d.ts +20 -0
- package/logger.d.ts.map +1 -0
- package/logger.js +41 -0
- package/logger.js.map +1 -0
- package/package.json +43 -0
- package/server.d.ts +60 -0
- package/server.d.ts.map +1 -0
- package/server.js +366 -0
- package/server.js.map +1 -0
- package/src/cli/mcp-server-stigmer.ts +42 -0
- package/src/config.test.ts +88 -0
- package/src/config.ts +151 -0
- package/src/domains/agents/apply.ts +30 -0
- package/src/domains/agents/delete.ts +41 -0
- package/src/domains/agents/fetch.ts +33 -0
- package/src/domains/agents/resources.ts +20 -0
- package/src/domains/agents/tools.ts +68 -0
- package/src/domains/apply.integration.test.ts +220 -0
- package/src/domains/client.ts +95 -0
- package/src/domains/deletes.integration.test.ts +124 -0
- package/src/domains/marshal.ts +21 -0
- package/src/domains/mcpservers/apply.ts +36 -0
- package/src/domains/mcpservers/delete.ts +51 -0
- package/src/domains/mcpservers/fetch.ts +35 -0
- package/src/domains/mcpservers/resources.ts +20 -0
- package/src/domains/mcpservers/tools.ts +74 -0
- package/src/domains/reads.integration.test.ts +134 -0
- package/src/domains/resourcehandler.ts +90 -0
- package/src/domains/resources.integration.test.ts +139 -0
- package/src/domains/resourceuri.test.ts +97 -0
- package/src/domains/resourceuri.ts +124 -0
- package/src/domains/rpcerr.test.ts +62 -0
- package/src/domains/rpcerr.ts +46 -0
- package/src/domains/search/search.integration.test.ts +127 -0
- package/src/domains/search/tools.ts +160 -0
- package/src/domains/skills/delete.ts +44 -0
- package/src/domains/skills/fetch.ts +38 -0
- package/src/domains/skills/resources.ts +33 -0
- package/src/domains/skills/tools.ts +67 -0
- package/src/domains/toolresult.ts +33 -0
- package/src/domains/workflowexecutions/tools.ts +133 -0
- package/src/domains/workflows/apply.ts +40 -0
- package/src/domains/workflows/delete.ts +44 -0
- package/src/domains/workflows/fetch.ts +34 -0
- package/src/domains/workflows/resources.ts +20 -0
- package/src/domains/workflows/taskkinds.ts +103 -0
- package/src/domains/workflows/tools.ts +68 -0
- package/src/domains/workflows/validate.integration.test.ts +117 -0
- package/src/domains/workflows/validate.ts +144 -0
- package/src/domains/workflows/workflow-tools.integration.test.ts +148 -0
- package/src/gen/agent.ts +173 -0
- package/src/gen/apply-runtime.ts +52 -0
- package/src/gen/mcpserver.ts +163 -0
- package/src/gen/workflow.ts +858 -0
- package/src/http.integration.test.ts +140 -0
- package/src/index.ts +66 -0
- package/src/logger.ts +49 -0
- package/src/server.integration.test.ts +82 -0
- package/src/server.ts +414 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// MCP server delete path: resolve org/slug → id, then delete, both over a single
|
|
2
|
+
// shared transport.
|
|
3
|
+
// Go parity: mcp-server/internal/domains/mcpservers/delete.go.
|
|
4
|
+
//
|
|
5
|
+
// Outlier: unlike the agent/skill/workflow command controllers (which take a
|
|
6
|
+
// typed {X}Id), McpServerCommandController.delete takes the generic
|
|
7
|
+
// ApiResourceDeleteInput{resource_id}.
|
|
8
|
+
import { createClient } from "@connectrpc/connect";
|
|
9
|
+
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
10
|
+
import { McpServerCommandController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/command_pb";
|
|
11
|
+
import { McpServerQueryController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/query_pb";
|
|
12
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
13
|
+
import { withTransport } from "../client.js";
|
|
14
|
+
import { toProtoJson } from "../marshal.js";
|
|
15
|
+
import { rpcError } from "../rpcerr.js";
|
|
16
|
+
/**
|
|
17
|
+
* Delete an MCP server by org and slug, returning the deleted MCP server as
|
|
18
|
+
* protojson.
|
|
19
|
+
*/
|
|
20
|
+
export async function deleteMcpServer(serverAddress, token, org, slug) {
|
|
21
|
+
const desc = `MCP server "${slug}" in org "${org}"`;
|
|
22
|
+
return withTransport(serverAddress, token, async (transport, callOptions) => {
|
|
23
|
+
const query = createClient(McpServerQueryController, transport);
|
|
24
|
+
let id;
|
|
25
|
+
try {
|
|
26
|
+
const mcpServer = await query.getByReference({ org, kind: ApiResourceKind.mcp_server, slug }, callOptions);
|
|
27
|
+
id = mcpServer.metadata?.id ?? "";
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
throw rpcError(err, desc);
|
|
31
|
+
}
|
|
32
|
+
const command = createClient(McpServerCommandController, transport);
|
|
33
|
+
try {
|
|
34
|
+
const deleted = await command.delete({ resourceId: id }, callOptions);
|
|
35
|
+
return toProtoJson(McpServerSchema, deleted);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
throw rpcError(err, desc);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/domains/mcpservers/delete.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,oBAAoB;AACpB,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,oEAAoE;AACpE,uCAAuC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,4DAA4D,CAAC;AACxG,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAEtH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,KAAa,EACb,GAAW,EACX,IAAY;IAEZ,MAAM,IAAI,GAAG,eAAe,IAAI,aAAa,GAAG,GAAG,CAAC;IACpD,OAAO,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;QAC1E,MAAM,KAAK,GAAG,YAAY,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QAChE,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,cAAc,CAC1C,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,EAC/C,WAAW,CACZ,CAAC;YACF,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YACtE,OAAO,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrieve an MCP server by org and slug, returning its protojson
|
|
3
|
+
* representation. Errors are classified into user-facing messages via
|
|
4
|
+
* {@link rpcError}.
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchMcpServer(serverAddress: string, token: string, org: string, slug: string): Promise<string>;
|
|
7
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/domains/mcpservers/fetch.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// MCP server read path: the single RPC both the get_mcp_server tool and the
|
|
2
|
+
// mcp-server resource template delegate to.
|
|
3
|
+
// Go parity: mcp-server/internal/domains/mcpservers/fetch.go.
|
|
4
|
+
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
5
|
+
import { McpServerQueryController } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/query_pb";
|
|
6
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
7
|
+
import { withClient } from "../client.js";
|
|
8
|
+
import { toProtoJson } from "../marshal.js";
|
|
9
|
+
import { rpcError } from "../rpcerr.js";
|
|
10
|
+
/**
|
|
11
|
+
* Retrieve an MCP server by org and slug, returning its protojson
|
|
12
|
+
* representation. Errors are classified into user-facing messages via
|
|
13
|
+
* {@link rpcError}.
|
|
14
|
+
*/
|
|
15
|
+
export async function fetchMcpServer(serverAddress, token, org, slug) {
|
|
16
|
+
return withClient(McpServerQueryController, serverAddress, token, async (client, callOptions) => {
|
|
17
|
+
try {
|
|
18
|
+
const mcpServer = await client.getByReference({ org, kind: ApiResourceKind.mcp_server, slug }, callOptions);
|
|
19
|
+
return toProtoJson(McpServerSchema, mcpServer);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
throw rpcError(err, `MCP server "${slug}" in org "${org}"`);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/domains/mcpservers/fetch.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4CAA4C;AAC5C,8DAA8D;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAEtH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,aAAqB,EACrB,KAAa,EACb,GAAW,EACX,IAAY;IAEZ,OAAO,UAAU,CAAC,wBAAwB,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE;QAC9F,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAC3C,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,EAC/C,WAAW,CACZ,CAAC;YACF,OAAO,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,GAAG,EAAE,eAAe,IAAI,aAAa,GAAG,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { BackendTarget } from "../client.js";
|
|
3
|
+
/** Register the MCP server resource template; returns the registered resource names. */
|
|
4
|
+
export declare function registerMcpServerResources(server: McpServer, target: BackendTarget): string[];
|
|
5
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/domains/mcpservers/resources.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,wFAAwF;AACxF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAS7F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// MCP server resource template (stigmer://mcp-servers/{org}/{slug}).
|
|
2
|
+
// Go parity: mcp-server/internal/domains/mcpservers/resources.go.
|
|
3
|
+
import { registerResource } from "../resourcehandler.js";
|
|
4
|
+
import { fetchMcpServer } from "./fetch.js";
|
|
5
|
+
/** Register the MCP server resource template; returns the registered resource names. */
|
|
6
|
+
export function registerMcpServerResources(server, target) {
|
|
7
|
+
registerResource(server, target, {
|
|
8
|
+
name: "stigmer_mcp_server",
|
|
9
|
+
title: "Stigmer MCP Server",
|
|
10
|
+
description: "Full definition of a Stigmer MCP server, identified by organization and slug.",
|
|
11
|
+
template: "stigmer://mcp-servers/{org}/{slug}",
|
|
12
|
+
fetch: fetchMcpServer,
|
|
13
|
+
});
|
|
14
|
+
return ["stigmer_mcp_server"];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/domains/mcpservers/resources.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,kEAAkE;AAKlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,wFAAwF;AACxF,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,MAAqB;IACjF,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,+EAA+E;QAC5F,QAAQ,EAAE,oCAAoC;QAC9C,KAAK,EAAE,cAAc;KACtB,CAAC,CAAC;IACH,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type BackendTarget } from "../client.js";
|
|
3
|
+
/** Register every McpServer-domain tool; returns the registered tool names. */
|
|
4
|
+
export declare function registerMcpServerTools(server: McpServer, target: BackendTarget): string[];
|
|
5
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/domains/mcpservers/tools.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAMhE,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAwDzF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// MCP tools for the McpServer domain.
|
|
2
|
+
// Go parity: mcp-server/internal/domains/mcpservers/tools.go.
|
|
3
|
+
//
|
|
4
|
+
// Tool name, description, and per-field input descriptions are part of the
|
|
5
|
+
// parity contract (clients surface them to the model verbatim).
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { McpServerInputShape } from "../../gen/mcpserver.js";
|
|
8
|
+
import { resolveToken } from "../client.js";
|
|
9
|
+
import { textOrError } from "../toolresult.js";
|
|
10
|
+
import { applyMcpServer } from "./apply.js";
|
|
11
|
+
import { deleteMcpServer } from "./delete.js";
|
|
12
|
+
import { fetchMcpServer } from "./fetch.js";
|
|
13
|
+
/** Register every McpServer-domain tool; returns the registered tool names. */
|
|
14
|
+
export function registerMcpServerTools(server, target) {
|
|
15
|
+
server.registerTool("get_mcp_server", {
|
|
16
|
+
description: "Get full details of a Stigmer MCP server by its org and slug (e.g. org=acme slug=my-server).",
|
|
17
|
+
inputSchema: {
|
|
18
|
+
org: z.string().describe("Organization slug that owns the MCP server (e.g. acme)."),
|
|
19
|
+
slug: z
|
|
20
|
+
.string()
|
|
21
|
+
.describe("MCP server slug — the unique identifier within the org (e.g. my-server)."),
|
|
22
|
+
},
|
|
23
|
+
}, (args, extra) => textOrError(() => fetchMcpServer(target.serverAddress, resolveToken(extra, target.apiKey), args.org, args.slug)));
|
|
24
|
+
server.registerTool("apply_mcp_server", {
|
|
25
|
+
description: "Create or update a Stigmer MCP server definition (idempotent). Provide identity fields (name, org) and server configuration (stdio/http, tools, env, etc.).",
|
|
26
|
+
inputSchema: McpServerInputShape,
|
|
27
|
+
}, (args, extra) => textOrError(() => applyMcpServer(target.serverAddress, resolveToken(extra, target.apiKey), args)));
|
|
28
|
+
server.registerTool("delete_mcp_server", {
|
|
29
|
+
description: "Delete a Stigmer MCP server definition by its org and slug. Returns the deleted MCP server.",
|
|
30
|
+
inputSchema: {
|
|
31
|
+
org: z.string().describe("Organization slug that owns the MCP server (e.g. acme)."),
|
|
32
|
+
slug: z
|
|
33
|
+
.string()
|
|
34
|
+
.describe("MCP server slug — the unique identifier within the org (e.g. github)."),
|
|
35
|
+
},
|
|
36
|
+
}, (args, extra) => textOrError(() => deleteMcpServer(target.serverAddress, resolveToken(extra, target.apiKey), args.org, args.slug)));
|
|
37
|
+
return ["get_mcp_server", "apply_mcp_server", "delete_mcp_server"];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/domains/mcpservers/tools.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,gEAAgE;AAGhE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAqB;IAC7E,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,8FAA8F;QAChG,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACnF,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CAAC,0EAA0E,CAAC;SACxF;KACF,EACD,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,GAAG,EAAE,CACf,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAC9F,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,6JAA6J;QAC/J,WAAW,EAAE,mBAAmB;KACjC,EACD,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,GAAG,EAAE,CACf,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAC/E,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,6FAA6F;QAC/F,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACnF,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CAAC,uEAAuE,CAAC;SACrF;KACF,EACD,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,GAAG,EAAE,CACf,eAAe,CACb,MAAM,CAAC,aAAa,EACpB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAClC,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,IAAI,CACV,CACF,CACJ,CAAC;IAEF,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type BackendTarget } from "./client.js";
|
|
3
|
+
/** Domain read used by a non-versioned resource template. */
|
|
4
|
+
export type ResourceFetch = (serverAddress: string, token: string, org: string, slug: string) => Promise<string>;
|
|
5
|
+
/** Domain read used by a versioned resource template ("" version means latest). */
|
|
6
|
+
export type VersionedResourceFetch = (serverAddress: string, token: string, org: string, slug: string, version: string) => Promise<string>;
|
|
7
|
+
/** Options shared by both registration helpers. */
|
|
8
|
+
interface ResourceOptions {
|
|
9
|
+
/** Stable resource name surfaced in resources/templates/list (e.g. stigmer_agent). */
|
|
10
|
+
readonly name: string;
|
|
11
|
+
/** Human title surfaced to clients (e.g. "Stigmer Agent"). */
|
|
12
|
+
readonly title: string;
|
|
13
|
+
/** Human description surfaced to clients. */
|
|
14
|
+
readonly description: string;
|
|
15
|
+
/** RFC-6570 URI template, e.g. stigmer://agents/{org}/{slug}. */
|
|
16
|
+
readonly template: string;
|
|
17
|
+
}
|
|
18
|
+
/** Register a stigmer://{authority}/{org}/{slug} resource template. */
|
|
19
|
+
export declare function registerResource(server: McpServer, target: BackendTarget, opts: ResourceOptions & {
|
|
20
|
+
readonly fetch: ResourceFetch;
|
|
21
|
+
}): void;
|
|
22
|
+
/** Register a stigmer://{authority}/{org}/{slug}[/{version}] resource template. */
|
|
23
|
+
export declare function registerVersionedResource(server: McpServer, target: BackendTarget, opts: ResourceOptions & {
|
|
24
|
+
readonly fetch: VersionedResourceFetch;
|
|
25
|
+
}): void;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=resourcehandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourcehandler.d.ts","sourceRoot":"","sources":["../../src/domains/resourcehandler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAGtF,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,CAC1B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,mFAAmF;AACnF,MAAM,MAAM,sBAAsB,GAAG,CACnC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,mDAAmD;AACnD,UAAU,eAAe;IACvB,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACxD,IAAI,CAWN;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GACjE,IAAI,CAiBN"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Registration helpers for MCP resource templates.
|
|
2
|
+
// Go parity: mcp-server/internal/domains/resourcehandler.go.
|
|
3
|
+
//
|
|
4
|
+
// Every Stigmer resource template resolves the per-request credential the same
|
|
5
|
+
// way tools do (resolveToken over extra.authInfo), parses org/slug[/version]
|
|
6
|
+
// from the request URI, delegates to the domain fetch, and returns a single
|
|
7
|
+
// application/json content entry. These helpers keep each domain's resources.ts
|
|
8
|
+
// a one-liner and ensure the auth + result shape stay identical across domains.
|
|
9
|
+
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
10
|
+
import { resolveToken } from "./client.js";
|
|
11
|
+
import { parseResourceURI, parseVersionedResourceURI } from "./resourceuri.js";
|
|
12
|
+
/** Register a stigmer://{authority}/{org}/{slug} resource template. */
|
|
13
|
+
export function registerResource(server, target, opts) {
|
|
14
|
+
server.registerResource(opts.name, new ResourceTemplate(opts.template, { list: undefined }), { title: opts.title, description: opts.description, mimeType: "application/json" }, async (uri, _vars, extra) => {
|
|
15
|
+
const { org, slug } = parseResourceURI(uri.href);
|
|
16
|
+
const text = await opts.fetch(target.serverAddress, resolveToken(extra, target.apiKey), org, slug);
|
|
17
|
+
return jsonResource(uri.href, text);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Register a stigmer://{authority}/{org}/{slug}[/{version}] resource template. */
|
|
21
|
+
export function registerVersionedResource(server, target, opts) {
|
|
22
|
+
server.registerResource(opts.name, new ResourceTemplate(opts.template, { list: undefined }), { title: opts.title, description: opts.description, mimeType: "application/json" }, async (uri, _vars, extra) => {
|
|
23
|
+
const { org, slug, version } = parseVersionedResourceURI(uri.href);
|
|
24
|
+
const text = await opts.fetch(target.serverAddress, resolveToken(extra, target.apiKey), org, slug, version);
|
|
25
|
+
return jsonResource(uri.href, text);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** Wrap fetched JSON text into the single-entry ReadResourceResult tools expect. */
|
|
29
|
+
function jsonResource(uri, text) {
|
|
30
|
+
return { contents: [{ uri, mimeType: "application/json", text }] };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=resourcehandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourcehandler.js","sourceRoot":"","sources":["../../src/domains/resourcehandler.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,6DAA6D;AAC7D,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAEhF,OAAO,EAAa,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AA+B/E,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,MAAqB,EACrB,IAAyD;IAEzD,MAAM,CAAC,gBAAgB,CACrB,IAAI,CAAC,IAAI,EACT,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACxD,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAClF,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACnG,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,MAAqB,EACrB,IAAkE;IAElE,MAAM,CAAC,gBAAgB,CACrB,IAAI,CAAC,IAAI,EACT,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACxD,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAClF,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAC3B,MAAM,CAAC,aAAa,EACpB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAClC,GAAG,EACH,IAAI,EACJ,OAAO,CACR,CAAC;QACF,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,SAAS,YAAY,CAAC,GAAW,EAAE,IAAY;IAC7C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** The org and slug extracted from a two-segment resource URI. */
|
|
2
|
+
export interface ResourceRef {
|
|
3
|
+
readonly org: string;
|
|
4
|
+
readonly slug: string;
|
|
5
|
+
}
|
|
6
|
+
/** A resource ref that may also carry an explicit version ("" means latest). */
|
|
7
|
+
export interface VersionedResourceRef extends ResourceRef {
|
|
8
|
+
readonly version: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract org and slug from a stigmer://{authority}/{org}/{slug} URI.
|
|
12
|
+
* Throws when the scheme is not "stigmer" or the path is not exactly two
|
|
13
|
+
* non-empty segments.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseResourceURI(uri: string): ResourceRef;
|
|
16
|
+
/**
|
|
17
|
+
* Extract org, slug, and optional version from a resource URI. Two path
|
|
18
|
+
* segments yield version "" (latest); three yield an explicit, non-empty
|
|
19
|
+
* version. Any other shape throws.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseVersionedResourceURI(uri: string): VersionedResourceRef;
|
|
22
|
+
/**
|
|
23
|
+
* Map a singular kind name (as it appears in the ApiResourceKind proto enum) to
|
|
24
|
+
* the plural authority used in stigmer:// URIs. Only kinds that have a
|
|
25
|
+
* registered MCP resource template appear here.
|
|
26
|
+
*/
|
|
27
|
+
export declare const kindToAuthority: Readonly<Record<string, string>>;
|
|
28
|
+
/**
|
|
29
|
+
* Construct a stigmer:// URI from a kind, org, and slug — the inverse of
|
|
30
|
+
* {@link parseResourceURI}. Returns "" when the kind has no registered template
|
|
31
|
+
* or org/slug are empty, mirroring the Go server's enrichment fallback.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildResourceURI(kind: string, org: string, slug: string): string;
|
|
34
|
+
//# sourceMappingURL=resourceuri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceuri.d.ts","sourceRoot":"","sources":["../../src/domains/resourceuri.ts"],"names":[],"mappings":"AASA,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAazD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CA6B3E;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK5D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Parsing and construction of stigmer:// resource URIs.
|
|
2
|
+
// Go parity: mcp-server/internal/domains/resourceuri.go.
|
|
3
|
+
//
|
|
4
|
+
// A resource URI has the form stigmer://{authority}/{org}/{slug}[/{version}].
|
|
5
|
+
// The authority (e.g. "agents") is the URL host and encodes the kind; org/slug
|
|
6
|
+
// (and optional version) are the path segments. Parsing deliberately validates
|
|
7
|
+
// only the scheme and the path-segment count/shape — the authority is not
|
|
8
|
+
// checked here, exactly as the Go server behaves.
|
|
9
|
+
/**
|
|
10
|
+
* Extract org and slug from a stigmer://{authority}/{org}/{slug} URI.
|
|
11
|
+
* Throws when the scheme is not "stigmer" or the path is not exactly two
|
|
12
|
+
* non-empty segments.
|
|
13
|
+
*/
|
|
14
|
+
export function parseResourceURI(uri) {
|
|
15
|
+
const segments = pathSegments(uri);
|
|
16
|
+
if (segments.length !== 2) {
|
|
17
|
+
throw new Error(`expected URI path with 2 segments (org/slug), got ${segments.length} in "${uri}"`);
|
|
18
|
+
}
|
|
19
|
+
const org = segments[0] ?? "";
|
|
20
|
+
const slug = segments[1] ?? "";
|
|
21
|
+
if (org === "" || slug === "") {
|
|
22
|
+
throw new Error(`org and slug must be non-empty in "${uri}"`);
|
|
23
|
+
}
|
|
24
|
+
return { org, slug };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract org, slug, and optional version from a resource URI. Two path
|
|
28
|
+
* segments yield version "" (latest); three yield an explicit, non-empty
|
|
29
|
+
* version. Any other shape throws.
|
|
30
|
+
*/
|
|
31
|
+
export function parseVersionedResourceURI(uri) {
|
|
32
|
+
const segments = pathSegments(uri);
|
|
33
|
+
let org = "";
|
|
34
|
+
let slug = "";
|
|
35
|
+
let version = "";
|
|
36
|
+
switch (segments.length) {
|
|
37
|
+
case 2:
|
|
38
|
+
org = segments[0] ?? "";
|
|
39
|
+
slug = segments[1] ?? "";
|
|
40
|
+
break;
|
|
41
|
+
case 3:
|
|
42
|
+
org = segments[0] ?? "";
|
|
43
|
+
slug = segments[1] ?? "";
|
|
44
|
+
version = segments[2] ?? "";
|
|
45
|
+
if (version === "") {
|
|
46
|
+
throw new Error(`version segment must be non-empty in "${uri}"`);
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
throw new Error(`expected URI path with 2 or 3 segments (org/slug[/version]), got ${segments.length} in "${uri}"`);
|
|
51
|
+
}
|
|
52
|
+
if (org === "" || slug === "") {
|
|
53
|
+
throw new Error(`org and slug must be non-empty in "${uri}"`);
|
|
54
|
+
}
|
|
55
|
+
return { org, slug, version };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Map a singular kind name (as it appears in the ApiResourceKind proto enum) to
|
|
59
|
+
* the plural authority used in stigmer:// URIs. Only kinds that have a
|
|
60
|
+
* registered MCP resource template appear here.
|
|
61
|
+
*/
|
|
62
|
+
export const kindToAuthority = {
|
|
63
|
+
agent: "agents",
|
|
64
|
+
mcp_server: "mcp-servers",
|
|
65
|
+
skill: "skills",
|
|
66
|
+
workflow: "workflows",
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Construct a stigmer:// URI from a kind, org, and slug — the inverse of
|
|
70
|
+
* {@link parseResourceURI}. Returns "" when the kind has no registered template
|
|
71
|
+
* or org/slug are empty, mirroring the Go server's enrichment fallback.
|
|
72
|
+
*/
|
|
73
|
+
export function buildResourceURI(kind, org, slug) {
|
|
74
|
+
const authority = kindToAuthority[kind];
|
|
75
|
+
if (authority === undefined || org === "" || slug === "") {
|
|
76
|
+
return "";
|
|
77
|
+
}
|
|
78
|
+
return `stigmer://${authority}/${org}/${slug}`;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parse the URI, assert the scheme, and return its path split into segments.
|
|
82
|
+
* The double-slash authority (the kind) is intentionally discarded; only the
|
|
83
|
+
* path carries org/slug[/version]. Interior empty segments are preserved so the
|
|
84
|
+
* count matches Go's strings.Split semantics.
|
|
85
|
+
*/
|
|
86
|
+
function pathSegments(uri) {
|
|
87
|
+
let parsed;
|
|
88
|
+
try {
|
|
89
|
+
parsed = new URL(uri);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
throw new Error(`malformed resource URI "${uri}": ${err instanceof Error ? err.message : err}`);
|
|
93
|
+
}
|
|
94
|
+
if (parsed.protocol !== "stigmer:") {
|
|
95
|
+
throw new Error(`unexpected URI scheme "${parsed.protocol.replace(/:$/, "")}", expected "stigmer"`);
|
|
96
|
+
}
|
|
97
|
+
const trimmed = parsed.pathname.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
98
|
+
return trimmed === "" ? [] : trimmed.split("/");
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=resourceuri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceuri.js","sourceRoot":"","sources":["../../src/domains/resourceuri.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yDAAyD;AACzD,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,0EAA0E;AAC1E,kDAAkD;AAalD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,qDAAqD,QAAQ,CAAC,MAAM,QAAQ,GAAG,GAAG,CACnF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,CAAC;YACJ,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM;QACR,KAAK,CAAC;YACJ,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CACb,oEAAoE,QAAQ,CAAC,MAAM,QAAQ,GAAG,GAAG,CAClG,CAAC;IACN,CAAC;IAED,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,KAAK,EAAE,QAAQ;IACf,UAAU,EAAE,aAAa;IACzB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAW,EAAE,IAAY;IACtE,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACzD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,aAAa,SAAS,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CACnF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translate a Connect/gRPC error into a user-friendly Error.
|
|
3
|
+
*
|
|
4
|
+
* `resourceDescription` identifies what was being accessed, e.g.
|
|
5
|
+
* `agent "code-reviewer" in org "stigmer"`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function rpcError(err: unknown, resourceDescription: string): Error;
|
|
8
|
+
//# sourceMappingURL=rpcerr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcerr.d.ts","sourceRoot":"","sources":["../../src/domains/rpcerr.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,GAAG,KAAK,CAUzE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Translation of transport/RPC failures into user-facing tool errors.
|
|
2
|
+
//
|
|
3
|
+
// Parity contract (mirrors Go internal/domains/rpcerr.go): the original error is
|
|
4
|
+
// logged at WARN for operator debugging; only the classified, user-friendly
|
|
5
|
+
// message is returned to the AI client. Message text is kept verbatim so the
|
|
6
|
+
// TS and Go servers are indistinguishable to clients.
|
|
7
|
+
import { Code, ConnectError } from "@connectrpc/connect";
|
|
8
|
+
import { log } from "../logger.js";
|
|
9
|
+
/**
|
|
10
|
+
* Translate a Connect/gRPC error into a user-friendly Error.
|
|
11
|
+
*
|
|
12
|
+
* `resourceDescription` identifies what was being accessed, e.g.
|
|
13
|
+
* `agent "code-reviewer" in org "stigmer"`.
|
|
14
|
+
*/
|
|
15
|
+
export function rpcError(err, resourceDescription) {
|
|
16
|
+
const ce = ConnectError.from(err);
|
|
17
|
+
log.warn("rpc call failed", {
|
|
18
|
+
resource: resourceDescription,
|
|
19
|
+
code: Code[ce.code],
|
|
20
|
+
grpc_message: ce.rawMessage,
|
|
21
|
+
});
|
|
22
|
+
return new Error(classifyCode(ce, resourceDescription));
|
|
23
|
+
}
|
|
24
|
+
function classifyCode(ce, resourceDescription) {
|
|
25
|
+
switch (ce.code) {
|
|
26
|
+
case Code.NotFound:
|
|
27
|
+
return `${resourceDescription} not found. Verify the org and slug are correct.`;
|
|
28
|
+
case Code.PermissionDenied:
|
|
29
|
+
return `Permission denied for ${resourceDescription}. Check your API key permissions.`;
|
|
30
|
+
case Code.Unauthenticated:
|
|
31
|
+
return "Authentication failed. Check your API key.";
|
|
32
|
+
case Code.Unavailable:
|
|
33
|
+
return "Stigmer server is unavailable. Ensure it is running and reachable.";
|
|
34
|
+
case Code.DeadlineExceeded:
|
|
35
|
+
return "Request timed out contacting stigmer-server.";
|
|
36
|
+
case Code.InvalidArgument:
|
|
37
|
+
return ce.rawMessage;
|
|
38
|
+
default:
|
|
39
|
+
return `unexpected error: ${ce.rawMessage}`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=rpcerr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcerr.js","sourceRoot":"","sources":["../../src/domains/rpcerr.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,6EAA6E;AAC7E,sDAAsD;AAEtD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAY,EAAE,mBAA2B;IAChE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;QAC1B,QAAQ,EAAE,mBAAmB;QAC7B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACnB,YAAY,EAAE,EAAE,CAAC,UAAU;KAC5B,CAAC,CAAC;IAEH,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,EAAgB,EAAE,mBAA2B;IACjE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,QAAQ;YAChB,OAAO,GAAG,mBAAmB,kDAAkD,CAAC;QAClF,KAAK,IAAI,CAAC,gBAAgB;YACxB,OAAO,yBAAyB,mBAAmB,mCAAmC,CAAC;QACzF,KAAK,IAAI,CAAC,eAAe;YACvB,OAAO,4CAA4C,CAAC;QACtD,KAAK,IAAI,CAAC,WAAW;YACnB,OAAO,oEAAoE,CAAC;QAC9E,KAAK,IAAI,CAAC,gBAAgB;YACxB,OAAO,8CAA8C,CAAC;QACxD,KAAK,IAAI,CAAC,eAAe;YACvB,OAAO,EAAE,CAAC,UAAU,CAAC;QACvB;YACE,OAAO,qBAAqB,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type BackendTarget } from "../client.js";
|
|
3
|
+
/** Register the search tool; returns the registered tool names. */
|
|
4
|
+
export declare function registerSearchTools(server: McpServer, target: BackendTarget): string[];
|
|
5
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/domains/search/tools.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AA2B5E,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CA2CtF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// The "search" MCP tool, backed by SearchService.search.
|
|
2
|
+
// Go parity: mcp-server/internal/domains/search/tools.go.
|
|
3
|
+
//
|
|
4
|
+
// One tool covers listing, full-text search, and cross-kind discovery (replacing
|
|
5
|
+
// per-kind list_* tools); the combination of parameters selects the behavior.
|
|
6
|
+
// Each result entry is enriched with a resource_uri that clients can hand
|
|
7
|
+
// straight to resources/read, bridging discovery to read.
|
|
8
|
+
import { toJson } from "@bufbuild/protobuf";
|
|
9
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
10
|
+
import { SearchResponseSchema, } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
|
|
11
|
+
import { SearchService } from "@stigmer/protos/ai/stigmer/search/v1/query_pb";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { resolveToken, withClient } from "../client.js";
|
|
14
|
+
import { toProtoJson } from "../marshal.js";
|
|
15
|
+
import { buildResourceURI } from "../resourceuri.js";
|
|
16
|
+
import { rpcError } from "../rpcerr.js";
|
|
17
|
+
import { textOrError } from "../toolresult.js";
|
|
18
|
+
/**
|
|
19
|
+
* The searchable kinds and their proto enum values. This is deliberately the
|
|
20
|
+
* four searchable kinds (not every ApiResourceKind), mirroring the Go server's
|
|
21
|
+
* `knownKinds` map and its validation surface.
|
|
22
|
+
*/
|
|
23
|
+
const knownKinds = {
|
|
24
|
+
agent: ApiResourceKind.agent,
|
|
25
|
+
skill: ApiResourceKind.skill,
|
|
26
|
+
mcp_server: ApiResourceKind.mcp_server,
|
|
27
|
+
workflow: ApiResourceKind.workflow,
|
|
28
|
+
};
|
|
29
|
+
/** Register the search tool; returns the registered tool names. */
|
|
30
|
+
export function registerSearchTools(server, target) {
|
|
31
|
+
server.registerTool("search", {
|
|
32
|
+
description: "Search and list Stigmer resources (agents, skills, MCP servers, workflows). " +
|
|
33
|
+
"Set 'kinds' to filter by resource type. Set 'query' for full-text search. " +
|
|
34
|
+
"Set 'org' to scope to an organization. Omit 'query' to list all accessible resources.",
|
|
35
|
+
inputSchema: {
|
|
36
|
+
kinds: z
|
|
37
|
+
.array(z.string())
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Resource kinds to search. Valid: agent, skill, mcp_server, workflow. Empty searches all."),
|
|
40
|
+
query: z
|
|
41
|
+
.string()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe("Full-text search query. Empty lists all accessible resources."),
|
|
44
|
+
org: z
|
|
45
|
+
.string()
|
|
46
|
+
.optional()
|
|
47
|
+
.describe("Organization slug to scope the search. Empty searches all accessible orgs."),
|
|
48
|
+
exclude_public: z
|
|
49
|
+
.boolean()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Exclude public/platform resources from results."),
|
|
52
|
+
page_size: z.number().int().optional().describe("Results per page (default 20, max 100)."),
|
|
53
|
+
page_num: z.number().int().optional().describe("Page number (1-indexed, default 1)."),
|
|
54
|
+
},
|
|
55
|
+
}, (args, extra) => textOrError(() => search(target.serverAddress, resolveToken(extra, target.apiKey), {
|
|
56
|
+
kinds: args.kinds,
|
|
57
|
+
query: args.query,
|
|
58
|
+
org: args.org,
|
|
59
|
+
excludePublic: args.exclude_public,
|
|
60
|
+
pageSize: args.page_size,
|
|
61
|
+
pageNum: args.page_num,
|
|
62
|
+
})));
|
|
63
|
+
return ["search"];
|
|
64
|
+
}
|
|
65
|
+
/** Run the search RPC and return the enriched protojson result. */
|
|
66
|
+
async function search(serverAddress, token, args) {
|
|
67
|
+
const kinds = parseKinds(args.kinds);
|
|
68
|
+
return withClient(SearchService, serverAddress, token, async (client, callOptions) => {
|
|
69
|
+
const req = {
|
|
70
|
+
kinds,
|
|
71
|
+
query: args.query ?? "",
|
|
72
|
+
org: args.org ?? "",
|
|
73
|
+
excludePublic: args.excludePublic ?? false,
|
|
74
|
+
};
|
|
75
|
+
// Attach pagination only when explicitly requested, letting the server apply
|
|
76
|
+
// its own defaults otherwise (Go does the same).
|
|
77
|
+
if ((args.pageSize ?? 0) > 0 || (args.pageNum ?? 0) > 0) {
|
|
78
|
+
req.page = { size: args.pageSize ?? 0, num: args.pageNum ?? 0 };
|
|
79
|
+
}
|
|
80
|
+
let resp;
|
|
81
|
+
try {
|
|
82
|
+
resp = await client.search(req, callOptions);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
throw rpcError(err, args.org ? `search results in org "${args.org}"` : "search results");
|
|
86
|
+
}
|
|
87
|
+
return enrichSearchResponse(resp);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Convert user-supplied kind strings to proto enum values, rejecting unknowns. */
|
|
91
|
+
function parseKinds(raw) {
|
|
92
|
+
if (!raw || raw.length === 0) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
return raw.map((s) => {
|
|
96
|
+
const kind = knownKinds[s];
|
|
97
|
+
if (kind === undefined) {
|
|
98
|
+
throw new Error(`unknown resource kind "${s}"; valid kinds: agent, skill, mcp_server, workflow`);
|
|
99
|
+
}
|
|
100
|
+
return kind;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Serialize the response and inject a resource_uri into each entry whose kind
|
|
105
|
+
* has a registered resource template. Empty responses short-circuit to the plain
|
|
106
|
+
* marshal to avoid the walk.
|
|
107
|
+
*/
|
|
108
|
+
function enrichSearchResponse(resp) {
|
|
109
|
+
if (resp.entries.length === 0) {
|
|
110
|
+
return toProtoJson(SearchResponseSchema, resp);
|
|
111
|
+
}
|
|
112
|
+
const data = toJson(SearchResponseSchema, resp, { useProtoFieldName: true });
|
|
113
|
+
const entries = Array.isArray(data.entries)
|
|
114
|
+
? data.entries
|
|
115
|
+
: [];
|
|
116
|
+
for (let i = 0; i < entries.length && i < resp.entries.length; i++) {
|
|
117
|
+
const r = resp.entries[i];
|
|
118
|
+
const uri = buildResourceURI(ApiResourceKind[r.kind] ?? "", r.org, r.slug);
|
|
119
|
+
if (uri !== "") {
|
|
120
|
+
entries[i].resource_uri = uri;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return JSON.stringify(data, null, 2);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/domains/search/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete a skill and all its versions by org and slug, returning the deleted
|
|
3
|
+
* skill as protojson.
|
|
4
|
+
*/
|
|
5
|
+
export declare function deleteSkill(serverAddress: string, token: string, org: string, slug: string): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/domains/skills/delete.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
|