@essentialai/cogent 3.0.0 → 3.2.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 (42) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/schemas/api-requests.d.ts +2 -2
  3. package/dist/schemas/api-requests.d.ts.map +1 -1
  4. package/dist/schemas/api-requests.js +2 -2
  5. package/dist/schemas/api-requests.js.map +1 -1
  6. package/dist/slack-format/attribution.d.ts +12 -0
  7. package/dist/slack-format/attribution.d.ts.map +1 -0
  8. package/dist/slack-format/attribution.js +37 -0
  9. package/dist/slack-format/attribution.js.map +1 -0
  10. package/dist/slack-format/index.d.ts +8 -0
  11. package/dist/slack-format/index.d.ts.map +1 -0
  12. package/dist/slack-format/index.js +6 -0
  13. package/dist/slack-format/index.js.map +1 -0
  14. package/dist/slack-format/md-to-slack.d.ts +20 -0
  15. package/dist/slack-format/md-to-slack.d.ts.map +1 -0
  16. package/dist/slack-format/md-to-slack.js +28 -0
  17. package/dist/slack-format/md-to-slack.js.map +1 -0
  18. package/dist/slack-format/mentions.d.ts +21 -0
  19. package/dist/slack-format/mentions.d.ts.map +1 -0
  20. package/dist/slack-format/mentions.js +93 -0
  21. package/dist/slack-format/mentions.js.map +1 -0
  22. package/dist/slack-format/peer-helpers.d.ts +22 -0
  23. package/dist/slack-format/peer-helpers.d.ts.map +1 -0
  24. package/dist/slack-format/peer-helpers.js +23 -0
  25. package/dist/slack-format/peer-helpers.js.map +1 -0
  26. package/dist/slack-format/slack-to-md.d.ts +18 -0
  27. package/dist/slack-format/slack-to-md.d.ts.map +1 -0
  28. package/dist/slack-format/slack-to-md.js +66 -0
  29. package/dist/slack-format/slack-to-md.js.map +1 -0
  30. package/dist/slack-format/types.d.ts +17 -0
  31. package/dist/slack-format/types.d.ts.map +1 -0
  32. package/dist/slack-format/types.js +2 -0
  33. package/dist/slack-format/types.js.map +1 -0
  34. package/dist/types/message.d.ts +1 -1
  35. package/dist/types/message.d.ts.map +1 -1
  36. package/dist/types/message.js +1 -1
  37. package/dist/types/message.js.map +1 -1
  38. package/dist/types/peer.d.ts +1 -1
  39. package/dist/types/peer.d.ts.map +1 -1
  40. package/dist/types/peer.js +1 -1
  41. package/dist/types/peer.js.map +1 -1
  42. package/package.json +8 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.2.0] - 2026-06-01
4
+
5
+ ### Added
6
+ - New `./slack-format` subpath export — shared Slack <-> markdown translation engine,
7
+ reused by the Slack adapter (and the upcoming Business Edition's distributed app):
8
+ - `slackToMarkdown`, `markdownToSlack`
9
+ - `extractUserIds`, `resolveInboundMentions`, `resolveOutboundMentions`
10
+ - `derivePeerId`, `buildPeerLabel`, `platformLabel`, `getAgentEmoji`
11
+ - `UserLookup` / `CachedUser` / `PlatformUserInfo` types (decouples the pure mention
12
+ resolvers from any Bolt-bound user cache)
13
+
14
+ ### Changed
15
+ - Added `slackify-markdown` as a runtime dependency (used by `markdownToSlack`).
16
+
3
17
  ## [3.0.0] - 2026-03-19
4
18
 
5
19
  ### Added
@@ -13,7 +13,7 @@ export interface RegisterPeerRequest {
13
13
  peerId: string;
14
14
  cwd: string;
15
15
  label: string;
16
- platform?: "cc" | "slack" | "gchat" | "web";
16
+ platform?: "cc" | "codex" | "slack" | "gchat" | "web";
17
17
  type?: "agent" | "human";
18
18
  transport?: "ws" | "slack-bot" | "gchat-bot" | "websocket";
19
19
  platformIdentity?: Record<string, string>;
@@ -26,7 +26,7 @@ export interface SendMessageRequest {
26
26
  fromPeerId: string;
27
27
  toPeerId: string;
28
28
  message: string;
29
- originPlatform?: "cc" | "slack" | "gchat" | "web";
29
+ originPlatform?: "cc" | "codex" | "slack" | "gchat" | "web";
30
30
  }
31
31
  /** Query parameters for message history retrieval. */
32
32
  export interface GetHistoryQuery {
@@ -1 +1 @@
1
- {"version":3,"file":"api-requests.d.ts","sourceRoot":"","sources":["../../src/schemas/api-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IAC5C,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;CAAG;AAEzC,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;CACnD;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAK5D,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAIxD,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAU1D,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAOxD,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAMlD,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAKtC,CAAC"}
1
+ {"version":3,"file":"api-requests.d.ts","sourceRoot":"","sources":["../../src/schemas/api-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACtD,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;CAAG;AAEzC,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;CAC7D;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAK5D,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAIxD,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAU1D,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAOxD,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAMlD,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAKtC,CAAC"}
@@ -28,7 +28,7 @@ export const RegisterPeerRequestSchema = z
28
28
  peerId: z.string().min(1).describe("Unique peer identifier"),
29
29
  cwd: z.string().describe("Peer working directory path"),
30
30
  label: z.string().describe("Human-readable peer label"),
31
- platform: z.enum(["cc", "slack", "gchat", "web"]).optional().describe("Platform this peer belongs to"),
31
+ platform: z.enum(["cc", "codex", "slack", "gchat", "web"]).optional().describe("Platform this peer belongs to"),
32
32
  type: z.enum(["agent", "human"]).optional().describe("Peer type"),
33
33
  transport: z.enum(["ws", "slack-bot", "gchat-bot", "websocket"]).optional().describe("Transport mechanism"),
34
34
  platformIdentity: z.record(z.string(), z.string()).optional().describe("Platform-specific identity fields"),
@@ -50,7 +50,7 @@ export const SendMessageRequestSchema = z
50
50
  fromPeerId: z.string().min(1).describe("Sender peer ID"),
51
51
  toPeerId: z.string().min(1).describe("Recipient peer ID (use '*' for broadcast)"),
52
52
  message: z.string().min(1).describe("Message content"),
53
- originPlatform: z.enum(["cc", "slack", "gchat", "web"]).optional().describe("Platform originating this message"),
53
+ originPlatform: z.enum(["cc", "codex", "slack", "gchat", "web"]).optional().describe("Platform originating this message"),
54
54
  })
55
55
  .strict();
56
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api-requests.js","sourceRoot":"","sources":["../../src/schemas/api-requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-requests.js","sourceRoot":"","sources":["../../src/schemas/api-requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Map an agent label to an emoji for the Slack bot icon.
3
+ * Backend/server agents get gear, frontend get palette, etc.
4
+ */
5
+ export declare function getAgentEmoji(label: string): string;
6
+ /**
7
+ * Human-readable platform name for the Slack sender-attribution tag, e.g.
8
+ * "(via Codex)". Unknown/absent platform falls back to "CC" -- pre-3.3 peers
9
+ * had no platform field and were all Claude Code.
10
+ */
11
+ export declare function platformLabel(platform?: string): string;
12
+ //# sourceMappingURL=attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/slack-format/attribution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAcvD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Map an agent label to an emoji for the Slack bot icon.
3
+ * Backend/server agents get gear, frontend get palette, etc.
4
+ */
5
+ export function getAgentEmoji(label) {
6
+ const lower = label.toLowerCase();
7
+ if (lower.includes("backend") || lower.includes("server"))
8
+ return ":gear:";
9
+ if (lower.includes("frontend") || lower.includes("ui") || lower.includes("ux"))
10
+ return ":art:";
11
+ if (lower.includes("qa") || lower.includes("test") || lower.includes("quality"))
12
+ return ":mag:";
13
+ if (lower.includes("devops") || lower.includes("infra") || lower.includes("deploy"))
14
+ return ":rocket:";
15
+ return ":robot_face:";
16
+ }
17
+ /**
18
+ * Human-readable platform name for the Slack sender-attribution tag, e.g.
19
+ * "(via Codex)". Unknown/absent platform falls back to "CC" -- pre-3.3 peers
20
+ * had no platform field and were all Claude Code.
21
+ */
22
+ export function platformLabel(platform) {
23
+ switch (platform) {
24
+ case "codex":
25
+ return "Codex";
26
+ case "slack":
27
+ return "Slack";
28
+ case "gchat":
29
+ return "Google Chat";
30
+ case "web":
31
+ return "Web";
32
+ case "cc":
33
+ default:
34
+ return "CC";
35
+ }
36
+ }
37
+ //# sourceMappingURL=attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/slack-format/attribution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3E,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/F,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IAChG,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IACvG,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,aAAa,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC;QACV;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { slackToMarkdown } from "./slack-to-md.js";
2
+ export { markdownToSlack } from "./md-to-slack.js";
3
+ export { extractUserIds, resolveInboundMentions, resolveOutboundMentions } from "./mentions.js";
4
+ export { getAgentEmoji, platformLabel } from "./attribution.js";
5
+ export { derivePeerId, buildPeerLabel } from "./peer-helpers.js";
6
+ export type { UserLookup, CachedUser } from "./types.js";
7
+ export type { PlatformUserInfo } from "./peer-helpers.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/slack-format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { slackToMarkdown } from "./slack-to-md.js";
2
+ export { markdownToSlack } from "./md-to-slack.js";
3
+ export { extractUserIds, resolveInboundMentions, resolveOutboundMentions } from "./mentions.js";
4
+ export { getAgentEmoji, platformLabel } from "./attribution.js";
5
+ export { derivePeerId, buildPeerLabel } from "./peer-helpers.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/slack-format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { UserLookup } from "./types.js";
2
+ /**
3
+ * Convert standard Markdown to Slack mrkdwn format.
4
+ * Uses slackify-markdown (AST-based, remark/unified) for reliable conversion.
5
+ *
6
+ * Key transformations:
7
+ * - **bold** -> *bold* (asterisk count swap)
8
+ * - *italic* -> _italic_ (asterisk to underscore)
9
+ * - [text](url) -> <url|text>
10
+ * - # Header -> *Header* (bold, since mrkdwn has no headers)
11
+ * - ~~strike~~ -> ~strike~
12
+ * - Code blocks and inline code preserved
13
+ *
14
+ * When `users` is provided, @Name mentions are resolved to <@userId>.
15
+ * When omitted, mentions are left as-is (backward compatible).
16
+ *
17
+ * The library adds a trailing newline; we trim it for clean output.
18
+ */
19
+ export declare function markdownToSlack(text: string, users?: UserLookup): string;
20
+ //# sourceMappingURL=md-to-slack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-slack.d.ts","sourceRoot":"","sources":["../../src/slack-format/md-to-slack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CASxE"}
@@ -0,0 +1,28 @@
1
+ import { slackifyMarkdown } from "slackify-markdown";
2
+ import { resolveOutboundMentions } from "./mentions.js";
3
+ /**
4
+ * Convert standard Markdown to Slack mrkdwn format.
5
+ * Uses slackify-markdown (AST-based, remark/unified) for reliable conversion.
6
+ *
7
+ * Key transformations:
8
+ * - **bold** -> *bold* (asterisk count swap)
9
+ * - *italic* -> _italic_ (asterisk to underscore)
10
+ * - [text](url) -> <url|text>
11
+ * - # Header -> *Header* (bold, since mrkdwn has no headers)
12
+ * - ~~strike~~ -> ~strike~
13
+ * - Code blocks and inline code preserved
14
+ *
15
+ * When `users` is provided, @Name mentions are resolved to <@userId>.
16
+ * When omitted, mentions are left as-is (backward compatible).
17
+ *
18
+ * The library adds a trailing newline; we trim it for clean output.
19
+ */
20
+ export function markdownToSlack(text, users) {
21
+ let result = slackifyMarkdown(text).replace(/\n$/, "");
22
+ // Resolve outbound @Name mentions to <@userId> if lookup available
23
+ if (users) {
24
+ result = resolveOutboundMentions(result, users);
25
+ }
26
+ return result;
27
+ }
28
+ //# sourceMappingURL=md-to-slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-slack.js","sourceRoot":"","sources":["../../src/slack-format/md-to-slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAkB;IAC9D,IAAI,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEvD,mEAAmE;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { UserLookup } from "./types.js";
2
+ /**
3
+ * Extract unique Slack user IDs from a message body.
4
+ * Used to pre-warm a user cache before sync resolution.
5
+ */
6
+ export declare function extractUserIds(text: string): string[];
7
+ /**
8
+ * Resolve inbound Slack <@userId> mentions to readable @DisplayName.
9
+ * Synchronous -- only resolves users already in the lookup.
10
+ * Unknown user IDs are left as <@UXXXX>.
11
+ */
12
+ export declare function resolveInboundMentions(text: string, users: UserLookup): string;
13
+ /**
14
+ * Resolve outbound @Name mentions to Slack <@userId> format.
15
+ * Synchronous -- only resolves names already in the lookup.
16
+ * Protects code blocks (``` and `) from resolution.
17
+ * Does NOT touch @here, @channel, @everyone (those are Slack special mentions).
18
+ * Unknown names are left as @Name.
19
+ */
20
+ export declare function resolveOutboundMentions(text: string, users: UserLookup): string;
21
+ //# sourceMappingURL=mentions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../src/slack-format/mentions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAU9E;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CA+D/E"}
@@ -0,0 +1,93 @@
1
+ /** Slack user-ID regex used by both extraction and resolution. */
2
+ const USER_ID_RE = /<@(U[A-Z0-9]+)>/g;
3
+ /**
4
+ * Extract unique Slack user IDs from a message body.
5
+ * Used to pre-warm a user cache before sync resolution.
6
+ */
7
+ export function extractUserIds(text) {
8
+ const ids = new Set();
9
+ for (const match of text.matchAll(USER_ID_RE)) {
10
+ ids.add(match[1]);
11
+ }
12
+ return [...ids];
13
+ }
14
+ /**
15
+ * Resolve inbound Slack <@userId> mentions to readable @DisplayName.
16
+ * Synchronous -- only resolves users already in the lookup.
17
+ * Unknown user IDs are left as <@UXXXX>.
18
+ */
19
+ export function resolveInboundMentions(text, users) {
20
+ const allUsers = users.getAllCached();
21
+ return text.replace(USER_ID_RE, (_match, userId) => {
22
+ const user = allUsers.get(userId);
23
+ if (user) {
24
+ return `@${user.displayName}`;
25
+ }
26
+ return `<@${userId}>`;
27
+ });
28
+ }
29
+ /**
30
+ * Resolve outbound @Name mentions to Slack <@userId> format.
31
+ * Synchronous -- only resolves names already in the lookup.
32
+ * Protects code blocks (``` and `) from resolution.
33
+ * Does NOT touch @here, @channel, @everyone (those are Slack special mentions).
34
+ * Unknown names are left as @Name.
35
+ */
36
+ export function resolveOutboundMentions(text, users) {
37
+ // Placeholders use \x00 (null) delimiters to avoid matching mention regex
38
+ const BLOCK_PREFIX = "\x00MB";
39
+ const SPAN_PREFIX = "\x00MS";
40
+ const SUFFIX = "\x00";
41
+ // 1. Extract code blocks to protect from resolution
42
+ const codeBlocks = [];
43
+ let result = text.replace(/```[\s\S]*?```/g, (match) => {
44
+ codeBlocks.push(match);
45
+ return `${BLOCK_PREFIX}${codeBlocks.length - 1}${SUFFIX}`;
46
+ });
47
+ // 2. Extract inline code spans to protect from resolution
48
+ const codeSpans = [];
49
+ result = result.replace(/`[^`]+`/g, (match) => {
50
+ codeSpans.push(match);
51
+ return `${SPAN_PREFIX}${codeSpans.length - 1}${SUFFIX}`;
52
+ });
53
+ // 3. Resolve @mentions to <@userId>
54
+ // Build a map of all known names -> userId (longest names first to avoid partial matches)
55
+ const allUsers = users.getAllCached();
56
+ const nameToUserId = new Map();
57
+ for (const [userId, user] of allUsers) {
58
+ if (user.displayName)
59
+ nameToUserId.set(user.displayName.toLowerCase(), userId);
60
+ if (user.realName)
61
+ nameToUserId.set(user.realName.toLowerCase(), userId);
62
+ // First name from realName
63
+ const firstName = user.realName.split(" ")[0];
64
+ if (firstName && !nameToUserId.has(firstName.toLowerCase())) {
65
+ nameToUserId.set(firstName.toLowerCase(), userId);
66
+ }
67
+ }
68
+ // Sort known names by length descending so "Jane D." matches before "Jane"
69
+ const sortedNames = [...nameToUserId.keys()].sort((a, b) => b.length - a.length);
70
+ // For each known name, replace @Name with <@userId>
71
+ for (const lowerName of sortedNames) {
72
+ const userId = nameToUserId.get(lowerName);
73
+ // Build regex that matches @Name at word boundary (case-insensitive)
74
+ // Escape regex special chars in the name
75
+ const escaped = lowerName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
76
+ const re = new RegExp(`@(${escaped})(?=[\\s,.:;!?)"'\\]]|$)`, "gi");
77
+ result = result.replace(re, (_match, _name) => {
78
+ return `<@${userId}>`;
79
+ });
80
+ }
81
+ // Leave unresolved @mentions as-is (they don't match any known name)
82
+ // @here, @channel, @everyone are never in the cache, so they pass through untouched
83
+ // 4. Restore inline code spans (reverse order to preserve indices)
84
+ for (let i = codeSpans.length - 1; i >= 0; i--) {
85
+ result = result.replace(`${SPAN_PREFIX}${i}${SUFFIX}`, codeSpans[i]);
86
+ }
87
+ // 5. Restore code blocks (reverse order to preserve indices)
88
+ for (let i = codeBlocks.length - 1; i >= 0; i--) {
89
+ result = result.replace(`${BLOCK_PREFIX}${i}${SUFFIX}`, codeBlocks[i]);
90
+ }
91
+ return result;
92
+ }
93
+ //# sourceMappingURL=mentions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../src/slack-format/mentions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Minimal user shape needed to build a peer label. The Slack adapter's
3
+ * richer `SlackUserInfo` (displayName + title + more) satisfies this
4
+ * structurally.
5
+ */
6
+ export interface PlatformUserInfo {
7
+ displayName: string;
8
+ title?: string;
9
+ }
10
+ /**
11
+ * Derive a COGENT peerId from a Slack display name.
12
+ * "Pavlo S." -> "pavlo-s"
13
+ * "John Doe" -> "john-doe"
14
+ */
15
+ export declare function derivePeerId(displayName: string): string;
16
+ /**
17
+ * Build a peer label from user info.
18
+ * Includes profile title when available: "Pavlo S. (PM)"
19
+ * Falls back to just display name: "Pavlo S."
20
+ */
21
+ export declare function buildPeerLabel(user: PlatformUserInfo): string;
22
+ //# sourceMappingURL=peer-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-helpers.d.ts","sourceRoot":"","sources":["../../src/slack-format/peer-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAK7D"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Derive a COGENT peerId from a Slack display name.
3
+ * "Pavlo S." -> "pavlo-s"
4
+ * "John Doe" -> "john-doe"
5
+ */
6
+ export function derivePeerId(displayName) {
7
+ return displayName
8
+ .toLowerCase()
9
+ .replace(/[^a-z0-9]+/g, "-")
10
+ .replace(/^-|-$/g, "");
11
+ }
12
+ /**
13
+ * Build a peer label from user info.
14
+ * Includes profile title when available: "Pavlo S. (PM)"
15
+ * Falls back to just display name: "Pavlo S."
16
+ */
17
+ export function buildPeerLabel(user) {
18
+ if (user.title) {
19
+ return `${user.displayName} (${user.title})`;
20
+ }
21
+ return user.displayName;
22
+ }
23
+ //# sourceMappingURL=peer-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-helpers.js","sourceRoot":"","sources":["../../src/slack-format/peer-helpers.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,WAAW;SACf,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { UserLookup } from "./types.js";
2
+ /**
3
+ * Convert Slack mrkdwn to standard Markdown.
4
+ * Custom lightweight regex-based converter for inbound messages.
5
+ *
6
+ * Key difference: *text* is BOLD in mrkdwn but ITALIC in markdown.
7
+ * This converter handles the swap correctly:
8
+ * Slack *bold* -> Markdown **bold**
9
+ * Slack _italic_ -> Markdown *italic*
10
+ *
11
+ * Code blocks and inline code are extracted before transformation
12
+ * and restored after, preventing false matches inside code.
13
+ *
14
+ * When `users` is provided, <@U123ABC> mentions are resolved to @DisplayName.
15
+ * When omitted, user mentions are preserved as-is (backward compatible).
16
+ */
17
+ export declare function slackToMarkdown(text: string, users?: UserLookup): string;
18
+ //# sourceMappingURL=slack-to-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-to-md.d.ts","sourceRoot":"","sources":["../../src/slack-format/slack-to-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CA6DxE"}
@@ -0,0 +1,66 @@
1
+ import { resolveInboundMentions } from "./mentions.js";
2
+ /**
3
+ * Convert Slack mrkdwn to standard Markdown.
4
+ * Custom lightweight regex-based converter for inbound messages.
5
+ *
6
+ * Key difference: *text* is BOLD in mrkdwn but ITALIC in markdown.
7
+ * This converter handles the swap correctly:
8
+ * Slack *bold* -> Markdown **bold**
9
+ * Slack _italic_ -> Markdown *italic*
10
+ *
11
+ * Code blocks and inline code are extracted before transformation
12
+ * and restored after, preventing false matches inside code.
13
+ *
14
+ * When `users` is provided, <@U123ABC> mentions are resolved to @DisplayName.
15
+ * When omitted, user mentions are preserved as-is (backward compatible).
16
+ */
17
+ export function slackToMarkdown(text, users) {
18
+ // Placeholders use \x00 (null) delimiters to avoid matching formatting regex
19
+ // (no underscores, asterisks, or tildes in placeholders)
20
+ const BLOCK_PREFIX = "\x00CB";
21
+ const SPAN_PREFIX = "\x00CS";
22
+ const SUFFIX = "\x00";
23
+ // 1. Extract code blocks to protect from transformation
24
+ const codeBlocks = [];
25
+ let result = text.replace(/```[\s\S]*?```/g, (match) => {
26
+ codeBlocks.push(match);
27
+ return `${BLOCK_PREFIX}${codeBlocks.length - 1}${SUFFIX}`;
28
+ });
29
+ // 2. Extract inline code spans to protect from transformation
30
+ const codeSpans = [];
31
+ result = result.replace(/`[^`]+`/g, (match) => {
32
+ codeSpans.push(match);
33
+ return `${SPAN_PREFIX}${codeSpans.length - 1}${SUFFIX}`;
34
+ });
35
+ // 3. Convert Slack bold *text* to Markdown **text**
36
+ // Negative lookbehind for backslash prevents escaped asterisks
37
+ result = result.replace(/(?<![\\])\*([^*\n]+)\*/g, "**$1**");
38
+ // 4. Convert Slack italic _text_ to Markdown *text*
39
+ result = result.replace(/(?<![\\])_([^_\n]+)_/g, "*$1*");
40
+ // 5. Convert Slack strikethrough ~text~ to Markdown ~~text~~
41
+ result = result.replace(/(?<![\\])~([^~\n]+)~/g, "~~$1~~");
42
+ // 6. Convert Slack links <url|text> to Markdown [text](url)
43
+ result = result.replace(/<(https?:\/\/[^|>]+)\|([^>]+)>/g, "[$2]($1)");
44
+ // 7. Convert bare Slack links <url> to Markdown [url](url)
45
+ result = result.replace(/<(https?:\/\/[^>]+)>/g, "[$1]($1)");
46
+ // 8. Convert channel references <#C123|name> to #name
47
+ result = result.replace(/<#C[A-Z0-9]+\|([^>]+)>/g, "#$1");
48
+ // 9. Convert special mentions
49
+ result = result.replace(/<!here>/g, "@here");
50
+ result = result.replace(/<!channel>/g, "@channel");
51
+ result = result.replace(/<!everyone>/g, "@everyone");
52
+ // 10. Resolve user mentions <@U04ABC> to @DisplayName (if lookup provided)
53
+ if (users) {
54
+ result = resolveInboundMentions(result, users);
55
+ }
56
+ // 11. Restore inline code spans (reverse order to preserve indices)
57
+ for (let i = codeSpans.length - 1; i >= 0; i--) {
58
+ result = result.replace(`${SPAN_PREFIX}${i}${SUFFIX}`, codeSpans[i]);
59
+ }
60
+ // 12. Restore code blocks (reverse order to preserve indices)
61
+ for (let i = codeBlocks.length - 1; i >= 0; i--) {
62
+ result = result.replace(`${BLOCK_PREFIX}${i}${SUFFIX}`, codeBlocks[i]);
63
+ }
64
+ return result;
65
+ }
66
+ //# sourceMappingURL=slack-to-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-to-md.js","sourceRoot":"","sources":["../../src/slack-format/slack-to-md.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAkB;IAC9D,6EAA6E;IAC7E,yDAAyD;IACzD,MAAM,YAAY,GAAG,QAAQ,CAAC;IAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC;IAEtB,wDAAwD;IACxD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;QACrD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,kEAAkE;IAClE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;IAE7D,oDAAoD;IACpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAEzD,6DAA6D;IAC7D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;IAE3D,4DAA4D;IAC5D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC;IAEvE,2DAA2D;IAC3D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;IAE7D,sDAAsD;IACtD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAE1D,8BAA8B;IAC9B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAErD,2EAA2E;IAC3E,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,oEAAoE;IACpE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,8DAA8D;IAC9D,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Read-only view over a Slack user cache, consumed by the pure mention
3
+ * resolvers in this module. This decouples core translation from the Slack
4
+ * adapter's Bolt-bound `UserCache` (which makes live API calls).
5
+ *
6
+ * `ReadonlyMap` is covariant in its value type, so a concrete
7
+ * `Map<string, SlackUserInfo>` (the adapter's cache shape, which has extra
8
+ * fields) satisfies `UserLookup` structurally with no adapter changes.
9
+ */
10
+ export interface CachedUser {
11
+ displayName: string;
12
+ realName: string;
13
+ }
14
+ export interface UserLookup {
15
+ getAllCached(): ReadonlyMap<string, CachedUser>;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/slack-format/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACjD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/slack-format/types.ts"],"names":[],"mappings":""}
@@ -11,7 +11,7 @@ export interface MessageRecord {
11
11
  success: boolean;
12
12
  error: string | null;
13
13
  /** Platform that originated this message -- used for echo suppression in multi-platform sessions. */
14
- originPlatform?: "cc" | "slack" | "gchat" | "web";
14
+ originPlatform?: "cc" | "codex" | "slack" | "gchat" | "web";
15
15
  }
16
16
  /**
17
17
  * MessageRecord schema -- describes a message exchanged between peers.
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qGAAqG;IACrG,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;CACnD;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAWvD,CAAC"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qGAAqG;IACrG,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;CAC7D;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAWvD,CAAC"}
@@ -13,6 +13,6 @@ export const MessageRecordSchema = z.object({
13
13
  durationMs: z.number().nullable().describe("Round-trip duration in ms"),
14
14
  success: z.boolean().describe("Whether delivery succeeded"),
15
15
  error: z.string().nullable().describe("Error message if delivery failed"),
16
- originPlatform: z.enum(["cc", "slack", "gchat", "web"]).optional().describe("Platform that originated this message"),
16
+ originPlatform: z.enum(["cc", "codex", "slack", "gchat", "web"]).optional().describe("Platform that originated this message"),
17
17
  });
18
18
  //# sourceMappingURL=message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B,CAAC,CAAC,MAAM,CAAC;IACpE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACzE,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACrH,CAAC,CAAC"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B,CAAC,CAAC,MAAM,CAAC;IACpE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACzE,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CAC9H,CAAC,CAAC"}
@@ -8,7 +8,7 @@ export interface PeerInfo {
8
8
  registeredAt: string;
9
9
  lastSeenAt: string;
10
10
  /** Platform this peer belongs to (default "cc" for Claude Code). */
11
- platform?: "cc" | "slack" | "gchat" | "web";
11
+ platform?: "cc" | "codex" | "slack" | "gchat" | "web";
12
12
  /** Peer type: AI agent or human user. */
13
13
  type?: "agent" | "human";
14
14
  /** Transport mechanism for this peer. */
@@ -1 +1 @@
1
- {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/types/peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,uFAAuF;AACvF,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IAC5C,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,yCAAyC;IACzC,SAAS,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC3D,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAW7C,CAAC"}
1
+ {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/types/peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,uFAAuF;AACvF,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACtD,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,yCAAyC;IACzC,SAAS,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC3D,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAW7C,CAAC"}
@@ -10,7 +10,7 @@ export const PeerInfoSchema = z.object({
10
10
  label: z.string().describe("Human-readable label"),
11
11
  registeredAt: z.string().datetime().describe("ISO 8601 registration timestamp"),
12
12
  lastSeenAt: z.string().datetime().describe("ISO 8601 last activity timestamp"),
13
- platform: z.enum(["cc", "slack", "gchat", "web"]).optional().describe("Platform this peer belongs to"),
13
+ platform: z.enum(["cc", "codex", "slack", "gchat", "web"]).optional().describe("Platform this peer belongs to"),
14
14
  type: z.enum(["agent", "human"]).optional().describe("Peer type: AI agent or human user"),
15
15
  transport: z.enum(["ws", "slack-bot", "gchat-bot", "websocket"]).optional().describe("Transport mechanism for this peer"),
16
16
  platformIdentity: z.record(z.string(), z.string()).optional().describe("Platform-specific identity fields (slackUserId, slackChannelId, etc.)"),
@@ -1 +1 @@
1
- {"version":3,"file":"peer.js","sourceRoot":"","sources":["../../src/types/peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACrE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAClD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACtG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzF,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzH,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;CAChJ,CAAC,CAAC"}
1
+ {"version":3,"file":"peer.js","sourceRoot":"","sources":["../../src/types/peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACrE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAClD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/G,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzF,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzH,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;CAChJ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@essentialai/cogent",
3
- "version": "3.0.0",
3
+ "version": "3.2.0",
4
4
  "description": "Shared types, schemas, and contracts for Cogent Bridge",
5
5
  "type": "module",
6
6
  "exports": {
@@ -11,6 +11,10 @@
11
11
  "./file": {
12
12
  "types": "./dist/file/index.d.ts",
13
13
  "default": "./dist/file/index.js"
14
+ },
15
+ "./slack-format": {
16
+ "types": "./dist/slack-format/index.d.ts",
17
+ "default": "./dist/slack-format/index.js"
14
18
  }
15
19
  },
16
20
  "files": [
@@ -27,6 +31,9 @@
27
31
  "prepublishOnly": "npm run clean && npm run build && npm test",
28
32
  "check-exports": "attw --pack"
29
33
  },
34
+ "dependencies": {
35
+ "slackify-markdown": "^5.0.0"
36
+ },
30
37
  "peerDependencies": {
31
38
  "zod": "^3.25.0 || ^4.0.0"
32
39
  },