@herdctl/core 4.0.0 → 4.1.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 (106) hide show
  1. package/dist/config/index.d.ts +1 -1
  2. package/dist/config/index.d.ts.map +1 -1
  3. package/dist/config/index.js +3 -1
  4. package/dist/config/index.js.map +1 -1
  5. package/dist/config/schema.d.ts +571 -0
  6. package/dist/config/schema.d.ts.map +1 -1
  7. package/dist/config/schema.js +67 -1
  8. package/dist/config/schema.js.map +1 -1
  9. package/dist/fleet-manager/__tests__/slack-manager.test.d.ts +11 -0
  10. package/dist/fleet-manager/__tests__/slack-manager.test.d.ts.map +1 -0
  11. package/dist/fleet-manager/__tests__/slack-manager.test.js +1022 -0
  12. package/dist/fleet-manager/__tests__/slack-manager.test.js.map +1 -0
  13. package/dist/fleet-manager/context.d.ts +4 -0
  14. package/dist/fleet-manager/context.d.ts.map +1 -1
  15. package/dist/fleet-manager/event-types.d.ts +113 -0
  16. package/dist/fleet-manager/event-types.d.ts.map +1 -1
  17. package/dist/fleet-manager/fleet-manager.d.ts +3 -0
  18. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  19. package/dist/fleet-manager/fleet-manager.js +10 -0
  20. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  21. package/dist/fleet-manager/job-control.d.ts.map +1 -1
  22. package/dist/fleet-manager/job-control.js +5 -2
  23. package/dist/fleet-manager/job-control.js.map +1 -1
  24. package/dist/fleet-manager/slack-manager.d.ts +158 -0
  25. package/dist/fleet-manager/slack-manager.d.ts.map +1 -0
  26. package/dist/fleet-manager/slack-manager.js +570 -0
  27. package/dist/fleet-manager/slack-manager.js.map +1 -0
  28. package/dist/fleet-manager/status-queries.d.ts +2 -1
  29. package/dist/fleet-manager/status-queries.d.ts.map +1 -1
  30. package/dist/fleet-manager/status-queries.js +42 -3
  31. package/dist/fleet-manager/status-queries.js.map +1 -1
  32. package/dist/fleet-manager/types.d.ts +43 -3
  33. package/dist/fleet-manager/types.d.ts.map +1 -1
  34. package/dist/hooks/__tests__/slack-runner.test.d.ts +5 -0
  35. package/dist/hooks/__tests__/slack-runner.test.d.ts.map +1 -0
  36. package/dist/hooks/__tests__/slack-runner.test.js +307 -0
  37. package/dist/hooks/__tests__/slack-runner.test.js.map +1 -0
  38. package/dist/hooks/hook-executor.d.ts +1 -0
  39. package/dist/hooks/hook-executor.d.ts.map +1 -1
  40. package/dist/hooks/hook-executor.js +8 -0
  41. package/dist/hooks/hook-executor.js.map +1 -1
  42. package/dist/hooks/index.d.ts +2 -1
  43. package/dist/hooks/index.d.ts.map +1 -1
  44. package/dist/hooks/index.js +2 -0
  45. package/dist/hooks/index.js.map +1 -1
  46. package/dist/hooks/runners/slack.d.ts +62 -0
  47. package/dist/hooks/runners/slack.d.ts.map +1 -0
  48. package/dist/hooks/runners/slack.js +329 -0
  49. package/dist/hooks/runners/slack.js.map +1 -0
  50. package/dist/hooks/types.d.ts +4 -4
  51. package/dist/hooks/types.d.ts.map +1 -1
  52. package/dist/runner/__tests__/file-sender-mcp.test.d.ts +2 -0
  53. package/dist/runner/__tests__/file-sender-mcp.test.d.ts.map +1 -0
  54. package/dist/runner/__tests__/file-sender-mcp.test.js +177 -0
  55. package/dist/runner/__tests__/file-sender-mcp.test.js.map +1 -0
  56. package/dist/runner/__tests__/job-executor.test.js +12 -12
  57. package/dist/runner/__tests__/job-executor.test.js.map +1 -1
  58. package/dist/runner/file-sender-mcp.d.ts +69 -0
  59. package/dist/runner/file-sender-mcp.d.ts.map +1 -0
  60. package/dist/runner/file-sender-mcp.js +145 -0
  61. package/dist/runner/file-sender-mcp.js.map +1 -0
  62. package/dist/runner/index.d.ts +1 -0
  63. package/dist/runner/index.d.ts.map +1 -1
  64. package/dist/runner/index.js +2 -0
  65. package/dist/runner/index.js.map +1 -1
  66. package/dist/runner/job-executor.d.ts.map +1 -1
  67. package/dist/runner/job-executor.js +35 -5
  68. package/dist/runner/job-executor.js.map +1 -1
  69. package/dist/runner/runtime/__tests__/docker-security.test.js +12 -12
  70. package/dist/runner/runtime/__tests__/docker-security.test.js.map +1 -1
  71. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.d.ts +2 -0
  72. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.d.ts.map +1 -0
  73. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.js +191 -0
  74. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.js.map +1 -0
  75. package/dist/runner/runtime/container-manager.d.ts +5 -1
  76. package/dist/runner/runtime/container-manager.d.ts.map +1 -1
  77. package/dist/runner/runtime/container-manager.js +115 -5
  78. package/dist/runner/runtime/container-manager.js.map +1 -1
  79. package/dist/runner/runtime/container-runner.d.ts +2 -0
  80. package/dist/runner/runtime/container-runner.d.ts.map +1 -1
  81. package/dist/runner/runtime/container-runner.js +121 -74
  82. package/dist/runner/runtime/container-runner.js.map +1 -1
  83. package/dist/runner/runtime/index.d.ts +1 -0
  84. package/dist/runner/runtime/index.d.ts.map +1 -1
  85. package/dist/runner/runtime/index.js +2 -0
  86. package/dist/runner/runtime/index.js.map +1 -1
  87. package/dist/runner/runtime/interface.d.ts +2 -0
  88. package/dist/runner/runtime/interface.d.ts.map +1 -1
  89. package/dist/runner/runtime/mcp-http-bridge.d.ts +39 -0
  90. package/dist/runner/runtime/mcp-http-bridge.d.ts.map +1 -0
  91. package/dist/runner/runtime/mcp-http-bridge.js +205 -0
  92. package/dist/runner/runtime/mcp-http-bridge.js.map +1 -0
  93. package/dist/runner/runtime/sdk-runtime.d.ts.map +1 -1
  94. package/dist/runner/runtime/sdk-runtime.js +74 -1
  95. package/dist/runner/runtime/sdk-runtime.js.map +1 -1
  96. package/dist/runner/types.d.ts +44 -0
  97. package/dist/runner/types.d.ts.map +1 -1
  98. package/dist/state/index.d.ts +1 -1
  99. package/dist/state/index.d.ts.map +1 -1
  100. package/dist/state/index.js +1 -1
  101. package/dist/state/index.js.map +1 -1
  102. package/dist/state/session-validation.d.ts +8 -0
  103. package/dist/state/session-validation.d.ts.map +1 -1
  104. package/dist/state/session-validation.js +36 -0
  105. package/dist/state/session-validation.js.map +1 -1
  106. package/package.json +1 -9
@@ -0,0 +1,570 @@
1
+ /**
2
+ * Slack Manager Module
3
+ *
4
+ * Manages a single Slack connector shared across agents that have `chat.slack` configured.
5
+ * This module is responsible for:
6
+ * - Creating ONE SlackConnector instance for the workspace
7
+ * - Building channel→agent routing from agent configs
8
+ * - Managing connector lifecycle (start/stop)
9
+ *
10
+ * Key difference from Discord:
11
+ * - DiscordManager has Map<string, IDiscordConnector> (N connectors, one per agent)
12
+ * - SlackManager has one connector + Map<string, string> (channel→agent routing)
13
+ *
14
+ * Note: This module dynamically imports @herdctl/slack at runtime to avoid
15
+ * a hard dependency. The @herdctl/core package can be used without Slack support.
16
+ *
17
+ * @module slack-manager
18
+ */
19
+ import { createFileSenderDef } from "../runner/file-sender-mcp.js";
20
+ import { resolveWorkingDirectory } from "./working-directory-helper.js";
21
+ /**
22
+ * Lazy import the Slack package to avoid hard dependency
23
+ */
24
+ async function importSlackPackage() {
25
+ try {
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ const pkg = (await import("@herdctl/slack"));
28
+ return pkg;
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ class StreamingResponder {
35
+ buffer = "";
36
+ lastSendTime = 0;
37
+ messagesSent = 0;
38
+ reply;
39
+ splitResponse;
40
+ logger;
41
+ agentName;
42
+ minMessageInterval;
43
+ maxBufferSize;
44
+ constructor(options) {
45
+ this.reply = options.reply;
46
+ this.splitResponse = options.splitResponse;
47
+ this.logger = options.logger;
48
+ this.agentName = options.agentName;
49
+ this.minMessageInterval = options.minMessageInterval ?? 1000;
50
+ this.maxBufferSize = options.maxBufferSize ?? 3500; // Leave room for Slack's ~4K practical limit
51
+ }
52
+ async addMessageAndSend(content) {
53
+ if (!content || content.trim().length === 0) {
54
+ return;
55
+ }
56
+ this.buffer += content;
57
+ await this.sendAll();
58
+ }
59
+ async sendAll() {
60
+ if (this.buffer.trim().length === 0) {
61
+ return;
62
+ }
63
+ const content = this.buffer.trim();
64
+ this.buffer = "";
65
+ const now = Date.now();
66
+ const timeSinceLastSend = now - this.lastSendTime;
67
+ if (timeSinceLastSend < this.minMessageInterval && this.lastSendTime > 0) {
68
+ const waitTime = this.minMessageInterval - timeSinceLastSend;
69
+ await this.sleep(waitTime);
70
+ }
71
+ const chunks = this.splitResponse(content);
72
+ for (const chunk of chunks) {
73
+ try {
74
+ await this.reply(chunk);
75
+ this.messagesSent++;
76
+ this.lastSendTime = Date.now();
77
+ this.logger.debug(`Streamed message to Slack`, {
78
+ agentName: this.agentName,
79
+ chunkLength: chunk.length,
80
+ totalSent: this.messagesSent,
81
+ });
82
+ if (chunks.length > 1) {
83
+ await this.sleep(500);
84
+ }
85
+ }
86
+ catch (error) {
87
+ const errorMessage = error instanceof Error ? error.message : String(error);
88
+ this.logger.error(`Failed to send Slack message`, {
89
+ agentName: this.agentName,
90
+ error: errorMessage,
91
+ });
92
+ throw error;
93
+ }
94
+ }
95
+ }
96
+ async flush() {
97
+ await this.sendAll();
98
+ }
99
+ hasSentMessages() {
100
+ return this.messagesSent > 0;
101
+ }
102
+ sleep(ms) {
103
+ return new Promise((resolve) => setTimeout(resolve, ms));
104
+ }
105
+ }
106
+ // =============================================================================
107
+ // Slack Manager
108
+ // =============================================================================
109
+ /**
110
+ * SlackManager handles Slack connections for agents
111
+ *
112
+ * Unlike DiscordManager which creates N connectors (one per agent),
113
+ * SlackManager creates ONE connector shared across all Slack-enabled agents,
114
+ * with channel→agent routing.
115
+ */
116
+ export class SlackManager {
117
+ ctx;
118
+ connector = null;
119
+ sessionManagers = new Map();
120
+ channelAgentMap = new Map();
121
+ channelConfigs = new Map();
122
+ initialized = false;
123
+ constructor(ctx) {
124
+ this.ctx = ctx;
125
+ }
126
+ /**
127
+ * Initialize the Slack connector for all configured agents
128
+ */
129
+ async initialize() {
130
+ if (this.initialized) {
131
+ return;
132
+ }
133
+ const logger = this.ctx.getLogger();
134
+ const config = this.ctx.getConfig();
135
+ if (!config) {
136
+ logger.debug("No config available, skipping Slack initialization");
137
+ return;
138
+ }
139
+ // Try to import the slack package
140
+ const slackPkg = await importSlackPackage();
141
+ if (!slackPkg) {
142
+ logger.debug("@herdctl/slack not installed, skipping Slack connector");
143
+ return;
144
+ }
145
+ const { SlackConnector, SessionManager } = slackPkg;
146
+ const stateDir = this.ctx.getStateDir();
147
+ // Find agents with Slack configured
148
+ const slackAgents = config.agents.filter((agent) => agent.chat?.slack !== undefined);
149
+ if (slackAgents.length === 0) {
150
+ logger.debug("No agents with Slack configured");
151
+ this.initialized = true;
152
+ return;
153
+ }
154
+ logger.info(`Initializing Slack connector for ${slackAgents.length} agent(s)`);
155
+ // All agents share the same bot + app token.
156
+ // Take the first agent's config for token resolution.
157
+ const firstSlackConfig = slackAgents[0].chat.slack;
158
+ if (!firstSlackConfig) {
159
+ this.initialized = true;
160
+ return;
161
+ }
162
+ const botToken = process.env[firstSlackConfig.bot_token_env];
163
+ if (!botToken) {
164
+ logger.warn(`Slack bot token not found in environment variable '${firstSlackConfig.bot_token_env}'`);
165
+ this.initialized = true;
166
+ return;
167
+ }
168
+ const appToken = process.env[firstSlackConfig.app_token_env];
169
+ if (!appToken) {
170
+ logger.warn(`Slack app token not found in environment variable '${firstSlackConfig.app_token_env}'`);
171
+ this.initialized = true;
172
+ return;
173
+ }
174
+ // Build channel→agent routing map and create session managers
175
+ for (const agent of slackAgents) {
176
+ const slackConfig = agent.chat.slack;
177
+ if (!slackConfig)
178
+ continue;
179
+ // Create logger adapter for this agent
180
+ const createAgentLogger = (prefix) => ({
181
+ debug: (msg, data) => logger.debug(`${prefix} ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
182
+ info: (msg, data) => logger.info(`${prefix} ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
183
+ warn: (msg, data) => logger.warn(`${prefix} ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
184
+ error: (msg, data) => logger.error(`${prefix} ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
185
+ });
186
+ // Create session manager for this agent
187
+ const sessionManager = new SessionManager({
188
+ agentName: agent.name,
189
+ stateDir,
190
+ sessionExpiryHours: slackConfig.session_expiry_hours,
191
+ logger: createAgentLogger(`[slack:${agent.name}:session]`),
192
+ });
193
+ this.sessionManagers.set(agent.name, sessionManager);
194
+ // Map channels to this agent
195
+ for (const channel of slackConfig.channels) {
196
+ if (this.channelAgentMap.has(channel.id)) {
197
+ logger.warn(`Channel ${channel.id} is already mapped to agent '${this.channelAgentMap.get(channel.id)}', ` +
198
+ `overriding with agent '${agent.name}'`);
199
+ }
200
+ this.channelAgentMap.set(channel.id, agent.name);
201
+ this.channelConfigs.set(channel.id, {
202
+ mode: channel.mode ?? "mention",
203
+ contextMessages: channel.context_messages ?? 10,
204
+ });
205
+ }
206
+ logger.debug(`Configured Slack routing for agent '${agent.name}' with ${slackConfig.channels.length} channel(s)`);
207
+ }
208
+ // Create the single connector
209
+ try {
210
+ this.connector = new SlackConnector({
211
+ botToken,
212
+ appToken,
213
+ channelAgentMap: this.channelAgentMap,
214
+ channelConfigs: this.channelConfigs,
215
+ sessionManagers: this.sessionManagers,
216
+ stateDir,
217
+ logger: {
218
+ debug: (msg, data) => logger.debug(`[slack] ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
219
+ info: (msg, data) => logger.info(`[slack] ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
220
+ warn: (msg, data) => logger.warn(`[slack] ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
221
+ error: (msg, data) => logger.error(`[slack] ${msg}${data ? ` ${JSON.stringify(data)}` : ""}`),
222
+ },
223
+ });
224
+ logger.debug(`Created Slack connector with ${this.channelAgentMap.size} channel mapping(s)`);
225
+ }
226
+ catch (error) {
227
+ const errorMessage = error instanceof Error ? error.message : String(error);
228
+ logger.error(`Failed to create Slack connector: ${errorMessage}`);
229
+ }
230
+ this.initialized = true;
231
+ logger.info(`Slack manager initialized with ${this.sessionManagers.size} agent(s), ` +
232
+ `${this.channelAgentMap.size} channel mapping(s)`);
233
+ }
234
+ /**
235
+ * Connect the Slack connector and subscribe to events
236
+ */
237
+ async start() {
238
+ const logger = this.ctx.getLogger();
239
+ if (!this.connector) {
240
+ logger.debug("No Slack connector to start");
241
+ return;
242
+ }
243
+ logger.info("Starting Slack connector...");
244
+ // Subscribe to events before connecting
245
+ this.connector.on("message", (event) => {
246
+ this.handleMessage(event.agentName, event).catch((error) => {
247
+ this.handleError(event.agentName, error);
248
+ });
249
+ });
250
+ this.connector.on("error", (event) => {
251
+ this.handleError("slack", event.error);
252
+ });
253
+ try {
254
+ await this.connector.connect();
255
+ logger.info("Slack connector started");
256
+ }
257
+ catch (error) {
258
+ const errorMessage = error instanceof Error ? error.message : String(error);
259
+ logger.error(`Failed to connect Slack: ${errorMessage}`);
260
+ }
261
+ }
262
+ /**
263
+ * Disconnect the Slack connector gracefully
264
+ */
265
+ async stop() {
266
+ const logger = this.ctx.getLogger();
267
+ if (!this.connector) {
268
+ logger.debug("No Slack connector to stop");
269
+ return;
270
+ }
271
+ logger.info("Stopping Slack connector...");
272
+ // Log session state before shutdown
273
+ for (const [agentName, sessionManager] of this.sessionManagers) {
274
+ try {
275
+ const activeSessionCount = await sessionManager.getActiveSessionCount();
276
+ if (activeSessionCount > 0) {
277
+ logger.info(`Preserving ${activeSessionCount} active Slack session(s) for agent '${agentName}'`);
278
+ }
279
+ }
280
+ catch (error) {
281
+ const errorMessage = error instanceof Error ? error.message : String(error);
282
+ logger.warn(`Failed to get Slack session count for agent '${agentName}': ${errorMessage}`);
283
+ }
284
+ }
285
+ try {
286
+ await this.connector.disconnect();
287
+ logger.info("Slack connector stopped");
288
+ }
289
+ catch (error) {
290
+ const errorMessage = error instanceof Error ? error.message : String(error);
291
+ logger.error(`Error disconnecting Slack: ${errorMessage}`);
292
+ }
293
+ }
294
+ /**
295
+ * Get the connector (if any)
296
+ */
297
+ getConnector() {
298
+ return this.connector;
299
+ }
300
+ /**
301
+ * Check if the connector is connected
302
+ */
303
+ isConnected() {
304
+ return this.connector?.isConnected() ?? false;
305
+ }
306
+ /**
307
+ * Get the state of the connector
308
+ */
309
+ getState() {
310
+ return this.connector?.getState() ?? null;
311
+ }
312
+ /**
313
+ * Get the channel→agent routing map
314
+ */
315
+ getChannelAgentMap() {
316
+ return this.channelAgentMap;
317
+ }
318
+ /**
319
+ * Check if a specific agent has Slack configured
320
+ */
321
+ hasAgent(agentName) {
322
+ return this.sessionManagers.has(agentName);
323
+ }
324
+ // ===========================================================================
325
+ // Message Handling Pipeline
326
+ // ===========================================================================
327
+ async handleMessage(agentName, event) {
328
+ const logger = this.ctx.getLogger();
329
+ const emitter = this.ctx.getEmitter();
330
+ logger.info(`Slack message for agent '${agentName}': ${event.prompt.substring(0, 50)}...`);
331
+ // Get the agent configuration
332
+ const config = this.ctx.getConfig();
333
+ const agent = config?.agents.find((a) => a.name === agentName);
334
+ if (!agent) {
335
+ logger.error(`Agent '${agentName}' not found in configuration`);
336
+ try {
337
+ await event.reply("Sorry, I'm not properly configured. Please contact an administrator.");
338
+ }
339
+ catch (replyError) {
340
+ logger.error(`Failed to send error reply: ${replyError.message}`);
341
+ }
342
+ return;
343
+ }
344
+ // Get existing session for this channel
345
+ const sessionManager = this.sessionManagers.get(agentName);
346
+ let existingSessionId = null;
347
+ if (sessionManager) {
348
+ try {
349
+ const existingSession = await sessionManager.getSession(event.metadata.channelId);
350
+ if (existingSession) {
351
+ existingSessionId = existingSession.sessionId;
352
+ logger.debug(`Resuming session for channel ${event.metadata.channelId}: ${existingSessionId}`);
353
+ emitter.emit("slack:session:lifecycle", {
354
+ agentName,
355
+ event: "resumed",
356
+ channelId: event.metadata.channelId,
357
+ sessionId: existingSessionId,
358
+ });
359
+ }
360
+ else {
361
+ logger.debug(`No existing session for channel ${event.metadata.channelId}, starting new conversation`);
362
+ }
363
+ }
364
+ catch (error) {
365
+ const errorMessage = error instanceof Error ? error.message : String(error);
366
+ logger.warn(`Failed to get session: ${errorMessage}`);
367
+ }
368
+ }
369
+ // Create file sender definition for this message context
370
+ let injectedMcpServers;
371
+ const workingDir = resolveWorkingDirectory(agent);
372
+ if (this.connector && workingDir) {
373
+ const connector = this.connector;
374
+ const fileSenderContext = {
375
+ workingDirectory: workingDir,
376
+ uploadFile: async (params) => {
377
+ return connector.uploadFile({
378
+ channelId: event.metadata.channelId,
379
+ fileBuffer: params.fileBuffer,
380
+ filename: params.filename,
381
+ message: params.message,
382
+ });
383
+ },
384
+ };
385
+ const fileSenderDef = createFileSenderDef(fileSenderContext);
386
+ injectedMcpServers = { [fileSenderDef.name]: fileSenderDef };
387
+ }
388
+ // Create streaming responder
389
+ const streamer = new StreamingResponder({
390
+ reply: event.reply,
391
+ splitResponse: (text) => this.splitResponse(text),
392
+ logger,
393
+ agentName,
394
+ });
395
+ // Start processing indicator (hourglass emoji)
396
+ const stopProcessing = event.startProcessingIndicator();
397
+ let processingStopped = false;
398
+ try {
399
+ const fleetManager = emitter;
400
+ const result = await fleetManager.trigger(agentName, undefined, {
401
+ prompt: event.prompt,
402
+ resume: existingSessionId,
403
+ injectedMcpServers,
404
+ onMessage: async (message) => {
405
+ if (message.type === "assistant") {
406
+ const content = this.extractMessageContent(message);
407
+ if (content) {
408
+ await streamer.addMessageAndSend(content);
409
+ }
410
+ }
411
+ },
412
+ });
413
+ // Stop processing indicator
414
+ if (!processingStopped) {
415
+ stopProcessing();
416
+ processingStopped = true;
417
+ }
418
+ // Flush remaining content
419
+ await streamer.flush();
420
+ logger.info(`Slack job completed: ${result.jobId} for agent '${agentName}'${result.sessionId ? ` (session: ${result.sessionId})` : ""}`);
421
+ // Fallback message if nothing was sent
422
+ if (!streamer.hasSentMessages()) {
423
+ if (result.success) {
424
+ await event.reply("I've completed the task, but I don't have a specific response to share.");
425
+ }
426
+ else {
427
+ const errorMessage = result.errorDetails?.message ?? result.error?.message ?? "An unknown error occurred";
428
+ await event.reply(`*Error:* ${errorMessage}\n\nThe task could not be completed. Please check the logs for more details.`);
429
+ }
430
+ if (!processingStopped) {
431
+ stopProcessing();
432
+ processingStopped = true;
433
+ }
434
+ }
435
+ // Store the SDK session ID for future conversation continuity
436
+ if (sessionManager && result.sessionId && result.success) {
437
+ const isNewSession = existingSessionId === null;
438
+ try {
439
+ await sessionManager.setSession(event.metadata.channelId, result.sessionId);
440
+ logger.debug(`Stored session ${result.sessionId} for channel ${event.metadata.channelId}`);
441
+ if (isNewSession) {
442
+ emitter.emit("slack:session:lifecycle", {
443
+ agentName,
444
+ event: "created",
445
+ channelId: event.metadata.channelId,
446
+ sessionId: result.sessionId,
447
+ });
448
+ }
449
+ }
450
+ catch (sessionError) {
451
+ const errorMessage = sessionError instanceof Error ? sessionError.message : String(sessionError);
452
+ logger.warn(`Failed to store session: ${errorMessage}`);
453
+ }
454
+ }
455
+ // Emit event for tracking
456
+ emitter.emit("slack:message:handled", {
457
+ agentName,
458
+ channelId: event.metadata.channelId,
459
+ messageTs: event.metadata.messageTs,
460
+ jobId: result.jobId,
461
+ timestamp: new Date().toISOString(),
462
+ });
463
+ }
464
+ catch (error) {
465
+ const err = error instanceof Error ? error : new Error(String(error));
466
+ logger.error(`Slack message handling failed for agent '${agentName}': ${err.message}`);
467
+ try {
468
+ await event.reply(this.formatErrorMessage(err));
469
+ }
470
+ catch (replyError) {
471
+ logger.error(`Failed to send error reply: ${replyError.message}`);
472
+ }
473
+ emitter.emit("slack:message:error", {
474
+ agentName,
475
+ channelId: event.metadata.channelId,
476
+ messageTs: event.metadata.messageTs,
477
+ error: err.message,
478
+ timestamp: new Date().toISOString(),
479
+ });
480
+ }
481
+ finally {
482
+ if (!processingStopped) {
483
+ stopProcessing();
484
+ }
485
+ }
486
+ }
487
+ /**
488
+ * Extract text content from an SDK message
489
+ */
490
+ extractMessageContent(message) {
491
+ if (typeof message.content === "string" && message.content) {
492
+ return message.content;
493
+ }
494
+ const apiMessage = message.message;
495
+ const content = apiMessage?.content;
496
+ if (!content)
497
+ return undefined;
498
+ if (typeof content === "string") {
499
+ return content;
500
+ }
501
+ if (Array.isArray(content)) {
502
+ const textParts = [];
503
+ for (const block of content) {
504
+ if (block && typeof block === "object" && "type" in block) {
505
+ if (block.type === "text" && "text" in block && typeof block.text === "string") {
506
+ textParts.push(block.text);
507
+ }
508
+ }
509
+ }
510
+ return textParts.length > 0 ? textParts.join("") : undefined;
511
+ }
512
+ return undefined;
513
+ }
514
+ /**
515
+ * Handle errors from the Slack connector
516
+ */
517
+ handleError(agentName, error) {
518
+ const logger = this.ctx.getLogger();
519
+ const emitter = this.ctx.getEmitter();
520
+ const errorMessage = error instanceof Error ? error.message : String(error);
521
+ logger.error(`Slack connector error for agent '${agentName}': ${errorMessage}`);
522
+ emitter.emit("slack:error", {
523
+ agentName,
524
+ error: errorMessage,
525
+ timestamp: new Date().toISOString(),
526
+ });
527
+ }
528
+ // ===========================================================================
529
+ // Response Formatting and Splitting
530
+ // ===========================================================================
531
+ static MAX_MESSAGE_LENGTH = 4000;
532
+ formatErrorMessage(error) {
533
+ return `*Error:* ${error.message}\n\nPlease try again or use \`!reset\` to start a new session.`;
534
+ }
535
+ splitResponse(text) {
536
+ const MAX_LENGTH = SlackManager.MAX_MESSAGE_LENGTH;
537
+ if (text.length <= MAX_LENGTH) {
538
+ return [text];
539
+ }
540
+ const chunks = [];
541
+ let remaining = text;
542
+ while (remaining.length > 0) {
543
+ if (remaining.length <= MAX_LENGTH) {
544
+ chunks.push(remaining);
545
+ break;
546
+ }
547
+ const splitIndex = this.findNaturalBreak(remaining, MAX_LENGTH);
548
+ chunks.push(remaining.substring(0, splitIndex));
549
+ remaining = remaining.substring(splitIndex);
550
+ }
551
+ return chunks;
552
+ }
553
+ findNaturalBreak(text, maxLength) {
554
+ const searchEnd = Math.min(maxLength, text.length);
555
+ const doubleNewline = text.lastIndexOf("\n\n", searchEnd);
556
+ if (doubleNewline > 0 && doubleNewline > searchEnd - 500) {
557
+ return doubleNewline + 2;
558
+ }
559
+ const singleNewline = text.lastIndexOf("\n", searchEnd);
560
+ if (singleNewline > 0 && singleNewline > searchEnd - 200) {
561
+ return singleNewline + 1;
562
+ }
563
+ const space = text.lastIndexOf(" ", searchEnd);
564
+ if (space > 0 && space > searchEnd - 100) {
565
+ return space + 1;
566
+ }
567
+ return searchEnd;
568
+ }
569
+ }
570
+ //# sourceMappingURL=slack-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-manager.js","sourceRoot":"","sources":["../../src/fleet-manager/slack-manager.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import type { Scheduler } from "../scheduler/index.js";
12
12
  import type { FleetStatus, AgentInfo, ScheduleInfo, FleetCounts } from "./types.js";
13
13
  import type { FleetManagerContext } from "./context.js";
14
14
  import type { DiscordManager } from "./discord-manager.js";
15
+ import type { SlackManager } from "./slack-manager.js";
15
16
  /**
16
17
  * Snapshot of fleet state from disk
17
18
  *
@@ -90,7 +91,7 @@ export declare class StatusQueries {
90
91
  * @param discordManager - Discord manager for connection status (optional)
91
92
  * @returns Complete AgentInfo object
92
93
  */
93
- export declare function buildAgentInfo(agent: ResolvedAgent, agentState?: AgentState, scheduler?: Scheduler | null, discordManager?: DiscordManager): AgentInfo;
94
+ export declare function buildAgentInfo(agent: ResolvedAgent, agentState?: AgentState, scheduler?: Scheduler | null, discordManager?: DiscordManager, slackManager?: SlackManager): AgentInfo;
94
95
  /**
95
96
  * Build schedule info list from agent configuration and state
96
97
  *
@@ -1 +1 @@
1
- {"version":3,"file":"status-queries.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/status-queries.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAM5C;;;;;GAKG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,mBAAmB;IAE5C;;;;;;OAMG;IACG,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAc3D;;;;;;;;;;;;OAYG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAuC5C;;;;;;;;;;;;OAYG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAgB1C;;;;;;;;;;;;;;OAcG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAkB3D;AAMD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,EACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,EAC5B,cAAc,CAAC,EAAE,cAAc,GAC9B,SAAS,CAiCX;AAsCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,GACtB,YAAY,EAAE,CAoBhB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,WAAW,CAwC1E"}
1
+ {"version":3,"file":"status-queries.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/status-queries.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAGT,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAM5C;;;;;GAKG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,mBAAmB;IAE5C;;;;;;OAMG;IACG,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAc3D;;;;;;;;;;;;OAYG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAuC5C;;;;;;;;;;;;OAYG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAmB1C;;;;;;;;;;;;;;OAcG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAqB3D;AAMD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,EACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,EAC5B,cAAc,CAAC,EAAE,cAAc,EAC/B,YAAY,CAAC,EAAE,YAAY,GAC1B,SAAS,CAqCX;AA8ED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,GACtB,YAAY,EAAE,CAoBhB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,WAAW,CAwC1E"}