agent-office 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +259 -228
- package/dist/commands/cron-requests.d.ts +7 -0
- package/dist/commands/cron-requests.d.ts.map +1 -0
- package/dist/commands/cron-requests.js +31 -0
- package/dist/commands/cron-requests.js.map +1 -0
- package/dist/commands/crons.d.ts +10 -0
- package/dist/commands/crons.d.ts.map +1 -0
- package/dist/commands/crons.js +45 -0
- package/dist/commands/crons.js.map +1 -0
- package/dist/commands/hello.d.ts +5 -0
- package/dist/commands/hello.d.ts.map +1 -0
- package/dist/commands/hello.js +4 -0
- package/dist/commands/hello.js.map +1 -0
- package/dist/commands/messages.d.ts +5 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +18 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/sessions.d.ts +13 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +58 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/task-columns.d.ts +2 -0
- package/dist/commands/task-columns.d.ts.map +1 -0
- package/dist/commands/task-columns.js +13 -0
- package/dist/commands/task-columns.js.map +1 -0
- package/dist/commands/tasks.d.ts +11 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +75 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +50 -0
- package/dist/config.test.js.map +1 -0
- package/dist/db/index.d.ts +6 -70
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -11
- package/dist/db/index.js.map +1 -0
- package/dist/db/mock-storage.d.ts +79 -0
- package/dist/db/mock-storage.d.ts.map +1 -0
- package/dist/db/mock-storage.js +381 -0
- package/dist/db/mock-storage.js.map +1 -0
- package/dist/db/mock-storage.test.d.ts +2 -0
- package/dist/db/mock-storage.test.d.ts.map +1 -0
- package/dist/db/mock-storage.test.js +234 -0
- package/dist/db/mock-storage.test.js.map +1 -0
- package/dist/db/postgresql-storage.d.ts +10 -8
- package/dist/db/postgresql-storage.d.ts.map +1 -0
- package/dist/db/postgresql-storage.js +76 -42
- package/dist/db/postgresql-storage.js.map +1 -0
- package/dist/db/sqlite-storage.d.ts +9 -8
- package/dist/db/sqlite-storage.d.ts.map +1 -0
- package/dist/db/sqlite-storage.js +75 -41
- package/dist/db/sqlite-storage.js.map +1 -0
- package/dist/db/storage-base.d.ts +7 -8
- package/dist/db/storage-base.d.ts.map +1 -0
- package/dist/db/storage-base.js +3 -2
- package/dist/db/storage-base.js.map +1 -0
- package/dist/db/storage.d.ts +12 -12
- package/dist/db/storage.d.ts.map +1 -0
- package/dist/db/storage.js +1 -0
- package/dist/db/storage.js.map +1 -0
- package/dist/db/types.d.ts +67 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +397 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +49 -0
- package/dist/index.test.js.map +1 -0
- package/dist/lib/output.d.ts +2 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +8 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/services/cron-service.constraints.test.d.ts +2 -0
- package/dist/services/cron-service.constraints.test.d.ts.map +1 -0
- package/dist/services/cron-service.constraints.test.js +90 -0
- package/dist/services/cron-service.constraints.test.js.map +1 -0
- package/dist/services/cron-service.d.ts +45 -0
- package/dist/services/cron-service.d.ts.map +1 -0
- package/dist/services/cron-service.js +157 -0
- package/dist/services/cron-service.js.map +1 -0
- package/dist/services/cron-service.test.d.ts +2 -0
- package/dist/services/cron-service.test.d.ts.map +1 -0
- package/dist/services/cron-service.test.js +280 -0
- package/dist/services/cron-service.test.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/message-service.d.ts +16 -0
- package/dist/services/message-service.d.ts.map +1 -0
- package/dist/services/message-service.js +39 -0
- package/dist/services/message-service.js.map +1 -0
- package/dist/services/message-service.test.d.ts +2 -0
- package/dist/services/message-service.test.d.ts.map +1 -0
- package/dist/services/message-service.test.js +145 -0
- package/dist/services/message-service.test.js.map +1 -0
- package/dist/services/session-service.constraints.test.d.ts +2 -0
- package/dist/services/session-service.constraints.test.d.ts.map +1 -0
- package/dist/services/session-service.constraints.test.js +34 -0
- package/dist/services/session-service.constraints.test.js.map +1 -0
- package/dist/services/session-service.d.ts +27 -0
- package/dist/services/session-service.d.ts.map +1 -0
- package/dist/services/session-service.js +55 -0
- package/dist/services/session-service.js.map +1 -0
- package/dist/services/session-service.test.d.ts +2 -0
- package/dist/services/session-service.test.d.ts.map +1 -0
- package/dist/services/session-service.test.js +87 -0
- package/dist/services/session-service.test.js.map +1 -0
- package/dist/services/task-service.d.ts +25 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +87 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/services/task-service.test.d.ts +2 -0
- package/dist/services/task-service.test.d.ts.map +1 -0
- package/dist/services/task-service.test.js +180 -0
- package/dist/services/task-service.test.js.map +1 -0
- package/package.json +41 -42
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -317
- package/dist/commands/communicator.d.ts +0 -9
- package/dist/commands/communicator.js +0 -2232
- package/dist/commands/manage.d.ts +0 -5
- package/dist/commands/manage.js +0 -20
- package/dist/commands/notifier.d.ts +0 -11
- package/dist/commands/notifier.js +0 -100
- package/dist/commands/screensaver.d.ts +0 -8
- package/dist/commands/screensaver.js +0 -1280
- package/dist/commands/serve.d.ts +0 -13
- package/dist/commands/serve.js +0 -95
- package/dist/commands/task-board.d.ts +0 -29
- package/dist/commands/task-board.js +0 -251
- package/dist/commands/worker.d.ts +0 -16
- package/dist/commands/worker.js +0 -145
- package/dist/db/migrate.d.ts +0 -2
- package/dist/db/migrate.js +0 -3
- package/dist/lib/agentic-coding-server.d.ts +0 -66
- package/dist/lib/agentic-coding-server.js +0 -7
- package/dist/lib/notifier.d.ts +0 -18
- package/dist/lib/notifier.js +0 -15
- package/dist/lib/opencode-coding-server.d.ts +0 -11
- package/dist/lib/opencode-coding-server.js +0 -66
- package/dist/lib/pi-coding-server.d.ts +0 -20
- package/dist/lib/pi-coding-server.js +0 -162
- package/dist/manage/app.d.ts +0 -6
- package/dist/manage/app.js +0 -128
- package/dist/manage/components/AgentCode.d.ts +0 -8
- package/dist/manage/components/AgentCode.js +0 -73
- package/dist/manage/components/CreateSession.d.ts +0 -8
- package/dist/manage/components/CreateSession.js +0 -37
- package/dist/manage/components/CronList.d.ts +0 -9
- package/dist/manage/components/CronList.js +0 -321
- package/dist/manage/components/CronRequests.d.ts +0 -8
- package/dist/manage/components/CronRequests.js +0 -181
- package/dist/manage/components/DeleteSession.d.ts +0 -7
- package/dist/manage/components/DeleteSession.js +0 -55
- package/dist/manage/components/InjectText.d.ts +0 -8
- package/dist/manage/components/InjectText.js +0 -51
- package/dist/manage/components/ItemSelector.d.ts +0 -7
- package/dist/manage/components/ItemSelector.js +0 -20
- package/dist/manage/components/MenuSelect.d.ts +0 -13
- package/dist/manage/components/MenuSelect.js +0 -22
- package/dist/manage/components/MyMail.d.ts +0 -9
- package/dist/manage/components/MyMail.js +0 -143
- package/dist/manage/components/Profile.d.ts +0 -8
- package/dist/manage/components/Profile.js +0 -60
- package/dist/manage/components/ReadMail.d.ts +0 -8
- package/dist/manage/components/ReadMail.js +0 -110
- package/dist/manage/components/SendMessage.d.ts +0 -9
- package/dist/manage/components/SendMessage.js +0 -79
- package/dist/manage/components/SessionList.d.ts +0 -9
- package/dist/manage/components/SessionList.js +0 -608
- package/dist/manage/components/SessionSidebar.d.ts +0 -6
- package/dist/manage/components/SessionSidebar.js +0 -24
- package/dist/manage/components/TailMessages.d.ts +0 -8
- package/dist/manage/components/TailMessages.js +0 -126
- package/dist/manage/hooks/useApi.d.ts +0 -147
- package/dist/manage/hooks/useApi.js +0 -181
- package/dist/server/cron.d.ts +0 -25
- package/dist/server/cron.js +0 -107
- package/dist/server/index.d.ts +0 -4
- package/dist/server/index.js +0 -22
- package/dist/server/routes.d.ts +0 -13
- package/dist/server/routes.js +0 -1396
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { createMockStorage } from '../db/mock-storage.js';
|
|
3
|
+
describe('MockAgentOfficeStorage', () => {
|
|
4
|
+
let storage;
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
storage = createMockStorage();
|
|
7
|
+
});
|
|
8
|
+
describe('close', () => {
|
|
9
|
+
it('should mark storage as closed', async () => {
|
|
10
|
+
expect(storage.isClosed()).toBe(false);
|
|
11
|
+
await storage.close();
|
|
12
|
+
expect(storage.isClosed()).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('begin', () => {
|
|
16
|
+
it('should execute callback', async () => {
|
|
17
|
+
const result = await storage.begin(async (tx) => {
|
|
18
|
+
return await tx.listSessions();
|
|
19
|
+
});
|
|
20
|
+
expect(result).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('Sessions', () => {
|
|
24
|
+
it('should create and retrieve sessions', async () => {
|
|
25
|
+
const session = await storage.createSession('test', 'id123', 'agent1');
|
|
26
|
+
expect(session.name).toBe('test');
|
|
27
|
+
expect(session.session_id).toBe('id123');
|
|
28
|
+
expect(session.agent).toBe('agent1');
|
|
29
|
+
expect(session.id).toBeGreaterThan(0);
|
|
30
|
+
const retrieved = await storage.getSessionByName('test');
|
|
31
|
+
expect(retrieved?.id).toBe(session.id);
|
|
32
|
+
});
|
|
33
|
+
it('should list sessions sorted by created_at desc', async () => {
|
|
34
|
+
await storage.createSession('first', 'id1', 'agent1');
|
|
35
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
36
|
+
await storage.createSession('second', 'id2', 'agent2');
|
|
37
|
+
const sessions = await storage.listSessions();
|
|
38
|
+
expect(sessions[0].name).toBe('second');
|
|
39
|
+
expect(sessions[1].name).toBe('first');
|
|
40
|
+
});
|
|
41
|
+
it('should update session status', async () => {
|
|
42
|
+
await storage.createSession('test', 'id123', 'agent1');
|
|
43
|
+
await storage.updateSession('test', { status: 'busy' });
|
|
44
|
+
const updated = await storage.getSessionByName('test');
|
|
45
|
+
expect(updated?.status).toBe('busy');
|
|
46
|
+
});
|
|
47
|
+
it('should check session existence', async () => {
|
|
48
|
+
await storage.createSession('exists', 'id123', 'agent1');
|
|
49
|
+
expect(await storage.sessionExists('exists')).toBe(true);
|
|
50
|
+
expect(await storage.sessionExists('notexists')).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('Config', () => {
|
|
54
|
+
it('should store and retrieve config', async () => {
|
|
55
|
+
await storage.setConfig('key1', 'value1');
|
|
56
|
+
const value = await storage.getConfig('key1');
|
|
57
|
+
expect(value).toBe('value1');
|
|
58
|
+
});
|
|
59
|
+
it('should update existing config', async () => {
|
|
60
|
+
await storage.setConfig('key1', 'value1');
|
|
61
|
+
await storage.setConfig('key1', 'value2');
|
|
62
|
+
const value = await storage.getConfig('key1');
|
|
63
|
+
expect(value).toBe('value2');
|
|
64
|
+
});
|
|
65
|
+
it('should return null for non-existent config', async () => {
|
|
66
|
+
const value = await storage.getConfig('nonexistent');
|
|
67
|
+
expect(value).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
it('should list all config', async () => {
|
|
70
|
+
await storage.setConfig('key1', 'value1');
|
|
71
|
+
await storage.setConfig('key2', 'value2');
|
|
72
|
+
const allConfig = await storage.getAllConfig();
|
|
73
|
+
expect(allConfig).toHaveLength(2);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('Messages', () => {
|
|
77
|
+
it('should create and retrieve messages', async () => {
|
|
78
|
+
const message = await storage.createMessage('alice', 'bob', 'Hello!');
|
|
79
|
+
expect(message.from_name).toBe('alice');
|
|
80
|
+
expect(message.to_name).toBe('bob');
|
|
81
|
+
expect(message.body).toBe('Hello!');
|
|
82
|
+
expect(message.read).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it('should list messages for recipient', async () => {
|
|
85
|
+
await storage.createMessage('alice', 'bob', 'Message 1');
|
|
86
|
+
await storage.createMessage('charlie', 'bob', 'Message 2');
|
|
87
|
+
await storage.createMessage('alice', 'charlie', 'Message 3');
|
|
88
|
+
const bobMessages = await storage.listMessagesForRecipient('bob');
|
|
89
|
+
expect(bobMessages).toHaveLength(2);
|
|
90
|
+
});
|
|
91
|
+
it('should mark messages as read', async () => {
|
|
92
|
+
const message = await storage.createMessage('alice', 'bob', 'Hello!');
|
|
93
|
+
await storage.markMessageAsRead(message.id);
|
|
94
|
+
const messages = await storage.listMessagesForRecipient('bob', { unread: true });
|
|
95
|
+
expect(messages).toHaveLength(0);
|
|
96
|
+
});
|
|
97
|
+
it('should count unread by sender', async () => {
|
|
98
|
+
await storage.createMessage('alice', 'bob', 'Message 1');
|
|
99
|
+
await storage.createMessage('alice', 'bob', 'Message 2');
|
|
100
|
+
await storage.createMessage('charlie', 'bob', 'Message 3');
|
|
101
|
+
const counts = await storage.countUnreadBySender('bob');
|
|
102
|
+
expect(counts.get('alice')).toBe(2);
|
|
103
|
+
expect(counts.get('charlie')).toBe(1);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('Cron Jobs', () => {
|
|
107
|
+
beforeEach(async () => {
|
|
108
|
+
// Create a session first (required for cron jobs due to FK constraint simulation)
|
|
109
|
+
await storage.createSession('test', 'id123', 'agent1');
|
|
110
|
+
});
|
|
111
|
+
it('should create and retrieve cron jobs', async () => {
|
|
112
|
+
const job = await storage.createCronJob('job1', 'test', '0 0 * * *', 'UTC', 'Hello!');
|
|
113
|
+
expect(job.name).toBe('job1');
|
|
114
|
+
expect(job.enabled).toBe(true);
|
|
115
|
+
const retrieved = await storage.getCronJobById(job.id);
|
|
116
|
+
expect(retrieved?.name).toBe('job1');
|
|
117
|
+
});
|
|
118
|
+
it('should enable and disable cron jobs', async () => {
|
|
119
|
+
const job = await storage.createCronJob('job1', 'test', '0 0 * * *', null, 'Hello!');
|
|
120
|
+
await storage.disableCronJob(job.id);
|
|
121
|
+
let retrieved = await storage.getCronJobById(job.id);
|
|
122
|
+
expect(retrieved?.enabled).toBe(false);
|
|
123
|
+
await storage.enableCronJob(job.id);
|
|
124
|
+
retrieved = await storage.getCronJobById(job.id);
|
|
125
|
+
expect(retrieved?.enabled).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
it('should delete cron jobs', async () => {
|
|
128
|
+
const job = await storage.createCronJob('job1', 'test', '0 0 * * *', null, 'Hello!');
|
|
129
|
+
await storage.deleteCronJob(job.id);
|
|
130
|
+
const retrieved = await storage.getCronJobById(job.id);
|
|
131
|
+
expect(retrieved).toBeNull();
|
|
132
|
+
});
|
|
133
|
+
it('should check cron job existence', async () => {
|
|
134
|
+
await storage.createCronJob('job1', 'test', '0 0 * * *', null, 'Hello!');
|
|
135
|
+
expect(await storage.cronJobExistsForSession('job1', 'test')).toBe(true);
|
|
136
|
+
expect(await storage.cronJobExistsForSession('job2', 'test')).toBe(false);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe('Cron History', () => {
|
|
140
|
+
beforeEach(async () => {
|
|
141
|
+
await storage.createSession('test', 'id123', 'agent1');
|
|
142
|
+
});
|
|
143
|
+
it('should create and list cron history', async () => {
|
|
144
|
+
const job = await storage.createCronJob('job1', 'test', '0 0 * * *', null, 'Hello!');
|
|
145
|
+
await storage.createCronHistory(job.id, new Date(), true);
|
|
146
|
+
await storage.createCronHistory(job.id, new Date(), false, 'Error occurred');
|
|
147
|
+
const history = await storage.listCronHistory(job.id, 10);
|
|
148
|
+
expect(history).toHaveLength(2);
|
|
149
|
+
expect(history[0].success).toBe(true);
|
|
150
|
+
expect(history[1].success).toBe(false);
|
|
151
|
+
expect(history[1].error_message).toBe('Error occurred');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('Cron Requests', () => {
|
|
155
|
+
beforeEach(async () => {
|
|
156
|
+
await storage.createSession('test', 'id123', 'agent1');
|
|
157
|
+
});
|
|
158
|
+
it('should create cron requests with pending status', async () => {
|
|
159
|
+
const request = await storage.createCronRequest('req1', 'test', '0 0 * * *', 'UTC', 'Hello!');
|
|
160
|
+
expect(request.status).toBe('pending');
|
|
161
|
+
expect(request.name).toBe('req1');
|
|
162
|
+
});
|
|
163
|
+
it('should update request status', async () => {
|
|
164
|
+
const request = await storage.createCronRequest('req1', 'test', '0 0 * * *', null, 'Hello!');
|
|
165
|
+
await storage.updateCronRequestStatus(request.id, 'approved', 'reviewer1', 'Looks good');
|
|
166
|
+
const updated = await storage.getCronRequestById(request.id);
|
|
167
|
+
expect(updated?.status).toBe('approved');
|
|
168
|
+
expect(updated?.reviewed_by).toBe('reviewer1');
|
|
169
|
+
expect(updated?.reviewer_notes).toBe('Looks good');
|
|
170
|
+
});
|
|
171
|
+
it('should filter requests by status', async () => {
|
|
172
|
+
const req1 = await storage.createCronRequest('req1', 'test', '0 0 * * *', null, 'Hello!');
|
|
173
|
+
await storage.updateCronRequestStatus(req1.id, 'approved', 'reviewer1');
|
|
174
|
+
await storage.createCronRequest('req2', 'test', '0 12 * * *', null, 'World!');
|
|
175
|
+
const pending = await storage.listCronRequests({ status: 'pending' });
|
|
176
|
+
expect(pending).toHaveLength(1);
|
|
177
|
+
expect(pending[0].name).toBe('req2');
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('Tasks', () => {
|
|
181
|
+
it('should create and retrieve tasks', async () => {
|
|
182
|
+
const task = await storage.createTask('Task 1', 'Description', 'alice', 'todo', [1, 2]);
|
|
183
|
+
expect(task.title).toBe('Task 1');
|
|
184
|
+
expect(task.column).toBe('todo');
|
|
185
|
+
expect(task.dependencies).toEqual([1, 2]);
|
|
186
|
+
const retrieved = await storage.getTaskById(task.id);
|
|
187
|
+
expect(retrieved?.title).toBe('Task 1');
|
|
188
|
+
});
|
|
189
|
+
it('should update tasks', async () => {
|
|
190
|
+
const task = await storage.createTask('Task 1', 'Description', 'alice', 'todo', []);
|
|
191
|
+
await storage.updateTask(task.id, { title: 'Updated Title', column: 'done' });
|
|
192
|
+
const updated = await storage.getTaskById(task.id);
|
|
193
|
+
expect(updated?.title).toBe('Updated Title');
|
|
194
|
+
expect(updated?.column).toBe('done');
|
|
195
|
+
});
|
|
196
|
+
it('should delete tasks', async () => {
|
|
197
|
+
const task = await storage.createTask('Task 1', 'Description', 'alice', 'todo', []);
|
|
198
|
+
await storage.deleteTask(task.id);
|
|
199
|
+
const retrieved = await storage.getTaskById(task.id);
|
|
200
|
+
expect(retrieved).toBeNull();
|
|
201
|
+
});
|
|
202
|
+
it('should search tasks', async () => {
|
|
203
|
+
await storage.createTask('Important task', 'Do something important', 'alice', 'todo', []);
|
|
204
|
+
await storage.createTask('Other task', 'Description', 'bob', 'done', []);
|
|
205
|
+
const results = await storage.searchTasks('important');
|
|
206
|
+
expect(results).toHaveLength(1);
|
|
207
|
+
expect(results[0].title).toBe('Important task');
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('Watch', () => {
|
|
211
|
+
it('should notify watchers when message is created', async () => {
|
|
212
|
+
const states = [];
|
|
213
|
+
storage.watch(state => {
|
|
214
|
+
states.push(state);
|
|
215
|
+
});
|
|
216
|
+
await storage.createMessage('alice', 'bob', 'Hello!');
|
|
217
|
+
// Wait for async notification
|
|
218
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
219
|
+
expect(states.length).toBeGreaterThan(0);
|
|
220
|
+
});
|
|
221
|
+
it('should allow unwatching', async () => {
|
|
222
|
+
const states = [];
|
|
223
|
+
const unwatch = storage.watch(state => {
|
|
224
|
+
states.push(state);
|
|
225
|
+
});
|
|
226
|
+
unwatch();
|
|
227
|
+
await storage.createMessage('alice', 'bob', 'Hello!');
|
|
228
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
229
|
+
// Should not receive any updates after unwatch
|
|
230
|
+
expect(states).toHaveLength(0);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
//# sourceMappingURL=mock-storage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-storage.test.js","sourceRoot":"","sources":["../../src/db/mock-storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import postgres from 'postgres';
|
|
2
|
+
import { AgentOfficeStorageBase } from './storage-base.js';
|
|
3
|
+
import type { SessionRow, ConfigRow, MessageRow, CronJobRow, CronHistoryRow, CronRequestRow, TaskRow } from './types.js';
|
|
3
4
|
export declare class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
4
5
|
private sql;
|
|
5
|
-
constructor(sql:
|
|
6
|
+
constructor(sql: ReturnType<typeof postgres>);
|
|
6
7
|
close(): Promise<void>;
|
|
7
|
-
begin<T>(callback: (tx: import(
|
|
8
|
+
begin<T>(callback: (tx: import('./storage.js').AgentOfficeStorage) => Promise<T>): Promise<T>;
|
|
8
9
|
listSessions(): Promise<SessionRow[]>;
|
|
9
10
|
getSessionByName(name: string): Promise<SessionRow | null>;
|
|
10
11
|
getSessionByAgentCode(agentCode: string): Promise<SessionRow | null>;
|
|
@@ -12,9 +13,7 @@ export declare class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase
|
|
|
12
13
|
createSession(name: string, sessionId: string, agent: string): Promise<SessionRow>;
|
|
13
14
|
deleteSession(id: number): Promise<void>;
|
|
14
15
|
regenerateAgentCode(name: string): Promise<SessionRow>;
|
|
15
|
-
|
|
16
|
-
updateSessionStatus(agentCode: string, status: string | null): Promise<void>;
|
|
17
|
-
updateSessionId(name: string, sessionId: string): Promise<void>;
|
|
16
|
+
updateSession(name: string, updates: Partial<Pick<SessionRow, 'agent' | 'status' | 'description' | 'philosophy' | 'visual_description'>>): Promise<SessionRow | null>;
|
|
18
17
|
sessionExists(name: string): Promise<boolean>;
|
|
19
18
|
getAllConfig(): Promise<ConfigRow[]>;
|
|
20
19
|
getConfig(key: string): Promise<string | null>;
|
|
@@ -31,6 +30,7 @@ export declare class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase
|
|
|
31
30
|
markMessageAsRead(id: number): Promise<MessageRow | null>;
|
|
32
31
|
markMessageAsInjected(id: number): Promise<void>;
|
|
33
32
|
markMessagesAsNotified(ids: number[]): Promise<void>;
|
|
33
|
+
deleteMessagesForCoworker(name: string): Promise<void>;
|
|
34
34
|
listCronJobs(): Promise<CronJobRow[]>;
|
|
35
35
|
listCronJobsForSession(sessionName: string): Promise<CronJobRow[]>;
|
|
36
36
|
getCronJobById(id: number): Promise<CronJobRow | null>;
|
|
@@ -49,7 +49,8 @@ export declare class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase
|
|
|
49
49
|
}): Promise<CronRequestRow[]>;
|
|
50
50
|
getCronRequestById(id: number): Promise<CronRequestRow | null>;
|
|
51
51
|
createCronRequest(name: string, sessionName: string, schedule: string, timezone: string | null, message: string): Promise<CronRequestRow>;
|
|
52
|
-
updateCronRequestStatus(id: number, status:
|
|
52
|
+
updateCronRequestStatus(id: number, status: 'approved' | 'rejected', reviewedBy: string, reviewerNotes?: string): Promise<CronRequestRow | null>;
|
|
53
|
+
deleteCronRequest(id: number): Promise<void>;
|
|
53
54
|
listTasks(): Promise<TaskRow[]>;
|
|
54
55
|
getTaskById(id: number): Promise<TaskRow | null>;
|
|
55
56
|
createTask(title: string, description: string, assignee: string | null, column: string, dependencies: number[]): Promise<TaskRow>;
|
|
@@ -62,3 +63,4 @@ export declare class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase
|
|
|
62
63
|
runMigrations(): Promise<void>;
|
|
63
64
|
}
|
|
64
65
|
export declare function createPostgresqlStorage(databaseUrl: string): AgentOfficePostgresqlStorage;
|
|
66
|
+
//# sourceMappingURL=postgresql-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql-storage.d.ts","sourceRoot":"","sources":["../../src/db/postgresql-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import postgres from
|
|
2
|
-
import { AgentOfficeStorageBase } from
|
|
1
|
+
import postgres from 'postgres';
|
|
2
|
+
import { AgentOfficeStorageBase } from './storage-base.js';
|
|
3
3
|
export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
4
4
|
sql;
|
|
5
5
|
constructor(sql) {
|
|
@@ -18,21 +18,21 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
18
18
|
// Sessions
|
|
19
19
|
async listSessions() {
|
|
20
20
|
return this.sql `
|
|
21
|
-
SELECT id, name, session_id, agent_code, agent, status, created_at
|
|
21
|
+
SELECT id, name, session_id, agent_code, agent, status, description, philosophy, created_at
|
|
22
22
|
FROM sessions
|
|
23
23
|
ORDER BY created_at DESC
|
|
24
24
|
`;
|
|
25
25
|
}
|
|
26
26
|
async getSessionByName(name) {
|
|
27
27
|
const [row] = await this.sql `
|
|
28
|
-
SELECT id, name, session_id, agent_code, agent, status, created_at
|
|
28
|
+
SELECT id, name, session_id, agent_code, agent, status, description, philosophy, created_at
|
|
29
29
|
FROM sessions WHERE name = ${name}
|
|
30
30
|
`;
|
|
31
31
|
return row ?? null;
|
|
32
32
|
}
|
|
33
33
|
async getSessionByAgentCode(agentCode) {
|
|
34
34
|
const [row] = await this.sql `
|
|
35
|
-
SELECT id, name, session_id, agent_code, agent, status, created_at
|
|
35
|
+
SELECT id, name, session_id, agent_code, agent, status, description, philosophy, created_at
|
|
36
36
|
FROM sessions WHERE agent_code = ${agentCode}
|
|
37
37
|
`;
|
|
38
38
|
return row ?? null;
|
|
@@ -47,7 +47,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
47
47
|
const [row] = await this.sql `
|
|
48
48
|
INSERT INTO sessions (name, session_id, agent)
|
|
49
49
|
VALUES (${name}, ${sessionId}, ${agent})
|
|
50
|
-
RETURNING id, name, session_id, agent_code, agent, status, created_at
|
|
50
|
+
RETURNING id, name, session_id, agent_code, agent, status, description, philosophy, created_at
|
|
51
51
|
`;
|
|
52
52
|
return row;
|
|
53
53
|
}
|
|
@@ -59,30 +59,48 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
59
59
|
UPDATE sessions
|
|
60
60
|
SET agent_code = gen_random_uuid()
|
|
61
61
|
WHERE name = ${name}
|
|
62
|
-
RETURNING id, name, session_id, agent_code, agent, status, created_at
|
|
62
|
+
RETURNING id, name, session_id, agent_code, agent, status, description, philosophy, created_at
|
|
63
63
|
`;
|
|
64
64
|
return row;
|
|
65
65
|
}
|
|
66
|
-
async
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
async updateSession(name, updates) {
|
|
67
|
+
// Build dynamic update using unsafe for conditional fields
|
|
68
|
+
const setParts = [];
|
|
69
|
+
const values = [];
|
|
70
|
+
if (updates.agent !== undefined) {
|
|
71
|
+
setParts.push('agent = ');
|
|
72
|
+
values.push(updates.agent);
|
|
73
|
+
}
|
|
74
|
+
if (updates.status !== undefined) {
|
|
75
|
+
setParts.push('status = ');
|
|
76
|
+
values.push(updates.status);
|
|
77
|
+
}
|
|
78
|
+
if (updates.description !== undefined) {
|
|
79
|
+
setParts.push('description = ');
|
|
80
|
+
values.push(updates.description);
|
|
81
|
+
}
|
|
82
|
+
if (updates.philosophy !== undefined) {
|
|
83
|
+
setParts.push('philosophy = ');
|
|
84
|
+
values.push(updates.philosophy);
|
|
85
|
+
}
|
|
86
|
+
if (updates.visual_description !== undefined) {
|
|
87
|
+
setParts.push('visual_description = ');
|
|
88
|
+
values.push(updates.visual_description);
|
|
89
|
+
}
|
|
90
|
+
if (setParts.length === 0) {
|
|
91
|
+
return this.getSessionByName(name);
|
|
92
|
+
}
|
|
93
|
+
// Build the SET clause
|
|
94
|
+
const setClause = setParts.map((part, i) => `${part}$${i + 1}`).join(', ');
|
|
95
|
+
const sql = `
|
|
77
96
|
UPDATE sessions
|
|
78
|
-
SET
|
|
79
|
-
WHERE
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
async updateSessionId(name, sessionId) {
|
|
83
|
-
await this.sql `
|
|
84
|
-
UPDATE sessions SET session_id = ${sessionId} WHERE name = ${name}
|
|
97
|
+
SET ${setClause}
|
|
98
|
+
WHERE name = $${values.length + 1}
|
|
99
|
+
RETURNING id, name, session_id, agent_code, agent, status, description, philosophy, visual_description, created_at
|
|
85
100
|
`;
|
|
101
|
+
values.push(name);
|
|
102
|
+
const [row] = await this.sql.unsafe(sql, values);
|
|
103
|
+
return row ?? null;
|
|
86
104
|
}
|
|
87
105
|
async sessionExists(name) {
|
|
88
106
|
const [row] = await this.sql `
|
|
@@ -108,16 +126,16 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
108
126
|
}
|
|
109
127
|
// Messages
|
|
110
128
|
async listMessagesForRecipient(name, filters) {
|
|
111
|
-
const whereClauses = [
|
|
129
|
+
const whereClauses = ['to_name = $1'];
|
|
112
130
|
const params = [name];
|
|
113
131
|
if (filters?.unread)
|
|
114
|
-
whereClauses.push(
|
|
132
|
+
whereClauses.push('read = FALSE');
|
|
115
133
|
if (filters?.notified === false)
|
|
116
|
-
whereClauses.push(
|
|
134
|
+
whereClauses.push('notified = FALSE');
|
|
117
135
|
if (filters?.olderThanHours !== undefined) {
|
|
118
136
|
whereClauses.push(`created_at < NOW() - INTERVAL '${filters.olderThanHours} hours'`);
|
|
119
137
|
}
|
|
120
|
-
const whereSQL = whereClauses.join(
|
|
138
|
+
const whereSQL = whereClauses.join(' AND ');
|
|
121
139
|
const rows = await this.sql.unsafe(`SELECT id, from_name, to_name, body, read, injected, created_at, notified FROM messages WHERE ${whereSQL} ORDER BY created_at DESC`, params);
|
|
122
140
|
return rows;
|
|
123
141
|
}
|
|
@@ -180,6 +198,9 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
180
198
|
return;
|
|
181
199
|
await this.sql `UPDATE messages SET notified = TRUE WHERE id = ANY(${ids})`;
|
|
182
200
|
}
|
|
201
|
+
async deleteMessagesForCoworker(name) {
|
|
202
|
+
await this.sql `DELETE FROM messages WHERE from_name = ${name} OR to_name = ${name}`;
|
|
203
|
+
}
|
|
183
204
|
// Cron Jobs
|
|
184
205
|
async listCronJobs() {
|
|
185
206
|
return this.sql `
|
|
@@ -318,6 +339,9 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
318
339
|
`;
|
|
319
340
|
return row ?? null;
|
|
320
341
|
}
|
|
342
|
+
async deleteCronRequest(id) {
|
|
343
|
+
await this.sql `DELETE FROM cron_requests WHERE id = ${id}`;
|
|
344
|
+
}
|
|
321
345
|
// Tasks
|
|
322
346
|
async listTasks() {
|
|
323
347
|
return this.sql `
|
|
@@ -369,7 +393,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
369
393
|
setParts.push('updated_at = NOW()');
|
|
370
394
|
const sql = `UPDATE tasks SET ${setParts.join(', ')} WHERE id = ? RETURNING id, title, description, assignee, column_name as column, dependencies, created_at, updated_at`;
|
|
371
395
|
values.push(id);
|
|
372
|
-
const [row] = await this.sql.unsafe(sql, values);
|
|
396
|
+
const [row] = (await this.sql.unsafe(sql, values));
|
|
373
397
|
return row ?? null;
|
|
374
398
|
}
|
|
375
399
|
async deleteTask(id) {
|
|
@@ -400,7 +424,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
400
424
|
const MIGRATIONS = [
|
|
401
425
|
{
|
|
402
426
|
version: 1,
|
|
403
|
-
name:
|
|
427
|
+
name: 'create_sessions',
|
|
404
428
|
sql: `
|
|
405
429
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
406
430
|
id SERIAL PRIMARY KEY,
|
|
@@ -413,7 +437,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
413
437
|
},
|
|
414
438
|
{
|
|
415
439
|
version: 2,
|
|
416
|
-
name:
|
|
440
|
+
name: 'add_agent_code',
|
|
417
441
|
sql: `
|
|
418
442
|
ALTER TABLE sessions ADD COLUMN IF NOT EXISTS agent_code UUID NOT NULL DEFAULT gen_random_uuid();
|
|
419
443
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_sessions_agent_code ON sessions(agent_code);
|
|
@@ -421,7 +445,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
421
445
|
},
|
|
422
446
|
{
|
|
423
447
|
version: 3,
|
|
424
|
-
name:
|
|
448
|
+
name: 'create_config_table',
|
|
425
449
|
sql: `
|
|
426
450
|
CREATE TABLE IF NOT EXISTS config (
|
|
427
451
|
key VARCHAR(255) PRIMARY KEY,
|
|
@@ -433,14 +457,14 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
433
457
|
},
|
|
434
458
|
{
|
|
435
459
|
version: 5,
|
|
436
|
-
name:
|
|
460
|
+
name: 'add_mode_to_sessions',
|
|
437
461
|
sql: `
|
|
438
462
|
ALTER TABLE sessions ADD COLUMN IF NOT EXISTS mode VARCHAR(255) NULL;
|
|
439
463
|
`,
|
|
440
464
|
},
|
|
441
465
|
{
|
|
442
466
|
version: 4,
|
|
443
|
-
name:
|
|
467
|
+
name: 'create_messages_table',
|
|
444
468
|
sql: `
|
|
445
469
|
CREATE TABLE IF NOT EXISTS messages (
|
|
446
470
|
id SERIAL PRIMARY KEY,
|
|
@@ -458,7 +482,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
458
482
|
},
|
|
459
483
|
{
|
|
460
484
|
version: 6,
|
|
461
|
-
name:
|
|
485
|
+
name: 'create_cron_tables',
|
|
462
486
|
sql: `
|
|
463
487
|
CREATE TABLE IF NOT EXISTS cron_jobs (
|
|
464
488
|
id SERIAL PRIMARY KEY,
|
|
@@ -487,28 +511,28 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
487
511
|
},
|
|
488
512
|
{
|
|
489
513
|
version: 7,
|
|
490
|
-
name:
|
|
514
|
+
name: 'add_status_to_sessions',
|
|
491
515
|
sql: `
|
|
492
516
|
ALTER TABLE sessions ADD COLUMN IF NOT EXISTS status TEXT NULL;
|
|
493
517
|
`,
|
|
494
518
|
},
|
|
495
519
|
{
|
|
496
520
|
version: 8,
|
|
497
|
-
name:
|
|
521
|
+
name: 'rename_mode_to_agent',
|
|
498
522
|
sql: `
|
|
499
523
|
ALTER TABLE sessions RENAME COLUMN mode TO agent;
|
|
500
524
|
`,
|
|
501
525
|
},
|
|
502
526
|
{
|
|
503
527
|
version: 9,
|
|
504
|
-
name:
|
|
528
|
+
name: 'add_notified_to_messages',
|
|
505
529
|
sql: `
|
|
506
530
|
ALTER TABLE messages ADD COLUMN IF NOT EXISTS notified BOOLEAN NOT NULL DEFAULT FALSE;
|
|
507
531
|
`,
|
|
508
532
|
},
|
|
509
533
|
{
|
|
510
534
|
version: 10,
|
|
511
|
-
name:
|
|
535
|
+
name: 'create_tasks_table',
|
|
512
536
|
sql: `
|
|
513
537
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
514
538
|
id SERIAL PRIMARY KEY,
|
|
@@ -526,7 +550,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
526
550
|
},
|
|
527
551
|
{
|
|
528
552
|
version: 11,
|
|
529
|
-
name:
|
|
553
|
+
name: 'create_cron_requests_table',
|
|
530
554
|
sql: `
|
|
531
555
|
CREATE TABLE IF NOT EXISTS cron_requests (
|
|
532
556
|
id SERIAL PRIMARY KEY,
|
|
@@ -543,6 +567,15 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
543
567
|
);
|
|
544
568
|
CREATE INDEX IF NOT EXISTS idx_cron_requests_session_name ON cron_requests(session_name);
|
|
545
569
|
CREATE INDEX IF NOT EXISTS idx_cron_requests_status ON cron_requests(status);
|
|
570
|
+
`,
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
version: 12,
|
|
574
|
+
name: 'add_description_and_philosophy_to_sessions',
|
|
575
|
+
sql: `
|
|
576
|
+
ALTER TABLE sessions ADD COLUMN IF NOT EXISTS description TEXT;
|
|
577
|
+
ALTER TABLE sessions ADD COLUMN IF NOT EXISTS philosophy TEXT;
|
|
578
|
+
ALTER TABLE sessions ADD COLUMN IF NOT EXISTS visual_description TEXT;
|
|
546
579
|
`,
|
|
547
580
|
},
|
|
548
581
|
];
|
|
@@ -556,7 +589,7 @@ export class AgentOfficePostgresqlStorage extends AgentOfficeStorageBase {
|
|
|
556
589
|
const applied = await this.sql `
|
|
557
590
|
SELECT version FROM _migrations ORDER BY version
|
|
558
591
|
`;
|
|
559
|
-
const appliedVersions = new Set(applied.map(
|
|
592
|
+
const appliedVersions = new Set(applied.map(r => r.version));
|
|
560
593
|
for (const migration of MIGRATIONS) {
|
|
561
594
|
if (appliedVersions.has(migration.version))
|
|
562
595
|
continue;
|
|
@@ -577,3 +610,4 @@ export function createPostgresqlStorage(databaseUrl) {
|
|
|
577
610
|
});
|
|
578
611
|
return new AgentOfficePostgresqlStorage(sql);
|
|
579
612
|
}
|
|
613
|
+
//# sourceMappingURL=postgresql-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql-storage.js","sourceRoot":"","sources":["../../src/db/postgresql-storage.ts"],"names":[],"mappings":"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"}
|