agentic-qe 1.3.5 → 1.3.6
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/.claude/agents/qe-code-complexity.md +291 -0
- package/.claude/settings.json +2 -2
- package/CHANGELOG.md +37 -0
- package/README.md +27 -2
- package/dist/agents/BaseAgent.d.ts +6 -2
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +62 -51
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +139 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js +403 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -0
- package/dist/agents/FleetCommanderAgent.js +2 -2
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +5 -5
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +33 -19
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +9 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +96 -2
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +23 -1
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +279 -54
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/coordination/AgentCoordinator.d.ts +98 -0
- package/dist/agents/coordination/AgentCoordinator.d.ts.map +1 -0
- package/dist/agents/coordination/AgentCoordinator.js +196 -0
- package/dist/agents/coordination/AgentCoordinator.js.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts +107 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.js +220 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -0
- package/dist/agents/memory/AgentMemoryService.d.ts +173 -0
- package/dist/agents/memory/AgentMemoryService.d.ts.map +1 -0
- package/dist/agents/memory/AgentMemoryService.js +297 -0
- package/dist/agents/memory/AgentMemoryService.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +45 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/skills/index.d.ts +4 -0
- package/dist/cli/commands/skills/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/index.js +8 -2
- package/dist/cli/commands/skills/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +2 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +4 -1
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/dao/AccessControlDAO.d.ts +66 -0
- package/dist/core/memory/dao/AccessControlDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/AccessControlDAO.js +140 -0
- package/dist/core/memory/dao/AccessControlDAO.js.map +1 -0
- package/dist/core/memory/dao/BaseDAO.d.ts +34 -0
- package/dist/core/memory/dao/BaseDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/BaseDAO.js +34 -0
- package/dist/core/memory/dao/BaseDAO.js.map +1 -0
- package/dist/core/memory/dao/BlackboardDAO.d.ts +90 -0
- package/dist/core/memory/dao/BlackboardDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/BlackboardDAO.js +223 -0
- package/dist/core/memory/dao/BlackboardDAO.js.map +1 -0
- package/dist/core/memory/dao/EventDAO.d.ts +83 -0
- package/dist/core/memory/dao/EventDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/EventDAO.js +177 -0
- package/dist/core/memory/dao/EventDAO.js.map +1 -0
- package/dist/core/memory/dao/MemoryEntryDAO.d.ts +57 -0
- package/dist/core/memory/dao/MemoryEntryDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/MemoryEntryDAO.js +159 -0
- package/dist/core/memory/dao/MemoryEntryDAO.js.map +1 -0
- package/dist/core/memory/dao/WorkflowDAO.d.ts +85 -0
- package/dist/core/memory/dao/WorkflowDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/WorkflowDAO.js +182 -0
- package/dist/core/memory/dao/WorkflowDAO.js.map +1 -0
- package/dist/core/memory/services/AccessControlService.d.ts +123 -0
- package/dist/core/memory/services/AccessControlService.d.ts.map +1 -0
- package/dist/core/memory/services/AccessControlService.js +249 -0
- package/dist/core/memory/services/AccessControlService.js.map +1 -0
- package/dist/core/memory/services/MemoryStoreService.d.ts +69 -0
- package/dist/core/memory/services/MemoryStoreService.d.ts.map +1 -0
- package/dist/core/memory/services/MemoryStoreService.js +214 -0
- package/dist/core/memory/services/MemoryStoreService.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +4 -1
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts +11 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.js +63 -8
- package/dist/mcp/handlers/prediction/regression-risk-analyze.js.map +1 -1
- package/dist/mcp/handlers/quality-analyze.d.ts +7 -1
- package/dist/mcp/handlers/quality-analyze.d.ts.map +1 -1
- package/dist/mcp/handlers/quality-analyze.js +18 -1
- package/dist/mcp/handlers/quality-analyze.js.map +1 -1
- package/dist/mcp/handlers/test-generate.d.ts.map +1 -1
- package/dist/mcp/handlers/test-generate.js +24 -8
- package/dist/mcp/handlers/test-generate.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +5 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +19 -0
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/utils/__mocks__/Database.d.ts +64 -0
- package/dist/utils/__mocks__/Database.d.ts.map +1 -0
- package/dist/utils/__mocks__/Database.js +134 -0
- package/dist/utils/__mocks__/Database.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BlackboardDAO = void 0;
|
|
4
|
+
const BaseDAO_1 = require("./BaseDAO");
|
|
5
|
+
/**
|
|
6
|
+
* BlackboardDAO - Data Access Object for blackboard pattern hints (Table 2b)
|
|
7
|
+
*
|
|
8
|
+
* Handles all database operations for the blackboard_hints table
|
|
9
|
+
* Implements the blackboard architectural pattern for agent coordination
|
|
10
|
+
*/
|
|
11
|
+
class BlackboardDAO extends BaseDAO_1.BaseDAO {
|
|
12
|
+
async createTable() {
|
|
13
|
+
await this.run(`
|
|
14
|
+
CREATE TABLE IF NOT EXISTS blackboard_hints (
|
|
15
|
+
id TEXT PRIMARY KEY,
|
|
16
|
+
topic TEXT NOT NULL,
|
|
17
|
+
message TEXT NOT NULL,
|
|
18
|
+
priority TEXT NOT NULL CHECK(priority IN ('low', 'medium', 'high', 'critical')),
|
|
19
|
+
agent_id TEXT NOT NULL,
|
|
20
|
+
metadata TEXT,
|
|
21
|
+
created_at INTEGER NOT NULL,
|
|
22
|
+
expires_at INTEGER,
|
|
23
|
+
consumed INTEGER DEFAULT 0
|
|
24
|
+
)
|
|
25
|
+
`);
|
|
26
|
+
}
|
|
27
|
+
async createIndexes() {
|
|
28
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_hints_topic ON blackboard_hints(topic)`);
|
|
29
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_hints_priority ON blackboard_hints(priority)`);
|
|
30
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_hints_agent ON blackboard_hints(agent_id)`);
|
|
31
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_hints_created ON blackboard_hints(created_at)`);
|
|
32
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_hints_expires ON blackboard_hints(expires_at)`);
|
|
33
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_hints_consumed ON blackboard_hints(consumed)`);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Post a hint to the blackboard
|
|
37
|
+
*/
|
|
38
|
+
async post(hint) {
|
|
39
|
+
const id = hint.id || this.generateHintId();
|
|
40
|
+
const expiresAt = hint.expiresAt || null;
|
|
41
|
+
await this.run(`INSERT INTO blackboard_hints
|
|
42
|
+
(id, topic, message, priority, agent_id, metadata, created_at, expires_at, consumed)
|
|
43
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0)`, [
|
|
44
|
+
id,
|
|
45
|
+
hint.topic,
|
|
46
|
+
hint.message,
|
|
47
|
+
hint.priority,
|
|
48
|
+
hint.agentId,
|
|
49
|
+
hint.metadata ? JSON.stringify(hint.metadata) : null,
|
|
50
|
+
hint.createdAt,
|
|
51
|
+
expiresAt
|
|
52
|
+
]);
|
|
53
|
+
return id;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Read hints from blackboard by topic
|
|
57
|
+
*/
|
|
58
|
+
async findByTopic(topic, minPriority, limit = 50) {
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
let query = `SELECT * FROM blackboard_hints
|
|
61
|
+
WHERE topic = ?
|
|
62
|
+
AND consumed = 0
|
|
63
|
+
AND (expires_at IS NULL OR expires_at > ?)`;
|
|
64
|
+
const params = [topic, now];
|
|
65
|
+
if (minPriority) {
|
|
66
|
+
const priorityOrder = { low: 1, medium: 2, high: 3, critical: 4 };
|
|
67
|
+
const minPriorityValue = priorityOrder[minPriority];
|
|
68
|
+
query += ` AND (
|
|
69
|
+
(priority = 'critical' AND 4 >= ?) OR
|
|
70
|
+
(priority = 'high' AND 3 >= ?) OR
|
|
71
|
+
(priority = 'medium' AND 2 >= ?) OR
|
|
72
|
+
(priority = 'low' AND 1 >= ?)
|
|
73
|
+
)`;
|
|
74
|
+
params.push(minPriorityValue, minPriorityValue, minPriorityValue, minPriorityValue);
|
|
75
|
+
}
|
|
76
|
+
query += ` ORDER BY
|
|
77
|
+
CASE priority
|
|
78
|
+
WHEN 'critical' THEN 1
|
|
79
|
+
WHEN 'high' THEN 2
|
|
80
|
+
WHEN 'medium' THEN 3
|
|
81
|
+
WHEN 'low' THEN 4
|
|
82
|
+
END,
|
|
83
|
+
created_at ASC
|
|
84
|
+
LIMIT ?`;
|
|
85
|
+
params.push(limit);
|
|
86
|
+
const rows = await this.queryAll(query, params);
|
|
87
|
+
return rows.map(row => this.mapToHint(row));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Find hints by agent
|
|
91
|
+
*/
|
|
92
|
+
async findByAgent(agentId, limit = 50) {
|
|
93
|
+
const now = Date.now();
|
|
94
|
+
const rows = await this.queryAll(`SELECT * FROM blackboard_hints
|
|
95
|
+
WHERE agent_id = ?
|
|
96
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
97
|
+
ORDER BY created_at DESC
|
|
98
|
+
LIMIT ?`, [agentId, now, limit]);
|
|
99
|
+
return rows.map(row => this.mapToHint(row));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Find hints since a timestamp
|
|
103
|
+
*/
|
|
104
|
+
async findSince(topic, since, limit = 50) {
|
|
105
|
+
const now = Date.now();
|
|
106
|
+
const rows = await this.queryAll(`SELECT * FROM blackboard_hints
|
|
107
|
+
WHERE topic = ?
|
|
108
|
+
AND created_at > ?
|
|
109
|
+
AND consumed = 0
|
|
110
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
111
|
+
ORDER BY created_at ASC
|
|
112
|
+
LIMIT ?`, [topic, since, now, limit]);
|
|
113
|
+
return rows.map(row => this.mapToHint(row));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Mark hint as consumed
|
|
117
|
+
*/
|
|
118
|
+
async markConsumed(id) {
|
|
119
|
+
await this.run(`UPDATE blackboard_hints SET consumed = 1 WHERE id = ?`, [id]);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Mark multiple hints as consumed
|
|
123
|
+
*/
|
|
124
|
+
async markManyConsumed(ids) {
|
|
125
|
+
if (ids.length === 0)
|
|
126
|
+
return;
|
|
127
|
+
const placeholders = ids.map(() => '?').join(',');
|
|
128
|
+
await this.run(`UPDATE blackboard_hints SET consumed = 1 WHERE id IN (${placeholders})`, ids);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Delete a hint by ID
|
|
132
|
+
*/
|
|
133
|
+
async deleteById(id) {
|
|
134
|
+
await this.run(`DELETE FROM blackboard_hints WHERE id = ?`, [id]);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Delete hints by topic
|
|
138
|
+
*/
|
|
139
|
+
async deleteByTopic(topic) {
|
|
140
|
+
await this.run(`DELETE FROM blackboard_hints WHERE topic = ?`, [topic]);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Delete expired hints
|
|
144
|
+
*/
|
|
145
|
+
async deleteExpired() {
|
|
146
|
+
const now = Date.now();
|
|
147
|
+
await this.run(`DELETE FROM blackboard_hints WHERE expires_at IS NOT NULL AND expires_at <= ?`, [now]);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Delete old consumed hints
|
|
151
|
+
*/
|
|
152
|
+
async deleteConsumedOlderThan(timestamp) {
|
|
153
|
+
await this.run(`DELETE FROM blackboard_hints WHERE consumed = 1 AND created_at < ?`, [timestamp]);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Count total hints
|
|
157
|
+
*/
|
|
158
|
+
async count() {
|
|
159
|
+
const result = await this.queryOne(`SELECT COUNT(*) as count FROM blackboard_hints`);
|
|
160
|
+
return result?.count || 0;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Count unconsumed hints by topic
|
|
164
|
+
*/
|
|
165
|
+
async countByTopic(topic) {
|
|
166
|
+
const now = Date.now();
|
|
167
|
+
const result = await this.queryOne(`SELECT COUNT(*) as count FROM blackboard_hints
|
|
168
|
+
WHERE topic = ?
|
|
169
|
+
AND consumed = 0
|
|
170
|
+
AND (expires_at IS NULL OR expires_at > ?)`, [topic, now]);
|
|
171
|
+
return result?.count || 0;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get hint statistics by priority
|
|
175
|
+
*/
|
|
176
|
+
async getPriorityCounts() {
|
|
177
|
+
const rows = await this.queryAll(`SELECT priority, COUNT(*) as count FROM blackboard_hints
|
|
178
|
+
WHERE consumed = 0
|
|
179
|
+
GROUP BY priority`);
|
|
180
|
+
const counts = {};
|
|
181
|
+
rows.forEach(row => {
|
|
182
|
+
counts[row.priority] = row.count;
|
|
183
|
+
});
|
|
184
|
+
return counts;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get hint statistics by topic
|
|
188
|
+
*/
|
|
189
|
+
async getTopicCounts() {
|
|
190
|
+
const rows = await this.queryAll(`SELECT topic, COUNT(*) as count FROM blackboard_hints
|
|
191
|
+
WHERE consumed = 0
|
|
192
|
+
GROUP BY topic`);
|
|
193
|
+
const counts = {};
|
|
194
|
+
rows.forEach(row => {
|
|
195
|
+
counts[row.topic] = row.count;
|
|
196
|
+
});
|
|
197
|
+
return counts;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Generate a unique hint ID
|
|
201
|
+
*/
|
|
202
|
+
generateHintId() {
|
|
203
|
+
return `hint_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Map database row to Hint object
|
|
207
|
+
*/
|
|
208
|
+
mapToHint(row) {
|
|
209
|
+
return {
|
|
210
|
+
id: row.id,
|
|
211
|
+
topic: row.topic,
|
|
212
|
+
message: row.message,
|
|
213
|
+
priority: row.priority,
|
|
214
|
+
agentId: row.agent_id,
|
|
215
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
216
|
+
createdAt: row.created_at,
|
|
217
|
+
expiresAt: row.expires_at,
|
|
218
|
+
consumed: row.consumed === 1
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.BlackboardDAO = BlackboardDAO;
|
|
223
|
+
//# sourceMappingURL=BlackboardDAO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlackboardDAO.js","sourceRoot":"","sources":["../../../../src/core/memory/dao/BlackboardDAO.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AAiBpC;;;;;GAKG;AACH,MAAa,aAAc,SAAQ,iBAAO;IACxC,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,GAAG,CAAC;;;;;;;;;;;;KAYd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACxF,MAAM,IAAI,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC9F,MAAM,IAAI,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAChG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAAU;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QAEzC,MAAM,IAAI,CAAC,GAAG,CACZ;;0CAEoC,EACpC;YACE,EAAE;YACF,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;YACpD,IAAI,CAAC,SAAS;YACd,SAAS;SACV,CACF,CAAC;QAEF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,KAAa,EACb,WAA8B,EAC9B,QAAgB,EAAE;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG;;;4DAG4C,CAAC;QACzD,MAAM,MAAM,GAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEnC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YACpD,KAAK,IAAI;;;;;QAKP,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QACtF,CAAC;QAED,KAAK,IAAI;;;;;;;;cAQC,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAM,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,QAAgB,EAAE;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAC9B;;;;eAIS,EACT,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CACtB,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,KAAa,EACb,KAAa,EACb,QAAgB,EAAE;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAC9B;;;;;;eAMS,EACT,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAC3B,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,IAAI,CAAC,GAAG,CACZ,uDAAuD,EACvD,CAAC,EAAE,CAAC,CACL,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,GAAa;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7B,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,GAAG,CACZ,yDAAyD,YAAY,GAAG,EACxE,GAAG,CACJ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,2CAA2C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,MAAM,IAAI,CAAC,GAAG,CAAC,8CAA8C,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,GAAG,CACZ,+EAA+E,EAC/E,CAAC,GAAG,CAAC,CACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAAC,SAAiB;QAC7C,MAAM,IAAI,CAAC,GAAG,CACZ,oEAAoE,EACpE,CAAC,SAAS,CAAC,CACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC,gDAAgD,CACjD,CAAC;QACF,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC;;;kDAG4C,EAC5C,CAAC,KAAK,EAAE,GAAG,CAAC,CACb,CAAC;QACF,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAC9B;;yBAEmB,CACpB,CAAC;QAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAC9B;;sBAEgB,CACjB,CAAC;QAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,GAAQ;QACxB,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAA4B;YAC1C,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7D,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;SAC7B,CAAC;IACJ,CAAC;CACF;AAhRD,sCAgRC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { BaseDAO } from './BaseDAO';
|
|
2
|
+
/**
|
|
3
|
+
* Event interface for event streaming
|
|
4
|
+
*/
|
|
5
|
+
export interface Event {
|
|
6
|
+
id?: string;
|
|
7
|
+
type: string;
|
|
8
|
+
payload: any;
|
|
9
|
+
timestamp?: number;
|
|
10
|
+
source: string;
|
|
11
|
+
ttl?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* EventDAO - Data Access Object for event stream (Table 3)
|
|
15
|
+
*
|
|
16
|
+
* Handles all database operations for the events table
|
|
17
|
+
* Manages event streaming and coordination between agents
|
|
18
|
+
*/
|
|
19
|
+
export declare class EventDAO extends BaseDAO {
|
|
20
|
+
createTable(): Promise<void>;
|
|
21
|
+
createIndexes(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Insert a new event
|
|
24
|
+
*/
|
|
25
|
+
insert(event: Event): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Find an event by ID
|
|
28
|
+
*/
|
|
29
|
+
findById(id: string): Promise<Event | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Find events by type
|
|
32
|
+
*/
|
|
33
|
+
findByType(type: string, limit?: number): Promise<Event[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Find events by source agent
|
|
36
|
+
*/
|
|
37
|
+
findBySource(source: string, limit?: number): Promise<Event[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Find events since a timestamp
|
|
40
|
+
*/
|
|
41
|
+
findSince(since: number, limit?: number): Promise<Event[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Get unconsumed events
|
|
44
|
+
*/
|
|
45
|
+
findUnconsumed(limit?: number): Promise<Event[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Mark event as consumed
|
|
48
|
+
*/
|
|
49
|
+
markConsumed(id: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Delete an event by ID
|
|
52
|
+
*/
|
|
53
|
+
deleteById(id: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Delete events by type
|
|
56
|
+
*/
|
|
57
|
+
deleteByType(type: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Delete expired events
|
|
60
|
+
*/
|
|
61
|
+
deleteExpired(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Delete old consumed events
|
|
64
|
+
*/
|
|
65
|
+
deleteConsumedOlderThan(timestamp: number): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Count total events
|
|
68
|
+
*/
|
|
69
|
+
count(): Promise<number>;
|
|
70
|
+
/**
|
|
71
|
+
* Count events by type
|
|
72
|
+
*/
|
|
73
|
+
countByType(type: string): Promise<number>;
|
|
74
|
+
/**
|
|
75
|
+
* Get event statistics by type
|
|
76
|
+
*/
|
|
77
|
+
getTypeCounts(): Promise<Record<string, number>>;
|
|
78
|
+
/**
|
|
79
|
+
* Map database row to Event object
|
|
80
|
+
*/
|
|
81
|
+
private mapToEvent;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=EventDAO.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventDAO.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/dao/EventDAO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,OAAO;IAC7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB3C;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAQjD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAarE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAazE;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAarE;;OAEG;IACG,cAAc,CAAC,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAa3D;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC;;OAEG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9B;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQhD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAYtD;;OAEG;IACH,OAAO,CAAC,UAAU;CAUnB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventDAO = void 0;
|
|
4
|
+
const BaseDAO_1 = require("./BaseDAO");
|
|
5
|
+
const SecureRandom_1 = require("../../../utils/SecureRandom");
|
|
6
|
+
/**
|
|
7
|
+
* EventDAO - Data Access Object for event stream (Table 3)
|
|
8
|
+
*
|
|
9
|
+
* Handles all database operations for the events table
|
|
10
|
+
* Manages event streaming and coordination between agents
|
|
11
|
+
*/
|
|
12
|
+
class EventDAO extends BaseDAO_1.BaseDAO {
|
|
13
|
+
async createTable() {
|
|
14
|
+
await this.run(`
|
|
15
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
16
|
+
id TEXT PRIMARY KEY,
|
|
17
|
+
type TEXT NOT NULL,
|
|
18
|
+
payload TEXT NOT NULL,
|
|
19
|
+
timestamp INTEGER NOT NULL,
|
|
20
|
+
source TEXT NOT NULL,
|
|
21
|
+
expires_at INTEGER,
|
|
22
|
+
consumed INTEGER DEFAULT 0
|
|
23
|
+
)
|
|
24
|
+
`);
|
|
25
|
+
}
|
|
26
|
+
async createIndexes() {
|
|
27
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_events_type ON events(type)`);
|
|
28
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(timestamp)`);
|
|
29
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_events_source ON events(source)`);
|
|
30
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_events_expires ON events(expires_at)`);
|
|
31
|
+
await this.run(`CREATE INDEX IF NOT EXISTS idx_events_consumed ON events(consumed)`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Insert a new event
|
|
35
|
+
*/
|
|
36
|
+
async insert(event) {
|
|
37
|
+
const id = event.id || SecureRandom_1.SecureRandom.generateId();
|
|
38
|
+
const timestamp = event.timestamp || Date.now();
|
|
39
|
+
const expiresAt = event.ttl ? timestamp + (event.ttl * 1000) : null;
|
|
40
|
+
await this.run(`INSERT INTO events (id, type, payload, timestamp, source, expires_at, consumed)
|
|
41
|
+
VALUES (?, ?, ?, ?, ?, ?, 0)`, [
|
|
42
|
+
id,
|
|
43
|
+
event.type,
|
|
44
|
+
JSON.stringify(event.payload),
|
|
45
|
+
timestamp,
|
|
46
|
+
event.source,
|
|
47
|
+
expiresAt
|
|
48
|
+
]);
|
|
49
|
+
return id;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Find an event by ID
|
|
53
|
+
*/
|
|
54
|
+
async findById(id) {
|
|
55
|
+
const row = await this.queryOne(`SELECT * FROM events WHERE id = ?`, [id]);
|
|
56
|
+
return row ? this.mapToEvent(row) : null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find events by type
|
|
60
|
+
*/
|
|
61
|
+
async findByType(type, limit = 100) {
|
|
62
|
+
const now = Date.now();
|
|
63
|
+
const rows = await this.queryAll(`SELECT * FROM events
|
|
64
|
+
WHERE type = ?
|
|
65
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
66
|
+
ORDER BY timestamp DESC
|
|
67
|
+
LIMIT ?`, [type, now, limit]);
|
|
68
|
+
return rows.map(row => this.mapToEvent(row));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Find events by source agent
|
|
72
|
+
*/
|
|
73
|
+
async findBySource(source, limit = 100) {
|
|
74
|
+
const now = Date.now();
|
|
75
|
+
const rows = await this.queryAll(`SELECT * FROM events
|
|
76
|
+
WHERE source = ?
|
|
77
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
78
|
+
ORDER BY timestamp DESC
|
|
79
|
+
LIMIT ?`, [source, now, limit]);
|
|
80
|
+
return rows.map(row => this.mapToEvent(row));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Find events since a timestamp
|
|
84
|
+
*/
|
|
85
|
+
async findSince(since, limit = 100) {
|
|
86
|
+
const now = Date.now();
|
|
87
|
+
const rows = await this.queryAll(`SELECT * FROM events
|
|
88
|
+
WHERE timestamp > ?
|
|
89
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
90
|
+
ORDER BY timestamp ASC
|
|
91
|
+
LIMIT ?`, [since, now, limit]);
|
|
92
|
+
return rows.map(row => this.mapToEvent(row));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get unconsumed events
|
|
96
|
+
*/
|
|
97
|
+
async findUnconsumed(limit = 100) {
|
|
98
|
+
const now = Date.now();
|
|
99
|
+
const rows = await this.queryAll(`SELECT * FROM events
|
|
100
|
+
WHERE consumed = 0
|
|
101
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
102
|
+
ORDER BY timestamp ASC
|
|
103
|
+
LIMIT ?`, [now, limit]);
|
|
104
|
+
return rows.map(row => this.mapToEvent(row));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Mark event as consumed
|
|
108
|
+
*/
|
|
109
|
+
async markConsumed(id) {
|
|
110
|
+
await this.run(`UPDATE events SET consumed = 1 WHERE id = ?`, [id]);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Delete an event by ID
|
|
114
|
+
*/
|
|
115
|
+
async deleteById(id) {
|
|
116
|
+
await this.run(`DELETE FROM events WHERE id = ?`, [id]);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Delete events by type
|
|
120
|
+
*/
|
|
121
|
+
async deleteByType(type) {
|
|
122
|
+
await this.run(`DELETE FROM events WHERE type = ?`, [type]);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Delete expired events
|
|
126
|
+
*/
|
|
127
|
+
async deleteExpired() {
|
|
128
|
+
const now = Date.now();
|
|
129
|
+
await this.run(`DELETE FROM events WHERE expires_at IS NOT NULL AND expires_at <= ?`, [now]);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Delete old consumed events
|
|
133
|
+
*/
|
|
134
|
+
async deleteConsumedOlderThan(timestamp) {
|
|
135
|
+
await this.run(`DELETE FROM events WHERE consumed = 1 AND timestamp < ?`, [timestamp]);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Count total events
|
|
139
|
+
*/
|
|
140
|
+
async count() {
|
|
141
|
+
const result = await this.queryOne(`SELECT COUNT(*) as count FROM events`);
|
|
142
|
+
return result?.count || 0;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Count events by type
|
|
146
|
+
*/
|
|
147
|
+
async countByType(type) {
|
|
148
|
+
const result = await this.queryOne(`SELECT COUNT(*) as count FROM events WHERE type = ?`, [type]);
|
|
149
|
+
return result?.count || 0;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get event statistics by type
|
|
153
|
+
*/
|
|
154
|
+
async getTypeCounts() {
|
|
155
|
+
const rows = await this.queryAll(`SELECT type, COUNT(*) as count FROM events GROUP BY type`);
|
|
156
|
+
const counts = {};
|
|
157
|
+
rows.forEach(row => {
|
|
158
|
+
counts[row.type] = row.count;
|
|
159
|
+
});
|
|
160
|
+
return counts;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Map database row to Event object
|
|
164
|
+
*/
|
|
165
|
+
mapToEvent(row) {
|
|
166
|
+
return {
|
|
167
|
+
id: row.id,
|
|
168
|
+
type: row.type,
|
|
169
|
+
payload: JSON.parse(row.payload),
|
|
170
|
+
timestamp: row.timestamp,
|
|
171
|
+
source: row.source,
|
|
172
|
+
ttl: row.expires_at ? (row.expires_at - row.timestamp) / 1000 : undefined
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.EventDAO = EventDAO;
|
|
177
|
+
//# sourceMappingURL=EventDAO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventDAO.js","sourceRoot":"","sources":["../../../../src/core/memory/dao/EventDAO.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BaseDAO } from './BaseDAO';
|
|
2
|
+
import { MemoryEntry } from '../SwarmMemoryManager';
|
|
3
|
+
/**
|
|
4
|
+
* MemoryEntryDAO - Data Access Object for core memory entries (Table 1)
|
|
5
|
+
*
|
|
6
|
+
* Handles all database operations for the memory_entries table
|
|
7
|
+
* Separates data access from business logic
|
|
8
|
+
*/
|
|
9
|
+
export declare class MemoryEntryDAO extends BaseDAO {
|
|
10
|
+
createTable(): Promise<void>;
|
|
11
|
+
createIndexes(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Insert or replace a memory entry
|
|
14
|
+
*/
|
|
15
|
+
insert(entry: MemoryEntry): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Find a memory entry by key and partition
|
|
18
|
+
*/
|
|
19
|
+
findByKey(key: string, partition: string, includeExpired?: boolean): Promise<MemoryEntry | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Find memory entries by pattern match on key
|
|
22
|
+
*/
|
|
23
|
+
findByPattern(pattern: string, partition: string, includeExpired?: boolean): Promise<MemoryEntry[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Delete a memory entry by key and partition
|
|
26
|
+
*/
|
|
27
|
+
deleteByKey(key: string, partition: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Delete all entries in a partition
|
|
30
|
+
*/
|
|
31
|
+
deleteByPartition(partition: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Delete all expired entries
|
|
34
|
+
*/
|
|
35
|
+
deleteExpired(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Count total memory entries
|
|
38
|
+
*/
|
|
39
|
+
count(): Promise<number>;
|
|
40
|
+
/**
|
|
41
|
+
* Get list of distinct partitions
|
|
42
|
+
*/
|
|
43
|
+
getPartitions(): Promise<string[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Get count of entries by access level
|
|
46
|
+
*/
|
|
47
|
+
getAccessLevelCounts(): Promise<Record<string, number>>;
|
|
48
|
+
/**
|
|
49
|
+
* Find entries modified since a timestamp (for QUIC sync)
|
|
50
|
+
*/
|
|
51
|
+
findModifiedSince(since: number, partition?: string): Promise<MemoryEntry[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Map database row to MemoryEntry object
|
|
54
|
+
*/
|
|
55
|
+
private mapToEntry;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=MemoryEntryDAO.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryEntryDAO.d.ts","sourceRoot":"","sources":["../../../../src/core/memory/dao/MemoryEntryDAO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,WAAW,EAGZ,MAAM,uBAAuB,CAAC;AAE/B;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,OAAO;IACnC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/C;;OAEG;IACG,SAAS,CACb,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAc9B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC;IAczB;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOxC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAY7D;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAelF;;OAEG;IACH,OAAO,CAAC,UAAU;CAanB"}
|