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.
Files changed (63) hide show
  1. package/.cursor/rules/orchestrator-auto.mdc +107 -0
  2. package/.cursor/rules/orchestrator-main.mdc +86 -0
  3. package/.cursor/rules/orchestrator-sub.mdc +114 -0
  4. package/LICENSE +21 -0
  5. package/README.md +329 -0
  6. package/activeContext.md +37 -0
  7. package/dist/bin/cli.d.ts +11 -0
  8. package/dist/bin/cli.d.ts.map +1 -0
  9. package/dist/bin/cli.js +410 -0
  10. package/dist/bin/cli.js.map +1 -0
  11. package/dist/database.d.ts +91 -0
  12. package/dist/database.d.ts.map +1 -0
  13. package/dist/database.js +522 -0
  14. package/dist/database.js.map +1 -0
  15. package/dist/index.d.ts +12 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +56 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/models.d.ts +132 -0
  20. package/dist/models.d.ts.map +1 -0
  21. package/dist/models.js +124 -0
  22. package/dist/models.js.map +1 -0
  23. package/dist/tools/agent.d.ts +10 -0
  24. package/dist/tools/agent.d.ts.map +1 -0
  25. package/dist/tools/agent.js +185 -0
  26. package/dist/tools/agent.js.map +1 -0
  27. package/dist/tools/coordination.d.ts +6 -0
  28. package/dist/tools/coordination.d.ts.map +1 -0
  29. package/dist/tools/coordination.js +114 -0
  30. package/dist/tools/coordination.js.map +1 -0
  31. package/dist/tools/index.d.ts +9 -0
  32. package/dist/tools/index.d.ts.map +1 -0
  33. package/dist/tools/index.js +9 -0
  34. package/dist/tools/index.js.map +1 -0
  35. package/dist/tools/memory.d.ts +6 -0
  36. package/dist/tools/memory.d.ts.map +1 -0
  37. package/dist/tools/memory.js +108 -0
  38. package/dist/tools/memory.js.map +1 -0
  39. package/dist/tools/task.d.ts +6 -0
  40. package/dist/tools/task.d.ts.map +1 -0
  41. package/dist/tools/task.js +267 -0
  42. package/dist/tools/task.js.map +1 -0
  43. package/dist/tools/utility.d.ts +6 -0
  44. package/dist/tools/utility.d.ts.map +1 -0
  45. package/dist/tools/utility.js +162 -0
  46. package/dist/tools/utility.js.map +1 -0
  47. package/dist/utils/contextSync.d.ts +12 -0
  48. package/dist/utils/contextSync.d.ts.map +1 -0
  49. package/dist/utils/contextSync.js +124 -0
  50. package/dist/utils/contextSync.js.map +1 -0
  51. package/package.json +54 -0
  52. package/src/bin/cli.ts +430 -0
  53. package/src/database.ts +764 -0
  54. package/src/index.ts +71 -0
  55. package/src/models.ts +226 -0
  56. package/src/tools/agent.ts +241 -0
  57. package/src/tools/coordination.ts +152 -0
  58. package/src/tools/index.ts +9 -0
  59. package/src/tools/memory.ts +150 -0
  60. package/src/tools/task.ts +334 -0
  61. package/src/tools/utility.ts +202 -0
  62. package/src/utils/contextSync.ts +144 -0
  63. package/tsconfig.json +20 -0
@@ -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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"}
@@ -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"}