robal-framework 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 +190 -0
- package/README.md +198 -0
- package/dist/bridge.d.ts +82 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +327 -0
- package/dist/bridge.js.map +1 -0
- package/dist/createAgentTeam.d.ts +51 -0
- package/dist/createAgentTeam.d.ts.map +1 -0
- package/dist/createAgentTeam.js +192 -0
- package/dist/createAgentTeam.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator.d.ts +51 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +125 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/server.d.ts +94 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +334 -0
- package/dist/server.js.map +1 -0
- package/dist/team.d.ts +17 -0
- package/dist/team.d.ts.map +1 -0
- package/dist/team.js +61 -0
- package/dist/team.js.map +1 -0
- package/dist/types.d.ts +215 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +51 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +181 -0
- package/dist/worker.js.map +1 -0
- package/package.json +32 -0
package/dist/team.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Team = void 0;
|
|
4
|
+
const worker_1 = require("./worker");
|
|
5
|
+
let taskCounter = 0;
|
|
6
|
+
class Team {
|
|
7
|
+
id;
|
|
8
|
+
name;
|
|
9
|
+
config;
|
|
10
|
+
emit;
|
|
11
|
+
constructor(id, config, emit) {
|
|
12
|
+
this.id = id;
|
|
13
|
+
this.name = config.name || id;
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.emit = emit;
|
|
16
|
+
}
|
|
17
|
+
/** Run a single task through this team's agent + review cycle. */
|
|
18
|
+
async run(prompt, context) {
|
|
19
|
+
const taskId = `task-${++taskCounter}-${Date.now().toString(36)}`;
|
|
20
|
+
const task = { id: taskId, prompt, teamId: this.id, context };
|
|
21
|
+
this.emit({ type: 'task:started', teamId: this.id, taskId });
|
|
22
|
+
const worker = new worker_1.Worker({
|
|
23
|
+
agent: this.config.agent,
|
|
24
|
+
reviewer: this.config.reviewer,
|
|
25
|
+
maxCycles: this.config.maxCycles,
|
|
26
|
+
maxDepth: this.config.maxDepth,
|
|
27
|
+
maxWorkers: this.config.maxWorkers,
|
|
28
|
+
timeoutMs: this.config.timeoutMs,
|
|
29
|
+
name: this.name,
|
|
30
|
+
onEvent: (event) => this.emit({ type: 'worker', event }),
|
|
31
|
+
onReview: (task, result, attempt) => this.emit({ type: 'review', teamId: this.id, taskId: task.id, result, attempt }),
|
|
32
|
+
});
|
|
33
|
+
const output = await worker.run(task);
|
|
34
|
+
if (output.status === 'failed') {
|
|
35
|
+
this.emit({ type: 'task:failed', teamId: this.id, taskId, error: output.error || 'Unknown error' });
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.emit({ type: 'task:completed', teamId: this.id, taskId, output: output.output });
|
|
39
|
+
}
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
/** Delegate subtasks to parallel child workers under this team. Optionally pass a different agent per subtask. */
|
|
43
|
+
async delegate(subtasks, parentPrompt, context) {
|
|
44
|
+
const parentTaskId = `task-${++taskCounter}-${Date.now().toString(36)}`;
|
|
45
|
+
const parentTask = { id: parentTaskId, prompt: parentPrompt, teamId: this.id, context };
|
|
46
|
+
const worker = new worker_1.Worker({
|
|
47
|
+
agent: this.config.agent,
|
|
48
|
+
reviewer: this.config.reviewer,
|
|
49
|
+
maxCycles: this.config.maxCycles,
|
|
50
|
+
maxDepth: this.config.maxDepth,
|
|
51
|
+
maxWorkers: this.config.maxWorkers,
|
|
52
|
+
timeoutMs: this.config.timeoutMs,
|
|
53
|
+
name: this.name,
|
|
54
|
+
onEvent: (event) => this.emit({ type: 'worker', event }),
|
|
55
|
+
onReview: (task, result, attempt) => this.emit({ type: 'review', teamId: this.id, taskId: task.id, result, attempt }),
|
|
56
|
+
});
|
|
57
|
+
return worker.delegate(subtasks, parentTask);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.Team = Team;
|
|
61
|
+
//# sourceMappingURL=team.js.map
|
package/dist/team.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.js","sourceRoot":"","sources":["../src/team.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The core agent interface. Implement this to plug any AI agent into robal.
|
|
3
|
+
*
|
|
4
|
+
* An agent receives a task and returns a result. That's it.
|
|
5
|
+
* The framework handles orchestration, delegation, review cycles, and coordination.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const myAgent: Agent = {
|
|
10
|
+
* async execute(task) {
|
|
11
|
+
* const result = await callOpenAI(task.prompt);
|
|
12
|
+
* return { status: 'completed', output: result };
|
|
13
|
+
* }
|
|
14
|
+
* };
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export interface Agent {
|
|
18
|
+
/** Execute a task and return a result. */
|
|
19
|
+
execute(task: TaskInput): Promise<TaskOutput>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Optional: a reviewer that evaluates agent output.
|
|
23
|
+
* If not provided, the framework auto-approves all output.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const reviewer: Reviewer = {
|
|
28
|
+
* async review(task, output) {
|
|
29
|
+
* const score = await llmJudge(task.prompt, output.output);
|
|
30
|
+
* return { approved: score > 0.8, confidence: score, feedback: 'Needs more detail' };
|
|
31
|
+
* }
|
|
32
|
+
* };
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export interface Reviewer {
|
|
36
|
+
/** Review an agent's output. Return approval or feedback for retry. */
|
|
37
|
+
review(task: TaskInput, output: TaskOutput): Promise<ReviewResult>;
|
|
38
|
+
}
|
|
39
|
+
export interface TaskInput {
|
|
40
|
+
/** Unique task ID */
|
|
41
|
+
id: string;
|
|
42
|
+
/** The goal / instruction for the agent */
|
|
43
|
+
prompt: string;
|
|
44
|
+
/** Which team this task belongs to */
|
|
45
|
+
teamId: string;
|
|
46
|
+
/** Additional context from previous steps, parent tasks, or knowledge */
|
|
47
|
+
context?: TaskContext;
|
|
48
|
+
/** Constraints the agent should respect */
|
|
49
|
+
constraints?: TaskConstraints;
|
|
50
|
+
/** Feedback from a previous review cycle (retry) */
|
|
51
|
+
feedback?: string;
|
|
52
|
+
/** Output from the previous attempt (so the agent can iterate on it) */
|
|
53
|
+
previousOutput?: string;
|
|
54
|
+
/** Which attempt this is (1-based) */
|
|
55
|
+
attempt?: number;
|
|
56
|
+
/** Current depth in the delegation hierarchy (0 = root) */
|
|
57
|
+
depth?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Delegate subtasks to child agents. Call this from inside execute() to
|
|
60
|
+
* build arbitrarily deep hierarchies. Returns the output of each subtask.
|
|
61
|
+
*
|
|
62
|
+
* Returns undefined if delegation is not available (max depth reached).
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const agent: Agent = {
|
|
67
|
+
* async execute(task) {
|
|
68
|
+
* if (task.delegate) {
|
|
69
|
+
* const results = await task.delegate([
|
|
70
|
+
* { prompt: 'Research competitors', name: 'Researcher' },
|
|
71
|
+
* { prompt: 'Analyze financials', name: 'Analyst' },
|
|
72
|
+
* ]);
|
|
73
|
+
* return { status: 'completed', output: results.join('\n\n') };
|
|
74
|
+
* }
|
|
75
|
+
* // Leaf node — do the actual work
|
|
76
|
+
* return { status: 'completed', output: await doWork(task.prompt) };
|
|
77
|
+
* }
|
|
78
|
+
* };
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
delegate?: (subtasks: {
|
|
82
|
+
prompt: string;
|
|
83
|
+
name?: string;
|
|
84
|
+
agent?: Agent;
|
|
85
|
+
}[]) => Promise<string[]>;
|
|
86
|
+
}
|
|
87
|
+
export interface TaskContext {
|
|
88
|
+
/** Output from upstream tasks / parent agents */
|
|
89
|
+
previousOutputs?: string[];
|
|
90
|
+
/** Files available to the agent */
|
|
91
|
+
files?: {
|
|
92
|
+
path: string;
|
|
93
|
+
content: string;
|
|
94
|
+
}[];
|
|
95
|
+
/** Knowledge base entries */
|
|
96
|
+
knowledge?: string[];
|
|
97
|
+
/** Arbitrary metadata */
|
|
98
|
+
metadata?: Record<string, unknown>;
|
|
99
|
+
}
|
|
100
|
+
export interface TaskConstraints {
|
|
101
|
+
maxTokens?: number;
|
|
102
|
+
maxCostUsd?: number;
|
|
103
|
+
timeoutMs?: number;
|
|
104
|
+
/** Restrict which tools/actions the agent can use */
|
|
105
|
+
allowedActions?: string[];
|
|
106
|
+
blockedActions?: string[];
|
|
107
|
+
}
|
|
108
|
+
export interface TaskOutput {
|
|
109
|
+
status: 'completed' | 'failed' | 'partial';
|
|
110
|
+
output: string;
|
|
111
|
+
/** Artifacts produced (files, images, data) */
|
|
112
|
+
artifacts?: Artifact[];
|
|
113
|
+
/** Self-reported usage for cost tracking */
|
|
114
|
+
usage?: UsageReport;
|
|
115
|
+
error?: string;
|
|
116
|
+
}
|
|
117
|
+
export interface Artifact {
|
|
118
|
+
name: string;
|
|
119
|
+
type: string;
|
|
120
|
+
content?: string;
|
|
121
|
+
url?: string;
|
|
122
|
+
}
|
|
123
|
+
export interface UsageReport {
|
|
124
|
+
inputTokens?: number;
|
|
125
|
+
outputTokens?: number;
|
|
126
|
+
costUsd?: number;
|
|
127
|
+
latencyMs?: number;
|
|
128
|
+
model?: string;
|
|
129
|
+
}
|
|
130
|
+
export interface ReviewResult {
|
|
131
|
+
approved: boolean;
|
|
132
|
+
confidence: number;
|
|
133
|
+
feedback: string;
|
|
134
|
+
}
|
|
135
|
+
export type WorkerStatus = 'pending' | 'working' | 'reviewing' | 'delegating' | 'completed' | 'failed' | 'canceled';
|
|
136
|
+
export interface WorkerEvent {
|
|
137
|
+
workerId: string;
|
|
138
|
+
workerName: string;
|
|
139
|
+
status: WorkerStatus;
|
|
140
|
+
task: string;
|
|
141
|
+
parentId?: string;
|
|
142
|
+
output?: string;
|
|
143
|
+
error?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface TeamConfig {
|
|
146
|
+
/** Human-readable name */
|
|
147
|
+
name?: string;
|
|
148
|
+
/** The agent implementation for this team */
|
|
149
|
+
agent: Agent;
|
|
150
|
+
/** Optional reviewer — if omitted, output is auto-approved */
|
|
151
|
+
reviewer?: Reviewer;
|
|
152
|
+
/** Max review-retry cycles before accepting output */
|
|
153
|
+
maxCycles?: number;
|
|
154
|
+
/** Max parallel workers when delegating */
|
|
155
|
+
maxWorkers?: number;
|
|
156
|
+
/** Max delegation depth (0 = no delegation) */
|
|
157
|
+
maxDepth?: number;
|
|
158
|
+
/** Timeout per task in ms */
|
|
159
|
+
timeoutMs?: number;
|
|
160
|
+
}
|
|
161
|
+
export interface OrchestratorConfig {
|
|
162
|
+
/** Named teams, each with their own agent */
|
|
163
|
+
teams: Record<string, TeamConfig>;
|
|
164
|
+
/** How tasks flow between teams */
|
|
165
|
+
channels?: Channel[];
|
|
166
|
+
/** Global event listener */
|
|
167
|
+
onEvent?: (event: OrchestratorEvent) => void;
|
|
168
|
+
}
|
|
169
|
+
export interface Channel {
|
|
170
|
+
from: string;
|
|
171
|
+
to: string;
|
|
172
|
+
/** Transform the output before passing to the next team */
|
|
173
|
+
transform?: (output: string) => string;
|
|
174
|
+
/** Gate: if provided, output is held until gate returns true */
|
|
175
|
+
gate?: (output: string) => Promise<boolean> | boolean;
|
|
176
|
+
}
|
|
177
|
+
export type OrchestratorEvent = {
|
|
178
|
+
type: 'worker';
|
|
179
|
+
event: WorkerEvent;
|
|
180
|
+
} | {
|
|
181
|
+
type: 'task:started';
|
|
182
|
+
teamId: string;
|
|
183
|
+
taskId: string;
|
|
184
|
+
} | {
|
|
185
|
+
type: 'task:completed';
|
|
186
|
+
teamId: string;
|
|
187
|
+
taskId: string;
|
|
188
|
+
output: string;
|
|
189
|
+
} | {
|
|
190
|
+
type: 'task:failed';
|
|
191
|
+
teamId: string;
|
|
192
|
+
taskId: string;
|
|
193
|
+
error: string;
|
|
194
|
+
} | {
|
|
195
|
+
type: 'review';
|
|
196
|
+
teamId: string;
|
|
197
|
+
taskId: string;
|
|
198
|
+
result: ReviewResult;
|
|
199
|
+
attempt: number;
|
|
200
|
+
} | {
|
|
201
|
+
type: 'delegation';
|
|
202
|
+
parentId: string;
|
|
203
|
+
children: string[];
|
|
204
|
+
} | {
|
|
205
|
+
type: 'channel:routed';
|
|
206
|
+
from: string;
|
|
207
|
+
to: string;
|
|
208
|
+
taskId: string;
|
|
209
|
+
} | {
|
|
210
|
+
type: 'channel:gated';
|
|
211
|
+
from: string;
|
|
212
|
+
to: string;
|
|
213
|
+
taskId: string;
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,uBAAuB;AACvB,qEAAqE"}
|
package/dist/worker.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Agent, Reviewer, TaskInput, TaskOutput, ReviewResult, WorkerStatus, WorkerEvent } from './types';
|
|
2
|
+
/** Reset the internal worker counter. Useful for testing. */
|
|
3
|
+
export declare function _resetWorkerCounter(): void;
|
|
4
|
+
export declare class Worker {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly parentId: string | null;
|
|
8
|
+
private agent;
|
|
9
|
+
private reviewer;
|
|
10
|
+
private maxCycles;
|
|
11
|
+
private timeoutMs;
|
|
12
|
+
private depth;
|
|
13
|
+
private maxDepth;
|
|
14
|
+
private maxWorkers;
|
|
15
|
+
private onEvent;
|
|
16
|
+
private onReview;
|
|
17
|
+
private aborted;
|
|
18
|
+
private activeChildren;
|
|
19
|
+
status: WorkerStatus;
|
|
20
|
+
constructor(opts: {
|
|
21
|
+
agent: Agent;
|
|
22
|
+
reviewer?: Reviewer;
|
|
23
|
+
maxCycles?: number;
|
|
24
|
+
maxDepth?: number;
|
|
25
|
+
maxWorkers?: number;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
depth?: number;
|
|
28
|
+
parentId?: string | null;
|
|
29
|
+
name?: string;
|
|
30
|
+
onEvent?: (event: WorkerEvent) => void;
|
|
31
|
+
onReview?: (task: TaskInput, result: ReviewResult, attempt: number) => void;
|
|
32
|
+
});
|
|
33
|
+
abort(): void;
|
|
34
|
+
private emit;
|
|
35
|
+
/**
|
|
36
|
+
* Run the agent through the review cycle.
|
|
37
|
+
* execute → review → feedback → retry (up to maxCycles)
|
|
38
|
+
*/
|
|
39
|
+
run(task: TaskInput): Promise<TaskOutput>;
|
|
40
|
+
/**
|
|
41
|
+
* Delegate subtasks to child workers, run in parallel, collect results.
|
|
42
|
+
* Optionally pass a different agent per subtask for mixed-agent delegation.
|
|
43
|
+
*/
|
|
44
|
+
delegate(subtasks: {
|
|
45
|
+
prompt: string;
|
|
46
|
+
name?: string;
|
|
47
|
+
agent?: Agent;
|
|
48
|
+
}[], parentTask: TaskInput): Promise<string[]>;
|
|
49
|
+
private executeWithTimeout;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI/G,6DAA6D;AAC7D,wBAAgB,mBAAmB,SAAyB;AAE5D,qBAAa,MAAM;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAA4E;IAC5F,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAgB;IACtC,MAAM,EAAE,YAAY,CAAa;gBAErB,IAAI,EAAE;QAChB,KAAK,EAAE,KAAK,CAAC;QACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;QACvC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAC7E;IAeD,KAAK;IAUL,OAAO,CAAC,IAAI;IAKZ;;;OAGG;IACG,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAiE/C;;;OAGG;IACG,QAAQ,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,EAAE,EAAE,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmDtH,OAAO,CAAC,kBAAkB;CAQ3B"}
|
package/dist/worker.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Worker = void 0;
|
|
4
|
+
exports._resetWorkerCounter = _resetWorkerCounter;
|
|
5
|
+
let workerCounter = 0;
|
|
6
|
+
/** Reset the internal worker counter. Useful for testing. */
|
|
7
|
+
function _resetWorkerCounter() { workerCounter = 0; }
|
|
8
|
+
class Worker {
|
|
9
|
+
id;
|
|
10
|
+
name;
|
|
11
|
+
parentId;
|
|
12
|
+
agent;
|
|
13
|
+
reviewer;
|
|
14
|
+
maxCycles;
|
|
15
|
+
timeoutMs;
|
|
16
|
+
depth;
|
|
17
|
+
maxDepth;
|
|
18
|
+
maxWorkers;
|
|
19
|
+
onEvent;
|
|
20
|
+
onReview;
|
|
21
|
+
aborted = false;
|
|
22
|
+
activeChildren = [];
|
|
23
|
+
status = 'pending';
|
|
24
|
+
constructor(opts) {
|
|
25
|
+
this.id = `w-${Date.now().toString(36)}-${++workerCounter}`;
|
|
26
|
+
this.name = opts.name || `Worker ${workerCounter}`;
|
|
27
|
+
this.agent = opts.agent;
|
|
28
|
+
this.reviewer = opts.reviewer ?? null;
|
|
29
|
+
this.maxCycles = opts.maxCycles ?? 3;
|
|
30
|
+
this.maxDepth = opts.maxDepth ?? 2;
|
|
31
|
+
this.maxWorkers = opts.maxWorkers ?? 5;
|
|
32
|
+
this.timeoutMs = opts.timeoutMs ?? 300_000;
|
|
33
|
+
this.depth = opts.depth ?? 0;
|
|
34
|
+
this.parentId = opts.parentId ?? null;
|
|
35
|
+
this.onEvent = opts.onEvent || (() => { });
|
|
36
|
+
this.onReview = opts.onReview || null;
|
|
37
|
+
}
|
|
38
|
+
abort() {
|
|
39
|
+
this.aborted = true;
|
|
40
|
+
// Propagate to all children spawned via delegate handle
|
|
41
|
+
for (const child of this.activeChildren) {
|
|
42
|
+
child.abort();
|
|
43
|
+
}
|
|
44
|
+
this.activeChildren = [];
|
|
45
|
+
this.emit('canceled');
|
|
46
|
+
}
|
|
47
|
+
emit(status, output, error) {
|
|
48
|
+
this.status = status;
|
|
49
|
+
this.onEvent({ workerId: this.id, workerName: this.name, status, task: '', parentId: this.parentId || undefined, output, error });
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Run the agent through the review cycle.
|
|
53
|
+
* execute → review → feedback → retry (up to maxCycles)
|
|
54
|
+
*/
|
|
55
|
+
async run(task) {
|
|
56
|
+
this.emit('working');
|
|
57
|
+
let lastOutput = { status: 'failed', output: '', error: 'No execution' };
|
|
58
|
+
let feedback;
|
|
59
|
+
let previousOutput;
|
|
60
|
+
for (let attempt = 1; attempt <= this.maxCycles; attempt++) {
|
|
61
|
+
if (this.aborted) {
|
|
62
|
+
this.emit('canceled');
|
|
63
|
+
return { status: 'failed', output: '', error: 'Canceled' };
|
|
64
|
+
}
|
|
65
|
+
// Execute
|
|
66
|
+
this.emit('working');
|
|
67
|
+
const delegateHandle = this.depth < this.maxDepth
|
|
68
|
+
? (subtasks) => this.delegate(subtasks, task)
|
|
69
|
+
: undefined;
|
|
70
|
+
const input = { ...task, feedback, previousOutput, attempt, depth: this.depth, delegate: delegateHandle };
|
|
71
|
+
try {
|
|
72
|
+
lastOutput = await this.executeWithTimeout(input);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (this.aborted) {
|
|
76
|
+
this.emit('canceled');
|
|
77
|
+
return { status: 'failed', output: '', error: 'Canceled' };
|
|
78
|
+
}
|
|
79
|
+
lastOutput = { status: 'failed', output: '', error: err.message };
|
|
80
|
+
this.emit('failed', undefined, err.message);
|
|
81
|
+
return lastOutput;
|
|
82
|
+
}
|
|
83
|
+
if (lastOutput.status === 'failed') {
|
|
84
|
+
this.emit('failed', lastOutput.output, lastOutput.error);
|
|
85
|
+
return lastOutput;
|
|
86
|
+
}
|
|
87
|
+
// Review
|
|
88
|
+
if (!this.reviewer) {
|
|
89
|
+
this.emit('completed', lastOutput.output);
|
|
90
|
+
return lastOutput;
|
|
91
|
+
}
|
|
92
|
+
this.emit('reviewing');
|
|
93
|
+
let review;
|
|
94
|
+
try {
|
|
95
|
+
review = await this.reviewer.review(task, lastOutput);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Reviewer failed — accept the output
|
|
99
|
+
this.emit('completed', lastOutput.output);
|
|
100
|
+
return lastOutput;
|
|
101
|
+
}
|
|
102
|
+
this.onReview?.(task, review, attempt);
|
|
103
|
+
if (review.approved) {
|
|
104
|
+
this.emit('completed', lastOutput.output);
|
|
105
|
+
return lastOutput;
|
|
106
|
+
}
|
|
107
|
+
// Rejected — feed back for next attempt
|
|
108
|
+
feedback = review.feedback;
|
|
109
|
+
previousOutput = lastOutput.output;
|
|
110
|
+
if (attempt === this.maxCycles) {
|
|
111
|
+
this.emit('completed', lastOutput.output);
|
|
112
|
+
return lastOutput;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.emit('completed', lastOutput.output);
|
|
116
|
+
return lastOutput;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Delegate subtasks to child workers, run in parallel, collect results.
|
|
120
|
+
* Optionally pass a different agent per subtask for mixed-agent delegation.
|
|
121
|
+
*/
|
|
122
|
+
async delegate(subtasks, parentTask) {
|
|
123
|
+
if (this.depth >= this.maxDepth) {
|
|
124
|
+
throw new Error(`Max delegation depth (${this.maxDepth}) reached`);
|
|
125
|
+
}
|
|
126
|
+
if (this.aborted)
|
|
127
|
+
throw new Error('Canceled');
|
|
128
|
+
this.emit('delegating');
|
|
129
|
+
const limited = subtasks.slice(0, this.maxWorkers);
|
|
130
|
+
const children = limited.map((sub, i) => {
|
|
131
|
+
const child = new Worker({
|
|
132
|
+
agent: sub.agent || this.agent,
|
|
133
|
+
reviewer: this.reviewer || undefined,
|
|
134
|
+
maxCycles: this.maxCycles,
|
|
135
|
+
maxDepth: this.maxDepth,
|
|
136
|
+
maxWorkers: this.maxWorkers,
|
|
137
|
+
timeoutMs: this.timeoutMs,
|
|
138
|
+
depth: this.depth + 1,
|
|
139
|
+
parentId: this.id,
|
|
140
|
+
name: sub.name || `${this.name} → Sub ${i + 1}`,
|
|
141
|
+
onEvent: this.onEvent,
|
|
142
|
+
onReview: this.onReview || undefined,
|
|
143
|
+
});
|
|
144
|
+
return child;
|
|
145
|
+
});
|
|
146
|
+
// Track children so abort() can propagate
|
|
147
|
+
this.activeChildren.push(...children);
|
|
148
|
+
const results = await Promise.allSettled(children.map((child, i) => child.run({
|
|
149
|
+
id: `${parentTask.id}-sub-${i}`,
|
|
150
|
+
prompt: limited[i].prompt,
|
|
151
|
+
teamId: parentTask.teamId,
|
|
152
|
+
context: parentTask.context,
|
|
153
|
+
constraints: parentTask.constraints,
|
|
154
|
+
})));
|
|
155
|
+
// Clean up — children are done
|
|
156
|
+
this.activeChildren = this.activeChildren.filter(c => !children.includes(c));
|
|
157
|
+
this.emit('working');
|
|
158
|
+
return results.map((r, i) => {
|
|
159
|
+
if (r.status === 'fulfilled')
|
|
160
|
+
return r.value.output;
|
|
161
|
+
return `[${limited[i].name || `Sub ${i + 1}`}] Error: ${r.reason?.message || 'Unknown'}`;
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
executeWithTimeout(task) {
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
if (this.aborted) {
|
|
167
|
+
reject(new Error('Canceled'));
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const timer = setTimeout(() => reject(new Error(`Task timed out after ${this.timeoutMs}ms`)), this.timeoutMs);
|
|
171
|
+
const checkAbort = setInterval(() => { if (this.aborted) {
|
|
172
|
+
clearInterval(checkAbort);
|
|
173
|
+
clearTimeout(timer);
|
|
174
|
+
reject(new Error('Canceled'));
|
|
175
|
+
} }, 10);
|
|
176
|
+
this.agent.execute(task).then(resolve, reject).finally(() => { clearTimeout(timer); clearInterval(checkAbort); });
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.Worker = Worker;
|
|
181
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "robal-framework",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Agent orchestration framework — delegate, review, and coordinate any AI agents",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=18"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:watch": "vitest",
|
|
17
|
+
"lint": "tsc --noEmit"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"ai",
|
|
21
|
+
"agents",
|
|
22
|
+
"orchestration",
|
|
23
|
+
"multi-agent",
|
|
24
|
+
"framework"
|
|
25
|
+
],
|
|
26
|
+
"license": "Apache-2.0",
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^25.5.0",
|
|
29
|
+
"typescript": "^5.4.0",
|
|
30
|
+
"vitest": "^2.0.0"
|
|
31
|
+
}
|
|
32
|
+
}
|