@agentuity/runtime 1.0.21 → 1.0.23
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/_context.d.ts +4 -1
- package/dist/_context.d.ts.map +1 -1
- package/dist/_context.js +3 -0
- package/dist/_context.js.map +1 -1
- package/dist/_services.d.ts +4 -1
- package/dist/_services.d.ts.map +1 -1
- package/dist/_services.js +28 -3
- package/dist/_services.js.map +1 -1
- package/dist/_standalone.d.ts +4 -1
- package/dist/_standalone.d.ts.map +1 -1
- package/dist/_standalone.js +3 -0
- package/dist/_standalone.js.map +1 -1
- package/dist/agent.d.ts +43 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +12 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +6 -0
- package/dist/middleware.js.map +1 -1
- package/dist/services/local/_db.d.ts.map +1 -1
- package/dist/services/local/_db.js +49 -1
- package/dist/services/local/_db.js.map +1 -1
- package/dist/services/local/email.d.ts +20 -0
- package/dist/services/local/email.d.ts.map +1 -0
- package/dist/services/local/email.js +46 -0
- package/dist/services/local/email.js.map +1 -0
- package/dist/services/local/index.d.ts +2 -0
- package/dist/services/local/index.d.ts.map +1 -1
- package/dist/services/local/index.js +2 -0
- package/dist/services/local/index.js.map +1 -1
- package/dist/services/local/task.d.ts +16 -0
- package/dist/services/local/task.d.ts.map +1 -0
- package/dist/services/local/task.js +425 -0
- package/dist/services/local/task.js.map +1 -0
- package/package.json +7 -7
- package/src/_context.ts +6 -0
- package/src/_services.ts +33 -1
- package/src/_standalone.ts +6 -0
- package/src/agent.ts +48 -0
- package/src/app.ts +14 -0
- package/src/middleware.ts +7 -3
- package/src/services/local/_db.ts +64 -3
- package/src/services/local/email.ts +75 -0
- package/src/services/local/index.ts +2 -0
- package/src/services/local/task.ts +595 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/services/local/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EACX,WAAW,EACX,IAAI,EAKJ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,MAAM,iBAAiB,CAAC;AA+FzB,qBAAa,gBAAiB,YAAW,WAAW;;gBAIvC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM;IAKvC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8E/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA+BrC,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAuExD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmL3D,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmFhC,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,OAAO,CAAC,mBAAmB,CAAC;CAgC/B"}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { StructuredError } from '@agentuity/core';
|
|
2
|
+
import { now } from './_util';
|
|
3
|
+
const TaskTitleRequiredError = StructuredError('TaskTitleRequiredError', 'Task title is required and must be a non-empty string');
|
|
4
|
+
const TaskNotFoundError = StructuredError('TaskNotFoundError', 'Task not found');
|
|
5
|
+
const TaskAlreadyClosedError = StructuredError('TaskAlreadyClosedError', 'Task is already closed');
|
|
6
|
+
const DEFAULT_LIMIT = 100;
|
|
7
|
+
const SORT_FIELDS = {
|
|
8
|
+
created_at: 'created_at',
|
|
9
|
+
updated_at: 'updated_at',
|
|
10
|
+
title: 'title',
|
|
11
|
+
priority: 'priority',
|
|
12
|
+
status: 'status',
|
|
13
|
+
type: 'type',
|
|
14
|
+
open_date: 'open_date',
|
|
15
|
+
in_progress_date: 'in_progress_date',
|
|
16
|
+
closed_date: 'closed_date',
|
|
17
|
+
};
|
|
18
|
+
function generateTaskId() {
|
|
19
|
+
return `task_${crypto.randomUUID().replace(/-/g, '').slice(0, 24)}`;
|
|
20
|
+
}
|
|
21
|
+
function generateChangelogId() {
|
|
22
|
+
return `taskch_${crypto.randomUUID().replace(/-/g, '').slice(0, 24)}`;
|
|
23
|
+
}
|
|
24
|
+
function toTask(row) {
|
|
25
|
+
return {
|
|
26
|
+
id: row.id,
|
|
27
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
28
|
+
updated_at: new Date(row.updated_at).toISOString(),
|
|
29
|
+
title: row.title,
|
|
30
|
+
description: row.description ?? undefined,
|
|
31
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
32
|
+
priority: row.priority,
|
|
33
|
+
parent_id: row.parent_id ?? undefined,
|
|
34
|
+
type: row.type,
|
|
35
|
+
status: row.status,
|
|
36
|
+
open_date: row.open_date ?? undefined,
|
|
37
|
+
in_progress_date: row.in_progress_date ?? undefined,
|
|
38
|
+
closed_date: row.closed_date ?? undefined,
|
|
39
|
+
created_id: row.created_id,
|
|
40
|
+
assigned_id: row.assigned_id ?? undefined,
|
|
41
|
+
closed_id: row.closed_id ?? undefined,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function toChangelogEntry(row) {
|
|
45
|
+
return {
|
|
46
|
+
id: row.id,
|
|
47
|
+
created_at: new Date(row.created_at).toISOString(),
|
|
48
|
+
task_id: row.task_id,
|
|
49
|
+
field: row.field,
|
|
50
|
+
old_value: row.old_value ?? undefined,
|
|
51
|
+
new_value: row.new_value ?? undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export class LocalTaskStorage {
|
|
55
|
+
#db;
|
|
56
|
+
#projectPath;
|
|
57
|
+
constructor(db, projectPath) {
|
|
58
|
+
this.#db = db;
|
|
59
|
+
this.#projectPath = projectPath;
|
|
60
|
+
}
|
|
61
|
+
async create(params) {
|
|
62
|
+
const trimmedTitle = params?.title?.trim();
|
|
63
|
+
if (!trimmedTitle) {
|
|
64
|
+
throw new TaskTitleRequiredError();
|
|
65
|
+
}
|
|
66
|
+
const id = generateTaskId();
|
|
67
|
+
const timestamp = now();
|
|
68
|
+
const status = params.status ?? 'open';
|
|
69
|
+
const priority = params.priority ?? 'none';
|
|
70
|
+
const openDate = status === 'open' ? new Date(timestamp).toISOString() : null;
|
|
71
|
+
const inProgressDate = status === 'in_progress' ? new Date(timestamp).toISOString() : null;
|
|
72
|
+
const closedDate = status === 'closed' ? new Date(timestamp).toISOString() : null;
|
|
73
|
+
const stmt = this.#db.prepare(`
|
|
74
|
+
INSERT INTO task_storage (
|
|
75
|
+
project_path,
|
|
76
|
+
id,
|
|
77
|
+
title,
|
|
78
|
+
description,
|
|
79
|
+
metadata,
|
|
80
|
+
priority,
|
|
81
|
+
parent_id,
|
|
82
|
+
type,
|
|
83
|
+
status,
|
|
84
|
+
open_date,
|
|
85
|
+
in_progress_date,
|
|
86
|
+
closed_date,
|
|
87
|
+
created_id,
|
|
88
|
+
assigned_id,
|
|
89
|
+
closed_id,
|
|
90
|
+
created_at,
|
|
91
|
+
updated_at
|
|
92
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
93
|
+
`);
|
|
94
|
+
const row = {
|
|
95
|
+
id,
|
|
96
|
+
created_at: timestamp,
|
|
97
|
+
updated_at: timestamp,
|
|
98
|
+
title: trimmedTitle,
|
|
99
|
+
description: params.description ?? null,
|
|
100
|
+
metadata: params.metadata ? JSON.stringify(params.metadata) : null,
|
|
101
|
+
priority,
|
|
102
|
+
parent_id: params.parent_id ?? null,
|
|
103
|
+
type: params.type,
|
|
104
|
+
status,
|
|
105
|
+
open_date: openDate,
|
|
106
|
+
in_progress_date: inProgressDate,
|
|
107
|
+
closed_date: closedDate,
|
|
108
|
+
created_id: params.created_id,
|
|
109
|
+
assigned_id: params.assigned_id ?? null,
|
|
110
|
+
closed_id: null,
|
|
111
|
+
};
|
|
112
|
+
stmt.run(this.#projectPath, row.id, row.title, row.description, row.metadata, row.priority, row.parent_id, row.type, row.status, row.open_date, row.in_progress_date, row.closed_date, row.created_id, row.assigned_id, row.closed_id, row.created_at, row.updated_at);
|
|
113
|
+
return toTask(row);
|
|
114
|
+
}
|
|
115
|
+
async get(id) {
|
|
116
|
+
const query = this.#db.query(`
|
|
117
|
+
SELECT
|
|
118
|
+
id,
|
|
119
|
+
created_at,
|
|
120
|
+
updated_at,
|
|
121
|
+
title,
|
|
122
|
+
description,
|
|
123
|
+
metadata,
|
|
124
|
+
priority,
|
|
125
|
+
parent_id,
|
|
126
|
+
type,
|
|
127
|
+
status,
|
|
128
|
+
open_date,
|
|
129
|
+
in_progress_date,
|
|
130
|
+
closed_date,
|
|
131
|
+
created_id,
|
|
132
|
+
assigned_id,
|
|
133
|
+
closed_id
|
|
134
|
+
FROM task_storage
|
|
135
|
+
WHERE project_path = ? AND id = ?
|
|
136
|
+
`);
|
|
137
|
+
const row = query.get(this.#projectPath, id);
|
|
138
|
+
if (!row) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
return toTask(row);
|
|
142
|
+
}
|
|
143
|
+
async list(params) {
|
|
144
|
+
const filters = ['project_path = ?'];
|
|
145
|
+
const values = [this.#projectPath];
|
|
146
|
+
if (params?.status) {
|
|
147
|
+
filters.push('status = ?');
|
|
148
|
+
values.push(params.status);
|
|
149
|
+
}
|
|
150
|
+
if (params?.type) {
|
|
151
|
+
filters.push('type = ?');
|
|
152
|
+
values.push(params.type);
|
|
153
|
+
}
|
|
154
|
+
if (params?.priority) {
|
|
155
|
+
filters.push('priority = ?');
|
|
156
|
+
values.push(params.priority);
|
|
157
|
+
}
|
|
158
|
+
if (params?.assigned_id) {
|
|
159
|
+
filters.push('assigned_id = ?');
|
|
160
|
+
values.push(params.assigned_id);
|
|
161
|
+
}
|
|
162
|
+
if (params?.parent_id) {
|
|
163
|
+
filters.push('parent_id = ?');
|
|
164
|
+
values.push(params.parent_id);
|
|
165
|
+
}
|
|
166
|
+
const whereClause = filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '';
|
|
167
|
+
const sortField = params?.sort && SORT_FIELDS[params.sort] ? SORT_FIELDS[params.sort] : 'created_at';
|
|
168
|
+
const sortOrder = params?.order === 'asc' ? 'ASC' : 'DESC';
|
|
169
|
+
const limit = params?.limit ?? DEFAULT_LIMIT;
|
|
170
|
+
const offset = params?.offset ?? 0;
|
|
171
|
+
const totalQuery = this.#db.query(`SELECT COUNT(*) as count FROM task_storage ${whereClause}`);
|
|
172
|
+
const totalRow = totalQuery.get(...values);
|
|
173
|
+
const query = this.#db.query(`
|
|
174
|
+
SELECT
|
|
175
|
+
id,
|
|
176
|
+
created_at,
|
|
177
|
+
updated_at,
|
|
178
|
+
title,
|
|
179
|
+
description,
|
|
180
|
+
metadata,
|
|
181
|
+
priority,
|
|
182
|
+
parent_id,
|
|
183
|
+
type,
|
|
184
|
+
status,
|
|
185
|
+
open_date,
|
|
186
|
+
in_progress_date,
|
|
187
|
+
closed_date,
|
|
188
|
+
created_id,
|
|
189
|
+
assigned_id,
|
|
190
|
+
closed_id
|
|
191
|
+
FROM task_storage
|
|
192
|
+
${whereClause}
|
|
193
|
+
ORDER BY ${sortField} ${sortOrder}
|
|
194
|
+
LIMIT ? OFFSET ?
|
|
195
|
+
`);
|
|
196
|
+
const rows = query.all(...values, limit, offset);
|
|
197
|
+
return {
|
|
198
|
+
tasks: rows.map(toTask),
|
|
199
|
+
total: totalRow.count,
|
|
200
|
+
limit,
|
|
201
|
+
offset,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
async update(id, params) {
|
|
205
|
+
const updateInTransaction = this.#db.transaction(() => {
|
|
206
|
+
const existingQuery = this.#db.query(`
|
|
207
|
+
SELECT
|
|
208
|
+
id,
|
|
209
|
+
created_at,
|
|
210
|
+
updated_at,
|
|
211
|
+
title,
|
|
212
|
+
description,
|
|
213
|
+
metadata,
|
|
214
|
+
priority,
|
|
215
|
+
parent_id,
|
|
216
|
+
type,
|
|
217
|
+
status,
|
|
218
|
+
open_date,
|
|
219
|
+
in_progress_date,
|
|
220
|
+
closed_date,
|
|
221
|
+
created_id,
|
|
222
|
+
assigned_id,
|
|
223
|
+
closed_id
|
|
224
|
+
FROM task_storage
|
|
225
|
+
WHERE project_path = ? AND id = ?
|
|
226
|
+
`);
|
|
227
|
+
const existing = existingQuery.get(this.#projectPath, id);
|
|
228
|
+
if (!existing) {
|
|
229
|
+
throw new TaskNotFoundError();
|
|
230
|
+
}
|
|
231
|
+
const trimmedTitle = params.title !== undefined ? params.title?.trim() : undefined;
|
|
232
|
+
if (params.title !== undefined && !trimmedTitle) {
|
|
233
|
+
throw new TaskTitleRequiredError();
|
|
234
|
+
}
|
|
235
|
+
const timestamp = now();
|
|
236
|
+
const nowIso = new Date(timestamp).toISOString();
|
|
237
|
+
const updated = {
|
|
238
|
+
...existing,
|
|
239
|
+
title: trimmedTitle ?? existing.title,
|
|
240
|
+
description: params.description !== undefined ? params.description : existing.description,
|
|
241
|
+
metadata: params.metadata !== undefined
|
|
242
|
+
? params.metadata
|
|
243
|
+
? JSON.stringify(params.metadata)
|
|
244
|
+
: null
|
|
245
|
+
: existing.metadata,
|
|
246
|
+
priority: params.priority ?? existing.priority,
|
|
247
|
+
parent_id: params.parent_id !== undefined ? params.parent_id : existing.parent_id,
|
|
248
|
+
type: params.type ?? existing.type,
|
|
249
|
+
status: params.status ?? existing.status,
|
|
250
|
+
assigned_id: params.assigned_id !== undefined ? params.assigned_id : existing.assigned_id,
|
|
251
|
+
closed_id: params.closed_id !== undefined ? params.closed_id : existing.closed_id,
|
|
252
|
+
updated_at: timestamp,
|
|
253
|
+
};
|
|
254
|
+
if (params.status && params.status !== existing.status) {
|
|
255
|
+
if (params.status === 'open' && !existing.open_date) {
|
|
256
|
+
updated.open_date = nowIso;
|
|
257
|
+
}
|
|
258
|
+
if (params.status === 'in_progress' && !existing.in_progress_date) {
|
|
259
|
+
updated.in_progress_date = nowIso;
|
|
260
|
+
}
|
|
261
|
+
if (params.status === 'closed' && !existing.closed_date) {
|
|
262
|
+
updated.closed_date = nowIso;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const changelogEntries = [];
|
|
266
|
+
const compare = (field, oldValue, newValue) => {
|
|
267
|
+
if (oldValue !== newValue) {
|
|
268
|
+
changelogEntries.push({ field, oldValue, newValue });
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
if (params.title !== undefined) {
|
|
272
|
+
compare('title', existing.title, updated.title);
|
|
273
|
+
}
|
|
274
|
+
if (params.description !== undefined) {
|
|
275
|
+
compare('description', existing.description, updated.description);
|
|
276
|
+
}
|
|
277
|
+
if (params.metadata !== undefined) {
|
|
278
|
+
compare('metadata', existing.metadata, updated.metadata);
|
|
279
|
+
}
|
|
280
|
+
if (params.priority !== undefined) {
|
|
281
|
+
compare('priority', existing.priority, updated.priority);
|
|
282
|
+
}
|
|
283
|
+
if (params.parent_id !== undefined) {
|
|
284
|
+
compare('parent_id', existing.parent_id, updated.parent_id);
|
|
285
|
+
}
|
|
286
|
+
if (params.type !== undefined) {
|
|
287
|
+
compare('type', existing.type, updated.type);
|
|
288
|
+
}
|
|
289
|
+
if (params.status !== undefined) {
|
|
290
|
+
compare('status', existing.status, updated.status);
|
|
291
|
+
}
|
|
292
|
+
if (params.assigned_id !== undefined) {
|
|
293
|
+
compare('assigned_id', existing.assigned_id, updated.assigned_id);
|
|
294
|
+
}
|
|
295
|
+
if (params.closed_id !== undefined) {
|
|
296
|
+
compare('closed_id', existing.closed_id, updated.closed_id);
|
|
297
|
+
}
|
|
298
|
+
const updateStmt = this.#db.prepare(`
|
|
299
|
+
UPDATE task_storage
|
|
300
|
+
SET
|
|
301
|
+
title = ?,
|
|
302
|
+
description = ?,
|
|
303
|
+
metadata = ?,
|
|
304
|
+
priority = ?,
|
|
305
|
+
parent_id = ?,
|
|
306
|
+
type = ?,
|
|
307
|
+
status = ?,
|
|
308
|
+
open_date = ?,
|
|
309
|
+
in_progress_date = ?,
|
|
310
|
+
closed_date = ?,
|
|
311
|
+
created_id = ?,
|
|
312
|
+
assigned_id = ?,
|
|
313
|
+
closed_id = ?,
|
|
314
|
+
updated_at = ?
|
|
315
|
+
WHERE project_path = ? AND id = ?
|
|
316
|
+
`);
|
|
317
|
+
updateStmt.run(updated.title, updated.description, updated.metadata, updated.priority, updated.parent_id, updated.type, updated.status, updated.open_date, updated.in_progress_date, updated.closed_date, updated.created_id, updated.assigned_id, updated.closed_id, updated.updated_at, this.#projectPath, id);
|
|
318
|
+
if (changelogEntries.length > 0) {
|
|
319
|
+
const changelogStmt = this.#db.prepare(`
|
|
320
|
+
INSERT INTO task_changelog_storage (
|
|
321
|
+
project_path,
|
|
322
|
+
id,
|
|
323
|
+
task_id,
|
|
324
|
+
field,
|
|
325
|
+
old_value,
|
|
326
|
+
new_value,
|
|
327
|
+
created_at
|
|
328
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
329
|
+
`);
|
|
330
|
+
for (const entry of changelogEntries) {
|
|
331
|
+
changelogStmt.run(this.#projectPath, generateChangelogId(), id, entry.field, entry.oldValue, entry.newValue, timestamp);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return toTask(updated);
|
|
335
|
+
});
|
|
336
|
+
return updateInTransaction.immediate();
|
|
337
|
+
}
|
|
338
|
+
async close(id) {
|
|
339
|
+
const closeInTransaction = this.#db.transaction(() => {
|
|
340
|
+
const existingQuery = this.#db.query(`
|
|
341
|
+
SELECT
|
|
342
|
+
id,
|
|
343
|
+
created_at,
|
|
344
|
+
updated_at,
|
|
345
|
+
title,
|
|
346
|
+
description,
|
|
347
|
+
metadata,
|
|
348
|
+
priority,
|
|
349
|
+
parent_id,
|
|
350
|
+
type,
|
|
351
|
+
status,
|
|
352
|
+
open_date,
|
|
353
|
+
in_progress_date,
|
|
354
|
+
closed_date,
|
|
355
|
+
created_id,
|
|
356
|
+
assigned_id,
|
|
357
|
+
closed_id
|
|
358
|
+
FROM task_storage
|
|
359
|
+
WHERE project_path = ? AND id = ?
|
|
360
|
+
`);
|
|
361
|
+
const existing = existingQuery.get(this.#projectPath, id);
|
|
362
|
+
if (!existing) {
|
|
363
|
+
throw new TaskNotFoundError();
|
|
364
|
+
}
|
|
365
|
+
if (existing.status === 'closed') {
|
|
366
|
+
throw new TaskAlreadyClosedError();
|
|
367
|
+
}
|
|
368
|
+
const timestamp = now();
|
|
369
|
+
const nowIso = new Date(timestamp).toISOString();
|
|
370
|
+
const updated = {
|
|
371
|
+
...existing,
|
|
372
|
+
status: 'closed',
|
|
373
|
+
closed_date: existing.closed_date ?? nowIso,
|
|
374
|
+
updated_at: timestamp,
|
|
375
|
+
};
|
|
376
|
+
const updateStmt = this.#db.prepare(`
|
|
377
|
+
UPDATE task_storage
|
|
378
|
+
SET status = ?, closed_date = ?, updated_at = ?
|
|
379
|
+
WHERE project_path = ? AND id = ?
|
|
380
|
+
`);
|
|
381
|
+
updateStmt.run(updated.status, updated.closed_date, updated.updated_at, this.#projectPath, id);
|
|
382
|
+
const changelogStmt = this.#db.prepare(`
|
|
383
|
+
INSERT INTO task_changelog_storage (
|
|
384
|
+
project_path,
|
|
385
|
+
id,
|
|
386
|
+
task_id,
|
|
387
|
+
field,
|
|
388
|
+
old_value,
|
|
389
|
+
new_value,
|
|
390
|
+
created_at
|
|
391
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
392
|
+
`);
|
|
393
|
+
changelogStmt.run(this.#projectPath, generateChangelogId(), id, 'status', existing.status, updated.status, timestamp);
|
|
394
|
+
return toTask(updated);
|
|
395
|
+
});
|
|
396
|
+
return closeInTransaction.immediate();
|
|
397
|
+
}
|
|
398
|
+
async changelog(id, params) {
|
|
399
|
+
const limit = params?.limit ?? DEFAULT_LIMIT;
|
|
400
|
+
const offset = params?.offset ?? 0;
|
|
401
|
+
const totalQuery = this.#db.query(`SELECT COUNT(*) as count FROM task_changelog_storage WHERE project_path = ? AND task_id = ?`);
|
|
402
|
+
const totalRow = totalQuery.get(this.#projectPath, id);
|
|
403
|
+
const query = this.#db.query(`
|
|
404
|
+
SELECT
|
|
405
|
+
id,
|
|
406
|
+
created_at,
|
|
407
|
+
task_id,
|
|
408
|
+
field,
|
|
409
|
+
old_value,
|
|
410
|
+
new_value
|
|
411
|
+
FROM task_changelog_storage
|
|
412
|
+
WHERE project_path = ? AND task_id = ?
|
|
413
|
+
ORDER BY created_at DESC
|
|
414
|
+
LIMIT ? OFFSET ?
|
|
415
|
+
`);
|
|
416
|
+
const rows = query.all(this.#projectPath, id, limit, offset);
|
|
417
|
+
return {
|
|
418
|
+
changelog: rows.map(toChangelogEntry),
|
|
419
|
+
total: totalRow.count,
|
|
420
|
+
limit,
|
|
421
|
+
offset,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/services/local/task.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/runtime",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.23",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"prepublishOnly": "bun run clean && bun run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@agentuity/auth": "1.0.
|
|
30
|
-
"@agentuity/core": "1.0.
|
|
31
|
-
"@agentuity/frontend": "1.0.
|
|
32
|
-
"@agentuity/schema": "1.0.
|
|
33
|
-
"@agentuity/server": "1.0.
|
|
29
|
+
"@agentuity/auth": "1.0.23",
|
|
30
|
+
"@agentuity/core": "1.0.23",
|
|
31
|
+
"@agentuity/frontend": "1.0.23",
|
|
32
|
+
"@agentuity/schema": "1.0.23",
|
|
33
|
+
"@agentuity/server": "1.0.23",
|
|
34
34
|
"@opentelemetry/api": "^1.9.0",
|
|
35
35
|
"@opentelemetry/api-logs": "^0.207.0",
|
|
36
36
|
"@opentelemetry/auto-instrumentations-node": "^0.66.0",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"zod": "^4.3.5"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@agentuity/test-utils": "1.0.
|
|
53
|
+
"@agentuity/test-utils": "1.0.23",
|
|
54
54
|
"@types/bun": "latest",
|
|
55
55
|
"@types/react": "^19.2.2",
|
|
56
56
|
"@types/react-dom": "^19.2.2",
|
package/src/_context.ts
CHANGED
|
@@ -8,6 +8,9 @@ import {
|
|
|
8
8
|
type VectorStorage,
|
|
9
9
|
type SandboxService,
|
|
10
10
|
type QueueService,
|
|
11
|
+
type EmailService,
|
|
12
|
+
type ScheduleService,
|
|
13
|
+
type TaskStorage,
|
|
11
14
|
} from '@agentuity/core';
|
|
12
15
|
import type { AuthInterface } from '@agentuity/auth';
|
|
13
16
|
import type {
|
|
@@ -56,6 +59,9 @@ export class RequestAgentContext<
|
|
|
56
59
|
vector!: VectorStorage;
|
|
57
60
|
sandbox!: SandboxService;
|
|
58
61
|
queue!: QueueService;
|
|
62
|
+
email!: EmailService;
|
|
63
|
+
schedule!: ScheduleService;
|
|
64
|
+
task!: TaskStorage;
|
|
59
65
|
state: Map<string, unknown>;
|
|
60
66
|
session: Session;
|
|
61
67
|
thread: Thread;
|
package/src/_services.ts
CHANGED
|
@@ -4,12 +4,17 @@ import {
|
|
|
4
4
|
StreamStorageService,
|
|
5
5
|
VectorStorageService,
|
|
6
6
|
QueueStorageService,
|
|
7
|
+
EmailStorageService,
|
|
8
|
+
ScheduleService,
|
|
9
|
+
TaskStorageService,
|
|
7
10
|
type FetchAdapter,
|
|
8
11
|
type KeyValueStorage,
|
|
9
12
|
type StreamStorage,
|
|
10
13
|
type VectorStorage,
|
|
11
14
|
type SandboxService,
|
|
12
15
|
type QueueService,
|
|
16
|
+
type EmailService,
|
|
17
|
+
type TaskStorage,
|
|
13
18
|
type ListStreamsResponse,
|
|
14
19
|
type VectorUpsertResult,
|
|
15
20
|
type VectorSearchResult,
|
|
@@ -49,6 +54,8 @@ import {
|
|
|
49
54
|
LocalStreamStorage,
|
|
50
55
|
LocalVectorStorage,
|
|
51
56
|
LocalQueueStorage,
|
|
57
|
+
LocalEmailStorage,
|
|
58
|
+
LocalTaskStorage,
|
|
52
59
|
getLocalDB,
|
|
53
60
|
normalizeProjectPath,
|
|
54
61
|
createLocalStorageRouter,
|
|
@@ -66,6 +73,8 @@ const getStreamBaseUrl = () => getLazyServiceUrls().stream;
|
|
|
66
73
|
const getVectorBaseUrl = () => getLazyServiceUrls().vector;
|
|
67
74
|
const getCatalystBaseUrl = () => getLazyServiceUrls().catalyst;
|
|
68
75
|
const getQueueBaseUrl = () => getCatalystBaseUrl();
|
|
76
|
+
const getEmailBaseUrl = () => getLazyServiceUrls().email;
|
|
77
|
+
const getTaskBaseUrl = () => getCatalystBaseUrl();
|
|
69
78
|
|
|
70
79
|
let adapter: FetchAdapter;
|
|
71
80
|
|
|
@@ -174,6 +183,9 @@ let stream: StreamStorage;
|
|
|
174
183
|
let vector: VectorStorage;
|
|
175
184
|
let sandbox: SandboxService;
|
|
176
185
|
let queue: QueueService;
|
|
186
|
+
let email: EmailService;
|
|
187
|
+
let schedule: ScheduleService;
|
|
188
|
+
let task: TaskStorage;
|
|
177
189
|
let session: SessionProvider;
|
|
178
190
|
let thread: ThreadProvider;
|
|
179
191
|
let sessionEvent: SessionEventProvider;
|
|
@@ -211,6 +223,8 @@ export function createServices(logger: Logger, config?: AppConfig<any>, serverUr
|
|
|
211
223
|
stream = config?.services?.stream || new LocalStreamStorage(db, projectPath, serverUrl);
|
|
212
224
|
vector = config?.services?.vector || new LocalVectorStorage(db, projectPath);
|
|
213
225
|
queue = new LocalQueueStorage(db, projectPath);
|
|
226
|
+
email = config?.services?.email || new LocalEmailStorage();
|
|
227
|
+
task = config?.services?.task || new LocalTaskStorage(db, projectPath);
|
|
214
228
|
session = config?.services?.session || new DefaultSessionProvider();
|
|
215
229
|
thread = config?.services?.thread || new LocalThreadProvider();
|
|
216
230
|
sessionEvent = config?.services?.sessionEvent
|
|
@@ -241,7 +255,10 @@ export function createServices(logger: Logger, config?: AppConfig<any>, serverUr
|
|
|
241
255
|
stream = config?.services?.stream || new StreamStorageService(streamBaseUrl, adapter);
|
|
242
256
|
vector = config?.services?.vector || new VectorStorageService(getVectorBaseUrl(), adapter);
|
|
243
257
|
queue = new QueueStorageService(getQueueBaseUrl(), adapter);
|
|
258
|
+
email = config?.services?.email || new EmailStorageService(getEmailBaseUrl(), adapter);
|
|
259
|
+
task = config?.services?.task || new TaskStorageService(getTaskBaseUrl(), adapter);
|
|
244
260
|
sandbox = new HTTPSandboxService(new APIClient(catalystUrl, logger), streamBaseUrl);
|
|
261
|
+
schedule = new ScheduleService(getCatalystBaseUrl(), adapter);
|
|
245
262
|
session = config?.services?.session || new DefaultSessionProvider();
|
|
246
263
|
thread = config?.services?.thread || new DefaultThreadProvider();
|
|
247
264
|
// FIXME: this is turned off for now for production until we have the new changes deployed
|
|
@@ -292,7 +309,7 @@ export function getEvalRunEventProvider() {
|
|
|
292
309
|
}
|
|
293
310
|
|
|
294
311
|
export function getServices() {
|
|
295
|
-
return { kv, stream, vector, sandbox, queue };
|
|
312
|
+
return { kv, stream, vector, sandbox, queue, email, schedule, task };
|
|
296
313
|
}
|
|
297
314
|
|
|
298
315
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -322,6 +339,21 @@ export function registerServices(o: any, includeAgents = false) {
|
|
|
322
339
|
enumerable: false,
|
|
323
340
|
configurable: false,
|
|
324
341
|
});
|
|
342
|
+
Object.defineProperty(o, 'email', {
|
|
343
|
+
get: () => email,
|
|
344
|
+
enumerable: false,
|
|
345
|
+
configurable: false,
|
|
346
|
+
});
|
|
347
|
+
Object.defineProperty(o, 'schedule', {
|
|
348
|
+
get: () => schedule,
|
|
349
|
+
enumerable: false,
|
|
350
|
+
configurable: false,
|
|
351
|
+
});
|
|
352
|
+
Object.defineProperty(o, 'task', {
|
|
353
|
+
get: () => task,
|
|
354
|
+
enumerable: false,
|
|
355
|
+
configurable: false,
|
|
356
|
+
});
|
|
325
357
|
|
|
326
358
|
// Also register agent registry if requested
|
|
327
359
|
if (includeAgents) {
|
package/src/_standalone.ts
CHANGED
|
@@ -6,6 +6,9 @@ import type {
|
|
|
6
6
|
VectorStorage,
|
|
7
7
|
SandboxService,
|
|
8
8
|
QueueService,
|
|
9
|
+
EmailService,
|
|
10
|
+
ScheduleService,
|
|
11
|
+
TaskStorage,
|
|
9
12
|
Logger,
|
|
10
13
|
} from '@agentuity/core';
|
|
11
14
|
import { formatMessage } from './logger/util';
|
|
@@ -197,6 +200,9 @@ export class StandaloneAgentContext<
|
|
|
197
200
|
vector!: VectorStorage;
|
|
198
201
|
sandbox!: SandboxService;
|
|
199
202
|
queue!: QueueService;
|
|
203
|
+
email!: EmailService;
|
|
204
|
+
schedule!: ScheduleService;
|
|
205
|
+
task!: TaskStorage;
|
|
200
206
|
config: TConfig;
|
|
201
207
|
app: TAppState;
|
|
202
208
|
current!: AgentMetadata;
|
package/src/agent.ts
CHANGED
|
@@ -7,6 +7,9 @@ import {
|
|
|
7
7
|
type VectorStorage,
|
|
8
8
|
type SandboxService,
|
|
9
9
|
type QueueService,
|
|
10
|
+
type EmailService,
|
|
11
|
+
type ScheduleService,
|
|
12
|
+
type TaskStorage,
|
|
10
13
|
type InferInput,
|
|
11
14
|
type InferOutput,
|
|
12
15
|
toCamelCase,
|
|
@@ -242,6 +245,51 @@ export interface AgentContext<
|
|
|
242
245
|
*/
|
|
243
246
|
queue: QueueService;
|
|
244
247
|
|
|
248
|
+
/**
|
|
249
|
+
* Email service for managing email addresses, destinations, and sending/receiving emails.
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```typescript
|
|
253
|
+
* // Create an email address
|
|
254
|
+
* const address = await ctx.email.createAddress('support');
|
|
255
|
+
*
|
|
256
|
+
* // Send an email
|
|
257
|
+
* const result = await ctx.email.send({
|
|
258
|
+
* from: address.email,
|
|
259
|
+
* to: ['user@example.com'],
|
|
260
|
+
* subject: 'Hello!',
|
|
261
|
+
* text: 'Welcome to our platform.',
|
|
262
|
+
* });
|
|
263
|
+
*
|
|
264
|
+
* // List inbound emails
|
|
265
|
+
* const inbound = await ctx.email.listInbound(address.id);
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
email: EmailService;
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Schedule service for managing cron-based scheduled tasks with
|
|
272
|
+
* destinations and delivery tracking.
|
|
273
|
+
*
|
|
274
|
+
* @see https://agentuity.dev/services/schedule
|
|
275
|
+
*/
|
|
276
|
+
schedule: ScheduleService;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Task service for agent-driven issue tracking.
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```typescript
|
|
283
|
+
* const task = await ctx.task.create({
|
|
284
|
+
* title: 'Investigate API error',
|
|
285
|
+
* type: 'bug',
|
|
286
|
+
* created_id: ctx.current.id,
|
|
287
|
+
* });
|
|
288
|
+
* await ctx.task.update(task.id, { status: 'in_progress' });
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
task: TaskStorage;
|
|
292
|
+
|
|
245
293
|
/**
|
|
246
294
|
* In-memory state storage scoped to the current request.
|
|
247
295
|
* Use for passing data between middleware and handlers.
|