@herdctl/discord 0.2.2 → 1.0.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 (83) hide show
  1. package/dist/__tests__/auto-mode-handler.test.js +1 -28
  2. package/dist/__tests__/auto-mode-handler.test.js.map +1 -1
  3. package/dist/__tests__/discord-connector.test.js +1 -0
  4. package/dist/__tests__/discord-connector.test.js.map +1 -1
  5. package/dist/__tests__/error-handler.test.js +1 -1
  6. package/dist/__tests__/error-handler.test.js.map +1 -1
  7. package/dist/__tests__/manager.test.d.ts +8 -0
  8. package/dist/__tests__/manager.test.d.ts.map +1 -0
  9. package/dist/__tests__/manager.test.js +3541 -0
  10. package/dist/__tests__/manager.test.js.map +1 -0
  11. package/dist/auto-mode-handler.d.ts +8 -39
  12. package/dist/auto-mode-handler.d.ts.map +1 -1
  13. package/dist/auto-mode-handler.js +12 -78
  14. package/dist/auto-mode-handler.js.map +1 -1
  15. package/dist/commands/__tests__/command-manager.test.js +1 -0
  16. package/dist/commands/__tests__/command-manager.test.js.map +1 -1
  17. package/dist/commands/__tests__/help.test.js +1 -0
  18. package/dist/commands/__tests__/help.test.js.map +1 -1
  19. package/dist/commands/__tests__/reset.test.js +1 -0
  20. package/dist/commands/__tests__/reset.test.js.map +1 -1
  21. package/dist/commands/__tests__/status.test.js +1 -0
  22. package/dist/commands/__tests__/status.test.js.map +1 -1
  23. package/dist/commands/command-manager.d.ts.map +1 -1
  24. package/dist/commands/command-manager.js.map +1 -1
  25. package/dist/commands/status.d.ts.map +1 -1
  26. package/dist/commands/status.js +1 -54
  27. package/dist/commands/status.js.map +1 -1
  28. package/dist/commands/types.d.ts +3 -3
  29. package/dist/commands/types.d.ts.map +1 -1
  30. package/dist/discord-connector.d.ts +2 -2
  31. package/dist/discord-connector.d.ts.map +1 -1
  32. package/dist/discord-connector.js.map +1 -1
  33. package/dist/error-handler.js +1 -1
  34. package/dist/error-handler.js.map +1 -1
  35. package/dist/index.d.ts +13 -13
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +15 -15
  38. package/dist/index.js.map +1 -1
  39. package/dist/manager.d.ts +195 -0
  40. package/dist/manager.d.ts.map +1 -0
  41. package/dist/manager.js +851 -0
  42. package/dist/manager.js.map +1 -0
  43. package/dist/types.d.ts +2 -2
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/utils/__tests__/formatting.test.js +1 -247
  46. package/dist/utils/__tests__/formatting.test.js.map +1 -1
  47. package/dist/utils/formatting.d.ts +11 -99
  48. package/dist/utils/formatting.d.ts.map +1 -1
  49. package/dist/utils/formatting.js +15 -163
  50. package/dist/utils/formatting.js.map +1 -1
  51. package/dist/utils/index.d.ts +1 -1
  52. package/dist/utils/index.d.ts.map +1 -1
  53. package/dist/utils/index.js +2 -2
  54. package/dist/utils/index.js.map +1 -1
  55. package/package.json +3 -4
  56. package/dist/session-manager/__tests__/errors.test.d.ts +0 -2
  57. package/dist/session-manager/__tests__/errors.test.d.ts.map +0 -1
  58. package/dist/session-manager/__tests__/errors.test.js +0 -124
  59. package/dist/session-manager/__tests__/errors.test.js.map +0 -1
  60. package/dist/session-manager/__tests__/session-manager.test.d.ts +0 -2
  61. package/dist/session-manager/__tests__/session-manager.test.d.ts.map +0 -1
  62. package/dist/session-manager/__tests__/session-manager.test.js +0 -573
  63. package/dist/session-manager/__tests__/session-manager.test.js.map +0 -1
  64. package/dist/session-manager/__tests__/types.test.d.ts +0 -2
  65. package/dist/session-manager/__tests__/types.test.d.ts.map +0 -1
  66. package/dist/session-manager/__tests__/types.test.js +0 -169
  67. package/dist/session-manager/__tests__/types.test.js.map +0 -1
  68. package/dist/session-manager/errors.d.ts +0 -58
  69. package/dist/session-manager/errors.d.ts.map +0 -1
  70. package/dist/session-manager/errors.js +0 -70
  71. package/dist/session-manager/errors.js.map +0 -1
  72. package/dist/session-manager/index.d.ts +0 -11
  73. package/dist/session-manager/index.d.ts.map +0 -1
  74. package/dist/session-manager/index.js +0 -12
  75. package/dist/session-manager/index.js.map +0 -1
  76. package/dist/session-manager/session-manager.d.ts +0 -119
  77. package/dist/session-manager/session-manager.d.ts.map +0 -1
  78. package/dist/session-manager/session-manager.js +0 -383
  79. package/dist/session-manager/session-manager.js.map +0 -1
  80. package/dist/session-manager/types.d.ts +0 -186
  81. package/dist/session-manager/types.d.ts.map +0 -1
  82. package/dist/session-manager/types.js +0 -57
  83. package/dist/session-manager/types.js.map +0 -1
@@ -1,573 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, writeFile, readFile, rm } from "node:fs/promises";
3
- import { join } from "node:path";
4
- import { tmpdir } from "node:os";
5
- import { randomBytes } from "node:crypto";
6
- import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
7
- import { SessionManager } from "../session-manager.js";
8
- import { SessionStateReadError, } from "../errors.js";
9
- // =============================================================================
10
- // Test Fixtures
11
- // =============================================================================
12
- function createTestDir() {
13
- const random = randomBytes(8).toString("hex");
14
- return join(tmpdir(), `herdctl-session-test-${random}`);
15
- }
16
- function createMockLogger() {
17
- return {
18
- debug: vi.fn(),
19
- info: vi.fn(),
20
- warn: vi.fn(),
21
- error: vi.fn(),
22
- };
23
- }
24
- // =============================================================================
25
- // Session Manager Tests
26
- // =============================================================================
27
- describe("SessionManager", () => {
28
- let testDir;
29
- let mockLogger;
30
- beforeEach(async () => {
31
- testDir = createTestDir();
32
- await mkdir(testDir, { recursive: true });
33
- mockLogger = createMockLogger();
34
- vi.clearAllMocks();
35
- });
36
- afterEach(async () => {
37
- try {
38
- await rm(testDir, { recursive: true, force: true });
39
- }
40
- catch {
41
- // Ignore cleanup errors
42
- }
43
- });
44
- // ===========================================================================
45
- // Constructor Tests
46
- // ===========================================================================
47
- describe("constructor", () => {
48
- it("creates session manager with valid options", () => {
49
- const manager = new SessionManager({
50
- agentName: "test-agent",
51
- stateDir: testDir,
52
- logger: mockLogger,
53
- });
54
- expect(manager.agentName).toBe("test-agent");
55
- });
56
- it("uses default expiry hours when not specified", async () => {
57
- const manager = new SessionManager({
58
- agentName: "test-agent",
59
- stateDir: testDir,
60
- logger: mockLogger,
61
- });
62
- // Create a session
63
- await manager.getOrCreateSession("channel-1");
64
- // Read the state file to verify it was created
65
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
66
- const content = await readFile(stateFilePath, "utf-8");
67
- const state = parseYaml(content);
68
- expect(state.channels["channel-1"]).toBeDefined();
69
- });
70
- it("accepts custom expiry hours", () => {
71
- const manager = new SessionManager({
72
- agentName: "test-agent",
73
- stateDir: testDir,
74
- sessionExpiryHours: 48,
75
- logger: mockLogger,
76
- });
77
- expect(manager.agentName).toBe("test-agent");
78
- });
79
- });
80
- // ===========================================================================
81
- // getOrCreateSession Tests
82
- // ===========================================================================
83
- describe("getOrCreateSession", () => {
84
- it("creates new session when none exists", async () => {
85
- const manager = new SessionManager({
86
- agentName: "test-agent",
87
- stateDir: testDir,
88
- logger: mockLogger,
89
- });
90
- const result = await manager.getOrCreateSession("channel-123");
91
- expect(result.isNew).toBe(true);
92
- expect(result.sessionId).toMatch(/^discord-test-agent-/);
93
- expect(mockLogger.info).toHaveBeenCalledWith("Created new session", expect.objectContaining({ channelId: "channel-123" }));
94
- });
95
- it("returns existing session when one exists", async () => {
96
- const manager = new SessionManager({
97
- agentName: "test-agent",
98
- stateDir: testDir,
99
- logger: mockLogger,
100
- });
101
- // Create first session
102
- const first = await manager.getOrCreateSession("channel-123");
103
- // Get session again
104
- const second = await manager.getOrCreateSession("channel-123");
105
- expect(second.isNew).toBe(false);
106
- expect(second.sessionId).toBe(first.sessionId);
107
- expect(mockLogger.info).toHaveBeenCalledWith("Resuming existing session", expect.objectContaining({
108
- channelId: "channel-123",
109
- sessionId: first.sessionId,
110
- }));
111
- });
112
- it("creates different sessions for different channels", async () => {
113
- const manager = new SessionManager({
114
- agentName: "test-agent",
115
- stateDir: testDir,
116
- logger: mockLogger,
117
- });
118
- const session1 = await manager.getOrCreateSession("channel-1");
119
- const session2 = await manager.getOrCreateSession("channel-2");
120
- expect(session1.sessionId).not.toBe(session2.sessionId);
121
- expect(session1.isNew).toBe(true);
122
- expect(session2.isNew).toBe(true);
123
- });
124
- it("creates new session when previous is expired", async () => {
125
- const manager = new SessionManager({
126
- agentName: "test-agent",
127
- stateDir: testDir,
128
- sessionExpiryHours: 1, // 1 hour expiry
129
- logger: mockLogger,
130
- });
131
- // Create initial session
132
- const first = await manager.getOrCreateSession("channel-123");
133
- // Manually update state to have old timestamp
134
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
135
- const content = await readFile(stateFilePath, "utf-8");
136
- const state = parseYaml(content);
137
- // Set last message to 2 hours ago
138
- const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000);
139
- state.channels["channel-123"].lastMessageAt = twoHoursAgo.toISOString();
140
- await writeFile(stateFilePath, stringifyYaml(state), "utf-8");
141
- // Clear cache by creating new manager
142
- const manager2 = new SessionManager({
143
- agentName: "test-agent",
144
- stateDir: testDir,
145
- sessionExpiryHours: 1,
146
- logger: mockLogger,
147
- });
148
- // Get session again - should be new
149
- const second = await manager2.getOrCreateSession("channel-123");
150
- expect(second.isNew).toBe(true);
151
- expect(second.sessionId).not.toBe(first.sessionId);
152
- });
153
- it("creates discord-sessions directory if it doesn't exist", async () => {
154
- const manager = new SessionManager({
155
- agentName: "test-agent",
156
- stateDir: testDir,
157
- logger: mockLogger,
158
- });
159
- await manager.getOrCreateSession("channel-123");
160
- // Verify directory was created
161
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
162
- const content = await readFile(stateFilePath, "utf-8");
163
- expect(content).toBeTruthy();
164
- });
165
- it("persists state to YAML file", async () => {
166
- const manager = new SessionManager({
167
- agentName: "test-agent",
168
- stateDir: testDir,
169
- logger: mockLogger,
170
- });
171
- const result = await manager.getOrCreateSession("channel-123");
172
- // Read and verify the state file
173
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
174
- const content = await readFile(stateFilePath, "utf-8");
175
- const state = parseYaml(content);
176
- expect(state.version).toBe(1);
177
- expect(state.agentName).toBe("test-agent");
178
- expect(state.channels["channel-123"].sessionId).toBe(result.sessionId);
179
- expect(state.channels["channel-123"].lastMessageAt).toBeTruthy();
180
- });
181
- });
182
- // ===========================================================================
183
- // touchSession Tests
184
- // ===========================================================================
185
- describe("touchSession", () => {
186
- it("updates lastMessageAt timestamp", async () => {
187
- const manager = new SessionManager({
188
- agentName: "test-agent",
189
- stateDir: testDir,
190
- logger: mockLogger,
191
- });
192
- // Create session
193
- await manager.getOrCreateSession("channel-123");
194
- // Wait a bit
195
- await new Promise((resolve) => setTimeout(resolve, 50));
196
- // Touch the session
197
- await manager.touchSession("channel-123");
198
- // Read state and verify timestamp was updated
199
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
200
- const content = await readFile(stateFilePath, "utf-8");
201
- const state = parseYaml(content);
202
- const lastMessageAt = new Date(state.channels["channel-123"].lastMessageAt);
203
- const now = new Date();
204
- // Should be within last second
205
- expect(now.getTime() - lastMessageAt.getTime()).toBeLessThan(1000);
206
- });
207
- it("warns when touching non-existent session", async () => {
208
- const manager = new SessionManager({
209
- agentName: "test-agent",
210
- stateDir: testDir,
211
- logger: mockLogger,
212
- });
213
- await manager.touchSession("non-existent-channel");
214
- expect(mockLogger.warn).toHaveBeenCalledWith("Attempted to touch non-existent session", { channelId: "non-existent-channel" });
215
- });
216
- });
217
- // ===========================================================================
218
- // getSession Tests
219
- // ===========================================================================
220
- describe("getSession", () => {
221
- it("returns null when no session exists", async () => {
222
- const manager = new SessionManager({
223
- agentName: "test-agent",
224
- stateDir: testDir,
225
- logger: mockLogger,
226
- });
227
- const session = await manager.getSession("channel-123");
228
- expect(session).toBeNull();
229
- });
230
- it("returns session when it exists and is not expired", async () => {
231
- const manager = new SessionManager({
232
- agentName: "test-agent",
233
- stateDir: testDir,
234
- logger: mockLogger,
235
- });
236
- // Create session
237
- const created = await manager.getOrCreateSession("channel-123");
238
- // Get session
239
- const session = await manager.getSession("channel-123");
240
- expect(session).not.toBeNull();
241
- expect(session.sessionId).toBe(created.sessionId);
242
- });
243
- it("returns null when session is expired", async () => {
244
- const manager = new SessionManager({
245
- agentName: "test-agent",
246
- stateDir: testDir,
247
- sessionExpiryHours: 1,
248
- logger: mockLogger,
249
- });
250
- // Create session
251
- await manager.getOrCreateSession("channel-123");
252
- // Manually update state to have old timestamp
253
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
254
- const content = await readFile(stateFilePath, "utf-8");
255
- const state = parseYaml(content);
256
- // Set last message to 2 hours ago
257
- const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000);
258
- state.channels["channel-123"].lastMessageAt = twoHoursAgo.toISOString();
259
- await writeFile(stateFilePath, stringifyYaml(state), "utf-8");
260
- // Clear cache by creating new manager
261
- const manager2 = new SessionManager({
262
- agentName: "test-agent",
263
- stateDir: testDir,
264
- sessionExpiryHours: 1,
265
- logger: mockLogger,
266
- });
267
- // Get session - should be null
268
- const session = await manager2.getSession("channel-123");
269
- expect(session).toBeNull();
270
- expect(mockLogger.info).toHaveBeenCalledWith("Session expired", expect.objectContaining({ channelId: "channel-123" }));
271
- });
272
- });
273
- // ===========================================================================
274
- // setSession Tests
275
- // ===========================================================================
276
- describe("setSession", () => {
277
- it("stores a new session for a channel", async () => {
278
- const manager = new SessionManager({
279
- agentName: "test-agent",
280
- stateDir: testDir,
281
- logger: mockLogger,
282
- });
283
- await manager.setSession("channel-123", "sdk-session-456");
284
- // Verify session was stored
285
- const session = await manager.getSession("channel-123");
286
- expect(session).toBeDefined();
287
- expect(session?.sessionId).toBe("sdk-session-456");
288
- expect(mockLogger.info).toHaveBeenCalledWith("Stored new session", expect.objectContaining({
289
- channelId: "channel-123",
290
- sessionId: "sdk-session-456",
291
- }));
292
- });
293
- it("updates an existing session with a new session ID", async () => {
294
- const manager = new SessionManager({
295
- agentName: "test-agent",
296
- stateDir: testDir,
297
- logger: mockLogger,
298
- });
299
- // Store initial session
300
- await manager.setSession("channel-123", "old-session-id");
301
- // Update with new session ID
302
- await manager.setSession("channel-123", "new-session-id");
303
- // Verify session was updated
304
- const session = await manager.getSession("channel-123");
305
- expect(session).toBeDefined();
306
- expect(session?.sessionId).toBe("new-session-id");
307
- expect(mockLogger.debug).toHaveBeenCalledWith("Updated session", expect.objectContaining({
308
- channelId: "channel-123",
309
- oldSessionId: "old-session-id",
310
- newSessionId: "new-session-id",
311
- }));
312
- });
313
- it("updates the lastMessageAt timestamp", async () => {
314
- const manager = new SessionManager({
315
- agentName: "test-agent",
316
- stateDir: testDir,
317
- logger: mockLogger,
318
- });
319
- const beforeSet = new Date();
320
- await manager.setSession("channel-123", "sdk-session-456");
321
- const afterSet = new Date();
322
- const session = await manager.getSession("channel-123");
323
- expect(session).toBeDefined();
324
- const lastMessageAt = new Date(session.lastMessageAt);
325
- expect(lastMessageAt.getTime()).toBeGreaterThanOrEqual(beforeSet.getTime());
326
- expect(lastMessageAt.getTime()).toBeLessThanOrEqual(afterSet.getTime());
327
- });
328
- });
329
- // ===========================================================================
330
- // clearSession Tests
331
- // ===========================================================================
332
- describe("clearSession", () => {
333
- it("returns false when no session exists", async () => {
334
- const manager = new SessionManager({
335
- agentName: "test-agent",
336
- stateDir: testDir,
337
- logger: mockLogger,
338
- });
339
- const result = await manager.clearSession("channel-123");
340
- expect(result).toBe(false);
341
- });
342
- it("clears existing session and returns true", async () => {
343
- const manager = new SessionManager({
344
- agentName: "test-agent",
345
- stateDir: testDir,
346
- logger: mockLogger,
347
- });
348
- // Create session
349
- await manager.getOrCreateSession("channel-123");
350
- // Clear it
351
- const result = await manager.clearSession("channel-123");
352
- expect(result).toBe(true);
353
- expect(mockLogger.info).toHaveBeenCalledWith("Cleared session", expect.objectContaining({ channelId: "channel-123" }));
354
- // Verify it's gone
355
- const session = await manager.getSession("channel-123");
356
- expect(session).toBeNull();
357
- });
358
- it("only clears the specified session", async () => {
359
- const manager = new SessionManager({
360
- agentName: "test-agent",
361
- stateDir: testDir,
362
- logger: mockLogger,
363
- });
364
- // Create sessions
365
- await manager.getOrCreateSession("channel-1");
366
- const session2 = await manager.getOrCreateSession("channel-2");
367
- // Clear only channel-1
368
- await manager.clearSession("channel-1");
369
- // Verify channel-2 still exists
370
- const remaining = await manager.getSession("channel-2");
371
- expect(remaining).not.toBeNull();
372
- expect(remaining.sessionId).toBe(session2.sessionId);
373
- });
374
- });
375
- // ===========================================================================
376
- // cleanupExpiredSessions Tests
377
- // ===========================================================================
378
- describe("cleanupExpiredSessions", () => {
379
- it("returns 0 when no sessions exist", async () => {
380
- const manager = new SessionManager({
381
- agentName: "test-agent",
382
- stateDir: testDir,
383
- logger: mockLogger,
384
- });
385
- const count = await manager.cleanupExpiredSessions();
386
- expect(count).toBe(0);
387
- });
388
- it("returns 0 when no sessions are expired", async () => {
389
- const manager = new SessionManager({
390
- agentName: "test-agent",
391
- stateDir: testDir,
392
- logger: mockLogger,
393
- });
394
- // Create sessions
395
- await manager.getOrCreateSession("channel-1");
396
- await manager.getOrCreateSession("channel-2");
397
- const count = await manager.cleanupExpiredSessions();
398
- expect(count).toBe(0);
399
- });
400
- it("cleans up expired sessions", async () => {
401
- const manager = new SessionManager({
402
- agentName: "test-agent",
403
- stateDir: testDir,
404
- sessionExpiryHours: 1,
405
- logger: mockLogger,
406
- });
407
- // Create sessions
408
- await manager.getOrCreateSession("channel-1");
409
- await manager.getOrCreateSession("channel-2");
410
- await manager.getOrCreateSession("channel-3");
411
- // Manually expire some sessions
412
- const stateFilePath = join(testDir, "discord-sessions", "test-agent.yaml");
413
- const content = await readFile(stateFilePath, "utf-8");
414
- const state = parseYaml(content);
415
- // Expire channel-1 and channel-3 (2 hours ago)
416
- const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000);
417
- state.channels["channel-1"].lastMessageAt = twoHoursAgo.toISOString();
418
- state.channels["channel-3"].lastMessageAt = twoHoursAgo.toISOString();
419
- await writeFile(stateFilePath, stringifyYaml(state), "utf-8");
420
- // Clear cache by creating new manager
421
- const manager2 = new SessionManager({
422
- agentName: "test-agent",
423
- stateDir: testDir,
424
- sessionExpiryHours: 1,
425
- logger: mockLogger,
426
- });
427
- // Cleanup
428
- const count = await manager2.cleanupExpiredSessions();
429
- expect(count).toBe(2);
430
- expect(mockLogger.info).toHaveBeenCalledWith("Cleaned up expired sessions", { count: 2 });
431
- // Verify channel-2 still exists
432
- const session2 = await manager2.getSession("channel-2");
433
- expect(session2).not.toBeNull();
434
- // Verify channel-1 and channel-3 are gone
435
- const session1 = await manager2.getSession("channel-1");
436
- const session3 = await manager2.getSession("channel-3");
437
- expect(session1).toBeNull();
438
- expect(session3).toBeNull();
439
- });
440
- });
441
- // ===========================================================================
442
- // State File Recovery Tests
443
- // ===========================================================================
444
- describe("state file recovery", () => {
445
- it("creates fresh state when file is corrupted", async () => {
446
- // Write corrupted YAML
447
- const stateDir = join(testDir, "discord-sessions");
448
- await mkdir(stateDir, { recursive: true });
449
- await writeFile(join(stateDir, "test-agent.yaml"), "invalid: yaml: content: {{");
450
- const manager = new SessionManager({
451
- agentName: "test-agent",
452
- stateDir: testDir,
453
- logger: mockLogger,
454
- });
455
- // Should still work
456
- const result = await manager.getOrCreateSession("channel-123");
457
- expect(result.isNew).toBe(true);
458
- expect(mockLogger.warn).toHaveBeenCalledWith("Corrupted session state file, creating fresh state", expect.any(Object));
459
- });
460
- it("creates fresh state when file has invalid schema", async () => {
461
- // Write valid YAML but invalid schema
462
- const stateDir = join(testDir, "discord-sessions");
463
- await mkdir(stateDir, { recursive: true });
464
- await writeFile(join(stateDir, "test-agent.yaml"), stringifyYaml({ version: 999, invalid: true }));
465
- const manager = new SessionManager({
466
- agentName: "test-agent",
467
- stateDir: testDir,
468
- logger: mockLogger,
469
- });
470
- // Should still work
471
- const result = await manager.getOrCreateSession("channel-123");
472
- expect(result.isNew).toBe(true);
473
- expect(mockLogger.warn).toHaveBeenCalledWith("Corrupted session state file, creating fresh state", expect.any(Object));
474
- });
475
- it("creates fresh state when file is empty", async () => {
476
- // Write empty file
477
- const stateDir = join(testDir, "discord-sessions");
478
- await mkdir(stateDir, { recursive: true });
479
- await writeFile(join(stateDir, "test-agent.yaml"), "");
480
- const manager = new SessionManager({
481
- agentName: "test-agent",
482
- stateDir: testDir,
483
- logger: mockLogger,
484
- });
485
- // Should still work
486
- const result = await manager.getOrCreateSession("channel-123");
487
- expect(result.isNew).toBe(true);
488
- });
489
- });
490
- // ===========================================================================
491
- // agentName Property Tests
492
- // ===========================================================================
493
- describe("agentName", () => {
494
- it("returns the agent name from options", () => {
495
- const manager = new SessionManager({
496
- agentName: "my-test-agent",
497
- stateDir: testDir,
498
- logger: mockLogger,
499
- });
500
- expect(manager.agentName).toBe("my-test-agent");
501
- });
502
- });
503
- // ===========================================================================
504
- // Session ID Format Tests
505
- // ===========================================================================
506
- describe("session ID format", () => {
507
- it("generates session IDs with expected format", async () => {
508
- const manager = new SessionManager({
509
- agentName: "my-agent",
510
- stateDir: testDir,
511
- logger: mockLogger,
512
- });
513
- const result = await manager.getOrCreateSession("channel-123");
514
- // Should match pattern: discord-<agent-name>-<uuid>
515
- expect(result.sessionId).toMatch(/^discord-my-agent-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
516
- });
517
- });
518
- // ===========================================================================
519
- // Concurrent Access Tests
520
- // ===========================================================================
521
- describe("concurrent access", () => {
522
- it("handles concurrent getOrCreateSession calls", async () => {
523
- const manager = new SessionManager({
524
- agentName: "test-agent",
525
- stateDir: testDir,
526
- logger: mockLogger,
527
- });
528
- // Make concurrent calls
529
- const promises = [
530
- manager.getOrCreateSession("channel-1"),
531
- manager.getOrCreateSession("channel-2"),
532
- manager.getOrCreateSession("channel-3"),
533
- ];
534
- const results = await Promise.all(promises);
535
- // All should succeed
536
- expect(results[0].isNew).toBe(true);
537
- expect(results[1].isNew).toBe(true);
538
- expect(results[2].isNew).toBe(true);
539
- // Each should have unique session ID
540
- const sessionIds = new Set(results.map((r) => r.sessionId));
541
- expect(sessionIds.size).toBe(3);
542
- });
543
- });
544
- });
545
- // =============================================================================
546
- // Error Tests
547
- // =============================================================================
548
- describe("SessionManager errors", () => {
549
- let mockLogger;
550
- beforeEach(() => {
551
- mockLogger = createMockLogger();
552
- vi.clearAllMocks();
553
- });
554
- describe("SessionStateReadError", () => {
555
- it("is thrown on permission errors", async () => {
556
- // Create a directory that looks like a file (causes read to fail)
557
- const testDir = createTestDir();
558
- const stateDir = join(testDir, "discord-sessions");
559
- await mkdir(stateDir, { recursive: true });
560
- // Create the state file as a directory (which will cause read to fail)
561
- await mkdir(join(stateDir, "test-agent.yaml"));
562
- const manager = new SessionManager({
563
- agentName: "test-agent",
564
- stateDir: testDir,
565
- logger: mockLogger,
566
- });
567
- await expect(manager.getOrCreateSession("channel-123")).rejects.toThrow(SessionStateReadError);
568
- // Cleanup
569
- await rm(testDir, { recursive: true, force: true });
570
- });
571
- });
572
- });
573
- //# sourceMappingURL=session-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.test.js","sourceRoot":"","sources":["../../../src/session-manager/__tests__/session-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../../src/session-manager/__tests__/types.test.ts"],"names":[],"mappings":""}