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,132 @@
1
+ /**
2
+ * Type definitions for MCP Memory Orchestrator
3
+ */
4
+ export declare enum AgentRole {
5
+ MAIN = "main",
6
+ SUB = "sub"
7
+ }
8
+ export declare enum AgentStatus {
9
+ ACTIVE = "active",
10
+ IDLE = "idle",
11
+ BUSY = "busy",
12
+ OFFLINE = "offline"
13
+ }
14
+ export declare enum TaskStatus {
15
+ PENDING = "pending",
16
+ ASSIGNED = "assigned",
17
+ IN_PROGRESS = "in_progress",
18
+ COMPLETED = "completed",
19
+ FAILED = "failed",
20
+ CANCELLED = "cancelled"
21
+ }
22
+ export declare enum TaskPriority {
23
+ LOW = "low",
24
+ NORMAL = "normal",
25
+ HIGH = "high",
26
+ URGENT = "urgent"
27
+ }
28
+ export declare enum EventType {
29
+ AGENT_REGISTERED = "agent_registered",
30
+ AGENT_UNREGISTERED = "agent_unregistered",
31
+ AGENT_HEARTBEAT = "agent_heartbeat",
32
+ TASK_CREATED = "task_created",
33
+ TASK_ASSIGNED = "task_assigned",
34
+ TASK_CLAIMED = "task_claimed",
35
+ TASK_UPDATED = "task_updated",
36
+ TASK_COMPLETED = "task_completed",
37
+ MEMORY_SET = "memory_set",
38
+ MEMORY_DELETE = "memory_delete",
39
+ LOCK_ACQUIRED = "lock_acquired",
40
+ LOCK_RELEASED = "lock_released"
41
+ }
42
+ export interface Agent {
43
+ id: string;
44
+ name: string;
45
+ role: AgentRole;
46
+ status: AgentStatus;
47
+ capabilities: string[];
48
+ metadata: Record<string, unknown>;
49
+ registeredAt: Date;
50
+ lastHeartbeat: Date;
51
+ }
52
+ export interface Task {
53
+ id: string;
54
+ title: string;
55
+ description: string;
56
+ status: TaskStatus;
57
+ priority: TaskPriority;
58
+ createdBy: string | null;
59
+ assignedTo: string | null;
60
+ dependencies: string[];
61
+ metadata: Record<string, unknown>;
62
+ output: string | null;
63
+ createdAt: Date;
64
+ updatedAt: Date;
65
+ startedAt: Date | null;
66
+ completedAt: Date | null;
67
+ }
68
+ export interface MemoryEntry {
69
+ id: string;
70
+ key: string;
71
+ value: unknown;
72
+ namespace: string;
73
+ createdBy: string | null;
74
+ ttlSeconds: number | null;
75
+ createdAt: Date;
76
+ updatedAt: Date;
77
+ expiresAt: Date | null;
78
+ }
79
+ export interface Lock {
80
+ id: string;
81
+ resource: string;
82
+ heldBy: string;
83
+ acquiredAt: Date;
84
+ expiresAt: Date | null;
85
+ metadata: Record<string, unknown>;
86
+ }
87
+ export interface Event {
88
+ id: string;
89
+ eventType: EventType;
90
+ agentId: string | null;
91
+ resourceId: string | null;
92
+ details: Record<string, unknown>;
93
+ timestamp: Date;
94
+ }
95
+ export declare function createAgent(params: {
96
+ name: string;
97
+ role?: AgentRole;
98
+ capabilities?: string[];
99
+ status?: AgentStatus;
100
+ metadata?: Record<string, unknown>;
101
+ }): Agent;
102
+ export declare function createTask(params: {
103
+ title: string;
104
+ description?: string;
105
+ priority?: TaskPriority;
106
+ createdBy?: string | null;
107
+ assignedTo?: string | null;
108
+ dependencies?: string[];
109
+ metadata?: Record<string, unknown>;
110
+ status?: TaskStatus;
111
+ startedAt?: Date | null;
112
+ }): Task;
113
+ export declare function createMemoryEntry(params: {
114
+ key: string;
115
+ value: unknown;
116
+ namespace?: string;
117
+ createdBy?: string | null;
118
+ ttlSeconds?: number | null;
119
+ }): MemoryEntry;
120
+ export declare function createLock(params: {
121
+ resource: string;
122
+ heldBy: string;
123
+ timeoutSeconds?: number;
124
+ metadata?: Record<string, unknown>;
125
+ }): Lock;
126
+ export declare function createEvent(params: {
127
+ eventType: EventType;
128
+ agentId?: string | null;
129
+ resourceId?: string | null;
130
+ details?: Record<string, unknown>;
131
+ }): Event;
132
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/models.js ADDED
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Type definitions for MCP Memory Orchestrator
3
+ */
4
+ import { ulid } from 'ulid';
5
+ // ==================== Enums ====================
6
+ export var AgentRole;
7
+ (function (AgentRole) {
8
+ AgentRole["MAIN"] = "main";
9
+ AgentRole["SUB"] = "sub";
10
+ })(AgentRole || (AgentRole = {}));
11
+ export var AgentStatus;
12
+ (function (AgentStatus) {
13
+ AgentStatus["ACTIVE"] = "active";
14
+ AgentStatus["IDLE"] = "idle";
15
+ AgentStatus["BUSY"] = "busy";
16
+ AgentStatus["OFFLINE"] = "offline";
17
+ })(AgentStatus || (AgentStatus = {}));
18
+ export var TaskStatus;
19
+ (function (TaskStatus) {
20
+ TaskStatus["PENDING"] = "pending";
21
+ TaskStatus["ASSIGNED"] = "assigned";
22
+ TaskStatus["IN_PROGRESS"] = "in_progress";
23
+ TaskStatus["COMPLETED"] = "completed";
24
+ TaskStatus["FAILED"] = "failed";
25
+ TaskStatus["CANCELLED"] = "cancelled";
26
+ })(TaskStatus || (TaskStatus = {}));
27
+ export var TaskPriority;
28
+ (function (TaskPriority) {
29
+ TaskPriority["LOW"] = "low";
30
+ TaskPriority["NORMAL"] = "normal";
31
+ TaskPriority["HIGH"] = "high";
32
+ TaskPriority["URGENT"] = "urgent";
33
+ })(TaskPriority || (TaskPriority = {}));
34
+ export var EventType;
35
+ (function (EventType) {
36
+ EventType["AGENT_REGISTERED"] = "agent_registered";
37
+ EventType["AGENT_UNREGISTERED"] = "agent_unregistered";
38
+ EventType["AGENT_HEARTBEAT"] = "agent_heartbeat";
39
+ EventType["TASK_CREATED"] = "task_created";
40
+ EventType["TASK_ASSIGNED"] = "task_assigned";
41
+ EventType["TASK_CLAIMED"] = "task_claimed";
42
+ EventType["TASK_UPDATED"] = "task_updated";
43
+ EventType["TASK_COMPLETED"] = "task_completed";
44
+ EventType["MEMORY_SET"] = "memory_set";
45
+ EventType["MEMORY_DELETE"] = "memory_delete";
46
+ EventType["LOCK_ACQUIRED"] = "lock_acquired";
47
+ EventType["LOCK_RELEASED"] = "lock_released";
48
+ })(EventType || (EventType = {}));
49
+ // ==================== Factory Functions ====================
50
+ export function createAgent(params) {
51
+ const now = new Date();
52
+ return {
53
+ id: ulid(),
54
+ name: params.name,
55
+ role: params.role ?? AgentRole.SUB,
56
+ status: params.status ?? AgentStatus.IDLE,
57
+ capabilities: params.capabilities ?? [],
58
+ metadata: params.metadata ?? {},
59
+ registeredAt: now,
60
+ lastHeartbeat: now,
61
+ };
62
+ }
63
+ export function createTask(params) {
64
+ const now = new Date();
65
+ return {
66
+ id: ulid(),
67
+ title: params.title,
68
+ description: params.description ?? '',
69
+ status: params.status ?? TaskStatus.PENDING,
70
+ priority: params.priority ?? TaskPriority.NORMAL,
71
+ createdBy: params.createdBy ?? null,
72
+ assignedTo: params.assignedTo ?? null,
73
+ dependencies: params.dependencies ?? [],
74
+ metadata: params.metadata ?? {},
75
+ output: null,
76
+ createdAt: now,
77
+ updatedAt: now,
78
+ startedAt: params.startedAt ?? null,
79
+ completedAt: null,
80
+ };
81
+ }
82
+ export function createMemoryEntry(params) {
83
+ const now = new Date();
84
+ let expiresAt = null;
85
+ if (params.ttlSeconds) {
86
+ expiresAt = new Date(now.getTime() + params.ttlSeconds * 1000);
87
+ }
88
+ return {
89
+ id: ulid(),
90
+ key: params.key,
91
+ value: params.value,
92
+ namespace: params.namespace ?? 'default',
93
+ createdBy: params.createdBy ?? null,
94
+ ttlSeconds: params.ttlSeconds ?? null,
95
+ createdAt: now,
96
+ updatedAt: now,
97
+ expiresAt,
98
+ };
99
+ }
100
+ export function createLock(params) {
101
+ const now = new Date();
102
+ const expiresAt = params.timeoutSeconds
103
+ ? new Date(now.getTime() + params.timeoutSeconds * 1000)
104
+ : null;
105
+ return {
106
+ id: ulid(),
107
+ resource: params.resource,
108
+ heldBy: params.heldBy,
109
+ acquiredAt: now,
110
+ expiresAt,
111
+ metadata: params.metadata ?? {},
112
+ };
113
+ }
114
+ export function createEvent(params) {
115
+ return {
116
+ id: ulid(),
117
+ eventType: params.eventType,
118
+ agentId: params.agentId ?? null,
119
+ resourceId: params.resourceId ?? null,
120
+ details: params.details ?? {},
121
+ timestamp: new Date(),
122
+ };
123
+ }
124
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Agent management tools
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function getCurrentAgentId(): string | null;
6
+ export declare function getCurrentAgentName(): string | null;
7
+ export declare function setCurrentAgent(id: string, name: string): void;
8
+ export declare function clearCurrentAgent(): void;
9
+ export declare function registerAgentTools(server: McpServer): void;
10
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/tools/agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiN1D"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Agent management tools
3
+ */
4
+ import { z } from 'zod';
5
+ import { getDatabase } from '../database.js';
6
+ import { AgentRole, AgentStatus } from '../models.js';
7
+ // Current agent state (per server instance)
8
+ let currentAgentId = null;
9
+ let currentAgentName = null;
10
+ export function getCurrentAgentId() {
11
+ return currentAgentId;
12
+ }
13
+ export function getCurrentAgentName() {
14
+ return currentAgentName;
15
+ }
16
+ export function setCurrentAgent(id, name) {
17
+ currentAgentId = id;
18
+ currentAgentName = name;
19
+ }
20
+ export function clearCurrentAgent() {
21
+ currentAgentId = null;
22
+ currentAgentName = null;
23
+ }
24
+ export function registerAgentTools(server) {
25
+ // agent_register
26
+ server.tool('agent_register', 'Register this agent with the orchestration system. Call this at the start of your session.', {
27
+ name: z.string().describe('A unique name for this agent'),
28
+ role: z.enum(['main', 'sub']).optional().default('sub').describe('Agent role'),
29
+ capabilities: z
30
+ .array(z.string())
31
+ .optional()
32
+ .default(['code'])
33
+ .describe('List of capabilities'),
34
+ }, async ({ name, role, capabilities }) => {
35
+ const db = getDatabase();
36
+ // Check if agent with this name already exists
37
+ const existing = db.getAgentByName(name);
38
+ if (existing) {
39
+ // Reconnect to existing agent
40
+ setCurrentAgent(existing.id, existing.name);
41
+ db.updateAgentHeartbeat(existing.id, AgentStatus.ACTIVE);
42
+ return {
43
+ content: [
44
+ {
45
+ type: 'text',
46
+ text: `Reconnected as '${existing.name}' (${existing.id})`,
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ const agent = db.createAgent({
52
+ name,
53
+ role: role === 'main' ? AgentRole.MAIN : AgentRole.SUB,
54
+ capabilities,
55
+ status: AgentStatus.ACTIVE,
56
+ });
57
+ setCurrentAgent(agent.id, agent.name);
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: `Registered as '${agent.name}' (${agent.id})`,
63
+ },
64
+ ],
65
+ };
66
+ });
67
+ // agent_heartbeat
68
+ server.tool('agent_heartbeat', 'Send a heartbeat to indicate agent is still active. Call periodically during long operations.', {
69
+ status: z
70
+ .enum(['active', 'idle', 'busy'])
71
+ .optional()
72
+ .describe('Current status (active, idle, busy)'),
73
+ }, async ({ status }) => {
74
+ if (!currentAgentId) {
75
+ return {
76
+ content: [{ type: 'text', text: 'Error: Not registered. Call agent_register first.' }],
77
+ };
78
+ }
79
+ const agentStatus = status
80
+ ? status
81
+ : undefined;
82
+ const updated = getDatabase().updateAgentHeartbeat(currentAgentId, agentStatus);
83
+ if (updated) {
84
+ return {
85
+ content: [{ type: 'text', text: `Heartbeat recorded${status ? ` (${status})` : ''}.` }],
86
+ };
87
+ }
88
+ return {
89
+ content: [{ type: 'text', text: 'Error: Agent not found.' }],
90
+ };
91
+ });
92
+ // agent_list
93
+ server.tool('agent_list', 'List all registered agents in the orchestration system.', {
94
+ status: z
95
+ .enum(['active', 'idle', 'busy', 'offline'])
96
+ .optional()
97
+ .describe('Filter by status'),
98
+ role: z.enum(['main', 'sub']).optional().describe('Filter by role'),
99
+ }, async ({ status, role }) => {
100
+ const db = getDatabase();
101
+ // Cleanup stale agents first
102
+ db.cleanupStaleAgents();
103
+ const agents = db.listAgents({
104
+ status: status,
105
+ role: role === 'main' ? AgentRole.MAIN : role === 'sub' ? AgentRole.SUB : undefined,
106
+ });
107
+ if (agents.length === 0) {
108
+ return {
109
+ content: [{ type: 'text', text: 'No agents registered.' }],
110
+ };
111
+ }
112
+ const lines = ['# Registered Agents\n'];
113
+ for (const agent of agents) {
114
+ const isMe = agent.id === currentAgentId ? ' (you)' : '';
115
+ const statusEmoji = {
116
+ active: '🟢',
117
+ idle: '🟡',
118
+ busy: '🔵',
119
+ offline: '⚫',
120
+ }[agent.status];
121
+ lines.push(`${statusEmoji} **${agent.name}**${isMe} - ${agent.role}`);
122
+ lines.push(` ID: \`${agent.id}\``);
123
+ lines.push(` Capabilities: ${agent.capabilities.join(', ') || 'none'}`);
124
+ lines.push('');
125
+ }
126
+ return {
127
+ content: [{ type: 'text', text: lines.join('\n') }],
128
+ };
129
+ });
130
+ // agent_unregister
131
+ server.tool('agent_unregister', 'Unregister this agent and release all held locks. Call at the end of your session.', {}, async () => {
132
+ if (!currentAgentId) {
133
+ return {
134
+ content: [{ type: 'text', text: 'Not registered.' }],
135
+ };
136
+ }
137
+ const db = getDatabase();
138
+ const deleted = db.deleteAgent(currentAgentId);
139
+ if (deleted) {
140
+ const name = currentAgentName;
141
+ clearCurrentAgent();
142
+ return {
143
+ content: [{ type: 'text', text: `Agent '${name}' unregistered. All locks released.` }],
144
+ };
145
+ }
146
+ return {
147
+ content: [{ type: 'text', text: 'Error: Could not unregister agent.' }],
148
+ };
149
+ });
150
+ // agent_whoami
151
+ server.tool('agent_whoami', 'Get information about your current agent identity.', {}, async () => {
152
+ if (!currentAgentId) {
153
+ return {
154
+ content: [
155
+ {
156
+ type: 'text',
157
+ text: 'Not registered. Use `bootstrap` or `agent_register` to register.',
158
+ },
159
+ ],
160
+ };
161
+ }
162
+ const agent = getDatabase().getAgent(currentAgentId);
163
+ if (!agent) {
164
+ clearCurrentAgent();
165
+ return {
166
+ content: [{ type: 'text', text: 'Agent not found in database. Registration expired.' }],
167
+ };
168
+ }
169
+ const lines = [
170
+ '# Your Agent Info',
171
+ '',
172
+ `**Name**: ${agent.name}`,
173
+ `**ID**: \`${agent.id}\``,
174
+ `**Role**: ${agent.role}`,
175
+ `**Status**: ${agent.status}`,
176
+ `**Capabilities**: ${agent.capabilities.join(', ') || 'none'}`,
177
+ `**Registered**: ${agent.registeredAt.toISOString()}`,
178
+ `**Last Heartbeat**: ${agent.lastHeartbeat.toISOString()}`,
179
+ ];
180
+ return {
181
+ content: [{ type: 'text', text: lines.join('\n') }],
182
+ };
183
+ });
184
+ }
185
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/tools/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Coordination tools (locks and status)
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerCoordinationTools(server: McpServer): void;
6
+ //# sourceMappingURL=coordination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../../src/tools/coordination.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6IjE"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Coordination tools (locks and status)
3
+ */
4
+ import { z } from 'zod';
5
+ import { getDatabase } from '../database.js';
6
+ import { TaskStatus } from '../models.js';
7
+ import { getCurrentAgentId } from './agent.js';
8
+ export function registerCoordinationTools(server) {
9
+ // lock_acquire
10
+ server.tool('lock_acquire', 'Acquire a lock on a resource to prevent concurrent access.', {
11
+ resource: z.string().describe("The resource to lock (file path, 'namespace:key', etc.)"),
12
+ timeout_seconds: z
13
+ .number()
14
+ .optional()
15
+ .default(300)
16
+ .describe('Lock timeout. Auto-releases after this time.'),
17
+ reason: z.string().optional().describe('Why you need this lock'),
18
+ }, async ({ resource, timeout_seconds, reason }) => {
19
+ const agentId = getCurrentAgentId();
20
+ if (!agentId) {
21
+ return {
22
+ content: [{ type: 'text', text: 'Error: Not registered.' }],
23
+ };
24
+ }
25
+ const db = getDatabase();
26
+ // Check if already locked
27
+ const existing = db.checkLock(resource);
28
+ if (existing) {
29
+ if (existing.heldBy === agentId) {
30
+ return {
31
+ content: [{ type: 'text', text: 'You already hold this lock.' }],
32
+ };
33
+ }
34
+ return {
35
+ content: [{ type: 'text', text: `Lock denied: held by ${existing.heldBy}` }],
36
+ };
37
+ }
38
+ const lock = db.acquireLock({
39
+ resource,
40
+ heldBy: agentId,
41
+ timeoutSeconds: timeout_seconds,
42
+ metadata: { reason: reason ?? '' },
43
+ });
44
+ if (lock) {
45
+ return {
46
+ content: [
47
+ {
48
+ type: 'text',
49
+ text: `Lock acquired on '${resource}' (expires in ${timeout_seconds}s)`,
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ return {
55
+ content: [{ type: 'text', text: 'Failed to acquire lock.' }],
56
+ };
57
+ });
58
+ // lock_release
59
+ server.tool('lock_release', 'Release a lock you are holding.', {
60
+ resource: z.string().describe('The resource to unlock'),
61
+ }, async ({ resource }) => {
62
+ const agentId = getCurrentAgentId();
63
+ if (!agentId) {
64
+ return {
65
+ content: [{ type: 'text', text: 'Error: Not registered.' }],
66
+ };
67
+ }
68
+ const released = getDatabase().releaseLock(resource, agentId);
69
+ if (released) {
70
+ return {
71
+ content: [{ type: 'text', text: 'Lock released.' }],
72
+ };
73
+ }
74
+ return {
75
+ content: [{ type: 'text', text: 'Could not release lock. You may not hold it.' }],
76
+ };
77
+ });
78
+ // lock_check
79
+ server.tool('lock_check', 'Check if a resource is currently locked.', {
80
+ resource: z.string().describe('The resource to check'),
81
+ }, async ({ resource }) => {
82
+ const agentId = getCurrentAgentId();
83
+ const lock = getDatabase().checkLock(resource);
84
+ if (lock) {
85
+ const isYou = lock.heldBy === agentId ? ' (you)' : '';
86
+ return {
87
+ content: [{ type: 'text', text: `Locked by ${lock.heldBy}${isYou}` }],
88
+ };
89
+ }
90
+ return {
91
+ content: [{ type: 'text', text: 'Not locked.' }],
92
+ };
93
+ });
94
+ // coordination_status
95
+ server.tool('coordination_status', 'Get overall coordination status: active agents, pending tasks, held locks.', {}, async () => {
96
+ const db = getDatabase();
97
+ const agents = db.listAgents();
98
+ const active = agents.filter((a) => ['active', 'busy'].includes(a.status));
99
+ const pending = db.listTasks({ status: TaskStatus.PENDING });
100
+ const inProgress = db.listTasks({ status: TaskStatus.IN_PROGRESS });
101
+ const stats = db.getStats();
102
+ const lines = [
103
+ '# Coordination Status\n',
104
+ `**Agents**: ${active.length} active / ${agents.length} total`,
105
+ `**Tasks**: ${pending.length} pending, ${inProgress.length} in progress`,
106
+ `**Locks**: ${stats.locks} active`,
107
+ `**Memory**: ${stats.memory} entries`,
108
+ ];
109
+ return {
110
+ content: [{ type: 'text', text: lines.join('\n') }],
111
+ };
112
+ });
113
+ }
114
+ //# sourceMappingURL=coordination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.js","sourceRoot":"","sources":["../../src/tools/coordination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool registration index
3
+ */
4
+ export { registerAgentTools, getCurrentAgentId, getCurrentAgentName, setCurrentAgent, clearCurrentAgent } from './agent.js';
5
+ export { registerMemoryTools } from './memory.js';
6
+ export { registerTaskTools } from './task.js';
7
+ export { registerCoordinationTools } from './coordination.js';
8
+ export { registerUtilityTools } from './utility.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool registration index
3
+ */
4
+ export { registerAgentTools, getCurrentAgentId, getCurrentAgentName, setCurrentAgent, clearCurrentAgent } from './agent.js';
5
+ export { registerMemoryTools } from './memory.js';
6
+ export { registerTaskTools } from './task.js';
7
+ export { registerCoordinationTools } from './coordination.js';
8
+ export { registerUtilityTools } from './utility.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shared memory tools
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerMemoryTools(server: McpServer): void;
6
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4I3D"}