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,108 @@
1
+ /**
2
+ * Shared memory tools
3
+ */
4
+ import { z } from 'zod';
5
+ import { getDatabase } from '../database.js';
6
+ import { getCurrentAgentId } from './agent.js';
7
+ export function registerMemoryTools(server) {
8
+ // memory_set
9
+ server.tool('memory_set', 'Store a value in shared memory. Use namespaces to organize: context, decisions, findings, blockers.', {
10
+ key: z.string().describe('The key to store the value under'),
11
+ value: z.string().describe('The value to store (will be stored as-is)'),
12
+ namespace: z
13
+ .string()
14
+ .optional()
15
+ .default('default')
16
+ .describe('Namespace for organization (context, decisions, findings, blockers)'),
17
+ ttl_seconds: z
18
+ .number()
19
+ .optional()
20
+ .describe('Time-to-live in seconds. Entry auto-deletes after this time.'),
21
+ }, async ({ key, value, namespace, ttl_seconds }) => {
22
+ const agentId = getCurrentAgentId();
23
+ const entry = getDatabase().setMemory({
24
+ key,
25
+ value,
26
+ namespace,
27
+ createdBy: agentId,
28
+ ttlSeconds: ttl_seconds ?? null,
29
+ });
30
+ const ttlInfo = entry.ttlSeconds ? ` (expires in ${entry.ttlSeconds}s)` : '';
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text',
35
+ text: `Stored '${key}' in namespace '${namespace}'${ttlInfo}`,
36
+ },
37
+ ],
38
+ };
39
+ });
40
+ // memory_get
41
+ server.tool('memory_get', 'Retrieve a value from shared memory.', {
42
+ key: z.string().describe('The key to retrieve'),
43
+ namespace: z.string().optional().default('default').describe('The namespace to search in'),
44
+ }, async ({ key, namespace }) => {
45
+ const entry = getDatabase().getMemory(key, namespace);
46
+ if (!entry) {
47
+ return {
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: `Key '${key}' not found in namespace '${namespace}'.`,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ const valueStr = typeof entry.value === 'string' ? entry.value : JSON.stringify(entry.value, null, 2);
57
+ const lines = [
58
+ `**${namespace}:${key}**`,
59
+ '',
60
+ valueStr,
61
+ '',
62
+ `_Updated: ${entry.updatedAt.toISOString()}_`,
63
+ ];
64
+ if (entry.expiresAt) {
65
+ lines.push(`_Expires: ${entry.expiresAt.toISOString()}_`);
66
+ }
67
+ return {
68
+ content: [{ type: 'text', text: lines.join('\n') }],
69
+ };
70
+ });
71
+ // memory_list
72
+ server.tool('memory_list', 'List all keys in a namespace.', {
73
+ namespace: z.string().optional().default('default').describe('The namespace to list'),
74
+ }, async ({ namespace }) => {
75
+ const entries = getDatabase().listMemory(namespace);
76
+ if (entries.length === 0) {
77
+ return {
78
+ content: [{ type: 'text', text: `No entries in namespace '${namespace}'.` }],
79
+ };
80
+ }
81
+ const lines = [`# Memory: ${namespace}\n`];
82
+ for (const entry of entries) {
83
+ const valuePreview = typeof entry.value === 'string'
84
+ ? entry.value.slice(0, 100) + (entry.value.length > 100 ? '...' : '')
85
+ : JSON.stringify(entry.value).slice(0, 100);
86
+ lines.push(`- **${entry.key}**: ${valuePreview}`);
87
+ }
88
+ return {
89
+ content: [{ type: 'text', text: lines.join('\n') }],
90
+ };
91
+ });
92
+ // memory_delete
93
+ server.tool('memory_delete', 'Delete a value from shared memory.', {
94
+ key: z.string().describe('The key to delete'),
95
+ namespace: z.string().optional().default('default').describe('The namespace'),
96
+ }, async ({ key, namespace }) => {
97
+ const deleted = getDatabase().deleteMemory(key, namespace);
98
+ if (deleted) {
99
+ return {
100
+ content: [{ type: 'text', text: `Deleted '${key}' from namespace '${namespace}'.` }],
101
+ };
102
+ }
103
+ return {
104
+ content: [{ type: 'text', text: `Key '${key}' not found in namespace '${namespace}'.` }],
105
+ };
106
+ });
107
+ }
108
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Task management tools
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerTaskTools(server: McpServer): void;
6
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmUzD"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Task management tools
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 registerTaskTools(server) {
9
+ // task_create
10
+ server.tool('task_create', 'Create a new task in the task queue.', {
11
+ title: z.string().describe('Short title for the task'),
12
+ description: z.string().optional().default('').describe('Detailed description'),
13
+ priority: z
14
+ .enum(['low', 'normal', 'high', 'urgent'])
15
+ .optional()
16
+ .default('normal')
17
+ .describe('Priority level'),
18
+ assigned_to: z.string().optional().describe('Agent ID to assign to'),
19
+ dependencies: z
20
+ .array(z.string())
21
+ .optional()
22
+ .default([])
23
+ .describe('List of task IDs that must complete first'),
24
+ }, async ({ title, description, priority, assigned_to, dependencies }) => {
25
+ const agentId = getCurrentAgentId();
26
+ const task = getDatabase().createTask({
27
+ title,
28
+ description,
29
+ priority: priority,
30
+ createdBy: agentId,
31
+ assignedTo: assigned_to ?? null,
32
+ dependencies,
33
+ });
34
+ return {
35
+ content: [
36
+ {
37
+ type: 'text',
38
+ text: `Task created: '${task.title}' (\`${task.id}\`)`,
39
+ },
40
+ ],
41
+ };
42
+ });
43
+ // task_claim
44
+ server.tool('task_claim', 'Claim a task to work on it. Sets status to in_progress.', {
45
+ task_id: z
46
+ .string()
47
+ .optional()
48
+ .describe('Task ID to claim. If omitted, claims the next available task.'),
49
+ }, async ({ task_id }) => {
50
+ const agentId = getCurrentAgentId();
51
+ if (!agentId) {
52
+ return {
53
+ content: [{ type: 'text', text: 'Error: Not registered.' }],
54
+ };
55
+ }
56
+ const db = getDatabase();
57
+ let task;
58
+ if (task_id) {
59
+ task = db.getTask(task_id);
60
+ if (!task) {
61
+ return {
62
+ content: [{ type: 'text', text: `Task ${task_id} not found.` }],
63
+ };
64
+ }
65
+ }
66
+ else {
67
+ task = db.getNextAvailableTask(agentId);
68
+ if (!task) {
69
+ return {
70
+ content: [{ type: 'text', text: 'No available tasks to claim.' }],
71
+ };
72
+ }
73
+ }
74
+ // Check dependencies
75
+ if (!db.checkDependenciesMet(task.id)) {
76
+ return {
77
+ content: [{ type: 'text', text: `Cannot claim: dependencies not met.` }],
78
+ };
79
+ }
80
+ // Claim it
81
+ const updated = db.updateTask(task.id, {
82
+ status: TaskStatus.IN_PROGRESS,
83
+ assignedTo: agentId,
84
+ });
85
+ if (updated) {
86
+ return {
87
+ content: [
88
+ {
89
+ type: 'text',
90
+ text: `Claimed task: '${updated.title}' (\`${updated.id}\`)`,
91
+ },
92
+ ],
93
+ };
94
+ }
95
+ return {
96
+ content: [{ type: 'text', text: 'Failed to claim task.' }],
97
+ };
98
+ });
99
+ // task_update
100
+ server.tool('task_update', 'Update a task status or progress.', {
101
+ task_id: z.string().describe('The task ID to update'),
102
+ status: z
103
+ .enum(['pending', 'assigned', 'in_progress', 'completed', 'failed', 'cancelled'])
104
+ .optional()
105
+ .describe('New status'),
106
+ progress: z.number().min(0).max(100).optional().describe('Progress percentage (0-100)'),
107
+ output: z.string().optional().describe('Output or notes'),
108
+ }, async ({ task_id, status, progress, output }) => {
109
+ const db = getDatabase();
110
+ const task = db.getTask(task_id);
111
+ if (!task) {
112
+ return {
113
+ content: [{ type: 'text', text: `Task ${task_id} not found.` }],
114
+ };
115
+ }
116
+ const metadata = progress !== undefined ? { progress } : undefined;
117
+ const updated = db.updateTask(task_id, {
118
+ status: status,
119
+ output,
120
+ metadata,
121
+ });
122
+ if (updated) {
123
+ const statusInfo = status ? ` → ${status}` : '';
124
+ const progressInfo = progress !== undefined ? ` (${progress}%)` : '';
125
+ return {
126
+ content: [
127
+ {
128
+ type: 'text',
129
+ text: `Updated task '${updated.title}'${statusInfo}${progressInfo}`,
130
+ },
131
+ ],
132
+ };
133
+ }
134
+ return {
135
+ content: [{ type: 'text', text: 'Failed to update task.' }],
136
+ };
137
+ });
138
+ // task_complete
139
+ server.tool('task_complete', 'Mark a task as completed with optional output.', {
140
+ task_id: z.string().describe('The task ID to complete'),
141
+ output: z.string().optional().describe('Summary of what was done'),
142
+ }, async ({ task_id, output }) => {
143
+ const db = getDatabase();
144
+ const task = db.getTask(task_id);
145
+ if (!task) {
146
+ return {
147
+ content: [{ type: 'text', text: `Task ${task_id} not found.` }],
148
+ };
149
+ }
150
+ const updated = db.updateTask(task_id, {
151
+ status: TaskStatus.COMPLETED,
152
+ output,
153
+ });
154
+ if (updated) {
155
+ return {
156
+ content: [
157
+ {
158
+ type: 'text',
159
+ text: `✅ Task completed: '${updated.title}'`,
160
+ },
161
+ ],
162
+ };
163
+ }
164
+ return {
165
+ content: [{ type: 'text', text: 'Failed to complete task.' }],
166
+ };
167
+ });
168
+ // task_list
169
+ server.tool('task_list', 'List tasks with optional filters.', {
170
+ status: z
171
+ .enum(['pending', 'assigned', 'in_progress', 'completed', 'failed', 'cancelled'])
172
+ .optional()
173
+ .describe('Filter by status'),
174
+ assigned_to: z.string().optional().describe('Filter by assigned agent ID'),
175
+ mine: z.boolean().optional().describe('Show only my tasks'),
176
+ }, async ({ status, assigned_to, mine }) => {
177
+ const agentId = getCurrentAgentId();
178
+ const db = getDatabase();
179
+ let assignee = assigned_to;
180
+ if (mine && agentId) {
181
+ assignee = agentId;
182
+ }
183
+ const tasks = db.listTasks({
184
+ status: status,
185
+ assignedTo: assignee,
186
+ });
187
+ if (tasks.length === 0) {
188
+ return {
189
+ content: [{ type: 'text', text: 'No tasks found.' }],
190
+ };
191
+ }
192
+ const lines = ['# Tasks\n'];
193
+ for (const task of tasks) {
194
+ const emoji = {
195
+ pending: '⏳',
196
+ assigned: '📋',
197
+ in_progress: '🔄',
198
+ completed: '✅',
199
+ failed: '❌',
200
+ cancelled: '🚫',
201
+ }[task.status];
202
+ lines.push(`${emoji} **${task.title}** (\`${task.id.slice(0, 8)}...\`)`);
203
+ lines.push(` Status: ${task.status} | Assigned: ${task.assignedTo || 'none'}`);
204
+ }
205
+ return {
206
+ content: [{ type: 'text', text: lines.join('\n') }],
207
+ };
208
+ });
209
+ // is_my_turn
210
+ server.tool('is_my_turn', "Check if it's your turn to work on a task or if work is available.", {
211
+ task_id: z
212
+ .string()
213
+ .optional()
214
+ .describe('Specific task ID, or leave empty to check for any available task'),
215
+ }, async ({ task_id }) => {
216
+ const agentId = getCurrentAgentId();
217
+ if (!agentId) {
218
+ return {
219
+ content: [{ type: 'text', text: 'Error: Not registered.' }],
220
+ };
221
+ }
222
+ const db = getDatabase();
223
+ if (task_id) {
224
+ const task = db.getTask(task_id);
225
+ if (!task) {
226
+ return {
227
+ content: [{ type: 'text', text: `Task ${task_id} not found.` }],
228
+ };
229
+ }
230
+ if (task.assignedTo !== agentId) {
231
+ return {
232
+ content: [
233
+ {
234
+ type: 'text',
235
+ text: `No - assigned to ${task.assignedTo || 'no one'}.`,
236
+ },
237
+ ],
238
+ };
239
+ }
240
+ if (!db.checkDependenciesMet(task_id)) {
241
+ return {
242
+ content: [{ type: 'text', text: 'No - waiting for dependencies.' }],
243
+ };
244
+ }
245
+ if (task.status === TaskStatus.COMPLETED) {
246
+ return {
247
+ content: [{ type: 'text', text: 'No - already completed.' }],
248
+ };
249
+ }
250
+ return {
251
+ content: [{ type: 'text', text: 'Yes - task is ready for you. Use task_claim to start.' }],
252
+ };
253
+ }
254
+ else {
255
+ const available = db.getNextAvailableTask(agentId);
256
+ if (available) {
257
+ return {
258
+ content: [{ type: 'text', text: `Yes - '${available.title}' is available.` }],
259
+ };
260
+ }
261
+ return {
262
+ content: [{ type: 'text', text: 'No - no tasks available.' }],
263
+ };
264
+ }
265
+ });
266
+ }
267
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAgB,UAAU,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,cAAc;IACd,MAAM,CAAC,IAAI,CACT,aAAa,EACb,sCAAsC,EACtC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC/E,QAAQ,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;aACzC,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CAAC,gBAAgB,CAAC;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpE,YAAY,EAAE,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,2CAA2C,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE;QACpE,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QAEpC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC;YACpC,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,QAAwB;YAClC,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,WAAW,IAAI,IAAI;YAC/B,YAAY;SACb,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,kBAAkB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,KAAK;iBACvD;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,yDAAyD,EACzD;QACE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+DAA+D,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC;QAET,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;iBAClE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qCAAqC,EAAE,CAAC;aACzE,CAAC;QACJ,CAAC;QAED,WAAW;QACX,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE;YACrC,MAAM,EAAE,UAAU,CAAC,WAAW;YAC9B,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kBAAkB,OAAO,CAAC,KAAK,QAAQ,OAAO,CAAC,EAAE,KAAK;qBAC7D;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;SAC3D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,cAAc;IACd,MAAM,CAAC,IAAI,CACT,aAAa,EACb,mCAAmC,EACnC;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACrD,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;aAChF,QAAQ,EAAE;aACV,QAAQ,CAAC,YAAY,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC1D,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnE,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,MAAgC;YACxC,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB,OAAO,CAAC,KAAK,IAAI,UAAU,GAAG,YAAY,EAAE;qBACpE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,eAAe,EACf,gDAAgD,EAChD;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACnE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,UAAU,CAAC,SAAS;YAC5B,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,sBAAsB,OAAO,CAAC,KAAK,GAAG;qBAC7C;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,YAAY;IACZ,MAAM,CAAC,IAAI,CACT,WAAW,EACX,mCAAmC,EACnC;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;aAChF,QAAQ,EAAE;aACV,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC1E,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzB,IAAI,QAAQ,GAAG,WAAW,CAAC;QAC3B,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACpB,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC;YACzB,MAAM,EAAE,MAAgC;YACxC,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;aACrD,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,GAAG;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEf,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,gBAAgB,IAAI,CAAC,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,oEAAoE,EACpE;QACE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kEAAkE,CAAC;KAChF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;iBAChE,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAChC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,oBAAoB,IAAI,CAAC,UAAU,IAAI,QAAQ,GAAG;yBACzD;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC;iBACpE,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;iBAC7D,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uDAAuD,EAAE,CAAC;aAC3F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,SAAS,CAAC,KAAK,iBAAiB,EAAE,CAAC;iBAC9E,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Utility tools (bootstrap, claim_todo)
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerUtilityTools(server: McpServer): void;
6
+ //# sourceMappingURL=utility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2L5D"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Utility tools (bootstrap, claim_todo)
3
+ */
4
+ import { z } from 'zod';
5
+ import { getDatabase } from '../database.js';
6
+ import { AgentRole, AgentStatus, TaskStatus } from '../models.js';
7
+ import { setCurrentAgent, } from './agent.js';
8
+ import { syncToActiveContext } from '../utils/contextSync.js';
9
+ export function registerUtilityTools(server) {
10
+ // bootstrap
11
+ server.tool('bootstrap', 'Initialize agent session: register (if needed), get current focus, pending tasks, and recent decisions. Call this once at the start of your session.', {
12
+ name: z
13
+ .string()
14
+ .optional()
15
+ .describe('Agent name. If not provided, uses env MCP_ORCH_AGENT_NAME or generates one.'),
16
+ role: z
17
+ .enum(['main', 'sub'])
18
+ .optional()
19
+ .default('sub')
20
+ .describe("Agent role. Defaults to env MCP_ORCH_AGENT_ROLE or 'sub'."),
21
+ }, async ({ name, role }) => {
22
+ const db = getDatabase();
23
+ // Get or generate agent name
24
+ let agentName = name ?? process.env.MCP_ORCH_AGENT_NAME;
25
+ if (!agentName) {
26
+ agentName = `agent-${Date.now()}`;
27
+ }
28
+ const agentRole = role === 'main'
29
+ ? AgentRole.MAIN
30
+ : role === 'sub'
31
+ ? AgentRole.SUB
32
+ : process.env.MCP_ORCH_AGENT_ROLE === 'main'
33
+ ? AgentRole.MAIN
34
+ : AgentRole.SUB;
35
+ const capabilities = (process.env.MCP_ORCH_CAPABILITIES ?? 'code').split(',');
36
+ // Check if agent already exists
37
+ let agent = db.getAgentByName(agentName);
38
+ if (agent) {
39
+ // Reconnect
40
+ setCurrentAgent(agent.id, agent.name);
41
+ db.updateAgentHeartbeat(agent.id, AgentStatus.ACTIVE);
42
+ }
43
+ else {
44
+ // Register new
45
+ agent = db.createAgent({
46
+ name: agentName,
47
+ role: agentRole,
48
+ capabilities,
49
+ status: AgentStatus.ACTIVE,
50
+ });
51
+ setCurrentAgent(agent.id, agent.name);
52
+ }
53
+ // Get current context
54
+ const focusEntry = db.getMemory('current_focus', 'context');
55
+ const focusText = focusEntry ? String(focusEntry.value) : 'Not set';
56
+ // Get pending tasks for this agent
57
+ const myTasks = db.listTasks({ assignedTo: agent.id });
58
+ const pendingTasks = myTasks.filter((t) => ['pending', 'assigned'].includes(t.status));
59
+ // Get recent decisions
60
+ const decisions = db.listMemory('decisions');
61
+ // Sync context
62
+ syncToActiveContext();
63
+ const lines = [
64
+ '# Session Initialized',
65
+ '',
66
+ `**Agent**: ${agent.name} (\`${agent.id}\`)`,
67
+ `**Role**: ${agent.role}`,
68
+ '',
69
+ '## Current Focus',
70
+ focusText,
71
+ '',
72
+ '## Your Pending Tasks',
73
+ ];
74
+ if (pendingTasks.length > 0) {
75
+ for (const t of pendingTasks.slice(0, 5)) {
76
+ lines.push(`- ${t.title} (\`${t.id.slice(0, 8)}...\`)`);
77
+ }
78
+ }
79
+ else {
80
+ lines.push('_No tasks assigned to you._');
81
+ }
82
+ lines.push('', '## Recent Decisions');
83
+ if (decisions.length > 0) {
84
+ for (const d of decisions.slice(0, 5)) {
85
+ lines.push(`- **${d.key}**: ${String(d.value).slice(0, 80)}`);
86
+ }
87
+ }
88
+ else {
89
+ lines.push('_No decisions recorded._');
90
+ }
91
+ lines.push('', '---', 'Use `is_my_turn` to check for available work.');
92
+ return {
93
+ content: [{ type: 'text', text: lines.join('\n') }],
94
+ };
95
+ });
96
+ // claim_todo
97
+ server.tool('claim_todo', 'FOR SUB-AGENTS: Register yourself AND claim a specific task in one call. Use this when you were spawned to work on a specific todo. This creates the task if it doesn\'t exist, then claims it for you.', {
98
+ title: z.string().describe('The title of the todo/task you were spawned to work on'),
99
+ description: z.string().optional().default('').describe('Additional details about the task'),
100
+ priority: z
101
+ .enum(['low', 'normal', 'high', 'urgent'])
102
+ .optional()
103
+ .default('normal')
104
+ .describe('Priority level'),
105
+ }, async ({ title, description, priority }) => {
106
+ const db = getDatabase();
107
+ // Generate agent name
108
+ const agentName = `sub-${Date.now()}`;
109
+ // Register as sub-agent
110
+ const agent = db.createAgent({
111
+ name: agentName,
112
+ role: AgentRole.SUB,
113
+ capabilities: ['code'],
114
+ status: AgentStatus.BUSY, // Already working
115
+ });
116
+ setCurrentAgent(agent.id, agent.name);
117
+ // Check if a task with this title already exists and is pending
118
+ const allTasks = db.listTasks();
119
+ let task = allTasks.find((t) => t.title.toLowerCase().trim() === title.toLowerCase().trim() &&
120
+ ['pending', 'assigned'].includes(t.status));
121
+ if (task) {
122
+ // Claim the existing task
123
+ task = db.updateTask(task.id, {
124
+ assignedTo: agent.id,
125
+ status: TaskStatus.IN_PROGRESS,
126
+ });
127
+ }
128
+ else {
129
+ // Create a new task and claim it
130
+ task = db.createTask({
131
+ title,
132
+ description,
133
+ priority: priority,
134
+ status: TaskStatus.IN_PROGRESS,
135
+ assignedTo: agent.id,
136
+ createdBy: agent.id,
137
+ startedAt: new Date(),
138
+ });
139
+ }
140
+ // Sync context
141
+ syncToActiveContext();
142
+ const lines = [
143
+ '# Task Claimed',
144
+ '',
145
+ `**You are**: ${agent.name} (\`${agent.id}\`)`,
146
+ `**Working on**: ${task.title}`,
147
+ `**Task ID**: \`${task.id}\``,
148
+ '',
149
+ '---',
150
+ '',
151
+ 'Now you can start working. Remember to:',
152
+ '1. `lock_acquire` on any files you edit',
153
+ '2. `task_update` to report progress',
154
+ '3. `task_complete` when done',
155
+ '4. `agent_unregister` when finished',
156
+ ];
157
+ return {
158
+ content: [{ type: 'text', text: lines.join('\n') }],
159
+ };
160
+ });
161
+ }
162
+ //# sourceMappingURL=utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Utility to sync orchestration state to activeContext.md
3
+ */
4
+ /**
5
+ * Check if context sync is enabled via environment variable
6
+ */
7
+ export declare function isContextSyncEnabled(): boolean;
8
+ /**
9
+ * Sync the current orchestration state to activeContext.md
10
+ */
11
+ export declare function syncToActiveContext(): void;
12
+ //# sourceMappingURL=contextSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextSync.d.ts","sourceRoot":"","sources":["../../src/utils/contextSync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AASD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAoH1C"}