@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.
Files changed (58) hide show
  1. package/cli/mcp-server-stigmer.js +6 -4
  2. package/config.d.ts +5 -1
  3. package/config.d.ts.map +1 -1
  4. package/config.js +2 -2
  5. package/config.js.map +1 -1
  6. package/domains/channels/calls.d.ts +15 -0
  7. package/domains/channels/calls.d.ts.map +1 -0
  8. package/domains/channels/calls.js +54 -0
  9. package/domains/channels/calls.js.map +1 -0
  10. package/domains/channels/errors.d.ts +21 -0
  11. package/domains/channels/errors.d.ts.map +1 -0
  12. package/domains/channels/errors.js +77 -0
  13. package/domains/channels/errors.js.map +1 -0
  14. package/domains/channels/tools.d.ts +5 -0
  15. package/domains/channels/tools.d.ts.map +1 -0
  16. package/domains/channels/tools.js +90 -0
  17. package/domains/channels/tools.js.map +1 -0
  18. package/domains/conversation/calls.d.ts +9 -0
  19. package/domains/conversation/calls.d.ts.map +1 -0
  20. package/domains/conversation/calls.js +30 -0
  21. package/domains/conversation/calls.js.map +1 -0
  22. package/domains/conversation/errors.d.ts +19 -0
  23. package/domains/conversation/errors.d.ts.map +1 -0
  24. package/domains/conversation/errors.js +73 -0
  25. package/domains/conversation/errors.js.map +1 -0
  26. package/domains/conversation/tools.d.ts +13 -0
  27. package/domains/conversation/tools.d.ts.map +1 -0
  28. package/domains/conversation/tools.js +69 -0
  29. package/domains/conversation/tools.js.map +1 -0
  30. package/gen/mcpserver.js +2 -2
  31. package/gen/mcpserver.js.map +1 -1
  32. package/gen/workflow.d.ts +156 -63
  33. package/gen/workflow.d.ts.map +1 -1
  34. package/gen/workflow.js +98 -46
  35. package/gen/workflow.js.map +1 -1
  36. package/index.d.ts +1 -1
  37. package/index.d.ts.map +1 -1
  38. package/index.js +1 -1
  39. package/index.js.map +1 -1
  40. package/package.json +3 -3
  41. package/server.d.ts +54 -9
  42. package/server.d.ts.map +1 -1
  43. package/server.js +89 -8
  44. package/server.js.map +1 -1
  45. package/src/config.ts +9 -3
  46. package/src/domains/channels/calls.ts +86 -0
  47. package/src/domains/channels/channels.integration.test.ts +272 -0
  48. package/src/domains/channels/errors.ts +94 -0
  49. package/src/domains/channels/tools.ts +116 -0
  50. package/src/domains/conversation/calls.ts +41 -0
  51. package/src/domains/conversation/conversation.integration.test.ts +233 -0
  52. package/src/domains/conversation/errors.ts +88 -0
  53. package/src/domains/conversation/tools.ts +87 -0
  54. package/src/gen/mcpserver.ts +2 -2
  55. package/src/gen/workflow.ts +99 -40
  56. package/src/http.integration.test.ts +56 -2
  57. package/src/index.ts +11 -1
  58. 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;AAI1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBzD;;;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;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;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;AAE7D,2DAA2D;AAC3D,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,CAE7E;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;AA6FD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAEzE;AAwGD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAWtD"}
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 records-only roster on
143
- * {@link RECORDS_ROUTE}, the full roster everywhere else.
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) => (path === RECORDS_ROUTE ? createRecordsServer(target) : createServer(target));
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 makeServer(path).connect(transport);
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 roster
299
- * when STIGMER_MCP_ROSTER=records (what the OSS runner-synthesized
300
- * datastore attachment spawns), the full roster otherwise.
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
- return cfg.roster === "records" ? createRecordsServer(target) : createServer(target);
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(`invalid STIGMER_MCP_ROSTER "${cfg.roster}": must be full or records`);
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
+ });