dot-agents 0.6.0 → 0.7.5

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 (80) hide show
  1. package/dist/cli/commands/channel.d.ts.map +1 -1
  2. package/dist/cli/commands/channel.js +70 -2
  3. package/dist/cli/commands/channel.js.map +1 -1
  4. package/dist/daemon/api/channels.d.ts +6 -0
  5. package/dist/daemon/api/channels.d.ts.map +1 -0
  6. package/dist/daemon/api/channels.js +143 -0
  7. package/dist/daemon/api/channels.js.map +1 -0
  8. package/dist/daemon/api/server.d.ts.map +1 -1
  9. package/dist/daemon/api/server.js +57 -0
  10. package/dist/daemon/api/server.js.map +1 -1
  11. package/dist/daemon/daemon.d.ts +28 -0
  12. package/dist/daemon/daemon.d.ts.map +1 -1
  13. package/dist/daemon/daemon.js +174 -6
  14. package/dist/daemon/daemon.js.map +1 -1
  15. package/dist/daemon/lib/index.d.ts +1 -0
  16. package/dist/daemon/lib/index.d.ts.map +1 -1
  17. package/dist/daemon/lib/index.js +1 -0
  18. package/dist/daemon/lib/index.js.map +1 -1
  19. package/dist/daemon/lib/safeguards.d.ts +135 -0
  20. package/dist/daemon/lib/safeguards.d.ts.map +1 -0
  21. package/dist/daemon/lib/safeguards.js +250 -0
  22. package/dist/daemon/lib/safeguards.js.map +1 -0
  23. package/dist/daemon/lib/watcher.d.ts.map +1 -1
  24. package/dist/daemon/lib/watcher.js +48 -8
  25. package/dist/daemon/lib/watcher.js.map +1 -1
  26. package/dist/daemon/web/app.js +433 -0
  27. package/dist/daemon/web/index.html +68 -0
  28. package/dist/daemon/web/styles.css +452 -0
  29. package/dist/lib/environment.d.ts +1 -0
  30. package/dist/lib/environment.d.ts.map +1 -1
  31. package/dist/lib/environment.js +14 -0
  32. package/dist/lib/environment.js.map +1 -1
  33. package/dist/lib/invoke.d.ts +8 -0
  34. package/dist/lib/invoke.d.ts.map +1 -1
  35. package/dist/lib/invoke.js +28 -16
  36. package/dist/lib/invoke.js.map +1 -1
  37. package/dist/lib/processor.d.ts +8 -0
  38. package/dist/lib/processor.d.ts.map +1 -1
  39. package/dist/lib/processor.js +16 -2
  40. package/dist/lib/processor.js.map +1 -1
  41. package/dist/lib/validation/persona.d.ts.map +1 -1
  42. package/dist/lib/validation/persona.js +41 -4
  43. package/dist/lib/validation/persona.js.map +1 -1
  44. package/package.json +15 -9
  45. package/dist/lib/channel.test.d.ts +0 -2
  46. package/dist/lib/channel.test.d.ts.map +0 -1
  47. package/dist/lib/channel.test.js +0 -33
  48. package/dist/lib/channel.test.js.map +0 -1
  49. package/dist/lib/frontmatter.test.d.ts +0 -2
  50. package/dist/lib/frontmatter.test.d.ts.map +0 -1
  51. package/dist/lib/frontmatter.test.js +0 -60
  52. package/dist/lib/frontmatter.test.js.map +0 -1
  53. package/dist/lib/integration.test.d.ts +0 -2
  54. package/dist/lib/integration.test.d.ts.map +0 -1
  55. package/dist/lib/integration.test.js +0 -445
  56. package/dist/lib/integration.test.js.map +0 -1
  57. package/dist/lib/invoke.test.d.ts +0 -2
  58. package/dist/lib/invoke.test.d.ts.map +0 -1
  59. package/dist/lib/invoke.test.js +0 -82
  60. package/dist/lib/invoke.test.js.map +0 -1
  61. package/dist/lib/persona.test.d.ts +0 -2
  62. package/dist/lib/persona.test.d.ts.map +0 -1
  63. package/dist/lib/persona.test.js +0 -324
  64. package/dist/lib/persona.test.js.map +0 -1
  65. package/dist/lib/processor.test.d.ts +0 -2
  66. package/dist/lib/processor.test.d.ts.map +0 -1
  67. package/dist/lib/processor.test.js +0 -134
  68. package/dist/lib/processor.test.js.map +0 -1
  69. package/dist/lib/registry.test.d.ts +0 -2
  70. package/dist/lib/registry.test.d.ts.map +0 -1
  71. package/dist/lib/registry.test.js +0 -236
  72. package/dist/lib/registry.test.js.map +0 -1
  73. package/dist/lib/session-thread.test.d.ts +0 -2
  74. package/dist/lib/session-thread.test.d.ts.map +0 -1
  75. package/dist/lib/session-thread.test.js +0 -235
  76. package/dist/lib/session-thread.test.js.map +0 -1
  77. package/dist/lib/session.test.d.ts +0 -2
  78. package/dist/lib/session.test.d.ts.map +0 -1
  79. package/dist/lib/session.test.js +0 -336
  80. package/dist/lib/session.test.js.map +0 -1
@@ -1,336 +0,0 @@
1
- import { describe, it, beforeEach, afterEach } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { mkdir, rm, readdir, readFile, writeFile } from "node:fs/promises";
4
- import { join } from "node:path";
5
- import { tmpdir } from "node:os";
6
- import { generateSessionId, parseSessionId, createSession, finalizeSession, getRecentSessions, readSession, } from "./session.js";
7
- describe("generateSessionId", () => {
8
- it("generates ISO-like format with dashes for colons", () => {
9
- const date = new Date("2025-12-22T15:30:45.123Z");
10
- const id = generateSessionId(date);
11
- assert.equal(id, "2025-12-22T15-30-45");
12
- });
13
- it("generates unique IDs for different times", () => {
14
- const date1 = new Date("2025-12-22T15:30:45.000Z");
15
- const date2 = new Date("2025-12-22T15:30:46.000Z");
16
- const id1 = generateSessionId(date1);
17
- const id2 = generateSessionId(date2);
18
- assert.notEqual(id1, id2);
19
- });
20
- });
21
- describe("parseSessionId", () => {
22
- it("parses valid session ID back to Date", () => {
23
- const id = "2025-12-22T15-30-45";
24
- const date = parseSessionId(id);
25
- assert.ok(date);
26
- assert.equal(date.toISOString(), "2025-12-22T15:30:45.000Z");
27
- });
28
- it("returns null for invalid format", () => {
29
- assert.equal(parseSessionId("invalid"), null);
30
- assert.equal(parseSessionId("2025-12-22"), null);
31
- assert.equal(parseSessionId(""), null);
32
- });
33
- });
34
- describe("createSession", () => {
35
- let testDir;
36
- beforeEach(async () => {
37
- testDir = join(tmpdir(), `dot-agents-test-${Date.now()}`);
38
- await mkdir(testDir, { recursive: true });
39
- });
40
- afterEach(async () => {
41
- await rm(testDir, { recursive: true, force: true });
42
- });
43
- it("creates session directory", async () => {
44
- const session = await createSession({
45
- sessionsDir: testDir,
46
- runtime: {
47
- hostname: "test-host",
48
- executionMode: "headless",
49
- triggerType: "manual",
50
- workingDir: "/test",
51
- },
52
- });
53
- const dirs = await readdir(testDir);
54
- assert.equal(dirs.length, 1);
55
- assert.equal(dirs[0], session.id);
56
- });
57
- it("creates session.md with frontmatter", async () => {
58
- const session = await createSession({
59
- sessionsDir: testDir,
60
- runtime: {
61
- hostname: "test-host",
62
- executionMode: "interactive",
63
- triggerType: "cron",
64
- workingDir: "/test/dir",
65
- },
66
- goal: "Test goal",
67
- persona: { name: "developer", inheritanceChain: ["_base", "developer"] },
68
- });
69
- const content = await readFile(session.sessionFile, "utf-8");
70
- assert.ok(content.startsWith("---"));
71
- assert.ok(content.includes("id: " + session.id));
72
- assert.ok(content.includes("goal: Test goal"));
73
- assert.ok(content.includes("hostname: test-host"));
74
- assert.ok(content.includes("executionMode: interactive"));
75
- assert.ok(content.includes("name: developer"));
76
- });
77
- it("includes upstream when provided", async () => {
78
- const session = await createSession({
79
- sessionsDir: testDir,
80
- runtime: {
81
- hostname: "test-host",
82
- executionMode: "headless",
83
- triggerType: "dm",
84
- workingDir: "/test",
85
- },
86
- upstream: "@odin:dottie --session-id abc123",
87
- });
88
- const content = await readFile(session.sessionFile, "utf-8");
89
- assert.ok(content.includes("upstream: \"@odin:dottie --session-id abc123\""));
90
- });
91
- });
92
- describe("finalizeSession", () => {
93
- let testDir;
94
- beforeEach(async () => {
95
- testDir = join(tmpdir(), `dot-agents-test-${Date.now()}`);
96
- await mkdir(testDir, { recursive: true });
97
- });
98
- afterEach(async () => {
99
- await rm(testDir, { recursive: true, force: true });
100
- });
101
- it("updates session.md with results", async () => {
102
- const session = await createSession({
103
- sessionsDir: testDir,
104
- runtime: {
105
- hostname: "test-host",
106
- executionMode: "headless",
107
- triggerType: "manual",
108
- workingDir: "/test",
109
- },
110
- });
111
- await finalizeSession(session, {
112
- success: true,
113
- exitCode: 0,
114
- duration: 1234,
115
- stdout: "output text",
116
- });
117
- const content = await readFile(session.sessionFile, "utf-8");
118
- assert.ok(content.includes("ended:"));
119
- assert.ok(content.includes("success: true"));
120
- assert.ok(content.includes("exitCode: 0"));
121
- assert.ok(content.includes("duration: 1234"));
122
- assert.ok(content.includes("output text"));
123
- });
124
- it("includes error information on failure", async () => {
125
- const session = await createSession({
126
- sessionsDir: testDir,
127
- runtime: {
128
- hostname: "test-host",
129
- executionMode: "headless",
130
- triggerType: "manual",
131
- workingDir: "/test",
132
- },
133
- });
134
- await finalizeSession(session, {
135
- success: false,
136
- exitCode: 1,
137
- duration: 500,
138
- error: "Something went wrong",
139
- stderr: "error output",
140
- });
141
- const content = await readFile(session.sessionFile, "utf-8");
142
- assert.ok(content.includes("success: false"));
143
- assert.ok(content.includes("exitCode: 1"));
144
- assert.ok(content.includes("error: Something went wrong"));
145
- assert.ok(content.includes("error output"));
146
- });
147
- });
148
- describe("getRecentSessions", () => {
149
- let testDir;
150
- beforeEach(async () => {
151
- testDir = join(tmpdir(), `dot-agents-test-${Date.now()}`);
152
- await mkdir(testDir, { recursive: true });
153
- });
154
- afterEach(async () => {
155
- await rm(testDir, { recursive: true, force: true });
156
- });
157
- it("returns empty array for empty directory", async () => {
158
- const sessions = await getRecentSessions(testDir);
159
- assert.deepEqual(sessions, []);
160
- });
161
- it("returns sessions sorted by date (newest first)", async () => {
162
- // Create sessions with explicit different dates
163
- const dates = [
164
- new Date("2025-01-01T10:00:00Z"),
165
- new Date("2025-01-01T12:00:00Z"),
166
- new Date("2025-01-01T11:00:00Z"),
167
- ];
168
- for (const date of dates) {
169
- // Create session directories manually with different IDs
170
- const id = date.toISOString().replace(/:/g, "-").split(".")[0];
171
- const sessionPath = join(testDir, id);
172
- await mkdir(sessionPath, { recursive: true });
173
- const content = `---
174
- id: ${id}
175
- started: ${date.toISOString()}
176
- runtime:
177
- hostname: test
178
- executionMode: headless
179
- triggerType: manual
180
- workingDir: /test
181
- ---
182
-
183
- # Session Log
184
- `;
185
- await writeFile(join(sessionPath, "session.md"), content, "utf-8");
186
- }
187
- const sessions = await getRecentSessions(testDir);
188
- assert.equal(sessions.length, 3);
189
- // Verify sorted newest first (12:00 > 11:00 > 10:00)
190
- assert.equal(sessions[0].id, "2025-01-01T12-00-00");
191
- assert.equal(sessions[1].id, "2025-01-01T11-00-00");
192
- assert.equal(sessions[2].id, "2025-01-01T10-00-00");
193
- });
194
- it("respects limit parameter", async () => {
195
- // Create 5 sessions with explicit different dates
196
- for (let i = 0; i < 5; i++) {
197
- const date = new Date(`2025-01-01T1${i}:00:00Z`);
198
- const id = date.toISOString().replace(/:/g, "-").split(".")[0];
199
- const sessionPath = join(testDir, id);
200
- await mkdir(sessionPath, { recursive: true });
201
- const content = `---
202
- id: ${id}
203
- started: ${date.toISOString()}
204
- runtime:
205
- hostname: test
206
- executionMode: headless
207
- triggerType: manual
208
- workingDir: /test
209
- ---
210
-
211
- # Session Log
212
- `;
213
- await writeFile(join(sessionPath, "session.md"), content, "utf-8");
214
- }
215
- const sessions = await getRecentSessions(testDir, 3);
216
- assert.equal(sessions.length, 3);
217
- });
218
- it("includes metadata when available", async () => {
219
- await createSession({
220
- sessionsDir: testDir,
221
- runtime: {
222
- hostname: "test",
223
- executionMode: "headless",
224
- triggerType: "manual",
225
- workingDir: "/test",
226
- },
227
- persona: { name: "developer" },
228
- workflow: { name: "test-workflow" },
229
- });
230
- const sessions = await getRecentSessions(testDir);
231
- assert.equal(sessions.length, 1);
232
- assert.ok(sessions[0].metadata);
233
- assert.equal(sessions[0].metadata?.persona?.name, "developer");
234
- assert.equal(sessions[0].metadata?.workflow?.name, "test-workflow");
235
- });
236
- });
237
- describe("readSession", () => {
238
- let testDir;
239
- beforeEach(async () => {
240
- testDir = join(tmpdir(), `dot-agents-test-${Date.now()}`);
241
- await mkdir(testDir, { recursive: true });
242
- });
243
- afterEach(async () => {
244
- await rm(testDir, { recursive: true, force: true });
245
- });
246
- it("reads existing session", async () => {
247
- const created = await createSession({
248
- sessionsDir: testDir,
249
- runtime: {
250
- hostname: "test",
251
- executionMode: "headless",
252
- triggerType: "manual",
253
- workingDir: "/test",
254
- },
255
- goal: "Test session",
256
- });
257
- const read = await readSession(testDir, created.id);
258
- assert.ok(read);
259
- assert.equal(read.id, created.id);
260
- assert.equal(read.metadata.goal, "Test session");
261
- });
262
- it("returns null for non-existent session", async () => {
263
- const result = await readSession(testDir, "non-existent-id");
264
- assert.equal(result, null);
265
- });
266
- it("reads session content (body) from session.md", async () => {
267
- // Create a session directory with custom content in session.md
268
- const sessionId = "2025-12-23T10-00-00";
269
- const sessionPath = join(testDir, sessionId);
270
- await mkdir(sessionPath, { recursive: true });
271
- const sessionContent = `---
272
- id: ${sessionId}
273
- started: 2025-12-23T10:00:00.000Z
274
- runtime:
275
- hostname: test
276
- executionMode: interactive
277
- triggerType: manual
278
- workingDir: /test
279
- goal: "Work on feature X"
280
- ---
281
-
282
- # Session Log
283
-
284
- Session started.
285
-
286
- ## Task Progress
287
-
288
- - Investigated the issue
289
- - Found the root cause in src/lib/foo.ts
290
- - Started implementing the fix
291
-
292
- ## Next Steps
293
-
294
- - Complete the implementation
295
- - Add tests
296
- `;
297
- await writeFile(join(sessionPath, "session.md"), sessionContent, "utf-8");
298
- const read = await readSession(testDir, sessionId);
299
- assert.ok(read);
300
- assert.equal(read.id, sessionId);
301
- assert.equal(read.metadata.goal, "Work on feature X");
302
- assert.ok(read.content);
303
- assert.ok(read.content.includes("# Session Log"));
304
- assert.ok(read.content.includes("Investigated the issue"));
305
- assert.ok(read.content.includes("Found the root cause"));
306
- assert.ok(read.content.includes("Complete the implementation"));
307
- });
308
- it("returns undefined content for session with empty body", async () => {
309
- const created = await createSession({
310
- sessionsDir: testDir,
311
- runtime: {
312
- hostname: "test",
313
- executionMode: "headless",
314
- triggerType: "manual",
315
- workingDir: "/test",
316
- },
317
- });
318
- // Overwrite with empty body
319
- const emptyContent = `---
320
- id: ${created.id}
321
- started: 2025-12-23T10:00:00.000Z
322
- runtime:
323
- hostname: test
324
- executionMode: headless
325
- triggerType: manual
326
- workingDir: /test
327
- ---
328
-
329
- `;
330
- await writeFile(created.sessionFile, emptyContent, "utf-8");
331
- const read = await readSession(testDir, created.id);
332
- assert.ok(read);
333
- assert.equal(read.content, undefined);
334
- });
335
- });
336
- //# sourceMappingURL=session.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../src/lib/session.test.ts"],"names":[],"mappings":"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"}