va-agent-protocol 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 +558 -0
- package/bin/va-orchestrate.mjs +153 -0
- package/dist/adapter/agent-adapter.d.ts +79 -0
- package/dist/adapter/agent-adapter.d.ts.map +1 -0
- package/dist/adapter/agent-adapter.js +36 -0
- package/dist/adapter/agent-adapter.js.map +1 -0
- package/dist/adapter/codex-adapter.d.ts +54 -0
- package/dist/adapter/codex-adapter.d.ts.map +1 -0
- package/dist/adapter/codex-adapter.js +409 -0
- package/dist/adapter/codex-adapter.js.map +1 -0
- package/dist/adapter/va-auto-pilot-adapter.d.ts +51 -0
- package/dist/adapter/va-auto-pilot-adapter.d.ts.map +1 -0
- package/dist/adapter/va-auto-pilot-adapter.js +275 -0
- package/dist/adapter/va-auto-pilot-adapter.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +101 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +452 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/registry.d.ts +39 -0
- package/dist/orchestrator/registry.d.ts.map +1 -0
- package/dist/orchestrator/registry.js +62 -0
- package/dist/orchestrator/registry.js.map +1 -0
- package/dist/orchestrator/scheduler.d.ts +66 -0
- package/dist/orchestrator/scheduler.d.ts.map +1 -0
- package/dist/orchestrator/scheduler.js +155 -0
- package/dist/orchestrator/scheduler.js.map +1 -0
- package/dist/test/orchestrator-enqueue.test.d.ts +2 -0
- package/dist/test/orchestrator-enqueue.test.d.ts.map +1 -0
- package/dist/test/orchestrator-enqueue.test.js +64 -0
- package/dist/test/orchestrator-enqueue.test.js.map +1 -0
- package/dist/test/orchestrator-lifecycle.test.d.ts +2 -0
- package/dist/test/orchestrator-lifecycle.test.d.ts.map +1 -0
- package/dist/test/orchestrator-lifecycle.test.js +227 -0
- package/dist/test/orchestrator-lifecycle.test.js.map +1 -0
- package/dist/test/scheduler.test.d.ts +2 -0
- package/dist/test/scheduler.test.d.ts.map +1 -0
- package/dist/test/scheduler.test.js +140 -0
- package/dist/test/scheduler.test.js.map +1 -0
- package/dist/types/index.d.ts +209 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +45 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +61 -0
- package/schemas/agent-capability.schema.json +99 -0
- package/schemas/evidence.schema.json +201 -0
- package/schemas/lifecycle.schema.json +80 -0
- package/schemas/message.schema.json +181 -0
- package/schemas/task-unit.schema.json +137 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VaAutoPilotAdapter — wraps va-auto-pilot's sprint-board.mjs CLI
|
|
3
|
+
* as a protocol-compliant agent.
|
|
4
|
+
*
|
|
5
|
+
* Key design: we call va-auto-pilot via child_process, NOT via library import.
|
|
6
|
+
* This preserves the "convention-based" contract. Any tool that exposes the
|
|
7
|
+
* same CLI interface can be adapted with the same pattern.
|
|
8
|
+
*/
|
|
9
|
+
import { execFile } from "node:child_process";
|
|
10
|
+
import { readFile } from "node:fs/promises";
|
|
11
|
+
import { promisify } from "node:util";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import { generateCorrelationId } from "../types/index.js";
|
|
14
|
+
import { consoleLogger } from "../utils/logger.js";
|
|
15
|
+
import { BaseAdapter } from "./agent-adapter.js";
|
|
16
|
+
const execFileAsync = promisify(execFile);
|
|
17
|
+
/**
|
|
18
|
+
* Maps between va-auto-pilot's sprint-board CLI and the universal protocol.
|
|
19
|
+
*
|
|
20
|
+
* Execution flow:
|
|
21
|
+
* 1. dispatch() → sprint-board add + update "In Progress" → spawns worker
|
|
22
|
+
* 2. poll() → reads sprint-state.json via sprint-board next --json
|
|
23
|
+
* 3. cancel() → sprint-board update "Failed"
|
|
24
|
+
*/
|
|
25
|
+
export class VaAutoPilotAdapter extends BaseAdapter {
|
|
26
|
+
id;
|
|
27
|
+
projectRoot;
|
|
28
|
+
sprintBoardPath;
|
|
29
|
+
qualityGateCommand;
|
|
30
|
+
log;
|
|
31
|
+
runningProcesses = new Map();
|
|
32
|
+
constructor(options) {
|
|
33
|
+
super();
|
|
34
|
+
this.projectRoot = options.projectRoot;
|
|
35
|
+
this.id = `va-auto-pilot:${path.basename(options.projectRoot)}`;
|
|
36
|
+
this.sprintBoardPath =
|
|
37
|
+
options.sprintBoardPath ??
|
|
38
|
+
path.join(options.projectRoot, "scripts", "sprint-board.mjs");
|
|
39
|
+
this.qualityGateCommand =
|
|
40
|
+
options.qualityGateCommand ?? "npm run check:all";
|
|
41
|
+
this.log = options.logger ?? consoleLogger;
|
|
42
|
+
}
|
|
43
|
+
capabilities() {
|
|
44
|
+
return {
|
|
45
|
+
agentId: this.id,
|
|
46
|
+
name: "va-auto-pilot",
|
|
47
|
+
version: "0.1.0",
|
|
48
|
+
capabilities: [
|
|
49
|
+
"code-generation",
|
|
50
|
+
"code-review",
|
|
51
|
+
"testing",
|
|
52
|
+
"refactoring",
|
|
53
|
+
"strategic-decomposition",
|
|
54
|
+
],
|
|
55
|
+
modelRequirement: "frontier",
|
|
56
|
+
interface: {
|
|
57
|
+
type: "cli",
|
|
58
|
+
command: `node ${this.sprintBoardPath}`,
|
|
59
|
+
workingDirectory: this.projectRoot,
|
|
60
|
+
},
|
|
61
|
+
constraints: {
|
|
62
|
+
maxConcurrent: 1,
|
|
63
|
+
requiresNetwork: false,
|
|
64
|
+
requiresHumanApproval: ["destructive-operations", "architecture-decisions"],
|
|
65
|
+
maxRetries: 3,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async dispatch(task) {
|
|
70
|
+
const correlationId = generateCorrelationId();
|
|
71
|
+
try {
|
|
72
|
+
// 1. Add task to sprint board
|
|
73
|
+
const addResult = await this.runSprintBoard([
|
|
74
|
+
"add",
|
|
75
|
+
"--title",
|
|
76
|
+
task.objective,
|
|
77
|
+
"--priority",
|
|
78
|
+
task.priority ?? "P1",
|
|
79
|
+
"--source",
|
|
80
|
+
"va-agent-protocol",
|
|
81
|
+
]);
|
|
82
|
+
// Extract task ID from output (e.g., "Added AP-016 ...")
|
|
83
|
+
const taskIdMatch = addResult.stdout.match(/Added\s+(\S+)/);
|
|
84
|
+
const sprintTaskId = taskIdMatch?.[1];
|
|
85
|
+
if (!sprintTaskId) {
|
|
86
|
+
return {
|
|
87
|
+
correlationId,
|
|
88
|
+
accepted: false,
|
|
89
|
+
reason: `Failed to create task: ${addResult.stdout}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// 2. Move to "In Progress"
|
|
93
|
+
await this.runSprintBoard([
|
|
94
|
+
"update",
|
|
95
|
+
"--id",
|
|
96
|
+
sprintTaskId,
|
|
97
|
+
"--state",
|
|
98
|
+
"In Progress",
|
|
99
|
+
]);
|
|
100
|
+
// Track this execution
|
|
101
|
+
this.setExecution(correlationId, sprintTaskId, "running");
|
|
102
|
+
this.runningProcesses.set(correlationId, {});
|
|
103
|
+
return { correlationId, accepted: true };
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return {
|
|
107
|
+
correlationId,
|
|
108
|
+
accepted: false,
|
|
109
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async poll(correlationId) {
|
|
114
|
+
const execution = this.executions.get(correlationId);
|
|
115
|
+
if (!execution) {
|
|
116
|
+
return {
|
|
117
|
+
correlationId,
|
|
118
|
+
state: "failed",
|
|
119
|
+
evidence: {
|
|
120
|
+
taskId: "unknown",
|
|
121
|
+
status: "failed",
|
|
122
|
+
failureDetail: {
|
|
123
|
+
failureType: "unknown",
|
|
124
|
+
attempted: "poll",
|
|
125
|
+
hypothesis: `No execution found for correlation ${correlationId}`,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
// Read sprint-state.json directly to find the specific task by ID
|
|
132
|
+
const stateFilePath = path.join(this.projectRoot, ".va-auto-pilot", "sprint-state.json");
|
|
133
|
+
const stateContent = await readFile(stateFilePath, "utf-8");
|
|
134
|
+
const sprintState = JSON.parse(stateContent);
|
|
135
|
+
const task = sprintState.tasks.find((t) => t.id === execution.taskId);
|
|
136
|
+
if (!task) {
|
|
137
|
+
return {
|
|
138
|
+
correlationId,
|
|
139
|
+
state: "failed",
|
|
140
|
+
evidence: {
|
|
141
|
+
taskId: execution.taskId,
|
|
142
|
+
status: "failed",
|
|
143
|
+
failureDetail: {
|
|
144
|
+
failureType: "unknown",
|
|
145
|
+
attempted: "poll",
|
|
146
|
+
hypothesis: `Task ${execution.taskId} not found in sprint state`,
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Map va-auto-pilot states to protocol states
|
|
152
|
+
const stateMap = {
|
|
153
|
+
Backlog: "pending",
|
|
154
|
+
"In Progress": "running",
|
|
155
|
+
Review: "running",
|
|
156
|
+
Testing: "running",
|
|
157
|
+
Done: "completed",
|
|
158
|
+
Failed: "failed",
|
|
159
|
+
};
|
|
160
|
+
const mappedState = stateMap[task.state] ?? "running";
|
|
161
|
+
const evidence = mappedState === "completed" || mappedState === "failed"
|
|
162
|
+
? this.buildEvidence(task, mappedState)
|
|
163
|
+
: undefined;
|
|
164
|
+
return {
|
|
165
|
+
correlationId,
|
|
166
|
+
state: mappedState,
|
|
167
|
+
progress: {
|
|
168
|
+
taskId: execution.taskId,
|
|
169
|
+
phase: task.state.toLowerCase(),
|
|
170
|
+
summary: `Task ${execution.taskId}: ${task.title} [${task.state}]`,
|
|
171
|
+
},
|
|
172
|
+
evidence,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
return {
|
|
177
|
+
correlationId,
|
|
178
|
+
state: "failed",
|
|
179
|
+
evidence: {
|
|
180
|
+
taskId: execution.taskId,
|
|
181
|
+
status: "failed",
|
|
182
|
+
failureDetail: {
|
|
183
|
+
failureType: "crash",
|
|
184
|
+
attempted: "poll sprint board",
|
|
185
|
+
hypothesis: err instanceof Error ? err.message : String(err),
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async cancel(correlationId) {
|
|
192
|
+
const execution = this.executions.get(correlationId);
|
|
193
|
+
if (!execution)
|
|
194
|
+
return;
|
|
195
|
+
try {
|
|
196
|
+
await this.runSprintBoard([
|
|
197
|
+
"update",
|
|
198
|
+
"--id",
|
|
199
|
+
execution.taskId,
|
|
200
|
+
"--state",
|
|
201
|
+
"Failed",
|
|
202
|
+
"--reason",
|
|
203
|
+
"Cancelled by orchestrator",
|
|
204
|
+
]);
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
this.setExecution(correlationId, execution.taskId, "cancelled");
|
|
208
|
+
this.runningProcesses.delete(correlationId);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Run quality gates and return structured results.
|
|
213
|
+
*/
|
|
214
|
+
async runQualityGates() {
|
|
215
|
+
const gates = this.qualityGateCommand.split("&&").map((g) => g.trim());
|
|
216
|
+
const results = [];
|
|
217
|
+
for (const gate of gates) {
|
|
218
|
+
const startTime = Date.now();
|
|
219
|
+
try {
|
|
220
|
+
const { stdout, stderr } = await execFileAsync("sh", ["-c", gate], {
|
|
221
|
+
cwd: this.projectRoot,
|
|
222
|
+
timeout: 120_000,
|
|
223
|
+
});
|
|
224
|
+
results.push({
|
|
225
|
+
gate: gate.split(" ").pop() ?? gate,
|
|
226
|
+
command: gate,
|
|
227
|
+
exitCode: 0,
|
|
228
|
+
passed: true,
|
|
229
|
+
output: (stdout + stderr).slice(0, 2000),
|
|
230
|
+
durationMs: Date.now() - startTime,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
const execErr = err;
|
|
235
|
+
results.push({
|
|
236
|
+
gate: gate.split(" ").pop() ?? gate,
|
|
237
|
+
command: gate,
|
|
238
|
+
exitCode: execErr.code ?? 1,
|
|
239
|
+
passed: false,
|
|
240
|
+
output: ((execErr.stdout ?? "") + (execErr.stderr ?? "")).slice(0, 2000),
|
|
241
|
+
durationMs: Date.now() - startTime,
|
|
242
|
+
});
|
|
243
|
+
break; // Stop on first failure
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return results;
|
|
247
|
+
}
|
|
248
|
+
// ─── Private helpers ─────────────────────────────────────────────────────
|
|
249
|
+
async runSprintBoard(args) {
|
|
250
|
+
return execFileAsync("node", [this.sprintBoardPath, ...args], {
|
|
251
|
+
cwd: this.projectRoot,
|
|
252
|
+
timeout: 30_000,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
buildEvidence(task, status) {
|
|
256
|
+
const evidence = {
|
|
257
|
+
taskId: task.id,
|
|
258
|
+
status,
|
|
259
|
+
};
|
|
260
|
+
if (status === "failed" && task.failureDetail) {
|
|
261
|
+
evidence.failureDetail = {
|
|
262
|
+
failureType: task.failureDetail.failureType,
|
|
263
|
+
attempted: task.failureDetail.attempted,
|
|
264
|
+
hypothesis: task.failureDetail.hypothesis,
|
|
265
|
+
missingContext: task.failureDetail.missingContext,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
return evidence;
|
|
269
|
+
}
|
|
270
|
+
async dispose() {
|
|
271
|
+
this.runningProcesses.clear();
|
|
272
|
+
await super.dispose();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=va-auto-pilot-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"va-auto-pilot-adapter.js","sourceRoot":"","sources":["../../src/adapter/va-auto-pilot-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* va-agent-protocol — Universal Agent Task Protocol
|
|
3
|
+
*
|
|
4
|
+
* The USB interface for CLI agents.
|
|
5
|
+
*/
|
|
6
|
+
export type { TaskUnit, TaskContext, Pitfall, Priority, InputRef, OutputContract, AgentCapability, AgentInterface, AgentConstraints, InterfaceType, ModelRequirement, TaskState, StateTransition, TaskExecution, Evidence, EvidenceStatus, Artifact, ArtifactType, GateResult, GateType, GateSeverity, FailureDetail, FailureType, DimensionFeedback, BlockReason, BlockType, ProtocolMessage, MessageType, MessagePayload, DispatchPayload, AcceptedPayload, ProgressPayload, ProgressLog, CompletedPayload, FailedPayload, BlockedPayload, CancelPayload, } from "./types/index.js";
|
|
7
|
+
export { PROTOCOL_NAME, PROTOCOL_VERSION, VALID_TRANSITIONS, createMessage, isValidTransition, isInputRef, generateCorrelationId, } from "./types/index.js";
|
|
8
|
+
export type { Logger } from "./utils/logger.js";
|
|
9
|
+
export { consoleLogger, noopLogger } from "./utils/logger.js";
|
|
10
|
+
export type { AgentAdapter, DispatchResult, PollResult, } from "./adapter/agent-adapter.js";
|
|
11
|
+
export { BaseAdapter } from "./adapter/agent-adapter.js";
|
|
12
|
+
export { VaAutoPilotAdapter, type VaAutoPilotAdapterOptions, } from "./adapter/va-auto-pilot-adapter.js";
|
|
13
|
+
export { CodexAdapter, type CodexAdapterOptions, } from "./adapter/codex-adapter.js";
|
|
14
|
+
export { AgentRegistry, type RegisteredAgent, } from "./orchestrator/registry.js";
|
|
15
|
+
export { Scheduler, type ScheduleResult, type ScheduleDecision, type ScheduleRejection } from "./orchestrator/scheduler.js";
|
|
16
|
+
export { Orchestrator, type OrchestratorOptions, } from "./orchestrator/orchestrator.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAEV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,cAAc,EAEd,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAEhB,SAAS,EACT,eAAe,EACf,aAAa,EAEb,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,SAAS,EAET,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,aAAa,EACb,KAAK,eAAe,GACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAE5H,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,gCAAgC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* va-agent-protocol — Universal Agent Task Protocol
|
|
3
|
+
*
|
|
4
|
+
* The USB interface for CLI agents.
|
|
5
|
+
*/
|
|
6
|
+
export { PROTOCOL_NAME, PROTOCOL_VERSION, VALID_TRANSITIONS, createMessage, isValidTransition, isInputRef, generateCorrelationId, } from "./types/index.js";
|
|
7
|
+
export { consoleLogger, noopLogger } from "./utils/logger.js";
|
|
8
|
+
export { BaseAdapter } from "./adapter/agent-adapter.js";
|
|
9
|
+
export { VaAutoPilotAdapter, } from "./adapter/va-auto-pilot-adapter.js";
|
|
10
|
+
export { CodexAdapter, } from "./adapter/codex-adapter.js";
|
|
11
|
+
// ─── Orchestrator ────────────────────────────────────────────────────────────
|
|
12
|
+
export { AgentRegistry, } from "./orchestrator/registry.js";
|
|
13
|
+
export { Scheduler } from "./orchestrator/scheduler.js";
|
|
14
|
+
export { Orchestrator, } from "./orchestrator/orchestrator.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgDH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EACL,kBAAkB,GAEnB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,YAAY,GAEb,MAAM,4BAA4B,CAAC;AAEpC,gFAAgF;AAChF,OAAO,EACL,aAAa,GAEd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAsE,MAAM,6BAA6B,CAAC;AAE5H,OAAO,EACL,YAAY,GAEb,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator — the core dispatch loop.
|
|
3
|
+
*
|
|
4
|
+
* Reads task queue → matches to agents → dispatches → collects results.
|
|
5
|
+
*
|
|
6
|
+
* Design:
|
|
7
|
+
* - Polling-based (v0.1): orchestrator drives the loop, not event-driven
|
|
8
|
+
* - Single-threaded dispatch with async execution
|
|
9
|
+
* - Retry policy is configurable
|
|
10
|
+
* - Human escalation on blocked tasks
|
|
11
|
+
*/
|
|
12
|
+
import type { TaskUnit, Evidence, TaskState, ProgressPayload } from "../types/index.js";
|
|
13
|
+
import type { Logger } from "../utils/logger.js";
|
|
14
|
+
import type { AgentRegistry } from "./registry.js";
|
|
15
|
+
export interface OrchestratorOptions {
|
|
16
|
+
/** Polling interval in ms. Default: 5000 */
|
|
17
|
+
pollIntervalMs?: number;
|
|
18
|
+
/** Maximum retries per task. Default: 3 */
|
|
19
|
+
maxRetries?: number;
|
|
20
|
+
/** Logger instance. Defaults to console-based logger. */
|
|
21
|
+
logger?: Logger;
|
|
22
|
+
/** Callback when a task reports progress. Called on every poll with progress data. */
|
|
23
|
+
onProgress?: (taskId: string, progress: ProgressPayload) => void;
|
|
24
|
+
/** Callback when a task needs human input. */
|
|
25
|
+
onBlocked?: (taskId: string, reason: string) => void;
|
|
26
|
+
/** Callback when a task completes. */
|
|
27
|
+
onCompleted?: (taskId: string, evidence: Evidence) => void;
|
|
28
|
+
/** Callback when a task fails permanently. */
|
|
29
|
+
onFailed?: (taskId: string, evidence: Evidence) => void;
|
|
30
|
+
/** Callback when a task is dispatched to an agent. */
|
|
31
|
+
onDispatched?: (taskId: string, agentId: string, correlationId: string) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare class Orchestrator {
|
|
34
|
+
private readonly registry;
|
|
35
|
+
private readonly scheduler;
|
|
36
|
+
private readonly log;
|
|
37
|
+
private readonly options;
|
|
38
|
+
private activeTasks;
|
|
39
|
+
private taskQueue;
|
|
40
|
+
private retryAttempts;
|
|
41
|
+
private completedTaskIds;
|
|
42
|
+
/** Stores evidence from completed tasks, keyed by task ID. Used to resolve InputRef values. */
|
|
43
|
+
private completedEvidence;
|
|
44
|
+
private pollTimer;
|
|
45
|
+
private running;
|
|
46
|
+
private tickInProgress;
|
|
47
|
+
constructor(registry: AgentRegistry, options?: OrchestratorOptions);
|
|
48
|
+
/** Enqueue tasks for dispatch. Rejects tasks involved in dependency cycles. */
|
|
49
|
+
enqueue(...tasks: TaskUnit[]): void;
|
|
50
|
+
/** Get current status of all active tasks. */
|
|
51
|
+
status(): Array<{
|
|
52
|
+
taskId: string;
|
|
53
|
+
agentId: string;
|
|
54
|
+
state: TaskState;
|
|
55
|
+
attempt: number;
|
|
56
|
+
}>;
|
|
57
|
+
/** Number of tasks in queue + active. */
|
|
58
|
+
get pendingCount(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Start the orchestration loop.
|
|
61
|
+
* Dispatches queued tasks and polls active ones.
|
|
62
|
+
*/
|
|
63
|
+
start(): void;
|
|
64
|
+
/** Stop the orchestration loop. */
|
|
65
|
+
stop(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Dispatch a single task immediately (bypasses queue).
|
|
68
|
+
* Returns the correlation ID.
|
|
69
|
+
*/
|
|
70
|
+
dispatchNow(task: TaskUnit): Promise<string | null>;
|
|
71
|
+
/**
|
|
72
|
+
* Unblock a task that is in "blocked" state.
|
|
73
|
+
* Transitions it back to "running" and optionally forwards a resolution
|
|
74
|
+
* string to the adapter (if the adapter supports it).
|
|
75
|
+
*/
|
|
76
|
+
unblock(correlationId: string, resolution?: string): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Cancel a running task.
|
|
79
|
+
*/
|
|
80
|
+
cancelTask(correlationId: string): Promise<void>;
|
|
81
|
+
private tick;
|
|
82
|
+
private dispatchQueued;
|
|
83
|
+
private pollActive;
|
|
84
|
+
private handlePollResult;
|
|
85
|
+
/**
|
|
86
|
+
* Detect dependency cycles among the given tasks plus already-queued tasks.
|
|
87
|
+
* Returns a set of task IDs that are involved in cycles.
|
|
88
|
+
*/
|
|
89
|
+
private detectCycles;
|
|
90
|
+
/**
|
|
91
|
+
* Resolve InputRef values in task.inputs using completed task evidence.
|
|
92
|
+
* Static values are passed through unchanged. InputRef values are replaced
|
|
93
|
+
* with the actual output from the referenced task.
|
|
94
|
+
*/
|
|
95
|
+
private resolveInputs;
|
|
96
|
+
/** Enrich a task with pitfall from its previous failure (for retry). */
|
|
97
|
+
private enrichWithPitfall;
|
|
98
|
+
/** Shut down: stop loop and dispose all adapters. */
|
|
99
|
+
shutdown(): Promise<void>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|