ccgateway 0.1.8 → 0.2.1

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.
@@ -1,5 +1,10 @@
1
1
  import { App } from "@slack/bolt";
2
2
  import { logger } from "../logger.js";
3
+ // ── Constants ────────────────────────────────────────────────────────────
4
+ /** Minimum interval between Slack message updates (rate-limit safe). */
5
+ const UPDATE_THROTTLE_MS = 1500;
6
+ /** Slack section block text limit. */
7
+ const SECTION_TEXT_LIMIT = 3000;
3
8
  // ── Helpers ───────────────────────────────────────────────────────────────
4
9
  /**
5
10
  * Resolve a config value: if it starts with "$", read from process.env.
@@ -55,10 +60,10 @@ export function markdownToMrkdwn(md) {
55
60
  return result;
56
61
  }
57
62
  /**
58
- * Split a message into chunks that fit within Slack's character limit.
59
- * Prefers splitting at newline boundaries.
63
+ * Split a message into chunks that fit within Slack's section block text
64
+ * limit (3000 chars). Prefers splitting at newline boundaries.
60
65
  */
61
- export function splitMessage(text, maxLen = 3900) {
66
+ export function splitMessage(text, maxLen = SECTION_TEXT_LIMIT) {
62
67
  if (text.length <= maxLen)
63
68
  return [text];
64
69
  const chunks = [];
@@ -83,11 +88,26 @@ export function splitMessage(text, maxLen = 3900) {
83
88
  }
84
89
  return chunks;
85
90
  }
91
+ /**
92
+ * Build Slack blocks from mrkdwn text, splitting into multiple section
93
+ * blocks if the text exceeds the 3000-char section limit.
94
+ */
95
+ function buildBlocks(mrkdwn) {
96
+ const chunks = splitMessage(mrkdwn);
97
+ return chunks.map((chunk) => ({
98
+ type: "section",
99
+ text: { type: "mrkdwn", text: chunk },
100
+ }));
101
+ }
86
102
  // ── Plugin factory ────────────────────────────────────────────────────────
87
103
  export default function createSlackGateway(pluginConfig) {
88
104
  let core;
89
105
  const bots = [];
90
106
  const resolvedTokens = new Map();
107
+ // Per-channel message queue — prevents concurrent spawns for the same channel.
108
+ const channelLocks = new Map();
109
+ // Message deduplication — socket mode can replay events during reconnection.
110
+ const seenMessages = new Set();
91
111
  /**
92
112
  * Send a message to a specific channel using a specific bot.
93
113
  */
@@ -120,9 +140,6 @@ export default function createSlackGateway(pluginConfig) {
120
140
  case "/new":
121
141
  case "/reset": {
122
142
  const sessionKey = core.sessions.getOrCreateSession(agentId, "slack", channelId);
123
- // SessionManager.resetSession expects (agentId, sessionKey)
124
- // but the interface exposed via CcgCore only has getOrCreateSession.
125
- // We just create a new session reference which effectively resets context.
126
143
  return `Session reset for agent *${agentId}* in this channel.`;
127
144
  }
128
145
  case "/status": {
@@ -139,7 +156,6 @@ export default function createSlackGateway(pluginConfig) {
139
156
  * Register message and event handlers for a single bot App.
140
157
  */
141
158
  function registerHandlers(app, botId) {
142
- // Handle messages
143
159
  app.message(async ({ message, say, client }) => {
144
160
  // Ignore bot messages and message_changed subtypes
145
161
  if (!message || message.subtype)
@@ -147,125 +163,193 @@ export default function createSlackGateway(pluginConfig) {
147
163
  // message type narrowing — we only handle standard user messages
148
164
  if (!("user" in message) || !("text" in message))
149
165
  return;
166
+ // Deduplicate — socket mode can replay events during reconnection.
167
+ // Key includes botId so different bots can still process the same message.
168
+ const msgTs = message.ts;
169
+ const dedupKey = `${botId}:${msgTs}`;
170
+ if (seenMessages.has(dedupKey))
171
+ return;
172
+ seenMessages.add(dedupKey);
173
+ if (seenMessages.size > 5000) {
174
+ const all = [...seenMessages];
175
+ seenMessages.clear();
176
+ for (const id of all.slice(-2500))
177
+ seenMessages.add(id);
178
+ }
150
179
  const userId = message.user;
151
180
  const text = message.text ?? "";
152
181
  const channelId = message.channel;
153
182
  const messageTs = message.ts;
154
- const threadTs = "thread_ts" in message ? message.thread_ts : undefined;
155
- logger.info(`slack: bot "${botId}" received message in channel ${channelId} from user ${userId}`);
156
- // Check if user is allowed (empty allowedUsers means allow everyone)
157
- if (pluginConfig.allowedUsers.length > 0 && !pluginConfig.allowedUsers.includes(userId)) {
158
- logger.debug(`slack: ignoring message from non-allowed user ${userId}`);
159
- return;
160
- }
161
- // Resolve agent from bindings — try exact channel first, then fall back
162
- // to bot-level binding (needed for Slack DMs where channel IDs are dynamic)
163
- const agentId = core.router.resolveAgent("slack", channelId) ??
164
- core.router.resolveAgentByBot("slack", botId);
165
- if (!agentId) {
166
- logger.debug(`slack: no agent bound to channel ${channelId} or bot ${botId}`);
167
- return;
168
- }
169
- // Check if message is a slash command (text-based, not actual Slack slash commands)
170
- const trimmed = text.trim();
171
- if (pluginConfig.commands.includes(trimmed)) {
172
- const cmdResponse = await handleSlashCommand(trimmed, agentId, channelId, userId);
173
- if (cmdResponse) {
174
- await say({
175
- text: cmdResponse,
176
- thread_ts: threadTs ?? messageTs,
177
- });
183
+ // Per-channel queue serialize so only one spawn runs at a time
184
+ const lockKey = `${botId}:${channelId}`;
185
+ const prev = channelLocks.get(lockKey) ?? Promise.resolve();
186
+ const current = prev.then(() => handleSlackMsg(), () => handleSlackMsg());
187
+ channelLocks.set(lockKey, current);
188
+ current.finally(() => {
189
+ if (channelLocks.get(lockKey) === current) {
190
+ channelLocks.delete(lockKey);
178
191
  }
179
- return;
180
- }
181
- // Add hourglass reaction while processing
182
- try {
183
- await client.reactions.add({
184
- channel: channelId,
185
- timestamp: messageTs,
186
- name: "hourglass_flowing_sand",
187
- });
188
- }
189
- catch {
190
- // Reaction may fail if already added or permissions issue; non-fatal
191
- }
192
- try {
193
- // Extract file attachments (Slack files require bot token to download)
194
- const attachments = [];
195
- if ("files" in message && Array.isArray(message.files)) {
196
- const bot = bots.find((b) => b.botId === botId);
197
- const token = bot ? resolvedTokens.get(botId)?.token : undefined;
198
- for (const file of message.files) {
199
- const url = file.url_private_download ?? file.url_private;
200
- if (!url)
201
- continue;
202
- try {
203
- const resp = await fetch(url, {
204
- headers: token ? { Authorization: `Bearer ${token}` } : {},
205
- });
206
- if (!resp.ok)
207
- continue;
208
- attachments.push({
209
- type: file.mimetype ?? "application/octet-stream",
210
- data: Buffer.from(await resp.arrayBuffer()),
211
- filename: file.name ?? undefined,
212
- });
213
- }
214
- catch {
215
- // Skip failed downloads
216
- }
192
+ });
193
+ return current;
194
+ async function handleSlackMsg() {
195
+ const threadTs = "thread_ts" in message ? message.thread_ts : undefined;
196
+ logger.info(`slack: bot "${botId}" received message in channel ${channelId} from user ${userId}`);
197
+ // Check if user is allowed (empty allowedUsers means allow everyone)
198
+ if (pluginConfig.allowedUsers.length > 0 && !pluginConfig.allowedUsers.includes(userId)) {
199
+ logger.debug(`slack: ignoring message from non-allowed user ${userId}`);
200
+ return;
201
+ }
202
+ // Resolve agent from bindings — try exact channel first, then fall back
203
+ // to bot-level binding (needed for Slack DMs where channel IDs are dynamic)
204
+ const agentId = core.router.resolveAgent("slack", channelId) ??
205
+ core.router.resolveAgentByBot("slack", botId);
206
+ if (!agentId) {
207
+ logger.debug(`slack: no agent bound to channel ${channelId} or bot ${botId}`);
208
+ return;
209
+ }
210
+ // Check if message is a slash command (text-based, not actual Slack slash commands)
211
+ const trimmed = text.trim();
212
+ if (pluginConfig.commands.includes(trimmed)) {
213
+ const cmdResponse = await handleSlashCommand(trimmed, agentId, channelId, userId);
214
+ if (cmdResponse) {
215
+ await say({
216
+ text: cmdResponse,
217
+ thread_ts: threadTs ?? messageTs,
218
+ });
217
219
  }
220
+ return;
218
221
  }
219
- // Build IncomingMessage
220
- const incoming = {
221
- from: {
222
- gateway: "slack",
222
+ // Post initial "Thinking..." message that we'll update with streaming content
223
+ const replyTs = threadTs ?? messageTs;
224
+ let initialMsg;
225
+ try {
226
+ initialMsg = await client.chat.postMessage({
223
227
  channel: channelId,
224
- user: userId,
225
- userId,
226
- messageId: messageTs,
227
- },
228
- to: { agent: agentId },
229
- content: text,
230
- attachments,
231
- };
232
- // Route the message
233
- const response = await core.router.route(incoming);
234
- // Convert and send response
235
- const mrkdwn = markdownToMrkdwn(response);
236
- const chunks = splitMessage(mrkdwn);
237
- for (const chunk of chunks) {
238
- await say({
239
- text: chunk,
228
+ text: "Thinking...",
229
+ thread_ts: replyTs,
230
+ });
231
+ }
232
+ catch {
233
+ // Fallback: use say() if postMessage fails
234
+ initialMsg = await say({ text: "Thinking...", thread_ts: replyTs });
235
+ }
236
+ const sentTs = initialMsg?.ts;
237
+ let lastUpdateTime = 0;
238
+ // Throttled streaming callback — updates the message at most every UPDATE_THROTTLE_MS
239
+ const onChunk = (accumulated) => {
240
+ if (!sentTs)
241
+ return;
242
+ const now = Date.now();
243
+ if (now - lastUpdateTime < UPDATE_THROTTLE_MS)
244
+ return;
245
+ lastUpdateTime = now;
246
+ const mrkdwn = markdownToMrkdwn(accumulated);
247
+ // Cap at section limit for streaming preview
248
+ const preview = mrkdwn.length > SECTION_TEXT_LIMIT - 3
249
+ ? mrkdwn.slice(0, SECTION_TEXT_LIMIT - 3) + "..."
250
+ : mrkdwn;
251
+ client.chat.update({
252
+ channel: channelId,
253
+ ts: sentTs,
254
+ text: preview,
240
255
  blocks: [
241
256
  {
242
257
  type: "section",
243
- text: { type: "mrkdwn", text: chunk },
258
+ text: { type: "mrkdwn", text: preview },
244
259
  },
245
260
  ],
246
- thread_ts: threadTs ?? messageTs,
247
- });
248
- }
249
- }
250
- catch (err) {
251
- const errMsg = err instanceof Error ? err.message : String(err);
252
- logger.error(`slack: error handling message: ${errMsg}`);
253
- await say({
254
- text: `:warning: Error: ${errMsg}`,
255
- thread_ts: threadTs ?? messageTs,
256
- });
257
- }
258
- finally {
259
- // Remove hourglass reaction
261
+ }).catch(() => { });
262
+ };
260
263
  try {
261
- await client.reactions.remove({
262
- channel: channelId,
263
- timestamp: messageTs,
264
- name: "hourglass_flowing_sand",
265
- });
264
+ // Extract file attachments (Slack files require bot token to download)
265
+ const attachments = [];
266
+ if ("files" in message && Array.isArray(message.files)) {
267
+ const bot = bots.find((b) => b.botId === botId);
268
+ const token = bot ? resolvedTokens.get(botId)?.token : undefined;
269
+ for (const file of message.files) {
270
+ const url = file.url_private_download ?? file.url_private;
271
+ if (!url)
272
+ continue;
273
+ try {
274
+ const resp = await fetch(url, {
275
+ headers: token ? { Authorization: `Bearer ${token}` } : {},
276
+ });
277
+ if (!resp.ok)
278
+ continue;
279
+ attachments.push({
280
+ type: file.mimetype ?? "application/octet-stream",
281
+ data: Buffer.from(await resp.arrayBuffer()),
282
+ filename: file.name ?? undefined,
283
+ });
284
+ }
285
+ catch {
286
+ // Skip failed downloads
287
+ }
288
+ }
289
+ }
290
+ // Build IncomingMessage
291
+ const incoming = {
292
+ from: {
293
+ gateway: "slack",
294
+ channel: channelId,
295
+ user: userId,
296
+ userId,
297
+ messageId: messageTs,
298
+ },
299
+ to: { agent: agentId },
300
+ content: text,
301
+ attachments,
302
+ };
303
+ // Route the message with streaming callback
304
+ const response = await core.router.route(incoming, onChunk);
305
+ // Final update: replace initial message + send overflow chunks
306
+ const mrkdwn = markdownToMrkdwn(response);
307
+ const blocks = buildBlocks(mrkdwn);
308
+ if (sentTs) {
309
+ // First block goes into the edited message
310
+ await client.chat.update({
311
+ channel: channelId,
312
+ ts: sentTs,
313
+ text: blocks[0]?.text.text ?? response,
314
+ blocks: [blocks[0]],
315
+ });
316
+ // Remaining blocks as new messages
317
+ for (let i = 1; i < blocks.length; i++) {
318
+ await say({
319
+ text: blocks[i].text.text,
320
+ blocks: [blocks[i]],
321
+ thread_ts: replyTs,
322
+ });
323
+ }
324
+ }
325
+ else {
326
+ // No initial message to edit — send all as new
327
+ for (const block of blocks) {
328
+ await say({
329
+ text: block.text.text,
330
+ blocks: [block],
331
+ thread_ts: replyTs,
332
+ });
333
+ }
334
+ }
266
335
  }
267
- catch {
268
- // Non-fatal
336
+ catch (err) {
337
+ const errMsg = err instanceof Error ? err.message : String(err);
338
+ logger.error(`slack: error handling message: ${errMsg}`);
339
+ // Update initial message with error, or send new error message
340
+ if (sentTs) {
341
+ await client.chat.update({
342
+ channel: channelId,
343
+ ts: sentTs,
344
+ text: `:warning: Error: ${errMsg}`,
345
+ }).catch(() => { });
346
+ }
347
+ else {
348
+ await say({
349
+ text: `:warning: Error: ${errMsg}`,
350
+ thread_ts: replyTs,
351
+ });
352
+ }
269
353
  }
270
354
  }
271
355
  });
@@ -1 +1 @@
1
- {"version":3,"file":"slack-gateway.js","sourceRoot":"","sources":["../../src/plugins/slack-gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-gateway.js","sourceRoot":"","sources":["../../src/plugins/slack-gateway.ts"],"names":[],"mappings":"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"}
package/dist/router.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import type { AgentRegistry } from "./agents.js";
2
- import type { AsyncTaskWatcher } from "./async-watcher.js";
3
2
  import type { SessionManager } from "./sessions.js";
4
3
  import type { ContextBuilder } from "./context.js";
5
- import type { CCSpawner } from "./spawner.js";
4
+ import type { CCSpawner, StreamCallback } from "./spawner.js";
6
5
  import type { IncomingMessage, BindingConfig } from "./types.js";
7
6
  export declare class MessageRouter {
8
7
  private agents;
@@ -10,8 +9,7 @@ export declare class MessageRouter {
10
9
  private context;
11
10
  private spawner;
12
11
  private bindings;
13
- private watcher?;
14
- constructor(agents: AgentRegistry, sessions: SessionManager, context: ContextBuilder, spawner: CCSpawner, bindings: BindingConfig[], watcher?: AsyncTaskWatcher | undefined);
12
+ constructor(agents: AgentRegistry, sessions: SessionManager, context: ContextBuilder, spawner: CCSpawner, bindings: BindingConfig[]);
15
13
  /**
16
14
  * Resolve which agent handles a message based on bindings.
17
15
  * Given (gateway, channelId), find the matching binding and return binding.agent.
@@ -26,15 +24,19 @@ export declare class MessageRouter {
26
24
  * Full message dispatch pipeline.
27
25
  *
28
26
  * 1. Look up agent config from registry
29
- * 2. Derive session key: {agentId}:{gateway}:{channel}
30
- * 3. Get or create session
31
- * 4. Append user message to session
32
- * 5. Build context
33
- * 6. Spawn claude --print
34
- * 7. Append assistant response to session (or error on failure)
35
- * 8. Return response text
27
+ * 2. Short-circuit trivial messages (thanks, ok, etc.)
28
+ * 3. Derive session key: {agentId}:{gateway}:{channel}
29
+ * 4. Get or create session
30
+ * 5. Append user message to session
31
+ * 6. Build context
32
+ * 7. Spawn claude with streaming (or batch if no onChunk)
33
+ * 8. Append assistant response to session (or error on failure)
34
+ * 9. Return response text
35
+ *
36
+ * When `onChunk` is provided, uses the streaming spawner so callers
37
+ * (Discord, Slack) can relay incremental text to the user in real time.
36
38
  */
37
- route(message: IncomingMessage): Promise<string>;
39
+ route(message: IncomingMessage, onChunk?: StreamCallback): Promise<string>;
38
40
  /**
39
41
  * Add a binding at runtime.
40
42
  */
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAc,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ7E,qBAAa,aAAa;IAEtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO,CAAC;gBALR,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,CAAC,EAAE,gBAAgB,YAAA;IAGpC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpE;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOrE;;;;;;;;;;;OAWG;IACG,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA6ItD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAIrD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI7D;;;;OAIG;YACW,mBAAmB;CAmDlC;AAkDD,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY/E"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAc,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAc,aAAa,EAAE,MAAM,YAAY,CAAC;AAwB7E,qBAAa,aAAa;IAEtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;gBAJR,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,aAAa,EAAE;IAGnC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpE;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOrE;;;;;;;;;;;;;;;OAeG;IACG,KAAK,CACT,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAgIlB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAIrD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI7D;;;;OAIG;YACW,mBAAmB;CAmDlC;AAkDD,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY/E"}