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
|
@@ -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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|