@jackchen_me/open-multi-agent 0.1.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/LICENSE +21 -0
- package/README.md +280 -0
- package/dist/agent/agent.d.ts +121 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +294 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/pool.d.ts +128 -0
- package/dist/agent/pool.d.ts.map +1 -0
- package/dist/agent/pool.js +236 -0
- package/dist/agent/pool.js.map +1 -0
- package/dist/agent/runner.d.ts +120 -0
- package/dist/agent/runner.d.ts.map +1 -0
- package/dist/agent/runner.js +274 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/adapter.d.ts +38 -0
- package/dist/llm/adapter.d.ts.map +1 -0
- package/dist/llm/adapter.js +46 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/anthropic.d.ts +56 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +307 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/openai.d.ts +62 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +424 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/memory/shared.d.ts +86 -0
- package/dist/memory/shared.d.ts.map +1 -0
- package/dist/memory/shared.js +155 -0
- package/dist/memory/shared.js.map +1 -0
- package/dist/memory/store.d.ts +64 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +103 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +173 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +698 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/scheduler.d.ts +112 -0
- package/dist/orchestrator/scheduler.d.ts.map +1 -0
- package/dist/orchestrator/scheduler.js +282 -0
- package/dist/orchestrator/scheduler.js.map +1 -0
- package/dist/task/queue.d.ts +160 -0
- package/dist/task/queue.d.ts.map +1 -0
- package/dist/task/queue.js +337 -0
- package/dist/task/queue.js.map +1 -0
- package/dist/task/task.d.ts +86 -0
- package/dist/task/task.d.ts.map +1 -0
- package/dist/task/task.js +201 -0
- package/dist/task/task.js.map +1 -0
- package/dist/team/messaging.d.ts +106 -0
- package/dist/team/messaging.d.ts.map +1 -0
- package/dist/team/messaging.js +182 -0
- package/dist/team/messaging.js.map +1 -0
- package/dist/team/team.d.ts +141 -0
- package/dist/team/team.d.ts.map +1 -0
- package/dist/team/team.js +282 -0
- package/dist/team/team.js.map +1 -0
- package/dist/tool/built-in/bash.d.ts +12 -0
- package/dist/tool/built-in/bash.d.ts.map +1 -0
- package/dist/tool/built-in/bash.js +133 -0
- package/dist/tool/built-in/bash.js.map +1 -0
- package/dist/tool/built-in/file-edit.d.ts +14 -0
- package/dist/tool/built-in/file-edit.d.ts.map +1 -0
- package/dist/tool/built-in/file-edit.js +130 -0
- package/dist/tool/built-in/file-edit.js.map +1 -0
- package/dist/tool/built-in/file-read.d.ts +12 -0
- package/dist/tool/built-in/file-read.d.ts.map +1 -0
- package/dist/tool/built-in/file-read.js +82 -0
- package/dist/tool/built-in/file-read.js.map +1 -0
- package/dist/tool/built-in/file-write.d.ts +11 -0
- package/dist/tool/built-in/file-write.d.ts.map +1 -0
- package/dist/tool/built-in/file-write.js +70 -0
- package/dist/tool/built-in/file-write.js.map +1 -0
- package/dist/tool/built-in/grep.d.ts +15 -0
- package/dist/tool/built-in/grep.d.ts.map +1 -0
- package/dist/tool/built-in/grep.js +287 -0
- package/dist/tool/built-in/grep.js.map +1 -0
- package/dist/tool/built-in/index.d.ts +36 -0
- package/dist/tool/built-in/index.d.ts.map +1 -0
- package/dist/tool/built-in/index.js +45 -0
- package/dist/tool/built-in/index.js.map +1 -0
- package/dist/tool/executor.d.ts +71 -0
- package/dist/tool/executor.d.ts.map +1 -0
- package/dist/tool/executor.js +116 -0
- package/dist/tool/executor.js.map +1 -0
- package/dist/tool/framework.d.ts +143 -0
- package/dist/tool/framework.d.ts.map +1 -0
- package/dist/tool/framework.js +371 -0
- package/dist/tool/framework.js.map +1 -0
- package/dist/types.d.ts +285 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/semaphore.d.ts +47 -0
- package/dist/utils/semaphore.d.ts.map +1 -0
- package/dist/utils/semaphore.js +85 -0
- package/dist/utils/semaphore.js.map +1 -0
- package/examples/01-single-agent.ts +131 -0
- package/examples/02-team-collaboration.ts +167 -0
- package/examples/03-task-pipeline.ts +201 -0
- package/examples/04-multi-model-team.ts +261 -0
- package/package.json +49 -0
- package/src/agent/agent.ts +364 -0
- package/src/agent/pool.ts +278 -0
- package/src/agent/runner.ts +413 -0
- package/src/index.ts +166 -0
- package/src/llm/adapter.ts +74 -0
- package/src/llm/anthropic.ts +388 -0
- package/src/llm/openai.ts +522 -0
- package/src/memory/shared.ts +181 -0
- package/src/memory/store.ts +124 -0
- package/src/orchestrator/orchestrator.ts +851 -0
- package/src/orchestrator/scheduler.ts +352 -0
- package/src/task/queue.ts +394 -0
- package/src/task/task.ts +232 -0
- package/src/team/messaging.ts +230 -0
- package/src/team/team.ts +334 -0
- package/src/tool/built-in/bash.ts +187 -0
- package/src/tool/built-in/file-edit.ts +154 -0
- package/src/tool/built-in/file-read.ts +105 -0
- package/src/tool/built-in/file-write.ts +81 -0
- package/src/tool/built-in/grep.ts +362 -0
- package/src/tool/built-in/index.ts +50 -0
- package/src/tool/executor.ts +178 -0
- package/src/tool/framework.ts +557 -0
- package/src/types.ts +362 -0
- package/src/utils/semaphore.ts +89 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Task scheduling strategies for the open-multi-agent orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Scheduler} class encapsulates four distinct strategies for
|
|
5
|
+
* mapping a set of pending {@link Task}s onto a pool of available agents:
|
|
6
|
+
*
|
|
7
|
+
* - `round-robin` — Distribute tasks evenly across agents by index.
|
|
8
|
+
* - `least-busy` — Assign to whichever agent has the fewest active tasks.
|
|
9
|
+
* - `capability-match` — Score agents by keyword overlap with the task description.
|
|
10
|
+
* - `dependency-first` — Prioritise tasks on the critical path (most blocked dependents).
|
|
11
|
+
*
|
|
12
|
+
* The scheduler is stateless between calls. All mutable task state lives in the
|
|
13
|
+
* {@link TaskQueue} that is passed to {@link Scheduler.autoAssign}.
|
|
14
|
+
*/
|
|
15
|
+
import type { AgentConfig, Task } from '../types.js';
|
|
16
|
+
import type { TaskQueue } from '../task/queue.js';
|
|
17
|
+
/**
|
|
18
|
+
* The four scheduling strategies available to the {@link Scheduler}.
|
|
19
|
+
*
|
|
20
|
+
* - `round-robin` — Equal distribution by agent index.
|
|
21
|
+
* - `least-busy` — Prefers the agent with the fewest `in_progress` tasks.
|
|
22
|
+
* - `capability-match` — Keyword-based affinity between task text and agent role.
|
|
23
|
+
* - `dependency-first` — Prioritise tasks that unblock the most other tasks.
|
|
24
|
+
*/
|
|
25
|
+
export type SchedulingStrategy = 'round-robin' | 'least-busy' | 'capability-match' | 'dependency-first';
|
|
26
|
+
/**
|
|
27
|
+
* Maps pending tasks to available agents using one of four configurable strategies.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const scheduler = new Scheduler('capability-match')
|
|
32
|
+
*
|
|
33
|
+
* // Get a full assignment map from tasks to agent names
|
|
34
|
+
* const assignments = scheduler.schedule(pendingTasks, teamAgents)
|
|
35
|
+
*
|
|
36
|
+
* // Or let the scheduler directly update a TaskQueue
|
|
37
|
+
* scheduler.autoAssign(queue, teamAgents)
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare class Scheduler {
|
|
41
|
+
private readonly strategy;
|
|
42
|
+
/** Rolling cursor used by `round-robin` to distribute tasks sequentially. */
|
|
43
|
+
private roundRobinCursor;
|
|
44
|
+
/**
|
|
45
|
+
* @param strategy - The scheduling algorithm to apply. Defaults to
|
|
46
|
+
* `'dependency-first'` which is the safest default for
|
|
47
|
+
* complex multi-step pipelines.
|
|
48
|
+
*/
|
|
49
|
+
constructor(strategy?: SchedulingStrategy);
|
|
50
|
+
/**
|
|
51
|
+
* Given a list of pending `tasks` and `agents`, return a mapping from
|
|
52
|
+
* `taskId` to `agentName` representing the recommended assignment.
|
|
53
|
+
*
|
|
54
|
+
* Only tasks without an existing `assignee` are considered. Tasks that are
|
|
55
|
+
* already assigned are preserved unchanged.
|
|
56
|
+
*
|
|
57
|
+
* The method is deterministic for all strategies except `round-robin`, which
|
|
58
|
+
* advances an internal cursor and therefore produces different results across
|
|
59
|
+
* successive calls with the same inputs.
|
|
60
|
+
*
|
|
61
|
+
* @param tasks - Snapshot of all tasks in the current run (any status).
|
|
62
|
+
* @param agents - Available agent configurations.
|
|
63
|
+
* @returns A `Map<taskId, agentName>` for every unassigned pending task.
|
|
64
|
+
*/
|
|
65
|
+
schedule(tasks: Task[], agents: AgentConfig[]): Map<string, string>;
|
|
66
|
+
/**
|
|
67
|
+
* Convenience method that applies assignments returned by {@link schedule}
|
|
68
|
+
* directly to a live `TaskQueue`.
|
|
69
|
+
*
|
|
70
|
+
* Iterates all pending, unassigned tasks in the queue and sets `assignee` for
|
|
71
|
+
* each according to the current strategy. Skips tasks that are already
|
|
72
|
+
* assigned, non-pending, or whose IDs are not found in the queue snapshot.
|
|
73
|
+
*
|
|
74
|
+
* @param queue - The live task queue to mutate.
|
|
75
|
+
* @param agents - Available agent configurations.
|
|
76
|
+
*/
|
|
77
|
+
autoAssign(queue: TaskQueue, agents: AgentConfig[]): void;
|
|
78
|
+
/**
|
|
79
|
+
* Round-robin: assign tasks to agents in order, cycling back to the start.
|
|
80
|
+
*
|
|
81
|
+
* The cursor advances with every call so that repeated calls with the same
|
|
82
|
+
* task set continue distributing work — rather than always starting from
|
|
83
|
+
* agent[0].
|
|
84
|
+
*/
|
|
85
|
+
private scheduleRoundRobin;
|
|
86
|
+
/**
|
|
87
|
+
* Least-busy: assign each task to the agent with the fewest `in_progress`
|
|
88
|
+
* tasks at the time the schedule is computed.
|
|
89
|
+
*
|
|
90
|
+
* Agent load is derived from the `in_progress` count in `allTasks`. Ties are
|
|
91
|
+
* broken by the agent's position in the `agents` array (earlier = preferred).
|
|
92
|
+
*/
|
|
93
|
+
private scheduleLeastBusy;
|
|
94
|
+
/**
|
|
95
|
+
* Capability-match: score each agent against each task by keyword overlap
|
|
96
|
+
* between the task's title/description and the agent's `systemPrompt` and
|
|
97
|
+
* `name`. The highest-scoring agent wins.
|
|
98
|
+
*
|
|
99
|
+
* Falls back to round-robin when no agent has any positive score.
|
|
100
|
+
*/
|
|
101
|
+
private scheduleCapabilityMatch;
|
|
102
|
+
/**
|
|
103
|
+
* Dependency-first: prioritise tasks by how many other tasks are blocked
|
|
104
|
+
* waiting for them (the "critical path" heuristic).
|
|
105
|
+
*
|
|
106
|
+
* Tasks with more downstream dependents are assigned to agents first. Within
|
|
107
|
+
* the same criticality tier the agents are selected round-robin so no single
|
|
108
|
+
* agent is overloaded.
|
|
109
|
+
*/
|
|
110
|
+
private scheduleDependencyFirst;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/orchestrator/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMjD;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,YAAY,GACZ,kBAAkB,GAClB,kBAAkB,CAAA;AA8EtB;;;;;;;;;;;;;GAaG;AACH,qBAAa,SAAS;IASR,OAAO,CAAC,QAAQ,CAAC,QAAQ;IARrC,6EAA6E;IAC7E,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;;;OAIG;gBAC0B,QAAQ,GAAE,kBAAuC;IAM9E;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAmBnE;;;;;;;;;;OAUG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;IAiBzD;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAyC/B;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;CA2BhC"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Task scheduling strategies for the open-multi-agent orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* The {@link Scheduler} class encapsulates four distinct strategies for
|
|
5
|
+
* mapping a set of pending {@link Task}s onto a pool of available agents:
|
|
6
|
+
*
|
|
7
|
+
* - `round-robin` — Distribute tasks evenly across agents by index.
|
|
8
|
+
* - `least-busy` — Assign to whichever agent has the fewest active tasks.
|
|
9
|
+
* - `capability-match` — Score agents by keyword overlap with the task description.
|
|
10
|
+
* - `dependency-first` — Prioritise tasks on the critical path (most blocked dependents).
|
|
11
|
+
*
|
|
12
|
+
* The scheduler is stateless between calls. All mutable task state lives in the
|
|
13
|
+
* {@link TaskQueue} that is passed to {@link Scheduler.autoAssign}.
|
|
14
|
+
*/
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Internal helpers
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Count how many tasks in `allTasks` are (transitively) blocked waiting for
|
|
20
|
+
* `taskId` to complete. Used by the `dependency-first` strategy to compute
|
|
21
|
+
* the "criticality" of each pending task.
|
|
22
|
+
*
|
|
23
|
+
* The algorithm is a forward BFS over the dependency graph: for each task
|
|
24
|
+
* whose `dependsOn` includes `taskId`, we add it to the result set and
|
|
25
|
+
* recurse — without revisiting nodes.
|
|
26
|
+
*/
|
|
27
|
+
function countBlockedDependents(taskId, allTasks) {
|
|
28
|
+
const idToTask = new Map(allTasks.map((t) => [t.id, t]));
|
|
29
|
+
// Build reverse adjacency: dependencyId -> tasks that depend on it
|
|
30
|
+
const dependents = new Map();
|
|
31
|
+
for (const t of allTasks) {
|
|
32
|
+
for (const depId of t.dependsOn ?? []) {
|
|
33
|
+
const list = dependents.get(depId) ?? [];
|
|
34
|
+
list.push(t.id);
|
|
35
|
+
dependents.set(depId, list);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const visited = new Set();
|
|
39
|
+
const queue = [taskId];
|
|
40
|
+
while (queue.length > 0) {
|
|
41
|
+
const current = queue.shift();
|
|
42
|
+
for (const depId of dependents.get(current) ?? []) {
|
|
43
|
+
if (!visited.has(depId) && idToTask.has(depId)) {
|
|
44
|
+
visited.add(depId);
|
|
45
|
+
queue.push(depId);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Exclude the seed task itself from the count
|
|
50
|
+
return visited.size;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Compute a simple keyword-overlap score between `text` and `keywords`.
|
|
54
|
+
*
|
|
55
|
+
* Both the text and keywords are normalised to lower-case before comparison.
|
|
56
|
+
* Each keyword that appears in the text contributes +1 to the score.
|
|
57
|
+
*/
|
|
58
|
+
function keywordScore(text, keywords) {
|
|
59
|
+
const lower = text.toLowerCase();
|
|
60
|
+
return keywords.reduce((acc, kw) => acc + (lower.includes(kw.toLowerCase()) ? 1 : 0), 0);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract a list of meaningful keywords from a string for capability matching.
|
|
64
|
+
*
|
|
65
|
+
* Strips common stop-words so that incidental matches (e.g. "the", "and") do
|
|
66
|
+
* not inflate scores. Returns unique words longer than three characters.
|
|
67
|
+
*/
|
|
68
|
+
function extractKeywords(text) {
|
|
69
|
+
const STOP_WORDS = new Set([
|
|
70
|
+
'the', 'and', 'for', 'that', 'this', 'with', 'are', 'from', 'have',
|
|
71
|
+
'will', 'your', 'you', 'can', 'all', 'each', 'when', 'then', 'they',
|
|
72
|
+
'them', 'their', 'about', 'into', 'more', 'also', 'should', 'must',
|
|
73
|
+
]);
|
|
74
|
+
return [...new Set(text
|
|
75
|
+
.toLowerCase()
|
|
76
|
+
.split(/\W+/)
|
|
77
|
+
.filter((w) => w.length > 3 && !STOP_WORDS.has(w)))];
|
|
78
|
+
}
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Scheduler
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
/**
|
|
83
|
+
* Maps pending tasks to available agents using one of four configurable strategies.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* const scheduler = new Scheduler('capability-match')
|
|
88
|
+
*
|
|
89
|
+
* // Get a full assignment map from tasks to agent names
|
|
90
|
+
* const assignments = scheduler.schedule(pendingTasks, teamAgents)
|
|
91
|
+
*
|
|
92
|
+
* // Or let the scheduler directly update a TaskQueue
|
|
93
|
+
* scheduler.autoAssign(queue, teamAgents)
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export class Scheduler {
|
|
97
|
+
strategy;
|
|
98
|
+
/** Rolling cursor used by `round-robin` to distribute tasks sequentially. */
|
|
99
|
+
roundRobinCursor = 0;
|
|
100
|
+
/**
|
|
101
|
+
* @param strategy - The scheduling algorithm to apply. Defaults to
|
|
102
|
+
* `'dependency-first'` which is the safest default for
|
|
103
|
+
* complex multi-step pipelines.
|
|
104
|
+
*/
|
|
105
|
+
constructor(strategy = 'dependency-first') {
|
|
106
|
+
this.strategy = strategy;
|
|
107
|
+
}
|
|
108
|
+
// -------------------------------------------------------------------------
|
|
109
|
+
// Primary API
|
|
110
|
+
// -------------------------------------------------------------------------
|
|
111
|
+
/**
|
|
112
|
+
* Given a list of pending `tasks` and `agents`, return a mapping from
|
|
113
|
+
* `taskId` to `agentName` representing the recommended assignment.
|
|
114
|
+
*
|
|
115
|
+
* Only tasks without an existing `assignee` are considered. Tasks that are
|
|
116
|
+
* already assigned are preserved unchanged.
|
|
117
|
+
*
|
|
118
|
+
* The method is deterministic for all strategies except `round-robin`, which
|
|
119
|
+
* advances an internal cursor and therefore produces different results across
|
|
120
|
+
* successive calls with the same inputs.
|
|
121
|
+
*
|
|
122
|
+
* @param tasks - Snapshot of all tasks in the current run (any status).
|
|
123
|
+
* @param agents - Available agent configurations.
|
|
124
|
+
* @returns A `Map<taskId, agentName>` for every unassigned pending task.
|
|
125
|
+
*/
|
|
126
|
+
schedule(tasks, agents) {
|
|
127
|
+
if (agents.length === 0)
|
|
128
|
+
return new Map();
|
|
129
|
+
const unassigned = tasks.filter((t) => t.status === 'pending' && !t.assignee);
|
|
130
|
+
switch (this.strategy) {
|
|
131
|
+
case 'round-robin':
|
|
132
|
+
return this.scheduleRoundRobin(unassigned, agents);
|
|
133
|
+
case 'least-busy':
|
|
134
|
+
return this.scheduleLeastBusy(unassigned, agents, tasks);
|
|
135
|
+
case 'capability-match':
|
|
136
|
+
return this.scheduleCapabilityMatch(unassigned, agents);
|
|
137
|
+
case 'dependency-first':
|
|
138
|
+
return this.scheduleDependencyFirst(unassigned, agents, tasks);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Convenience method that applies assignments returned by {@link schedule}
|
|
143
|
+
* directly to a live `TaskQueue`.
|
|
144
|
+
*
|
|
145
|
+
* Iterates all pending, unassigned tasks in the queue and sets `assignee` for
|
|
146
|
+
* each according to the current strategy. Skips tasks that are already
|
|
147
|
+
* assigned, non-pending, or whose IDs are not found in the queue snapshot.
|
|
148
|
+
*
|
|
149
|
+
* @param queue - The live task queue to mutate.
|
|
150
|
+
* @param agents - Available agent configurations.
|
|
151
|
+
*/
|
|
152
|
+
autoAssign(queue, agents) {
|
|
153
|
+
const allTasks = queue.list();
|
|
154
|
+
const assignments = this.schedule(allTasks, agents);
|
|
155
|
+
for (const [taskId, agentName] of assignments) {
|
|
156
|
+
try {
|
|
157
|
+
queue.update(taskId, { assignee: agentName });
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Task may have been completed/failed between snapshot and now — skip.
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// -------------------------------------------------------------------------
|
|
165
|
+
// Strategy implementations
|
|
166
|
+
// -------------------------------------------------------------------------
|
|
167
|
+
/**
|
|
168
|
+
* Round-robin: assign tasks to agents in order, cycling back to the start.
|
|
169
|
+
*
|
|
170
|
+
* The cursor advances with every call so that repeated calls with the same
|
|
171
|
+
* task set continue distributing work — rather than always starting from
|
|
172
|
+
* agent[0].
|
|
173
|
+
*/
|
|
174
|
+
scheduleRoundRobin(unassigned, agents) {
|
|
175
|
+
const result = new Map();
|
|
176
|
+
for (const task of unassigned) {
|
|
177
|
+
const agent = agents[this.roundRobinCursor % agents.length];
|
|
178
|
+
result.set(task.id, agent.name);
|
|
179
|
+
this.roundRobinCursor = (this.roundRobinCursor + 1) % agents.length;
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Least-busy: assign each task to the agent with the fewest `in_progress`
|
|
185
|
+
* tasks at the time the schedule is computed.
|
|
186
|
+
*
|
|
187
|
+
* Agent load is derived from the `in_progress` count in `allTasks`. Ties are
|
|
188
|
+
* broken by the agent's position in the `agents` array (earlier = preferred).
|
|
189
|
+
*/
|
|
190
|
+
scheduleLeastBusy(unassigned, agents, allTasks) {
|
|
191
|
+
// Build initial in-progress count per agent.
|
|
192
|
+
const load = new Map(agents.map((a) => [a.name, 0]));
|
|
193
|
+
for (const task of allTasks) {
|
|
194
|
+
if (task.status === 'in_progress' && task.assignee) {
|
|
195
|
+
const current = load.get(task.assignee) ?? 0;
|
|
196
|
+
load.set(task.assignee, current + 1);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const result = new Map();
|
|
200
|
+
for (const task of unassigned) {
|
|
201
|
+
// Pick the agent with the lowest current load.
|
|
202
|
+
let bestAgent = agents[0];
|
|
203
|
+
let bestLoad = load.get(bestAgent.name) ?? 0;
|
|
204
|
+
for (let i = 1; i < agents.length; i++) {
|
|
205
|
+
const agent = agents[i];
|
|
206
|
+
const agentLoad = load.get(agent.name) ?? 0;
|
|
207
|
+
if (agentLoad < bestLoad) {
|
|
208
|
+
bestLoad = agentLoad;
|
|
209
|
+
bestAgent = agent;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
result.set(task.id, bestAgent.name);
|
|
213
|
+
// Increment the simulated load so subsequent tasks in this batch avoid
|
|
214
|
+
// piling onto the same agent.
|
|
215
|
+
load.set(bestAgent.name, (load.get(bestAgent.name) ?? 0) + 1);
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Capability-match: score each agent against each task by keyword overlap
|
|
221
|
+
* between the task's title/description and the agent's `systemPrompt` and
|
|
222
|
+
* `name`. The highest-scoring agent wins.
|
|
223
|
+
*
|
|
224
|
+
* Falls back to round-robin when no agent has any positive score.
|
|
225
|
+
*/
|
|
226
|
+
scheduleCapabilityMatch(unassigned, agents) {
|
|
227
|
+
const result = new Map();
|
|
228
|
+
// Pre-compute keyword lists for each agent to avoid re-extracting per task.
|
|
229
|
+
const agentKeywords = new Map(agents.map((a) => [
|
|
230
|
+
a.name,
|
|
231
|
+
extractKeywords(`${a.name} ${a.systemPrompt ?? ''} ${a.model}`),
|
|
232
|
+
]));
|
|
233
|
+
for (const task of unassigned) {
|
|
234
|
+
const taskText = `${task.title} ${task.description}`;
|
|
235
|
+
const taskKeywords = extractKeywords(taskText);
|
|
236
|
+
let bestAgent = agents[0];
|
|
237
|
+
let bestScore = -1;
|
|
238
|
+
for (const agent of agents) {
|
|
239
|
+
// Score in both directions: task keywords vs agent text, and agent
|
|
240
|
+
// keywords vs task text, then take the max.
|
|
241
|
+
const agentText = `${agent.name} ${agent.systemPrompt ?? ''}`;
|
|
242
|
+
const scoreA = keywordScore(agentText, taskKeywords);
|
|
243
|
+
const scoreB = keywordScore(taskText, agentKeywords.get(agent.name) ?? []);
|
|
244
|
+
const score = scoreA + scoreB;
|
|
245
|
+
if (score > bestScore) {
|
|
246
|
+
bestScore = score;
|
|
247
|
+
bestAgent = agent;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
result.set(task.id, bestAgent.name);
|
|
251
|
+
}
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Dependency-first: prioritise tasks by how many other tasks are blocked
|
|
256
|
+
* waiting for them (the "critical path" heuristic).
|
|
257
|
+
*
|
|
258
|
+
* Tasks with more downstream dependents are assigned to agents first. Within
|
|
259
|
+
* the same criticality tier the agents are selected round-robin so no single
|
|
260
|
+
* agent is overloaded.
|
|
261
|
+
*/
|
|
262
|
+
scheduleDependencyFirst(unassigned, agents, allTasks) {
|
|
263
|
+
// Sort by descending blocked-dependent count so high-criticality tasks
|
|
264
|
+
// get first choice of agents.
|
|
265
|
+
const ranked = [...unassigned].sort((a, b) => {
|
|
266
|
+
const critA = countBlockedDependents(a.id, allTasks);
|
|
267
|
+
const critB = countBlockedDependents(b.id, allTasks);
|
|
268
|
+
return critB - critA;
|
|
269
|
+
});
|
|
270
|
+
const result = new Map();
|
|
271
|
+
let cursor = this.roundRobinCursor;
|
|
272
|
+
for (const task of ranked) {
|
|
273
|
+
const agent = agents[cursor % agents.length];
|
|
274
|
+
result.set(task.id, agent.name);
|
|
275
|
+
cursor = (cursor + 1) % agents.length;
|
|
276
|
+
}
|
|
277
|
+
// Advance the shared cursor for consistency with round-robin.
|
|
278
|
+
this.roundRobinCursor = cursor;
|
|
279
|
+
return result;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/orchestrator/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Dependency-aware task queue.
|
|
3
|
+
*
|
|
4
|
+
* {@link TaskQueue} owns the mutable lifecycle of every task it holds.
|
|
5
|
+
* Completing a task automatically unblocks dependents and fires events so
|
|
6
|
+
* orchestrators can react without polling.
|
|
7
|
+
*/
|
|
8
|
+
import type { Task, TaskStatus } from '../types.js';
|
|
9
|
+
/** Named event types emitted by {@link TaskQueue}. */
|
|
10
|
+
export type TaskQueueEvent = 'task:ready' | 'task:complete' | 'task:failed' | 'all:complete';
|
|
11
|
+
/** Handler for `'task:ready' | 'task:complete' | 'task:failed'` events. */
|
|
12
|
+
type TaskHandler = (task: Task) => void;
|
|
13
|
+
/** Handler for `'all:complete'` (no task argument). */
|
|
14
|
+
type AllCompleteHandler = () => void;
|
|
15
|
+
type HandlerFor<E extends TaskQueueEvent> = E extends 'all:complete' ? AllCompleteHandler : TaskHandler;
|
|
16
|
+
/**
|
|
17
|
+
* Mutable, event-driven queue with topological dependency resolution.
|
|
18
|
+
*
|
|
19
|
+
* Tasks enter in `'pending'` state. The queue promotes them to `'blocked'`
|
|
20
|
+
* when unresolved dependencies exist, and back to `'pending'` (firing
|
|
21
|
+
* `'task:ready'`) when those dependencies complete. Callers drive execution by
|
|
22
|
+
* calling {@link next} / {@link nextAvailable} and updating task state via
|
|
23
|
+
* {@link complete} or {@link fail}.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const queue = new TaskQueue()
|
|
28
|
+
* queue.on('task:ready', (task) => scheduleExecution(task))
|
|
29
|
+
* queue.on('all:complete', () => shutdown())
|
|
30
|
+
*
|
|
31
|
+
* queue.addBatch(tasks)
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare class TaskQueue {
|
|
35
|
+
private readonly tasks;
|
|
36
|
+
/** Listeners keyed by event type, stored as symbol → handler pairs. */
|
|
37
|
+
private readonly listeners;
|
|
38
|
+
/**
|
|
39
|
+
* Adds a single task.
|
|
40
|
+
*
|
|
41
|
+
* If the task has unresolved dependencies it is immediately promoted to
|
|
42
|
+
* `'blocked'`; otherwise it stays `'pending'` and `'task:ready'` fires.
|
|
43
|
+
*/
|
|
44
|
+
add(task: Task): void;
|
|
45
|
+
/**
|
|
46
|
+
* Adds multiple tasks at once.
|
|
47
|
+
*
|
|
48
|
+
* Processing each task re-evaluates the current map state, so inserting a
|
|
49
|
+
* batch where some tasks satisfy others' dependencies produces correct initial
|
|
50
|
+
* statuses when the dependencies appear first in the array. Use
|
|
51
|
+
* {@link getTaskDependencyOrder} from `task.ts` to pre-sort if needed.
|
|
52
|
+
*/
|
|
53
|
+
addBatch(tasks: Task[]): void;
|
|
54
|
+
/**
|
|
55
|
+
* Applies a partial update to an existing task.
|
|
56
|
+
*
|
|
57
|
+
* Only `status`, `result`, and `assignee` are accepted to keep the update
|
|
58
|
+
* surface narrow. Use {@link complete} and {@link fail} for terminal states.
|
|
59
|
+
*
|
|
60
|
+
* @throws {Error} when `taskId` is not found.
|
|
61
|
+
*/
|
|
62
|
+
update(taskId: string, update: Partial<Pick<Task, 'status' | 'result' | 'assignee'>>): Task;
|
|
63
|
+
/**
|
|
64
|
+
* Marks `taskId` as `'completed'`, records an optional `result` string, and
|
|
65
|
+
* unblocks any dependents that are now ready to run.
|
|
66
|
+
*
|
|
67
|
+
* Fires `'task:complete'`, then `'task:ready'` for each newly-unblocked task,
|
|
68
|
+
* then `'all:complete'` when the queue is fully resolved.
|
|
69
|
+
*
|
|
70
|
+
* @throws {Error} when `taskId` is not found.
|
|
71
|
+
*/
|
|
72
|
+
complete(taskId: string, result?: string): Task;
|
|
73
|
+
/**
|
|
74
|
+
* Marks `taskId` as `'failed'` and records `error` in the `result` field.
|
|
75
|
+
*
|
|
76
|
+
* Fires `'task:failed'` for the failed task and for every downstream task
|
|
77
|
+
* that transitively depended on it (cascade failure). This prevents blocked
|
|
78
|
+
* tasks from remaining stuck indefinitely when an upstream dependency fails.
|
|
79
|
+
*
|
|
80
|
+
* @throws {Error} when `taskId` is not found.
|
|
81
|
+
*/
|
|
82
|
+
fail(taskId: string, error: string): Task;
|
|
83
|
+
/**
|
|
84
|
+
* Recursively marks all tasks that (transitively) depend on `failedTaskId`
|
|
85
|
+
* as `'failed'` with an informative message, firing `'task:failed'` for each.
|
|
86
|
+
*
|
|
87
|
+
* Only tasks in `'blocked'` or `'pending'` state are affected; tasks already
|
|
88
|
+
* in a terminal state are left untouched.
|
|
89
|
+
*/
|
|
90
|
+
private cascadeFailure;
|
|
91
|
+
/**
|
|
92
|
+
* Returns the next `'pending'` task for `assignee` (matched against
|
|
93
|
+
* `task.assignee`), or `undefined` if none exists.
|
|
94
|
+
*
|
|
95
|
+
* If `assignee` is omitted, behaves like {@link nextAvailable}.
|
|
96
|
+
*/
|
|
97
|
+
next(assignee?: string): Task | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Returns the next `'pending'` task that has no `assignee` restriction, or
|
|
100
|
+
* the first `'pending'` task overall when all pending tasks have an assignee.
|
|
101
|
+
*/
|
|
102
|
+
nextAvailable(): Task | undefined;
|
|
103
|
+
/** Returns a snapshot array of all tasks (any status). */
|
|
104
|
+
list(): Task[];
|
|
105
|
+
/** Returns all tasks whose `status` matches `status`. */
|
|
106
|
+
getByStatus(status: TaskStatus): Task[];
|
|
107
|
+
/**
|
|
108
|
+
* Returns `true` when every task in the queue has reached a terminal state
|
|
109
|
+
* (`'completed'` or `'failed'`), **or** the queue is empty.
|
|
110
|
+
*/
|
|
111
|
+
isComplete(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Returns a progress snapshot.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const { completed, total } = queue.getProgress()
|
|
118
|
+
* console.log(`${completed}/${total} tasks done`)
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
getProgress(): {
|
|
122
|
+
total: number;
|
|
123
|
+
completed: number;
|
|
124
|
+
failed: number;
|
|
125
|
+
inProgress: number;
|
|
126
|
+
pending: number;
|
|
127
|
+
blocked: number;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Subscribes to a queue event.
|
|
131
|
+
*
|
|
132
|
+
* @returns An unsubscribe function. Calling it is idempotent.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* const off = queue.on('task:ready', (task) => execute(task))
|
|
137
|
+
* // later…
|
|
138
|
+
* off()
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
on<E extends TaskQueueEvent>(event: E, handler: HandlerFor<E>): () => void;
|
|
142
|
+
/**
|
|
143
|
+
* Evaluates whether `task` should start as `'blocked'` based on the tasks
|
|
144
|
+
* already registered in the queue.
|
|
145
|
+
*/
|
|
146
|
+
private resolveInitialStatus;
|
|
147
|
+
/**
|
|
148
|
+
* After a task completes, scan all `'blocked'` tasks and promote any that are
|
|
149
|
+
* now fully satisfied to `'pending'`, firing `'task:ready'` for each.
|
|
150
|
+
*
|
|
151
|
+
* The task array and lookup map are built once for the entire scan to keep
|
|
152
|
+
* the operation O(n) rather than O(n²).
|
|
153
|
+
*/
|
|
154
|
+
private unblockDependents;
|
|
155
|
+
private emit;
|
|
156
|
+
private emitAllComplete;
|
|
157
|
+
private requireTask;
|
|
158
|
+
}
|
|
159
|
+
export {};
|
|
160
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/task/queue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAOnD,sDAAsD;AACtD,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,cAAc,CAAA;AAElB,2EAA2E;AAC3E,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;AACvC,uDAAuD;AACvD,KAAK,kBAAkB,GAAG,MAAM,IAAI,CAAA;AAEpC,KAAK,UAAU,CAAC,CAAC,SAAS,cAAc,IAAI,CAAC,SAAS,cAAc,GAChE,kBAAkB,GAClB,WAAW,CAAA;AAMf;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGvB;IAMH;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQrB;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAU7B;;;;;;;OAOG;IACH,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,GAC5D,IAAI;IAWP;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAU/C;;;;;;;;OAQG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAUzC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAWzC;;;OAGG;IACH,aAAa,IAAI,IAAI,GAAG,SAAS;IAYjC,0DAA0D;IAC1D,IAAI,IAAI,IAAI,EAAE;IAId,yDAAyD;IACzD,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE;IAIvC;;;OAGG;IACH,UAAU,IAAI,OAAO;IAOrB;;;;;;;;OAQG;IACH,WAAW,IAAI;QACb,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;KAChB;IAyCD;;;;;;;;;;;OAWG;IACH,EAAE,CAAC,CAAC,SAAS,cAAc,EACzB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GACrB,MAAM,IAAI;IAiBb;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,WAAW;CAKpB"}
|