@action-llama/action-llama 0.15.0 → 0.16.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.
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +101 -4
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/webhook.d.ts +11 -0
- package/dist/cli/commands/webhook.d.ts.map +1 -0
- package/dist/cli/commands/webhook.js +271 -0
- package/dist/cli/commands/webhook.js.map +1 -0
- package/dist/cli/main.js +17 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/docker/local-runtime.d.ts.map +1 -1
- package/dist/docker/local-runtime.js +36 -7
- package/dist/docker/local-runtime.js.map +1 -1
- package/dist/docker/runtime.d.ts +4 -0
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/gateway/index.d.ts +2 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +1 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/webhooks.d.ts +2 -1
- package/dist/gateway/routes/webhooks.d.ts.map +1 -1
- package/dist/gateway/routes/webhooks.js +3 -2
- package/dist/gateway/routes/webhooks.js.map +1 -1
- package/dist/remote/push.d.ts.map +1 -1
- package/dist/remote/push.js +11 -2
- package/dist/remote/push.js.map +1 -1
- package/dist/scheduler/event-queue-unified.d.ts +50 -0
- package/dist/scheduler/event-queue-unified.d.ts.map +1 -0
- package/dist/scheduler/event-queue-unified.js +280 -0
- package/dist/scheduler/event-queue-unified.js.map +1 -0
- package/dist/scheduler/execution.d.ts +2 -1
- package/dist/scheduler/execution.d.ts.map +1 -1
- package/dist/scheduler/execution.js +48 -8
- package/dist/scheduler/execution.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +2 -1
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +2 -1
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/lifecycle/agent-lifecycle.d.ts +114 -0
- package/dist/scheduler/lifecycle/agent-lifecycle.d.ts.map +1 -0
- package/dist/scheduler/lifecycle/agent-lifecycle.js +236 -0
- package/dist/scheduler/lifecycle/agent-lifecycle.js.map +1 -0
- package/dist/scheduler/lifecycle/index.d.ts +60 -0
- package/dist/scheduler/lifecycle/index.d.ts.map +1 -0
- package/dist/scheduler/lifecycle/index.js +103 -0
- package/dist/scheduler/lifecycle/index.js.map +1 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.d.ts +88 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.d.ts.map +1 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.js +142 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.js.map +1 -0
- package/dist/scheduler/types.d.ts +2 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.d.ts +1 -0
- package/dist/scheduler/webhook-setup.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.js +14 -2
- package/dist/scheduler/webhook-setup.js.map +1 -1
- package/dist/shared/config.d.ts +1 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/constants.d.ts +16 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +54 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/persistence/adapters/state-store.d.ts +24 -0
- package/dist/shared/persistence/adapters/state-store.d.ts.map +1 -0
- package/dist/shared/persistence/adapters/state-store.js +32 -0
- package/dist/shared/persistence/adapters/state-store.js.map +1 -0
- package/dist/shared/persistence/adapters/stats-store.d.ts +49 -0
- package/dist/shared/persistence/adapters/stats-store.d.ts.map +1 -0
- package/dist/shared/persistence/adapters/stats-store.js +213 -0
- package/dist/shared/persistence/adapters/stats-store.js.map +1 -0
- package/dist/shared/persistence/backends/memory.d.ts +39 -0
- package/dist/shared/persistence/backends/memory.d.ts.map +1 -0
- package/dist/shared/persistence/backends/memory.js +214 -0
- package/dist/shared/persistence/backends/memory.js.map +1 -0
- package/dist/shared/persistence/backends/sqlite.d.ts +38 -0
- package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -0
- package/dist/shared/persistence/backends/sqlite.js +250 -0
- package/dist/shared/persistence/backends/sqlite.js.map +1 -0
- package/dist/shared/persistence/event-store.d.ts +77 -0
- package/dist/shared/persistence/event-store.d.ts.map +1 -0
- package/dist/shared/persistence/event-store.js +139 -0
- package/dist/shared/persistence/event-store.js.map +1 -0
- package/dist/shared/persistence/index.d.ts +119 -0
- package/dist/shared/persistence/index.d.ts.map +1 -0
- package/dist/shared/persistence/index.js +93 -0
- package/dist/shared/persistence/index.js.map +1 -0
- package/dist/shared/persistence/migration.d.ts +47 -0
- package/dist/shared/persistence/migration.d.ts.map +1 -0
- package/dist/shared/persistence/migration.js +297 -0
- package/dist/shared/persistence/migration.js.map +1 -0
- package/dist/shared/validation.d.ts +61 -0
- package/dist/shared/validation.d.ts.map +1 -0
- package/dist/shared/validation.js +280 -0
- package/dist/shared/validation.js.map +1 -0
- package/dist/stats/event-store.d.ts +37 -0
- package/dist/stats/event-store.d.ts.map +1 -0
- package/dist/stats/event-store.js +366 -0
- package/dist/stats/event-store.js.map +1 -0
- package/dist/tui/status-tracker.d.ts +19 -0
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +96 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/dist/webhooks/providers/github.d.ts +1 -1
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +2 -2
- package/dist/webhooks/providers/github.js.map +1 -1
- package/dist/webhooks/providers/linear.d.ts +1 -1
- package/dist/webhooks/providers/linear.d.ts.map +1 -1
- package/dist/webhooks/providers/linear.js +2 -2
- package/dist/webhooks/providers/linear.js.map +1 -1
- package/dist/webhooks/providers/mintlify.d.ts +1 -1
- package/dist/webhooks/providers/mintlify.d.ts.map +1 -1
- package/dist/webhooks/providers/mintlify.js +2 -2
- package/dist/webhooks/providers/mintlify.js.map +1 -1
- package/dist/webhooks/providers/sentry.d.ts +1 -1
- package/dist/webhooks/providers/sentry.d.ts.map +1 -1
- package/dist/webhooks/providers/sentry.js +2 -2
- package/dist/webhooks/providers/sentry.js.map +1 -1
- package/dist/webhooks/providers/test.d.ts +1 -1
- package/dist/webhooks/providers/test.d.ts.map +1 -1
- package/dist/webhooks/providers/test.js +1 -1
- package/dist/webhooks/providers/test.js.map +1 -1
- package/dist/webhooks/registry.d.ts +8 -2
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/registry.js +155 -3
- package/dist/webhooks/registry.js.map +1 -1
- package/dist/webhooks/types.d.ts +28 -1
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/webhooks/validation.d.ts +7 -6
- package/dist/webhooks/validation.d.ts.map +1 -1
- package/dist/webhooks/validation.js +11 -9
- package/dist/webhooks/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite backend for unified persistence layer.
|
|
3
|
+
*
|
|
4
|
+
* Implements the PersistenceBackend interface with SQLite storage,
|
|
5
|
+
* combining key-value operations, event sourcing, and query capabilities
|
|
6
|
+
* in a single database with optimized indexes and transaction support.
|
|
7
|
+
*/
|
|
8
|
+
import Database from "better-sqlite3";
|
|
9
|
+
import { mkdirSync } from "fs";
|
|
10
|
+
import { dirname } from "path";
|
|
11
|
+
import { randomUUID } from "crypto";
|
|
12
|
+
export class SqliteBackend {
|
|
13
|
+
dbPath;
|
|
14
|
+
db;
|
|
15
|
+
stmts = {};
|
|
16
|
+
sweepTimer;
|
|
17
|
+
transactionDepth = 0;
|
|
18
|
+
constructor(dbPath) {
|
|
19
|
+
this.dbPath = dbPath;
|
|
20
|
+
if (dbPath !== ":memory:") {
|
|
21
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
this.db = new Database(dbPath);
|
|
24
|
+
this.db.pragma("journal_mode = WAL");
|
|
25
|
+
this.db.pragma("synchronous = NORMAL");
|
|
26
|
+
this.db.pragma("cache_size = 1000");
|
|
27
|
+
this.db.pragma("temp_store = memory");
|
|
28
|
+
}
|
|
29
|
+
async init() {
|
|
30
|
+
// Create tables
|
|
31
|
+
this.db.exec(`
|
|
32
|
+
CREATE TABLE IF NOT EXISTS kv_store (
|
|
33
|
+
namespace TEXT NOT NULL,
|
|
34
|
+
key TEXT NOT NULL,
|
|
35
|
+
value TEXT NOT NULL,
|
|
36
|
+
expires_at INTEGER,
|
|
37
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
38
|
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
39
|
+
PRIMARY KEY (namespace, key)
|
|
40
|
+
)
|
|
41
|
+
`);
|
|
42
|
+
this.db.exec(`
|
|
43
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
44
|
+
id TEXT PRIMARY KEY,
|
|
45
|
+
stream TEXT NOT NULL,
|
|
46
|
+
type TEXT NOT NULL,
|
|
47
|
+
data TEXT NOT NULL,
|
|
48
|
+
metadata TEXT,
|
|
49
|
+
timestamp INTEGER NOT NULL,
|
|
50
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
51
|
+
sequence INTEGER NOT NULL
|
|
52
|
+
)
|
|
53
|
+
`);
|
|
54
|
+
this.db.exec(`
|
|
55
|
+
CREATE TABLE IF NOT EXISTS snapshots (
|
|
56
|
+
stream TEXT NOT NULL,
|
|
57
|
+
type TEXT NOT NULL,
|
|
58
|
+
data TEXT NOT NULL,
|
|
59
|
+
event_id TEXT NOT NULL,
|
|
60
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
61
|
+
PRIMARY KEY (stream, type)
|
|
62
|
+
)
|
|
63
|
+
`);
|
|
64
|
+
// Create indexes
|
|
65
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_kv_expires ON kv_store(expires_at) WHERE expires_at IS NOT NULL");
|
|
66
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_kv_namespace ON kv_store(namespace)");
|
|
67
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_events_stream ON events(stream, sequence)");
|
|
68
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_events_type ON events(stream, type, timestamp)");
|
|
69
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(stream, timestamp)");
|
|
70
|
+
this.db.exec("CREATE INDEX IF NOT EXISTS idx_snapshots_stream ON snapshots(stream)");
|
|
71
|
+
// Prepare statements
|
|
72
|
+
this.stmts = {
|
|
73
|
+
// Key-value operations
|
|
74
|
+
kvGet: this.db.prepare(`
|
|
75
|
+
SELECT value FROM kv_store
|
|
76
|
+
WHERE namespace = ? AND key = ? AND (expires_at IS NULL OR expires_at > ?)
|
|
77
|
+
`),
|
|
78
|
+
kvSet: this.db.prepare(`
|
|
79
|
+
INSERT OR REPLACE INTO kv_store (namespace, key, value, expires_at, updated_at)
|
|
80
|
+
VALUES (?, ?, ?, ?, ?)
|
|
81
|
+
`),
|
|
82
|
+
kvDelete: this.db.prepare("DELETE FROM kv_store WHERE namespace = ? AND key = ?"),
|
|
83
|
+
kvDeleteAll: this.db.prepare("DELETE FROM kv_store WHERE namespace = ?"),
|
|
84
|
+
kvList: this.db.prepare(`
|
|
85
|
+
SELECT key, value FROM kv_store
|
|
86
|
+
WHERE namespace = ? AND (expires_at IS NULL OR expires_at > ?)
|
|
87
|
+
ORDER BY key
|
|
88
|
+
`),
|
|
89
|
+
// Event operations
|
|
90
|
+
eventAppend: this.db.prepare(`
|
|
91
|
+
INSERT INTO events (id, stream, type, data, metadata, timestamp, version, sequence)
|
|
92
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, (
|
|
93
|
+
SELECT COALESCE(MAX(sequence), 0) + 1 FROM events WHERE stream = ?
|
|
94
|
+
))
|
|
95
|
+
`),
|
|
96
|
+
eventReplay: this.db.prepare(`
|
|
97
|
+
SELECT id, stream, type, data, metadata, timestamp, version, sequence
|
|
98
|
+
FROM events
|
|
99
|
+
WHERE stream = ?
|
|
100
|
+
AND (? IS NULL OR type = ?)
|
|
101
|
+
AND (? IS NULL OR timestamp >= ?)
|
|
102
|
+
AND (? IS NULL OR timestamp < ?)
|
|
103
|
+
ORDER BY sequence ASC
|
|
104
|
+
LIMIT ? OFFSET ?
|
|
105
|
+
`),
|
|
106
|
+
eventCount: this.db.prepare(`
|
|
107
|
+
SELECT COUNT(*) as count FROM events
|
|
108
|
+
WHERE stream = ?
|
|
109
|
+
AND (? IS NULL OR type = ?)
|
|
110
|
+
AND (? IS NULL OR timestamp >= ?)
|
|
111
|
+
AND (? IS NULL OR timestamp < ?)
|
|
112
|
+
`),
|
|
113
|
+
eventListStreams: this.db.prepare("SELECT DISTINCT stream FROM events ORDER BY stream"),
|
|
114
|
+
// Snapshot operations
|
|
115
|
+
snapshotGet: this.db.prepare("SELECT data FROM snapshots WHERE stream = ? AND type = ?"),
|
|
116
|
+
snapshotSet: this.db.prepare(`
|
|
117
|
+
INSERT OR REPLACE INTO snapshots (stream, type, data, event_id, created_at)
|
|
118
|
+
VALUES (?, ?, ?, ?, ?)
|
|
119
|
+
`),
|
|
120
|
+
// Cleanup
|
|
121
|
+
sweep: this.db.prepare("DELETE FROM kv_store WHERE expires_at IS NOT NULL AND expires_at <= ?"),
|
|
122
|
+
};
|
|
123
|
+
// Start periodic cleanup of expired KV entries
|
|
124
|
+
this.sweepTimer = setInterval(() => this.sweep(), 60_000);
|
|
125
|
+
if (this.sweepTimer.unref)
|
|
126
|
+
this.sweepTimer.unref();
|
|
127
|
+
}
|
|
128
|
+
// Key-value operations
|
|
129
|
+
async kvGet(namespace, key) {
|
|
130
|
+
const row = this.stmts.kvGet.get(namespace, key, Date.now());
|
|
131
|
+
return row ? JSON.parse(row.value) : null;
|
|
132
|
+
}
|
|
133
|
+
async kvSet(namespace, key, value, ttlMs) {
|
|
134
|
+
const expiresAt = ttlMs ? Date.now() + ttlMs : null;
|
|
135
|
+
const now = Date.now();
|
|
136
|
+
this.stmts.kvSet.run(namespace, key, JSON.stringify(value), expiresAt, now);
|
|
137
|
+
}
|
|
138
|
+
async kvDelete(namespace, key) {
|
|
139
|
+
this.stmts.kvDelete.run(namespace, key);
|
|
140
|
+
}
|
|
141
|
+
async kvDeleteAll(namespace) {
|
|
142
|
+
this.stmts.kvDeleteAll.run(namespace);
|
|
143
|
+
}
|
|
144
|
+
async kvList(namespace) {
|
|
145
|
+
const rows = this.stmts.kvList.all(namespace, Date.now());
|
|
146
|
+
return rows.map(row => ({ key: row.key, value: JSON.parse(row.value) }));
|
|
147
|
+
}
|
|
148
|
+
// Event operations
|
|
149
|
+
async eventAppend(stream, event) {
|
|
150
|
+
const id = randomUUID();
|
|
151
|
+
const timestamp = Date.now();
|
|
152
|
+
this.stmts.eventAppend.run(id, stream, event.type, JSON.stringify(event.data), event.metadata ? JSON.stringify(event.metadata) : null, timestamp, event.version, stream // for the sequence subquery
|
|
153
|
+
);
|
|
154
|
+
return {
|
|
155
|
+
id,
|
|
156
|
+
timestamp,
|
|
157
|
+
type: event.type,
|
|
158
|
+
data: event.data,
|
|
159
|
+
metadata: event.metadata,
|
|
160
|
+
version: event.version,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async *eventReplay(stream, query) {
|
|
164
|
+
const type = query?.type || null;
|
|
165
|
+
const from = query?.from || null;
|
|
166
|
+
const to = query?.to || null;
|
|
167
|
+
const limit = Math.min(query?.limit || 1000, 10000); // Cap at 10k for safety
|
|
168
|
+
const offset = query?.offset || 0;
|
|
169
|
+
const rows = this.stmts.eventReplay.all(stream, type, type, from, from, to, to, limit, offset);
|
|
170
|
+
for (const row of rows) {
|
|
171
|
+
yield {
|
|
172
|
+
id: row.id,
|
|
173
|
+
type: row.type,
|
|
174
|
+
data: JSON.parse(row.data),
|
|
175
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
176
|
+
timestamp: row.timestamp,
|
|
177
|
+
version: row.version,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async eventGetSnapshot(stream, type) {
|
|
182
|
+
const row = this.stmts.snapshotGet.get(stream, type);
|
|
183
|
+
return row ? JSON.parse(row.data) : null;
|
|
184
|
+
}
|
|
185
|
+
async eventSaveSnapshot(stream, type, data, eventId) {
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
this.stmts.snapshotSet.run(stream, type, JSON.stringify(data), eventId, now);
|
|
188
|
+
}
|
|
189
|
+
async eventListStreams() {
|
|
190
|
+
const rows = this.stmts.eventListStreams.all();
|
|
191
|
+
return rows.map(row => row.stream);
|
|
192
|
+
}
|
|
193
|
+
// Query operations
|
|
194
|
+
async querySql(query, params = []) {
|
|
195
|
+
try {
|
|
196
|
+
const stmt = this.db.prepare(query);
|
|
197
|
+
return stmt.all(...params);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
throw new Error(`SQL query failed: ${error instanceof Error ? error.message : 'unknown error'}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Transaction operations
|
|
204
|
+
async transactionBegin() {
|
|
205
|
+
if (this.transactionDepth === 0) {
|
|
206
|
+
this.db.exec("BEGIN");
|
|
207
|
+
}
|
|
208
|
+
this.transactionDepth++;
|
|
209
|
+
}
|
|
210
|
+
async transactionCommit() {
|
|
211
|
+
this.transactionDepth--;
|
|
212
|
+
if (this.transactionDepth === 0) {
|
|
213
|
+
this.db.exec("COMMIT");
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async transactionRollback() {
|
|
217
|
+
this.transactionDepth--;
|
|
218
|
+
if (this.transactionDepth === 0) {
|
|
219
|
+
this.db.exec("ROLLBACK");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async transactionRun(fn) {
|
|
223
|
+
await this.transactionBegin();
|
|
224
|
+
try {
|
|
225
|
+
const result = await fn();
|
|
226
|
+
await this.transactionCommit();
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
await this.transactionRollback();
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Cleanup and maintenance
|
|
235
|
+
sweep() {
|
|
236
|
+
const now = Date.now();
|
|
237
|
+
const result = this.stmts.sweep.run(now);
|
|
238
|
+
if (result.changes > 0) {
|
|
239
|
+
console.debug(`Cleaned up ${result.changes} expired KV entries`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async close() {
|
|
243
|
+
if (this.sweepTimer) {
|
|
244
|
+
clearInterval(this.sweepTimer);
|
|
245
|
+
this.sweepTimer = undefined;
|
|
246
|
+
}
|
|
247
|
+
this.db.close();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../src/shared/persistence/backends/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event sourcing utilities and helpers.
|
|
3
|
+
*
|
|
4
|
+
* Provides event versioning, schema evolution helpers, and common event patterns
|
|
5
|
+
* used throughout the Action Llama system.
|
|
6
|
+
*/
|
|
7
|
+
import type { Event, EventStream } from "./index.js";
|
|
8
|
+
/** Common event types used across the system */
|
|
9
|
+
export declare namespace EventTypes {
|
|
10
|
+
const RUN_STARTED = "run.started";
|
|
11
|
+
const RUN_COMPLETED = "run.completed";
|
|
12
|
+
const RUN_FAILED = "run.failed";
|
|
13
|
+
const CALL_INITIATED = "call.initiated";
|
|
14
|
+
const CALL_COMPLETED = "call.completed";
|
|
15
|
+
const CALL_FAILED = "call.failed";
|
|
16
|
+
const WORK_QUEUED = "work.queued";
|
|
17
|
+
const WORK_DEQUEUED = "work.dequeued";
|
|
18
|
+
const WORK_DROPPED = "work.dropped";
|
|
19
|
+
const LOCK_ACQUIRED = "lock.acquired";
|
|
20
|
+
const LOCK_RELEASED = "lock.released";
|
|
21
|
+
const LOCK_EXPIRED = "lock.expired";
|
|
22
|
+
const SESSION_CREATED = "session.created";
|
|
23
|
+
const SESSION_EXPIRED = "session.expired";
|
|
24
|
+
}
|
|
25
|
+
/** Event metadata standard fields */
|
|
26
|
+
export interface EventMetadata {
|
|
27
|
+
/** Source system/component that generated the event */
|
|
28
|
+
source?: string;
|
|
29
|
+
/** Correlation ID for tracing related events */
|
|
30
|
+
correlationId?: string;
|
|
31
|
+
/** User or system that triggered the event */
|
|
32
|
+
actor?: string;
|
|
33
|
+
/** Additional tags for filtering/grouping */
|
|
34
|
+
tags?: string[];
|
|
35
|
+
}
|
|
36
|
+
/** Helper for creating events with proper defaults */
|
|
37
|
+
export declare function createEvent(type: string, data: any, metadata?: EventMetadata, version?: number): Omit<Event, 'id' | 'timestamp'>;
|
|
38
|
+
/** Schema evolution helper */
|
|
39
|
+
export interface EventMigration {
|
|
40
|
+
fromVersion: number;
|
|
41
|
+
toVersion: number;
|
|
42
|
+
migrate: (event: Event) => Event;
|
|
43
|
+
}
|
|
44
|
+
export declare class EventMigrator {
|
|
45
|
+
private migrations;
|
|
46
|
+
addMigration(eventType: string, migration: EventMigration): void;
|
|
47
|
+
migrate(event: Event, targetVersion: number): Event;
|
|
48
|
+
}
|
|
49
|
+
/** Event stream wrapper with additional utilities */
|
|
50
|
+
export declare class EventStreamWrapper {
|
|
51
|
+
private stream;
|
|
52
|
+
constructor(stream: EventStream);
|
|
53
|
+
/** Append a typed event */
|
|
54
|
+
appendTyped<T>(type: string, data: T, metadata?: EventMetadata, version?: number): Promise<Event>;
|
|
55
|
+
/** Replay events from the stream */
|
|
56
|
+
replay(query?: import("./index.js").EventQuery): AsyncIterable<Event>;
|
|
57
|
+
/** Get snapshot from the stream */
|
|
58
|
+
getSnapshot<T>(type: string): Promise<T | null>;
|
|
59
|
+
/** Save snapshot to the stream */
|
|
60
|
+
saveSnapshot<T>(type: string, data: T, eventId: string): Promise<void>;
|
|
61
|
+
/** Replay events of a specific type */
|
|
62
|
+
replayType<T>(type: string, from?: number, to?: number): AsyncIterable<Event & {
|
|
63
|
+
data: T;
|
|
64
|
+
}>;
|
|
65
|
+
/** Build a projection from events */
|
|
66
|
+
buildProjection<T>(initialState: T, reducer: (state: T, event: Event) => T, from?: number): Promise<T>;
|
|
67
|
+
/** Get the latest event of a specific type */
|
|
68
|
+
getLatestEvent(type: string): Promise<Event | null>;
|
|
69
|
+
}
|
|
70
|
+
/** Common projection builders */
|
|
71
|
+
export declare namespace Projections {
|
|
72
|
+
/** Count events by type */
|
|
73
|
+
function eventCounts(events: AsyncIterable<Event>): Promise<Map<string, number>>;
|
|
74
|
+
/** Group events by time window */
|
|
75
|
+
function timeWindow(events: AsyncIterable<Event>, windowMs: number): Promise<Map<number, Event[]>>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=event-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../../src/shared/persistence/event-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event sourcing utilities and helpers.
|
|
3
|
+
*
|
|
4
|
+
* Provides event versioning, schema evolution helpers, and common event patterns
|
|
5
|
+
* used throughout the Action Llama system.
|
|
6
|
+
*/
|
|
7
|
+
/** Common event types used across the system */
|
|
8
|
+
export var EventTypes;
|
|
9
|
+
(function (EventTypes) {
|
|
10
|
+
// Run lifecycle events
|
|
11
|
+
EventTypes.RUN_STARTED = "run.started";
|
|
12
|
+
EventTypes.RUN_COMPLETED = "run.completed";
|
|
13
|
+
EventTypes.RUN_FAILED = "run.failed";
|
|
14
|
+
// Call events
|
|
15
|
+
EventTypes.CALL_INITIATED = "call.initiated";
|
|
16
|
+
EventTypes.CALL_COMPLETED = "call.completed";
|
|
17
|
+
EventTypes.CALL_FAILED = "call.failed";
|
|
18
|
+
// Work queue events
|
|
19
|
+
EventTypes.WORK_QUEUED = "work.queued";
|
|
20
|
+
EventTypes.WORK_DEQUEUED = "work.dequeued";
|
|
21
|
+
EventTypes.WORK_DROPPED = "work.dropped";
|
|
22
|
+
// Lock events
|
|
23
|
+
EventTypes.LOCK_ACQUIRED = "lock.acquired";
|
|
24
|
+
EventTypes.LOCK_RELEASED = "lock.released";
|
|
25
|
+
EventTypes.LOCK_EXPIRED = "lock.expired";
|
|
26
|
+
// Session events
|
|
27
|
+
EventTypes.SESSION_CREATED = "session.created";
|
|
28
|
+
EventTypes.SESSION_EXPIRED = "session.expired";
|
|
29
|
+
})(EventTypes || (EventTypes = {}));
|
|
30
|
+
/** Helper for creating events with proper defaults */
|
|
31
|
+
export function createEvent(type, data, metadata, version = 1) {
|
|
32
|
+
return {
|
|
33
|
+
type,
|
|
34
|
+
data,
|
|
35
|
+
metadata: {
|
|
36
|
+
...metadata,
|
|
37
|
+
source: "action-llama", // Always use consistent source for audit purposes
|
|
38
|
+
},
|
|
39
|
+
version,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export class EventMigrator {
|
|
43
|
+
migrations = new Map();
|
|
44
|
+
addMigration(eventType, migration) {
|
|
45
|
+
if (!this.migrations.has(eventType)) {
|
|
46
|
+
this.migrations.set(eventType, []);
|
|
47
|
+
}
|
|
48
|
+
this.migrations.get(eventType).push(migration);
|
|
49
|
+
}
|
|
50
|
+
migrate(event, targetVersion) {
|
|
51
|
+
const migrations = this.migrations.get(event.type) || [];
|
|
52
|
+
let currentEvent = { ...event };
|
|
53
|
+
while (currentEvent.version < targetVersion) {
|
|
54
|
+
const migration = migrations.find(m => m.fromVersion === currentEvent.version);
|
|
55
|
+
if (!migration) {
|
|
56
|
+
throw new Error(`No migration found for ${event.type} from version ${currentEvent.version}`);
|
|
57
|
+
}
|
|
58
|
+
currentEvent = migration.migrate(currentEvent);
|
|
59
|
+
}
|
|
60
|
+
return currentEvent;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Event stream wrapper with additional utilities */
|
|
64
|
+
export class EventStreamWrapper {
|
|
65
|
+
stream;
|
|
66
|
+
constructor(stream) {
|
|
67
|
+
this.stream = stream;
|
|
68
|
+
}
|
|
69
|
+
/** Append a typed event */
|
|
70
|
+
async appendTyped(type, data, metadata, version = 1) {
|
|
71
|
+
return this.stream.append(createEvent(type, data, metadata, version));
|
|
72
|
+
}
|
|
73
|
+
/** Replay events from the stream */
|
|
74
|
+
replay(query) {
|
|
75
|
+
return this.stream.replay(query);
|
|
76
|
+
}
|
|
77
|
+
/** Get snapshot from the stream */
|
|
78
|
+
getSnapshot(type) {
|
|
79
|
+
return this.stream.getSnapshot(type);
|
|
80
|
+
}
|
|
81
|
+
/** Save snapshot to the stream */
|
|
82
|
+
saveSnapshot(type, data, eventId) {
|
|
83
|
+
return this.stream.saveSnapshot(type, data, eventId);
|
|
84
|
+
}
|
|
85
|
+
/** Replay events of a specific type */
|
|
86
|
+
async *replayType(type, from, to) {
|
|
87
|
+
for await (const event of this.stream.replay({ type, from, to })) {
|
|
88
|
+
yield event;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** Build a projection from events */
|
|
92
|
+
async buildProjection(initialState, reducer, from) {
|
|
93
|
+
let state = initialState;
|
|
94
|
+
for await (const event of this.stream.replay({ from })) {
|
|
95
|
+
state = reducer(state, event);
|
|
96
|
+
}
|
|
97
|
+
return state;
|
|
98
|
+
}
|
|
99
|
+
/** Get the latest event of a specific type */
|
|
100
|
+
async getLatestEvent(type) {
|
|
101
|
+
const events = [];
|
|
102
|
+
for await (const event of this.stream.replay({ type, limit: 1 })) {
|
|
103
|
+
events.push(event);
|
|
104
|
+
}
|
|
105
|
+
return events[0] || null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Common projection builders */
|
|
109
|
+
export var Projections;
|
|
110
|
+
(function (Projections) {
|
|
111
|
+
/** Count events by type */
|
|
112
|
+
function eventCounts(events) {
|
|
113
|
+
return buildProjectionFromIterable(events, new Map(), (counts, event) => {
|
|
114
|
+
counts.set(event.type, (counts.get(event.type) || 0) + 1);
|
|
115
|
+
return counts;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
Projections.eventCounts = eventCounts;
|
|
119
|
+
/** Group events by time window */
|
|
120
|
+
function timeWindow(events, windowMs) {
|
|
121
|
+
return buildProjectionFromIterable(events, new Map(), (windows, event) => {
|
|
122
|
+
const window = Math.floor(event.timestamp / windowMs) * windowMs;
|
|
123
|
+
if (!windows.has(window)) {
|
|
124
|
+
windows.set(window, []);
|
|
125
|
+
}
|
|
126
|
+
windows.get(window).push(event);
|
|
127
|
+
return windows;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
Projections.timeWindow = timeWindow;
|
|
131
|
+
})(Projections || (Projections = {}));
|
|
132
|
+
async function buildProjectionFromIterable(events, initialState, reducer) {
|
|
133
|
+
let state = initialState;
|
|
134
|
+
for await (const event of events) {
|
|
135
|
+
state = reducer(state, event);
|
|
136
|
+
}
|
|
137
|
+
return state;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=event-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../../src/shared/persistence/event-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified persistence layer combining key-value storage, event sourcing, and query capabilities.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the fragmented StateStore/StatsStore/WorkQueue pattern with a single abstraction
|
|
5
|
+
* that supports namespaces, TTL, and append-only event storage for features like replay,
|
|
6
|
+
* audit, and high availability.
|
|
7
|
+
*/
|
|
8
|
+
export interface Event {
|
|
9
|
+
/** Unique event identifier */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Event type/category */
|
|
12
|
+
type: string;
|
|
13
|
+
/** Event data payload */
|
|
14
|
+
data: any;
|
|
15
|
+
/** Event metadata (source, correlation id, etc.) */
|
|
16
|
+
metadata?: Record<string, any>;
|
|
17
|
+
/** Event timestamp (milliseconds since epoch) */
|
|
18
|
+
timestamp: number;
|
|
19
|
+
/** Event version for schema evolution */
|
|
20
|
+
version: number;
|
|
21
|
+
}
|
|
22
|
+
export interface EventQuery {
|
|
23
|
+
/** Event type filter */
|
|
24
|
+
type?: string;
|
|
25
|
+
/** Start timestamp (inclusive) */
|
|
26
|
+
from?: number;
|
|
27
|
+
/** End timestamp (exclusive) */
|
|
28
|
+
to?: number;
|
|
29
|
+
/** Maximum number of events to return */
|
|
30
|
+
limit?: number;
|
|
31
|
+
/** Offset for pagination */
|
|
32
|
+
offset?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface EventStream {
|
|
35
|
+
/** Append an event to the stream */
|
|
36
|
+
append(event: Omit<Event, 'id' | 'timestamp'>): Promise<Event>;
|
|
37
|
+
/** Replay events from the stream */
|
|
38
|
+
replay(query?: EventQuery): AsyncIterable<Event>;
|
|
39
|
+
/** Get the latest snapshot for a given type */
|
|
40
|
+
getSnapshot<T>(type: string): Promise<T | null>;
|
|
41
|
+
/** Save a snapshot to optimize future replays */
|
|
42
|
+
saveSnapshot<T>(type: string, data: T, eventId: string): Promise<void>;
|
|
43
|
+
/** Subscribe to new events (optional - for real-time features) */
|
|
44
|
+
subscribe?(callback: (event: Event) => void): () => void;
|
|
45
|
+
}
|
|
46
|
+
export interface PersistenceStore {
|
|
47
|
+
/** Key-value operations with namespacing */
|
|
48
|
+
kv: {
|
|
49
|
+
/** Get a value by namespace and key */
|
|
50
|
+
get<T>(namespace: string, key: string): Promise<T | null>;
|
|
51
|
+
/** Set a value with optional TTL */
|
|
52
|
+
set<T>(namespace: string, key: string, value: T, opts?: {
|
|
53
|
+
ttl?: number;
|
|
54
|
+
}): Promise<void>;
|
|
55
|
+
/** Delete a single key */
|
|
56
|
+
delete(namespace: string, key: string): Promise<void>;
|
|
57
|
+
/** Delete all keys in a namespace */
|
|
58
|
+
deleteAll(namespace: string): Promise<void>;
|
|
59
|
+
/** List all non-expired entries in a namespace */
|
|
60
|
+
list<T>(namespace: string): Promise<Array<{
|
|
61
|
+
key: string;
|
|
62
|
+
value: T;
|
|
63
|
+
}>>;
|
|
64
|
+
};
|
|
65
|
+
/** Event sourcing operations */
|
|
66
|
+
events: {
|
|
67
|
+
/** Get or create an event stream */
|
|
68
|
+
stream(name: string): EventStream;
|
|
69
|
+
/** List available streams */
|
|
70
|
+
listStreams(): Promise<string[]>;
|
|
71
|
+
};
|
|
72
|
+
/** Query operations for analytics */
|
|
73
|
+
query: {
|
|
74
|
+
/** Execute a SQL query for analytics (backend-specific) */
|
|
75
|
+
sql<T>(query: string, params?: any[]): Promise<T[]>;
|
|
76
|
+
};
|
|
77
|
+
/** Transaction operations */
|
|
78
|
+
transaction<T>(fn: (store: PersistenceStore) => Promise<T>): Promise<T>;
|
|
79
|
+
/** Close the store and release resources */
|
|
80
|
+
close(): Promise<void>;
|
|
81
|
+
}
|
|
82
|
+
export interface PersistenceBackend {
|
|
83
|
+
/** Initialize the backend (create tables, etc.) */
|
|
84
|
+
init(): Promise<void>;
|
|
85
|
+
/** Implement the key-value operations */
|
|
86
|
+
kvGet<T>(namespace: string, key: string): Promise<T | null>;
|
|
87
|
+
kvSet<T>(namespace: string, key: string, value: T, ttlMs?: number): Promise<void>;
|
|
88
|
+
kvDelete(namespace: string, key: string): Promise<void>;
|
|
89
|
+
kvDeleteAll(namespace: string): Promise<void>;
|
|
90
|
+
kvList<T>(namespace: string): Promise<Array<{
|
|
91
|
+
key: string;
|
|
92
|
+
value: T;
|
|
93
|
+
}>>;
|
|
94
|
+
/** Implement the event operations */
|
|
95
|
+
eventAppend(stream: string, event: Omit<Event, 'id' | 'timestamp'>): Promise<Event>;
|
|
96
|
+
eventReplay(stream: string, query?: EventQuery): AsyncIterable<Event>;
|
|
97
|
+
eventGetSnapshot<T>(stream: string, type: string): Promise<T | null>;
|
|
98
|
+
eventSaveSnapshot<T>(stream: string, type: string, data: T, eventId: string): Promise<void>;
|
|
99
|
+
eventListStreams(): Promise<string[]>;
|
|
100
|
+
/** Implement query operations */
|
|
101
|
+
querySql<T>(query: string, params?: any[]): Promise<T[]>;
|
|
102
|
+
/** Implement transaction operations */
|
|
103
|
+
transactionBegin(): Promise<void>;
|
|
104
|
+
transactionCommit(): Promise<void>;
|
|
105
|
+
transactionRollback(): Promise<void>;
|
|
106
|
+
transactionRun<T>(fn: () => Promise<T>): Promise<T>;
|
|
107
|
+
/** Close and cleanup */
|
|
108
|
+
close(): Promise<void>;
|
|
109
|
+
}
|
|
110
|
+
export interface PersistenceConfig {
|
|
111
|
+
type: "sqlite" | "memory";
|
|
112
|
+
path?: string;
|
|
113
|
+
maxSize?: number;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a persistence store from configuration.
|
|
117
|
+
*/
|
|
118
|
+
export declare function createPersistenceStore(config: PersistenceConfig): Promise<PersistenceStore>;
|
|
119
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/persistence/index.ts"],"names":[],"mappings":"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"}
|