@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.
Files changed (137) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/cli/commands/doctor.d.ts +1 -0
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +101 -4
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/cli/commands/webhook.d.ts +11 -0
  7. package/dist/cli/commands/webhook.d.ts.map +1 -0
  8. package/dist/cli/commands/webhook.js +271 -0
  9. package/dist/cli/commands/webhook.js.map +1 -0
  10. package/dist/cli/main.js +17 -0
  11. package/dist/cli/main.js.map +1 -1
  12. package/dist/docker/local-runtime.d.ts.map +1 -1
  13. package/dist/docker/local-runtime.js +36 -7
  14. package/dist/docker/local-runtime.js.map +1 -1
  15. package/dist/docker/runtime.d.ts +4 -0
  16. package/dist/docker/runtime.d.ts.map +1 -1
  17. package/dist/gateway/index.d.ts +2 -0
  18. package/dist/gateway/index.d.ts.map +1 -1
  19. package/dist/gateway/index.js +1 -1
  20. package/dist/gateway/index.js.map +1 -1
  21. package/dist/gateway/routes/webhooks.d.ts +2 -1
  22. package/dist/gateway/routes/webhooks.d.ts.map +1 -1
  23. package/dist/gateway/routes/webhooks.js +3 -2
  24. package/dist/gateway/routes/webhooks.js.map +1 -1
  25. package/dist/remote/push.d.ts.map +1 -1
  26. package/dist/remote/push.js +11 -2
  27. package/dist/remote/push.js.map +1 -1
  28. package/dist/scheduler/event-queue-unified.d.ts +50 -0
  29. package/dist/scheduler/event-queue-unified.d.ts.map +1 -0
  30. package/dist/scheduler/event-queue-unified.js +280 -0
  31. package/dist/scheduler/event-queue-unified.js.map +1 -0
  32. package/dist/scheduler/execution.d.ts +2 -1
  33. package/dist/scheduler/execution.d.ts.map +1 -1
  34. package/dist/scheduler/execution.js +48 -8
  35. package/dist/scheduler/execution.js.map +1 -1
  36. package/dist/scheduler/gateway-setup.d.ts +2 -1
  37. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  38. package/dist/scheduler/gateway-setup.js +2 -1
  39. package/dist/scheduler/gateway-setup.js.map +1 -1
  40. package/dist/scheduler/index.js +1 -1
  41. package/dist/scheduler/index.js.map +1 -1
  42. package/dist/scheduler/lifecycle/agent-lifecycle.d.ts +114 -0
  43. package/dist/scheduler/lifecycle/agent-lifecycle.d.ts.map +1 -0
  44. package/dist/scheduler/lifecycle/agent-lifecycle.js +236 -0
  45. package/dist/scheduler/lifecycle/agent-lifecycle.js.map +1 -0
  46. package/dist/scheduler/lifecycle/index.d.ts +60 -0
  47. package/dist/scheduler/lifecycle/index.d.ts.map +1 -0
  48. package/dist/scheduler/lifecycle/index.js +103 -0
  49. package/dist/scheduler/lifecycle/index.js.map +1 -0
  50. package/dist/scheduler/lifecycle/instance-lifecycle.d.ts +88 -0
  51. package/dist/scheduler/lifecycle/instance-lifecycle.d.ts.map +1 -0
  52. package/dist/scheduler/lifecycle/instance-lifecycle.js +142 -0
  53. package/dist/scheduler/lifecycle/instance-lifecycle.js.map +1 -0
  54. package/dist/scheduler/types.d.ts +2 -0
  55. package/dist/scheduler/types.d.ts.map +1 -1
  56. package/dist/scheduler/webhook-setup.d.ts +1 -0
  57. package/dist/scheduler/webhook-setup.d.ts.map +1 -1
  58. package/dist/scheduler/webhook-setup.js +14 -2
  59. package/dist/scheduler/webhook-setup.js.map +1 -1
  60. package/dist/shared/config.d.ts +1 -0
  61. package/dist/shared/config.d.ts.map +1 -1
  62. package/dist/shared/config.js.map +1 -1
  63. package/dist/shared/constants.d.ts +16 -0
  64. package/dist/shared/constants.d.ts.map +1 -1
  65. package/dist/shared/constants.js +54 -0
  66. package/dist/shared/constants.js.map +1 -1
  67. package/dist/shared/persistence/adapters/state-store.d.ts +24 -0
  68. package/dist/shared/persistence/adapters/state-store.d.ts.map +1 -0
  69. package/dist/shared/persistence/adapters/state-store.js +32 -0
  70. package/dist/shared/persistence/adapters/state-store.js.map +1 -0
  71. package/dist/shared/persistence/adapters/stats-store.d.ts +49 -0
  72. package/dist/shared/persistence/adapters/stats-store.d.ts.map +1 -0
  73. package/dist/shared/persistence/adapters/stats-store.js +213 -0
  74. package/dist/shared/persistence/adapters/stats-store.js.map +1 -0
  75. package/dist/shared/persistence/backends/memory.d.ts +39 -0
  76. package/dist/shared/persistence/backends/memory.d.ts.map +1 -0
  77. package/dist/shared/persistence/backends/memory.js +214 -0
  78. package/dist/shared/persistence/backends/memory.js.map +1 -0
  79. package/dist/shared/persistence/backends/sqlite.d.ts +38 -0
  80. package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -0
  81. package/dist/shared/persistence/backends/sqlite.js +250 -0
  82. package/dist/shared/persistence/backends/sqlite.js.map +1 -0
  83. package/dist/shared/persistence/event-store.d.ts +77 -0
  84. package/dist/shared/persistence/event-store.d.ts.map +1 -0
  85. package/dist/shared/persistence/event-store.js +139 -0
  86. package/dist/shared/persistence/event-store.js.map +1 -0
  87. package/dist/shared/persistence/index.d.ts +119 -0
  88. package/dist/shared/persistence/index.d.ts.map +1 -0
  89. package/dist/shared/persistence/index.js +93 -0
  90. package/dist/shared/persistence/index.js.map +1 -0
  91. package/dist/shared/persistence/migration.d.ts +47 -0
  92. package/dist/shared/persistence/migration.d.ts.map +1 -0
  93. package/dist/shared/persistence/migration.js +297 -0
  94. package/dist/shared/persistence/migration.js.map +1 -0
  95. package/dist/shared/validation.d.ts +61 -0
  96. package/dist/shared/validation.d.ts.map +1 -0
  97. package/dist/shared/validation.js +280 -0
  98. package/dist/shared/validation.js.map +1 -0
  99. package/dist/stats/event-store.d.ts +37 -0
  100. package/dist/stats/event-store.d.ts.map +1 -0
  101. package/dist/stats/event-store.js +366 -0
  102. package/dist/stats/event-store.js.map +1 -0
  103. package/dist/tui/status-tracker.d.ts +19 -0
  104. package/dist/tui/status-tracker.d.ts.map +1 -1
  105. package/dist/tui/status-tracker.js +96 -1
  106. package/dist/tui/status-tracker.js.map +1 -1
  107. package/dist/webhooks/providers/github.d.ts +1 -1
  108. package/dist/webhooks/providers/github.d.ts.map +1 -1
  109. package/dist/webhooks/providers/github.js +2 -2
  110. package/dist/webhooks/providers/github.js.map +1 -1
  111. package/dist/webhooks/providers/linear.d.ts +1 -1
  112. package/dist/webhooks/providers/linear.d.ts.map +1 -1
  113. package/dist/webhooks/providers/linear.js +2 -2
  114. package/dist/webhooks/providers/linear.js.map +1 -1
  115. package/dist/webhooks/providers/mintlify.d.ts +1 -1
  116. package/dist/webhooks/providers/mintlify.d.ts.map +1 -1
  117. package/dist/webhooks/providers/mintlify.js +2 -2
  118. package/dist/webhooks/providers/mintlify.js.map +1 -1
  119. package/dist/webhooks/providers/sentry.d.ts +1 -1
  120. package/dist/webhooks/providers/sentry.d.ts.map +1 -1
  121. package/dist/webhooks/providers/sentry.js +2 -2
  122. package/dist/webhooks/providers/sentry.js.map +1 -1
  123. package/dist/webhooks/providers/test.d.ts +1 -1
  124. package/dist/webhooks/providers/test.d.ts.map +1 -1
  125. package/dist/webhooks/providers/test.js +1 -1
  126. package/dist/webhooks/providers/test.js.map +1 -1
  127. package/dist/webhooks/registry.d.ts +8 -2
  128. package/dist/webhooks/registry.d.ts.map +1 -1
  129. package/dist/webhooks/registry.js +155 -3
  130. package/dist/webhooks/registry.js.map +1 -1
  131. package/dist/webhooks/types.d.ts +28 -1
  132. package/dist/webhooks/types.d.ts.map +1 -1
  133. package/dist/webhooks/validation.d.ts +7 -6
  134. package/dist/webhooks/validation.d.ts.map +1 -1
  135. package/dist/webhooks/validation.js +11 -9
  136. package/dist/webhooks/validation.js.map +1 -1
  137. package/package.json +1 -1
@@ -0,0 +1,213 @@
1
+ /**
2
+ * StatsStore adapter for backward compatibility.
3
+ *
4
+ * Implements the old StatsStore interface using event sourcing on the new persistence layer.
5
+ * Converts method calls to events and builds projections for queries.
6
+ */
7
+ import { EventTypes, EventStreamWrapper } from "../event-store.js";
8
+ export class StatsStoreAdapter {
9
+ persistence;
10
+ statsStream;
11
+ callIdCounter = 0;
12
+ constructor(persistence) {
13
+ this.persistence = persistence;
14
+ this.statsStream = new EventStreamWrapper(persistence.events.stream("stats"));
15
+ }
16
+ recordRun(run) {
17
+ // Record as events asynchronously
18
+ this.recordRunAsync(run).catch(error => {
19
+ console.error("Failed to record run event:", error);
20
+ });
21
+ }
22
+ async recordRunAsync(run) {
23
+ // Create run started event
24
+ await this.statsStream.appendTyped(EventTypes.RUN_STARTED, {
25
+ instanceId: run.instanceId,
26
+ agentName: run.agentName,
27
+ triggerType: run.triggerType,
28
+ triggerSource: run.triggerSource,
29
+ }, {
30
+ source: "stats-adapter",
31
+ correlationId: run.instanceId,
32
+ actor: run.agentName,
33
+ });
34
+ // Create run completed/failed event
35
+ const eventType = run.result === "error" ? EventTypes.RUN_FAILED : EventTypes.RUN_COMPLETED;
36
+ await this.statsStream.appendTyped(eventType, {
37
+ instanceId: run.instanceId,
38
+ agentName: run.agentName,
39
+ result: run.result,
40
+ exitCode: run.exitCode,
41
+ durationMs: run.durationMs,
42
+ inputTokens: run.inputTokens || 0,
43
+ outputTokens: run.outputTokens || 0,
44
+ cacheReadTokens: run.cacheReadTokens || 0,
45
+ cacheWriteTokens: run.cacheWriteTokens || 0,
46
+ totalTokens: run.totalTokens || 0,
47
+ costUsd: run.costUsd || 0,
48
+ turnCount: run.turnCount || 0,
49
+ errorMessage: run.errorMessage,
50
+ preHookMs: run.preHookMs,
51
+ postHookMs: run.postHookMs,
52
+ }, {
53
+ source: "stats-adapter",
54
+ correlationId: run.instanceId,
55
+ actor: run.agentName,
56
+ });
57
+ }
58
+ recordCallEdge(edge) {
59
+ const callId = ++this.callIdCounter;
60
+ // Record as events asynchronously
61
+ this.recordCallEdgeAsync(edge, callId).catch(error => {
62
+ console.error("Failed to record call edge event:", error);
63
+ });
64
+ return callId;
65
+ }
66
+ async recordCallEdgeAsync(edge, callId) {
67
+ // Create call initiated event
68
+ await this.statsStream.appendTyped(EventTypes.CALL_INITIATED, {
69
+ callId,
70
+ callerAgent: edge.callerAgent,
71
+ callerInstance: edge.callerInstance,
72
+ targetAgent: edge.targetAgent,
73
+ targetInstance: edge.targetInstance,
74
+ depth: edge.depth,
75
+ }, {
76
+ source: "stats-adapter",
77
+ correlationId: edge.callerInstance,
78
+ actor: edge.callerAgent,
79
+ });
80
+ // If the call already has completion data, record that too
81
+ if (edge.durationMs !== undefined) {
82
+ const eventType = edge.status === "error" ? EventTypes.CALL_FAILED : EventTypes.CALL_COMPLETED;
83
+ await this.statsStream.appendTyped(eventType, {
84
+ callId,
85
+ callerAgent: edge.callerAgent,
86
+ callerInstance: edge.callerInstance,
87
+ targetAgent: edge.targetAgent,
88
+ targetInstance: edge.targetInstance,
89
+ depth: edge.depth,
90
+ durationMs: edge.durationMs,
91
+ status: edge.status,
92
+ }, {
93
+ source: "stats-adapter",
94
+ correlationId: edge.callerInstance,
95
+ actor: edge.callerAgent,
96
+ });
97
+ }
98
+ }
99
+ updateCallEdge(id, updates) {
100
+ // This is tricky since we need to find the original call and update it
101
+ // For now, we'll just record a completion event with the call ID
102
+ this.updateCallEdgeAsync(id, updates).catch(error => {
103
+ console.error("Failed to update call edge event:", error);
104
+ });
105
+ }
106
+ async updateCallEdgeAsync(id, updates) {
107
+ if (updates.durationMs !== undefined) {
108
+ const eventType = updates.status === "error" ? EventTypes.CALL_FAILED : EventTypes.CALL_COMPLETED;
109
+ await this.statsStream.appendTyped(eventType, {
110
+ callId: id,
111
+ durationMs: updates.durationMs,
112
+ status: updates.status,
113
+ targetInstance: updates.targetInstance,
114
+ }, {
115
+ source: "stats-adapter",
116
+ tags: ["call-update"],
117
+ });
118
+ }
119
+ }
120
+ async queryRunsByAgentPaginated(agent, limit, offset) {
121
+ // Use SQL fallback for complex queries during migration
122
+ return this.persistence.query.sql(`SELECT * FROM runs WHERE agent_name = ? ORDER BY started_at DESC LIMIT ? OFFSET ?`, [agent, limit, offset]);
123
+ }
124
+ async countRunsByAgent(agent) {
125
+ const result = await this.persistence.query.sql(`SELECT COUNT(*) as count FROM runs WHERE agent_name = ?`, [agent]);
126
+ return result[0]?.count || 0;
127
+ }
128
+ async queryRunByInstanceId(instanceId) {
129
+ const result = await this.persistence.query.sql(`SELECT * FROM runs WHERE instance_id = ? LIMIT 1`, [instanceId]);
130
+ return result[0];
131
+ }
132
+ async queryRuns(query = {}) {
133
+ const since = query.since || 0;
134
+ const limit = query.limit || 100;
135
+ if (query.agent) {
136
+ return this.persistence.query.sql(`SELECT * FROM runs WHERE agent_name = ? AND started_at >= ? ORDER BY started_at DESC LIMIT ?`, [query.agent, since, limit]);
137
+ }
138
+ return this.persistence.query.sql(`SELECT * FROM runs WHERE started_at >= ? ORDER BY started_at DESC LIMIT ?`, [since, limit]);
139
+ }
140
+ async queryAgentSummary(query = {}) {
141
+ const since = query.since || 0;
142
+ if (query.agent) {
143
+ return this.persistence.query.sql(`SELECT
144
+ agent_name as agentName,
145
+ COUNT(*) as totalRuns,
146
+ SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
147
+ SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
148
+ AVG(duration_ms) as avgDurationMs,
149
+ SUM(total_tokens) as totalTokens,
150
+ SUM(cost_usd) as totalCost,
151
+ AVG(pre_hook_ms) as avgPreHookMs,
152
+ AVG(post_hook_ms) as avgPostHookMs
153
+ FROM runs
154
+ WHERE agent_name = ? AND started_at >= ?
155
+ GROUP BY agent_name`, [query.agent, since]);
156
+ }
157
+ return this.persistence.query.sql(`SELECT
158
+ agent_name as agentName,
159
+ COUNT(*) as totalRuns,
160
+ SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
161
+ SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
162
+ AVG(duration_ms) as avgDurationMs,
163
+ SUM(total_tokens) as totalTokens,
164
+ SUM(cost_usd) as totalCost,
165
+ AVG(pre_hook_ms) as avgPreHookMs,
166
+ AVG(post_hook_ms) as avgPostHookMs
167
+ FROM runs
168
+ WHERE started_at >= ?
169
+ GROUP BY agent_name
170
+ ORDER BY totalRuns DESC`, [since]);
171
+ }
172
+ async queryGlobalSummary(since = 0) {
173
+ const result = await this.persistence.query.sql(`SELECT
174
+ COUNT(*) as totalRuns,
175
+ SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
176
+ SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
177
+ SUM(total_tokens) as totalTokens,
178
+ SUM(cost_usd) as totalCost
179
+ FROM runs
180
+ WHERE started_at >= ?`, [since]);
181
+ return result[0] || { totalRuns: 0, okRuns: 0, errorRuns: 0, totalTokens: 0, totalCost: 0 };
182
+ }
183
+ async queryCallGraph(query = {}) {
184
+ const since = query.since || 0;
185
+ return this.persistence.query.sql(`SELECT
186
+ caller_agent as callerAgent,
187
+ target_agent as targetAgent,
188
+ COUNT(*) as count,
189
+ AVG(depth) as avgDepth,
190
+ AVG(duration_ms) as avgDurationMs
191
+ FROM call_edges
192
+ WHERE started_at >= ?
193
+ GROUP BY caller_agent, target_agent
194
+ ORDER BY count DESC`, [since]);
195
+ }
196
+ prune(olderThanDays) {
197
+ const threshold = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
198
+ // This is a synchronous method in the original, so we'll make it async internally
199
+ this.pruneAsync(threshold).catch(error => {
200
+ console.error("Failed to prune stats:", error);
201
+ });
202
+ return { runs: 0, callEdges: 0 }; // Return dummy values for compatibility
203
+ }
204
+ async pruneAsync(threshold) {
205
+ await this.persistence.query.sql("DELETE FROM runs WHERE started_at < ?", [threshold]);
206
+ await this.persistence.query.sql("DELETE FROM call_edges WHERE started_at < ?", [threshold]);
207
+ }
208
+ close() {
209
+ // Don't close the underlying store since it might be shared
210
+ // The actual store will be closed by the main application
211
+ }
212
+ }
213
+ //# sourceMappingURL=stats-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-store.js","sourceRoot":"","sources":["../../../../src/shared/persistence/adapters/stats-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * In-memory backend for unified persistence layer.
3
+ *
4
+ * Used primarily for testing and development. Provides the same interface
5
+ * as SQLite backend but stores everything in memory with optional size limits.
6
+ */
7
+ import type { PersistenceBackend, Event, EventQuery } from "../index.js";
8
+ export declare class MemoryBackend implements PersistenceBackend {
9
+ private maxSize?;
10
+ private kvStore;
11
+ private events;
12
+ private snapshots;
13
+ private sweepTimer;
14
+ private transactionStack;
15
+ private transactionDepth;
16
+ constructor(maxSize?: number | undefined);
17
+ init(): Promise<void>;
18
+ kvGet<T>(namespace: string, key: string): Promise<T | null>;
19
+ kvSet<T>(namespace: string, key: string, value: T, ttlMs?: number): Promise<void>;
20
+ kvDelete(namespace: string, key: string): Promise<void>;
21
+ kvDeleteAll(namespace: string): Promise<void>;
22
+ kvList<T>(namespace: string): Promise<Array<{
23
+ key: string;
24
+ value: T;
25
+ }>>;
26
+ eventAppend(stream: string, event: Omit<Event, 'id' | 'timestamp'>): Promise<Event>;
27
+ eventReplay(stream: string, query?: EventQuery): AsyncIterable<Event>;
28
+ eventGetSnapshot<T>(stream: string, type: string): Promise<T | null>;
29
+ eventSaveSnapshot<T>(stream: string, type: string, data: T, eventId: string): Promise<void>;
30
+ eventListStreams(): Promise<string[]>;
31
+ querySql<T>(query: string, params?: any[]): Promise<T[]>;
32
+ transactionBegin(): Promise<void>;
33
+ transactionCommit(): Promise<void>;
34
+ transactionRollback(): Promise<void>;
35
+ transactionRun<T>(fn: () => Promise<T>): Promise<T>;
36
+ private sweep;
37
+ close(): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/shared/persistence/backends/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoBzE,qBAAa,aAAc,YAAW,kBAAkB;IAQ1C,OAAO,CAAC,OAAO,CAAC;IAP5B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,gBAAgB,CAAK;gBAET,OAAO,CAAC,EAAE,MAAM,YAAA;IAE9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAe3D,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAsBvE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IA4BlF,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC;IA4BtE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMpE,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3F,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKrC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAK5D,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAazD,OAAO,CAAC,KAAK;IAgBP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * In-memory backend for unified persistence layer.
3
+ *
4
+ * Used primarily for testing and development. Provides the same interface
5
+ * as SQLite backend but stores everything in memory with optional size limits.
6
+ */
7
+ import { randomUUID } from "crypto";
8
+ export class MemoryBackend {
9
+ maxSize;
10
+ kvStore = new Map();
11
+ events = new Map(); // stream -> events
12
+ snapshots = new Map(); // stream:type -> snapshot
13
+ sweepTimer;
14
+ transactionStack = [];
15
+ transactionDepth = 0;
16
+ constructor(maxSize) {
17
+ this.maxSize = maxSize;
18
+ }
19
+ async init() {
20
+ // Start periodic cleanup of expired KV entries
21
+ this.sweepTimer = setInterval(() => this.sweep(), 60_000);
22
+ if (this.sweepTimer.unref)
23
+ this.sweepTimer.unref();
24
+ }
25
+ // Key-value operations
26
+ async kvGet(namespace, key) {
27
+ const storeKey = `${namespace}:${key}`;
28
+ const entry = this.kvStore.get(storeKey);
29
+ if (!entry)
30
+ return null;
31
+ // Check expiration
32
+ if (entry.expiresAt && Date.now() >= entry.expiresAt) {
33
+ this.kvStore.delete(storeKey);
34
+ return null;
35
+ }
36
+ return entry.value;
37
+ }
38
+ async kvSet(namespace, key, value, ttlMs) {
39
+ const storeKey = `${namespace}:${key}`;
40
+ const now = Date.now();
41
+ // Check size limits if specified
42
+ if (this.maxSize && this.kvStore.size >= this.maxSize && !this.kvStore.has(storeKey)) {
43
+ throw new Error(`Memory store size limit exceeded (${this.maxSize})`);
44
+ }
45
+ const entry = {
46
+ value,
47
+ expiresAt: ttlMs ? now + ttlMs : undefined,
48
+ createdAt: this.kvStore.has(storeKey) ? this.kvStore.get(storeKey).createdAt : now,
49
+ updatedAt: now,
50
+ };
51
+ this.kvStore.set(storeKey, entry);
52
+ }
53
+ async kvDelete(namespace, key) {
54
+ const storeKey = `${namespace}:${key}`;
55
+ this.kvStore.delete(storeKey);
56
+ }
57
+ async kvDeleteAll(namespace) {
58
+ const prefix = `${namespace}:`;
59
+ for (const key of this.kvStore.keys()) {
60
+ if (key.startsWith(prefix)) {
61
+ this.kvStore.delete(key);
62
+ }
63
+ }
64
+ }
65
+ async kvList(namespace) {
66
+ const prefix = `${namespace}:`;
67
+ const now = Date.now();
68
+ const results = [];
69
+ for (const [storeKey, entry] of this.kvStore.entries()) {
70
+ if (!storeKey.startsWith(prefix))
71
+ continue;
72
+ // Skip expired entries
73
+ if (entry.expiresAt && now >= entry.expiresAt) {
74
+ this.kvStore.delete(storeKey);
75
+ continue;
76
+ }
77
+ const key = storeKey.slice(prefix.length);
78
+ results.push({ key, value: entry.value });
79
+ }
80
+ return results.sort((a, b) => a.key.localeCompare(b.key));
81
+ }
82
+ // Event operations
83
+ async eventAppend(stream, event) {
84
+ const id = randomUUID();
85
+ const timestamp = Date.now();
86
+ const fullEvent = {
87
+ id,
88
+ timestamp,
89
+ type: event.type,
90
+ data: event.data,
91
+ metadata: event.metadata,
92
+ version: event.version,
93
+ };
94
+ if (!this.events.has(stream)) {
95
+ this.events.set(stream, []);
96
+ }
97
+ const streamEvents = this.events.get(stream);
98
+ const sequence = streamEvents.length + 1;
99
+ streamEvents.push({
100
+ event: fullEvent,
101
+ sequence,
102
+ });
103
+ return fullEvent;
104
+ }
105
+ async *eventReplay(stream, query) {
106
+ const streamEvents = this.events.get(stream) || [];
107
+ let filteredEvents = streamEvents.map(e => e.event);
108
+ // Apply filters
109
+ if (query?.type) {
110
+ filteredEvents = filteredEvents.filter(e => e.type === query.type);
111
+ }
112
+ if (query?.from) {
113
+ filteredEvents = filteredEvents.filter(e => e.timestamp >= query.from);
114
+ }
115
+ if (query?.to) {
116
+ filteredEvents = filteredEvents.filter(e => e.timestamp < query.to);
117
+ }
118
+ // Apply pagination
119
+ const offset = query?.offset || 0;
120
+ const limit = Math.min(query?.limit || 1000, 10000);
121
+ const paginatedEvents = filteredEvents.slice(offset, offset + limit);
122
+ for (const event of paginatedEvents) {
123
+ yield { ...event }; // Return a copy
124
+ }
125
+ }
126
+ async eventGetSnapshot(stream, type) {
127
+ const key = `${stream}:${type}`;
128
+ const snapshot = this.snapshots.get(key);
129
+ return snapshot ? snapshot.data : null;
130
+ }
131
+ async eventSaveSnapshot(stream, type, data, eventId) {
132
+ const key = `${stream}:${type}`;
133
+ const snapshot = {
134
+ data,
135
+ eventId,
136
+ createdAt: Date.now(),
137
+ };
138
+ this.snapshots.set(key, snapshot);
139
+ }
140
+ async eventListStreams() {
141
+ return Array.from(this.events.keys()).sort();
142
+ }
143
+ // Query operations (limited in memory backend)
144
+ async querySql(query, params = []) {
145
+ throw new Error("SQL queries are not supported in memory backend. Use KV and event operations instead.");
146
+ }
147
+ // Transaction operations (simplified for memory)
148
+ async transactionBegin() {
149
+ this.transactionDepth++;
150
+ if (this.transactionDepth === 1) {
151
+ // Take snapshots of current state
152
+ const kvSnapshot = new Map(this.kvStore);
153
+ const eventsSnapshot = new Map(Array.from(this.events.entries()).map(([k, v]) => [k, [...v]]));
154
+ const snapshotsSnapshot = new Map(this.snapshots);
155
+ this.transactionStack.push(() => {
156
+ this.kvStore = kvSnapshot;
157
+ this.events = eventsSnapshot;
158
+ this.snapshots = snapshotsSnapshot;
159
+ });
160
+ }
161
+ }
162
+ async transactionCommit() {
163
+ this.transactionDepth--;
164
+ if (this.transactionDepth === 0) {
165
+ this.transactionStack.pop(); // Discard rollback function
166
+ }
167
+ }
168
+ async transactionRollback() {
169
+ this.transactionDepth--;
170
+ if (this.transactionDepth === 0) {
171
+ const rollback = this.transactionStack.pop();
172
+ if (rollback) {
173
+ rollback();
174
+ }
175
+ }
176
+ }
177
+ async transactionRun(fn) {
178
+ await this.transactionBegin();
179
+ try {
180
+ const result = await fn();
181
+ await this.transactionCommit();
182
+ return result;
183
+ }
184
+ catch (error) {
185
+ await this.transactionRollback();
186
+ throw error;
187
+ }
188
+ }
189
+ // Cleanup and maintenance
190
+ sweep() {
191
+ const now = Date.now();
192
+ let cleaned = 0;
193
+ for (const [key, entry] of this.kvStore.entries()) {
194
+ if (entry.expiresAt && now >= entry.expiresAt) {
195
+ this.kvStore.delete(key);
196
+ cleaned++;
197
+ }
198
+ }
199
+ if (cleaned > 0) {
200
+ console.debug(`Cleaned up ${cleaned} expired KV entries`);
201
+ }
202
+ }
203
+ async close() {
204
+ if (this.sweepTimer) {
205
+ clearInterval(this.sweepTimer);
206
+ this.sweepTimer = undefined;
207
+ }
208
+ this.kvStore.clear();
209
+ this.events.clear();
210
+ this.snapshots.clear();
211
+ this.transactionStack.length = 0;
212
+ }
213
+ }
214
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/shared/persistence/backends/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
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 type { PersistenceBackend, Event, EventQuery } from "../index.js";
9
+ export declare class SqliteBackend implements PersistenceBackend {
10
+ private dbPath;
11
+ private db;
12
+ private stmts;
13
+ private sweepTimer;
14
+ private transactionDepth;
15
+ constructor(dbPath: string);
16
+ init(): Promise<void>;
17
+ kvGet<T>(namespace: string, key: string): Promise<T | null>;
18
+ kvSet<T>(namespace: string, key: string, value: T, ttlMs?: number): Promise<void>;
19
+ kvDelete(namespace: string, key: string): Promise<void>;
20
+ kvDeleteAll(namespace: string): Promise<void>;
21
+ kvList<T>(namespace: string): Promise<Array<{
22
+ key: string;
23
+ value: T;
24
+ }>>;
25
+ eventAppend(stream: string, event: Omit<Event, 'id' | 'timestamp'>): Promise<Event>;
26
+ eventReplay(stream: string, query?: EventQuery): AsyncIterable<Event>;
27
+ eventGetSnapshot<T>(stream: string, type: string): Promise<T | null>;
28
+ eventSaveSnapshot<T>(stream: string, type: string, data: T, eventId: string): Promise<void>;
29
+ eventListStreams(): Promise<string[]>;
30
+ querySql<T>(query: string, params?: any[]): Promise<T[]>;
31
+ transactionBegin(): Promise<void>;
32
+ transactionCommit(): Promise<void>;
33
+ transactionRollback(): Promise<void>;
34
+ transactionRun<T>(fn: () => Promise<T>): Promise<T>;
35
+ private sweep;
36
+ close(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/shared/persistence/backends/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzE,qBAAa,aAAc,YAAW,kBAAkB;IAM1C,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,EAAE,CAAgC;IAC1C,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,gBAAgB,CAAK;gBAET,MAAM,EAAE,MAAM;IAW5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8GrB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK3D,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAMvE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAyBlF,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC;IA+BtE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKpE,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3F,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMrC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAU5D,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAazD,OAAO,CAAC,KAAK;IAQP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}