@herdctl/slack 0.3.0 → 1.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.
- package/dist/__tests__/command-handler.test.js +1 -0
- package/dist/__tests__/command-handler.test.js.map +1 -1
- package/dist/__tests__/error-handler.test.js +25 -25
- package/dist/__tests__/error-handler.test.js.map +1 -1
- package/dist/__tests__/formatting.test.js +9 -9
- package/dist/__tests__/formatting.test.js.map +1 -1
- package/dist/__tests__/manager.test.d.ts +8 -0
- package/dist/__tests__/manager.test.d.ts.map +1 -0
- package/dist/__tests__/manager.test.js +278 -0
- package/dist/__tests__/manager.test.js.map +1 -0
- package/dist/__tests__/slack-connector.test.js +200 -0
- package/dist/__tests__/slack-connector.test.js.map +1 -1
- package/dist/commands/command-handler.d.ts +3 -3
- package/dist/commands/command-handler.d.ts.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +1 -54
- package/dist/commands/status.js.map +1 -1
- package/dist/error-handler.d.ts +12 -33
- package/dist/error-handler.d.ts.map +1 -1
- package/dist/error-handler.js +32 -57
- package/dist/error-handler.js.map +1 -1
- package/dist/formatting.d.ts +4 -45
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +10 -96
- package/dist/formatting.js.map +1 -1
- package/dist/index.d.ts +7 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -11
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts +156 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +532 -0
- package/dist/manager.js.map +1 -0
- package/dist/slack-connector.d.ts +10 -2
- package/dist/slack-connector.d.ts.map +1 -1
- package/dist/slack-connector.js +112 -32
- package/dist/slack-connector.js.map +1 -1
- package/dist/types.d.ts +8 -24
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/__tests__/session-manager.test.d.ts +0 -2
- package/dist/__tests__/session-manager.test.d.ts.map +0 -1
- package/dist/__tests__/session-manager.test.js +0 -214
- package/dist/__tests__/session-manager.test.js.map +0 -1
- package/dist/session-manager/errors.d.ts +0 -58
- package/dist/session-manager/errors.d.ts.map +0 -1
- package/dist/session-manager/errors.js +0 -70
- package/dist/session-manager/errors.js.map +0 -1
- package/dist/session-manager/index.d.ts +0 -9
- package/dist/session-manager/index.d.ts.map +0 -1
- package/dist/session-manager/index.js +0 -13
- package/dist/session-manager/index.js.map +0 -1
- package/dist/session-manager/session-manager.d.ts +0 -62
- package/dist/session-manager/session-manager.d.ts.map +0 -1
- package/dist/session-manager/session-manager.js +0 -320
- package/dist/session-manager/session-manager.js.map +0 -1
- package/dist/session-manager/types.d.ts +0 -154
- package/dist/session-manager/types.d.ts.map +0 -1
- package/dist/session-manager/types.js +0 -57
- package/dist/session-manager/types.js.map +0 -1
package/dist/slack-connector.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* - Hourglass emoji reaction as typing indicator
|
|
11
11
|
*/
|
|
12
12
|
import { EventEmitter } from "node:events";
|
|
13
|
+
import { checkDMUserFilter, getDMMode, isDMEnabled } from "@herdctl/chat";
|
|
13
14
|
import { shouldProcessMessage, processMessage, isBotMentioned, } from "./message-handler.js";
|
|
14
15
|
import { CommandHandler, helpCommand, resetCommand, statusCommand, } from "./commands/index.js";
|
|
15
16
|
import { markdownToMrkdwn } from "./formatting.js";
|
|
@@ -24,6 +25,7 @@ export class SlackConnector extends EventEmitter {
|
|
|
24
25
|
botToken;
|
|
25
26
|
appToken;
|
|
26
27
|
channels;
|
|
28
|
+
dmConfig;
|
|
27
29
|
logger;
|
|
28
30
|
// Bolt App instance (dynamically imported)
|
|
29
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -53,6 +55,7 @@ export class SlackConnector extends EventEmitter {
|
|
|
53
55
|
for (const channel of options.channels) {
|
|
54
56
|
this.channels.set(channel.id, channel);
|
|
55
57
|
}
|
|
58
|
+
this.dmConfig = options.dm;
|
|
56
59
|
this.logger = options.logger ?? createDefaultSlackLogger();
|
|
57
60
|
}
|
|
58
61
|
// ===========================================================================
|
|
@@ -218,8 +221,14 @@ export class SlackConnector extends EventEmitter {
|
|
|
218
221
|
this.messagesReceived++;
|
|
219
222
|
if (!this.botUserId)
|
|
220
223
|
return;
|
|
221
|
-
|
|
222
|
-
|
|
224
|
+
const isDM = isSlackDM(event.channel);
|
|
225
|
+
// For DMs, check DM filtering; for channels, check channel config
|
|
226
|
+
if (isDM) {
|
|
227
|
+
const filterResult = this.checkDMAccess(event.channel, event.ts, event.user);
|
|
228
|
+
if (!filterResult)
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
else if (!this.channels.has(event.channel)) {
|
|
223
232
|
this.messagesIgnored++;
|
|
224
233
|
this.emit("messageIgnored", {
|
|
225
234
|
agentName: this.agentName,
|
|
@@ -247,10 +256,10 @@ export class SlackConnector extends EventEmitter {
|
|
|
247
256
|
const wasCommand = await this.tryExecuteCommand(prompt, event.channel, event.user, say);
|
|
248
257
|
if (wasCommand)
|
|
249
258
|
return;
|
|
250
|
-
const messageEvent = this.buildMessageEvent(prompt, event.channel, event.ts, event.user, true, say);
|
|
259
|
+
const messageEvent = this.buildMessageEvent(prompt, event.channel, event.ts, event.user, true, isDM, say);
|
|
251
260
|
this.emit("message", messageEvent);
|
|
252
261
|
});
|
|
253
|
-
// Handle all messages — thread replies AND top-level channel messages
|
|
262
|
+
// Handle all messages — thread replies AND top-level channel messages AND DMs
|
|
254
263
|
this.app.event("message", async ({ event, say }) => {
|
|
255
264
|
this.messagesReceived++;
|
|
256
265
|
if (!this.botUserId)
|
|
@@ -280,25 +289,17 @@ export class SlackConnector extends EventEmitter {
|
|
|
280
289
|
});
|
|
281
290
|
return;
|
|
282
291
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
this.
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
});
|
|
292
|
-
this.logger.debug("No channel config for message", {
|
|
293
|
-
channel: event.channel,
|
|
294
|
-
});
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
// For top-level messages (no thread_ts), check channel mode
|
|
298
|
-
if (!event.thread_ts) {
|
|
299
|
-
const channelConfig = this.channels.get(event.channel);
|
|
300
|
-
const mode = channelConfig?.mode ?? "mention";
|
|
292
|
+
const isDM = isSlackDM(event.channel);
|
|
293
|
+
// For DMs, check DM filtering; for channels, check channel config
|
|
294
|
+
if (isDM) {
|
|
295
|
+
const filterResult = this.checkDMAccess(event.channel, event.ts, event.user ?? "");
|
|
296
|
+
if (!filterResult)
|
|
297
|
+
return;
|
|
298
|
+
// DMs always use "auto" mode from DM config (no mention required)
|
|
299
|
+
const mode = getDMMode(this.dmConfig);
|
|
301
300
|
if (mode === "mention") {
|
|
301
|
+
// In mention mode, DMs without a mention are ignored
|
|
302
|
+
// (the app_mention handler above processes mentions)
|
|
302
303
|
this.messagesIgnored++;
|
|
303
304
|
this.emit("messageIgnored", {
|
|
304
305
|
agentName: this.agentName,
|
|
@@ -306,18 +307,52 @@ export class SlackConnector extends EventEmitter {
|
|
|
306
307
|
channelId: event.channel,
|
|
307
308
|
messageTs: event.ts,
|
|
308
309
|
});
|
|
309
|
-
this.logger.debug("Ignoring
|
|
310
|
+
this.logger.debug("Ignoring DM in mention mode (no mention)", {
|
|
310
311
|
channel: event.channel,
|
|
311
|
-
agent: this.agentName,
|
|
312
|
-
mode,
|
|
313
312
|
});
|
|
314
313
|
return;
|
|
315
314
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
// Channel message — check channel config
|
|
318
|
+
if (!this.channels.has(event.channel)) {
|
|
319
|
+
this.messagesIgnored++;
|
|
320
|
+
this.emit("messageIgnored", {
|
|
321
|
+
agentName: this.agentName,
|
|
322
|
+
reason: "not_configured",
|
|
323
|
+
channelId: event.channel,
|
|
324
|
+
messageTs: event.ts,
|
|
325
|
+
});
|
|
326
|
+
this.logger.debug("No channel config for message", {
|
|
327
|
+
channel: event.channel,
|
|
328
|
+
});
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
// For top-level messages (no thread_ts), check channel mode
|
|
332
|
+
if (!event.thread_ts) {
|
|
333
|
+
const channelConfig = this.channels.get(event.channel);
|
|
334
|
+
const mode = channelConfig?.mode ?? "mention";
|
|
335
|
+
if (mode === "mention") {
|
|
336
|
+
this.messagesIgnored++;
|
|
337
|
+
this.emit("messageIgnored", {
|
|
338
|
+
agentName: this.agentName,
|
|
339
|
+
reason: "not_configured",
|
|
340
|
+
channelId: event.channel,
|
|
341
|
+
messageTs: event.ts,
|
|
342
|
+
});
|
|
343
|
+
this.logger.debug("Ignoring top-level message in mention-mode channel", {
|
|
344
|
+
channel: event.channel,
|
|
345
|
+
agent: this.agentName,
|
|
346
|
+
mode,
|
|
347
|
+
});
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
this.logger.debug("Top-level channel message (auto mode)", {
|
|
351
|
+
channel: event.channel,
|
|
352
|
+
agent: this.agentName,
|
|
353
|
+
ts: event.ts,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
321
356
|
}
|
|
322
357
|
const prompt = processMessage(event.text ?? "", this.botUserId);
|
|
323
358
|
if (!prompt) {
|
|
@@ -334,10 +369,44 @@ export class SlackConnector extends EventEmitter {
|
|
|
334
369
|
const wasCommand = await this.tryExecuteCommand(prompt, event.channel, event.user ?? "", say);
|
|
335
370
|
if (wasCommand)
|
|
336
371
|
return;
|
|
337
|
-
const messageEvent = this.buildMessageEvent(prompt, event.channel, event.ts, event.user ?? "", false, say);
|
|
372
|
+
const messageEvent = this.buildMessageEvent(prompt, event.channel, event.ts, event.user ?? "", false, isDM, say);
|
|
338
373
|
this.emit("message", messageEvent);
|
|
339
374
|
});
|
|
340
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Check if a DM is allowed based on DM config (enabled, allowlist, blocklist).
|
|
378
|
+
* Returns true if the DM should be processed, false if it was filtered.
|
|
379
|
+
* Emits messageIgnored events when filtered.
|
|
380
|
+
*/
|
|
381
|
+
checkDMAccess(channelId, messageTs, userId) {
|
|
382
|
+
if (!isDMEnabled(this.dmConfig)) {
|
|
383
|
+
this.messagesIgnored++;
|
|
384
|
+
this.emit("messageIgnored", {
|
|
385
|
+
agentName: this.agentName,
|
|
386
|
+
reason: "dm_disabled",
|
|
387
|
+
channelId,
|
|
388
|
+
messageTs,
|
|
389
|
+
});
|
|
390
|
+
this.logger.debug("DM ignored (DMs disabled)", { channel: channelId });
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
const filterResult = checkDMUserFilter(userId, this.dmConfig);
|
|
394
|
+
if (!filterResult.allowed) {
|
|
395
|
+
this.messagesIgnored++;
|
|
396
|
+
this.emit("messageIgnored", {
|
|
397
|
+
agentName: this.agentName,
|
|
398
|
+
reason: "dm_filtered",
|
|
399
|
+
channelId,
|
|
400
|
+
messageTs,
|
|
401
|
+
});
|
|
402
|
+
this.logger.debug("DM filtered", {
|
|
403
|
+
userId,
|
|
404
|
+
reason: filterResult.reason,
|
|
405
|
+
});
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
return true;
|
|
409
|
+
}
|
|
341
410
|
// ===========================================================================
|
|
342
411
|
// Command Handling
|
|
343
412
|
// ===========================================================================
|
|
@@ -379,7 +448,7 @@ export class SlackConnector extends EventEmitter {
|
|
|
379
448
|
// ===========================================================================
|
|
380
449
|
// Message Building
|
|
381
450
|
// ===========================================================================
|
|
382
|
-
buildMessageEvent(prompt, channelId, messageTs, userId, wasMentioned,
|
|
451
|
+
buildMessageEvent(prompt, channelId, messageTs, userId, wasMentioned, isDM,
|
|
383
452
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
384
453
|
say) {
|
|
385
454
|
const reply = async (content) => {
|
|
@@ -424,6 +493,7 @@ export class SlackConnector extends EventEmitter {
|
|
|
424
493
|
messageTs,
|
|
425
494
|
userId,
|
|
426
495
|
wasMentioned,
|
|
496
|
+
isDM,
|
|
427
497
|
},
|
|
428
498
|
reply,
|
|
429
499
|
startProcessingIndicator,
|
|
@@ -445,4 +515,14 @@ export class SlackConnector extends EventEmitter {
|
|
|
445
515
|
return super.off(event, listener);
|
|
446
516
|
}
|
|
447
517
|
}
|
|
518
|
+
// =============================================================================
|
|
519
|
+
// DM Detection
|
|
520
|
+
// =============================================================================
|
|
521
|
+
/**
|
|
522
|
+
* Check if a Slack channel ID is a DM (IM) channel.
|
|
523
|
+
* Slack DM channel IDs use a 'D' prefix (e.g., D069C7QFK).
|
|
524
|
+
*/
|
|
525
|
+
function isSlackDM(channelId) {
|
|
526
|
+
return channelId.startsWith("D");
|
|
527
|
+
}
|
|
448
528
|
//# sourceMappingURL=slack-connector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-connector.js","sourceRoot":"","sources":["../src/slack-connector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slack-connector.js","sourceRoot":"","sources":["../src/slack-connector.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* and event definitions.
|
|
6
6
|
*/
|
|
7
7
|
import type { EventEmitter } from "node:events";
|
|
8
|
+
import type { IChatSessionManager, DMConfig } from "@herdctl/chat";
|
|
8
9
|
/**
|
|
9
10
|
* Slack connector connection status
|
|
10
11
|
*/
|
|
@@ -59,8 +60,10 @@ export interface SlackConnectorOptions {
|
|
|
59
60
|
appToken: string;
|
|
60
61
|
/** Channels this agent listens to */
|
|
61
62
|
channels: SlackChannelConfig[];
|
|
63
|
+
/** DM (direct message) configuration */
|
|
64
|
+
dm?: Partial<DMConfig>;
|
|
62
65
|
/** Session manager for this agent */
|
|
63
|
-
sessionManager:
|
|
66
|
+
sessionManager: IChatSessionManager;
|
|
64
67
|
/** Logger for connector operations */
|
|
65
68
|
logger?: SlackConnectorLogger;
|
|
66
69
|
}
|
|
@@ -91,6 +94,8 @@ export interface SlackMessageEvent {
|
|
|
91
94
|
userId: string;
|
|
92
95
|
/** Whether this was triggered by a mention */
|
|
93
96
|
wasMentioned: boolean;
|
|
97
|
+
/** Whether this message is from a DM */
|
|
98
|
+
isDM: boolean;
|
|
94
99
|
};
|
|
95
100
|
/** Function to send a reply in the same thread */
|
|
96
101
|
reply: (content: string) => Promise<void>;
|
|
@@ -124,7 +129,7 @@ export interface ISlackConnector extends EventEmitter {
|
|
|
124
129
|
/** Name of the agent this connector is bound to */
|
|
125
130
|
readonly agentName: string;
|
|
126
131
|
/** Session manager for this agent */
|
|
127
|
-
readonly sessionManager:
|
|
132
|
+
readonly sessionManager: IChatSessionManager;
|
|
128
133
|
/** Connect to Slack via Socket Mode */
|
|
129
134
|
connect(): Promise<void>;
|
|
130
135
|
/** Disconnect from Slack */
|
|
@@ -142,27 +147,6 @@ export interface ISlackConnector extends EventEmitter {
|
|
|
142
147
|
once<K extends SlackConnectorEventName>(event: K, listener: (payload: SlackConnectorEventMap[K]) => void): this;
|
|
143
148
|
off<K extends SlackConnectorEventName>(event: K, listener: (payload: SlackConnectorEventMap[K]) => void): this;
|
|
144
149
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Session manager interface for Slack
|
|
147
|
-
*
|
|
148
|
-
* Keyed by channelId (matching Discord's approach).
|
|
149
|
-
*/
|
|
150
|
-
export interface ISlackSessionManager {
|
|
151
|
-
readonly agentName: string;
|
|
152
|
-
getOrCreateSession(channelId: string): Promise<{
|
|
153
|
-
sessionId: string;
|
|
154
|
-
isNew: boolean;
|
|
155
|
-
}>;
|
|
156
|
-
getSession(channelId: string): Promise<{
|
|
157
|
-
sessionId: string;
|
|
158
|
-
lastMessageAt: string;
|
|
159
|
-
} | null>;
|
|
160
|
-
setSession(channelId: string, sessionId: string): Promise<void>;
|
|
161
|
-
touchSession(channelId: string): Promise<void>;
|
|
162
|
-
clearSession(channelId: string): Promise<boolean>;
|
|
163
|
-
cleanupExpiredSessions(): Promise<number>;
|
|
164
|
-
getActiveSessionCount(): Promise<number>;
|
|
165
|
-
}
|
|
166
150
|
/**
|
|
167
151
|
* Strongly-typed event map for SlackConnector
|
|
168
152
|
*
|
|
@@ -192,7 +176,7 @@ export interface SlackConnectorEventMap {
|
|
|
192
176
|
/** Emitted when a message is ignored */
|
|
193
177
|
messageIgnored: {
|
|
194
178
|
agentName: string;
|
|
195
|
-
reason: "not_configured" | "bot_message" | "no_agent_resolved" | "empty_prompt";
|
|
179
|
+
reason: "not_configured" | "bot_message" | "no_agent_resolved" | "empty_prompt" | "dm_disabled" | "dm_filtered";
|
|
196
180
|
channelId: string;
|
|
197
181
|
messageTs: string;
|
|
198
182
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herdctl/slack",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Slack connector for herdctl fleet management",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"slackify-markdown": "^5.0.0",
|
|
16
16
|
"yaml": "^2.3.0",
|
|
17
17
|
"zod": "^3.22.0",
|
|
18
|
-
"@herdctl/
|
|
18
|
+
"@herdctl/chat": "0.2.1",
|
|
19
|
+
"@herdctl/core": "5.1.0"
|
|
19
20
|
},
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@vitest/coverage-v8": "^4.0.17",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/session-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
-
import { mkdtemp, rm, readFile } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
|
-
import { SessionManager } from "../session-manager/session-manager.js";
|
|
6
|
-
import { createInitialSessionState, createChannelSession, } from "../session-manager/types.js";
|
|
7
|
-
import { SessionManagerError, SessionStateReadError, SessionStateWriteError, SessionDirectoryCreateError, SessionErrorCode, } from "../session-manager/errors.js";
|
|
8
|
-
const createMockLogger = () => ({
|
|
9
|
-
debug: vi.fn(),
|
|
10
|
-
info: vi.fn(),
|
|
11
|
-
warn: vi.fn(),
|
|
12
|
-
error: vi.fn(),
|
|
13
|
-
});
|
|
14
|
-
describe("SessionManager", () => {
|
|
15
|
-
let tempDir;
|
|
16
|
-
beforeEach(async () => {
|
|
17
|
-
tempDir = await mkdtemp(join(tmpdir(), "slack-session-test-"));
|
|
18
|
-
});
|
|
19
|
-
afterEach(async () => {
|
|
20
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
21
|
-
});
|
|
22
|
-
const createManager = (agentName = "test-agent", expiryHours = 24) => {
|
|
23
|
-
return new SessionManager({
|
|
24
|
-
agentName,
|
|
25
|
-
stateDir: tempDir,
|
|
26
|
-
sessionExpiryHours: expiryHours,
|
|
27
|
-
logger: createMockLogger(),
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
describe("getOrCreateSession", () => {
|
|
31
|
-
it("creates a new session for unknown channel", async () => {
|
|
32
|
-
const manager = createManager();
|
|
33
|
-
const result = await manager.getOrCreateSession("C0123456789");
|
|
34
|
-
expect(result.isNew).toBe(true);
|
|
35
|
-
expect(result.sessionId).toMatch(/^slack-test-agent-/);
|
|
36
|
-
});
|
|
37
|
-
it("returns existing session for known channel", async () => {
|
|
38
|
-
const manager = createManager();
|
|
39
|
-
const first = await manager.getOrCreateSession("C0123456789");
|
|
40
|
-
const second = await manager.getOrCreateSession("C0123456789");
|
|
41
|
-
expect(second.isNew).toBe(false);
|
|
42
|
-
expect(second.sessionId).toBe(first.sessionId);
|
|
43
|
-
});
|
|
44
|
-
it("creates different sessions for different channels", async () => {
|
|
45
|
-
const manager = createManager();
|
|
46
|
-
const first = await manager.getOrCreateSession("C0123456789");
|
|
47
|
-
const second = await manager.getOrCreateSession("C9876543210");
|
|
48
|
-
expect(first.sessionId).not.toBe(second.sessionId);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe("getSession", () => {
|
|
52
|
-
it("returns null for unknown channel", async () => {
|
|
53
|
-
const manager = createManager();
|
|
54
|
-
const session = await manager.getSession("C_UNKNOWN");
|
|
55
|
-
expect(session).toBeNull();
|
|
56
|
-
});
|
|
57
|
-
it("returns session for known channel", async () => {
|
|
58
|
-
const manager = createManager();
|
|
59
|
-
await manager.getOrCreateSession("C0123456789");
|
|
60
|
-
const session = await manager.getSession("C0123456789");
|
|
61
|
-
expect(session).not.toBeNull();
|
|
62
|
-
expect(session.sessionId).toMatch(/^slack-test-agent-/);
|
|
63
|
-
});
|
|
64
|
-
it("returns null for expired sessions", async () => {
|
|
65
|
-
// 0 hours expiry = immediately expired
|
|
66
|
-
const manager = createManager("test-agent", 0);
|
|
67
|
-
await manager.getOrCreateSession("C0123456789");
|
|
68
|
-
// Wait a tick so the session is expired
|
|
69
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
70
|
-
const session = await manager.getSession("C0123456789");
|
|
71
|
-
expect(session).toBeNull();
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe("touchSession", () => {
|
|
75
|
-
it("updates last message timestamp", async () => {
|
|
76
|
-
const manager = createManager();
|
|
77
|
-
await manager.getOrCreateSession("C0123456789");
|
|
78
|
-
const before = await manager.getSession("C0123456789");
|
|
79
|
-
const beforeTime = new Date(before.lastMessageAt).getTime();
|
|
80
|
-
// Wait enough for a distinct timestamp
|
|
81
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
82
|
-
await manager.touchSession("C0123456789");
|
|
83
|
-
const after = await manager.getSession("C0123456789");
|
|
84
|
-
const afterTime = new Date(after.lastMessageAt).getTime();
|
|
85
|
-
expect(afterTime).toBeGreaterThanOrEqual(beforeTime);
|
|
86
|
-
});
|
|
87
|
-
it("does not throw for unknown channel", async () => {
|
|
88
|
-
const manager = createManager();
|
|
89
|
-
await expect(manager.touchSession("C_UNKNOWN")).resolves.toBeUndefined();
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe("setSession", () => {
|
|
93
|
-
it("creates or updates a session", async () => {
|
|
94
|
-
const manager = createManager();
|
|
95
|
-
await manager.setSession("C0123456789", "custom-session-id");
|
|
96
|
-
const session = await manager.getSession("C0123456789");
|
|
97
|
-
expect(session).not.toBeNull();
|
|
98
|
-
expect(session.sessionId).toBe("custom-session-id");
|
|
99
|
-
});
|
|
100
|
-
it("overwrites existing session", async () => {
|
|
101
|
-
const manager = createManager();
|
|
102
|
-
await manager.getOrCreateSession("C0123456789");
|
|
103
|
-
await manager.setSession("C0123456789", "new-session-id");
|
|
104
|
-
const session = await manager.getSession("C0123456789");
|
|
105
|
-
expect(session.sessionId).toBe("new-session-id");
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe("clearSession", () => {
|
|
109
|
-
it("removes a session and returns true", async () => {
|
|
110
|
-
const manager = createManager();
|
|
111
|
-
await manager.getOrCreateSession("C0123456789");
|
|
112
|
-
const result = await manager.clearSession("C0123456789");
|
|
113
|
-
expect(result).toBe(true);
|
|
114
|
-
const session = await manager.getSession("C0123456789");
|
|
115
|
-
expect(session).toBeNull();
|
|
116
|
-
});
|
|
117
|
-
it("returns false for unknown channel", async () => {
|
|
118
|
-
const manager = createManager();
|
|
119
|
-
const result = await manager.clearSession("C_UNKNOWN");
|
|
120
|
-
expect(result).toBe(false);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
describe("cleanupExpiredSessions", () => {
|
|
124
|
-
it("removes expired sessions", async () => {
|
|
125
|
-
const manager = createManager("test-agent", 0);
|
|
126
|
-
await manager.getOrCreateSession("C001");
|
|
127
|
-
await manager.getOrCreateSession("C002");
|
|
128
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
129
|
-
const count = await manager.cleanupExpiredSessions();
|
|
130
|
-
expect(count).toBe(2);
|
|
131
|
-
});
|
|
132
|
-
it("keeps active sessions", async () => {
|
|
133
|
-
const manager = createManager("test-agent", 24);
|
|
134
|
-
await manager.getOrCreateSession("C001");
|
|
135
|
-
const count = await manager.cleanupExpiredSessions();
|
|
136
|
-
expect(count).toBe(0);
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
describe("getActiveSessionCount", () => {
|
|
140
|
-
it("returns 0 when no sessions", async () => {
|
|
141
|
-
const manager = createManager();
|
|
142
|
-
expect(await manager.getActiveSessionCount()).toBe(0);
|
|
143
|
-
});
|
|
144
|
-
it("counts active sessions", async () => {
|
|
145
|
-
const manager = createManager();
|
|
146
|
-
await manager.getOrCreateSession("C001");
|
|
147
|
-
await manager.getOrCreateSession("C002");
|
|
148
|
-
expect(await manager.getActiveSessionCount()).toBe(2);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
describe("persistence", () => {
|
|
152
|
-
it("persists state to YAML file", async () => {
|
|
153
|
-
const manager = createManager();
|
|
154
|
-
await manager.getOrCreateSession("C0123456789");
|
|
155
|
-
const filePath = join(tempDir, "slack-sessions", "test-agent.yaml");
|
|
156
|
-
const content = await readFile(filePath, "utf-8");
|
|
157
|
-
expect(content).toContain("version: 2");
|
|
158
|
-
expect(content).toContain("agentName: test-agent");
|
|
159
|
-
expect(content).toContain("C0123456789");
|
|
160
|
-
});
|
|
161
|
-
it("survives recreation with same state dir", async () => {
|
|
162
|
-
const manager1 = createManager();
|
|
163
|
-
const result1 = await manager1.getOrCreateSession("C0123456789");
|
|
164
|
-
// Create new manager pointing to same dir
|
|
165
|
-
const manager2 = createManager();
|
|
166
|
-
const result2 = await manager2.getOrCreateSession("C0123456789");
|
|
167
|
-
expect(result2.isNew).toBe(false);
|
|
168
|
-
expect(result2.sessionId).toBe(result1.sessionId);
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
describe("Session manager types", () => {
|
|
173
|
-
describe("createInitialSessionState", () => {
|
|
174
|
-
it("creates state with empty channels", () => {
|
|
175
|
-
const state = createInitialSessionState("my-agent");
|
|
176
|
-
expect(state.version).toBe(2);
|
|
177
|
-
expect(state.agentName).toBe("my-agent");
|
|
178
|
-
expect(state.channels).toEqual({});
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe("createChannelSession", () => {
|
|
182
|
-
it("creates channel session", () => {
|
|
183
|
-
const session = createChannelSession("session-123");
|
|
184
|
-
expect(session.sessionId).toBe("session-123");
|
|
185
|
-
expect(session.lastMessageAt).toBeDefined();
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe("Session manager errors", () => {
|
|
190
|
-
it("SessionManagerError has correct properties", () => {
|
|
191
|
-
const error = new SessionManagerError("test error", SessionErrorCode.STATE_READ_FAILED, "test-agent");
|
|
192
|
-
expect(error.message).toBe("test error");
|
|
193
|
-
expect(error.code).toBe(SessionErrorCode.STATE_READ_FAILED);
|
|
194
|
-
expect(error.agentName).toBe("test-agent");
|
|
195
|
-
expect(error.name).toBe("SessionManagerError");
|
|
196
|
-
});
|
|
197
|
-
it("SessionStateReadError has formatted message", () => {
|
|
198
|
-
const error = new SessionStateReadError("test-agent", "/path/to/state");
|
|
199
|
-
expect(error.message).toContain("test-agent");
|
|
200
|
-
expect(error.message).toContain("/path/to/state");
|
|
201
|
-
expect(error.code).toBe(SessionErrorCode.STATE_READ_FAILED);
|
|
202
|
-
});
|
|
203
|
-
it("SessionStateWriteError has formatted message", () => {
|
|
204
|
-
const error = new SessionStateWriteError("test-agent", "/path/to/state");
|
|
205
|
-
expect(error.message).toContain("test-agent");
|
|
206
|
-
expect(error.code).toBe(SessionErrorCode.STATE_WRITE_FAILED);
|
|
207
|
-
});
|
|
208
|
-
it("SessionDirectoryCreateError has formatted message", () => {
|
|
209
|
-
const error = new SessionDirectoryCreateError("test-agent", "/path/to/dir");
|
|
210
|
-
expect(error.message).toContain("test-agent");
|
|
211
|
-
expect(error.code).toBe(SessionErrorCode.DIRECTORY_CREATE_FAILED);
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
//# sourceMappingURL=session-manager.test.js.map
|