@codeforbreakfast/commy-mcp 0.24.2 → 0.24.3

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 (2) hide show
  1. package/package.json +1 -1
  2. package/server.js +71 -38
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeforbreakfast/commy-mcp",
3
- "version": "0.24.2",
3
+ "version": "0.24.3",
4
4
  "description": "commy MCP server — the inter-agent communication substrate, runnable on node via npx.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
package/server.js CHANGED
@@ -50429,7 +50429,7 @@ var runMain2 = runMain;
50429
50429
 
50430
50430
  // node_modules/.bun/@effect+platform-node@0.108.2+7b41a6254ced90d9/node_modules/@effect/platform-node/dist/esm/NodeRuntime.js
50431
50431
  var runMain3 = runMain2;
50432
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
50432
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
50433
50433
  import process3 from "node:process";
50434
50434
 
50435
50435
  // node_modules/.bun/zod@4.4.3/node_modules/zod/v4/core/core.js
@@ -55548,7 +55548,7 @@ function preprocess(fn2, schema) {
55548
55548
  // node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/external.js
55549
55549
  config2(en_default());
55550
55550
 
55551
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
55551
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
55552
55552
  var LATEST_PROTOCOL_VERSION = "2025-11-25";
55553
55553
  var SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, "2025-06-18", "2025-03-26", "2024-11-05", "2024-10-07"];
55554
55554
  var RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task";
@@ -56383,7 +56383,7 @@ class UrlElicitationRequiredError extends McpError {
56383
56383
  }
56384
56384
  }
56385
56385
 
56386
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
56386
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
56387
56387
  var STDIO_DEFAULT_MAX_BUFFER_SIZE = 10 * 1024 * 1024;
56388
56388
 
56389
56389
  class ReadBuffer {
@@ -56423,7 +56423,7 @@ function serializeMessage(message) {
56423
56423
  `;
56424
56424
  }
56425
56425
 
56426
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
56426
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
56427
56427
  class StdioServerTransport {
56428
56428
  constructor(_stdin = process3.stdin, _stdout = process3.stdout, options5) {
56429
56429
  this._stdin = _stdin;
@@ -56685,9 +56685,15 @@ var toMention = (directory) => MentionSpan.$match({
56685
56685
  UserSpan: ({ userId }) => exports_Effect.succeed(exports_Option.map(exports_Option.fromNullable(directory.byUserId(userId)), (identity6) => Mention.UserMention({ identity: identity6 })))
56686
56686
  });
56687
56687
  var renderedMentions = (rendered, directory) => exports_Effect.forEach(mentionSpans(rendered), toMention(directory)).pipe(exports_Effect.map(exports_Array.getSomes), exports_Effect.map(exports_Array.dedupeWith((a, b) => exports_Equal.equals(identityOf(a), identityOf(b)))));
56688
- var mentionsOfMessage = (renderedFor, message, directory) => mayMention(message.content) ? renderedFor(message.id).pipe(exports_Effect.flatMap(exports_Option.match({
56688
+ var mentionedUserIds = (rendered) => exports_Array.filterMap(mentionSpans(rendered), MentionSpan.$match({
56689
+ UserSpan: ({ userId }) => exports_Option.some(userId),
56690
+ GroupSpan: () => exports_Option.none(),
56691
+ ChannelWildcardSpan: () => exports_Option.none(),
56692
+ TopicWildcardSpan: () => exports_Option.none()
56693
+ }));
56694
+ var mentionsOfMessage = (renderedFor, message, directoryFor) => mayMention(message.content) ? renderedFor(message.id).pipe(exports_Effect.flatMap(exports_Option.match({
56689
56695
  onNone: () => exports_Effect.succeed([]),
56690
- onSome: (rendered) => renderedMentions(rendered, directory)
56696
+ onSome: (rendered) => directoryFor(mentionedUserIds(rendered)).pipe(exports_Effect.flatMap((directory) => renderedMentions(rendered, directory)))
56691
56697
  }))) : exports_Effect.succeed([]);
56692
56698
 
56693
56699
  // packages/zulip/resolved-topic.ts
@@ -56701,6 +56707,10 @@ var splitTopic = (rawTopic) => {
56701
56707
  var applyResolvedPrefix = (name, resolved) => resolved ? isResolvedTopic(name) ? name : RESOLVED_TOPIC_PREFIX + name : stripResolvedPrefix(name);
56702
56708
 
56703
56709
  // packages/zulip/events.ts
56710
+ var mentionDirectoryOf = (directory) => ({
56711
+ byName: directory.byName,
56712
+ byUserId: (userId) => directory.byId.get(userId)
56713
+ });
56704
56714
  var createMessageRefCache = (maxSize = 1e4) => {
56705
56715
  const map32 = new Map;
56706
56716
  return {
@@ -56799,7 +56809,8 @@ var decodeSenderIdentity = (message, directory) => {
56799
56809
  });
56800
56810
  };
56801
56811
  var messageToInboundEvents = (message, directory, boundIdentity, base, renderedFor) => exports_Effect.gen(function* () {
56802
- const sender = yield* decodeSenderIdentity(message, directory);
56812
+ const covered = yield* directory.cover([message.sender_id]);
56813
+ const sender = yield* decodeSenderIdentity(message, covered);
56803
56814
  const ref = yield* decodeMessageRef(message, base);
56804
56815
  const body = yield* decodeMessageBody(message.content);
56805
56816
  const ts = yield* decodeTimestamp(message.timestamp);
@@ -56808,10 +56819,7 @@ var messageToInboundEvents = (message, directory, boundIdentity, base, renderedF
56808
56819
  sender,
56809
56820
  body,
56810
56821
  ts,
56811
- mentions: yield* mentionsOfMessage(renderedFor, message, {
56812
- byName: directory.byName,
56813
- byUserId: (userId) => directory.byId.get(userId)
56814
- }),
56822
+ mentions: yield* mentionsOfMessage(renderedFor, message, (userIds) => covered.cover(userIds).pipe(exports_Effect.map(mentionDirectoryOf))),
56815
56823
  reactions: []
56816
56824
  };
56817
56825
  const out = [{ kind: "message-posted", message: portMessage }];
@@ -56845,7 +56853,7 @@ var decodeReactionIdentity = (reaction, directory) => {
56845
56853
  });
56846
56854
  };
56847
56855
  var reactionToInboundEvent = (reaction, directory, target) => exports_Effect.gen(function* () {
56848
- const by = yield* decodeReactionIdentity(reaction, directory);
56856
+ const by = yield* decodeReactionIdentity(reaction, yield* directory.cover([reaction.user_id]));
56849
56857
  const emoji2 = yield* decodeEmoji(reaction.emoji_name);
56850
56858
  return {
56851
56859
  kind: reactionKind(reaction.op),
@@ -57297,6 +57305,10 @@ var sentMessageSchema = exports_Schema.Struct({
57297
57305
  id: exports_Schema.Int
57298
57306
  });
57299
57307
  var successSchema2 = exports_Schema.Struct({ result: exports_Schema.Literal("success") });
57308
+ var renderedSchema = exports_Schema.Struct({
57309
+ result: exports_Schema.Literal("success"),
57310
+ rendered: exports_Schema.String
57311
+ });
57300
57312
  var classifyEditFailure = (cause3) => {
57301
57313
  if (cause3 instanceof ZulipApiError) {
57302
57314
  const text3 = cause3.message.toLowerCase();
@@ -57394,7 +57406,9 @@ var toIdentity = (u) => exports_Effect.all({
57394
57406
  kind: u.is_bot ? "agent" : "human"
57395
57407
  })));
57396
57408
  var isActiveOfKind = (kind) => (u) => u.is_active && (kind === "agent" ? u.is_bot : !u.is_bot);
57397
- var streamIsListening = (state, channelName) => exports_HashSet.has(state.subscribedChannels, channelName) || exports_HashSet.has(state.newTopicsChannels, channelName);
57409
+ var heldNarrowOf = (target) => exports_Predicate.isString(target) ? exports_Data.struct({ channel: target, thread: exports_Option.none() }) : exports_Data.struct({ channel: target.channel, thread: exports_Option.some(target.thread) });
57410
+ var holdsChannel = (state, channelName) => exports_HashSet.some(state.heldNarrows, (narrow) => narrow.channel === channelName);
57411
+ var streamIsListening = (state, channelName) => holdsChannel(state, channelName) || exports_HashSet.has(state.newTopicsChannels, channelName);
57398
57412
  var observeNewTopic = (state, channelName, threadName3) => {
57399
57413
  const seen = exports_HashMap.get(state.seenTopicsByChannel, channelName).pipe(exports_Option.getOrElse(() => exports_HashSet.empty()));
57400
57414
  if (exports_HashSet.has(seen, threadName3))
@@ -57431,7 +57445,8 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57431
57445
  })));
57432
57446
  const boundHttp = () => bindOnDemand.pipe(exports_Effect.zipRight(requireBound()), exports_Effect.map((b) => b.http));
57433
57447
  const fetchMembers = () => minterHttp.get("/users", usersSchema).pipe(exports_Effect.map((res) => res.members));
57434
- const buildDirectoryLookup = () => fetchMembers().pipe(exports_Effect.flatMap((members) => exports_Effect.gen(function* () {
57448
+ const fetchMembersById = (userIds) => minterHttp.get("/users", usersSchema, { user_ids: JSON.stringify(userIds) }).pipe(exports_Effect.map((res) => res.members));
57449
+ const directoryOf = (members) => exports_Effect.gen(function* () {
57435
57450
  const byId = new Map;
57436
57451
  const byName = new Map;
57437
57452
  const byIdentityId = new Map;
@@ -57444,11 +57459,23 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57444
57459
  if (u.is_active)
57445
57460
  active2.add(ident.id);
57446
57461
  }
57447
- return { byId, byName, byIdentityId, active: active2 };
57448
- })));
57462
+ const lookup = {
57463
+ byId,
57464
+ byName,
57465
+ byIdentityId,
57466
+ active: active2,
57467
+ cover: (userIds) => {
57468
+ const missing = exports_Array.dedupe(userIds.filter((id3) => !byId.has(ZulipUserRef(id3))));
57469
+ return exports_Array.isEmptyReadonlyArray(missing) ? exports_Effect.succeed(lookup) : fetchMembersById(missing).pipe(exports_Effect.flatMap((found) => directoryOf([...members, ...found])));
57470
+ }
57471
+ };
57472
+ return lookup;
57473
+ });
57474
+ const buildDirectoryLookup = () => fetchMembers().pipe(exports_Effect.flatMap(directoryOf));
57449
57475
  const recipientDirectory = () => buildDirectoryLookup().pipe(exports_Effect.map((lookup) => ({
57450
57476
  byId: new Map([...lookup.byId.entries()].map(([id3, ident]) => [id3, { kind: ident.kind }]))
57451
57477
  })));
57478
+ const renderedMentionIds = (content) => minterHttp.post("/messages/render", renderedSchema, { content }).pipe(exports_Effect.map((res) => mentionedUserIds(res.rendered)));
57452
57479
  const mentionDirectory = (directory2) => ({
57453
57480
  byName: directory2.byName,
57454
57481
  byUserId: (userId) => directory2.byId.get(ZulipUserRef(userId))
@@ -57465,8 +57492,8 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57465
57492
  };
57466
57493
  const validateOutboundMentions = (operation, body) => !mentionTokens(body).some(MentionToken.$is("UserToken")) ? exports_Effect.void : buildDirectoryLookup().pipe(exports_Effect.flatMap((directory2) => {
57467
57494
  const dead = unresolvedMentions(body, notifiableMentionDirectory(directory2));
57468
- return dead.length === 0 ? exports_Effect.void : exports_Effect.fail(new UnresolvedMention({ operation, tokens: dead, substrate: "zulip" }));
57469
- }));
57495
+ return exports_Array.isEmptyReadonlyArray(dead) ? exports_Effect.succeed(dead) : renderedMentionIds(body).pipe(exports_Effect.flatMap(directory2.cover), exports_Effect.map((covered) => unresolvedMentions(body, notifiableMentionDirectory(covered))));
57496
+ }), exports_Effect.flatMap((dead) => exports_Array.isEmptyReadonlyArray(dead) ? exports_Effect.void : exports_Effect.fail(new UnresolvedMention({ operation, tokens: dead, substrate: "zulip" }))));
57470
57497
  const mapHistoricalReactions = (raw3, directory2) => exports_Effect.gen(function* () {
57471
57498
  const byEmoji = new Map;
57472
57499
  for (const r of raw3) {
@@ -57500,7 +57527,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57500
57527
  sender,
57501
57528
  body,
57502
57529
  ts: m.ts,
57503
- mentions: yield* mentionsOfMessage(renderedFor, { id: Number(m.id), content: m.content }, mentionDirectory(directory2)),
57530
+ mentions: yield* mentionsOfMessage(renderedFor, { id: Number(m.id), content: m.content }, (userIds) => directory2.cover(userIds).pipe(exports_Effect.map(mentionDirectory))),
57504
57531
  reactions
57505
57532
  };
57506
57533
  });
@@ -57518,7 +57545,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57518
57545
  onPage: (query, rows) => exports_Effect.gen(function* () {
57519
57546
  const renderedFor = yield* renderedContentForBatch(minterHttp, query, rows);
57520
57547
  const historical = yield* exports_Effect.forEach(rows, toHistoricalMessage);
57521
- const directory2 = yield* exports_Fiber.join(directoryFiber);
57548
+ const directory2 = yield* exports_Fiber.join(directoryFiber).pipe(exports_Effect.flatMap((d) => d.cover(historical.flatMap((m) => [m.senderId, ...m.reactions.map((r) => r.userId)]))));
57522
57549
  return yield* exports_Effect.forEach(historical, (m) => mapHistoricalMessage(m, directory2, renderedFor));
57523
57550
  })
57524
57551
  });
@@ -57625,10 +57652,16 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57625
57652
  onNone: () => exports_Effect.succeed([undefined, current2]),
57626
57653
  onSome: (existing) => (opts?.persistent === true ? exports_Effect.void : minterHttp.delete(`/bots/${existing.userId}`, successSchema2).pipe(exports_Effect.asVoid, exports_Effect.catchAll(() => exports_Effect.void))).pipe(exports_Effect.as([undefined, exports_Option.none()]))
57627
57654
  })).pipe(exports_Effect.asVoid),
57628
- resolve: (name) => minterHttp.get("/users", usersSchema).pipe(exports_Effect.flatMap((res) => exports_Array.findFirst(res.members, (u) => u.is_active && u.full_name === name).pipe(exports_Option.match({
57629
- onNone: () => exports_Effect.succeed(exports_Option.none()),
57630
- onSome: (match23) => toIdentity(match23).pipe(exports_Effect.asSome)
57631
- }))), exports_Effect.mapError((cause3) => new IdentityError({ operation: "resolve", cause: cause3 })))
57655
+ resolve: (name) => {
57656
+ const activeNamed = (members) => exports_Array.findFirst(members, (u) => u.is_active && u.full_name === name);
57657
+ return fetchMembers().pipe(exports_Effect.flatMap((members) => exports_Option.match(activeNamed(members), {
57658
+ onSome: (match23) => exports_Effect.succeedSome(match23),
57659
+ onNone: () => renderedMentionIds(`@**${name}**`).pipe(exports_Effect.flatMap((userIds) => exports_Array.isEmptyReadonlyArray(userIds) ? exports_Effect.succeed([]) : fetchMembersById(userIds)), exports_Effect.map(activeNamed))
57660
+ })), exports_Effect.flatMap(exports_Option.match({
57661
+ onNone: () => exports_Effect.succeed(exports_Option.none()),
57662
+ onSome: (match23) => toIdentity(match23).pipe(exports_Effect.asSome)
57663
+ })), exports_Effect.mapError((cause3) => new IdentityError({ operation: "resolve", cause: cause3 })));
57664
+ }
57632
57665
  };
57633
57666
  const directory = {
57634
57667
  listAgents: () => fetchMembers().pipe(exports_Effect.flatMap((members) => exports_Effect.forEach(members.filter(isActiveOfKind("agent")), toIdentity)), exports_Effect.mapError((cause3) => new DirectoryError({ operation: "listAgents", cause: cause3 }))),
@@ -57775,7 +57808,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57775
57808
  setChannelDescription
57776
57809
  };
57777
57810
  const inboxRef = yield* exports_SynchronizedRef.make({
57778
- subscribedChannels: exports_HashSet.empty(),
57811
+ heldNarrows: exports_HashSet.empty(),
57779
57812
  newTopicsChannels: exports_HashSet.empty(),
57780
57813
  seenTopicsByChannel: exports_HashMap.empty(),
57781
57814
  registration: exports_Option.none()
@@ -57798,7 +57831,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57798
57831
  onNone: () => [false, state],
57799
57832
  onSome: (t) => observeNewTopic(state, cname, t.name)
57800
57833
  });
57801
- if (exports_HashSet.has(state.subscribedChannels, cname))
57834
+ if (holdsChannel(state, cname))
57802
57835
  return [true, ticked];
57803
57836
  if (me !== undefined && mentionsIdentity(message.mentions, me.id)) {
57804
57837
  return [true, ticked];
@@ -57823,7 +57856,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57823
57856
  newTopicsChannels: exports_HashSet.add(state.newTopicsChannels, channel)
57824
57857
  } : {
57825
57858
  ...state,
57826
- subscribedChannels: exports_HashSet.add(state.subscribedChannels, channel)
57859
+ heldNarrows: exports_HashSet.add(state.heldNarrows, heldNarrowOf(target))
57827
57860
  };
57828
57861
  return [wasListening, next4];
57829
57862
  }).pipe(exports_Effect.flatMap((wasListening) => {
@@ -57843,7 +57876,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57843
57876
  seenTopicsByChannel: exports_HashMap.remove(state.seenTopicsByChannel, channel)
57844
57877
  } : {
57845
57878
  ...state,
57846
- subscribedChannels: exports_HashSet.remove(state.subscribedChannels, channel)
57879
+ heldNarrows: exports_HashSet.remove(state.heldNarrows, heldNarrowOf(target))
57847
57880
  };
57848
57881
  return [streamIsListening(next4, channel), next4];
57849
57882
  }).pipe(exports_Effect.flatMap((stillListening) => stillListening ? exports_Effect.void : http.delete("/users/me/subscriptions", subscriptionsResponseSchema, {
@@ -57898,7 +57931,7 @@ var zulipAdapter = (config3) => exports_Effect.gen(function* () {
57898
57931
  fetchPage: (query) => minterHttp.get("/messages", replayResponseSchema, query).pipe(exports_Effect.map((res) => res.messages)),
57899
57932
  onPage: (query, rows) => exports_Effect.gen(function* () {
57900
57933
  const renderedFor = yield* renderedContentForBatch(minterHttp, query, rows);
57901
- const directory2 = yield* exports_Fiber.join(directoryFiber);
57934
+ const directory2 = yield* exports_Fiber.join(directoryFiber).pipe(exports_Effect.flatMap((d) => d.cover(rows.map((row) => row.sender_id))));
57902
57935
  return yield* exports_Effect.forEach(rows, (raw3) => {
57903
57936
  const { flags: _flags, ...message } = raw3;
57904
57937
  return messageToInboundEvents(message, directory2, exports_Option.getOrUndefined(current2)?.identity, base, renderedFor);
@@ -58694,7 +58727,7 @@ var createEphemeralIdentityCache = (deps) => exports_Effect.map(exports_Synchron
58694
58727
  releaseAllBound: () => releaseBoundSlot
58695
58728
  };
58696
58729
  });
58697
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
58730
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
58698
58731
  function isZ4Schema(s) {
58699
58732
  const schema = s;
58700
58733
  return !!schema._zod;
@@ -58757,7 +58790,7 @@ function getLiteralValue(schema) {
58757
58790
  return;
58758
58791
  }
58759
58792
 
58760
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
58793
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
58761
58794
  function isTerminal(status3) {
58762
58795
  return status3 === "completed" || status3 === "failed" || status3 === "cancelled";
58763
58796
  }
@@ -58766,7 +58799,7 @@ function isTerminal(status3) {
58766
58799
  var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
58767
58800
  // node_modules/.bun/zod-to-json-schema@3.25.2+68a1e3a0c4588df3/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
58768
58801
  var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
58769
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
58802
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
58770
58803
  function getMethodLiteral(schema) {
58771
58804
  const shape = getObjectShape(schema);
58772
58805
  const methodSchema = shape?.method;
@@ -58787,7 +58820,7 @@ function parseWithCompat(schema, data) {
58787
58820
  return result.data;
58788
58821
  }
58789
58822
 
58790
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
58823
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
58791
58824
  var DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;
58792
58825
 
58793
58826
  class Protocol {
@@ -59628,7 +59661,7 @@ function mergeCapabilities(base, additional) {
59628
59661
  return result;
59629
59662
  }
59630
59663
 
59631
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
59664
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
59632
59665
  var import_ajv = __toESM(require_ajv(), 1);
59633
59666
  var import_ajv_formats = __toESM(require_dist(), 1);
59634
59667
  function createDefaultAjvInstance() {
@@ -59668,7 +59701,7 @@ class AjvJsonSchemaValidator {
59668
59701
  }
59669
59702
  }
59670
59703
 
59671
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
59704
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
59672
59705
  class ExperimentalServerTasks {
59673
59706
  constructor(_server) {
59674
59707
  this._server = _server;
@@ -59746,7 +59779,7 @@ class ExperimentalServerTasks {
59746
59779
  }
59747
59780
  }
59748
59781
 
59749
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
59782
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
59750
59783
  function assertToolsCallTaskCapability(requests, method, entityName) {
59751
59784
  if (!requests) {
59752
59785
  throw new Error(`${entityName} does not support task creation (required for ${method})`);
@@ -59781,7 +59814,7 @@ function assertClientRequestTaskCapability(requests, method, entityName) {
59781
59814
  }
59782
59815
  }
59783
59816
 
59784
- // node_modules/.bun/@modelcontextprotocol+sdk@1.30.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
59817
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.30.1/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
59785
59818
  class Server extends Protocol {
59786
59819
  constructor(_serverInfo, options5) {
59787
59820
  super(options5);
@@ -60106,7 +60139,7 @@ class Server extends Protocol {
60106
60139
  }
60107
60140
 
60108
60141
  // packages/mcp/mcp-server.ts
60109
- var PLUGIN_VERSION = "0.24.2";
60142
+ var PLUGIN_VERSION = "0.24.3";
60110
60143
  var COMMY_INSTRUCTIONS = `**Substrate.** commy is the inter-agent channel: agents and humans coordinate here. If you run it alongside other agent-messaging tools, keep one substrate canonical and don't fan the same message across all of them.
60111
60144
 
60112
60145
  **Channels.** Each project has one channel: \`#<project-slug>\` where the slug is resolved per session as \`COMMY_PROJECT\` env > git remote \`origin\` basename > git root basename. Sessions launched outside a git repo (e.g. \`/tmp\`, \`$HOME\`) have no project channel and should post to \`#general\` instead. Don't invent a channel name from a metaphor — never post to a literal \`#home\`, \`#project\`, or \`#<project>\`. Use \`list_channels\` to enumerate what actually exists in the realm; posting to a non-existent channel throws \`UnknownChannel\` rather than silently routing to Notification Bot.