@stigmer/mcp-server 3.5.3 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/mcp-server-stigmer.js +6 -4
- package/config.d.ts +5 -1
- package/config.d.ts.map +1 -1
- package/config.js +2 -2
- package/config.js.map +1 -1
- package/domains/channels/calls.d.ts +15 -0
- package/domains/channels/calls.d.ts.map +1 -0
- package/domains/channels/calls.js +54 -0
- package/domains/channels/calls.js.map +1 -0
- package/domains/channels/errors.d.ts +21 -0
- package/domains/channels/errors.d.ts.map +1 -0
- package/domains/channels/errors.js +77 -0
- package/domains/channels/errors.js.map +1 -0
- package/domains/channels/tools.d.ts +5 -0
- package/domains/channels/tools.d.ts.map +1 -0
- package/domains/channels/tools.js +90 -0
- package/domains/channels/tools.js.map +1 -0
- package/domains/conversation/calls.d.ts +9 -0
- package/domains/conversation/calls.d.ts.map +1 -0
- package/domains/conversation/calls.js +30 -0
- package/domains/conversation/calls.js.map +1 -0
- package/domains/conversation/errors.d.ts +19 -0
- package/domains/conversation/errors.d.ts.map +1 -0
- package/domains/conversation/errors.js +73 -0
- package/domains/conversation/errors.js.map +1 -0
- package/domains/conversation/tools.d.ts +13 -0
- package/domains/conversation/tools.d.ts.map +1 -0
- package/domains/conversation/tools.js +69 -0
- package/domains/conversation/tools.js.map +1 -0
- package/gen/mcpserver.js +2 -2
- package/gen/mcpserver.js.map +1 -1
- package/gen/workflow.d.ts +156 -63
- package/gen/workflow.d.ts.map +1 -1
- package/gen/workflow.js +98 -46
- package/gen/workflow.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +3 -3
- package/server.d.ts +54 -9
- package/server.d.ts.map +1 -1
- package/server.js +89 -8
- package/server.js.map +1 -1
- package/src/config.ts +9 -3
- package/src/domains/channels/calls.ts +86 -0
- package/src/domains/channels/channels.integration.test.ts +272 -0
- package/src/domains/channels/errors.ts +94 -0
- package/src/domains/channels/tools.ts +116 -0
- package/src/domains/conversation/calls.ts +41 -0
- package/src/domains/conversation/conversation.integration.test.ts +233 -0
- package/src/domains/conversation/errors.ts +88 -0
- package/src/domains/conversation/tools.ts +87 -0
- package/src/gen/mcpserver.ts +2 -2
- package/src/gen/workflow.ts +99 -40
- package/src/http.integration.test.ts +56 -2
- package/src/index.ts +11 -1
- package/src/server.ts +95 -12
package/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAoBzD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAA2C,CAAC;AAWvE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAK7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAKpE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAKrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAQzE;AA8CD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtF;AAED,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;AAEzE,uFAAuF;AACvF,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,2DAA2D;AAC3D,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC,+DAA+D;AAC/D,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,CAQ7E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,kBAAkB,EAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtG;AAuGD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAIzE;AAwGD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAWtD"}
|
package/server.js
CHANGED
|
@@ -17,6 +17,8 @@ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
|
17
17
|
import { registerAgentExecutionTools } from "./domains/agentexecutions/tools.js";
|
|
18
18
|
import { registerAgentResources } from "./domains/agents/resources.js";
|
|
19
19
|
import { registerAgentTools } from "./domains/agents/tools.js";
|
|
20
|
+
import { registerChannelTools } from "./domains/channels/tools.js";
|
|
21
|
+
import { registerConversationTools } from "./domains/conversation/tools.js";
|
|
20
22
|
import { registerDatastoreResources } from "./domains/datastores/resources.js";
|
|
21
23
|
import { registerDatastoreTools } from "./domains/datastores/tools.js";
|
|
22
24
|
import { registerEnvironmentResources } from "./domains/environments/resources.js";
|
|
@@ -71,6 +73,44 @@ export function createRecordsServer(target) {
|
|
|
71
73
|
log.info("tools registered (records roster)", { count: tools.length, tools });
|
|
72
74
|
return server;
|
|
73
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Build a channels-only MCP server: send_channel_message with the
|
|
78
|
+
* agent-facing argument surface, and nothing else (proactive-messaging
|
|
79
|
+
* DD-006 D8 — the records-roster pattern). This is the roster the
|
|
80
|
+
* runner-synthesized channel attachment connects to; the structural
|
|
81
|
+
* guarantee mirrors the records roster's. Served on the /channels HTTP
|
|
82
|
+
* route and as the stdio roster when STIGMER_MCP_ROSTER=channels.
|
|
83
|
+
*/
|
|
84
|
+
export function createChannelsServer(target) {
|
|
85
|
+
const server = new McpServer({ name: "mcp-server-stigmer-channels", version: SERVER_VERSION });
|
|
86
|
+
const tools = registerChannelTools(server, target);
|
|
87
|
+
log.info("tools registered (channels roster)", { count: tools.length, tools });
|
|
88
|
+
return server;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build a conversation-only MCP server: escalate_to_human with the
|
|
92
|
+
* agent-facing argument surface, and nothing else (channel-conversations
|
|
93
|
+
* DD-008 D-c / A14 — the channels-roster pattern). This is the roster
|
|
94
|
+
* the runner-synthesized conversation attachment connects to; the
|
|
95
|
+
* structural guarantee mirrors the channels roster's.
|
|
96
|
+
*
|
|
97
|
+
* HTTP-only by design — served on the /conversation route, with NO
|
|
98
|
+
* stdio roster value: escalate is cloud-only (OSS refuses
|
|
99
|
+
* FAILED_PRECONDITION) AND session-token-only (the reach derives
|
|
100
|
+
* identity from a session-scoped sandbox credential, which only the
|
|
101
|
+
* bridge's per-request Bearer can carry — a stdio child's startup API
|
|
102
|
+
* key never could), so a stdio shape would be a tool that can only
|
|
103
|
+
* fail. Honest absence instead.
|
|
104
|
+
*/
|
|
105
|
+
export function createConversationServer(target) {
|
|
106
|
+
const server = new McpServer({
|
|
107
|
+
name: "mcp-server-stigmer-conversation",
|
|
108
|
+
version: SERVER_VERSION,
|
|
109
|
+
});
|
|
110
|
+
const tools = registerConversationTools(server, target);
|
|
111
|
+
log.info("tools registered (conversation roster)", { count: tools.length, tools });
|
|
112
|
+
return server;
|
|
113
|
+
}
|
|
74
114
|
/**
|
|
75
115
|
* Wire up every domain's tools. Each domain returns the names it registered so
|
|
76
116
|
* the startup log's count and roster cannot drift from what is actually wired,
|
|
@@ -136,14 +176,42 @@ export async function serveStdio(server, signal) {
|
|
|
136
176
|
server.server.onerror = (err) => log.error("mcp protocol error", { error: err.message });
|
|
137
177
|
});
|
|
138
178
|
}
|
|
179
|
+
/** HTTP route serving the full roster: the bare origin every published config uses. */
|
|
180
|
+
export const FULL_ROUTE = "/";
|
|
139
181
|
/** HTTP route serving the records-only roster (T05 R1). */
|
|
140
182
|
export const RECORDS_ROUTE = "/records";
|
|
183
|
+
/** HTTP route serving the channels-only roster (DD-006 D8). */
|
|
184
|
+
export const CHANNELS_ROUTE = "/channels";
|
|
185
|
+
/** HTTP route serving the conversation-only roster (channel-conversations A14). */
|
|
186
|
+
export const CONVERSATION_ROUTE = "/conversation";
|
|
141
187
|
/**
|
|
142
|
-
* The standard HTTP route dispatch: the
|
|
143
|
-
* {@link RECORDS_ROUTE}, the
|
|
188
|
+
* The standard HTTP route dispatch: the full roster on {@link FULL_ROUTE},
|
|
189
|
+
* the records-only roster on {@link RECORDS_ROUTE}, the channels-only
|
|
190
|
+
* roster on {@link CHANNELS_ROUTE}, the conversation-only roster on
|
|
191
|
+
* {@link CONVERSATION_ROUTE} — and NOTHING anywhere else.
|
|
192
|
+
*
|
|
193
|
+
* The closed route table is load-bearing, not tidiness. This dispatch
|
|
194
|
+
* once fell through to the full roster for any unrecognized path, and a
|
|
195
|
+
* production bridge predating /channels answered the runner's channel
|
|
196
|
+
* attachment with the full roster: the agent got a server named
|
|
197
|
+
* stigmer-channels with every management tool except the one send tool
|
|
198
|
+
* it existed for (the 2026-08-05 stale-pin incident). An unknown route
|
|
199
|
+
* is a deployment mismatch by definition — refuse it loudly so the
|
|
200
|
+
* mismatch is visible at connect time, instead of serving tools the
|
|
201
|
+
* caller was never meant to see.
|
|
144
202
|
*/
|
|
145
203
|
export function routedServerFactory(target) {
|
|
146
|
-
return (path) =>
|
|
204
|
+
return (path) => {
|
|
205
|
+
if (path === FULL_ROUTE)
|
|
206
|
+
return createServer(target);
|
|
207
|
+
if (path === RECORDS_ROUTE)
|
|
208
|
+
return createRecordsServer(target);
|
|
209
|
+
if (path === CHANNELS_ROUTE)
|
|
210
|
+
return createChannelsServer(target);
|
|
211
|
+
if (path === CONVERSATION_ROUTE)
|
|
212
|
+
return createConversationServer(target);
|
|
213
|
+
return undefined;
|
|
214
|
+
};
|
|
147
215
|
}
|
|
148
216
|
/**
|
|
149
217
|
* Serve over Streamable HTTP until `signal` aborts.
|
|
@@ -278,6 +346,15 @@ async function routeRequest(req, res, sessions, makeServer, cfg) {
|
|
|
278
346
|
res.end("Bad Request: an initialize request is required to open a session");
|
|
279
347
|
return;
|
|
280
348
|
}
|
|
349
|
+
// Route recognition happens exactly where the roster choice happens.
|
|
350
|
+
// An unknown route gets a 404, never a default roster — see
|
|
351
|
+
// routedServerFactory for the incident this prevents.
|
|
352
|
+
const server = makeServer(path);
|
|
353
|
+
if (server === undefined) {
|
|
354
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
355
|
+
res.end(`unknown MCP route: ${path}`);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
281
358
|
const transport = new StreamableHTTPServerTransport({
|
|
282
359
|
sessionIdGenerator: () => randomUUID(),
|
|
283
360
|
onsessioninitialized: (id) => {
|
|
@@ -291,16 +368,20 @@ async function routeRequest(req, res, sessions, makeServer, cfg) {
|
|
|
291
368
|
if (transport.sessionId !== undefined)
|
|
292
369
|
sessions.delete(transport.sessionId);
|
|
293
370
|
};
|
|
294
|
-
await
|
|
371
|
+
await server.connect(transport);
|
|
295
372
|
await transport.handleRequest(req, res, body);
|
|
296
373
|
}
|
|
297
374
|
/**
|
|
298
|
-
* The stdio server for the configured roster: the records-only
|
|
299
|
-
* when STIGMER_MCP_ROSTER
|
|
300
|
-
*
|
|
375
|
+
* The stdio server for the configured roster: the records-only or
|
|
376
|
+
* channels-only roster when STIGMER_MCP_ROSTER names one (what the OSS
|
|
377
|
+
* runner-synthesized attachments spawn), the full roster otherwise.
|
|
301
378
|
*/
|
|
302
379
|
export function stdioServer(target, cfg) {
|
|
303
|
-
|
|
380
|
+
if (cfg.roster === "records")
|
|
381
|
+
return createRecordsServer(target);
|
|
382
|
+
if (cfg.roster === "channels")
|
|
383
|
+
return createChannelsServer(target);
|
|
384
|
+
return createServer(target);
|
|
304
385
|
}
|
|
305
386
|
/** Return a single header value, collapsing the array form Node may produce. */
|
|
306
387
|
function headerValue(req, name) {
|
package/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/src/config.ts
CHANGED
|
@@ -19,8 +19,12 @@ export type Transport = "stdio" | "http" | "both";
|
|
|
19
19
|
* argument surface. This is what the runner-synthesized datastore
|
|
20
20
|
* attachment spawns over stdio (T05 R1); over HTTP the same roster is
|
|
21
21
|
* served on the /records route regardless of this setting.
|
|
22
|
+
* - "channels": only send_channel_message (proactive-messaging DD-006
|
|
23
|
+
* D8) with the agent-facing argument surface. This is what the
|
|
24
|
+
* runner-synthesized channel attachment spawns over stdio; over HTTP
|
|
25
|
+
* the same roster is served on the /channels route.
|
|
22
26
|
*/
|
|
23
|
-
export type Roster = "full" | "records";
|
|
27
|
+
export type Roster = "full" | "records" | "channels";
|
|
24
28
|
|
|
25
29
|
/**
|
|
26
30
|
* OAuth 2.0 Protected Resource Metadata (RFC 9728) discovery settings.
|
|
@@ -58,7 +62,7 @@ export interface Config {
|
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
const VALID_TRANSPORTS: readonly string[] = ["stdio", "http", "both"];
|
|
61
|
-
const VALID_ROSTERS: readonly string[] = ["full", "records"];
|
|
65
|
+
const VALID_ROSTERS: readonly string[] = ["full", "records", "channels"];
|
|
62
66
|
const VALID_LOG_FORMATS: readonly string[] = ["text", "json"];
|
|
63
67
|
const VALID_LOG_LEVELS: readonly string[] = ["debug", "info", "warn", "error"];
|
|
64
68
|
|
|
@@ -97,7 +101,9 @@ export function validateConfig(cfg: Config): void {
|
|
|
97
101
|
}
|
|
98
102
|
|
|
99
103
|
if (!VALID_ROSTERS.includes(cfg.roster)) {
|
|
100
|
-
throw new Error(
|
|
104
|
+
throw new Error(
|
|
105
|
+
`invalid STIGMER_MCP_ROSTER "${cfg.roster}": must be full, records, or channels`,
|
|
106
|
+
);
|
|
101
107
|
}
|
|
102
108
|
|
|
103
109
|
if (cfg.stigmerServerAddress === "") {
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Channel-messaging RPC invocations for the send_channel_message tool —
|
|
2
|
+
// a 1:1 projection of ChannelMessageCommandController.sendMessage
|
|
3
|
+
// (proactive-messaging DD-006 D5: the tool layer adds no semantics;
|
|
4
|
+
// reach, recipient policy, caps, and the template pre-check all live in
|
|
5
|
+
// the cloud handler, and the OSS edition refuses with the documented
|
|
6
|
+
// FAILED_PRECONDITION).
|
|
7
|
+
//
|
|
8
|
+
// The records-domain calls.ts shape: build request, call, marshal. The
|
|
9
|
+
// typed outcome (accepted/queued/refused + detail) rides back VERBATIM
|
|
10
|
+
// as proto JSON — a refusal is an ANSWER the model adapts to (DD-002
|
|
11
|
+
// D4), never a tool error.
|
|
12
|
+
|
|
13
|
+
import { create } from "@bufbuild/protobuf";
|
|
14
|
+
import {
|
|
15
|
+
ChannelMessageCommandController,
|
|
16
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_command_pb";
|
|
17
|
+
import {
|
|
18
|
+
ChannelOutboundPayloadSchema,
|
|
19
|
+
SendChannelMessageInputSchema,
|
|
20
|
+
SendChannelMessageOutputSchema,
|
|
21
|
+
TemplatePayloadSchema,
|
|
22
|
+
TextPayloadSchema,
|
|
23
|
+
type ChannelOutboundPayload,
|
|
24
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
25
|
+
import { withClient } from "../client.js";
|
|
26
|
+
import { toProtoJson } from "../marshal.js";
|
|
27
|
+
|
|
28
|
+
/** The template arm as the model supplies it (mirrors TemplatePayload). */
|
|
29
|
+
export interface TemplateArg {
|
|
30
|
+
name: string;
|
|
31
|
+
language?: string;
|
|
32
|
+
parameters?: Record<string, string>;
|
|
33
|
+
header_image_link?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface SendArgs {
|
|
37
|
+
recipient: string;
|
|
38
|
+
text?: string;
|
|
39
|
+
template?: TemplateArg;
|
|
40
|
+
channel?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function sendChannelMessage(
|
|
44
|
+
serverAddress: string,
|
|
45
|
+
token: string,
|
|
46
|
+
args: SendArgs,
|
|
47
|
+
): Promise<string> {
|
|
48
|
+
const request = create(SendChannelMessageInputSchema, {
|
|
49
|
+
channel: args.channel ?? "",
|
|
50
|
+
// org is deliberately never sent: a session-bound caller's org is
|
|
51
|
+
// server-derived, and an explicit value is rejected (the records
|
|
52
|
+
// T05 R3 rule applied to messaging).
|
|
53
|
+
recipient: args.recipient,
|
|
54
|
+
payload: buildPayload(args),
|
|
55
|
+
});
|
|
56
|
+
return withClient(ChannelMessageCommandController, serverAddress, token, async (client, opts) =>
|
|
57
|
+
toProtoJson(SendChannelMessageOutputSchema, await client.sendMessage(request, opts)),
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The payload oneof from the tool's mutually exclusive arguments. The
|
|
63
|
+
* tool handler enforces exactly-one before calling; the server's
|
|
64
|
+
* required-oneof validation is the backstop.
|
|
65
|
+
*/
|
|
66
|
+
function buildPayload(args: SendArgs): ChannelOutboundPayload {
|
|
67
|
+
if (args.template !== undefined) {
|
|
68
|
+
return create(ChannelOutboundPayloadSchema, {
|
|
69
|
+
kind: {
|
|
70
|
+
case: "template",
|
|
71
|
+
value: create(TemplatePayloadSchema, {
|
|
72
|
+
name: args.template.name,
|
|
73
|
+
language: args.template.language ?? "",
|
|
74
|
+
parameters: args.template.parameters ?? {},
|
|
75
|
+
headerImageLink: args.template.header_image_link ?? "",
|
|
76
|
+
}),
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return create(ChannelOutboundPayloadSchema, {
|
|
81
|
+
kind: {
|
|
82
|
+
case: "text",
|
|
83
|
+
value: create(TextPayloadSchema, { body: args.text ?? "" }),
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// In-process integration test for the channels roster (the
|
|
2
|
+
// records.integration.test.ts pattern: real Connect backend with a
|
|
3
|
+
// stubbed messaging service, real MCP client over an in-memory
|
|
4
|
+
// transport).
|
|
5
|
+
//
|
|
6
|
+
// Verifies the DD-006 D5/D8 contract surface:
|
|
7
|
+
// - the channels-only roster is exactly send_channel_message with NO
|
|
8
|
+
// org argument (agent audience);
|
|
9
|
+
// - argument → request mapping mirrors the ChannelOutboundPayload
|
|
10
|
+
// oneof (text | template, exactly one, checked before any RPC);
|
|
11
|
+
// - typed outcomes (accepted/queued/refused) are ANSWERS — success
|
|
12
|
+
// results the model adapts to, never isError;
|
|
13
|
+
// - the channels-own error mapper passes domain messages verbatim as
|
|
14
|
+
// {error, code, reason} JSON; transport errors delegate to the
|
|
15
|
+
// shared classifier.
|
|
16
|
+
|
|
17
|
+
import { create } from "@bufbuild/protobuf";
|
|
18
|
+
import { Code, ConnectError, type ConnectRouter } from "@connectrpc/connect";
|
|
19
|
+
import { connectNodeAdapter } from "@connectrpc/connect-node";
|
|
20
|
+
import {
|
|
21
|
+
createServer as createHttp2Server,
|
|
22
|
+
type Http2Server,
|
|
23
|
+
type ServerHttp2Session,
|
|
24
|
+
} from "node:http2";
|
|
25
|
+
import type { AddressInfo } from "node:net";
|
|
26
|
+
|
|
27
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
28
|
+
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
29
|
+
import { ChannelMessageCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_command_pb";
|
|
30
|
+
import {
|
|
31
|
+
ChannelSendOutcome,
|
|
32
|
+
SendChannelMessageOutputSchema,
|
|
33
|
+
type SendChannelMessageInput,
|
|
34
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
35
|
+
import { ErrorInfoSchema } from "@stigmer/protos/google/rpc/error_details_pb";
|
|
36
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
37
|
+
|
|
38
|
+
import { configureLogger } from "../../logger";
|
|
39
|
+
import { CHANNELS_ROUTE, createChannelsServer } from "../../server";
|
|
40
|
+
|
|
41
|
+
configureLogger({ level: "error", format: "text" });
|
|
42
|
+
|
|
43
|
+
let backend: Http2Server;
|
|
44
|
+
let client: Client;
|
|
45
|
+
const openSessions = new Set<ServerHttp2Session>();
|
|
46
|
+
|
|
47
|
+
/** The next stubbed outcome; tests set this. */
|
|
48
|
+
let sendResponse: () => ReturnType<typeof create<typeof SendChannelMessageOutputSchema>>;
|
|
49
|
+
|
|
50
|
+
/** Requests the stub captured (object property for closure narrowing). */
|
|
51
|
+
const captured: { send?: SendChannelMessageInput } = {};
|
|
52
|
+
|
|
53
|
+
interface ToolResult {
|
|
54
|
+
content: Array<{ type: string; text?: string }>;
|
|
55
|
+
isError?: boolean;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function send(args: Record<string, unknown>): Promise<ToolResult> {
|
|
59
|
+
return (await client.callTool({
|
|
60
|
+
name: "send_channel_message",
|
|
61
|
+
arguments: args,
|
|
62
|
+
})) as ToolResult;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
beforeAll(async () => {
|
|
66
|
+
const routes = (router: ConnectRouter) => {
|
|
67
|
+
router.service(ChannelMessageCommandController, {
|
|
68
|
+
sendMessage: (req) => {
|
|
69
|
+
captured.send = req;
|
|
70
|
+
return sendResponse();
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
backend = createHttp2Server(connectNodeAdapter({ routes }));
|
|
75
|
+
backend.on("session", (session) => {
|
|
76
|
+
openSessions.add(session);
|
|
77
|
+
session.on("close", () => openSessions.delete(session));
|
|
78
|
+
});
|
|
79
|
+
await new Promise<void>((resolve) => backend.listen(0, "127.0.0.1", resolve));
|
|
80
|
+
const port = (backend.address() as AddressInfo).port;
|
|
81
|
+
|
|
82
|
+
const mcp = createChannelsServer({ serverAddress: `127.0.0.1:${port}`, apiKey: "" });
|
|
83
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
84
|
+
client = new Client({ name: "channels-integration", version: "test" });
|
|
85
|
+
await Promise.all([mcp.connect(serverTransport), client.connect(clientTransport)]);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
afterAll(async () => {
|
|
89
|
+
await client?.close();
|
|
90
|
+
for (const session of openSessions) session.destroy();
|
|
91
|
+
await new Promise<void>((resolve) => backend.close(() => resolve()));
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe("channels roster (DD-006 D8)", () => {
|
|
95
|
+
it("exposes exactly send_channel_message with no org argument", async () => {
|
|
96
|
+
const { tools } = await client.listTools();
|
|
97
|
+
expect(tools.map((t) => t.name)).toEqual(["send_channel_message"]);
|
|
98
|
+
|
|
99
|
+
// The agent audience gets no org argument — a session-bound
|
|
100
|
+
// caller's org is server-derived, and offering the argument would
|
|
101
|
+
// only invite INVALID_ARGUMENT rejections (the records T05 R3 rule).
|
|
102
|
+
const properties = (tools[0].inputSchema as { properties?: Record<string, unknown> })
|
|
103
|
+
.properties;
|
|
104
|
+
expect(Object.keys(properties ?? {}).sort()).toEqual([
|
|
105
|
+
"channel",
|
|
106
|
+
"recipient",
|
|
107
|
+
"template",
|
|
108
|
+
"text",
|
|
109
|
+
]);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("pins the cross-repo attachment strings (the TOOL_CALL_LIMIT precedent)", () => {
|
|
113
|
+
// The runner's channel-attachment.ts builds these independently
|
|
114
|
+
// (shared/channel-attachment.ts and its mirror guard); a drift here
|
|
115
|
+
// strands every synthesized attachment on a 404 or a full roster.
|
|
116
|
+
expect(CHANNELS_ROUTE).toBe("/channels");
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
describe("argument → request mapping (the ChannelOutboundPayload oneof)", () => {
|
|
121
|
+
it("maps a text send; org never travels, channel defaults empty", async () => {
|
|
122
|
+
sendResponse = () =>
|
|
123
|
+
create(SendChannelMessageOutputSchema, {
|
|
124
|
+
outcome: ChannelSendOutcome.accepted,
|
|
125
|
+
outboundMessageId: "chom_1",
|
|
126
|
+
providerMessageId: "wamid.abc",
|
|
127
|
+
});
|
|
128
|
+
captured.send = undefined;
|
|
129
|
+
|
|
130
|
+
const result = await send({ recipient: "919000000001", text: "see you at 6" });
|
|
131
|
+
|
|
132
|
+
expect(result.isError).toBeFalsy();
|
|
133
|
+
const req = captured.send as SendChannelMessageInput | undefined;
|
|
134
|
+
expect(req?.recipient).toBe("919000000001");
|
|
135
|
+
expect(req?.org).toBe(""); // agent audience: org never travels
|
|
136
|
+
expect(req?.channel).toBe("");
|
|
137
|
+
expect(req?.payload?.kind.case).toBe("text");
|
|
138
|
+
expect(req?.payload?.kind.case === "text" && req.payload.kind.value.body).toBe("see you at 6");
|
|
139
|
+
|
|
140
|
+
// toProtoJson emits proto (snake_case) field names — the Go parity rule.
|
|
141
|
+
const body = JSON.parse(result.content[0]?.text ?? "{}") as Record<string, string>;
|
|
142
|
+
expect(body.outcome).toBe("accepted");
|
|
143
|
+
expect(body.provider_message_id).toBe("wamid.abc");
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it("maps a template send with language, parameters, header link, and a named channel", async () => {
|
|
147
|
+
sendResponse = () =>
|
|
148
|
+
create(SendChannelMessageOutputSchema, { outcome: ChannelSendOutcome.accepted });
|
|
149
|
+
captured.send = undefined;
|
|
150
|
+
|
|
151
|
+
const result = await send({
|
|
152
|
+
recipient: "919000000001",
|
|
153
|
+
channel: "isc-whatsapp",
|
|
154
|
+
template: {
|
|
155
|
+
name: "invoice_qr",
|
|
156
|
+
language: "en",
|
|
157
|
+
parameters: { member_name: "Asha", amount: "1500" },
|
|
158
|
+
header_image_link: "https://isc.example/qr.png",
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
expect(result.isError).toBeFalsy();
|
|
163
|
+
const req = captured.send as SendChannelMessageInput | undefined;
|
|
164
|
+
expect(req?.channel).toBe("isc-whatsapp");
|
|
165
|
+
expect(req?.payload?.kind.case).toBe("template");
|
|
166
|
+
if (req?.payload?.kind.case === "template") {
|
|
167
|
+
expect(req.payload.kind.value.name).toBe("invoice_qr");
|
|
168
|
+
expect(req.payload.kind.value.language).toBe("en");
|
|
169
|
+
expect(req.payload.kind.value.parameters).toMatchObject({
|
|
170
|
+
member_name: "Asha",
|
|
171
|
+
amount: "1500",
|
|
172
|
+
});
|
|
173
|
+
expect(req.payload.kind.value.headerImageLink).toBe("https://isc.example/qr.png");
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it("refuses both/neither arms with corrective copy, before any RPC", async () => {
|
|
178
|
+
captured.send = undefined;
|
|
179
|
+
|
|
180
|
+
const both = await send({
|
|
181
|
+
recipient: "919000000001",
|
|
182
|
+
text: "hi",
|
|
183
|
+
template: { name: "fee_reminder" },
|
|
184
|
+
});
|
|
185
|
+
expect(both.isError).toBe(true);
|
|
186
|
+
expect(both.content[0]?.text).toContain("exactly one of text | template");
|
|
187
|
+
|
|
188
|
+
const neither = await send({ recipient: "919000000001" });
|
|
189
|
+
expect(neither.isError).toBe(true);
|
|
190
|
+
expect(neither.content[0]?.text).toContain("exactly one of text | template");
|
|
191
|
+
|
|
192
|
+
expect(captured.send).toBeUndefined();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe("typed outcomes are answers, not errors (DD-002 D4)", () => {
|
|
197
|
+
it("a refused outcome returns as a SUCCESS result carrying the detail", async () => {
|
|
198
|
+
sendResponse = () =>
|
|
199
|
+
create(SendChannelMessageOutputSchema, {
|
|
200
|
+
outcome: ChannelSendOutcome.refused,
|
|
201
|
+
outboundMessageId: "",
|
|
202
|
+
detail:
|
|
203
|
+
"recipient has not messaged this channel — proactive sends from a channel"
|
|
204
|
+
+ " conversation are limited to known senders",
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const result = await send({ recipient: "919000000002", text: "hello" });
|
|
208
|
+
|
|
209
|
+
expect(result.isError).toBeFalsy();
|
|
210
|
+
const body = JSON.parse(result.content[0]?.text ?? "{}") as Record<string, string>;
|
|
211
|
+
expect(body.outcome).toBe("refused");
|
|
212
|
+
expect(body.detail).toContain("known senders");
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
describe("channels error mapper", () => {
|
|
217
|
+
it("passes a reach denial through verbatim — never the shared rewrite", async () => {
|
|
218
|
+
sendResponse = () => {
|
|
219
|
+
throw new ConnectError(
|
|
220
|
+
"this agent has no proactive-messaging channel it can use",
|
|
221
|
+
Code.PermissionDenied,
|
|
222
|
+
);
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const result = await send({ recipient: "919000000001", text: "hello" });
|
|
226
|
+
|
|
227
|
+
expect(result.isError).toBe(true);
|
|
228
|
+
expect(JSON.parse(result.content[0]?.text ?? "{}")).toEqual({
|
|
229
|
+
error: "this agent has no proactive-messaging channel it can use",
|
|
230
|
+
code: "PERMISSION_DENIED",
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it("carries the ErrorInfo reason on operator-actionable preconditions (DD-005 D8)", async () => {
|
|
235
|
+
sendResponse = () => {
|
|
236
|
+
throw new ConnectError(
|
|
237
|
+
"proactive channel messaging requires Stigmer Cloud",
|
|
238
|
+
Code.FailedPrecondition,
|
|
239
|
+
undefined,
|
|
240
|
+
[
|
|
241
|
+
{
|
|
242
|
+
desc: ErrorInfoSchema,
|
|
243
|
+
value: create(ErrorInfoSchema, {
|
|
244
|
+
reason: "WHATSAPP_MANAGEMENT_SCOPE_MISSING",
|
|
245
|
+
domain: "stigmer.ai",
|
|
246
|
+
}),
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
);
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
const result = await send({ recipient: "919000000001", text: "hello" });
|
|
253
|
+
|
|
254
|
+
expect(result.isError).toBe(true);
|
|
255
|
+
const body = JSON.parse(result.content[0]?.text ?? "{}") as Record<string, string>;
|
|
256
|
+
expect(body.code).toBe("FAILED_PRECONDITION");
|
|
257
|
+
expect(body.reason).toBe("WHATSAPP_MANAGEMENT_SCOPE_MISSING");
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it("delegates transport codes to the shared classifier", async () => {
|
|
261
|
+
sendResponse = () => {
|
|
262
|
+
throw new ConnectError("upstream down", Code.Unavailable);
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
const result = await send({ recipient: "919000000001", text: "hello" });
|
|
266
|
+
|
|
267
|
+
expect(result.isError).toBe(true);
|
|
268
|
+
expect(result.content[0]?.text).toBe(
|
|
269
|
+
"Stigmer server is unavailable. Ensure it is running and reachable.",
|
|
270
|
+
);
|
|
271
|
+
});
|
|
272
|
+
});
|