agent-orchestration 0.5.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/.cursor/rules/orchestrator-auto.mdc +107 -0
- package/.cursor/rules/orchestrator-main.mdc +86 -0
- package/.cursor/rules/orchestrator-sub.mdc +114 -0
- package/LICENSE +21 -0
- package/README.md +329 -0
- package/activeContext.md +37 -0
- package/dist/bin/cli.d.ts +11 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +410 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/database.d.ts +91 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +522 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +132 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +124 -0
- package/dist/models.js.map +1 -0
- package/dist/tools/agent.d.ts +10 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +185 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/coordination.d.ts +6 -0
- package/dist/tools/coordination.d.ts.map +1 -0
- package/dist/tools/coordination.js +114 -0
- package/dist/tools/coordination.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory.d.ts +6 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +108 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/task.d.ts +6 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +267 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/utility.d.ts +6 -0
- package/dist/tools/utility.d.ts.map +1 -0
- package/dist/tools/utility.js +162 -0
- package/dist/tools/utility.js.map +1 -0
- package/dist/utils/contextSync.d.ts +12 -0
- package/dist/utils/contextSync.d.ts.map +1 -0
- package/dist/utils/contextSync.js +124 -0
- package/dist/utils/contextSync.js.map +1 -0
- package/package.json +54 -0
- package/src/bin/cli.ts +430 -0
- package/src/database.ts +764 -0
- package/src/index.ts +71 -0
- package/src/models.ts +226 -0
- package/src/tools/agent.ts +241 -0
- package/src/tools/coordination.ts +152 -0
- package/src/tools/index.ts +9 -0
- package/src/tools/memory.ts +150 -0
- package/src/tools/task.ts +334 -0
- package/src/tools/utility.ts +202 -0
- package/src/utils/contextSync.ts +144 -0
- package/tsconfig.json +20 -0
package/dist/database.js
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite database operations for MCP Orchestrator
|
|
3
|
+
* Uses better-sqlite3 for synchronous, high-performance SQLite access
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { createAgent, createEvent, createLock, createMemoryEntry, createTask, EventType, TaskStatus, } from './models.js';
|
|
9
|
+
// Default database path relative to project root
|
|
10
|
+
const DEFAULT_DB_DIR = '.agent-orchestration';
|
|
11
|
+
const DEFAULT_DB_NAME = 'orchestrator.db';
|
|
12
|
+
// Heartbeat TTL - agents without heartbeat for this long are marked offline
|
|
13
|
+
const HEARTBEAT_TTL_SECONDS = 300; // 5 minutes
|
|
14
|
+
/**
|
|
15
|
+
* Get the database path from environment or use default
|
|
16
|
+
*/
|
|
17
|
+
function getDbPath() {
|
|
18
|
+
const dbPath = process.env.MCP_ORCH_DB_PATH;
|
|
19
|
+
if (dbPath) {
|
|
20
|
+
// If relative path, resolve from cwd
|
|
21
|
+
if (!path.isAbsolute(dbPath)) {
|
|
22
|
+
return path.resolve(process.cwd(), dbPath);
|
|
23
|
+
}
|
|
24
|
+
return dbPath;
|
|
25
|
+
}
|
|
26
|
+
// Use current working directory as project root
|
|
27
|
+
return path.join(process.cwd(), DEFAULT_DB_DIR, DEFAULT_DB_NAME);
|
|
28
|
+
}
|
|
29
|
+
const SCHEMA = `
|
|
30
|
+
-- Agents table
|
|
31
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
32
|
+
id TEXT PRIMARY KEY,
|
|
33
|
+
name TEXT NOT NULL,
|
|
34
|
+
role TEXT NOT NULL DEFAULT 'sub',
|
|
35
|
+
status TEXT NOT NULL DEFAULT 'idle',
|
|
36
|
+
capabilities TEXT NOT NULL DEFAULT '[]',
|
|
37
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
38
|
+
registered_at TEXT NOT NULL,
|
|
39
|
+
last_heartbeat TEXT NOT NULL
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- Tasks table
|
|
43
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
44
|
+
id TEXT PRIMARY KEY,
|
|
45
|
+
title TEXT NOT NULL,
|
|
46
|
+
description TEXT NOT NULL DEFAULT '',
|
|
47
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
48
|
+
priority TEXT NOT NULL DEFAULT 'normal',
|
|
49
|
+
created_by TEXT,
|
|
50
|
+
assigned_to TEXT,
|
|
51
|
+
dependencies TEXT NOT NULL DEFAULT '[]',
|
|
52
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
53
|
+
output TEXT,
|
|
54
|
+
created_at TEXT NOT NULL,
|
|
55
|
+
updated_at TEXT NOT NULL,
|
|
56
|
+
started_at TEXT,
|
|
57
|
+
completed_at TEXT,
|
|
58
|
+
FOREIGN KEY (created_by) REFERENCES agents(id),
|
|
59
|
+
FOREIGN KEY (assigned_to) REFERENCES agents(id)
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
-- Memory table
|
|
63
|
+
CREATE TABLE IF NOT EXISTS memory (
|
|
64
|
+
id TEXT PRIMARY KEY,
|
|
65
|
+
key TEXT NOT NULL,
|
|
66
|
+
value TEXT NOT NULL,
|
|
67
|
+
namespace TEXT NOT NULL DEFAULT 'default',
|
|
68
|
+
created_by TEXT,
|
|
69
|
+
ttl_seconds INTEGER,
|
|
70
|
+
created_at TEXT NOT NULL,
|
|
71
|
+
updated_at TEXT NOT NULL,
|
|
72
|
+
expires_at TEXT,
|
|
73
|
+
UNIQUE(namespace, key),
|
|
74
|
+
FOREIGN KEY (created_by) REFERENCES agents(id)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
-- Locks table
|
|
78
|
+
CREATE TABLE IF NOT EXISTS locks (
|
|
79
|
+
id TEXT PRIMARY KEY,
|
|
80
|
+
resource TEXT NOT NULL UNIQUE,
|
|
81
|
+
held_by TEXT NOT NULL,
|
|
82
|
+
acquired_at TEXT NOT NULL,
|
|
83
|
+
expires_at TEXT,
|
|
84
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
85
|
+
FOREIGN KEY (held_by) REFERENCES agents(id)
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
-- Events table
|
|
89
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
90
|
+
id TEXT PRIMARY KEY,
|
|
91
|
+
event_type TEXT NOT NULL,
|
|
92
|
+
agent_id TEXT,
|
|
93
|
+
resource_id TEXT,
|
|
94
|
+
details TEXT NOT NULL DEFAULT '{}',
|
|
95
|
+
timestamp TEXT NOT NULL
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
-- Indexes for performance
|
|
99
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
100
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assigned_to ON tasks(assigned_to);
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_memory_namespace_key ON memory(namespace, key);
|
|
102
|
+
CREATE INDEX IF NOT EXISTS idx_locks_resource ON locks(resource);
|
|
103
|
+
CREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(timestamp);
|
|
104
|
+
CREATE INDEX IF NOT EXISTS idx_events_agent_id ON events(agent_id);
|
|
105
|
+
`;
|
|
106
|
+
export class OrchestratorDatabase {
|
|
107
|
+
db;
|
|
108
|
+
dbPath;
|
|
109
|
+
constructor(dbPath) {
|
|
110
|
+
this.dbPath = dbPath ?? getDbPath();
|
|
111
|
+
// Ensure directory exists
|
|
112
|
+
const dir = path.dirname(this.dbPath);
|
|
113
|
+
if (!fs.existsSync(dir)) {
|
|
114
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
115
|
+
}
|
|
116
|
+
// Open database
|
|
117
|
+
this.db = new Database(this.dbPath);
|
|
118
|
+
// Enable WAL mode for better concurrency (multiple agents)
|
|
119
|
+
this.db.pragma('journal_mode = WAL');
|
|
120
|
+
// Set busy timeout to wait up to 5 seconds if database is locked
|
|
121
|
+
this.db.pragma('busy_timeout = 5000');
|
|
122
|
+
// Enable foreign keys
|
|
123
|
+
this.db.pragma('foreign_keys = ON');
|
|
124
|
+
// Create schema
|
|
125
|
+
this.db.exec(SCHEMA);
|
|
126
|
+
}
|
|
127
|
+
close() {
|
|
128
|
+
this.db.close();
|
|
129
|
+
}
|
|
130
|
+
// ==================== Agent Operations ====================
|
|
131
|
+
createAgent(params) {
|
|
132
|
+
const agent = createAgent(params);
|
|
133
|
+
this.db
|
|
134
|
+
.prepare(`INSERT INTO agents (id, name, role, status, capabilities, metadata, registered_at, last_heartbeat)
|
|
135
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
136
|
+
.run(agent.id, agent.name, agent.role, agent.status, JSON.stringify(agent.capabilities), JSON.stringify(agent.metadata), agent.registeredAt.toISOString(), agent.lastHeartbeat.toISOString());
|
|
137
|
+
this.logEvent(EventType.AGENT_REGISTERED, agent.id, agent.id, { name: agent.name });
|
|
138
|
+
return agent;
|
|
139
|
+
}
|
|
140
|
+
getAgent(agentId) {
|
|
141
|
+
const row = this.db.prepare('SELECT * FROM agents WHERE id = ?').get(agentId);
|
|
142
|
+
return row ? this.rowToAgent(row) : null;
|
|
143
|
+
}
|
|
144
|
+
getAgentByName(name) {
|
|
145
|
+
const row = this.db.prepare('SELECT * FROM agents WHERE name = ?').get(name);
|
|
146
|
+
return row ? this.rowToAgent(row) : null;
|
|
147
|
+
}
|
|
148
|
+
listAgents(filters) {
|
|
149
|
+
let query = 'SELECT * FROM agents WHERE 1=1';
|
|
150
|
+
const params = [];
|
|
151
|
+
if (filters?.status) {
|
|
152
|
+
query += ' AND status = ?';
|
|
153
|
+
params.push(filters.status);
|
|
154
|
+
}
|
|
155
|
+
if (filters?.role) {
|
|
156
|
+
query += ' AND role = ?';
|
|
157
|
+
params.push(filters.role);
|
|
158
|
+
}
|
|
159
|
+
query += ' ORDER BY registered_at DESC';
|
|
160
|
+
const rows = this.db.prepare(query).all(...params);
|
|
161
|
+
return rows.map((row) => this.rowToAgent(row));
|
|
162
|
+
}
|
|
163
|
+
updateAgentHeartbeat(agentId, status) {
|
|
164
|
+
const now = new Date().toISOString();
|
|
165
|
+
let result;
|
|
166
|
+
if (status) {
|
|
167
|
+
result = this.db
|
|
168
|
+
.prepare('UPDATE agents SET last_heartbeat = ?, status = ? WHERE id = ?')
|
|
169
|
+
.run(now, status, agentId);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
result = this.db
|
|
173
|
+
.prepare('UPDATE agents SET last_heartbeat = ? WHERE id = ?')
|
|
174
|
+
.run(now, agentId);
|
|
175
|
+
}
|
|
176
|
+
return result.changes > 0;
|
|
177
|
+
}
|
|
178
|
+
deleteAgent(agentId) {
|
|
179
|
+
// First release any locks held by this agent
|
|
180
|
+
this.releaseAgentLocks(agentId);
|
|
181
|
+
const result = this.db.prepare('DELETE FROM agents WHERE id = ?').run(agentId);
|
|
182
|
+
if (result.changes > 0) {
|
|
183
|
+
this.logEvent(EventType.AGENT_UNREGISTERED, agentId, agentId);
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
rowToAgent(row) {
|
|
189
|
+
return {
|
|
190
|
+
id: row.id,
|
|
191
|
+
name: row.name,
|
|
192
|
+
role: row.role,
|
|
193
|
+
status: row.status,
|
|
194
|
+
capabilities: JSON.parse(row.capabilities),
|
|
195
|
+
metadata: JSON.parse(row.metadata),
|
|
196
|
+
registeredAt: new Date(row.registered_at),
|
|
197
|
+
lastHeartbeat: new Date(row.last_heartbeat),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
cleanupStaleAgents(ttlSeconds = HEARTBEAT_TTL_SECONDS) {
|
|
201
|
+
const cutoff = new Date(Date.now() - ttlSeconds * 1000).toISOString();
|
|
202
|
+
// Get stale agents first (so we can release their locks)
|
|
203
|
+
const staleAgents = this.db
|
|
204
|
+
.prepare("SELECT id FROM agents WHERE status != 'offline' AND last_heartbeat < ?")
|
|
205
|
+
.all(cutoff);
|
|
206
|
+
if (staleAgents.length === 0) {
|
|
207
|
+
return 0;
|
|
208
|
+
}
|
|
209
|
+
// Release locks for stale agents
|
|
210
|
+
for (const agent of staleAgents) {
|
|
211
|
+
this.releaseAgentLocks(agent.id);
|
|
212
|
+
}
|
|
213
|
+
// Mark them as offline
|
|
214
|
+
const result = this.db
|
|
215
|
+
.prepare("UPDATE agents SET status = 'offline' WHERE status != 'offline' AND last_heartbeat < ?")
|
|
216
|
+
.run(cutoff);
|
|
217
|
+
return result.changes;
|
|
218
|
+
}
|
|
219
|
+
// ==================== Task Operations ====================
|
|
220
|
+
createTask(params) {
|
|
221
|
+
const task = createTask(params);
|
|
222
|
+
this.db
|
|
223
|
+
.prepare(`INSERT INTO tasks (id, title, description, status, priority, created_by, assigned_to,
|
|
224
|
+
dependencies, metadata, output, created_at, updated_at, started_at, completed_at)
|
|
225
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
226
|
+
.run(task.id, task.title, task.description, task.status, task.priority, task.createdBy, task.assignedTo, JSON.stringify(task.dependencies), JSON.stringify(task.metadata), task.output, task.createdAt.toISOString(), task.updatedAt.toISOString(), task.startedAt?.toISOString() ?? null, task.completedAt?.toISOString() ?? null);
|
|
227
|
+
this.logEvent(EventType.TASK_CREATED, task.createdBy, task.id, { title: task.title });
|
|
228
|
+
return task;
|
|
229
|
+
}
|
|
230
|
+
getTask(taskId) {
|
|
231
|
+
const row = this.db.prepare('SELECT * FROM tasks WHERE id = ?').get(taskId);
|
|
232
|
+
return row ? this.rowToTask(row) : null;
|
|
233
|
+
}
|
|
234
|
+
listTasks(filters) {
|
|
235
|
+
let query = 'SELECT * FROM tasks WHERE 1=1';
|
|
236
|
+
const params = [];
|
|
237
|
+
if (filters?.status) {
|
|
238
|
+
query += ' AND status = ?';
|
|
239
|
+
params.push(filters.status);
|
|
240
|
+
}
|
|
241
|
+
if (filters?.assignedTo) {
|
|
242
|
+
query += ' AND assigned_to = ?';
|
|
243
|
+
params.push(filters.assignedTo);
|
|
244
|
+
}
|
|
245
|
+
if (filters?.createdBy) {
|
|
246
|
+
query += ' AND created_by = ?';
|
|
247
|
+
params.push(filters.createdBy);
|
|
248
|
+
}
|
|
249
|
+
query +=
|
|
250
|
+
" ORDER BY CASE priority WHEN 'urgent' THEN 1 WHEN 'high' THEN 2 WHEN 'normal' THEN 3 ELSE 4 END, created_at ASC";
|
|
251
|
+
const rows = this.db.prepare(query).all(...params);
|
|
252
|
+
return rows.map((row) => this.rowToTask(row));
|
|
253
|
+
}
|
|
254
|
+
updateTask(taskId, updates) {
|
|
255
|
+
const task = this.getTask(taskId);
|
|
256
|
+
if (!task) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
const setClauses = ['updated_at = ?'];
|
|
260
|
+
const params = [new Date().toISOString()];
|
|
261
|
+
if (updates.status !== undefined) {
|
|
262
|
+
setClauses.push('status = ?');
|
|
263
|
+
params.push(updates.status);
|
|
264
|
+
if (updates.status === TaskStatus.IN_PROGRESS && !task.startedAt) {
|
|
265
|
+
setClauses.push('started_at = ?');
|
|
266
|
+
params.push(new Date().toISOString());
|
|
267
|
+
}
|
|
268
|
+
else if ([TaskStatus.COMPLETED, TaskStatus.FAILED, TaskStatus.CANCELLED].includes(updates.status)) {
|
|
269
|
+
setClauses.push('completed_at = ?');
|
|
270
|
+
params.push(new Date().toISOString());
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (updates.assignedTo !== undefined) {
|
|
274
|
+
setClauses.push('assigned_to = ?');
|
|
275
|
+
params.push(updates.assignedTo);
|
|
276
|
+
}
|
|
277
|
+
if (updates.output !== undefined) {
|
|
278
|
+
setClauses.push('output = ?');
|
|
279
|
+
params.push(updates.output);
|
|
280
|
+
}
|
|
281
|
+
if (updates.metadata !== undefined) {
|
|
282
|
+
// Merge with existing metadata
|
|
283
|
+
const merged = { ...task.metadata, ...updates.metadata };
|
|
284
|
+
setClauses.push('metadata = ?');
|
|
285
|
+
params.push(JSON.stringify(merged));
|
|
286
|
+
}
|
|
287
|
+
params.push(taskId);
|
|
288
|
+
const query = `UPDATE tasks SET ${setClauses.join(', ')} WHERE id = ?`;
|
|
289
|
+
this.db.prepare(query).run(...params);
|
|
290
|
+
// Log appropriate event
|
|
291
|
+
let eventType = EventType.TASK_UPDATED;
|
|
292
|
+
if (updates.status === TaskStatus.ASSIGNED) {
|
|
293
|
+
eventType = EventType.TASK_ASSIGNED;
|
|
294
|
+
}
|
|
295
|
+
else if (updates.status === TaskStatus.IN_PROGRESS) {
|
|
296
|
+
eventType = EventType.TASK_CLAIMED;
|
|
297
|
+
}
|
|
298
|
+
else if (updates.status === TaskStatus.COMPLETED) {
|
|
299
|
+
eventType = EventType.TASK_COMPLETED;
|
|
300
|
+
}
|
|
301
|
+
this.logEvent(eventType, updates.assignedTo ?? task.assignedTo, taskId);
|
|
302
|
+
return this.getTask(taskId);
|
|
303
|
+
}
|
|
304
|
+
checkDependenciesMet(taskId) {
|
|
305
|
+
const task = this.getTask(taskId);
|
|
306
|
+
if (!task || task.dependencies.length === 0) {
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
for (const depId of task.dependencies) {
|
|
310
|
+
const depTask = this.getTask(depId);
|
|
311
|
+
if (!depTask || depTask.status !== TaskStatus.COMPLETED) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
getNextAvailableTask(agentId) {
|
|
318
|
+
// Get tasks that are pending or assigned to this agent
|
|
319
|
+
const rows = this.db
|
|
320
|
+
.prepare(`SELECT * FROM tasks
|
|
321
|
+
WHERE (status = 'pending' OR (status = 'assigned' AND assigned_to = ?))
|
|
322
|
+
ORDER BY
|
|
323
|
+
CASE priority WHEN 'urgent' THEN 1 WHEN 'high' THEN 2 WHEN 'normal' THEN 3 ELSE 4 END,
|
|
324
|
+
created_at ASC`)
|
|
325
|
+
.all(agentId);
|
|
326
|
+
for (const row of rows) {
|
|
327
|
+
const task = this.rowToTask(row);
|
|
328
|
+
if (this.checkDependenciesMet(task.id)) {
|
|
329
|
+
return task;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
rowToTask(row) {
|
|
335
|
+
return {
|
|
336
|
+
id: row.id,
|
|
337
|
+
title: row.title,
|
|
338
|
+
description: row.description,
|
|
339
|
+
status: row.status,
|
|
340
|
+
priority: row.priority,
|
|
341
|
+
createdBy: row.created_by,
|
|
342
|
+
assignedTo: row.assigned_to,
|
|
343
|
+
dependencies: JSON.parse(row.dependencies),
|
|
344
|
+
metadata: JSON.parse(row.metadata),
|
|
345
|
+
output: row.output,
|
|
346
|
+
createdAt: new Date(row.created_at),
|
|
347
|
+
updatedAt: new Date(row.updated_at),
|
|
348
|
+
startedAt: row.started_at ? new Date(row.started_at) : null,
|
|
349
|
+
completedAt: row.completed_at ? new Date(row.completed_at) : null,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
// ==================== Memory Operations ====================
|
|
353
|
+
setMemory(params) {
|
|
354
|
+
const entry = createMemoryEntry(params);
|
|
355
|
+
// Upsert: insert or replace
|
|
356
|
+
this.db
|
|
357
|
+
.prepare(`INSERT INTO memory (id, key, value, namespace, created_by, ttl_seconds, created_at, updated_at, expires_at)
|
|
358
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
359
|
+
ON CONFLICT(namespace, key) DO UPDATE SET
|
|
360
|
+
value = excluded.value,
|
|
361
|
+
updated_at = excluded.updated_at,
|
|
362
|
+
ttl_seconds = excluded.ttl_seconds,
|
|
363
|
+
expires_at = excluded.expires_at`)
|
|
364
|
+
.run(entry.id, entry.key, JSON.stringify(entry.value), entry.namespace, entry.createdBy, entry.ttlSeconds, entry.createdAt.toISOString(), entry.updatedAt.toISOString(), entry.expiresAt?.toISOString() ?? null);
|
|
365
|
+
this.logEvent(EventType.MEMORY_SET, entry.createdBy, entry.key, {
|
|
366
|
+
namespace: entry.namespace,
|
|
367
|
+
});
|
|
368
|
+
return entry;
|
|
369
|
+
}
|
|
370
|
+
getMemory(key, namespace = 'default') {
|
|
371
|
+
// Clean up expired entries first
|
|
372
|
+
this.cleanupExpiredMemory();
|
|
373
|
+
const row = this.db
|
|
374
|
+
.prepare('SELECT * FROM memory WHERE namespace = ? AND key = ?')
|
|
375
|
+
.get(namespace, key);
|
|
376
|
+
return row ? this.rowToMemory(row) : null;
|
|
377
|
+
}
|
|
378
|
+
listMemory(namespace = 'default') {
|
|
379
|
+
this.cleanupExpiredMemory();
|
|
380
|
+
const rows = this.db
|
|
381
|
+
.prepare('SELECT * FROM memory WHERE namespace = ? ORDER BY key')
|
|
382
|
+
.all(namespace);
|
|
383
|
+
return rows.map((row) => this.rowToMemory(row));
|
|
384
|
+
}
|
|
385
|
+
deleteMemory(key, namespace = 'default') {
|
|
386
|
+
const result = this.db
|
|
387
|
+
.prepare('DELETE FROM memory WHERE namespace = ? AND key = ?')
|
|
388
|
+
.run(namespace, key);
|
|
389
|
+
if (result.changes > 0) {
|
|
390
|
+
this.logEvent(EventType.MEMORY_DELETE, null, key, { namespace });
|
|
391
|
+
return true;
|
|
392
|
+
}
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
cleanupExpiredMemory() {
|
|
396
|
+
const now = new Date().toISOString();
|
|
397
|
+
this.db
|
|
398
|
+
.prepare('DELETE FROM memory WHERE expires_at IS NOT NULL AND expires_at < ?')
|
|
399
|
+
.run(now);
|
|
400
|
+
}
|
|
401
|
+
rowToMemory(row) {
|
|
402
|
+
return {
|
|
403
|
+
id: row.id,
|
|
404
|
+
key: row.key,
|
|
405
|
+
value: JSON.parse(row.value),
|
|
406
|
+
namespace: row.namespace,
|
|
407
|
+
createdBy: row.created_by,
|
|
408
|
+
ttlSeconds: row.ttl_seconds,
|
|
409
|
+
createdAt: new Date(row.created_at),
|
|
410
|
+
updatedAt: new Date(row.updated_at),
|
|
411
|
+
expiresAt: row.expires_at ? new Date(row.expires_at) : null,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
// ==================== Lock Operations ====================
|
|
415
|
+
acquireLock(params) {
|
|
416
|
+
// Clean up expired locks first
|
|
417
|
+
this.cleanupExpiredLocks();
|
|
418
|
+
const lock = createLock(params);
|
|
419
|
+
try {
|
|
420
|
+
this.db
|
|
421
|
+
.prepare(`INSERT INTO locks (id, resource, held_by, acquired_at, expires_at, metadata)
|
|
422
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
423
|
+
.run(lock.id, lock.resource, lock.heldBy, lock.acquiredAt.toISOString(), lock.expiresAt?.toISOString() ?? null, JSON.stringify(lock.metadata));
|
|
424
|
+
this.logEvent(EventType.LOCK_ACQUIRED, lock.heldBy, lock.resource);
|
|
425
|
+
return lock;
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
// Lock already held (UNIQUE constraint violation)
|
|
429
|
+
if (error.message.includes('UNIQUE constraint failed')) {
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
throw error;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
releaseLock(resource, agentId) {
|
|
436
|
+
const result = this.db
|
|
437
|
+
.prepare('DELETE FROM locks WHERE resource = ? AND held_by = ?')
|
|
438
|
+
.run(resource, agentId);
|
|
439
|
+
if (result.changes > 0) {
|
|
440
|
+
this.logEvent(EventType.LOCK_RELEASED, agentId, resource);
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
releaseAgentLocks(agentId) {
|
|
446
|
+
const result = this.db.prepare('DELETE FROM locks WHERE held_by = ?').run(agentId);
|
|
447
|
+
return result.changes;
|
|
448
|
+
}
|
|
449
|
+
checkLock(resource) {
|
|
450
|
+
this.cleanupExpiredLocks();
|
|
451
|
+
const row = this.db.prepare('SELECT * FROM locks WHERE resource = ?').get(resource);
|
|
452
|
+
if (!row) {
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
return {
|
|
456
|
+
id: row.id,
|
|
457
|
+
resource: row.resource,
|
|
458
|
+
heldBy: row.held_by,
|
|
459
|
+
acquiredAt: new Date(row.acquired_at),
|
|
460
|
+
expiresAt: row.expires_at ? new Date(row.expires_at) : null,
|
|
461
|
+
metadata: JSON.parse(row.metadata),
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
cleanupExpiredLocks() {
|
|
465
|
+
const now = new Date().toISOString();
|
|
466
|
+
this.db.prepare('DELETE FROM locks WHERE expires_at IS NOT NULL AND expires_at < ?').run(now);
|
|
467
|
+
}
|
|
468
|
+
// ==================== Event Operations ====================
|
|
469
|
+
logEvent(eventType, agentId, resourceId, details) {
|
|
470
|
+
const event = createEvent({ eventType, agentId, resourceId, details });
|
|
471
|
+
this.db
|
|
472
|
+
.prepare(`INSERT INTO events (id, event_type, agent_id, resource_id, details, timestamp)
|
|
473
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
474
|
+
.run(event.id, event.eventType, event.agentId, event.resourceId, JSON.stringify(event.details), event.timestamp.toISOString());
|
|
475
|
+
}
|
|
476
|
+
listEvents(filters) {
|
|
477
|
+
let query = 'SELECT * FROM events WHERE 1=1';
|
|
478
|
+
const params = [];
|
|
479
|
+
if (filters?.agentId) {
|
|
480
|
+
query += ' AND agent_id = ?';
|
|
481
|
+
params.push(filters.agentId);
|
|
482
|
+
}
|
|
483
|
+
if (filters?.eventType) {
|
|
484
|
+
query += ' AND event_type = ?';
|
|
485
|
+
params.push(filters.eventType);
|
|
486
|
+
}
|
|
487
|
+
query += ' ORDER BY timestamp DESC LIMIT ?';
|
|
488
|
+
params.push(filters?.limit ?? 100);
|
|
489
|
+
const rows = this.db.prepare(query).all(...params);
|
|
490
|
+
return rows.map((row) => ({
|
|
491
|
+
id: row.id,
|
|
492
|
+
eventType: row.event_type,
|
|
493
|
+
agentId: row.agent_id,
|
|
494
|
+
resourceId: row.resource_id,
|
|
495
|
+
details: JSON.parse(row.details),
|
|
496
|
+
timestamp: new Date(row.timestamp),
|
|
497
|
+
}));
|
|
498
|
+
}
|
|
499
|
+
// ==================== Stats ====================
|
|
500
|
+
getStats() {
|
|
501
|
+
const agents = this.db.prepare('SELECT COUNT(*) as count FROM agents').get().count;
|
|
502
|
+
const tasks = this.db.prepare('SELECT COUNT(*) as count FROM tasks').get().count;
|
|
503
|
+
const locks = this.db.prepare('SELECT COUNT(*) as count FROM locks').get().count;
|
|
504
|
+
const memory = this.db.prepare('SELECT COUNT(*) as count FROM memory').get().count;
|
|
505
|
+
return { agents, tasks, locks, memory };
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
// ==================== Global Instance ====================
|
|
509
|
+
let _db = null;
|
|
510
|
+
export function getDatabase() {
|
|
511
|
+
if (!_db) {
|
|
512
|
+
_db = new OrchestratorDatabase();
|
|
513
|
+
}
|
|
514
|
+
return _db;
|
|
515
|
+
}
|
|
516
|
+
export function closeDatabase() {
|
|
517
|
+
if (_db) {
|
|
518
|
+
_db.close();
|
|
519
|
+
_db = null;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Agent Orchestration Server
|
|
4
|
+
*
|
|
5
|
+
* A Model Context Protocol server that enables multiple AI agents to share
|
|
6
|
+
* memory, coordinate tasks, and collaborate effectively across IDEs and CLI tools.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Start the MCP server
|
|
10
|
+
*/
|
|
11
|
+
export declare function startServer(): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AA0BH;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBjD"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Agent Orchestration Server
|
|
4
|
+
*
|
|
5
|
+
* A Model Context Protocol server that enables multiple AI agents to share
|
|
6
|
+
* memory, coordinate tasks, and collaborate effectively across IDEs and CLI tools.
|
|
7
|
+
*/
|
|
8
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
10
|
+
import { getDatabase, closeDatabase } from './database.js';
|
|
11
|
+
import { registerAgentTools, registerMemoryTools, registerTaskTools, registerCoordinationTools, registerUtilityTools, } from './tools/index.js';
|
|
12
|
+
// Create server instance
|
|
13
|
+
const server = new McpServer({
|
|
14
|
+
name: 'agent-orchestration',
|
|
15
|
+
version: '0.5.0',
|
|
16
|
+
});
|
|
17
|
+
// Register all tools
|
|
18
|
+
registerAgentTools(server);
|
|
19
|
+
registerMemoryTools(server);
|
|
20
|
+
registerTaskTools(server);
|
|
21
|
+
registerCoordinationTools(server);
|
|
22
|
+
registerUtilityTools(server);
|
|
23
|
+
/**
|
|
24
|
+
* Start the MCP server
|
|
25
|
+
*/
|
|
26
|
+
export async function startServer() {
|
|
27
|
+
// Initialize database
|
|
28
|
+
const db = getDatabase();
|
|
29
|
+
console.error(`Agent Orchestration server started. Database: ${db.dbPath}`);
|
|
30
|
+
// Create stdio transport
|
|
31
|
+
const transport = new StdioServerTransport();
|
|
32
|
+
// Handle shutdown
|
|
33
|
+
process.on('SIGINT', () => {
|
|
34
|
+
console.error('Shutting down...');
|
|
35
|
+
closeDatabase();
|
|
36
|
+
process.exit(0);
|
|
37
|
+
});
|
|
38
|
+
process.on('SIGTERM', () => {
|
|
39
|
+
console.error('Shutting down...');
|
|
40
|
+
closeDatabase();
|
|
41
|
+
process.exit(0);
|
|
42
|
+
});
|
|
43
|
+
// Connect and run
|
|
44
|
+
await server.connect(transport);
|
|
45
|
+
}
|
|
46
|
+
// Auto-run when executed directly (node dist/index.js)
|
|
47
|
+
// Check if this file is the main module being run
|
|
48
|
+
const isMainModule = process.argv[1]?.endsWith('index.js') && !process.argv[1]?.includes('cli.js');
|
|
49
|
+
if (isMainModule) {
|
|
50
|
+
startServer().catch((error) => {
|
|
51
|
+
console.error('Fatal error:', error);
|
|
52
|
+
closeDatabase();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,yBAAyB;AACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAE7B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,sBAAsB;IACtB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5E,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,uDAAuD;AACvD,kDAAkD;AAClD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEnG,IAAI,YAAY,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|