@agentuity/local 3.0.0-alpha.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 (56) hide show
  1. package/dist/bun/db.d.ts +4 -0
  2. package/dist/bun/db.d.ts.map +1 -0
  3. package/dist/bun/db.js +281 -0
  4. package/dist/bun/db.js.map +1 -0
  5. package/dist/bun/email.d.ts +24 -0
  6. package/dist/bun/email.d.ts.map +1 -0
  7. package/dist/bun/email.js +58 -0
  8. package/dist/bun/email.js.map +1 -0
  9. package/dist/bun/index.d.ts +14 -0
  10. package/dist/bun/index.d.ts.map +1 -0
  11. package/dist/bun/index.js +14 -0
  12. package/dist/bun/index.js.map +1 -0
  13. package/dist/bun/kv.d.ts +17 -0
  14. package/dist/bun/kv.d.ts.map +1 -0
  15. package/dist/bun/kv.js +133 -0
  16. package/dist/bun/kv.js.map +1 -0
  17. package/dist/bun/queue.d.ts +10 -0
  18. package/dist/bun/queue.d.ts.map +1 -0
  19. package/dist/bun/queue.js +96 -0
  20. package/dist/bun/queue.js.map +1 -0
  21. package/dist/bun/stream.d.ts +12 -0
  22. package/dist/bun/stream.d.ts.map +1 -0
  23. package/dist/bun/stream.js +266 -0
  24. package/dist/bun/stream.js.map +1 -0
  25. package/dist/bun/task.d.ts +55 -0
  26. package/dist/bun/task.d.ts.map +1 -0
  27. package/dist/bun/task.js +1248 -0
  28. package/dist/bun/task.js.map +1 -0
  29. package/dist/bun/util.d.ts +18 -0
  30. package/dist/bun/util.d.ts.map +1 -0
  31. package/dist/bun/util.js +44 -0
  32. package/dist/bun/util.js.map +1 -0
  33. package/dist/bun/vector.d.ts +17 -0
  34. package/dist/bun/vector.d.ts.map +1 -0
  35. package/dist/bun/vector.js +303 -0
  36. package/dist/bun/vector.js.map +1 -0
  37. package/dist/index.d.ts +13 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +14 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/runtime.d.ts +20 -0
  42. package/dist/runtime.d.ts.map +1 -0
  43. package/dist/runtime.js +44 -0
  44. package/dist/runtime.js.map +1 -0
  45. package/package.json +42 -0
  46. package/src/bun/db.ts +353 -0
  47. package/src/bun/email.ts +91 -0
  48. package/src/bun/index.ts +14 -0
  49. package/src/bun/kv.ts +174 -0
  50. package/src/bun/queue.ts +145 -0
  51. package/src/bun/stream.ts +358 -0
  52. package/src/bun/task.ts +1711 -0
  53. package/src/bun/util.ts +55 -0
  54. package/src/bun/vector.ts +438 -0
  55. package/src/index.ts +36 -0
  56. package/src/runtime.ts +56 -0
@@ -0,0 +1,4 @@
1
+ import { Database } from 'bun:sqlite';
2
+ export declare function getLocalDB(): Database;
3
+ export declare function closeLocalDB(): void;
4
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/bun/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC,wBAAgB,UAAU,IAAI,QAAQ,CAkBrC;AAkUD,wBAAgB,YAAY,IAAI,IAAI,CAKnC"}
package/dist/bun/db.js ADDED
@@ -0,0 +1,281 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import { mkdirSync, existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ let dbInstance = null;
6
+ export function getLocalDB() {
7
+ if (dbInstance) {
8
+ return dbInstance;
9
+ }
10
+ const configDir = join(homedir(), '.config', 'agentuity');
11
+ if (!existsSync(configDir)) {
12
+ mkdirSync(configDir, { recursive: true });
13
+ }
14
+ const dbPath = join(configDir, 'local.db');
15
+ dbInstance = new Database(dbPath);
16
+ initializeTables(dbInstance);
17
+ cleanupOrphanedProjects(dbInstance);
18
+ return dbInstance;
19
+ }
20
+ function initializeTables(db) {
21
+ // KeyValue Storage table
22
+ db.run(`
23
+ CREATE TABLE IF NOT EXISTS kv_storage (
24
+ project_path TEXT NOT NULL,
25
+ name TEXT NOT NULL,
26
+ key TEXT NOT NULL,
27
+ value BLOB NOT NULL,
28
+ content_type TEXT NOT NULL DEFAULT 'application/octet-stream',
29
+ expires_at INTEGER,
30
+ created_at INTEGER NOT NULL,
31
+ updated_at INTEGER NOT NULL,
32
+ PRIMARY KEY (project_path, name, key)
33
+ )
34
+ `);
35
+ db.run(`
36
+ CREATE INDEX IF NOT EXISTS idx_kv_expires
37
+ ON kv_storage(expires_at)
38
+ WHERE expires_at IS NOT NULL
39
+ `);
40
+ // Stream Storage table
41
+ db.run(`
42
+ CREATE TABLE IF NOT EXISTS stream_storage (
43
+ project_path TEXT NOT NULL,
44
+ id TEXT PRIMARY KEY,
45
+ name TEXT NOT NULL,
46
+ metadata TEXT,
47
+ content_type TEXT NOT NULL DEFAULT 'application/octet-stream',
48
+ data BLOB,
49
+ size_bytes INTEGER NOT NULL DEFAULT 0,
50
+ created_at INTEGER NOT NULL
51
+ )
52
+ `);
53
+ db.run(`
54
+ CREATE INDEX IF NOT EXISTS idx_stream_name
55
+ ON stream_storage(project_path, name)
56
+ `);
57
+ db.run(`
58
+ CREATE INDEX IF NOT EXISTS idx_stream_metadata
59
+ ON stream_storage(metadata)
60
+ `);
61
+ // Vector Storage table
62
+ db.run(`
63
+ CREATE TABLE IF NOT EXISTS vector_storage (
64
+ project_path TEXT NOT NULL,
65
+ name TEXT NOT NULL,
66
+ id TEXT PRIMARY KEY,
67
+ key TEXT NOT NULL,
68
+ embedding TEXT NOT NULL,
69
+ document TEXT,
70
+ metadata TEXT,
71
+ created_at INTEGER NOT NULL,
72
+ updated_at INTEGER NOT NULL,
73
+ UNIQUE (project_path, name, key)
74
+ )
75
+ `);
76
+ db.run(`
77
+ CREATE INDEX IF NOT EXISTS idx_vector_lookup
78
+ ON vector_storage(project_path, name, key)
79
+ `);
80
+ db.run(`
81
+ CREATE INDEX IF NOT EXISTS idx_vector_name
82
+ ON vector_storage(project_path, name)
83
+ `);
84
+ // Task Storage table
85
+ db.run(`
86
+ CREATE TABLE IF NOT EXISTS task_storage (
87
+ project_path TEXT NOT NULL,
88
+ id TEXT NOT NULL,
89
+ title TEXT NOT NULL,
90
+ description TEXT,
91
+ metadata TEXT,
92
+ priority TEXT NOT NULL DEFAULT 'none',
93
+ parent_id TEXT,
94
+ type TEXT NOT NULL,
95
+ status TEXT NOT NULL DEFAULT 'open',
96
+ open_date TEXT,
97
+ in_progress_date TEXT,
98
+ closed_date TEXT,
99
+ created_id TEXT NOT NULL,
100
+ assigned_id TEXT,
101
+ closed_id TEXT,
102
+ deleted INTEGER NOT NULL DEFAULT 0,
103
+ created_at INTEGER NOT NULL,
104
+ updated_at INTEGER NOT NULL,
105
+ PRIMARY KEY (project_path, id)
106
+ )
107
+ `);
108
+ // Migration: add deleted column for existing databases
109
+ try {
110
+ db.run('ALTER TABLE task_storage ADD COLUMN deleted INTEGER NOT NULL DEFAULT 0');
111
+ }
112
+ catch {
113
+ // Column already exists
114
+ }
115
+ // Task Changelog table
116
+ db.run(`
117
+ CREATE TABLE IF NOT EXISTS task_changelog_storage (
118
+ project_path TEXT NOT NULL,
119
+ id TEXT NOT NULL,
120
+ task_id TEXT NOT NULL,
121
+ field TEXT NOT NULL,
122
+ old_value TEXT,
123
+ new_value TEXT,
124
+ created_at INTEGER NOT NULL,
125
+ PRIMARY KEY (project_path, id)
126
+ )
127
+ `);
128
+ db.run(`
129
+ CREATE INDEX IF NOT EXISTS idx_task_changelog_lookup
130
+ ON task_changelog_storage(project_path, task_id)
131
+ `);
132
+ // Task Comment table
133
+ db.run(`
134
+ CREATE TABLE IF NOT EXISTS task_comment_storage (
135
+ project_path TEXT NOT NULL,
136
+ id TEXT NOT NULL,
137
+ task_id TEXT NOT NULL,
138
+ user_id TEXT NOT NULL,
139
+ body TEXT NOT NULL,
140
+ created_at INTEGER NOT NULL,
141
+ updated_at INTEGER NOT NULL,
142
+ PRIMARY KEY (project_path, id)
143
+ )
144
+ `);
145
+ db.run(`
146
+ CREATE INDEX IF NOT EXISTS idx_task_comment_lookup
147
+ ON task_comment_storage(project_path, task_id)
148
+ `);
149
+ // Task Tag table
150
+ db.run(`
151
+ CREATE TABLE IF NOT EXISTS task_tag_storage (
152
+ project_path TEXT NOT NULL,
153
+ id TEXT NOT NULL,
154
+ name TEXT NOT NULL,
155
+ color TEXT,
156
+ created_at INTEGER NOT NULL,
157
+ PRIMARY KEY (project_path, id)
158
+ )
159
+ `);
160
+ // Task-Tag association table
161
+ db.run(`
162
+ CREATE TABLE IF NOT EXISTS task_tag_association_storage (
163
+ project_path TEXT NOT NULL,
164
+ task_id TEXT NOT NULL,
165
+ tag_id TEXT NOT NULL,
166
+ PRIMARY KEY (project_path, task_id, tag_id)
167
+ )
168
+ `);
169
+ db.run(`
170
+ CREATE INDEX IF NOT EXISTS idx_task_tag_assoc_task
171
+ ON task_tag_association_storage(project_path, task_id)
172
+ `);
173
+ db.run(`
174
+ CREATE INDEX IF NOT EXISTS idx_task_tag_assoc_tag
175
+ ON task_tag_association_storage(project_path, tag_id)
176
+ `);
177
+ // Task User table
178
+ db.run(`
179
+ CREATE TABLE IF NOT EXISTS task_user_storage (
180
+ project_path TEXT NOT NULL,
181
+ id TEXT NOT NULL,
182
+ name TEXT NOT NULL,
183
+ type TEXT NOT NULL DEFAULT 'human',
184
+ created_at INTEGER NOT NULL,
185
+ PRIMARY KEY (project_path, id)
186
+ )
187
+ `);
188
+ // Task Project table
189
+ db.run(`
190
+ CREATE TABLE IF NOT EXISTS task_project_storage (
191
+ project_path TEXT NOT NULL,
192
+ id TEXT NOT NULL,
193
+ name TEXT NOT NULL,
194
+ created_at INTEGER NOT NULL,
195
+ PRIMARY KEY (project_path, id)
196
+ )
197
+ `);
198
+ }
199
+ function cleanupOrphanedProjects(db) {
200
+ // Get the current project path to exclude from cleanup
201
+ const currentProjectPath = process.cwd();
202
+ // Query all tables for unique project paths
203
+ const kvPaths = db.query('SELECT DISTINCT project_path FROM kv_storage').all();
204
+ const streamPaths = db.query('SELECT DISTINCT project_path FROM stream_storage').all();
205
+ const vectorPaths = db.query('SELECT DISTINCT project_path FROM vector_storage').all();
206
+ const taskPaths = db.query('SELECT DISTINCT project_path FROM task_storage').all();
207
+ const taskChangelogPaths = db
208
+ .query('SELECT DISTINCT project_path FROM task_changelog_storage')
209
+ .all();
210
+ const taskCommentPaths = db
211
+ .query('SELECT DISTINCT project_path FROM task_comment_storage')
212
+ .all();
213
+ const taskTagPaths = db
214
+ .query('SELECT DISTINCT project_path FROM task_tag_storage')
215
+ .all();
216
+ const taskTagAssocPaths = db
217
+ .query('SELECT DISTINCT project_path FROM task_tag_association_storage')
218
+ .all();
219
+ const taskUserPaths = db
220
+ .query('SELECT DISTINCT project_path FROM task_user_storage')
221
+ .all();
222
+ const taskProjectPaths = db
223
+ .query('SELECT DISTINCT project_path FROM task_project_storage')
224
+ .all();
225
+ // Combine and deduplicate all project paths
226
+ const allPaths = new Set();
227
+ [
228
+ ...kvPaths,
229
+ ...streamPaths,
230
+ ...vectorPaths,
231
+ ...taskPaths,
232
+ ...taskChangelogPaths,
233
+ ...taskCommentPaths,
234
+ ...taskTagPaths,
235
+ ...taskTagAssocPaths,
236
+ ...taskUserPaths,
237
+ ...taskProjectPaths,
238
+ ].forEach((row) => {
239
+ allPaths.add(row.project_path);
240
+ });
241
+ // Check which paths no longer exist and are not the current project
242
+ const pathsToDelete = [];
243
+ for (const path of allPaths) {
244
+ if (path !== currentProjectPath && !existsSync(path)) {
245
+ pathsToDelete.push(path);
246
+ }
247
+ }
248
+ // Delete data for removed projects
249
+ if (pathsToDelete.length > 0) {
250
+ const placeholders = pathsToDelete.map(() => '?').join(', ');
251
+ // Delete from all tables
252
+ const deleteKv = db.prepare(`DELETE FROM kv_storage WHERE project_path IN (${placeholders})`);
253
+ const deleteStream = db.prepare(`DELETE FROM stream_storage WHERE project_path IN (${placeholders})`);
254
+ const deleteVector = db.prepare(`DELETE FROM vector_storage WHERE project_path IN (${placeholders})`);
255
+ const deleteTasks = db.prepare(`DELETE FROM task_storage WHERE project_path IN (${placeholders})`);
256
+ const deleteTaskChangelog = db.prepare(`DELETE FROM task_changelog_storage WHERE project_path IN (${placeholders})`);
257
+ const deleteTaskComments = db.prepare(`DELETE FROM task_comment_storage WHERE project_path IN (${placeholders})`);
258
+ const deleteTaskTags = db.prepare(`DELETE FROM task_tag_storage WHERE project_path IN (${placeholders})`);
259
+ const deleteTaskTagAssoc = db.prepare(`DELETE FROM task_tag_association_storage WHERE project_path IN (${placeholders})`);
260
+ const deleteTaskUsers = db.prepare(`DELETE FROM task_user_storage WHERE project_path IN (${placeholders})`);
261
+ const deleteTaskProjects = db.prepare(`DELETE FROM task_project_storage WHERE project_path IN (${placeholders})`);
262
+ deleteKv.run(...pathsToDelete);
263
+ deleteStream.run(...pathsToDelete);
264
+ deleteVector.run(...pathsToDelete);
265
+ deleteTasks.run(...pathsToDelete);
266
+ deleteTaskChangelog.run(...pathsToDelete);
267
+ deleteTaskComments.run(...pathsToDelete);
268
+ deleteTaskTags.run(...pathsToDelete);
269
+ deleteTaskTagAssoc.run(...pathsToDelete);
270
+ deleteTaskUsers.run(...pathsToDelete);
271
+ deleteTaskProjects.run(...pathsToDelete);
272
+ console.log(`[LocalDB] Cleaned up data for ${pathsToDelete.length} orphaned project(s)`);
273
+ }
274
+ }
275
+ export function closeLocalDB() {
276
+ if (dbInstance) {
277
+ dbInstance.close();
278
+ dbInstance = null;
279
+ }
280
+ }
281
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/bun/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type EmailService, type EmailAddress, type EmailDestination, type EmailConnectionConfig, type EmailInbound, type EmailOutbound, type EmailSendParams, type EmailActivityParams, type EmailActivityResult } from '@agentuity/core';
2
+ /**
3
+ * Local development stub for the email service.
4
+ * All methods throw a descriptive error directing users to deploy to Agentuity Cloud.
5
+ */
6
+ export declare class LocalEmailStorage implements EmailService {
7
+ createAddress(_localPart: string): Promise<EmailAddress>;
8
+ listAddresses(): Promise<EmailAddress[]>;
9
+ getAddress(_id: string): Promise<EmailAddress | null>;
10
+ getConnectionConfig(_id: string): Promise<EmailConnectionConfig | null>;
11
+ deleteAddress(_id: string): Promise<void>;
12
+ createDestination(_addressId: string, _type: string, _config: Record<string, unknown>): Promise<EmailDestination>;
13
+ listDestinations(_addressId: string): Promise<EmailDestination[]>;
14
+ deleteDestination(_addressId: string, _destinationId: string): Promise<void>;
15
+ send(_params: EmailSendParams): Promise<EmailOutbound>;
16
+ listInbound(_addressId?: string): Promise<EmailInbound[]>;
17
+ getInbound(_id: string): Promise<EmailInbound | null>;
18
+ deleteInbound(_id: string): Promise<void>;
19
+ listOutbound(_addressId?: string): Promise<EmailOutbound[]>;
20
+ getOutbound(_id: string): Promise<EmailOutbound | null>;
21
+ deleteOutbound(_id: string): Promise<void>;
22
+ getActivity(_params?: EmailActivityParams): Promise<EmailActivityResult>;
23
+ }
24
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/bun/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,MAAM,iBAAiB,CAAC;AAOzB;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAC/C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIxD,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIxC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIrD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAIvE,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,iBAAiB,CACtB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IAItB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIjE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAItD,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIrD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAI3D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIvD,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,WAAW,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAG9E"}
@@ -0,0 +1,58 @@
1
+ import { StructuredError, } from '@agentuity/core';
2
+ const ERROR_MESSAGE = 'Email service is not available in local development mode. Deploy to Agentuity Cloud to use email.';
3
+ const LocalEmailNotAvailableError = StructuredError('LocalEmailNotAvailableError', ERROR_MESSAGE);
4
+ /**
5
+ * Local development stub for the email service.
6
+ * All methods throw a descriptive error directing users to deploy to Agentuity Cloud.
7
+ */
8
+ export class LocalEmailStorage {
9
+ async createAddress(_localPart) {
10
+ throw new LocalEmailNotAvailableError();
11
+ }
12
+ async listAddresses() {
13
+ throw new LocalEmailNotAvailableError();
14
+ }
15
+ async getAddress(_id) {
16
+ throw new LocalEmailNotAvailableError();
17
+ }
18
+ async getConnectionConfig(_id) {
19
+ throw new LocalEmailNotAvailableError();
20
+ }
21
+ async deleteAddress(_id) {
22
+ throw new LocalEmailNotAvailableError();
23
+ }
24
+ async createDestination(_addressId, _type, _config) {
25
+ throw new LocalEmailNotAvailableError();
26
+ }
27
+ async listDestinations(_addressId) {
28
+ throw new LocalEmailNotAvailableError();
29
+ }
30
+ async deleteDestination(_addressId, _destinationId) {
31
+ throw new LocalEmailNotAvailableError();
32
+ }
33
+ async send(_params) {
34
+ throw new LocalEmailNotAvailableError();
35
+ }
36
+ async listInbound(_addressId) {
37
+ throw new LocalEmailNotAvailableError();
38
+ }
39
+ async getInbound(_id) {
40
+ throw new LocalEmailNotAvailableError();
41
+ }
42
+ async deleteInbound(_id) {
43
+ throw new LocalEmailNotAvailableError();
44
+ }
45
+ async listOutbound(_addressId) {
46
+ throw new LocalEmailNotAvailableError();
47
+ }
48
+ async getOutbound(_id) {
49
+ throw new LocalEmailNotAvailableError();
50
+ }
51
+ async deleteOutbound(_id) {
52
+ throw new LocalEmailNotAvailableError();
53
+ }
54
+ async getActivity(_params) {
55
+ throw new LocalEmailNotAvailableError();
56
+ }
57
+ }
58
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/bun/email.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,GAUf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,aAAa,GAClB,mGAAmG,CAAC;AAErG,MAAM,2BAA2B,GAAG,eAAe,CAAC,6BAA6B,EAAE,aAAa,CAAC,CAAC;AAElG;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC7B,KAAK,CAAC,aAAa,CAAC,UAAkB;QACrC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,aAAa;QAClB,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC3B,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAW;QACpC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW;QAC9B,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,iBAAiB,CACtB,UAAkB,EAClB,KAAa,EACb,OAAgC;QAEhC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACxC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAkB,EAAE,cAAsB;QACjE,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QAClC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAmB;QACpC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC3B,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW;QAC9B,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAmB;QACrC,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW;QAC/B,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA6B;QAC9C,MAAM,IAAI,2BAA2B,EAAE,CAAC;IACzC,CAAC;CACD"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Bun-specific local storage implementations
3
+ *
4
+ * Uses Bun's built-in SQLite for local development storage.
5
+ */
6
+ export { getLocalDB, closeLocalDB } from './db';
7
+ export { LocalKeyValueStorage } from './kv';
8
+ export { LocalStreamStorage } from './stream';
9
+ export { LocalVectorStorage } from './vector';
10
+ export { LocalQueueStorage } from './queue';
11
+ export { LocalEmailStorage } from './email';
12
+ export { LocalTaskStorage } from './task';
13
+ export { now, normalizeProjectPath } from './util';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bun/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Bun-specific local storage implementations
3
+ *
4
+ * Uses Bun's built-in SQLite for local development storage.
5
+ */
6
+ export { getLocalDB, closeLocalDB } from './db';
7
+ export { LocalKeyValueStorage } from './kv';
8
+ export { LocalStreamStorage } from './stream';
9
+ export { LocalVectorStorage } from './vector';
10
+ export { LocalQueueStorage } from './queue';
11
+ export { LocalEmailStorage } from './email';
12
+ export { LocalTaskStorage } from './task';
13
+ export { now, normalizeProjectPath } from './util';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bun/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import type { KeyValueStorage, DataResult, KeyValueStorageSetParams, KeyValueStats, KeyValueItemWithMetadata, CreateNamespaceParams, GetAllStatsParams, KeyValueStatsPaginated } from '@agentuity/core';
3
+ export declare class LocalKeyValueStorage implements KeyValueStorage {
4
+ #private;
5
+ constructor(db: Database, projectPath: string);
6
+ get<T>(name: string, key: string): Promise<DataResult<T>>;
7
+ set<T = unknown>(name: string, key: string, value: T, params?: KeyValueStorageSetParams): Promise<void>;
8
+ delete(name: string, key: string): Promise<void>;
9
+ getStats(_name: string): Promise<KeyValueStats>;
10
+ getAllStats(_params?: GetAllStatsParams): Promise<Record<string, KeyValueStats> | KeyValueStatsPaginated>;
11
+ getNamespaces(): Promise<string[]>;
12
+ search<T = unknown>(_name: string, _keyword: string): Promise<Record<string, KeyValueItemWithMetadata<T>>>;
13
+ getKeys(_name: string): Promise<string[]>;
14
+ deleteNamespace(_name: string): Promise<void>;
15
+ createNamespace(_name: string, _params?: CreateNamespaceParams): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/bun/kv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EACX,eAAe,EACf,UAAU,EAEV,wBAAwB,EACxB,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,iBAAiB,CAAC;AAGzB,qBAAa,oBAAqB,YAAW,eAAe;;gBAI/C,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM;IAKvC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAiDzD,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,wBAAwB,GAC/B,OAAO,CAAC,IAAI,CAAC;IAuDV,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI/C,WAAW,CAChB,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,sBAAsB,CAAC;IAI5D,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlC,MAAM,CAAC,CAAC,GAAG,OAAO,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;IAIjD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpF"}
package/dist/bun/kv.js ADDED
@@ -0,0 +1,133 @@
1
+ import { now } from './util';
2
+ export class LocalKeyValueStorage {
3
+ #db;
4
+ #projectPath;
5
+ constructor(db, projectPath) {
6
+ this.#db = db;
7
+ this.#projectPath = projectPath;
8
+ }
9
+ async get(name, key) {
10
+ const query = this.#db.query(`
11
+ SELECT value, content_type, expires_at
12
+ FROM kv_storage
13
+ WHERE project_path = ? AND name = ? AND key = ?
14
+ `);
15
+ const row = query.get(this.#projectPath, name, key);
16
+ if (!row) {
17
+ return { exists: false };
18
+ }
19
+ // Check expiration
20
+ if (row.expires_at && row.expires_at < now()) {
21
+ // Delete expired row
22
+ await this.delete(name, key);
23
+ return { exists: false };
24
+ }
25
+ // Deserialize based on content type
26
+ let data;
27
+ if (row.content_type === 'application/json') {
28
+ try {
29
+ const text = row.value.toString('utf-8');
30
+ data = JSON.parse(text);
31
+ }
32
+ catch {
33
+ // If JSON parse fails, return the raw buffer as Uint8Array
34
+ data = new Uint8Array(row.value);
35
+ }
36
+ }
37
+ else if (row.content_type.startsWith('text/')) {
38
+ data = row.value.toString('utf-8');
39
+ }
40
+ else {
41
+ data = new Uint8Array(row.value);
42
+ }
43
+ return {
44
+ data,
45
+ contentType: row.content_type,
46
+ exists: true,
47
+ // Include expiresAt if set (convert from Unix timestamp to ISO string)
48
+ ...(row.expires_at && { expiresAt: new Date(row.expires_at).toISOString() }),
49
+ };
50
+ }
51
+ async set(name, key, value, params) {
52
+ // Serialize value
53
+ let buffer;
54
+ let contentType = params?.contentType || 'application/octet-stream';
55
+ if (typeof value === 'string') {
56
+ buffer = Buffer.from(value, 'utf-8');
57
+ if (!params?.contentType) {
58
+ contentType = 'text/plain';
59
+ }
60
+ }
61
+ else if (value instanceof Uint8Array) {
62
+ buffer = Buffer.from(value);
63
+ }
64
+ else if (value instanceof ArrayBuffer) {
65
+ buffer = Buffer.from(new Uint8Array(value));
66
+ }
67
+ else if (typeof value === 'number' ||
68
+ typeof value === 'boolean' ||
69
+ typeof value === 'object') {
70
+ // Use JSON for numbers, booleans, and objects to preserve type on round-trip
71
+ buffer = Buffer.from(JSON.stringify(value), 'utf-8');
72
+ contentType = 'application/json';
73
+ }
74
+ else {
75
+ // Fallback for other types
76
+ buffer = Buffer.from(String(value), 'utf-8');
77
+ }
78
+ // Calculate expiration
79
+ // TTL handling: null or 0 = no expiration, positive = TTL in seconds
80
+ // undefined = use default (7 days for consistency with cloud namespace default)
81
+ let expiresAt = null;
82
+ if (params?.ttl === undefined) {
83
+ // Default to 7 days (matching cloud namespace default behavior)
84
+ expiresAt = now() + 7 * 24 * 60 * 60 * 1000;
85
+ }
86
+ else if (params.ttl !== null && params.ttl > 0) {
87
+ expiresAt = now() + params.ttl * 1000;
88
+ }
89
+ // else: ttl is null or 0, so expiresAt stays null (no expiration)
90
+ const timestamp = now();
91
+ // UPSERT
92
+ const stmt = this.#db.prepare(`
93
+ INSERT INTO kv_storage (project_path, name, key, value, content_type, expires_at, created_at, updated_at)
94
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
95
+ ON CONFLICT(project_path, name, key)
96
+ DO UPDATE SET
97
+ value = excluded.value,
98
+ content_type = excluded.content_type,
99
+ expires_at = excluded.expires_at,
100
+ updated_at = excluded.updated_at
101
+ `);
102
+ stmt.run(this.#projectPath, name, key, buffer, contentType, expiresAt, timestamp, timestamp);
103
+ }
104
+ async delete(name, key) {
105
+ const stmt = this.#db.prepare(`
106
+ DELETE FROM kv_storage
107
+ WHERE project_path = ? AND name = ? AND key = ?
108
+ `);
109
+ stmt.run(this.#projectPath, name, key);
110
+ }
111
+ async getStats(_name) {
112
+ throw new Error('getStats not implemented for local storage');
113
+ }
114
+ async getAllStats(_params) {
115
+ throw new Error('getAllStats not implemented for local storage');
116
+ }
117
+ async getNamespaces() {
118
+ throw new Error('getNamespaces not implemented for local storage');
119
+ }
120
+ async search(_name, _keyword) {
121
+ throw new Error('search not implemented for local storage');
122
+ }
123
+ async getKeys(_name) {
124
+ throw new Error('getKeys not implemented for local storage');
125
+ }
126
+ async deleteNamespace(_name) {
127
+ throw new Error('deleteNamespace not implemented for local storage');
128
+ }
129
+ async createNamespace(_name, _params) {
130
+ throw new Error('createNamespace not implemented for local storage');
131
+ }
132
+ }
133
+ //# sourceMappingURL=kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/bun/kv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ import type { QueueService, QueuePublishParams, QueuePublishResult, QueueCreateParams, QueueCreateResult } from '@agentuity/core';
3
+ export declare class LocalQueueStorage implements QueueService {
4
+ #private;
5
+ constructor(db: Database, projectPath: string);
6
+ publish(queueName: string, payload: string | object, params?: QueuePublishParams): Promise<QueuePublishResult>;
7
+ createQueue(queueName: string, params?: QueueCreateParams): Promise<QueueCreateResult>;
8
+ deleteQueue(_queueName: string): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/bun/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,iBAAkB,YAAW,YAAY;;gBAIzC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM;IAqCvC,OAAO,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,CAAC,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC;IA+ExB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQtF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpD"}