@weave_protocol/domere 1.0.18 → 1.2.1

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.
@@ -0,0 +1,411 @@
1
+ /**
2
+ * Dōmere - Agent Registry
3
+ *
4
+ * Agent lifecycle management, health monitoring, and capability tracking
5
+ * for multi-agent AI orchestration systems.
6
+ */
7
+ import * as crypto from 'crypto';
8
+ // =============================================================================
9
+ // Agent Registry
10
+ // =============================================================================
11
+ export class AgentRegistry {
12
+ agents = new Map();
13
+ heartbeatTimers = new Map();
14
+ eventCallbacks = new Map();
15
+ globalEventCallbacks = [];
16
+ defaultConfig = {
17
+ heartbeat_interval_ms: 5000,
18
+ heartbeat_timeout_ms: 15000,
19
+ drain_timeout_ms: 60000,
20
+ auto_recover: true,
21
+ };
22
+ constructor(defaultConfig) {
23
+ if (defaultConfig) {
24
+ this.defaultConfig = { ...this.defaultConfig, ...defaultConfig };
25
+ }
26
+ }
27
+ /**
28
+ * Register a new agent
29
+ */
30
+ async register(params) {
31
+ const id = params.agent_id || `agent_${crypto.randomUUID().split('-')[0]}`;
32
+ if (this.agents.has(id)) {
33
+ throw new Error(`Agent ${id} already registered`);
34
+ }
35
+ const now = new Date();
36
+ const agent = {
37
+ id,
38
+ name: params.name,
39
+ status: 'initializing',
40
+ registered_at: now,
41
+ last_heartbeat: now,
42
+ capabilities: params.capabilities,
43
+ max_concurrent_tasks: params.max_concurrent_tasks || 5,
44
+ current_tasks: [],
45
+ metrics: {
46
+ tasks_completed: 0,
47
+ tasks_failed: 0,
48
+ total_duration_ms: 0,
49
+ avg_duration_ms: 0,
50
+ success_rate: 1,
51
+ current_load: 0,
52
+ uptime_ms: 0,
53
+ },
54
+ config: {
55
+ ...this.defaultConfig,
56
+ heartbeat_interval_ms: params.heartbeat_interval_ms || this.defaultConfig.heartbeat_interval_ms,
57
+ },
58
+ metadata: params.metadata || {},
59
+ };
60
+ this.agents.set(id, agent);
61
+ this.startHeartbeatMonitor(id);
62
+ this.emitEvent({ type: 'registered', agent_id: id, timestamp: now });
63
+ return agent;
64
+ }
65
+ /**
66
+ * Mark agent as ready
67
+ */
68
+ async setReady(agentId) {
69
+ const agent = this.agents.get(agentId);
70
+ if (!agent)
71
+ throw new Error(`Agent ${agentId} not found`);
72
+ agent.status = 'ready';
73
+ this.emitEvent({ type: 'ready', agent_id: agentId, timestamp: new Date() });
74
+ }
75
+ /**
76
+ * Process heartbeat from agent
77
+ */
78
+ async heartbeat(payload) {
79
+ const agent = this.agents.get(payload.agent_id);
80
+ if (!agent) {
81
+ return { acknowledged: false, instructions: ['re-register'] };
82
+ }
83
+ const now = new Date();
84
+ const wasOffline = agent.status === 'offline' || agent.status === 'failed';
85
+ agent.last_heartbeat = now;
86
+ // Update status
87
+ if (payload.status) {
88
+ agent.status = payload.status;
89
+ }
90
+ // Update current tasks
91
+ if (payload.current_tasks !== undefined) {
92
+ agent.current_tasks = payload.current_tasks;
93
+ agent.metrics.current_load = agent.current_tasks.length / agent.max_concurrent_tasks;
94
+ // Auto-update status based on load
95
+ if (agent.status !== 'draining') {
96
+ if (agent.metrics.current_load >= 1) {
97
+ agent.status = 'overloaded';
98
+ }
99
+ else if (agent.metrics.current_load > 0) {
100
+ agent.status = 'busy';
101
+ }
102
+ else {
103
+ agent.status = 'ready';
104
+ }
105
+ }
106
+ }
107
+ // Update metrics
108
+ if (payload.metrics_update) {
109
+ agent.metrics = { ...agent.metrics, ...payload.metrics_update };
110
+ }
111
+ // Update metadata
112
+ if (payload.metadata_update) {
113
+ agent.metadata = { ...agent.metadata, ...payload.metadata_update };
114
+ }
115
+ // Calculate uptime
116
+ agent.metrics.uptime_ms = now.getTime() - agent.registered_at.getTime();
117
+ // Recovery event
118
+ if (wasOffline && agent.config.auto_recover) {
119
+ this.emitEvent({ type: 'recovered', agent_id: payload.agent_id, timestamp: now });
120
+ }
121
+ // Reset heartbeat timer
122
+ this.resetHeartbeatTimer(payload.agent_id);
123
+ const instructions = [];
124
+ if (agent.status === 'draining') {
125
+ instructions.push('drain-tasks');
126
+ }
127
+ return { acknowledged: true, instructions: instructions.length > 0 ? instructions : undefined };
128
+ }
129
+ /**
130
+ * Get agent by ID
131
+ */
132
+ getAgent(agentId) {
133
+ return this.agents.get(agentId);
134
+ }
135
+ /**
136
+ * Get all agents
137
+ */
138
+ getAllAgents() {
139
+ return Array.from(this.agents.values());
140
+ }
141
+ /**
142
+ * Find agents matching criteria
143
+ */
144
+ findAgents(query) {
145
+ let results = Array.from(this.agents.values());
146
+ // Filter by status
147
+ if (query.status?.length) {
148
+ results = results.filter(a => query.status.includes(a.status));
149
+ }
150
+ else {
151
+ // Default: only ready/busy agents
152
+ results = results.filter(a => a.status === 'ready' || a.status === 'busy');
153
+ }
154
+ // Filter by capabilities
155
+ if (query.capabilities?.length) {
156
+ results = results.filter(a => query.capabilities.every(c => a.capabilities.includes(c)));
157
+ }
158
+ // Filter by available slots
159
+ if (query.min_available_slots !== undefined) {
160
+ results = results.filter(a => (a.max_concurrent_tasks - a.current_tasks.length) >= query.min_available_slots);
161
+ }
162
+ // Filter by load
163
+ if (query.max_load !== undefined) {
164
+ results = results.filter(a => a.metrics.current_load <= query.max_load);
165
+ }
166
+ // Exclude specific agents
167
+ if (query.exclude?.length) {
168
+ results = results.filter(a => !query.exclude.includes(a.id));
169
+ }
170
+ return results;
171
+ }
172
+ /**
173
+ * Get best agent for a task
174
+ */
175
+ getBestAgent(query) {
176
+ let candidates = this.findAgents(query);
177
+ if (candidates.length === 0)
178
+ return null;
179
+ // Sort by preference
180
+ if (query.prefer_lowest_load) {
181
+ candidates.sort((a, b) => a.metrics.current_load - b.metrics.current_load);
182
+ }
183
+ else if (query.prefer_highest_success) {
184
+ candidates.sort((a, b) => b.metrics.success_rate - a.metrics.success_rate);
185
+ }
186
+ return candidates[0];
187
+ }
188
+ /**
189
+ * Assign task to agent
190
+ */
191
+ async assignTask(agentId, taskId) {
192
+ const agent = this.agents.get(agentId);
193
+ if (!agent)
194
+ return false;
195
+ if (agent.current_tasks.length >= agent.max_concurrent_tasks) {
196
+ return false;
197
+ }
198
+ if (agent.status === 'offline' || agent.status === 'failed' || agent.status === 'draining') {
199
+ return false;
200
+ }
201
+ agent.current_tasks.push(taskId);
202
+ agent.metrics.current_load = agent.current_tasks.length / agent.max_concurrent_tasks;
203
+ // Update status
204
+ if (agent.metrics.current_load >= 1) {
205
+ agent.status = 'overloaded';
206
+ this.emitEvent({ type: 'overloaded', agent_id: agentId, timestamp: new Date() });
207
+ }
208
+ else if (agent.status === 'ready') {
209
+ agent.status = 'busy';
210
+ this.emitEvent({ type: 'busy', agent_id: agentId, timestamp: new Date() });
211
+ }
212
+ return true;
213
+ }
214
+ /**
215
+ * Complete task for agent
216
+ */
217
+ async completeTask(agentId, taskId, success, durationMs) {
218
+ const agent = this.agents.get(agentId);
219
+ if (!agent)
220
+ return;
221
+ // Remove from current tasks
222
+ const taskIndex = agent.current_tasks.indexOf(taskId);
223
+ if (taskIndex !== -1) {
224
+ agent.current_tasks.splice(taskIndex, 1);
225
+ }
226
+ // Update metrics
227
+ if (success) {
228
+ agent.metrics.tasks_completed++;
229
+ }
230
+ else {
231
+ agent.metrics.tasks_failed++;
232
+ }
233
+ agent.metrics.total_duration_ms += durationMs;
234
+ const totalTasks = agent.metrics.tasks_completed + agent.metrics.tasks_failed;
235
+ agent.metrics.avg_duration_ms = agent.metrics.total_duration_ms / totalTasks;
236
+ agent.metrics.success_rate = agent.metrics.tasks_completed / totalTasks;
237
+ agent.metrics.current_load = agent.current_tasks.length / agent.max_concurrent_tasks;
238
+ agent.metrics.last_task_completed_at = new Date();
239
+ // Update status
240
+ if (agent.status !== 'draining') {
241
+ if (agent.current_tasks.length === 0) {
242
+ agent.status = 'ready';
243
+ }
244
+ else if (agent.metrics.current_load < 1) {
245
+ agent.status = 'busy';
246
+ }
247
+ }
248
+ }
249
+ /**
250
+ * Start draining agent (stop accepting new tasks)
251
+ */
252
+ async drain(agentId) {
253
+ const agent = this.agents.get(agentId);
254
+ if (!agent)
255
+ throw new Error(`Agent ${agentId} not found`);
256
+ agent.status = 'draining';
257
+ this.emitEvent({ type: 'draining', agent_id: agentId, timestamp: new Date() });
258
+ return {
259
+ drained: agent.current_tasks.length === 0,
260
+ remaining_tasks: agent.current_tasks.length,
261
+ };
262
+ }
263
+ /**
264
+ * Deregister agent
265
+ */
266
+ async deregister(agentId, force = false) {
267
+ const agent = this.agents.get(agentId);
268
+ if (!agent)
269
+ throw new Error(`Agent ${agentId} not found`);
270
+ const orphanedTasks = [...agent.current_tasks];
271
+ if (!force && orphanedTasks.length > 0) {
272
+ throw new Error(`Agent ${agentId} has ${orphanedTasks.length} active tasks. Use force=true or drain first.`);
273
+ }
274
+ // Clear heartbeat timer
275
+ const timer = this.heartbeatTimers.get(agentId);
276
+ if (timer) {
277
+ clearTimeout(timer);
278
+ this.heartbeatTimers.delete(agentId);
279
+ }
280
+ // Remove agent
281
+ this.agents.delete(agentId);
282
+ this.emitEvent({ type: 'deregistered', agent_id: agentId, timestamp: new Date(), details: { orphaned_tasks: orphanedTasks } });
283
+ return { success: true, orphaned_tasks: orphanedTasks };
284
+ }
285
+ /**
286
+ * Get agent statistics
287
+ */
288
+ getStats() {
289
+ const agents = Array.from(this.agents.values());
290
+ const byStatus = {
291
+ initializing: 0, ready: 0, busy: 0, overloaded: 0, draining: 0, offline: 0, failed: 0
292
+ };
293
+ let totalCapacity = 0;
294
+ let totalCurrentTasks = 0;
295
+ let totalSuccessRate = 0;
296
+ let agentsWithTasks = 0;
297
+ for (const agent of agents) {
298
+ byStatus[agent.status]++;
299
+ totalCapacity += agent.max_concurrent_tasks;
300
+ totalCurrentTasks += agent.current_tasks.length;
301
+ if (agent.metrics.tasks_completed + agent.metrics.tasks_failed > 0) {
302
+ totalSuccessRate += agent.metrics.success_rate;
303
+ agentsWithTasks++;
304
+ }
305
+ }
306
+ return {
307
+ total_agents: agents.length,
308
+ by_status: byStatus,
309
+ total_capacity: totalCapacity,
310
+ total_load: totalCapacity > 0 ? totalCurrentTasks / totalCapacity : 0,
311
+ avg_success_rate: agentsWithTasks > 0 ? totalSuccessRate / agentsWithTasks : 1,
312
+ };
313
+ }
314
+ /**
315
+ * Subscribe to agent events
316
+ */
317
+ onAgentEvent(agentId, callback) {
318
+ const callbacks = this.eventCallbacks.get(agentId) || [];
319
+ callbacks.push(callback);
320
+ this.eventCallbacks.set(agentId, callbacks);
321
+ return () => {
322
+ const cbs = this.eventCallbacks.get(agentId) || [];
323
+ const index = cbs.indexOf(callback);
324
+ if (index !== -1)
325
+ cbs.splice(index, 1);
326
+ };
327
+ }
328
+ /**
329
+ * Subscribe to all agent events
330
+ */
331
+ onAnyAgentEvent(callback) {
332
+ this.globalEventCallbacks.push(callback);
333
+ return () => {
334
+ const index = this.globalEventCallbacks.indexOf(callback);
335
+ if (index !== -1)
336
+ this.globalEventCallbacks.splice(index, 1);
337
+ };
338
+ }
339
+ /**
340
+ * Subscribe to agent going offline/failed
341
+ */
342
+ onAgentDown(callback) {
343
+ return this.onAnyAgentEvent((event) => {
344
+ if (event.type === 'offline' || event.type === 'failed') {
345
+ const agent = this.agents.get(event.agent_id);
346
+ if (agent) {
347
+ callback(agent, [...agent.current_tasks]);
348
+ }
349
+ }
350
+ });
351
+ }
352
+ // ===========================================================================
353
+ // Private Methods
354
+ // ===========================================================================
355
+ startHeartbeatMonitor(agentId) {
356
+ const agent = this.agents.get(agentId);
357
+ if (!agent)
358
+ return;
359
+ const timer = setTimeout(() => {
360
+ this.handleHeartbeatTimeout(agentId);
361
+ }, agent.config.heartbeat_timeout_ms);
362
+ this.heartbeatTimers.set(agentId, timer);
363
+ }
364
+ resetHeartbeatTimer(agentId) {
365
+ const existing = this.heartbeatTimers.get(agentId);
366
+ if (existing) {
367
+ clearTimeout(existing);
368
+ }
369
+ this.startHeartbeatMonitor(agentId);
370
+ }
371
+ handleHeartbeatTimeout(agentId) {
372
+ const agent = this.agents.get(agentId);
373
+ if (!agent)
374
+ return;
375
+ const wasOnline = agent.status !== 'offline' && agent.status !== 'failed';
376
+ if (wasOnline) {
377
+ agent.status = 'offline';
378
+ this.emitEvent({
379
+ type: 'offline',
380
+ agent_id: agentId,
381
+ timestamp: new Date(),
382
+ details: { last_heartbeat: agent.last_heartbeat }
383
+ });
384
+ }
385
+ // Continue monitoring in case agent recovers
386
+ this.startHeartbeatMonitor(agentId);
387
+ }
388
+ emitEvent(event) {
389
+ // Agent-specific callbacks
390
+ const callbacks = this.eventCallbacks.get(event.agent_id) || [];
391
+ for (const cb of callbacks) {
392
+ try {
393
+ cb(event);
394
+ }
395
+ catch (e) {
396
+ // Ignore
397
+ }
398
+ }
399
+ // Global callbacks
400
+ for (const cb of this.globalEventCallbacks) {
401
+ try {
402
+ cb(event);
403
+ }
404
+ catch (e) {
405
+ // Ignore
406
+ }
407
+ }
408
+ }
409
+ }
410
+ export default AgentRegistry;
411
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/orchestration/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Dōmere - Task Scheduler
3
+ *
4
+ * Distributed task scheduling for multi-agent AI orchestration.
5
+ * Handles dependencies, priorities, load balancing, and failure recovery.
6
+ */
7
+ export type TaskStatus = 'pending' | 'queued' | 'assigned' | 'running' | 'completed' | 'failed' | 'cancelled' | 'blocked';
8
+ export type TaskPriority = 'critical' | 'high' | 'normal' | 'low' | 'background';
9
+ export interface Task {
10
+ id: string;
11
+ thread_id?: string;
12
+ intent: string;
13
+ intent_hash: string;
14
+ description?: string;
15
+ priority: TaskPriority;
16
+ status: TaskStatus;
17
+ dependencies: string[];
18
+ dependents: string[];
19
+ assigned_agent?: string;
20
+ assignment_time?: Date;
21
+ constraints: TaskConstraints;
22
+ retry_policy: RetryPolicy;
23
+ attempt_count: number;
24
+ last_error?: string;
25
+ created_at: Date;
26
+ started_at?: Date;
27
+ completed_at?: Date;
28
+ deadline?: Date;
29
+ result?: any;
30
+ result_hash?: string;
31
+ metadata: Record<string, any>;
32
+ }
33
+ export interface TaskConstraints {
34
+ max_duration_ms?: number;
35
+ required_capabilities?: string[];
36
+ preferred_agents?: string[];
37
+ excluded_agents?: string[];
38
+ exclusive_resources?: string[];
39
+ max_concurrent?: number;
40
+ }
41
+ export interface RetryPolicy {
42
+ max_retries: number;
43
+ backoff: 'none' | 'linear' | 'exponential';
44
+ base_delay_ms: number;
45
+ max_delay_ms: number;
46
+ }
47
+ export interface TaskAssignment {
48
+ task_id: string;
49
+ agent_id: string;
50
+ assigned_at: Date;
51
+ reason: string;
52
+ estimated_duration_ms?: number;
53
+ }
54
+ export interface TaskProgress {
55
+ task_id: string;
56
+ agent_id: string;
57
+ percent: number;
58
+ stage?: string;
59
+ message?: string;
60
+ updated_at: Date;
61
+ }
62
+ export interface TaskResult {
63
+ task_id: string;
64
+ status: 'completed' | 'failed';
65
+ result?: any;
66
+ error?: string;
67
+ duration_ms: number;
68
+ agent_id: string;
69
+ completed_at: Date;
70
+ }
71
+ export interface SchedulerStats {
72
+ total_tasks: number;
73
+ by_status: Record<TaskStatus, number>;
74
+ by_priority: Record<TaskPriority, number>;
75
+ avg_wait_time_ms: number;
76
+ avg_duration_ms: number;
77
+ throughput_per_minute: number;
78
+ }
79
+ export declare class TaskScheduler {
80
+ private tasks;
81
+ private queue;
82
+ private resourceLocks;
83
+ private progressCallbacks;
84
+ private completionCallbacks;
85
+ private globalCompletionCallbacks;
86
+ private agentGetter?;
87
+ constructor(options?: {
88
+ agentGetter?: () => Promise<AgentInfo[]>;
89
+ });
90
+ /**
91
+ * Create a new task
92
+ */
93
+ createTask(params: {
94
+ intent: string;
95
+ thread_id?: string;
96
+ description?: string;
97
+ priority?: TaskPriority;
98
+ dependencies?: string[];
99
+ constraints?: Partial<TaskConstraints>;
100
+ retry_policy?: Partial<RetryPolicy>;
101
+ deadline?: Date;
102
+ metadata?: Record<string, any>;
103
+ }): Promise<Task>;
104
+ /**
105
+ * Get a task by ID
106
+ */
107
+ getTask(taskId: string): Task | undefined;
108
+ /**
109
+ * Get all tasks
110
+ */
111
+ getAllTasks(): Task[];
112
+ /**
113
+ * Get tasks by status
114
+ */
115
+ getTasksByStatus(status: TaskStatus): Task[];
116
+ /**
117
+ * Evaluate if task can be queued (dependencies met)
118
+ */
119
+ private evaluateTask;
120
+ /**
121
+ * Insert task into priority queue
122
+ */
123
+ private insertIntoQueue;
124
+ /**
125
+ * Get next task for an agent
126
+ */
127
+ getNextTask(agentId: string, capabilities?: string[]): Promise<Task | null>;
128
+ /**
129
+ * Assign a task to an agent
130
+ */
131
+ assignTask(taskId: string, agentId?: string): Promise<TaskAssignment>;
132
+ /**
133
+ * Mark task as started
134
+ */
135
+ startTask(taskId: string, agentId: string): Promise<void>;
136
+ /**
137
+ * Report task progress
138
+ */
139
+ reportProgress(taskId: string, agentId: string, percent: number, stage?: string, message?: string): Promise<void>;
140
+ /**
141
+ * Complete a task
142
+ */
143
+ completeTask(taskId: string, agentId: string, result?: any): Promise<TaskResult>;
144
+ /**
145
+ * Fail a task
146
+ */
147
+ failTask(taskId: string, agentId: string, error: string): Promise<TaskResult>;
148
+ /**
149
+ * Cancel a task
150
+ */
151
+ cancelTask(taskId: string, reason?: string): Promise<void>;
152
+ /**
153
+ * Reassign tasks from a failed agent
154
+ */
155
+ reassignFromAgent(agentId: string): Promise<TaskAssignment[]>;
156
+ /**
157
+ * Update task priority
158
+ */
159
+ updatePriority(taskId: string, priority: TaskPriority): Promise<void>;
160
+ /**
161
+ * Subscribe to task progress
162
+ */
163
+ onTaskProgress(taskId: string, callback: (progress: TaskProgress) => void): () => void;
164
+ /**
165
+ * Subscribe to task completion
166
+ */
167
+ onTaskComplete(taskId: string, callback: (result: TaskResult) => void): () => void;
168
+ /**
169
+ * Subscribe to all task completions
170
+ */
171
+ onAnyTaskComplete(callback: (result: TaskResult) => void): () => void;
172
+ private notifyCompletion;
173
+ /**
174
+ * Get scheduler statistics
175
+ */
176
+ getStats(): SchedulerStats;
177
+ /**
178
+ * Get queue status
179
+ */
180
+ getQueueStatus(): {
181
+ length: number;
182
+ tasks: Task[];
183
+ };
184
+ }
185
+ interface AgentInfo {
186
+ id: string;
187
+ available: boolean;
188
+ capabilities: string[];
189
+ current_load: number;
190
+ }
191
+ export default TaskScheduler;
192
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/orchestration/scheduler.ts"],"names":[],"mappings":"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"}